pscl/0000755000175100001440000000000011766024317011240 5ustar hornikuserspscl/MD50000644000175100001440000001615011766024317011553 0ustar hornikusers6e55e6571f5729f76216ca3212ad5686 *COPYRIGHTS 4d51503944c3c022c1c4125d45f2e5d0 *DESCRIPTION f6d779a47ad2a560d95384f8f21f6ed9 *NAMESPACE 0d31362755cad3e709c6ffe6cddda5b5 *NEWS e4141b58125086fe7a925a18a27fbf13 *R/betaHPD.r fa1ccedd12e25d0f4b57c837eee688c5 *R/dropRollCall.r 9136707d4c7f8400c1581139132014eb *R/dropUnanimous.r 2d2ad2f4dd964d982bfb1b039913a847 *R/extractVotes.r 3a3b87569b3f7fbd008cd1d6553fdb32 *R/hello.r a68a2ed5e435379d9dbabf719ae32701 *R/hitmiss.R ed0e60f8f2df4e1f70be74fdff483bd0 *R/hurdle.R 826cd8a86151c764f6179b63f252c5cf *R/ideal.r 24cfd3cf6b0498e16ab9a08a5ed63fd4 *R/idealHelper.r 57c42afc03bc7b48bf57aad15e6b5696 *R/igamma.r 1069285f3fe6835578a863a1d05ab8db *R/margins.rollcall.r 7f33ab0717237682733911d1f50370b2 *R/ntable.R 93c40e4a84b0d2c4db72b7bb79b26a45 *R/odTest.R 2ccee1a9ff1cb45ad9c41aa072876814 *R/pi.r aea47b7871d6bb1fce7c9cc57b864a75 *R/plot.ideal.r e0d535a36192a68399200a5d7b2a43bd *R/postProcess.r 6b47bc9b373b1187662fef8941e5e91a *R/predict.ideal.r d3423d8e4fb2d372947e30b5fbf0e0b1 *R/predprob.R 106f115dd003c08e60f45f43c75a3088 *R/predprob.glm.R a14694458a410c3ff8fd70647009f54f *R/pseudoRSq.R fa7303f57d5c336c47f05ec5d09f4175 *R/readKH.r 38612c0cdb48624c5f8e3cb0e2c753c4 *R/restrict.ideal.r 2dbbefb6f9c0b016c711dd8d3a270884 *R/rollcall.r 2327c6ca8e1f51b6c4c594a4d8ddcdec *R/seatsVotes.R 8181536f4cdf5dd0217ad9ead60c3546 *R/summary.ideal.r 0202cd83b23bb8c999f9d270f6e210a9 *R/toMCMC.r bb44e8325e20f4a6a6e17b1346372eff *R/vuong.R 9aefa6635344ef8c977e224805ded336 *R/zeroinfl.R bdfbae70de1517193e1dfb8740fe01e8 *R/zzz.R 53313b6f0b69be68a1fc8770c9ef7eb0 *README 860c7a4542ca222f8a3eaf80940fb625 *TODO 48d5186bc1c850ca764a4428fed72db9 *data/AustralianElectionPolling.rda c00d0a7d9afc7f549864d9a1c1acc905 *data/AustralianElections.rda 1fd7bdaf9dc34c6a0f335f5b7e45c255 *data/EfronMorris.rda 55d9d1b1379537b08ea76b4334c345f3 *data/RockTheVote.rda 270a8877abcc0eba69a2d4953961fb06 *data/UKHouseOfCommons.rda f915a5e3e05397653b34f4d496b0a289 *data/absentee.rda 33919d0bbc3570d4a99bae9d1823a374 *data/admit.rda 9bf4f0eae9528dedca5f6aeab65cb552 *data/bioChemists.rda a1acc98d25d8a34c564522497a6ddc4a *data/ca2006.rda d60b096feabfbb58999ff68355f8faeb *data/iraqVote.rda a37e4bfd97430c9ea022b616102e2c36 *data/nj07.rda 010a897b9ed96c17484aee8378c27a9a *data/partycodes.rda 4bba832e5f3fe5b936d8a05bfcce9fd5 *data/politicalInformation.rda 47f4a8c0c38c7240989f2574ebb8bdc6 *data/presidentialElections.rda 00a6f68d522e345991ba69ca93ddb171 *data/prussian.rda 773fa6967a9aa1ec5a3e56cfbc60cc7e *data/s109.rda b51d0806c46e14ed3661fb47d1048087 *data/sc9497.rda 713f3c337726d96eb138ef220289a4d8 *data/state.info.rda d7638296db19c4ba7de8ffa89d4d144c *data/unionDensity.rda 497a2fb245ca5588e562ba3efa9fd73f *data/vote92.rda b1684d7631e2aaf9b870b79adae6832f *inst/CITATION 73fd5542d60b3c0afdf6fd36f0a55ebb *inst/doc/DebTrivedi.rda f0b2acaed3829613387d308477b32cfb *inst/doc/countreg.Rnw 5fbb807bd14a6fa797d43474e73009bb *inst/doc/countreg.bib 492f73850a1b7886092f88d6367254ea *inst/doc/countreg.pdf 1f374780d3fdab077448b3f8c8ed4535 *man/AustralianElectionPolling.Rd 4c7220ae568fc8650e5a083ecfe61751 *man/AustralianElections.Rd 413c8bb8c2a97bf96a086752b64f9727 *man/EfronMorris.Rd 8d936782297f143d7b583f58fc5b6ac7 *man/RockTheVote.Rd e530063893fe76e74d0bce2443647932 *man/UKHouseOfCommons.Rd c129da4f0e4ec6908b9531e176bcc34e *man/absentee.Rd 9f58b0a319641b8780d6717b4189262c *man/admit.Rd 21e2df080979a911fe55565ee1cbb02f *man/betaHPD.Rd 67cb83cb4c84b23f9601d663877deebf *man/bioChemists.Rd 97530d29c9ef5df8617be6703bbcb364 *man/ca2006.Rd 83a1c4252ad2a97f2701495bd0d2d282 *man/computeMargins.Rd b20779e918ed3190c82eb19a25aab843 *man/constrain.items.Rd cde2f4e188fbed3a385e6a687faf15b5 *man/constrain.legis.Rd 3332b1e2c6825660602c04ad75f6392d *man/convertCodes.Rd 5a954aadd19f2814e98c8848232de93e *man/dropRollCall.Rd 1bfa8bbb776eeae989dcb4ffa590a156 *man/dropUnanimous.Rd 2b7432e7385f3582d701153569a1e89f *man/extractRollCallObject.Rd a20a016755514fd36ab11b3ec8ce07d4 *man/hitmiss.Rd edc14a2d7f63d105e16a7224ea866e2b *man/hurdle.Rd a2cdd121c20655dbec00738598efed1a *man/hurdle.control.Rd a2fca81930e1f2dc594a7a551bb6488f *man/hurdletest.Rd 33585828c1fea3777ade0fb9fc8a9de5 *man/ideal.Rd 8c6bb8a7e10235c854ebbc2456b69bab *man/idealToMCMC.Rd f18d51d590ed9904dfe6e41571fe3903 *man/igamma.Rd 532e377d3f632d4d8d467734b66a7c34 *man/iraqVote.Rd ad0ccd84450a594df90119fa3ef8461e *man/nj07.Rd 078b921a42e58dd7330c8df04d127fed *man/ntable.Rd a370eb5db65f4fc1aefa6e807facf22e *man/odTest.Rd ec2940ca232be004fd6148651ce42dbd *man/pR2.Rd 99951244af04af9a168419c38096b60b *man/partycodes.Rd 549c790a485bfabb8255f84012bc67f6 *man/plot.ideal.Rd 32f60d2b0f1d85b2947891731567f17a *man/plot.predict.ideal.Rd cd69945b628a1030c3a361b23b04d75a *man/plot.seatsVotes.Rd 28363c6cffcd612ae93335e9abd066ef *man/politicalInformation.Rd 7a9135f5914b656bc521f8f3333856bf *man/postProcess.Rd 589a61aaef2ea8a77cada485036f1685 *man/predict.hurdle.Rd b2ce558820a4ad6140fc82be663d0b37 *man/predict.ideal.Rd d43b9cc311c2a17ff678c6b1e2fa95e8 *man/predict.zeroinfl.Rd 2cc067fd655c891057604ddecd7f7be2 *man/predprob.Rd 6f0d72cddc3d45b83d09074b77aa7e48 *man/predprob.glm.Rd 9939090df9d59afebb2e2948657c3bf2 *man/predprob.ideal.Rd b72bec49edb1288224e0b08cf484d4e9 *man/presidentialElections.Rd 40b952f533b01527691b62c22fa1b757 *man/prussian.Rd f2e85675a400d5926d06728fd8da5867 *man/readKH.Rd 3ed90ebe8e28b86cfff88c7b9d3a1d1f *man/rollcall.Rd a7eef4fbf81a2e82d8f9d537c99c1811 *man/s109.Rd 020d6e0155cef909fe932536998bc684 *man/sc9497.Rd b72ce8933d92ee28c1a4fa7cf7eb6b6e *man/seatsVotes.Rd 23bff5995d683d5bf95bce59ca47fa86 *man/simpi.Rd c351971ed35a4a7c1e81d26048e239a9 *man/state.info.Rd 09ea85f6b8ef9bfa80769c827be48770 *man/summary.ideal.Rd 69d21844fd8dd6c2a445302c84d210ff *man/summary.rollcall.Rd b997e43520c34b348b421bc09ab0f900 *man/tracex.Rd 2531fcd99d3935897ec347c7d298b84e *man/unionDensity.Rd 77fc48107d0d11045b2db0538a11c58f *man/vectorRepresentation.Rd e98499c1ce4c6b994fa946375f650bfb *man/vote92.Rd ff3f06cb610af7bb183235be14b16662 *man/vuong.Rd 0b67233ce3f099152201d376e3adacd9 *man/zeroinfl.Rd a71cbe2fdb4bfc8d678f4fbfaa36f6ca *man/zeroinfl.control.Rd 411afc0af4307234a6659002f8cb9a5f *src/IDEAL.c c1242e2c0dc49254b3103abcaa3fce43 *src/bayesreg.c 84fc8d596f9ed6fff436213f5aa0176b *src/check.c 7827d05ccbfda37a6770d1893ad2657a *src/chol.c 54b5d46b82a2d8d1b711265ae6976ca7 *src/chol.h 27ff6dd23ef01d1b20ebf152634ab2c1 *src/crossprod.c b5cfc01c17e0d459aea4d5c7a4324059 *src/dmatTOdvec.c 641d96ada563d7b14e368d438c82100b *src/dtnorm.c 535fd3e635d6d566fe6b826003974385 *src/dvecTOdmat.c e2caa6a2b8babf8fbddf2a38162dce82 *src/gaussj.c a0ce9dacf3232a1b44ae9751b3576157 *src/ideal.h 14d39512d67823bb714f49a60271612e *src/pi.c 2ef159d3f034d158763a31e44c334d21 *src/predict.c 75a219a7638c2da5c7412785e9de37cf *src/printmat.c 6481e2946861c489decc8f5cf927a929 *src/renormalize.c 6df18e9e98db01a252f5944670fa0366 *src/rigamma.c 3a9b673c687b42a9a32fda8ee46b0ccc *src/rmvnorm.c c0fdc0b2f60d730bba7f5fbd6170d4f1 *src/updateb.c 2751e0771f01014a0d856d4057a8ca34 *src/updatex.c 13831bf39bc2ae096899c94239770c9b *src/updatey.c 419ed48fd112dd27f0dea33ed73b0d5c *src/util.c 4531f2dfbc17c8f2f692de0e7c97b7c7 *src/util.h 5967f2c183b3301343fe317875a181bc *src/xchol.c 21805fdd82f57d48144b119f84e73219 *src/xreg.c pscl/TODO0000644000175100001440000000147711507177506011743 0ustar hornikusersrank ordering and inference with ideal output (11/14/2006; pauljtran@gmail.com) vignette and Sweave etc in doc directory (07/10/2006) easy generation of simulated roll call data (07/10/2006); but see wnominate::generateTestData Plot discrimination parameters against closeness of votes, lack of fit diagnostic (07/10/2006) Concatenating rollcall objects (06/23/2006) Check for redundancies in roll calls (06/23/2006) Create a boxplot method for class ideal, ideal points by party (06/23/2006) Create a plot method for class rollcall (principal components) (06/23/2006) Other fitting options in ideal (principal components, NOMINATE) User-specified colors in plot.ideal More control of labels in plot.ideal Let users append additional MCMC output to an earlier run on the same data (add need some sanity checks for this) pscl/src/0000755000175100001440000000000011765762344012037 5ustar hornikuserspscl/src/xreg.c0000644000175100001440000000075311765762344013155 0ustar hornikusers/* form regressors for update of beta * * simon jackman, dept of political science, * stanford university */ #include #include #include "util.h" #include "ideal.h" void makexreg(double **xreg, double **x, int n, int d, int q) { int i,j; for (i=0;i #include "util.h" #include "chol.h" void xchol(double **aorig, double **chol, int n, double *p, double **a) { int i,j; //double **a, *p; // p = dvector(n); // a = dmatrix(n,n); /* printf("xchol: n = %d\n",n); */ /* printf("xchol: starting reassignments\n"); */ for(i=0;i j) ? a[i][j] : ( i == j ? p[i] : 0.0)); if (i > j) chol[i][j]=a[i][j]; else chol[i][j]=(i ==j ? p[i] : 0.0); } } // free(p); // free_dmatrix(a,n); } pscl/src/util.h0000644000175100001440000000047311765762344013171 0ustar hornikusersvoid memallerror(void); void calcerror(char error_text[]); int *ivector(long n); double *dvector(long n); double **dmatrix(long nr, long nc); int **imatrix(long nr, long nc); // void free_ivector(int *v); // void free_dvector(double *v); void free_dmatrix(double **m, long nr); void free_imatrix(int **m, long nr); pscl/src/util.c0000644000175100001440000000262711765762344013167 0ustar hornikusers#include #include #include #include void memallocerror() { error("Memory allocation error.\n"); } void calcerror(char error_text[]) { error(error_text); } int *ivector(long n) /* allocate an int vector with subscript range v[nl..nh] */ { int *v; v=(int *)malloc(n*sizeof(int)); if (!v) memallocerror(); return v; } double *dvector(long n) /* allocate a double vector with subscript range v[nl..nh] */ { double *v; v=(double *)malloc(n*sizeof(double)); if (!v) memallocerror(); return v; } double **dmatrix(long nr, long nc) /* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */ { long i; double **m; m=(double **) malloc(nr*sizeof(double*)); if (!m) memallocerror(); for(i=0; i #include #include #include #include #include "util.h" #include "ideal.h" /* putting stuff in y star */ void updatey(double **ystar, double **y, double **x, double **beta, int n, int m, int d, int iter) { int i,j,k; double *xrow, *brow, mu, sd; sd = 1.0; // float z; for(i=0;i #include #include #include #include #include #include "util.h" #include "ideal.h" void updatex(double **ystar, int **ok, double **beta, double **x, double **xp, double **xpv, int n, int m, int d, int impute) { int i, j, k, l; double mu, var; extern double *xxprod, **xxchol, *xz, *xxp, **xxa; extern double **bpb, *xprior, **xpriormat, *xbar, **xvpost, *bpw, **w; /* Rprintf("xp 1: %d\n",xp[1][1]); Rprintf("xp 4: %d\n",xp[4][1]); Rprintf("xp 5: %d\n",xp[5][1]); Rprintf("xp 6: %d\n",xp[6][1]); Rprintf("xp 9: %d\n",xp[9][1]); printmat(xp,n,d); */ /* form dependent variable */ //w = dmatrix(n,m); for(i=0;i #include #include #include #include "util.h" #include "ideal.h" void updateb(double **ystar, int **ok, double **beta, double **xreg, double **bp, double **bpv, int n, int m, int d, int impute) { int j,k,q; extern double *bxprod, **bchol, *bz, *bbp, **bba, **xpx, **bvpost, **bpriormat, *bprior, *bbar, *xpy; q = d + 1; /* xpy = dvector(q); */ /* xpx = dmatrix(q,q); */ /* bbar = dvector(q); */ /* bprior = dvector(q); */ /* bvpost = dmatrix(q,q); */ /* bpriormat = dmatrix(q,q); */ for (j=0;j #include #include #include #include "util.h" #include "ideal.h" void rmvnorm(double *theta, double *mu, double **sigma, int k, double *xprod, double **chol, double *z, double *p, double **a) { int i,j; /* double *xprod, **chol; */ /* double *z; */ /* long idum=(-13); */ /* z = dvector(k); */ /* xprod = dvector(k); */ /* chol = dmatrix(k,k); */ //Rprintf("Ready for decomposition.\n"); xchol(sigma,chol,k,p,a); for(i=0;i #include #include #include #include #include double r_sd(double s, double df) { double root, r, g, sd; g = rchisq(df); r = s/g; root = sqrt(r); // Rprintf("r_sd: s,g, s/g = %14.4lf %14.4lf %14.4lf\n",s,g,r); //Rprintf("r_sd: how do I take the square root of something? %14.10lf\n", // sqrt(2.0)); // Rprintf("r_sd: how do I take the square root of something? %14.10lf\n", // sqrt(r)); // root = sqrt(exp(rnorm(0.0,4.0))); // root = runif(0.5,5.0); return(root); } pscl/src/renormalize.c0000644000175100001440000000015711765762344014535 0ustar hornikusersvoid renormalizeVector(double *z, int p, double m) { int j; for(j=0;j #include "util.h" #include void printmat(double **mat, int nr, int nc) { int i,j; for(i=0;i #include #include #include #include #include void predictCI(SEXP x, SEXP beta, SEXP cutoff) { } pscl/src/pi.c0000644000175100001440000000046511765762344012620 0ustar hornikusers#include #include #include #include #include #include void simpi(int *n, int *z) { int i; double d; GetRNGstate(); for(i=0;i<*n;i++){ d = hypot(unif_rand(),unif_rand()); if(d<1.0) (*z)++; } PutRNGstate(); return; } pscl/src/ideal.h0000644000175100001440000000403211765762344013265 0ustar hornikusersvoid usage(); double check(double **data, int **ok, int n, int m); double dtnorm(double *mu, double *sd, double *y); void updatex(double **ystar, int **ok, double **beta, double **x, double **xp, double **xpv, int n, int m, int d, int impute); void makexreg(double **xreg, double **x, int n, int d, int q); void updateb(double **ystar, int **ok, double **beta, double **xreg, double **bp, double **bpv, int n, int m, int d, int impute); void updatey(double **ystar, double **y, double **x, double **beta, int n, int m, int d, int iter); void choldc(double **a, int n, double p[]); void xchol(double **aorig, double **chol, int n, double *p, double **a); void printmat(double **mat, int nr, int nc); void rmvnorm(double *theta, double *mu, double **sigma, int k, double *xprod, double **chol, double *z, double *p, double **a); void rmvnorm_m(double **theta, double *mu, double **chol, int k); void crossprod(double **x, int n, int p, double **xpx); void crossprodslow(double **x, int n, int p, double **xpx); void crossxy(double **x, double *y, int n, int k, double *xpy); void crossxyd(double **x, double *y, int n, int k, double *xpy); void crossxyi(double **beta, double **w, int m, int d, int p, double *bpw); void crossxyj(double **x, double **y, int n, int k, int p, double *xpy); void crossall(double **x, double **ystar, int n, int d, int j, double **xpx, double *xpy); void crosscheck(double **x, double **ystar, int **ok, int n, int d, int j, double **xpx, double *xpy); void crosscheckx(double **beta, double **w, int **ok, int m, int d, int i, double **bpb, double *bpw); void gaussj(double **a, int n, double *b, int m); void bayesreg(double **xpx, double *xpy, double *bp, double **priormat, double *bpost, double **vpost, int p); void bayesregFull(double **xpx, double *xpy, double sd, double *bp, double **priormat, double *bpost, double **vpost, int p); void renormalizeVector(double *z, int p, double m); double r_sd(double s, double df); pscl/src/IDEAL.c0000644000175100001440000001732211765762344013026 0ustar hornikusers#include #include #include #include #include #include #include #include #include "util.h" #include "ideal.h" double**dvecTOdmat(double *vtr, double **dmtrx, int rows, int columns); double *dmatTOdvec(double *vtr, double **dmtrx, int rows, int columns); double *xxprod, **xxchol; double *xz; double *bxprod, **bchol; double *bz; double *bbp, **bba; double *xxp, **xxa; double **bpb, *xprior, **xpriormat, *xbar, **xvpost, *bpw, **w; double **xpx, **bvpost, **bpriormat, *bprior, *bbar, *xpy; void IDEAL(int *n1, int *m1, int *d1, double *y1, int *maxiter1, int *thin1, int *impute1, int *mda, double *xpriormeans1, double *xpriorprec1, double *bpriormeans1, double *bpriorprec1, double *xstart1, double *bstart1, double *xoutput, double *boutput, int *burnin1, int *usefile, int *bsave, char **filename1, int *verbose1) { int e, xocursor, bocursor, xlength, blength, q, nm, iter; int i, j, k; int inloop, **ok, burnin, n, m, d, maxiter, thin, impute, verbose; double **ystar, **x, **xreg, **y, **beta, **bp, **bpv, iterPerCent, s, sd; double **xp, **xpv, *xtemp, *btemp, nm_doub; FILE *ofp; // extern double **bpb, *xprior, **xpriormat, *xbar, **xvpost, *bpw, **w; // extern double **xpx, **bvpost, **bpriormat, *bprior, *bbar, *xpy; n=*n1; m=*m1; d=*d1; maxiter=*maxiter1; thin=*thin1; impute=*impute1; verbose=*verbose1; burnin=*burnin1; /*Creating the matrices we'll need*/ iter = 0; /* initialize iter count */ nm = n * m; q = d + 1; /* item parameters, per item */ y = dmatrix(n,m); /* roll call data */ sd = 1.0; /* standard deviation latent scale for MDA */ ystar = dmatrix(n,m); /* latent utility differential */ beta = dmatrix(m,q); /* item parameters */ bp = dmatrix(m,q); /* initialize prior means, item parameters */ bpv = dmatrix(m,q); /* initialize prior variances, item parameters */ x = dmatrix(n,d); /* latent traits */ xreg = dmatrix(n,q); /* regressors for updates of beta */ xp = dmatrix(n,d); /* initialize prior means, latent traits */ xpv = dmatrix(n,d); /* initialize prior variances, latent traits */ ok = imatrix(n,m); /* initialize ok indicator matrix */ if (*usefile == 1) { ofp = fopen(R_ExpandFileName(*filename1), "a"); if (ofp == NULL) { calcerror("Can't open outfile file!\n"); } } /* get random number seed */ GetRNGstate(); /*for error checking: the parameters*/ /*printf("Checking parameters\n"); printf("n: %d, m: %d, d: %d, maxiter: %d, thin: %d, impute: %d, meanzero: %d\n", n, m, d, maxiter, thin, impute, meanzero); printf("\ny vector\n"); for (a=0; a < nm; a++) { printf("y1[%d] %g\n", a, y1[a]); } printf("\nbpriormeans1 vector\n"); for(a=0; a maxiter) /* are we done? */ break; //Rprintf("\niter: %d\n",iter); updatey(ystar,y,x,beta, n,m,d,iter); //Rprintf("past update y\n"); updatex(ystar,ok,beta, x,xp,xpv,n,m,d,impute); //Rprintf("past updatex\n"); makexreg(xreg,x,n,d,q); //Rprintf("past makexreg\n"); updateb(ystar,ok,beta,xreg, bp,bpv,n,m,d,impute); //Rprintf("past updateb\n"); R_CheckUserInterrupt(); /* check for user interrupt */ } /**********************************************************************/ /*I N P U T I N G N E W V A L U E S I N T O E X P O R T V E C S*/ /**********************************************************************/ if (iter>=burnin) { // the x matrix into a vector for this iteration if (*usefile == 1) { dmatTOdvec(xtemp, x, n, d); //replace with function call fprintf(ofp, "%d", iter); for (e = 0; e < xlength; e++) { fprintf(ofp, ",%f", xtemp[e]); } if (*bsave != 1) { fprintf(ofp,"\n"); } } else { dmatTOdvec(xtemp, x, n, d); for (e = 0; e < xlength; e++) { xocursor++; xoutput[xocursor] = xtemp[e]; } } //the b matrix into vector form for this iteration if (*bsave == 1) { if (*usefile == 1) { // this is not the most efficient way to do this dmatTOdvec(btemp, beta, m, q); //replace with function call for (e = 0; e < blength; e++) { fprintf(ofp, ",%f", btemp[e]); } fprintf(ofp,"\n"); } else { dmatTOdvec(btemp, beta, m, q); for (e = 0; e < blength; e++) { bocursor++; boutput[bocursor] = btemp[e]; } } } } } PutRNGstate(); if (*usefile == 1) { fclose(ofp); } return; } pscl/src/gaussj.c0000644000175100001440000000347111765762344013504 0ustar hornikusers#include #include #include #include #include "util.h" #define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} /***************************************************************************** ** Linear equation solution by Gauss-Jordan elimination. ** Given the system Ax=b, this routine returns x in b and ** A^{-1} in A. Source: _NR_ 2.1, p39. ****************************************************************************/ void gaussj(double **a, int n, double *b, int m) { int *indxc, *indxr, *ipiv; int i,icol,irow,j,k,l,ll; double big,dum,pivinv,temp; indxc=ivector(n); indxr=ivector(n); ipiv=ivector(n); for (j=0;j= big) { big=fabs(a[j][k]); irow=j; icol=k; } } else if (ipiv[k] > 1) calcerror("Error in Gauss-Jordan elimination: Singular Matrix\n"); } ++(ipiv[icol]); if (irow != icol) { for (l=0;l=0;l--) { if (indxr[l] != indxc[l]) for (k=0;k #include #include #include #include "util.h" static double zero = 0.0; static double arg = 0.5; static double iarg = 0.5; static double pupper = 0.5; static double one = 1.0; double dtnorm(double *mu, double *sd, double *y) { double f, z; double norm=0; int loop=1; if (*y==0.0){ z = *mu/(*sd); if(z<1.6){ /* try rejection sampling */ do { norm = rnorm(*mu, *sd); } while (norm >= 0.0); } else{ /* otherwise use inverse-uniform method, z is always positive */ /* work with natural logarithms to avoid underflows */ f = -exp_rand(); pupper = pnorm(z,zero,one,0,1); arg = f + pupper; iarg = qnorm(arg,zero,one,1,1); norm = *mu + (*sd)*iarg; } } else{ /* Y=1 */ /* try rejection sampling */ z = *mu/(*sd); if(z>-1.6){ do { norm = rnorm(*mu, *sd); } while (norm <= 0.0); } else{ /* otherwise use inverse-uniform method, n.b., z is always neg */ /* work with natural logarithms to avoid underflows */ f = -exp_rand(); pupper = pnorm(z,zero,one,1,1); arg = f + pupper; iarg = qnorm(arg,zero,one,0,1); norm = *mu + (*sd)*iarg; } } return(norm); } pscl/src/dmatTOdvec.c0000644000175100001440000000067311765762344014243 0ustar hornikusers/* NAME: dmatTOdvec * DESCRIPTION: Takes a dmatrix and puts it in dvector form where * each col is stored after each other. The dvector has elements * vtr[0] to vtr[rows * columns -1] */ double*dmatTOdvec(double *vtr, double **dmtrx, int rows, int columns) { int i, j, counter; counter = 0; for(j=0; j < columns; j++) { for (i=0; i < rows; i++) { vtr[counter] = dmtrx[i][j]; counter++; } } return vtr; } pscl/src/crossprod.c0000644000175100001440000001027111765762344014222 0ustar hornikusers/***************************************************************** ** ** cross-products routine ** ** given a n-by-k matrix x, write x'x (k-by-k matrix) ** ** simon jackman, dept of political science, stanford university ** feb 2000 *****************************************************************/ void crossprod(double **x, int n, int p, double **xpx) { int i, j, k; double *xrow; for (j=0;j #include #include "util.h" /* from NR, p97: * Given a positive-definite symmetric matrix a[1..n][1..n], this * routine constructs its Cholesky decomposition, A = LL'. On input, * only the upper triangle of A need be given; it is not modified. * The Cholesky factor L is returned in the lower triangle of A, * except for its diagonal elements which are returned in p[1..n] */ void choldc(double **a, int n, double p[]) { void calcerror(char error_text[]); int i,j,k; double sum; for (i=0;i=0;k--) sum -= a[i][k]*a[j][k]; if (i == j) { if (sum <= 0.0) calcerror("Cholesky decomposition error: Matrix is not positive definite\n"); p[i]=sqrt(sum); } else a[j][i]=sum/p[i]; } } } pscl/src/check.c0000644000175100001440000000317111765762344013262 0ustar hornikusers/**************************************************************** ** report some simple summary statistics for the roll call data ** ** simon jackman, dept of political science, stanford university ** feb 2000 ****************************************************************/ #include #include #include #include #include "util.h" double check(double **data, int **ok, int n, int m) { int i, j; double *yeas, *nummiss, *inummiss, *x, nok; yeas = dvector(m); x = dvector(n); nummiss = dvector(m); inummiss = dvector(n); for(i=0;i #include #include #include "util.h" #include "ideal.h" void bayesreg(double **xpx, double *xpy, double *bp, double **priormat, double *bpost, double **vpost, int p) { int j,k; double *bpb; bpb = dvector(p); for(j=0;j= 1 loglik0 <- log( phi + exp( log(1-phi) - mu ) ) ## -mu = dpois(0, lambda = mu, log = TRUE) loglik1 <- log(1-phi) + dpois(Y, lambda = mu, log = TRUE) ## collect and return loglik <- sum(weights[Y0] * loglik0[Y0]) + sum(weights[Y1] * loglik1[Y1]) loglik } ziNegBin <- function(parms) { ## count mean mu <- as.vector(exp(X %*% parms[1:kx] + offsetx)) ## binary mean phi <- as.vector(linkinv(Z %*% parms[(kx+1):(kx+kz)] + offsetz)) ## negbin size theta <- exp(parms[(kx+kz)+1]) ## log-likelihood for y = 0 and y >= 1 loglik0 <- log( phi + exp( log(1-phi) + suppressWarnings(dnbinom(0, size = theta, mu = mu, log = TRUE)) ) ) loglik1 <- log(1-phi) + suppressWarnings(dnbinom(Y, size = theta, mu = mu, log = TRUE)) ## collect and return loglik <- sum(weights[Y0] * loglik0[Y0]) + sum(weights[Y1] * loglik1[Y1]) loglik } ziGeom <- function(parms) ziNegBin(c(parms, 0)) gradPoisson <- function(parms) { ## count mean eta <- as.vector(X %*% parms[1:kx] + offsetx) mu <- exp(eta) ## binary mean etaz <- as.vector(Z %*% parms[(kx+1):(kx+kz)] + offsetz) muz <- linkinv(etaz) ## densities at 0 clogdens0 <- -mu dens0 <- muz * (1 - as.numeric(Y1)) + exp(log(1 - muz) + clogdens0) ## working residuals wres_count <- ifelse(Y1, Y - mu, -exp(-log(dens0) + log(1 - muz) + clogdens0 + log(mu))) wres_zero <- ifelse(Y1, -1/(1-muz) * linkobj$mu.eta(etaz), (linkobj$mu.eta(etaz) - exp(clogdens0) * linkobj$mu.eta(etaz))/dens0) colSums(cbind(wres_count * weights * X, wres_zero * weights * Z)) } gradGeom <- function(parms) { ## count mean eta <- as.vector(X %*% parms[1:kx] + offsetx) mu <- exp(eta) ## binary mean etaz <- as.vector(Z %*% parms[(kx+1):(kx+kz)] + offsetz) muz <- linkinv(etaz) ## densities at 0 clogdens0 <- dnbinom(0, size = 1, mu = mu, log = TRUE) dens0 <- muz * (1 - as.numeric(Y1)) + exp(log(1 - muz) + clogdens0) ## working residuals wres_count <- ifelse(Y1, Y - mu * (Y + 1)/(mu + 1), -exp(-log(dens0) + log(1 - muz) + clogdens0 - log(mu + 1) + log(mu))) wres_zero <- ifelse(Y1, -1/(1-muz) * linkobj$mu.eta(etaz), (linkobj$mu.eta(etaz) - exp(clogdens0) * linkobj$mu.eta(etaz))/dens0) colSums(cbind(wres_count * weights * X, wres_zero * weights * Z)) } gradNegBin <- function(parms) { ## count mean eta <- as.vector(X %*% parms[1:kx] + offsetx) mu <- exp(eta) ## binary mean etaz <- as.vector(Z %*% parms[(kx+1):(kx+kz)] + offsetz) muz <- linkinv(etaz) ## negbin size theta <- exp(parms[(kx+kz)+1]) ## densities at 0 clogdens0 <- dnbinom(0, size = theta, mu = mu, log = TRUE) dens0 <- muz * (1 - as.numeric(Y1)) + exp(log(1 - muz) + clogdens0) ## working residuals wres_count <- ifelse(Y1, Y - mu * (Y + theta)/(mu + theta), -exp(-log(dens0) + log(1 - muz) + clogdens0 + log(theta) - log(mu + theta) + log(mu))) wres_zero <- ifelse(Y1, -1/(1-muz) * linkobj$mu.eta(etaz), (linkobj$mu.eta(etaz) - exp(clogdens0) * linkobj$mu.eta(etaz))/dens0) wres_theta <- theta * ifelse(Y1, digamma(Y + theta) - digamma(theta) + log(theta) - log(mu + theta) + 1 - (Y + theta)/(mu + theta), exp(-log(dens0) + log(1 - muz) + clogdens0) * (log(theta) - log(mu + theta) + 1 - theta/(mu + theta))) colSums(cbind(wres_count * weights * X, wres_zero * weights * Z, wres_theta)) } dist <- match.arg(dist) loglikfun <- switch(dist, "poisson" = ziPoisson, "geometric" = ziGeom, "negbin" = ziNegBin) gradfun <- switch(dist, "poisson" = gradPoisson, "geometric" = gradGeom, "negbin" = gradNegBin) ## binary link processing linkstr <- match.arg(link) linkobj <- make.link(linkstr) linkinv <- linkobj$linkinv if(control$trace) cat("Zero-inflated Count Model\n", paste("count model:", dist, "with log link\n"), paste("zero-inflation model: binomial with", linkstr, "link\n"), sep = "") ## call and formula cl <- match.call() if(missing(data)) data <- environment(formula) mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action", "weights", "offset"), names(mf), 0) mf <- mf[c(1, m)] mf$drop.unused.levels <- TRUE ## extended formula processing if(length(formula[[3]]) > 1 && identical(formula[[3]][[1]], as.name("|"))) { ff <- formula formula[[3]][1] <- call("+") mf$formula <- formula ffc <- . ~ . ffz <- ~ . ffc[[2]] <- ff[[2]] ffc[[3]] <- ff[[3]][[2]] ffz[[3]] <- ff[[3]][[3]] ffz[[2]] <- NULL } else { ffz <- ffc <- ff <- formula ffz[[2]] <- NULL } if(inherits(try(terms(ffz), silent = TRUE), "try-error")) { ffz <- eval(parse(text = sprintf( paste("%s -", deparse(ffc[[2]])), deparse(ffz) ))) } ## call model.frame() mf[[1]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) ## extract terms, model matrices, response mt <- attr(mf, "terms") mtX <- terms(ffc, data = data) X <- model.matrix(mtX, mf) mtZ <- terms(ffz, data = data) mtZ <- terms(update(mtZ, ~ .), data = data) Z <- model.matrix(mtZ, mf) Y <- model.response(mf, "numeric") ## sanity checks if(length(Y) < 1) stop("empty model") if(all(Y > 0)) stop("invalid dependent variable, minimum count is not zero") if(!isTRUE(all.equal(as.vector(Y), as.integer(round(Y + 0.001))))) stop("invalid dependent variable, non-integer values") Y <- as.integer(round(Y + 0.001)) if(any(Y < 0)) stop("invalid dependent variable, negative counts") if(control$trace) { cat("dependent variable:\n") tab <- table(factor(Y, levels = 0:max(Y)), exclude = NULL) names(dimnames(tab)) <- NULL print(tab) } ## convenience variables n <- length(Y) kx <- NCOL(X) kz <- NCOL(Z) Y0 <- Y <= 0 Y1 <- Y > 0 ## weights and offset weights <- model.weights(mf) if(is.null(weights)) weights <- 1 if(length(weights) == 1) weights <- rep.int(weights, n) weights <- as.vector(weights) names(weights) <- rownames(mf) offsetx <- model_offset_2(mf, terms = mtX, offset = TRUE) if(is.null(offsetx)) offsetx <- 0 if(length(offsetx) == 1) offsetx <- rep.int(offsetx, n) offsetx <- as.vector(offsetx) offsetz <- model_offset_2(mf, terms = mtZ, offset = FALSE) if(is.null(offsetz)) offsetz <- 0 if(length(offsetz) == 1) offsetz <- rep.int(offsetz, n) offsetz <- as.vector(offsetz) ## starting values start <- control$start if(!is.null(start)) { valid <- TRUE if(!("count" %in% names(start))) { valid <- FALSE warning("invalid starting values, count model coefficients not specified") start$count <- rep.int(0, kx) } if(!("zero" %in% names(start))) { valid <- FALSE warning("invalid starting values, zero-inflation model coefficients not specified") start$zero <- rep.int(0, kz) } if(length(start$count) != kx) { valid <- FALSE warning("invalid starting values, wrong number of count model coefficients") } if(length(start$zero) != kz) { valid <- FALSE warning("invalid starting values, wrong number of zero-inflation model coefficients") } if(dist == "negbin") { if(!("theta" %in% names(start))) start$theta <- 1 start <- list(count = start$count, zero = start$zero, theta = as.vector(start$theta[1])) } else { start <- list(count = start$count, zero = start$zero) } if(!valid) start <- NULL } if(is.null(start)) { if(control$trace) cat("generating starting values...") model_count <- glm.fit(X, Y, family = poisson(), weights = weights, offset = offsetx) model_zero <- glm.fit(Z, as.integer(Y0), weights = weights, family = binomial(link = linkstr), offset = offsetz) start <- list(count = model_count$coefficients, zero = model_zero$coefficients) if(dist == "negbin") start$theta <- 1 ## EM estimation of starting values if(control$EM & dist == "poisson") { mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dpois(0, mui)) probi[Y1] <- 0 ll_new <- loglikfun(c(start$count, start$zero)) ll_old <- 2 * ll_new while(abs((ll_old - ll_new)/ll_old) > control$reltol) { ll_old <- ll_new model_count <- glm.fit(X, Y, weights = weights * (1-probi), offset = offsetx, family = poisson(), start = start$count) model_zero <- suppressWarnings(glm.fit(Z, probi, weights = weights, offset = offsetz, family = binomial(link = linkstr), start = start$zero)) mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dpois(0, mui)) probi[Y1] <- 0 start <- list(count = model_count$coefficients, zero = model_zero$coefficients) ll_new <- loglikfun(c(start$count, start$zero)) } } if(control$EM & dist == "geometric") { mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dnbinom(0, size = 1, mu = mui)) probi[Y1] <- 0 ll_new <- loglikfun(c(start$count, start$zero)) ll_old <- 2 * ll_new if(!require("MASS")) { ll_old <- ll_new warning("EM estimation of starting values not available") } while(abs((ll_old - ll_new)/ll_old) > control$reltol) { ll_old <- ll_new model_count <- suppressWarnings(glm.fit(X, Y, weights = weights * (1-probi), offset = offsetx, family = negative.binomial(1), start = start$count)) model_zero <- suppressWarnings(glm.fit(Z, probi, weights = weights, offset = offsetz, family = binomial(link = linkstr), start = start$zero)) start <- list(count = model_count$coefficients, zero = model_zero$coefficients) mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dnbinom(0, size = 1, mu = mui)) probi[Y1] <- 0 ll_new <- loglikfun(c(start$count, start$zero)) } } if(control$EM & dist == "negbin") { mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dnbinom(0, size = start$theta, mu = mui)) probi[Y1] <- 0 ll_new <- loglikfun(c(start$count, start$zero, log(start$theta))) ll_old <- 2 * ll_new if(!require("MASS")) { ll_old <- ll_new warning("EM estimation of starting values not available") } ## offset handling in glm.nb is sub-optimal, hence... offset <- offsetx while(abs((ll_old - ll_new)/ll_old) > control$reltol) { ll_old <- ll_new model_count <- suppressWarnings(glm.nb(Y ~ 0 + X + offset(offset), weights = weights * (1-probi), start = start$count, init.theta = start$theta)) model_zero <- suppressWarnings(glm.fit(Z, probi, weights = weights, offset = offsetz, family = binomial(link = linkstr), start = start$zero)) start <- list(count = model_count$coefficients, zero = model_zero$coefficients, theta = model_count$theta) mui <- model_count$fitted probi <- model_zero$fitted probi <- probi/(probi + (1-probi) * dnbinom(0, size = start$theta, mu = mui)) probi[Y1] <- 0 ll_new <- loglikfun(c(start$count, start$zero, log(start$theta))) } } if(control$trace) cat("done\n") } ## ML estimation if(control$trace) cat("calling optim() for ML estimation:\n") method <- control$method hessian <- control$hessian ocontrol <- control control$method <- control$hessian <- control$EM <- control$start <- NULL fit <- optim(fn = loglikfun, gr = gradfun, par = c(start$count, start$zero, if(dist == "negbin") log(start$theta) else NULL), method = method, hessian = hessian, control = control) if(fit$convergence > 0) warning("optimization failed to converge") ## coefficients and covariances coefc <- fit$par[1:kx] names(coefc) <- names(start$count) <- colnames(X) coefz <- fit$par[(kx+1):(kx+kz)] names(coefz) <- names(start$zero) <- colnames(Z) vc <- -solve(as.matrix(fit$hessian)) if(dist == "negbin") { np <- kx + kz + 1 theta <- as.vector(exp(fit$par[np])) SE.logtheta <- as.vector(sqrt(diag(vc)[np])) vc <- vc[-np, -np, drop = FALSE] } else { theta <- NULL SE.logtheta <- NULL } colnames(vc) <- rownames(vc) <- c(paste("count", colnames(X), sep = "_"), paste("zero", colnames(Z), sep = "_")) ## fitted and residuals mu <- exp(X %*% coefc + offsetx)[,1] phi <- linkinv(Z %*% coefz + offsetz)[,1] Yhat <- (1-phi) * mu res <- sqrt(weights) * (Y - Yhat) ## effective observations nobs <- sum(weights > 0) ## = n - sum(weights == 0) rval <- list(coefficients = list(count = coefc, zero = coefz), residuals = res, fitted.values = Yhat, optim = fit, method = method, control = ocontrol, start = start, weights = if(identical(as.vector(weights), rep.int(1L, n))) NULL else weights, offset = list(count = if(identical(offsetx, rep.int(0, n))) NULL else offsetx, zero = if(identical(offsetz, rep.int(0, n))) NULL else offsetz), n = nobs, df.null = nobs - 2, df.residual = nobs - (kx + kz + (dist == "negbin")), terms = list(count = mtX, zero = mtZ, full = mt), theta = theta, SE.logtheta = SE.logtheta, loglik = fit$value, vcov = vc, dist = dist, link = linkstr, linkinv = linkinv, converged = fit$convergence < 1, call = cl, formula = ff, levels = .getXlevels(mt, mf), contrasts = list(count = attr(X, "contrasts"), zero = attr(Z, "contrasts")) ) if(model) rval$model <- mf if(y) rval$y <- Y if(x) rval$x <- list(count = X, zero = Z) class(rval) <- "zeroinfl" return(rval) } zeroinfl.control <- function(method = "BFGS", maxit = 10000, trace = FALSE, EM = FALSE, start = NULL, ...) { rval <- list(method = method, maxit = maxit, trace = trace, EM = EM, start = start) rval <- c(rval, list(...)) if(!is.null(rval$fnscale)) warning("fnscale must not be modified") rval$fnscale <- -1 if(!is.null(rval$hessian)) warning("hessian must not be modified") rval$hessian <- TRUE if(is.null(rval$reltol)) rval$reltol <- .Machine$double.eps^(1/1.6) rval } coef.zeroinfl <- function(object, model = c("full", "count", "zero"), ...) { model <- match.arg(model) rval <- object$coefficients rval <- switch(model, "full" = structure(c(rval$count, rval$zero), .Names = c(paste("count", names(rval$count), sep = "_"), paste("zero", names(rval$zero), sep = "_"))), "count" = rval$count, "zero" = rval$zero) rval } vcov.zeroinfl <- function(object, model = c("full", "count", "zero"), ...) { model <- match.arg(model) rval <- object$vcov if(model == "full") return(rval) cf <- object$coefficients[[model]] wi <- seq(along = object$coefficients$count) rval <- if(model == "count") rval[wi, wi] else rval[-wi, -wi] colnames(rval) <- rownames(rval) <- names(cf) return(rval) } logLik.zeroinfl <- function(object, ...) { structure(object$loglik, df = object$n - object$df.residual, class = "logLik") } print.zeroinfl <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:", deparse(x$call, width.cutoff = floor(getOption("width") * 0.85)), "", sep = "\n") if(!x$converged) { cat("model did not converge\n") } else { cat(paste("Count model coefficients (", x$dist, " with log link):\n", sep = "")) print.default(format(x$coefficients$count, digits = digits), print.gap = 2, quote = FALSE) if(x$dist == "negbin") cat(paste("Theta =", round(x$theta, digits), "\n")) cat(paste("\nZero-inflation model coefficients (binomial with ", x$link, " link):\n", sep = "")) print.default(format(x$coefficients$zero, digits = digits), print.gap = 2, quote = FALSE) cat("\n") } invisible(x) } summary.zeroinfl <- function(object,...) { ## residuals object$residuals <- residuals(object, type = "pearson") ## compute z statistics kc <- length(object$coefficients$count) kz <- length(object$coefficients$zero) se <- sqrt(diag(object$vcov)) coef <- c(object$coefficients$count, object$coefficients$zero) if(object$dist == "negbin") { coef <- c(coef[1:kc], "Log(theta)" = log(object$theta), coef[(kc+1):(kc+kz)]) se <- c(se[1:kc], object$SE.logtheta, se[(kc+1):(kc+kz)]) kc <- kc+1 } zstat <- coef/se pval <- 2*pnorm(-abs(zstat)) coef <- cbind(coef, se, zstat, pval) colnames(coef) <- c("Estimate", "Std. Error", "z value", "Pr(>|z|)") object$coefficients$count <- coef[1:kc,,drop = FALSE] object$coefficients$zero <- coef[(kc+1):(kc+kz),,drop = FALSE] ## delete some slots object$fitted.values <- object$terms <- object$model <- object$y <- object$x <- object$levels <- object$contrasts <- object$start <- NULL ## return class(object) <- "summary.zeroinfl" object } print.summary.zeroinfl <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:", deparse(x$call, width.cutoff = floor(getOption("width") * 0.85)), "", sep = "\n") if(!x$converged) { cat("model did not converge\n") } else { cat("Pearson residuals:\n") print(structure(quantile(x$residuals), names = c("Min", "1Q", "Median", "3Q", "Max")), digits = digits, ...) cat(paste("\nCount model coefficients (", x$dist, " with log link):\n", sep = "")) printCoefmat(x$coefficients$count, digits = digits, signif.legend = FALSE) cat(paste("\nZero-inflation model coefficients (binomial with ", x$link, " link):\n", sep = "")) printCoefmat(x$coefficients$zero, digits = digits, signif.legend = FALSE) if(getOption("show.signif.stars") & any(rbind(x$coefficients$count, x$coefficients$zero)[,4] < 0.1)) cat("---\nSignif. codes: ", "0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1", "\n") if(x$dist == "negbin") cat(paste("\nTheta =", round(x$theta, digits), "\n")) else cat("\n") cat(paste("Number of iterations in", x$method, "optimization:", tail(na.omit(x$optim$count), 1), "\n")) cat("Log-likelihood:", formatC(x$loglik, digits = digits), "on", x$n - x$df.residual, "Df\n") } invisible(x) } predict.zeroinfl <- function(object, newdata, type = c("response", "prob", "count", "zero"), na.action = na.pass, at = NULL, ...) { type <- match.arg(type) ## if no new data supplied if(missing(newdata)) { rval <- object$fitted.values if(type != "response") { if(!is.null(object$x)) { X <- object$x$count Z <- object$x$zero } else if(!is.null(object$model)) { X <- model.matrix(object$terms$count, object$model, contrasts = object$contrasts$count) Z <- model.matrix(object$terms$zero, object$model, contrasts = object$contrasts$zero) } else { stop("predicted probabilities cannot be computed with missing newdata") } offsetx <- if(is.null(object$offset$count)) rep.int(0, NROW(X)) else object$offset$count offsetz <- if(is.null(object$offset$zero)) rep.int(0, NROW(Z)) else object$offset$zero mu <- exp(X %*% object$coefficients$count + offsetx)[,1] phi <- object$linkinv(Z %*% object$coefficients$zero + offsetz)[,1] } } else { mf <- model.frame(delete.response(object$terms$full), newdata, na.action = na.action, xlev = object$levels) X <- model.matrix(delete.response(object$terms$count), mf, contrasts = object$contrasts$count) Z <- model.matrix(delete.response(object$terms$zero), mf, contrasts = object$contrasts$zero) offsetx <- model_offset_2(mf, terms = object$terms$count, offset = FALSE) offsetz <- model_offset_2(mf, terms = object$terms$zero, offset = FALSE) if(is.null(offsetx)) offsetx <- rep.int(0, NROW(X)) if(is.null(offsetz)) offsetz <- rep.int(0, NROW(Z)) if(!is.null(object$call$offset)) offsetx <- offsetx + eval(object$call$offset, newdata) mu <- exp(X %*% object$coefficients$count + offsetx)[,1] phi <- object$linkinv(Z %*% object$coefficients$zero + offsetz)[,1] rval <- (1-phi) * mu } ## predicted means for count/zero component if(type == "count") rval <- mu if(type == "zero") rval <- phi ## predicted probabilities if(type == "prob") { if(!is.null(object$y)) y <- object$y else if(!is.null(object$model)) y <- model.response(object$model) else stop("predicted probabilities cannot be computed for fits with y = FALSE and model = FALSE") yUnique <- if(is.null(at)) 0:max(y) else at nUnique <- length(yUnique) rval <- matrix(NA, nrow = length(rval), ncol = nUnique) dimnames(rval) <- list(rownames(X), yUnique) switch(object$dist, "poisson" = { rval[, 1] <- phi + (1-phi) * exp(-mu) for(i in 2:nUnique) rval[,i] <- (1-phi) * dpois(yUnique[i], lambda = mu) }, "negbin" = { theta <- object$theta rval[, 1] <- phi + (1-phi) * dnbinom(0, mu = mu, size = theta) for(i in 2:nUnique) rval[,i] <- (1-phi) * dnbinom(yUnique[i], mu = mu, size = theta) }, "geometric" = { rval[, 1] <- phi + (1-phi) * dnbinom(0, mu = mu, size = 1) for(i in 2:nUnique) rval[,i] <- (1-phi) * dnbinom(yUnique[i], mu = mu, size = 1) }) } rval } fitted.zeroinfl <- function(object, ...) { object$fitted.values } residuals.zeroinfl <- function(object, type = c("pearson", "response"), ...) { type <- match.arg(type) res <- object$residuals switch(type, "response" = { return(res) }, "pearson" = { mu <- predict(object, type = "count") phi <- predict(object, type = "zero") theta1 <- switch(object$dist, "poisson" = 0, "geometric" = 1, "negbin" = 1/object$theta) vv <- object$fitted.values * (1 + (phi + theta1) * mu) return(res/sqrt(vv)) }) } terms.zeroinfl <- function(x, model = c("count", "zero"), ...) { x$terms[[match.arg(model)]] } model.matrix.zeroinfl <- function(object, model = c("count", "zero"), ...) { model <- match.arg(model) if(!is.null(object$x)) rval <- object$x[[model]] else if(!is.null(object$model)) rval <- model.matrix(object$terms[[model]], object$model, contrasts = object$contrasts[[model]]) else stop("not enough information in fitted model to return model.matrix") return(rval) } predprob.zeroinfl <- function(obj, ...) { predict(obj, type = "prob", ...) } extractAIC.zeroinfl <- function(fit, scale = NULL, k = 2, ...) { c(attr(logLik(fit), "df"), AIC(fit, k = k)) } pscl/R/vuong.R0000644000175100001440000000372311300634307012715 0ustar hornikusers"vuong" <- function(m1,m2,digits=getOption("digits")){ ## get predicted probabilities for both models m1y <- m1$y m2y <- m2$y m1n <- length(m1y) m2n <- length(m2y) if(m1n==0 | m2n==0) stop("could not extract dependent variables from models") if(m1n != m2n) stop(paste("models appear to have different numbers of observations\n", "model 1 has ",m1n," observations\n", "model 2 has ",m2n," observations\n", sep="") ) if(any(m1y != m2y)) stop(paste("models appear to have different values on dependent variables\n")) whichCol <- match(m1y,min(m1y):max(m1y)) ## which column, matrix of predicted probs m1p <- rep(NA,m1n) m2p <- rep(NA,m2n) p1 <- predprob(m1) ## likelihood contributions, model 1, cond on MLEs p2 <- predprob(m2) ## likelihood contributions, model 2 for(i in 1:m1n){ m1p[i] <- p1[i,whichCol[i]] ## pick off correct column m2p[i] <- p2[i,whichCol[i]] } m <- log(m1p/m2p) ## vector of likelihood ratios bad <- is.na(m) + is.nan(m) + (m==Inf) + (m==-Inf) if(any(bad)){ cat("NA or numerical zeros or ones encountered in fitted probabilities\n") cat("dropping these cases, but proceed with caution\n") } ## gather up degrees of freedom k1 <- length(coef(m1)) k2 <- length(coef(m2)) ## test statistic: Long (1997) p248 mbar <- mean(m[!bad]) s <- sd(m[!bad]) v <- sqrt(sum(!bad))*mbar/s ## bundle up for output cat(paste("Vuong Non-Nested Hypothesis Test-Statistic:", signif(v,digits), "\n")) cat("(test-statistic is asymptotically distributed N(0,1) under the\n") cat(" null that the models are indistinguishible)\n") cat("in this case:\n") if(v>0) cat(paste("model1 > model2, with p-value", signif(1-pnorm(v),digits), "\n")) else cat(paste("model2 > model1, with p-value", signif(pnorm(v),digits), "\n")) invisible(NULL) } pscl/R/toMCMC.r0000644000175100001440000000151211540242603012673 0ustar hornikusers## convert ideal object to MCMC object idealToMCMC <- function(object, burnin=NULL){ if(class(object)!="ideal") stop("idealToMCMC only defined for objects of class ideal") if(is.null(burnin)) b <- eval(object$call$burnin) keep <- checkBurnIn(object,b) iters <- as.numeric(dimnames(object$x[keep,,])[[1]]) out <- object$x[keep,,] if(!is.null(object$beta)){ J <- dim(object$beta)[3] for(j in 1:J){ thisBeta <- object$beta[keep,,j] dimnames(thisBeta)[[2]] <- paste(dimnames(thisBeta[[2]]), dimnames(object$beta[[3]])[j]) out <- cbind(out,thisBeta) } } return(coda::mcmc(data=out, start=iters[1], thin=eval(object$call$thin), end=iters[length(iters)] ) ) } pscl/R/summary.ideal.r0000644000175100001440000002021311540242603014362 0ustar hornikusersprintHeaderIdeal <- function(x){ cat(paste("ideal was called as follows:\n")) print(x$call) cat("\n") cat(paste("Number of Legislators:\t",x$n,"\n")) cat(paste("Number of Votes:\t",x$m,"\n")) cat(paste("Number of Dimensions:\t",x$d,"\n")) cat(paste("Number of Iterations:\t", eval(x$call$maxiter,envir=.GlobalEnv), "\n")) cat(paste("\tThinned By:\t", eval(x$call$thin,envir=.GlobalEnv),"\n")) cat(paste("\tBurn-in:\t", eval(x$call$burnin,envir=.GlobalEnv),"\n\n")) invisible(NULL) } ## summary and print functions print.ideal <- function(x, ...) { if(class(x) != "ideal") stop("object passed to print.ideal is not of class ideal\n") cat("Markov chain Monte Carlo Analysis of Roll Call Data\n") if(x$d==1) cat(" (2-parameter item-response modeling) \n") else cat(" (multidimensional item-response modeling) \n") cat("===================================================\n\n") printHeader(eval(x$call$object)) printHeaderIdeal(x) if(is.null(x$call$file)){ cat("Ideal Points: Posterior Means\n") print(round(x$xbar,2)) cat("\n") } invisible(NULL) } summary.ideal <- function(object, prob=.95, burnin=NULL, sort=TRUE, include.beta=FALSE, ...){ if(class(object)!="ideal") stop("summary.ideal only defined for objects of class ideal") if(!is.null(object$call$file)){ print(object) cat("\n") cat(paste("MCMC output was directed to file:", object$call$file, "\n")) cat(paste("no output to summarize in the ideal object", match.call()$object, "\n")) return(invisible(NULL)) } if(is.null(burnin)){ keep <- checkBurnIn(object,eval(object$call$burnin,envir=.GlobalEnv)) } else { keep <- checkBurnIn(object,burnin) } xm <- NULL xsd <- NULL bm <- NULL bsd <- NULL xHDR <- NULL bHDR <- NULL xResults <- list() bResults <- list() bSig <- list() myHPD <- function(x,prob){ tmp <- coda::as.mcmc(x) return(coda::HPDinterval(tmp,prob)) } ## get HPD of x xKeep <- object$x[keep,,,drop=FALSE] xHDR <- apply(xKeep, c(2,3), myHPD, prob=prob) xm <- apply(xKeep,c(2,3),mean) ## means xsd <- apply(xKeep,c(2,3),sd) ## standard deviations dimnames(xHDR)[[1]] <- c("lower","upper") if(length(dim(xHDR))>2) xHDR <- aperm(xHDR,c(2,1,3)) if (length(dim(xHDR))==2) xHDR <- t(xHDR) ## ################################################################ ## get beta summaries if ((!is.null(object$beta)) && (include.beta)){ bKeep <- object$beta[keep,,,drop=FALSE] bHDR <- apply(bKeep, c(2,3), myHPD, prob=prob) dimnames(bHDR)[[1]] <- c("lower","upper") if (length(dim(bHDR))>2) bHDR <- aperm(bHDR,c(2,1,3)) bm <- apply(bKeep,c(2,3),mean) bsd <- apply(bKeep,c(2,3),sd) ## "significance tests" for discrimination parameters ## we have HDR interval of content prob sigFunc <- function(x){ out <- sign(x[1])==sign(x[2]) labs <- rep(paste(round(prob*100),"% CI",sep=""),2) labs[1] <- paste(labs[1],"does NOT overlap 0") labs[2] <- paste(labs[2],"overlaps 0") out <- factor(out, levels=c("TRUE","FALSE"), labels=labs) out } bSig <- NULL bSig <- apply(bHDR,c(1,3),sigFunc) bSig <- bSig[,-grep("Difficulty",dimnames(bSig)[[2]])] } ##################################################################### ## summarize by party pall.final <- NULL if(!is.null(object$call$dropList)){ party <- dropRollCall(eval(object$call$object), eval(object$call$dropList))$legis.data$partyName if(is.null(party)) party <- dropRollCall(eval(object$call$object), eval(object$call$dropList))$legis.data$party } else { party <- eval(object$call$object)$legis.data$partyName if(is.null(party)) party <- eval(object$call$object)$legis.data$party } if(!is.null(party)){ ## we have some party info nms <- NULL for (b in 1:object$d){ ## loop over dimensions pall <- NULL pm <- tapply(xm[,b],party,mean) pq <- tapply(xm[,b],party, quantile, probs=c(0,prob) + (1-prob)/2) for(j in 1:length(pq)){ pall <- rbind(pall,pq[[j]]) } pall <- cbind(pm,pall) pall.final <- rbind(pall.final,pall) nms <- c(nms,paste(rownames(pall),": Dimension ",b,sep="")) } colnames(pall.final)[1] <- "Mean" rownames(pall.final) <- nms } ## ################################################################### ## gather for output out <- list(object=match.call()$object, xm=xm,xsd=xsd,xHDR=xHDR, bm=bm,bsd=bsd,bHDR=bHDR, bSig=bSig, party.quant=pall.final, sort=sort, prob=prob) class(out) <- "summary.ideal" return(out) } print.summary.ideal <- function(x, digits=3, ...){ if (!("summary.ideal" %in% class(x))) stop("object passed to print.summary.ideal must be of class summary.ideal") cat("Markov chain Monte Carlo Analysis of Roll Call Data\n") m <- eval(x$object)$m d <- eval(x$object)$d if(d==1) cat(" (2-parameter item-response modeling) \n") else cat(" (multidimensional item-response modeling) \n") printHeader(eval(eval(x$object)$call$object)) printHeaderIdeal(eval(x$object)) if(!is.null(x$party.quant)) { cat("Ideal Points (Posterior Means), by Party\n") print(round(x$party.quant,digits)) cat("\n") } ## loop over dimensions xResults <- list() for(j in 1:d){ xResults[[j]] <- cbind(x$xm[,j], x$xsd[,j], x$xHDR[,,j]) cNames <- c("Mean","Std.Dev.","lower","upper") dimnames(xResults[[j]])[[2]] <- cNames if(x$sort) xResults[[j]] <- xResults[[j]][order(xResults[[j]][,1]),] } for(j in 1:d){ if(x$sort) cat(paste("Ideal Points, Dimension ",j," ", "(sorted by posterior means):\n",sep="")) else cat(paste("Ideal Points, Dimension ",j,":\n",sep="")) print(round(xResults[[j]],digits)) cat("\n") } ## loop over dimensions bResults <- list() if(!is.null(x$bm)){ for(b in 1:(d+1)){ bResults[[b]] <- cbind(x$bm[,b], x$bsd[,b], x$bHDR[,,b]) dimnames(bResults[[b]])[[2]][1] <- "Mean" dimnames(bResults[[b]])[[2]][2] <- "sd" tmpRollCall <- computeMargins(object=eval(eval(x$object)$call$object), dropList=eval(eval(x$object)$call$dropList)) ## if available, tack on margins data if(!is.null(tmpRollCall$voteMargins)){ bResults[[b]] <- cbind(bResults[[b]], tmpRollCall$voteMargins) } } names(bResults) <- c(paste("Discrimination D", 1:d), "Difficulty") ## report statistical tests of significance if(length(x$bSig)!=0){ cat("Statistical tests of discrimination parameters:\n") if(d==2){ ## do a cross-tabulation cat("dimension 1 (rows) against dimension 2 (columns)\n") print(table(x$bSig[[1]],x$bSig[[2]])) } else{ for (j in 1:d){ cat("Dimension:",j) print(table(x$bSig[[j]])) cat("\n") } } } for(j in 1:d){ cat(paste(names(bResults[[j]]),":\n")) theseResults <- bResults[[j]] foo <- x$bSig[[j]] == (levels(x$bSig[[j]])[2]) fooChar <- rep(" ",m) fooChar[foo] <- "NS" dimnames(theseResults)[[1]] <- paste(dimnames(theseResults)[[1]], fooChar) print(round(theseResults,digits)) cat("\n") } cat(paste(names(bResults)[d+1],":\n")) print(round(bResults[[d+1]],digits)) } cat("\n") invisible(NULL) } pscl/R/seatsVotes.R0000644000175100001440000001151310622442322013713 0ustar hornikusers## seats vote curve class seatsVotes <- function(x, desc=NULL, method="uniformSwing"){ xok <- x[!is.na(x)] if(length(xok)==0) stop("no data to analyze after deleting missings") if(any(!is.numeric(xok))) stop("svCurve only defined for numeric data\n") if(any(xok<0)) stop("negative vote shares not permitted\n") if(any(xok>1) & !any(xok>100)){ cat("proceeding assuming supplied votes are percentages") xLocal <- xok/100 } else xLocal <- xok cl <- match.call() if(is.null(cl$method)) cl$method <- method m <- 1001 d0 <- seq(from=-1,to=1,length=m) x0 <- rep(NA,m) y0 <- rep(NA,m) for(i in 1:m){ x0[i] <- mean(xLocal - d0[i],na.rm=TRUE) y0[i] <- mean(xLocal - d0[i] > .5, na.rm=TRUE) } inBounds <- x0 >= 0 & x0 <= 1 out <- list(s=y0[inBounds], v=x0[inBounds], x=xLocal, desc=desc, call=cl) class(out) <- "seatsVotes" out } print.seatsVotes <- function(x,...){ if(!inherits(x,"seatsVotes")) cat("print.svCurve only defined for objects of class seatsVotes\n") if(is.null(match.call()$digits)) digits <- .Options$digits else digits <- match.call()$digits if(!is.null(x$desc)) cat("Seats-Votes Curve:",x$desc,"\n") cat("\nSummary of", length(x$x), "non-missing vote shares:\n") print(summary(x$x)) closestToFifty <- which.min(abs(x$v-.5)) biasAtFifty <- x$s[closestToFifty] - .5 cat("Bias at Average Vote Share = .5 is", round(biasAtFifty,digits), "\n") invisible(NULL) } summary.seatsVotes <- function(object,...){ if(!inherits(object,"seatsVotes")) cat("summary.svCurve only defined for objects of class seatsVotes\n") object } plot.seatsVotes <- function(x, type=c("seatsVotes","density"), legend="bottomright", transform=FALSE, ...) { if(!inherits(x,"seatsVotes")) cat("plot.svCurve only defined for objects of class seatsVotes\n") type <- match.arg(type) cl <- match.call() ## seats vote curve if(type=="seatsVotes"){ oldpar <- par() par(mar=c(4.2,4,5,1), las=1) if(is.null(cl$xlab)) xlab <- "Average District Vote" else xlab <- cl$xlab if(is.null(cl$ylab)) ylab <- "Proportion of Seats Won" else ylab <- cl$ylab if(is.null(cl$xlim)) xlim <- c(0,1) else xlim <- cl$xlim if(is.null(cl$ylim)) ylim <- c(0,1) else ylim <- cl$ylim if(is.null(cl$xaxs)) xaxs <- "i" else xaxs <- cl$xaxs if(is.null(cl$yaxs)) yaxs <- "i" else yaxs <- cl$yaxs plot(x$v,x$s,type="l", lwd=3, axes=FALSE, xaxs=xaxs, yaxs=yaxs, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, ...) axis(1,at=seq(0,1,by=.25)) axis(2,at=seq(0,1,by=.25)) abline(h=.5,lty=2) abline(v=.5,lty=2) mtext(side=3, at=mean(x$x,na.rm=TRUE), "Actual\nResult",cex=.65) abline(v=mean(x$x,na.rm=TRUE),lty=2) abline(0,1,col=gray(.45),lwd=2) methodString <- switch(x$call$method, "uniformSwing" = "Uniform Swing") if(!is.null(x$desc)) title(paste("Simulated Seats-Votes Curve Using ",methodString, "\n", x$desc,sep="")) else title(paste("Simulated Seats-Votes Curve Using",methodString)) if(!is.null(legend)) legend(x=legend, col=gray(.45), lwd=2, lty=1, bty="n", cex=.65, legend="Proportional Representation\n(45 degree line)") par(oldpar) } if(type=="density"){ if(is.null(cl$title)){ if(is.null(x$desc)) titleString <- "Density" else titleString <- paste("Density,",x$desc) } else titleString <- cl$title if(is.null(cl$xlab)) xlab <- "Vote Shares" else xlab <- cl$xlab if(is.null(cl$ylab)) ylab <- "" else ylab <- cl$ylab if(transform){ transFunc <- function(x){ v <- log(x/(1-x)) beta <- sqrt(3) xstar <- v*beta exp(xstar)/(1+exp(xstar)) } xLocal <- transFunc(x$x) } else xLocal <- x$x plot(density(xLocal, na.rm=TRUE, from=min(xLocal,na.rm=TRUE), to=max(xLocal,na.rm=TRUE), ... ), xlab=xlab, ylab=ylab, main=titleString, axes=FALSE) if(transform){ tcks <- pretty(x$x) tcks <- transFunc(tcks) axis(1,at=tcks,labels=pretty(x$x)) } else axis(1) rug(xLocal) } invisible(NULL) } pscl/R/rollcall.r0000644000175100001440000004306211643415334013432 0ustar hornikusersrollcall <- function(data, yea=1,nay=0, missing=NA, notInLegis=9, legis.names=NULL, vote.names=NULL, legis.data=NULL, vote.data=NULL, desc=NULL, source=NULL){ ## codes, check and package codes <- list() if(!is.null(yea)) codes$yea <- yea else codes$yea <- NULL if(!is.null(nay)) codes$nay <- nay else codes$nay <- NULL if(!is.null(notInLegis)) codes$notInLegis <- notInLegis else codes$notInLegis <- NULL if(!is.null(missing)) codes$missing <- missing else codes$missing <- NULL if(checkCodes(codes)) stop("codes are not unique\n") ## get a roll call matrix from input v <- NULL if((is.list(data)) && ("votes" %in% names(data))){ v <- data$votes } else { v <- data } if (!is.matrix(v)) { v <- as.matrix(v) } ## check votes if(checkVotes(v,codes)) stop("rollcall: bad votes") ## identifying tags for legislators nm <- legis.names if(is.null(nm)) ## look for legis.names var in data if(is.list(data)) if(!is.null(data$legis.names)) nm <- data$legis.names if(!is.null(nm)){ ## check that any names found by here are ok if(length(unique(nm))!=nrow(v)){ cat("supplied legislator names do not match number of rows\n") cat("in roll call matrix; will use default names\n") nm <- NULL } } if(is.null(nm)){ ## make names nm <- paste("Legislator",1:nrow(v)) } rownames(v) <- nm ## vote labels lbl <- vote.names if(is.null(lbl)) if(is.list(data)) if(!is.null(data$vote.names)) lbl <- data$vote.names if(!is.null(lbl)){ ## check that vote names are ok if(length(unique(lbl))!=ncol(v)){ cat("supplied vote names do not match number of columns\n") cat("in roll call matrix; will use default names\n") lbl <- NULL } } if(is.null(lbl)){ ## make name lbl <- paste("Vote",1:ncol(v)) } colnames(v) <- lbl ## legislator attributes if(!is.null(legis.data)){ if(nrow(legis.data)!=nrow(v)) stop("legislator data does not match number of legislators in roll call matrix") else rownames(legis.data) <- nm } ## roll call votes attributes if(!is.null(vote.data)){ if(nrow(vote.data)!=ncol(v)) stop("rows in vote.data does not match number of votes in roll call matrix") else rownames(vote.data) <- lbl } ## description of roll call voting matrix dsc <- desc if(is.list(data)) if(!is.null(data$desc)) dsc <- data$desc ## package up for output out <- list(votes=v, codes=codes, n=dim(v)[1], m=dim(v)[2], legis.data=legis.data, vote.data=vote.data, desc=dsc, source=source) class(out) <- c("rollcall") out } ## loop over roll call matrix ## find which votes to DROP (lop-sided) lopfunc <- function(x,lop=NULL){ n <- sum(!is.na(x)) if(is.null(lop)) ## throw away unanimous votes toss <- (sum(x, na.rm=T)==n) || (sum(x,na.rm=T)==0) else toss <- (sum(x==1,na.rm=T)/n <= lop) || (sum(x==0,na.rm=T)/n <= lop) toss } printDescription <- function(object){ if(inherits(object,"rollcall") & !is.null(object$desc)) cat(paste("Description:\t",object$desc,"\n")) invisible(NULL) } printSource <- function(object){ if(inherits(object,"rollcall") & !is.null(object$source)) cat(paste("Source:\t\t",object$source,"\n")) invisible(NULL) } printHeader <- function(object){ if(inherits(object,"rollcall")){ printDescription(object) printSource(object) } invisible(NULL) } print.rollcall <- function(x,print.votes=FALSE, ...){ printHeader(x) cat(paste("Number of Legislators:\t",x$n,"\n")) cat(paste("Number of Votes:\t",x$m,"\n")) cat("\n") printCodes(x$codes) cat("\n") if(!is.null(x$legis.data)){ cat("Legislator-specific variables:\n") print(names(x$legis.data)) } if(!is.null(x$vote.data)){ cat("Vote-specific variables:\n") print(names(x$vote.data)) } if (print.votes) print(x$votes) cat(paste("Detailed information is available via the summary function.\n")) invisible(NULL) } ## check Votes checkVotes <- function(object,codes=object$codes){ if(class(object)=="rollcall") mat <- object$votes if(class(object)=="matrix") mat <- object if(is.null(codes)) stop("checkVotes: no codes supplied") flag <- FALSE if(!all(mat[!is.na(mat)] %in% unlist(codes))){ cat("checkVotes: Your data contains values other than the codes\n") cat("checkVotes: you supplied as representing Yea, Nay, Missing or\n") cat("checkVotes: not in legislature.\n") cat("checkVotes: You specified:\n") cat(paste("Yea: ", paste(as.character(codes$yea),collapse=" "), "\n", "Nay: ", paste(as.character(codes$nay),collapse=" "), "\n", "Missing: ", paste(as.character(codes$missing),collapse=" "), "\n", "Not In Legislature: ", paste(as.character(codes$notInLegis),collapse=" "), "\n",sep="")) cat("checkVotes: Your data has the following unique values and frequency counts:\n") print(table(mat,exclude=NULL)) cat("\n") flag <- TRUE } flag } ## check Codes checkCodes <- function(codes){ flag <- FALSE n <- length(codes) for(i in 1:(n-1)){ for(j in (i+1):n){ common <- intersect(codes[[i]],codes[[j]]) if(length(common)!=0) flag <- TRUE } } flag } ## show codes on-screen printCodes <- function(codes){ cat("Using the following codes to represent roll call votes:\n") if(!is.null(codes$yea)) cat(paste("Yea:\t\t", paste(as.character(codes$yea),collapse=" "), "\n")) else cat(paste("Yea: \n")) if(!is.null(codes$nay)) cat(paste("Nay:\t\t", paste(as.character(codes$nay),collapse=" "), "\n")) else cat(paste("Nay: \n")) if(!is.null(codes$missing)) cat(paste("Abstentions:\t", paste(as.character(codes$missing),collapse=" "), "\n")) else cat(paste("Abstentions: \n")) if(!is.null(codes$notInLegis)) cat(paste("Not In Legislature:\t", paste(as.character(codes$notInLegis),collapse=" "), "\n")) invisible(NULL) } ## convert codes to 0 and 1 etc convertCodes <- function(object,codes=object$codes){ if(!is.list(codes)) stop("convertCodes: codes needs to be a list") if(is.null(codes$yea) | is.null(codes$nay)) stop("convertCodes: no Yea and/or Nay code supplied") if(!is.matrix(object$votes)) stop("convertCodes: supplied rollcalls are not in a matrix") ## conversions theCodes <- codes tmp <- matrix(-999, dim(object$votes)[1], dim(object$votes)[2]) dimnames(tmp) <- dimnames(object$votes) tmp[object$votes %in% theCodes$yea] <- 1 tmp[object$votes %in% theCodes$nay] <- 0 if(!is.null(theCodes$missing)){ if(!any(is.na(theCodes$missing))) theCodes$missing <- c(theCodes$missing,NA) tmp[object$votes %in% theCodes$missing] <- NA } if(!is.null(theCodes$notInLegis)) tmp[object$votes %in% theCodes$notInLegis] <- NA bad <- tmp[!is.na(tmp)] == -999 if(any(bad)){ cat("convertCodes: not all rollcall votes converted to 0, 1, NA.\n") cat("convertCodes: information in codes not exhaustive.\n") cat(paste("convertCodes: setting remaining",sum(bad),"votes to NA\n")) tmp[bad] <- NA } tmp } ## for each legislator compute how often they vote with the direction ## in which a majority of their party voted partyLoyalty <- function(object){ theParties <- unique(object$legis.data$party) nParties <- length(theParties) ## what was the majority direction by vote, by party majOutcome <- function(x){ as.numeric(names(which.max(table(x)))) } partyDirections <- matrix(NA,object$m,nParties) for(p in 1:nParties){ thisParty <- object$legis.data$party==theParties[p] ## only do this if the party is bigger than two legislators if(sum(thisParty,na.rm=TRUE)>2){ foo <- apply(object$votes[thisParty,],2, majOutcome) if(is.list(foo)){ foo[which(lapply(foo,length)==0)] <- NA foo <- unlist(foo) } partyDirections[,p] <- foo } } dimnames(partyDirections) <- list(dimnames(object$votes)[[2]], theParties) ## now compare individual voting histories ## with voting scores partyLoyalty <- rep(NA,object$n) legisParty <- match(x=object$legis.data$party, table=theParties) goodCompare <- function(x,y){ ok <- !is.na(x) & !is.na(y) goodmatch <- sum(x[ok] == y[ok]) + sum(is.na(x) & is.na(y)) out <- goodmatch/length(x) * 100 out } for(i in 1:object$n){ ## loop over legislators ## dont do it where partyDirections are undefined ## (i.e., small numbers of indeps etc) if(!all(is.na(partyDirections[,legisParty[i]]))){ theDirections <- partyDirections[,legisParty[i]] partyLoyalty[i] <- goodCompare(theDirections, object$votes[i,]) } } partyLoyalty } lopLook <- function(margins,cutOff){ extremeMat <- rep(NA,cutOff+1) for(j in 0:cutOff){ extremeMat[j+1] <- sum(margins[,1]==j | margins[,2]==j) } extremeMat } vectorRepresentation <- function(object, dropList=list(codes=c("missing", "notInLegis"))){ if(class(object)!="rollcall") stop("vectorRepresentation only defined for objects of class rollcall") if(is.null(object$codes)) stop("no rollcall codes") else codes <- object$codes if(is.null(dropList) | length(dropList)==0 | is.null(dropList$codes) | length(dropList$codes)==0){ cat("missing arguments for drop, vectorRepresentation will use defaults") dL <- list(codes=c("missing","notInLegis")) } else dL <- dropList tmpRollCall <- dropRollCall(object,dropList=dL) badCodes <- match(dL$codes,names(codes)) if(any(is.na(badCodes))) stop("couldn't find codes to drop\n") else{ dropCodes <- NULL for(j in badCodes) dropCodes <- c(dropCodes,codes[[j]]) } cat(paste("vectorRepresentation: dropCodes=", paste(dropCodes,collapse=", "), "\n")) n <- tmpRollCall$n m <- tmpRollCall$m v <- tmpRollCall$votes y <- matrix(NA,n*m,3) dimnames(y)[[2]] <- list("vote","i","j") z <- 1 for(i in 1:n){ for(j in 1:m){ vij <- v[i,j] if(!(vij %in% dropCodes)){ if(vij %in% codes$yea) y[z,1] <- 1 if(vij %in% codes$nay) y[z,1] <- 0 y[z,2] <- i y[z,3] <- j z <- z + 1 } } } y <- y[1:(z-1),] y } matchDimnames <- function(labs,codes){ codesNames <- names(codes) nLabs <- length(labs) whichCode <- rep(NA,nLabs) for(i in 1:nLabs){ tmp <- unlist(lapply(codes,function(x)as.numeric(labs[i]) %in% x)) #print(tmp) if(sum(tmp)==1) whichCode[i] <- which.max(tmp) } out <- codesNames[whichCode] out <- paste(labs," (",out,")",sep="") out } summary.rollcall <- function(object, dropList=NULL, ##list(codes="notInLegis", ## lop=0), verbose=FALSE, debug=FALSE, ...){ if(class(object)!="rollcall") stop("summary.rollcall only operates on objects of class rollcall") mc <- match.call() ## how were we called if(is.null(mc$dropList)) mc$dropList <- dropList if(is.null(mc$verbose)) mc$verbose <- verbose legisTab <- NULL voteTab <- NULL dropTab <- NULL partyLoyaltyScores <- NULL lopSided <- NULL if(!is.null(object$dropInfo)){ cat(paste("The input rollcall object already has a dropInfo component,\n", "meaning that it is the product of dropRollCall.\n", "This summary and the execution of any current dropList\n", "proceeds conditional on the previous dropList.\n"), sep="") } ## process user options re dropping votes/legislators etc if(!is.null(dropList)){ tmpRollCall <- dropRollCall(object,dropList,debug=debug) } else tmpRollCall <- object v <- tmpRollCall$votes ## party breakdown, if available haveParty <- !is.null(tmpRollCall$legis.data$party) partyTab <- NULL if(haveParty) partyTab <- table(tmpRollCall$legis.data$party,exclude=NULL) ## get any exclude codes allVotes <- table(v) allVotes <- cbind(allVotes, allVotes/sum(allVotes)*100) dimnames(allVotes)[[2]] <- c("Count","Percent") dimnames(allVotes)[[1]] <- matchDimnames(dimnames(allVotes)[[1]], tmpRollCall$codes) ## what was clobbered by dropRollCall if(!is.null(tmpRollCall$dropInfo)) if("new" %in% names(tmpRollCall$dropInfo)) dropTab <- lapply(tmpRollCall$dropInfo$new[c("legislators","votes")], table,exclude=NULL) else dropTab <- lapply(tmpRollCall$dropInfo[c("legislators","votes")], table,exclude=NULL) if(verbose){ ## breakdowns by legislator if(debug) cat("computing breakdowns by legislator...") legisTab <- t(apply(v,1, marginWithCodes, codes=tmpRollCall$codes)) dimnames(legisTab)[[2]] <- c(names(tmpRollCall$codes), "Total", paste(names(tmpRollCall$codes),"%",sep="")) ## breakdowns by vote cat("by vote...") voteTab <- t(apply(v,2, marginWithCodes, codes=tmpRollCall$codes)) dimnames(voteTab)[[2]] <- dimnames(legisTab)[[2]] lopSided <- lopLook(voteTab,floor(.05*tmpRollCall$n)) names(lopSided) <- as.character(0:floor(.05*tmpRollCall$n)) ## party loyalty if(haveParty){ cat("and party loyalty scores") partyLoyaltyScores <- partyLoyalty(tmpRollCall) } cat("\n") } out <- list(n=tmpRollCall$n, m=tmpRollCall$m, codes=tmpRollCall$codes, allVotes=allVotes, partyTab=partyTab, lopSided=lopSided, legisTab=legisTab, dropTab=dropTab, partyLoyalty=partyLoyaltyScores, voteTab=voteTab, call=mc) class(out) <- "summary.rollcall" out } printDropTab <- function(x){ for(i in 1:length(x)) if("FALSE" %in% names(x[[i]])){ cat(paste("dropRollCall deleted", x[[i]]["FALSE"], "of", sum(x[[i]]), names(x)[[i]], "\n")) } else{ cat(paste("dropRollCall deleted no",names(x)[[i]],"\n")) } invisible(NULL) } print.summary.rollcall <- function(x, digits=1, ...){ if(class(x)!="summary.rollcall") stop("print.summary.rollcall only defined for objects of class summary.rollcall") rcObj <- x$call$object verbose <- x$call$verbose if(is.null(eval(rcObj))) stop("can't find rollcall object") if(length(rcObj)>1) rcObjName <- format(rcObj) else rcObjName <- rcObj if(!is.null(eval(rcObj)$desc)) cat(paste("\nSummary of rollcall object", rcObjName, "\n\n")) printHeader(eval(rcObj)) cat(paste("\nNumber of Legislators:\t\t",x$n)) cat(paste("\nNumber of Roll Call Votes:\t",x$m)) cat("\n\n") ## was summary called from dropRollCall directly? ## if so then dump the drop info from the object if(!is.null(x$dropTab)) printDropTab(x$dropTab) ## if(!is.null(x$call$dropList)) ## cat(paste("This summary ignores voting decisions that are coded ", ## paste(x$call$dropList$codes,collapse=" or "), ## ".\n",sep="")) ## if(!is.null(x$call$dropList$lop)) ## if(x$call$dropList$lop==0) ## cat("This summary computed after dropping unanimous roll calls.\n") ## else ## cat(paste("This summary computed after dropping roll calls with", ## x$call$dropList$lop, ## "or fewer legislators voting\nin the minority.\n")) ## if(length(x$call$dropList)>2){ ## cat("Other restrictions are being applied. The full dropList is:\n") ## print(x$call$dropList) ## } cat("\n") printCodes(x$codes) cat("\n") if(!is.null(x$partyTab)){ cat("Party Composition:") print(x$partyTab) } cat("\nVote Summary:\n") print(round(x$allVotes,1)) if(!is.null(x$lopSided) | !all(x$lopSided==0)){ cat("\nLop-sided Votes (Number Voting in Minority), and Frequencies:\n") print(x$lopSided) } if(!verbose) cat(paste("\nUse summary(", rcObjName, ",verbose=TRUE) for more detailed information.\n",sep="")) if(verbose){ if(!is.null(x$partyLoyalty)){ cat("\nSummary By Legislator: Counts, Percentages and Party Loyalty\n") foo <- cbind(round(x$legisTab,digits), round(x$partyLoyalty)) dimnames(foo)[[2]][ncol(foo)] <- "Party Loyalty" } else{ cat("\nSummary By Legislator: Counts and Percentages\n") foo <- round(x$legisTab,digits) } print(foo) cat("\nSummary By Vote\n") print(round(x$voteTab,digits)) cat("\n") } invisible(NULL) } pscl/R/restrict.ideal.r0000644000175100001440000000674111507177505014551 0ustar hornikusers## function to set restrictions on certain legislators constrain.legis <- function(obj, dropList=list(codes="notInLegis",lop=0), x, d=1){ options(warn=-1) if(class(obj)!="rollcall") stop("object must be of class rollcall") ## check dimensions of x list items if (!is.list(x)) stop("x must be a list") if (length(x)<=d) stop("at least d+1 legislators must be constrained") options(warn=0) ## get working version of roll call object cat("constrain.legis: calling dropRollCall to get working version of rollcall object\n") rc <- dropRollCall(obj,dropList) rc$legis.names <- dimnames(rc$votes)[[1]] rc$vote.names <- dimnames(rc$votes)[[2]] v <- convertCodes(rc) n <- nrow(v) m <- ncol(v) xp <- matrix(rep(0, n*d), nrow=n) xpv <- matrix(rep(.01, n*d), nrow=n) bp <- matrix(rep(0,m*(d+1)), nrow=m) bpv <- matrix(rep(.01, m*(d+1)), nrow=m) cat("constrain.legis: generating start values for legislators\n") xstart <- x.startvalues(v,d=d) xcnst <- xstart*NA cat("constrain.legis: implementing constraints\n") ## loop over constraints for (i in 1:length(x)){ thisLegis <- names(x)[i] if (length(x[[i]])!=d) stop("Each element of x must be of length d (dimension of model to be fitted).") ind <- pmatch(thisLegis,rc$legis.names) if (is.na(ind)) stop(paste(thisLegis,"was not found in legis.names")) cat(paste("matching supplied name", thisLegis,"with", rc$legis.names[ind],"\n")) xp[ind,] <- x[[i]] xpv[ind,] <- rep(1e12,d) xstart[ind,] <- x[[i]] xcnst[ind,] <- x[[i]] } cat("constrain.legis: re-generating start values for legislators, with constraints\n") xstart <- x.startvalues(v,d=d,constraint=xcnst) options(warn=-1) cat("constrain.legis: generating start values for bill parameters,\n") cat("conditional on start values for legislators\n") bstart <- b.startvalues(v,xstart,d=d) bstart <- ifelse(abs(bstart - bp) < 2/sqrt(bpv), bstart, bp + 2*sign(bstart-bp)/sqrt(bpv)) options(warn=0) return(list(xp=xp,xpv=xpv,bp=bp,bpv=bpv,x=xstart,b=bstart)) } constrain.items <- function(obj, dropList=list(codes="notInLegis",lop=0), x, d=1){ options(warn=-1) if(class(obj)!="rollcall") stop("object must be of class rollcall") options(warn=0) rc <- dropRollCall(obj,dropList) rc$legis.names <- dimnames(rc$votes)[[1]] rc$vote.names <- dimnames(rc$votes)[[2]] v <- convertCodes(rc) n <- nrow(v) m <- ncol(v) xp <- matrix(rep(0, n*d), nrow=n) xpv <- matrix(rep(1, n*d), nrow=n) bp <- matrix(rep(0,m*(d+1)), nrow=m) bpv <- matrix(rep(0.01, m*(d+1)), nrow=m) ## check dimensions of x list items if (!is.list(x)) stop("x must be a list") options(warn=-1) xstart <- x.startvalues(v,d=d) bstart <- b.startvalues(v,xstart,d=d) options(warn=0) for (i in 1:length(x)) { if (length(x[[i]])!=(d)) stop("Each element of x must be of length d (dimension of model to be fitted).") ind <- pmatch(names(x)[i],rc$vote.names) if (is.na(ind)) stop(paste(names(x)[i]," was not found in rc$vote.names")) cat(paste("matching supplied name", names(x)[i],"with", rc$vote.names[ind],"\n")) bp[ind,] <- c(x[[i]],0) bpv[ind,] <- c(rep(1e12,d),0.01) bstart[ind,1:d] <- x[[i]] } return(list(xp=xp,xpv=xpv,bp=bp,bpv=bpv,xstart=xstart,bstart=bstart)) } pscl/R/readKH.r0000644000175100001440000001671011765640266012775 0ustar hornikusers## read Keith Poole and Howard Rosenthal formatted data readKH <- function(file, dtl=NULL, yea=c(1,2,3), nay=c(4,5,6), missing=c(7,8,9), notInLegis=0, desc=NULL, debug=FALSE){ cat("Attempting to read file in Keith Poole/Howard Rosenthal (KH) format.\n") warnLevel <- options()$warn options(warn=-1) data <- try(readLines(con=file),silent=TRUE) if(inherits(data,"try-error")){ cat(paste("Could not read",file,"\n")) return(invisible(NULL)) } options(warn=warnLevel) cat("Attempting to create roll call object\n") voteData <- substring(data,37) n <- length(voteData) m <- nchar(voteData)[1] rollCallMatrix <- matrix(NA,n,m) for(i in 1:n){ rollCallMatrix[i,] <- as.numeric(unlist(strsplit(voteData[i], split=character(0)))) } rm(voteData) if(!is.null(desc)) cat(paste(desc,"\n")) cat(paste(n,"legislators and",m,"roll calls\n")) cat("Frequency counts for vote types:\n") tab <- table(rollCallMatrix,exclude=NULL) print(tab) ## unique numeric identifier for each legislator icpsrLegis <- as.numeric(substring(data,4,8)) ## party affiliation party <- as.numeric(substring(data,21,23)) ## convert party to label partyfunc <- function(x){ data(partycodes) party <- partycodes$party[match(x,partycodes$code)] party[party=="Democrat"] <- "D" party[party=="Republican"] <- "R" party[party=="Independent"] <- "Indep" party } partyName <- partyfunc(party) ## convert state ICPSR code to abbreviation statename <- function(x){ data(state.info) state.info$state[match(x,state.info$icpsr)] } state <- as.numeric(substring(data,9,10)) ## icpsr code KHstateName <- substring(data,13,20) stateName <- statename(state) ## covert to name stateAbb <- state.abb[match(stateName,state.name)] ## convert to abbrev stateAbb[grep(KHstateName,pattern="^USA")] <- "USA" ## for presidents cd <- as.numeric(substring(data,11,12)) cdChar <- as.character(cd) cdChar[cd==0] <- "" ## process legislator names lnames <- substring(data,26,36) for(i in 1:n){ lnames[i] <- strip.trailing.space(lnames[i]) lnames[i] <- strip.after.comma(lnames[i]) } ## finally, produce a tag for each legislator legisId <- paste(lnames," (",partyName," ",stateAbb,"-",cdChar,")",sep="") legisId <- gsub(x=legisId,pattern="-)",replacement=")") ## final check for dups ## if we find any, pad with icpsrLegis tag if(any(duplicated(legisId))){ dups <- duplicated(legisId) legisId[dups] <- paste(legisId[dups], icpsrLegis[dups]) } ## write legis data legis.data <- data.frame(state=stateAbb, icpsrState=state, cd=cd, icpsrLegis=icpsrLegis, party=partyName, partyCode=party) dimnames(legis.data)[[1]] <- legisId ## do we have a dtl file to read? vote.data <- NULL if(!is.null(dtl)){ vote.data <- dtlParser(dtl,debug=debug) } ## finally, call rollcall to assemble working object rc <- rollcall(data=rollCallMatrix, yea=yea, nay=nay, missing=missing, notInLegis=notInLegis, legis.names=legisId, legis.data=legis.data, vote.data=vote.data, desc=desc, source=file) rc } ## utility functions strip.after.comma <- function(x){ indx <- regexpr(",",x) if (indx > 0) z <- substring(x,1,indx-1) else z <- x z } strip.trailing.space <- function(x){ indx <- regexpr(" ",x) if (indx > 0) z <- substring(x,1,indx-1) else z <- x z } ## read from file, possible web ## readFromFunc <- function(file,debug=TRUE){ ## ## check if this is a URL, starting with such as http, https, or ftp ## urlStrings <- c("http","ftp") ## netFile <- any(!is.na(pmatch(urlStrings,file))) ## if(netFile){ ## if(debug) ## cat(paste("we appear to have a URL:",file,"\n")) ## slashes <- gregexpr(pattern="/",text=file)[[1]] ## if(length(slashes)<3) ## cat(paste("dubious URL, it has only",length(slashes),"slashes\n")) ## hostname <- substring(file,slashes[2]+1,slashes[3]-1) ## if(debug) ## cat(paste("hostname is",hostname,"\n")) ## ## check that we can actually resolve the hostname ## w <- options()$warn ## options(warn=-1) ## goodNet <- NULL ## haveNSL <- exists("nsl") ## if(haveNSL){ ## goodNet <- nsl(hostname) ## else ## if(debug) ## if(is.null(goodNet)) ## cat(paste("nsl on",hostname,"returned NULL\n")) ## else ## cat(paste("nsl on",hostname,"returned",goodNet,"\n")) ## if(is.null(goodNet)){ ## options(warn=w) ## cat("Could not resolve the URL you provided.\n") ## cat("Check the URL or your internet connection.\n") ## return(invisible(NULL)) ## } ## options(warn=w) ## } ## ## now actually try to read the data ## readResults <- try(readLines(file)) ## if(class(readResults)=="try-error"){ ## cat(paste("readKH error: could not read from",file,"\n", ## "execution terminating\n")) ## data <- NULL ## } ## else{ ## data <- readResults ## nRecs <- length(data) ## cat(paste("read",file,"ok with",nRecs,"records\n")) ## } ## data ## } dateExtract <- function(string){ theMonths <- c("JANUARY","FEBRUARY","MARCH", "APRIL","MAY","JUNE", "JULY","AUGUST","SEPTEMBER", "OCTOBER","NOVEMBER","DECEMBER") searchStringMonths <- paste(theMonths,collapse="|") foo <- unlist(strsplit(string,split=" ")) foo <- foo[foo!=""] nFoo <- length(foo) whereMonth <- grep(pattern=searchStringMonths,foo) out <- "" if(length(whereMonth)==1){ dateString <- foo[whereMonth:nFoo] dateString <- gsub(x=dateString,pattern=",",replacement="") ## dateString should be MONTH, DAY, YEAR month <- match(foo[whereMonth],table=theMonths) out <- paste(dateString[3],month,dateString[2],sep="-") } out } descriptionExtract <- function(recs){ foo <- substring(recs,13) foo <- paste(foo,collapse="") foo <- gsub(foo,pattern="\n",replacement="") foo <- gsub(foo,pattern='[[:space:]]+',replacement=" ") foo <- gsub(foo,pattern='[[:space:]]$',replacement="") foo } ## parse K&H dictionary files dtlParser <- function(file,debug=TRUE){ cat(paste("attempting to read dtl file",file,"\n")) warnLevel <- options()$warn options(warn=-1) data <- try(readLines(con=file),silent=TRUE) if(inherits(data,"try-error")){ cat(paste("Could not read",file,"\n")) return(invisible(NULL)) } options(warn=warnLevel) out <- NULL if(!is.null(data)){ number <- as.numeric(substring(data,1,4)) m <- unique(number) date <- rep(NA,length(m)) description <- rep("",length(m)) for(j in m){ if(debug) cat(paste("dtlParser: processing record",j,"\n")) theRecs <- data[number==j] nRecs <- length(theRecs) ## extract the date date[j] <- dateExtract(theRecs[1]) ## extract descriptive text if(nRecs>2) description[j] <- descriptionExtract(theRecs[3:nRecs]) } out <- data.frame(date=date, description=description) out$date <- as.Date(out$date,format="%Y-%m-%d") } out } pscl/R/pseudoRSq.R0000644000175100001440000000200710621731003013472 0ustar hornikusers## pseudo r2 for binary, ordinal and multinomial models pR2 <- function(object,...){ UseMethod("pR2") } pR2Work <- function(llh,llhNull,n){ McFadden <- 1 - llh/llhNull G2 <- -2*(llhNull-llh) r2ML <- 1 - exp(-G2/n) r2ML.max <- 1 - exp(llhNull*2/n) r2CU <- r2ML/r2ML.max out <- c(llh=llh, llhNull=llhNull, G2=G2, McFadden=McFadden, r2ML=r2ML, r2CU=r2CU) out } pR2.glm <- function(object,...){ llh <- logLik(object) objectNull <- update(object, ~ 1) llhNull <- logLik(objectNull) n <- dim(object$model)[1] pR2Work(llh,llhNull,n) } pR2.polr <- function(object,...){ llh <- logLik(object) objectNull <- update(object, ~ 1) llhNull <- logLik(objectNull) n <- object$nobs pR2Work(llh,llhNull,n) } pR2.multinom <- function(object,...){ llh <- logLik(object) cat("fitting null model for pseudo-r2\n") objectNull <- update(object, ~ 1) llhNull <- logLik(objectNull) n <- dim(object$fitted.values)[1] pR2Work(llh,llhNull,n) } pscl/R/predprob.R0000644000175100001440000000035710555214103013373 0ustar hornikuserspredprob <- function(obj, ...){ UseMethod("predprob") } predprob.ideal <- function(obj, ...){ if(class(obj)!="ideal") stop("predprob.ideal only defined for objects of class ideal") else predict.ideal(obj,...)$pred.probs } pscl/R/predprob.glm.R0000644000175100001440000000277111507177505014167 0ustar hornikuserspredprob.glm <- function(obj, newdata = NULL, at = NULL, ...){ if(!inherits(obj,"glm")) stop("predprob.glm only available for glm objects (including class negbin)\n") isNegBin <- class(obj)[1]=="negbin" isPoisson <- family(obj)$family=="poisson" isBinomial <- family(obj)$family=="binomial" if(!isNegBin & !isPoisson & !isBinomial) stop(paste("your object of class",class(obj),"is unsupported by predprob.glm")) if(is.null(newdata)) yhat <- predict(obj, type="response") else yhat <- predict(obj, newdata=newdata, type="response") y <- obj$y yUnique <- if(is.null(at)) 0:max(y) else at nUnique <- length(yUnique) p <- matrix(NA,length(yhat),nUnique) dimnames(p) <- list(NULL,yUnique) if(isNegBin){ for(i in 1:nUnique){ p[,i] <- dnbinom(mu=yhat, size=obj$theta, x=yUnique[i]) } } if(isPoisson){ for(i in 1:nUnique){ p[,i] <- dpois(lambda=yhat, x=yUnique[i]) } } if(isBinomial){ if(is.null(newdata)) p <- predict(obj, type="response") else p <- predict(obj, newdata=newdata, type="response") p <- cbind(1-p,p) dimnames(p) <- list(NULL,c("0","1")) } p } pscl/R/predict.ideal.r0000644000175100001440000001551011643415334014332 0ustar hornikusers## predict method for class ideal predict.ideal <- function(object, cutoff=0.5, burnin=NULL, ...) { if(class(object)!="ideal") stop("predict.ideal only defined for objects of class ideal\n") if(is.null(object$beta)){ cat("Beta values must have be stored in ideal object to make predictions") stop("try re-fitting model with store.item=TRUE.") } if(is.null(burnin)) keep <- checkBurnIn(object,eval(object$call$burnin)) else keep <- checkBurnIn(object,burnin) ## check that start is valid ## get votes into shape for prediction from ideal cat(paste("predict.ideal: Working with rollcall object", object$call$object, "\n")) rcObj <- try(dropRollCall(eval(object$call$object), eval(object$call$dropList)), silent=TRUE) if(inherits(rcObj,"try-error") | is.null(rcObj$votes)){ cat(paste("The ideal object ", as.name(object), " was fitted using the\n", "rollcall object" , as.name(object$call$object), " which can no longer be found,\n", "or does not have a votes matrix as one of its components.", sep="")) stop("Prediction can not proceed.") } if(checkVotes(rcObj)) ## codes ok, should be ok stop("bad votes in rollcall object, can't generate predictions") cat("\n") votes <- convertCodes(rcObj) ## convert to 0, 1 and NAs ## predictions at posterior means predprob <- matrix(NA, ncol=ncol(votes), nrow=nrow(votes)) dimnames(predprob) <- dimnames(votes) pred <- predprob correct <- predprob if(!is.null(burnin)){ cat("Computing posterior means using ideal object.\n") x1 <- matrix(apply(object$x[keep,], c(2,3), mean), nrow=object$n, ncol=object$d, byrow=TRUE) x1 <- cbind(x1,-1) ## negative intercept !!! SDJ 05/15/07 b <- matrix(apply(object$beta[keep,-1],2,mean), nrow=object$m,ncol=object$d+1,byrow=TRUE) } else{ cat("Using posterior means in ideal object.\n") x1 <- cbind(object$xbar,-1.0) ## negative intercept !!! SDJ 01/22/07 b <- object$betabar } mu <- tcrossprod(x1,b) ## this should be n by (d+1) times (d+1) by m predprob <- pnorm(mu) pred <- predprob >= cutoff correct <- votes==pred correct[is.na(votes)] <- NA lp <- apply(correct,1,tally)*100 ## legislator-specific pp <- NULL ## by party party <- eval(object$call$object)$legis.data$party if(!is.null(party)) pp <- tapply(lp,party,mean) out <- list(pred.probs=predprob, prediction=pred, correct=correct, legis.percent=lp, vote.percent=apply(correct,2,tally)*100, yea.percent=(sum(correct[votes==1],na.rm=T)/ sum(!is.na(correct[votes==1])))*100, nay.percent=(sum(correct[votes==0],na.rm=T)/ sum(!is.na(correct[votes==0])))*100, party.percent=pp, overall.percent=(sum(correct,na.rm=T)/sum(!is.na(correct)))*100, ideal=match.call()$object) class(out) <- "predict.ideal" out } tally <- function(x){ sum(x,na.rm=T)/sum(!is.na(x)) } print.predict.ideal <- function(x,digits=2,...) { cat(paste("Predictions using ideal object", x$ideal, "\n")) cat(paste(x$ideal,"uses rollcall object",eval(x$ideal)$call$object,"\n")) rcObj <- eval(x$ideal)$call$object printHeader(eval(rcObj)) cat("Predictions calculated using posterior means for\n") cat("legislators ideal points and bill parameters\n\n") cat("Percent correctly predicted:\n") cat(paste("\tOverall:\t",round(x$overall.percent,digits),"%\n",sep="")) cat(paste("\tYeas:\t\t",round(x$yea.percent,digits),"%\n",sep="")) cat(paste("\tNays:\t\t",round(x$nay.percent,digits),"%\n\n",sep="")) cat("Percent Correctly Predicted by Legislator\n") mat <- round(as.matrix(x$legis.percent),digits) colnames(mat) <- "Percent" print(mat) if(!is.null(x$party.percent)) { cat("\nPercent Correctly Predicted by Legislator, Party Average\n") print(round(x$party.percent,digits)) } mat <- round(as.matrix(x$vote.percent),digits) colnames(mat) <- "Percent" cat("\nPercent Correctly Predicted by Vote\n") print(mat) cat("\n") invisible(NULL) } plot.predict.ideal <- function(x, type=c("legis","votes"), ...){ if(class(x)!="predict.ideal") stop("plot.predict.ideal only defined for objects of class predict.ideal") localType <- match.arg(type) d <- eval(x$ideal)$d desc <- eval(eval(x$ideal)$call$object)$desc rcObj <- extractRollCallObject(eval(x$ideal)) if(localType=="legis"){ ## plot percent correctly predicted against posterior mean of ideal point ## dimension by dimension xbar <- eval(x$ideal)$xbar n <- eval(x$ideal)$n ## party colors party <- rcObj$legis.data$party if(!is.null(party)){ tbl <- table(party,exclude=NULL) cl <- rainbow(length(tbl)) grp <- match(party,names(tbl)) col <- cl[grp] } else col <- rep("black",n) for(b in 1:d){ plot(y=x$legis.percent, x=xbar[,b], col=col, xlab="Ideal Point (Posterior Mean)", ylab="Voting Decisions Correctly Predicted (%)", pch=16) titleString <- paste(desc,"\n", "Percent Correctly Predicted, by Legislator's Ideal Point") if(d>1) titleString <- paste(titleString, "(Dimension",b,")") title(titleString) } } ######################################################################### ## type = votes ######################################################################### if(localType=="votes"){ if(is.null(rcObj$voteMargins)) rcObj <- computeMargins(rcObj) margin <- rcObj$voteMargins if(is.null(margin)) stop("failed to find or computes votes margins") ## margin information vote.percent <- t(apply(margin,1,function(x)x/sum(x[1:2])*100)) margin <- cbind(margin,vote.percent[,1:2]) #dimnames(margin)[[2]] <- c("Yea","Nay","NA", # "Yea (proportion of those voting)", # "Nay (proportion of those voting)") plot(x=jitter(margin[,4]), ## percent voting yes y=x$vote.percent, xlab="Losing Coalition (%, excluding NAs, jittered)", ylab="Voting Decisions Correctly Predicted (%, excluding NA)") titleString <- paste(desc,"\n", "Percent Correctly Predicted, by Vote Margin") title(titleString) } invisible(NULL) } pscl/R/postProcess.r0000644000175100001440000001522211765640266014160 0ustar hornikusers## post-process an ideal object postProcess <- function(object, constraints="normalize", debug=FALSE){ if(class(object)!="ideal") stop("postProcess only defined for objects of class ideal") ## not a list of normalizing constraint (i.e., usually "normalize=TRUE" with d=1) if(!is.list(constraints)){ if(constraints=="normalize"){ ## get constraints needed for mean zero, standard deviation one restriction tMat <- getNormalizingTransform(object) ## coefficients for linear map if(debug){ cat("transformation matrix is:\n") print(tMat) } newObject <- implementConstraints(object,tMat,debug) } } if(is.list(constraints)) newObject <- postProcessAffine(object,constraints,debug) return(newObject) } getNormalizingTransform <- function(object){ n <- object$n m <- object$m d <- object$d offsets <- apply(object$xbar,2,mean) s <- apply(object$xbar,2,sd) coefs <- 1/s * diag(d) ## d by d coefs <- rbind(coefs,-offsets/s) ## d+1 by d return(coefs) } affineTrans <- function(x,target){ d <- dim(x)[2] x0 <- cbind(x,1) if(d>1){ zeroMat <- 0*x0 A <- rbind(cbind(x0,zeroMat), cbind(zeroMat,x0)) b <- as.vector(target) } if(d==1){ A <- x0 b <- target } foo <- solve(A)%*%b foo <- matrix(foo,nrow=d+1) return(foo) } postProcessAffine <- function(object,constraints,debug){ d <- object$d n <- object$n m <- object$m nSavedIters <- dim(object$x)[1] theIters <- dimnames(object$x)[[1]] keep <- checkBurnIn(object, burnin=object$call$burnin) nCon <- length(constraints) if(nCon != (d+1)){ cat("postProcess is currently only implements as many constraints\n") cat("as there are dimensions plus one.\n") stop() } lengthCon <- lapply(constraints,length) if(any(lengthCon != d)) stop("each constraint must have the same number of dimensions as the fitted model") ## form target matrix target <- matrix(NA,d+1,d) for(i in 1:(d+1)) target[i,] <- constraints[[i]] if(debug){ cat("target:\n") print(target) } ## form id vector, where are the named legislators in the ideal object? legis.names <- dimnames(eval(object$call$object)$votes)[[1]] if(is.null(legis.names)){ cat("can not find legislator names to match against\n") cat(paste("either the original roll call object", object$call$object, "has been deleted\n")) cat("or the vote component of the roll call object has been deleted?\n") cat("terminating postProcess with an error\n") stop() } legis <- names(constraints) ind <- rep(NA,d+1) for(i in 1:nCon){ p <- grep(pattern=paste("^",legis[i],sep=""), x=legis.names) if(length(p)==0) stop("could not find the named legislator in the rollcall object") else ind[i] <- p } cat(paste("matching legislators",legis,"\n")) ## initialize output objects newX <- NA * object$x dimnames(newX) <- dimnames(object$x) haveBeta <- eval(object$call$store.item) if(haveBeta){ cat("will also transform item/bill parameters\n") newBeta <- NA * object$beta dimnames(newBeta) <- dimnames(object$beta) } ## now loop over iterations for(iter in 1:nSavedIters){ cat(paste("post-processing iteration",theIters[iter],"\n")) x0 <- object$x[iter,ind,,drop=TRUE] x0 <- matrix(x0,d+1,d) tMat <- affineTrans(x0,target=target) if(debug){ cat("transformation matrix:\n") print(tMat) } thisX <- cbind(object$x[iter,,],1) tmpX <- thisX%*%tMat newX[iter,,] <- tmpX ## now transform beta (and alpha), if available if(haveBeta){ tMatStar <- rbind(t(tMat), c(rep(0,d),1)) itMat <- try(solve(tMatStar)) if(!inherits(itMat,"try-error")){ itMat[1:d,d+1] <- -itMat[1:d,d+1] ## sign fix for minus intercept beta0 <- object$beta[iter,,] tmpBeta <- beta0%*%itMat newBeta[iter,,] <- tmpBeta if(debug){ cat("inverse transformation matrix:\n") print(itMat) } } if(debug){ muPP <- pnorm(cbind(newX[iter,,],-1)%*%t(tmpBeta)) mu <- pnorm(cbind(object$x[iter,,],-1)%*%t(beta0)) cat("sanity check, comparison of predictions from original and post-processed:\n") print(summary(as.vector(mu-muPP))) } } } ## new ideal object newObject <- object ## new ideal point samples newObject$x <- newX dimnames(newObject$x) <- dimnames(object$x) ## ideal point posterior means newObject$xbar <- getMean(keep,newObject$x) ## for beta? if(haveBeta){ newObject$beta <- newBeta dimnames(newObject$beta) <- dimnames(object$beta) newObject$betabar <- getMean(keep,newObject$beta) } return(newObject) } ## implementConstraints implementConstraints <- function(object,tMat,debug){ haveBeta <- eval(object$call$store.item) if(haveBeta){ d <- dim(tMat)[2] tMatStar <- rbind(t(tMat), c(rep(0,d),1)) itMat <- try(solve(tMatStar)) if(inherits(itMat,"try-error")) stop("could not compute normalizing transformation for item parameters\n") newBeta <- array(NA,dim(object$beta)) } ## get burnin ##if(is.symbol(object$call$burnin)){ ## burnin <- eval(object$call$burnin) ##} else { ## burnin <- object$call$burnin ##} keep <- checkBurnIn(object, burnin=eval(object$call$burnin)) nSavedIters <- dim(object$x)[1] newX <- array(NA,dim(object$x)) newObject <- object ## copy ideal object ## loop over iterations, implementing transformation for(iter in 1:nSavedIters){ thisX <- cbind(newObject$x[iter,,],1) ## add intercept for translation newX[iter,,] <- thisX%*%tMat ## transformation ## now transform beta (and alpha), if available if(haveBeta){ beta0 <- object$beta[iter,,] tmpBeta <- beta0%*%itMat newBeta[iter,,] <- tmpBeta if(debug){ muPP <- pnorm(cbind(newX[iter,,],-1)%*%t(tmpBeta)) mu <- pnorm(cbind(object$x[iter,,],-1)%*%t(beta0)) cat("sanity check, comparison of predictions from original and post-processed:\n") print(summary(as.vector(mu-muPP))) } } } ## gather up for new ideal object newObject$x <- newX dimnames(newObject$x) <- dimnames(object$x) ## new posterior means newObject$xbar <- getMean(keep,newObject$x) ## for Beta? if(haveBeta){ newObject$beta <- newBeta dimnames(newObject$beta) <- dimnames(object$beta) newObject$betabar <- getMean(keep,newObject$beta) } return(newObject) } pscl/R/plot.ideal.r0000644000175100001440000003406511765640266013675 0ustar hornikusers## ideal plotting functions plot.ideal <- function(x, conf.int=0.95, burnin=NULL, ...) { if(class(x)!="ideal") stop("plot.ideal only available for objects of class ideal") if(is.null(burnin)) keep <- checkBurnIn(x,eval(x$call$burnin,envir=.GlobalEnv)) else keep <- checkBurnIn(x,burnin) if(x$d == 1) plot1d(x,conf.int=conf.int, burnin=burnin, ...) else if(x$d==2){ plot2d(x,burnin=burnin, ...) } else{ ## more than 2 dimensions xm <- apply(x$x[keep,-1],2,mean,na.rm=T) dim <- matrix(rep(NA,(x$n*x$d)),ncol=x$d) lbls <- NULL for (i in 1:x$d){ dim[,i] <- xm[seq(i,length(xm),by=x$d)] lbls <- c(lbls,paste("Dimension ",i,sep="")) } pairs(dim,labels=lbls,main="Posterior Mean: Ideal Points") } } plot1d <- function(x, d=1, conf.int=0.95, burnin=NULL, showAllNames=FALSE, ...){ if(class(x)!="ideal") stop("plot.ideal only available for objects of class ideal") if(is.null(burnin)) keep <- checkBurnIn(x,eval(x$call$burnin,envir=.GlobalEnv)) else keep <- checkBurnIn(x,burnin) checkD(x,d) ## check that selected dimension is ok checkCI(conf.int) ## check that confidence interval is ok q <- c((1-conf.int)/2, 1-((1-conf.int)/2)) ## quantiles from CI xm <- x$xbar ## xbar indx <- order(xm) ## sort index exispar <- par(no.readonly=T) myHPD <- function(x,prob){ tmp <- coda::as.mcmc(x) return(coda::HPDinterval(tmp,prob)) } xq <- t(apply(x$x[keep,,1],2,myHPD,prob=conf.int)) ## get HPDs ## names etc cat(paste("Looking up legislator names and party affiliations\n")) cat(paste("in rollcall object",x$call$object,"\n")) tmpObject <- dropRollCall(eval(x$call$object), eval(x$call$dropList)) party <- tmpObject$legis.data$party ## extract party info legis.name <- unclass(dimnames(x$xbar)[[1]]) longName <- max(nchar(legis.name)) rm(tmpObject) textLoc <- 1.05*min(xq) ## where to put x labels if(showAllNames){ par(mar=c(3,longName*.55,4,2)+0.1, oma=rep(0,4)) } else { par(mar=c(3,longName*.75,4,2)+0.1, oma=rep(0,4)) } ## title string info mainString <- paste("Ideal Points: ", "Posterior Means and ", conf.int*100, "% CIs",sep="") if(!is.null(eval(x$call$object)$desc)) mainString <- paste(eval(x$call$object)$desc,"\n",mainString) plot(y=c(1-.5,x$n+.5), yaxs="i", x=1.02*range(xq), xaxs="i", xlab="",ylab="", axes=FALSE, type="n", ...) mtext(mainString,side=3,line=3) xLims <- 1.01*range(xq) for (i in 1:x$n){ if(!showAllNames){ if((x$n <= 30)||(i %in% as.integer(seq(1,x$n,length=30)))){ text(x=textLoc, y=i, labels=legis.name[indx[i]], adj=1,xpd=NA) lines(x=xLims,y=rep(i,2),lty=1,lwd=.5,col=gray(.45)) } } else{ text(x=textLoc, y=i, cex=.55, labels=legis.name[indx[i]], adj=1,xpd=TRUE) lines(x=xLims,y=rep(i,2),lty=1,lwd=.5,col=gray(.45)) } lines(y=c(i,i),x=xq[indx[i],],lwd=2) if (is.null(party)){ points(y=i,x=xm[indx[i]],col="red",pch=19,xpd=NULL) } else{ tbl <- table(party, exclude=NULL) cl <- rainbow(length(tbl)) pt <- xm[indx[i]] grp <- match(party[indx[i]],names(tbl)) points(y=i, x=pt, pch=19,col=cl[grp],xpd=NULL) } } ##par(ps=8) ##par(ps=10) axis(1) axis(3) par(exispar) } plot2d <- function(x, d1=1, d2=2, burnin=NULL, overlayCuttingPlanes=FALSE, ...){ if(class(x)!="ideal") stop("plot.ideal only available for objects of class ideal") if(is.null(burnin)) keep <- checkBurnIn(x,eval(x$call$burnin,envir=.GlobalEnv)) else keep <- checkBurnIn(x,burnin) oCP <- overlayCuttingPlanes ## local copy of overlayCuttingPlanes if(overlayCuttingPlanes){ if(is.null(x$beta)){ cat("Item parameters were not stored in ideal object\n") cat("No cutting planes will be plotted\n") oCP <- FALSE } if(x$d>2){ cat("overlay of cutting planes only defined for 2d fits\n") oCP <- FALSE } } mainString <- paste("Ideal Points:", "Posterior Means") if(!is.null(eval(x$call$object)$desc)) mainString <- paste(eval(x$call$object)$desc,"\n",mainString) checkD(x,d1) checkD(x,d2) if(d1==d2) stop("can't do 2 dimensional summaries of the same dimension\n") if(is.null(burnin)){ ## use x bar in ideal object xm1 <- x$xbar[,d1] xm2 <- x$xbar[,d2] } else{ xm1 <- apply(x$x[keep,,d1],2,mean) ## posterior means xm2 <- apply(x$x[keep,,d2],2,mean) } if(oCP){ if(is.null(burnin)){ ## use betabar in ideal object b1Bar <- x$betabar[,d1] b2Bar <- x$betabar[,d2] alphaBar <- x$betabar[,(x$d+1)] } else{ bKeep <- x$beta[keep,,,drop=FALSE] betaBar <- apply(bKeep,c(2,3),mean) b1Bar <- betaBar[,d1] b2Bar <- betaBar[,d2] alphaBar <- betaBar[,x$d] } } ## get a copy of the rollcall object used by ideal object tmpObject <- dropRollCall(eval(x$call$object), eval(x$call$dropList)) party <- tmpObject$legis.data$party ## extract party info rm(tmpObject) if(is.null(party)){ plot(x=xm1,y=xm2, main=mainString, type="p", xlab=paste("Dimension ",as.character(d1),sep=""), ylab=paste("Dimension ",as.character(d2),sep=""), xpd=NULL, ...) if(oCP){ for(j in 1:x$m) abline(a=-alphaBar[j]/b2Bar[j], b=-b1Bar[j]/b2Bar[j], col=gray(.45)) } } else{ ## we have party info plot(x=xm1, y=xm2, main=mainString, type="n", xlab=paste("Dimension ",as.character(d1),sep=""), ylab=paste("Dimension ",as.character(d2),sep=""), ...) if(overlayCuttingPlanes){ for(j in 1:x$m) abline(a=-alphaBar[j]/b2Bar[j], b=-b1Bar[j]/b2Bar[j], col=gray(.45),lwd=.5) } tbl <- table(party, exclude=NULL) cl <- rainbow(length(tbl)) for (i in 1:length(tbl)){ thisParty <- party==names(tbl)[i] points(y=xm2[thisParty], x=xm1[thisParty], pch=16,col=cl[i], xpd=NULL) } } invisible(NULL) } tracex <- function(object, legis=NULL, d=1, conf.int=0.95, multi=FALSE, burnin=NULL, span=.25, legendLoc="topright"){ warnOption <- options()$warn options(warn=-1) if(class(object)!="ideal") stop("object passed to function tracex must be of class ideal") if(is.null(d)) stop("default value must be supplied for dimension to trace\n") if(length(d)>2) stop("tracex only works with up to 2 dimensions\n") if(!is.character(legis)) stop("legis must be character (names of legislators)\n") Rv <- as.numeric(version$major) + .1*as.numeric(version$minor) if(Rv>=2.4) old.par <- par(no.readonly=TRUE) else old.par <- par() ## try matching names legis.names <- as.vector(dimnames(object$x)[[2]]) nLegis <- length(legis) p <- list() for(j in 1:nLegis){ p[[j]] <- grep(pattern=paste("^",legis[j],sep=""), x=legis.names) if(length(p[[j]])==0){ cat(paste("could not find legislator",legis[j],"\n")) p[[j]] <- NA } if(!is.null(p[[j]]) & length(p[[j]])>object$d){ cat(paste("no unique match for legislator",legis[j],"\n")) cat("try providing more of the unique identifier for the legislator\n") p[[j]] <- NA } } ## process list of matches plotName <- rep(NA,length(p)) for(j in 1:nLegis){ if(length(d)==1){ if(!is.na(p[[j]])){ p[[j]] <- p[[j]][1] } } if(!is.na(p[[j]])){ foo <- pmatch(x=legis[j], table=as.vector(dimnames(object$xbar)[[1]])) if(!is.na(foo)) plotName[j] <- dimnames(object$xbar)[[1]][foo] cat(paste("matching", legis[j], "with", plotName[j],"\n")) } } p <- p[!is.na(p)] plotName <- plotName[!is.na(plotName)] names(p) <- plotName nLegis <- length(p) if(is.null(burnin)) keep <- checkBurnIn(object,eval(object$call$burnin,envir=.GlobalEnv)) else keep <- checkBurnIn(object,burnin) start <- as.numeric(dimnames(object$x)[[1]])[keep][1] ## ####################################################### ## one-dimensional stuff ## ####################################################### if(length(d)==1){ options(warn=0) checkD(object,d) if(span<=0 | span>=1) stop("span must be between 0 and 1") if((conf.int<=0)||(conf.int>=1)) stop("conf.int must be between 0 and 1") rw <- 3 if (nLegis < 3) rw <- nLegis count <- 0 if(rw < 4 & dev.interactive()) par(mfrow=c(rw,1)) if(length(legendLoc)==1) legendLoc <- rep(legendLoc,nLegis) for (i in 1:nLegis){ meat <- object$x[keep,p[[i]],d] iter <- as.numeric(dimnames(object$x)[[1]])[keep] par(mar=c(4, 4, 4, 2) + 0.1) mainText <- plotName[i] if(object$d>1) mainText <- paste(mainText, ", Dimension ",d,sep="") plot(y=meat, x=iter, las=1, type="l", xlab="Iteration",ylab="", main=mainText) runmean <- cumsum(meat)/1:length(iter) lines(iter,runmean,col="red",lwd=3) lf <- loess(meat~iter,span=span) ## loess overlay lines(iter,predict(lf),col="blue",lwd=3) xbar <- mean(meat) q <- c((1-conf.int)/2, 1-((1-conf.int)/2)) q <- quantile(meat,q) abline(h=xbar,lwd=3,col="grey") ## posterior mean abline(h=q[1],lty=2,col="grey") ## confidence intervals abline(h=q[2],lty=2,col="grey") count <- count + 1 ## do legend if(!is.null(legendLoc[i])) legend(x=legendLoc[i], bg="white", ncol=1, legend=c("Trace", "Cumulative Mean", paste("Moving Average (loess, span=", round(span,2), ")", sep=""), "Posterior Mean", paste(round(100*conf.int),"% Confidence Interval",sep="")), lty=c(1,1,1,1,2), lwd=c(2,3,3,3,2), col=c("black","red","blue","grey","grey"), yjust=0,cex=.65) ## prompt user for more plots if we are in interactive mode ##cat("dev.interactive returns ", ## dev.interactive(),"\n") ##cat(paste("count=",count,"\n")) ##cat(paste("nLegis=",nLegis,"\n")) if((count==3) & (nLegis > 3) & (dev.interactive())){ count <- 0 readline("Press return/enter to see next set of plots: ") } } } ## ################################################################### ## two-dimensional traceplots if(length(d)==2){ goodD <- d %in% (1:object$d) if(!all(goodD)) stop("invalid dimensions requested in tracex") col <- rainbow(nLegis) ## colors meat <- list() ## container for iters to plot for(i in 1:nLegis){ xTraces <- object$x[keep,p[[i]],d[1]] yTraces <- object$x[keep,p[[i]],d[2]] meat[[i]] <- list(x=xTraces, y=yTraces, col=col[i]) } if(!multi){ ## plot all 2d traces at once xRange <- range(unlist(lapply(meat,function(x)x$x)),na.rm=TRUE) yRange <- range(unlist(lapply(meat,function(x)x$y)),na.rm=TRUE) require(graphics) layout(mat=matrix(c(1,2),1,2,byrow=TRUE), widths=c(.7,.3)) par(mar=c(4,4,1,1)) plot(x=xRange,y=yRange, type="n", axes=FALSE, xlab=paste("Dimension",d[1]), ylab=paste("Dimensions",d[2])) axis(1,las=1) axis(2,las=1) lineFunc <- function(obj){ lines(obj$x,obj$y,col=obj$col) points(obj$x[1],obj$y[1],pch=1,col="black",cex=2) npoints <- length(obj$x) points(obj$x[npoints],obj$y[npoints], pch=16,col="black",cex=2) } lapply(meat,lineFunc) mtext(side=3,outer=FALSE,line=-.5,cex=.75, paste("Two-dimensional trace plots, MCMC iterations,\n", eval(object$call$object)$desc, ", Iterations ", start," to ", object$call$maxiter," thinned by ", object$call$thin,sep="")) ## legend plot, 2nd panel par(mar=c(3,0,1,0)) plot(x=c(0,1), y=c(.5,nLegis+.5), las=1, xlab="",ylab="",xaxs="i",yaxs="i", axes=FALSE,type="n") ## loop to show lines and legislator name for(i in 1:nLegis){ lines(x=c(0,.15), y=rep(i,2), lwd=2, col=col[i]) text(x=.25, y=i, cex=.75, plotName[i], adj=0) } } if(multi){ ## multiple panels, one per legislator par(mfrow=c(2,2)) count <- 0 for(i in 1:nLegis){ plot(x=meat[[i]]$x, y=meat[[i]]$y, type="l", las=1, xlab=paste("Ideal Point, Dimension ",d[1],sep=""), ylab=paste("Ideal Point, Dimension ",d[2],sep="")) title(plotName[i]) count <- count + 1 } if(count==3 & dev.interactive()){ count <- 0 readline("Press any key to see next set of plots: ") } } } ## end 2 dimensional stuff par(old.par) options(warn=warnOption) invisible(NULL) } pscl/R/pi.r0000644000175100001440000000027210621153255012226 0ustar hornikuserssimpi <- function(n=1000){ z <- 0 res <- .C("simpi", PACKAGE=.package.Name, as.integer(n), as.integer(z))[[2]] estimate <- res/n*4 estimate } pscl/R/odTest.R0000644000175100001440000000242010613230471013012 0ustar hornikusersodTest <- function(glmobj, alpha=.05, digits=max(3,getOption("digits")-3)) { if(class(glmobj)[1]!="negbin") stop("this function only works for objects of class negbin\n") if(alpha>1 | alpha<0) stop("invalid value for alpha\n") poissonGLM <- glm(formula=eval(glmobj$call$formula), data=eval(glmobj$call$data), family="poisson") require(stats) llhPoisson <- logLik(poissonGLM) llhNB <- logLik(glmobj) d <- 2*(llhNB - llhPoisson) ## n.b., distribution of test-statistics is non-standard ## see Cameron and Trivedi 1998 p78 critval <- qchisq(1-(2*alpha), df = 1) pval <- pchisq(d, df = 1, lower.tail=FALSE)/2 cat("Likelihood ratio test of H0: Poisson, as restricted NB model:\n") cat("n.b., the distribution of the test-statistic under H0 is non-standard\n") cat("e.g., see help(odTest) for details/references\n\n") cat(paste("Critical value of test statistic at the alpha=", round(alpha,digits), "level:", round(critval,digits), "\n")) cat(paste("Chi-Square Test Statistic = ", round(d,digits), "p-value =", format.pval(pval,digits=digits), "\n")) invisible(NULL) } pscl/R/ntable.R0000644000175100001440000000211710555214103013017 0ustar hornikusersntable <- function(x,y=NULL,percent=1,digits=2,row=FALSE,col=FALSE){ if (is.null(y)){ cat(rownames(table(x)),"\n",sep="\t") cat(round(table(x)/sum(table(x)),digits),"\n",sep="\t") cat(table(x),"\n",sep="\t") } else{ if(length(x)!=length(y)) stop("x and y do not have same length\n") tab <- table(x,y) pt <- round(prop.table(tab,percent),digits) k <- !is.na(x) & !is.na(y) if (row) { pt <- cbind(pt,round(table(x)/sum(k),digits)) tab <- cbind(tab,table(x[k])) } cat("",colnames(tab),"\n",sep="\t") j <- 0 for (i in rep(c(0,1),nrow(tab))) { j <- j + 1 - i if (i==0) { cat(row.names(pt)[j],pt[j,],"\n",sep="\t") } else { cat("",tab[j,],"\n",sep="\t") } } if (col) { cat("\n") cat("",round(table(y[!is.na(x)])/sum(k),digits),"\n",sep="\t") cat("",table(y[!is.na(x)]),sum(k),"\n",sep="\t")} } invisible(NULL) } pscl/R/margins.rollcall.r0000644000175100001440000000240111040050230015036 0ustar hornikusers## compute margins in a roll call object, add to the object in vote.data computeMargins <- function(object,dropList=NULL){ if(!inherits(object,"rollcall")) stop("margins only works on object of class rollcall.") tmpRollCall <- object if(!is.null(dropList)){ tmpRollCall <- dropRollCall(object,dropList) } tab <- t(apply(convertCodes(tmpRollCall), 2, marginfunc)) tab <- cbind(tab, apply(tab,1,whichMinMargin)) rownames(tab) <- dimnames(tmpRollCall$votes)[[2]] colnames(tab) <- c("Yea","Nay","NA","Min") tmpRollCall$voteMargins <- tab tmpRollCall } marginfunc <- function(x){ ok <- !is.na(x) z <- c(sum(x[ok]==1), ## Yeas sum(x[ok]==0), ## Nays sum(!ok)) ## Missing z } marginWithCodes <- function(x,codes){ n <- length(codes) tab <- rep(0,n) for(i in 1:n){ if(is.list(codes)) tab[i] <- sum(x %in% codes[[i]]) else tab[i] <- sum(x %in% codes[i]) } out <- c(tab, sum(tab), tab/sum(tab)*100) out } minMargin <- function(x){ z <- rep(NA,2) ok <- !is.na(x) z[1] <- sum(x[ok]==0) z[2] <- sum(x[ok]==1) z <- z/sum(ok) out <- min(z) out } whichMinMargin <- function(x){ x[which.min(x[1:2])] } pscl/R/igamma.r0000644000175100001440000000463311037422543013057 0ustar hornikusersdensigamma <- function(x,alpha,beta){ if(alpha > 0 & beta > 0 & all(x>0)) (beta^alpha)/gamma(alpha) * x^(-alpha-1) * exp(-beta/x) else stop("densigamma: invalid parameters\n") } pigamma <- function(q,alpha,beta){ if(alpha > 0 & beta > 0 & all(q>0)) 1-pgamma(1/q,alpha,beta) else stop("pigamma: invalid parameters\n") } qigamma <- function(p,alpha,beta){ if(alpha > 0 & beta > 0 & all(p>0) & all(p<1)){ if((1-p)<=.Machine$double.eps){ out <- Inf } else{ out <- 1/qgamma(1-p,alpha,beta) } } else stop("qigamma: invalid parameters\n") return(out) } rigamma <- function(n,alpha,beta){ if(alpha > 0 & beta > 0) 1/rgamma(n=n,alpha,beta) else stop("rigamma: invalid parameters\n") } igammaHDR <- function(alpha,beta,content=.95,debug=FALSE){ ok <- alpha>0 & beta>0 & content>0 & content<1 if(!ok) stop("igammaHDR: invalid parameters\n") func <- function(x0,alpha,beta,content){ y0 <- densigamma(x0,alpha,beta) p0 <- pigamma(x0,alpha,beta) p1 <- p0 + content - .Machine$double.eps if(p1<1){ x1 <- qigamma(p0+content,alpha,beta) y1 <- densigamma(x1,alpha,beta) out <- y0-y1 } else{ if(debug) cat(paste("igammaHDR: upper bound too large",p1,"\n")) out <- NaN } out } tryContent <- content flag <- FALSE while(!flag){ if(debug) cat(paste("igammaHPR: checking search bounds with content=", tryContent, "\n")) try <- rep(NA,2) eps <- .Machine$double.eps bounds <- c(eps,qigamma(1-tryContent-eps,alpha,beta)) try[1] <- func(bounds[1],alpha,beta,content=content) try[2] <- func(bounds[2],alpha,beta,content=content) if(any(is.nan(try))) stop("igammaHPR failed with NaN in func\n") if(sign(try[1])!=sign(try[2])) flag <- TRUE else{ if(debug){ cat("igammaHPR: bad bounds\n") print(try) cat("\n") } tryContent <- tryContent + .01*(1-tryContent) } } if(debug) cat("igammaHPD: done refining search bounds...now optimizing") foo <- uniroot(f=func, interval=bounds, tol=1e-12, alpha=alpha, beta=beta, content=content)$root if(debug) cat("...done\n") hpd <- c(foo, qigamma(pigamma(foo,alpha,beta)+content, alpha,beta) ) hpd } pscl/R/idealHelper.r0000644000175100001440000000140711540242603014032 0ustar hornikusers## ideal helper functions ## check validity of a burnin number ## return logical of valid iters checkBurnIn <- function(object, burnin) { theIters <- as.numeric(dimnames(object$x)[[1]]) if (as.numeric(burnin)>max(theIters)) stop("burnin greater than number of iterations") return (theIters > burnin) } checkD <- function(x,d) { if ((d<1)||(d>x$d)) stop("d must be equal to one of the dimensions in the roll call object") } checkCI <- function(conf.int) { if((conf.int<=0)||(conf.int>=1)) stop("conf.int must be between 0 and 1") } getMean <- function(keep,x){ xbar <- apply(x[keep,,,drop=FALSE], c(2,3), mean) dimnames(xbar) <- list(dimnames(x)[[2]], dimnames(x)[[3]]) return(xbar) } pscl/R/ideal.r0000644000175100001440000004221011765760427012711 0ustar hornikusers## IDEAL ideal <- function(object, codes=object$codes, dropList=list(codes="notInLegis",lop=0), d=1, maxiter=10000, thin=100, burnin=5000, impute=FALSE, mda=FALSE, normalize=FALSE, meanzero=normalize, priors=NULL, startvals="eigen", store.item=FALSE, file=NULL, verbose=FALSE){ cat("ideal: analysis of roll call data via Markov chain Monte Carlo methods.\n\n") ## calling args, some evaluated if symbols, for future use cl <- match.call() if(is.null(cl$d) | is.symbol(cl$d)) cl$d <- eval(d,parent.frame()) if(is.null(cl$codes)) cl$codes <- codes if(is.null(cl$dropList)) cl$dropList <- dropList if(is.null(cl$maxiter) | is.symbol(cl$maxiter)) cl$maxiter <- eval(maxiter,parent.frame()) if(is.null(cl$thin) | is.symbol(cl$thin)) cl$thin <- eval(thin,parent.frame()) if(is.null(cl$burnin) | is.symbol(cl$burnin)) cl$burnin <- eval(burnin,parent.frame()) if(is.null(cl$impute)) cl$impute <- impute if(is.null(cl$mda)) cl$mda <- mda if(is.null(cl$store.item) | is.symbol(cl$store.item)) cl$store.item <- eval(store.item,parent.frame()) if(is.null(cl$normalize)) cl$normalize <- normalize if(is.null(cl$verbose)) cl$verbose <- verbose ## check validity of user arguments if (!("rollcall" %in% class(object))) stop("object must be of class rollcall") if(((d%%1) != 0) || (d<1)){ stop("d is not a positive integer") } if(((thin%%1)!=0) || (thin<1)) { stop("thin is not a positive integer") } if(((maxiter%%1)!=0) || (maxiter<1)) { stop("maxiter is not a positive integer") } if(!is.list(dropList)) stop("dropList must be a list") if(!is.list(codes)) stop("codes must be a list") ##check iterations and thinning if ((maxiter%%thin)!=0) { stop("maxiter must be a multiple of thin") } if ((burnin%%thin)!=0) { stop("burnin must be a multiple of thin") } if (burnin >= maxiter) stop("burnin must be less than maxiter") if(!is.null(normalize) & d>1){ cat("normalize option is only meaningful when d=1\n") } if(normalize != meanzero){ normalize <- meanzero cat("meanzero option is being phased out; normalize provides the same functionality\n") cat(paste("For now, we will use your supplied value of meanzero, proceeding with normalize=", meanzero,"\n")) } ## pre-process rollcall object tmpObject <- object if(!is.null(codes)){ tmpObject$codes <- codes if(checkCodes(tmpObject$codes)) stop("supplied codes fail redundancy checks") } if(!is.null(dropList)){ if(verbose) cat(paste("Subsetting rollcall object", as.name(cl$object), "using dropList\n")) y <- dropRollCall(tmpObject,dropList) ## any subsetting to do? } else y <- tmpObject rm(tmpObject) n <- dim(y$votes)[1] m <- dim(y$votes)[2] legis.names <- dimnames(y$votes)[[1]] vote.names <- dimnames(y$votes)[[2]] ## map roll call votes into binary format required by ideal if(verbose){ printCodes(codes) cat("\n") } if(checkVotes(y$votes,codes)) stop("rollcall: can't map all votes using supplied codes") v <- convertCodes(y,codes) ## convert to zeros and ones and NAs ## using a file for storage usefile <- !is.null(file) ## check to see how much information will need to be stored numrec <- (maxiter-burnin)/thin+1 if (interactive() & verbose & ((store.item)&&((n+m)*d*numrec>2000000)) || ((!store.item)&&((n*d*numrec)>2000000)) ){ ans <- readline(paste("The current call to ideal will result in a large object that\n", "will take up a large amount of memory. Do you want to\n", "continue with the current configuation? (y/n): ", sep="")) if ((substr(ans, 1, 1) == "n")||(substr(ans, 1, 1) == "N")) stop("User terminated execution of ideal.") } if (interactive() & verbose & numrec>1000) { ans <- readline(paste("You are attempting to save ",numrec," iterations. This\n", "could result in a very large object and cause memory problems.\n", "Do you want to continue with the current call to ideal? (y/n): ", sep="")) if ((substr(ans, 1, 1) == "n")||(substr(ans, 1, 1) == "N")) stop("User terminated execution of ideal.") } cat(paste("Ideal Point Estimation\n\nNumber of Legislators\t\t", n,"\nNumber of Items\t\t\t", m, "\n\n")) xp <- xpv <- bp <- bpv <- NULL #################################################################### ## check priors #################################################################### if(verbose) cat("checking for any user-supplied priors...\n") if(!is.null(priors)){ if(!is.list(priors)) stop("priors must be a list") if(all(unlist(lapply(priors,is.null)))) stop("priors supplied in a list, but all elements are NULL") if(sum(unlist(lapply(priors,is.na)))>0) stop("priors contain missing values, which is not allowed") ## now check individual elements of prior list if(!is.null(priors$xp)){ if(length(priors$xp)==1) ## user supplied a scalar xp <- matrix(priors$xp,n,d) ## coerce a vector to a matrix if(length(priors$xp)>1 & d==1 & !is.matrix(priors$xp)) xp <- matrix(priors$xp,n,d) if(is.matrix(priors$xp)) xp <- priors$xp } else{ if(verbose) cat("no prior means supplied for ideal points,\n", "setting to default of 0\n") xp <- matrix(0,n,d) } if(!is.null(priors$xpv)){ if(length(priors$xpv)==1) ## user supplied a scalar xpv <- matrix(priors$xpv,n,d) ## coerce a vector to a matrix if(length(priors$xpv)>1 & d==1 & !is.matrix(priors$xpv)) xpv <- matrix(priors$xpv,n,d) if(is.matrix(priors$xpv)) xpv <- priors$xpv } else { if(verbose) cat("no prior precisions supplied for ideal points,\n", "setting to default of 1\n") xpv <- matrix(1,n,d) } if(!is.null(priors$bp)){ if(length(priors$bp)==1) ## user supplied a scalar bp <- matrix(priors$bp,m,d+1) if(is.matrix(priors$bp)) bp <- priors$bp } else { if(verbose) cat("no prior means supplied for item parameters,\n", "setting to default to 0\n") bp <- matrix(0,m,d+1) } if(!is.null(priors$bpv)){ if(length(priors$bpv)==1){ ## user supplied a scalar bpv <- matrix(priors$bpv,m,d+1) } if(is.matrix(priors$bpv)){ bpv <- priors$bpv } } else { if(verbose){ cat("no prior precisions supplied for item parameters,\n", "setting to default of .04\n") } bpv <- matrix(.04,m,d+1) } if (((nrow(xp) != n)||(ncol(xp) != d)) || ((nrow(xpv)!=n)||(ncol(xpv)!=d))) { stop("Dimensions of xp or xpv not n by d") } if (((nrow(bp) != m)||(ncol(bp) != (d+1))) || ((nrow(bpv)!=m)||(ncol(bpv)!=(d+1)))) { stop("Dimensions of bp or bpv not m by d+1") } } ## ################################################################## ## if we get this far with priors still NULL ## then revert to defaults ## ################################################################## if(is.null(xp)){ if(verbose) cat("setting prior means for ideal points to all zeros\n") xp <- matrix(0,n,d) } if(is.null(xpv)){ if(verbose) cat("setting prior precisions for ideal points to all 1\n") xpv <- matrix(1,n,d) } if(is.null(bp)){ if(verbose) cat("setting prior means for item parameters to all zeros\n") bp <- matrix(0,m,d+1) } if(is.null(bpv)){ if(verbose) cat("setting prior precisions for item parameters to all 0.04\n") bpv <- matrix(0.04,m,d+1) } xp <- as.vector(xp) xpv <- as.vector(xpv) bp <- as.vector(bp) bpv <- as.vector(bpv) ################################################################ ## check for start values - create if not supplied ################################################################ if(verbose) cat("\nchecking start values...\n") xstart <- NULL bstart <- NULL options(warn=-1) if(!is.list(startvals)){ if(startvals=="eigen" | is.null(startvals)){ xstart <- x.startvalues(v,d=d,verbose=verbose) bstart <- b.startvalues(v,xstart,d=d,verbose=verbose) bstart <- ifelse(abs(bstart - bp) < 2/sqrt(bpv), bstart, bp + 2*sign(bstart-bp)/sqrt(bpv)) } if(startvals=="random"){ if(verbose) cat("generating start values for ideal points by iid sampling from N(0,1)\n") xstart <- matrix(rnorm(n*d),n,d) bstart <- b.startvalues(v,xstart,d=d,verbose=verbose) bstart <- ifelse(abs(bstart - bp) < 2/sqrt(bpv), bstart, bp + 2*sign(bstart-bp)/sqrt(bpv)) } } ## user has passed something in startvals if(is.list(startvals)){ cat("found user-supplied list in startvals\n") cat("starvals is a list containing:\n") print(names(startvals)) if(!is.null(startvals$x)){ if(length(startvals$x) != n*d) stop("supplied start values for x is not n by d") if(d==1) xstart <- matrix(startvals$x,ncol=1) else xstart <- startvals$x if (sum(is.na(xstart))!=0) stop("xstart contains missing values") } if(!is.null(startvals$b)){ if(length(startvals$b) != m*(d+1)) stop("length of bstart not m by d+1") bstart <- startvals$b if(sum(is.na(bstart))!=0) stop("bstart contains missing values") } } ## final check if(is.null(xstart)){ cat("no user-supplied start values found\n") xstart <- x.startvalues(v,d,verbose=TRUE) } if(is.null(bstart)){ bstart <- b.startvalues(v,xstart,d=d,verbose=verbose) bstart <- ifelse(abs(bstart - bp) < 2/sqrt(bpv), bstart, bp + 2*sign(bstart-bp)/sqrt(bpv)) } ## report to user if(verbose){ if(n<501){ cat("using the following start values for ideal points:\n") print(xstart) } else { cat("using the following start values for ideal points (summary follows):\n") print(summary(xstart)) } if(m<501){ cat("using the following start values for item parameters:\n") print(bstart) } else { cat("using the following start values for item parameters (summary follows):\n") print(summary(bstart)) } } xstart <- as.vector(xstart) bstart <- as.vector(bstart) options(warn=0) ############################################################## ## end error checking ############################################################## yToC <- ifelse(is.na(v), 9, v) yToC <- as.vector(yToC) cat("\nStarting MCMC Iterations...\n") ## ############################################ ## two versions, one with usefile option ## ############################################ if (usefile) { if (length(legis.names) == n) { cat(paste("\"",c("Iteration",legis.names),"\"", sep="", collapse=","), file=file) } else { cat(paste("\"",c("Iteration",paste("x", 1:n, sep="")),"\"", sep="", collapse=","), file=file) } if (store.item){ cat(",", paste("\"", c(paste("b", as.vector(apply(expand.grid(1:m,1:(d+1)),1,paste,collapse=".")), sep=".")),"\"", sep="", collapse=","), sep="", file=file, append=TRUE) } cat("\n", file=file, append=TRUE) output <- .C("IDEAL", PACKAGE=.package.Name, as.integer(n), as.integer(m), as.integer(d), as.double(yToC), as.integer(maxiter), as.integer(thin), as.integer(impute), as.integer(mda), as.double(xp), as.double(xpv), as.double(bp), as.double(bpv), as.double(xstart), as.double(bstart), xoutput=NULL, boutput=NULL,as.integer(burnin), as.integer(usefile), as.integer(store.item), as.character(file), as.integer(verbose)) } ## not saving output to file, saving output to memory else if (!store.item) { output <- .C("IDEAL", PACKAGE=.package.Name, as.integer(n), as.integer(m), as.integer(d), as.double(yToC), as.integer(maxiter), as.integer(thin), as.integer(impute), as.integer(mda), as.double(xp), as.double(xpv), as.double(bp), as.double(bpv), as.double(xstart), as.double(bstart), xoutput=as.double(rep(0,n*d*numrec)), boutput=as.double(0), as.integer(burnin), as.integer(usefile), as.integer(store.item), as.character(file), as.integer(verbose)) } else { output <- .C("IDEAL", PACKAGE=.package.Name, as.integer(n), as.integer(m), as.integer(d), as.double(yToC), as.integer(maxiter), as.integer(thin), as.integer(impute), as.integer(mda), as.double(xp), as.double(xpv), as.double(bp), as.double(bpv), as.double(xstart), as.double(bstart), xoutput=as.double(rep(0,n*d*numrec)), boutput=as.double(rep(0,m*(d+1)*numrec)),as.integer(burnin), as.integer(usefile), as.integer(store.item), as.character(file), as.integer(verbose)) } cat("\n") ## parse returns from C xbar <- NULL betabar <- NULL if (!usefile) { itervec <- seq(burnin,maxiter,by=thin) keep <- itervec > burnin ## ideal points print(output$xoutput[1:(n*d)]) x <- array(output$xoutput, c(n,d,numrec)) ## reshape to iteration first format x <- aperm(x,c(3,1,2)) dimnames(x) <- list(itervec, legis.names, paste("D",1:d,sep="")) if(verbose) cat("...computing posterior means for ideal points...") xbar <- getMean(keep,x) if(verbose) cat("done\n") ############################################################### ## item parameters if(store.item){ print(vote.names) b <- array(output$boutput,c(m,d+1,numrec)) ## votes by parameters by iters dimnames(b) <- list(vote.names, c(paste("Discrimination D",1:d,sep=""), "Difficulty"), itervec) ## reshape to iteration first format b <- aperm(b,c(3,1,2)) ## iters by votes by parameters if(verbose) cat("...computing posterior means for item parameters...") betabar <- getMean(keep,b) if(verbose) cat("done\n") } else { b <- NULL } } else { ## output went to a file b <- x <- NULL } ## wrap up for return to user out <- list(n=n,m=m,d=d, codes=codes, x=x, beta=b, xbar=xbar, betabar=betabar, call=cl) class(out) <- c("ideal") ## and, finally, if the user wanted meanzero if(normalize){ if(verbose) cat("...normalizing output (post-processing)...") out <- postProcess(out, constraints="normalize") if(verbose) cat("done\n") } return(out) } x.startvalues <- function(x,d,scale=TRUE,constraint=NULL,verbose=FALSE){ if(verbose) cat("will use eigen-decomposition method to get start values for ideal points...") ## from Jong Hee Park row.mean <- apply(x, 1, mean, na.rm=TRUE) col.mean <- apply(x, 2, mean, na.rm=TRUE) dc1 <- sweep(x, 1, row.mean) dc2 <- sweep(dc1, 2, col.mean) dc <- dc2 + mean(x, na.rm = T) r <- cor(t(dc),use="pairwise") r[is.na(r)] <- 0 e <- eigen(r) v <- e$vectors[,1:d] v <- as.matrix(v) if(scale){ for(i in 1:d){ v[,i] <- v[,i]*sqrt(e$value[i]) } } if (!is.null(constraint)) { v <- predict(lm(constraint ~ v), newdata=as.data.frame(v)) } if(verbose) cat("done\n") return(v) } probit <- function(y,x){ glmobj <- glm(y ~ x, family=binomial(link=probit)) b <- coef(glmobj) k <- length(b) b <- b[c(2:k,1)] ## put intercept last b } b.startvalues <- function(v,x,d,verbose=FALSE){ m <- dim(v)[2] if(verbose) cat(paste("running", m, "vote-specific probit GLMs\n", "for start values for item/bill parameters\n", "conditional on start values for ideal points...")) b <- matrix(NA,m,d+1) for(j in 1:m){ b[j,] <- probit(y=v[,j],x=x) } ## check for crazy discrimination parameters for(j in 1:d){ bad <- is.na(b[,j]) b[bad,j] <- 0 } b[,d+1] <- -b[,d+1] ## flip the sign on the intercepts, make it a difficulty parameter if(verbose) cat("done\n") b } pscl/R/hurdle.R0000644000175100001440000006710011651657013013051 0ustar hornikusershurdle <- function(formula, data, subset, na.action, weights, offset, dist = c("poisson", "negbin", "geometric"), zero.dist = c("binomial", "poisson", "negbin", "geometric"), link = c("logit", "probit", "cloglog", "cauchit", "log"), control = hurdle.control(...), model = TRUE, y = TRUE, x = FALSE, ...) { ## set up likelihood components zeroPoisson <- function(parms) { ## mean mu <- as.vector(exp(Z %*% parms + offsetz)) ## log-likelihood loglik0 <- -mu ## = dpois(0, lambda = mu, log = TRUE) ## collect and return loglik <- sum(weights[Y0] * loglik0[Y0]) + sum(weights[Y1] * log(1 - exp(loglik0[Y1]))) loglik } countPoisson <- function(parms) { ## mean mu <- as.vector(exp(X %*% parms + offsetx))[Y1] ## log-likelihood loglik0 <- -mu ## = dpois(0, lambda = mu, log = TRUE) loglik1 <- dpois(Y[Y1], lambda = mu, log = TRUE) ## collect and return loglik <- sum(weights[Y1] * loglik1) - sum(weights[Y1] * log(1 - exp(loglik0))) loglik } zeroNegBin <- function(parms) { ## parameters mu <- as.vector(exp(Z %*% parms[1:kz] + offsetz)) theta <- exp(parms[kz+1]) ## log-likelihood loglik0 <- suppressWarnings(dnbinom(0, size = theta, mu = mu, log = TRUE)) ## collect and return loglik <- sum(weights[Y0] * loglik0[Y0]) + sum(weights[Y1] * log(1 - exp(loglik0[Y1]))) loglik } countNegBin <- function(parms) { ## parameters mu <- as.vector(exp(X %*% parms[1:kx] + offsetx))[Y1] theta <- exp(parms[kx+1]) ## log-likelihood loglik0 <- suppressWarnings(dnbinom(0, size = theta, mu = mu, log = TRUE)) loglik1 <- suppressWarnings(dnbinom(Y[Y1], size = theta, mu = mu, log = TRUE)) ## collect and return loglik <- sum(weights[Y1] * loglik1) - sum(weights[Y1] * log(1 - exp(loglik0))) loglik } zeroGeom <- function(parms) zeroNegBin(c(parms, 0)) countGeom <- function(parms) countNegBin(c(parms, 0)) zeroBinom <- function(parms) { ## mean mu <- as.vector(linkinv(Z %*% parms + offsetz)) ## log-likelihood loglik <- sum(weights[Y0] * log(1 - mu[Y0])) + sum(weights[Y1] * log(mu[Y1])) loglik } countGradPoisson <- function(parms) { eta <- as.vector(X %*% parms + offsetx)[Y1] mu <- exp(eta) colSums(((Y[Y1] - mu) - exp(ppois(0, lambda = mu, log.p = TRUE) - ppois(0, lambda = mu, lower.tail = FALSE, log.p = TRUE) + eta)) * weights[Y1] * X[Y1, , drop = FALSE]) } countGradGeom <- function(parms) { eta <- as.vector(X %*% parms + offsetx)[Y1] mu <- exp(eta) colSums(((Y[Y1] - mu * (Y[Y1] + 1)/(mu + 1)) - exp(pnbinom(0, mu = mu, size = 1, log.p = TRUE) - pnbinom(0, mu = mu, size = 1, lower.tail = FALSE, log.p = TRUE) - log(mu + 1) + eta)) * weights[Y1] * X[Y1, , drop = FALSE]) } countGradNegBin <- function(parms) { eta <- as.vector(X %*% parms[1:kx] + offsetx)[Y1] mu <- exp(eta) theta <- exp(parms[kx+1]) logratio <- pnbinom(0, mu = mu, size = theta, log.p = TRUE) - pnbinom(0, mu = mu, size = theta, lower.tail = FALSE, log.p = TRUE) rval <- colSums(((Y[Y1] - mu * (Y[Y1] + theta)/(mu + theta)) - exp(logratio + log(theta) - log(mu + theta) + eta)) * weights[Y1] * X[Y1, , drop = FALSE]) rval2 <- sum((digamma(Y[Y1] + theta) - digamma(theta) + log(theta) - log(mu + theta) + 1 - (Y[Y1] + theta)/(mu + theta) + exp(logratio) * (log(theta) - log(mu + theta) + 1 - theta/(mu + theta))) * weights[Y1]) * theta c(rval, rval2) } zeroGradPoisson <- function(parms) { eta <- as.vector(Z %*% parms + offsetz) mu <- exp(eta) colSums(ifelse(Y0, -mu, exp(ppois(0, lambda = mu, log.p = TRUE) - ppois(0, lambda = mu, lower.tail = FALSE, log.p = TRUE) + eta)) * weights * Z) } zeroGradGeom <- function(parms) { eta <- as.vector(Z %*% parms + offsetz) mu <- exp(eta) colSums(ifelse(Y0, -mu/(mu + 1), exp(pnbinom(0, mu = mu, size = 1, log.p = TRUE) - pnbinom(0, mu = mu, size = 1, lower.tail = FALSE, log.p = TRUE) - log(mu + 1) + eta)) * weights * Z) } zeroGradNegBin <- function(parms) { eta <- as.vector(Z %*% parms[1:kz] + offsetz) mu <- exp(eta) theta <- exp(parms[kz+1]) logratio <- pnbinom(0, mu = mu, size = theta, log.p = TRUE) - pnbinom(0, mu = mu, size = theta, lower.tail = FALSE, log.p = TRUE) rval <- colSums(ifelse(Y0, -mu * theta/(mu + theta), exp(logratio + log(theta) - log(mu + theta) + eta)) * weights * Z) rval2 <- sum(ifelse(Y0, log(theta) - log(mu + theta) + 1 - theta/(mu + theta), -exp(logratio) * (log(theta) - log(mu + theta) + 1 - theta/(mu + theta))) * weights * theta) c(rval, rval2) } zeroGradBinom <- function(parms) { eta <- as.vector(Z %*% parms + offsetz) mu <- linkinv(eta) colSums(ifelse(Y0, -1/(1-mu), 1/mu) * linkobj$mu.eta(eta) * weights * Z) } ## collect likelihood components dist <- match.arg(dist) zero.dist <- match.arg(zero.dist) countDist <- switch(dist, "poisson" = countPoisson, "geometric" = countGeom, "negbin" = countNegBin) zeroDist <- switch(zero.dist, "poisson" = zeroPoisson, "geometric" = zeroGeom, "negbin" = zeroNegBin, "binomial" = zeroBinom) countGrad <- switch(dist, "poisson" = countGradPoisson, "geometric" = countGradGeom, "negbin" = countGradNegBin) zeroGrad <- switch(zero.dist, "poisson" = zeroGradPoisson, "geometric" = zeroGradGeom, "negbin" = zeroGradNegBin, "binomial" = zeroGradBinom) loglikfun <- function(parms) countDist(parms[1:(kx + (dist == "negbin"))]) + zeroDist(parms[(kx + (dist == "negbin") + 1):(kx + kz + (dist == "negbin") + (zero.dist == "negbin"))]) gradfun <- function(parms) c(countGrad(parms[1:(kx + (dist == "negbin"))]), zeroGrad(parms[(kx + (dist == "negbin") + 1):(kx + kz + (dist == "negbin") + (zero.dist == "negbin"))])) ## binary link processing linkstr <- match.arg(link) linkobj <- make.link(linkstr) linkinv <- linkobj$linkinv if(control$trace) cat("Hurdle Count Model\n", paste("count model:", dist, "with log link\n"), paste("zero hurdle model:", zero.dist, "with", ifelse(zero.dist == "binomial", linkstr, "log"), "link\n"), sep = "") ## call and formula cl <- match.call() if(missing(data)) data <- environment(formula) mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action", "weights", "offset"), names(mf), 0) mf <- mf[c(1, m)] mf$drop.unused.levels <- TRUE ## extended formula processing if(length(formula[[3]]) > 1 && identical(formula[[3]][[1]], as.name("|"))) { ff <- formula formula[[3]][1] <- call("+") mf$formula <- formula ffc <- . ~ . ffz <- ~ . ffc[[2]] <- ff[[2]] ffc[[3]] <- ff[[3]][[2]] ffz[[3]] <- ff[[3]][[3]] ffz[[2]] <- NULL } else { ffz <- ffc <- ff <- formula ffz[[2]] <- NULL } if(inherits(try(terms(ffz), silent = TRUE), "try-error")) { ffz <- eval(parse(text = sprintf( paste("%s -", deparse(ffc[[2]])), deparse(ffz) ))) } ## call model.frame() mf[[1]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) ## extract terms, model matrices, response mt <- attr(mf, "terms") mtX <- terms(ffc, data = data) X <- model.matrix(mtX, mf) mtZ <- terms(ffz, data = data) mtZ <- terms(update(mtZ, ~ .), data = data) Z <- model.matrix(mtZ, mf) Y <- model.response(mf, "numeric") ## sanity checks if(length(Y) < 1) stop("empty model") if(all(Y > 0)) stop("invalid dependent variable, minimum count is not zero") if(!isTRUE(all.equal(as.vector(Y), as.integer(round(Y + 0.001))))) stop("invalid dependent variable, non-integer values") Y <- as.integer(round(Y + 0.001)) if(any(Y < 0)) stop("invalid dependent variable, negative counts") if(zero.dist == "negbin" & isTRUE(all.equal(as.vector(Z), rep.int(Z[1], length(Z))))) stop("negative binomial zero hurdle model is not identified with only an intercept") if(control$trace) { cat("dependent variable:\n") tab <- table(factor(Y, levels = 0:max(Y)), exclude = NULL) names(dimnames(tab)) <- NULL print(tab) } ## convenience variables n <- length(Y) kx <- NCOL(X) kz <- NCOL(Z) Y0 <- Y <= 0 Y1 <- Y > 0 ## weights and offset weights <- model.weights(mf) if(is.null(weights)) weights <- 1 if(length(weights) == 1) weights <- rep.int(weights, n) weights <- as.vector(weights) names(weights) <- rownames(mf) offsetx <- model_offset_2(mf, terms = mtX, offset = TRUE) if(is.null(offsetx)) offsetx <- 0 if(length(offsetx) == 1) offsetx <- rep.int(offsetx, n) offsetx <- as.vector(offsetx) offsetz <- model_offset_2(mf, terms = mtZ, offset = FALSE) if(is.null(offsetz)) offsetz <- 0 if(length(offsetz) == 1) offsetz <- rep.int(offsetz, n) offsetz <- as.vector(offsetz) ## starting values start <- control$start if(!is.null(start)) { valid <- TRUE if(!("count" %in% names(start))) { valid <- FALSE warning("invalid starting values, count model coefficients not specified") start$count <- rep.int(0, kx) } if(!("zero" %in% names(start))) { valid <- FALSE warning("invalid starting values, zero-inflation model coefficients not specified") start$zero <- rep.int(0, kz) } if(length(start$count) != kx) { valid <- FALSE warning("invalid starting values, wrong number of count model coefficients") } if(length(start$zero) != kz) { valid <- FALSE warning("invalid starting values, wrong number of zero-inflation model coefficients") } if(dist == "negbin" | zero.dist == "negbin") { if(!("theta" %in% names(start))) start$theta <- c(1, 1) start <- list(count = start$count, zero = start$zero, theta = rep(start$theta, length.out = 2)) if(is.null(names(start$theta))) names(start$theta) <- c("count", "zero") if(dist != "negbin") start$theta <- start$theta["zero"] if(zero.dist != "negbin") start$theta <- start$theta["count"] } else { start <- list(count = start$count, zero = start$zero) } if(!valid) start <- NULL } if(is.null(start)) { if(control$trace) cat("generating starting values...") model_count <- glm.fit(X, Y, family = poisson(), weights = weights, offset = offsetx) model_zero <- switch(zero.dist, "poisson" = glm.fit(Z, Y, family = poisson(), weights = weights, offset = offsetz), "negbin" = glm.fit(Z, Y, family = poisson(), weights = weights, offset = offsetz), "geometric" = suppressWarnings(glm.fit(Z, factor(Y > 0), family = binomial(), weights = weights, offset = offsetz)), "binomial" = suppressWarnings(glm.fit(Z, factor(Y > 0), family = binomial(link = linkstr), weights = weights, offset = offsetz))) start <- list(count = model_count$coefficients, zero = model_zero$coefficients) start$theta <- c(count = if(dist == "negbin") 1 else NULL, zero = if(zero.dist == "negbin") 1 else NULL) if(control$trace) cat("done\n") } ## model fitting ## control parameters method <- control$method hessian <- control$hessian separate <- control$separate ocontrol <- control control$method <- control$hessian <- control$separate <- control$start <- NULL ## ML estimation ## separate estimation of censored and truncated component... if(separate) { if(control$trace) cat("calling optim() for count component estimation:\n") fit_count <- optim(fn = countDist, gr = countGrad, par = c(start$count, if(dist == "negbin") log(start$theta["count"]) else NULL), method = method, hessian = hessian, control = control) if(control$trace) cat("calling optim() for zero hurdle component estimation:\n") fit_zero <- optim(fn = zeroDist, gr = zeroGrad, par = c(start$zero, if(zero.dist == "negbin") log(start$theta["zero"]) else NULL), method = method, hessian = hessian, control = control) if(control$trace) cat("done\n") fit <- list(count = fit_count, zero = fit_zero) ## coefficients coefc <- fit_count$par[1:kx] coefz <- fit_zero$par[1:kz] theta <- c(count = if(dist == "negbin") as.vector(exp(fit_count$par[kx+1])) else NULL, zero = if(zero.dist == "negbin") as.vector(exp(fit_zero$par[kz+1])) else NULL) ## covariances vc_count <- -solve(as.matrix(fit_count$hessian)) vc_zero <- -solve(as.matrix(fit_zero$hessian)) SE.logtheta <- list() if(dist == "negbin") { SE.logtheta$count <- as.vector(sqrt(diag(vc_count)[kx+1])) vc_count <- vc_count[-(kx+1), -(kx+1), drop = FALSE] } if(zero.dist == "negbin") { SE.logtheta$zero <- as.vector(sqrt(diag(vc_zero)[kz+1])) vc_zero <- vc_zero[-(kz+1), -(kz+1), drop = FALSE] } vc <- rbind(cbind(vc_count, matrix(0, kx, kz)), cbind(matrix(0, kz, kx), vc_zero)) SE.logtheta <- unlist(SE.logtheta) } else { ## ...or joint. if(control$trace) cat("calling optim() for joint count and zero hurlde estimation:\n") fit <- optim(fn = loglikfun, gr = gradfun, par = c(start$count, if(dist == "negbin") log(start$theta["count"]) else NULL, start$zero, if(zero.dist == "negbin") log(start$theta["zero"]) else NULL), method = method, hessian = hessian, control = control) if(fit$convergence > 0) warning("optimization failed to converge") if(control$trace) cat("done\n") ## coefficients coefc <- fit$par[1:kx] coefz <- fit$par[(kx + (dist == "negbin") + 1):(kx + kz + (dist == "negbin"))] ## covariances vc <- -solve(as.matrix(fit$hessian)) np <- c(if(dist == "negbin") kx+1 else NULL, if(zero.dist == "negbin") kx+kz+1+(dist == "negbin") else NULL) if(length(np) > 0) { theta <- as.vector(exp(fit$par[np])) SE.logtheta <- as.vector(sqrt(diag(vc)[np])) names(theta) <- names(SE.logtheta) <- c(if(dist == "negbin") "count" else NULL, if(zero.dist == "negbin") "zero" else NULL) vc <- vc[-np, -np, drop = FALSE] } else { theta <- NULL SE.logtheta <- NULL } } names(coefc) <- names(start$count) <- colnames(X) names(coefz) <- names(start$zero) <- colnames(Z) colnames(vc) <- rownames(vc) <- c(paste("count", colnames(X), sep = "_"), paste("zero", colnames(Z), sep = "_")) ## fitted and residuals phi <- if(zero.dist == "binomial") linkinv(Z %*% coefz + offsetz)[,1] else exp(Z %*% coefz + offsetz)[,1] p0_zero <- switch(zero.dist, "binomial" = log(phi), "poisson" = ppois(0, lambda = phi, lower.tail = FALSE, log.p = TRUE), "negbin" = pnbinom(0, size = theta["zero"], mu = phi, lower.tail = FALSE, log.p = TRUE), "geometric" = pnbinom(0, size = 1, mu = phi, lower.tail = FALSE, log.p = TRUE)) mu <- exp(X %*% coefc + offsetx)[,1] p0_count <- switch(dist, "poisson" = ppois(0, lambda = mu, lower.tail = FALSE, log.p = TRUE), "negbin" = pnbinom(0, size = theta["count"], mu = mu, lower.tail = FALSE, log.p = TRUE), "geometric" = pnbinom(0, size = 1, mu = mu, lower.tail = FALSE, log.p = TRUE)) Yhat <- exp((p0_zero - p0_count) + log(mu)) res <- sqrt(weights) * (Y - Yhat) ## effective observations nobs <- sum(weights > 0) ## = n - sum(weights == 0) rval <- list(coefficients = list(count = coefc, zero = coefz), residuals = res, fitted.values = Yhat, optim = fit, method = method, control = control, start = start, weights = if(identical(as.vector(weights), rep.int(1L, n))) NULL else weights, offset = list(count = if(identical(offsetx, rep.int(0, n))) NULL else offsetx, zero = if(identical(offsetz, rep.int(0, n))) NULL else offsetz), n = nobs, df.null = nobs - 2, df.residual = nobs - (kx + kz + (dist == "negbin") + (zero.dist == "negbin")), terms = list(count = mtX, zero = mtZ, full = mt), theta = theta, SE.logtheta = SE.logtheta, loglik = if(separate) fit_count$value + fit_zero$value else fit$value, vcov = vc, dist = list(count = dist, zero = zero.dist), link = if(zero.dist == "binomial") linkstr else NULL, linkinv = if(zero.dist == "binomial") linkinv else NULL, separate = separate, converged = if(separate) fit_count$convergence < 1 & fit_zero$convergence < 1 else fit$convergence < 1, call = cl, formula = ff, levels = .getXlevels(mt, mf), contrasts = list(count = attr(X, "contrasts"), zero = attr(Z, "contrasts")) ) if(model) rval$model <- mf if(y) rval$y <- Y if(x) rval$x <- list(count = X, zero = Z) class(rval) <- "hurdle" return(rval) } hurdle.control <- function(method = "BFGS", maxit = 10000, trace = FALSE, separate = TRUE, start = NULL, ...) { rval <- list(method = method, maxit = maxit, trace = trace, separate = separate, start = start) rval <- c(rval, list(...)) if(!is.null(rval$fnscale)) warning("fnscale must not be modified") rval$fnscale <- -1 if(!is.null(rval$hessian)) warning("hessian must not be modified") rval$hessian <- TRUE if(is.null(rval$reltol)) rval$reltol <- .Machine$double.eps^(1/1.6) rval } coef.hurdle <- function(object, model = c("full", "count", "zero"), ...) { model <- match.arg(model) rval <- object$coefficients rval <- switch(model, "full" = structure(c(rval$count, rval$zero), .Names = c(paste("count", names(rval$count), sep = "_"), paste("zero", names(rval$zero), sep = "_"))), "count" = rval$count, "zero" = rval$zero) rval } vcov.hurdle <- function(object, model = c("full", "count", "zero"), ...) { model <- match.arg(model) rval <- object$vcov if(model == "full") return(rval) cf <- object$coefficients[[model]] wi <- seq(along = object$coefficients$count) rval <- if(model == "count") rval[wi, wi] else rval[-wi, -wi] colnames(rval) <- rownames(rval) <- names(cf) return(rval) } logLik.hurdle <- function(object, ...) { structure(object$loglik, df = object$n - object$df.residual, class = "logLik") } print.hurdle <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:", deparse(x$call, width.cutoff = floor(getOption("width") * 0.85)), "", sep = "\n") if(!x$converged) { cat("model did not converge\n") } else { cat(paste("Count model coefficients (truncated ", x$dist$count, " with log link):\n", sep = "")) print.default(format(x$coefficients$count, digits = digits), print.gap = 2, quote = FALSE) if(x$dist$count == "negbin") cat(paste("Theta =", round(x$theta["count"], digits), "\n")) zero_dist <- if(x$dist$zero != "binomial") paste("censored", x$dist$zero, "with log link") else paste("binomial with", x$link, "link") cat(paste("\nZero hurdle model coefficients (", zero_dist, "):\n", sep = "")) print.default(format(x$coefficients$zero, digits = digits), print.gap = 2, quote = FALSE) if(x$dist$zero == "negbin") cat(paste("Theta =", round(x$theta["zero"], digits), "\n")) cat("\n") } invisible(x) } summary.hurdle <- function(object,...) { ## residuals object$residuals <- residuals(object, type = "pearson") ## compute z statistics kc <- length(object$coefficients$count) kz <- length(object$coefficients$zero) se <- sqrt(diag(object$vcov)) coef <- c(object$coefficients$count, object$coefficients$zero) if(object$dist$count == "negbin") { coef <- c(coef[1:kc], "Log(theta)" = as.vector(log(object$theta["count"])), coef[(kc+1):(kc+kz)]) se <- c(se[1:kc], object$SE.logtheta["count"], se[(kc+1):(kc+kz)]) kc <- kc+1 } if(object$dist$zero == "negbin") { coef <- c(coef, "Log(theta)" = as.vector(log(object$theta["zero"]))) se <- c(se, object$SE.logtheta["zero"]) kz <- kz+1 } zstat <- coef/se pval <- 2*pnorm(-abs(zstat)) coef <- cbind(coef, se, zstat, pval) colnames(coef) <- c("Estimate", "Std. Error", "z value", "Pr(>|z|)") object$coefficients$count <- coef[1:kc,,drop = FALSE] object$coefficients$zero <- coef[(kc+1):(kc+kz),,drop = FALSE] ## number of iterations object$iterations <- if(!object$separate) tail(na.omit(object$optim$count), 1) else tail(na.omit(object$optim$count$count), 1) + tail(na.omit(object$optim$zero$count), 1) ## delete some slots object$fitted.values <- object$terms <- object$model <- object$y <- object$x <- object$levels <- object$contrasts <- object$start <- object$separate <- NULL ## return class(object) <- "summary.hurdle" object } print.summary.hurdle <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("\nCall:", deparse(x$call, width.cutoff = floor(getOption("width") * 0.85)), "", sep = "\n") if(!x$converged) { cat("model did not converge\n") } else { cat("Pearson residuals:\n") print(structure(quantile(x$residuals), names = c("Min", "1Q", "Median", "3Q", "Max")), digits = digits, ...) cat(paste("\nCount model coefficients (truncated ", x$dist$count, " with log link):\n", sep = "")) printCoefmat(x$coefficients$count, digits = digits, signif.legend = FALSE) zero_dist <- if(x$dist$zero != "binomial") paste("censored", x$dist$zero, "with log link") else paste("binomial with", x$link, "link") cat(paste("Zero hurdle model coefficients (", zero_dist, "):\n", sep = "")) printCoefmat(x$coefficients$zero, digits = digits, signif.legend = FALSE) if(getOption("show.signif.stars") & any(rbind(x$coefficients$count, x$coefficients$zero)[,4] < 0.1)) cat("---\nSignif. codes: ", "0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1", "\n") if(!is.null(x$theta)) cat(paste("\nTheta:", paste(names(x$theta), round(x$theta, digits), sep = " = ", collapse = ", "))) cat(paste("\nNumber of iterations in", x$method, "optimization:", x$iterations, "\n")) cat("Log-likelihood:", formatC(x$loglik, digits = digits), "on", x$n - x$df.residual, "Df\n") } invisible(x) } terms.hurdle <- function(x, model = c("count", "zero"), ...) { x$terms[[match.arg(model)]] } model.matrix.hurdle <- function(object, model = c("count", "zero"), ...) { model <- match.arg(model) if(!is.null(object$x)) rval <- object$x[[model]] else if(!is.null(object$model)) rval <- model.matrix(object$terms[[model]], object$model, contrasts = object$contrasts[[model]]) else stop("not enough information in fitted model to return model.matrix") return(rval) } predict.hurdle <- function(object, newdata, type = c("response", "prob", "count", "zero"), na.action = na.pass, at = NULL, ...) { type <- match.arg(type) ## if no new data supplied if(missing(newdata)) { if(type != "response") { if(!is.null(object$x)) { X <- object$x$count Z <- object$x$zero } else if(!is.null(object$model)) { X <- model.matrix(object$terms$count, object$model, contrasts = object$contrasts$count) Z <- model.matrix(object$terms$zero, object$model, contrasts = object$contrasts$zero) } else { stop("predicted probabilities cannot be computed with missing newdata") } offsetx <- if(is.null(object$offset$count)) rep.int(0, NROW(X)) else object$offset$count offsetz <- if(is.null(object$offset$zero)) rep.int(0, NROW(Z)) else object$offset$zero } else { return(object$fitted.values) } } else { mf <- model.frame(delete.response(object$terms$full), newdata, na.action = na.action, xlev = object$levels) X <- model.matrix(delete.response(object$terms$count), mf, contrasts = object$contrasts$count) Z <- model.matrix(delete.response(object$terms$zero), mf, contrasts = object$contrasts$zero) offsetx <- model_offset_2(mf, terms = object$terms$count, offset = FALSE) offsetz <- model_offset_2(mf, terms = object$terms$zero, offset = FALSE) if(is.null(offsetx)) offsetx <- rep.int(0, NROW(X)) if(is.null(offsetz)) offsetz <- rep.int(0, NROW(Z)) if(!is.null(object$call$offset)) offsetx <- offsetx + eval(object$call$offset, newdata) } phi <- if(object$dist$zero == "binomial") object$linkinv(Z %*% object$coefficients$zero + offsetz)[,1] else exp(Z %*% object$coefficients$zero + offsetz)[,1] p0_zero <- switch(object$dist$zero, "binomial" = log(phi), "poisson" = ppois(0, lambda = phi, lower.tail = FALSE, log.p = TRUE), "negbin" = pnbinom(0, size = object$theta["zero"], mu = phi, lower.tail = FALSE, log.p = TRUE), "geometric" = pnbinom(0, size = 1, mu = phi, lower.tail = FALSE, log.p = TRUE)) mu <- exp(X %*% object$coefficients$count + offsetx)[,1] p0_count <- switch(object$dist$count, "poisson" = ppois(0, lambda = mu, lower.tail = FALSE, log.p = TRUE), "negbin" = pnbinom(0, size = object$theta["count"], mu = mu, lower.tail = FALSE, log.p = TRUE), "geometric" = pnbinom(0, size = 1, mu = mu, lower.tail = FALSE, log.p = TRUE)) logphi <- p0_zero - p0_count if(type == "response") rval <- exp(logphi + log(mu)) if(type == "count") rval <- mu if(type == "zero") rval <- exp(logphi) ## predicted probabilities if(type == "prob") { if(!is.null(object$y)) y <- object$y else if(!is.null(object$model)) y <- model.response(object$model) else stop("predicted probabilities cannot be computed for fits with y = FALSE and model = FALSE") yUnique <- if(is.null(at)) 0:max(y) else at nUnique <- length(yUnique) rval <- matrix(NA, nrow = length(mu), ncol = nUnique) dimnames(rval) <- list(rownames(X), yUnique) rval[,1] <- 1 - exp(p0_zero) switch(object$dist$count, "poisson" = { for(i in 2:nUnique) rval[,i] <- exp(logphi + dpois(yUnique[i], lambda = mu, log = TRUE)) }, "negbin" = { for(i in 2:nUnique) rval[,i] <- exp(logphi + dnbinom(yUnique[i], mu = mu, size = object$theta["count"], log = TRUE)) }, "geometric" = { for(i in 2:nUnique) rval[,i] <- exp(logphi + dnbinom(yUnique[i], mu = mu, size = 1, log = TRUE)) }) } rval } fitted.hurdle <- function(object, ...) { object$fitted.values } residuals.hurdle <- function(object, type = c("pearson", "response"), ...) { type <- match.arg(type) res <- object$residuals switch(type, "response" = { return(res) }, "pearson" = { mu <- predict(object, type = "count") phi <- predict(object, type = "zero") theta1 <- switch(object$dist$count, "poisson" = 0, "geometric" = 1, "negbin" = 1/object$theta["count"]) vv <- object$fitted.values * (1 + ((1-phi) + theta1) * mu) return(res/sqrt(vv)) }) } predprob.hurdle <- function(obj, ...){ predict(obj, type = "prob", ...) } extractAIC.hurdle <- function(fit, scale = NULL, k = 2, ...) { c(attr(logLik(fit), "df"), AIC(fit, k = k)) } hurdletest <- function(object, ...) { stopifnot(inherits(object, "hurdle")) stopifnot(object$dist$count == object$dist$zero) stopifnot(all(sort(names(object$coefficients$count)) == sort(names(object$coefficients$zero)))) stopifnot(require("car")) nam <- names(object$coefficients$count) lh <- paste("count_", nam, " = ", "zero_", nam, sep = "") rval <- car::linearHypothesis(object, lh, ...) attr(rval, "heading")[1] <- "Wald test for hurdle models\n\nRestrictions:" return(rval) } ## convenience helper function model_offset_2 <- function(x, terms = NULL, offset = TRUE) ## allow optionally different terms ## potentially exclude "(offset)" { if(is.null(terms)) terms <- attr(x, "terms") offsets <- attr(terms, "offset") if(length(offsets) > 0) { ans <- if(offset) x$"(offset)" else NULL if(is.null(ans)) ans <- 0 for(i in offsets) ans <- ans + x[[deparse(attr(terms, "variables")[[i + 1]])]] ans } else { ans <- if(offset) x$"(offset)" else NULL } if(!is.null(ans) && !is.numeric(ans)) stop("'offset' must be numeric") ans } pscl/R/hitmiss.R0000644000175100001440000000643310620174634013246 0ustar hornikusers## hitmiss methods hitmiss <- function(obj, digits=max(3,getOption("digits")-3), ...){ UseMethod("hitmiss") } hitmiss.glm <- function(obj, digits=max(3,getOption("digits")-3), ..., k=.5){ if(!inherits(obj,"glm")) stop("hitmiss.glm only defined for objects of class glm\n") ## check to make sure if of class binomial if(family(obj)$family!="binomial") stop("hitmiss.glm only defined for binomial family glm objects\n") if(is.null(obj$y)) y <- update(obj,y=TRUE)$y else y <- obj$y if(!all(y %in% c(0,1))) stop("hitmiss.glm only defined for models with binary responses") p <- predict(obj,type="response") tab <- matrix(NA,2,2) tab[1,1] <- sum(pk & y==0,na.rm=T) ## false positive tab[2,2] <- sum(p>k & y==1,na.rm=T) ## true positive pcp <- sum(diag(tab))/sum(tab) * 100 ## overall PCP measure pcp0 <- tab[1,1]/sum(tab[1:2,1])*100 ## PCP | y = 0 pcp1 <- tab[2,2]/sum(tab[1:2,2])*100 ## PCP | y = 1 dimnames(tab) <- list(c("yhat=0","yhat=1"), c("y=0","y=1")) cat(paste("Classification Threshold =",k,"\n")) print(tab) cat(paste("Percent Correctly Predicted = ", format(pcp,digits=digits), "%\n", sep="")) cat(paste("Percent Correctly Predicted = ", format(pcp0,digits=digits), "%, for y = 0\n", sep="")) cat(paste("Percent Correctly Predicted = ", format(pcp1,digits=digits), "% for y = 1\n", sep="")) nullmodel <- max(c(sum(y==0),sum(y==1)))/sum(tab) * 100 cat(paste("Null Model Correctly Predicts ", format(nullmodel,digits=digits), "%\n", sep="")) out <- c(pcp,pcp0,pcp1) out } hitmiss.polr <- function(obj, digits=max(3,getOption("digits")-3), ...){ tmp <- obj p <- predict(tmp) if(is.null(tmp$model)){ cat("refitting the model to extract responses...\n") tmp <- update(tmp,model=TRUE) cat("\n") } y <- tmp$model[,1] uniqueY <- sort(unique(y)) J <- length(uniqueY) p <- factor(p,levels=uniqueY) y <- factor(y,levels=uniqueY) cat("Table of Actual (y) Against Predicted (p)\n") cat("Classification rule: outcome with highest probability.\n") tab <- table(y,p) dimnames(tab)[[1]] <- paste("y=",dimnames(tab)[[1]],sep="") dimnames(tab)[[2]] <- paste("p=",dimnames(tab)[[2]],sep="") n <- length(y) pcp <- sum(diag(tab))/n * 100 tabY <- table(y) pcp0 <- tabY[which.max(tabY)]/n * 100 pcpByRow <- rep(NA,J) for(i in 1:J){ pcpByRow[i] <- tab[i,i]/sum(tab[i,]) * 100 } tab <- cbind(tab,pcpByRow) dimnames(tab)[[2]][J+1] <- "Row PCP" print(tab,digits=digits) cat("\n") cat("Percent Correctly Predicted, Fitted Model: ", format(pcp,digits=digits), "%\n",sep="") cat("Percent Correctly Predicted, Null Model : ", format(pcp0,digits=digits), "%\n",sep="") invisible(NULL) } hitmiss.multinom <- function(obj, digits=max(3,getOption("digits")-3), ...){ hitmiss.polr(obj) } pscl/R/hello.r0000644000175100001440000000136111643415334012725 0ustar hornikusers.onAttach <- function(libname,pkgname){ ## cat(paste(" pscl", ## paste(rep(".",floor(getOption("width")*.90 - 4)),collapse=""), ## "\n", ## sep="") ## ) ver <- read.dcf(file=system.file("DESCRIPTION", package=pkgname), fields=c("Version", "Date")) packageStartupMessage(paste(pkgname, ver[1], "\t", ver[2], "\n")) #cat(" R classes and methods developed in the\n") #cat(" Political Science Computational Laboratory\n") #cat(" Department of Political Science, Stanford University\n") #cat(" Simon Jackman \n") #cat(" http://pscl.stanford.edu\n") invisible(NULL) } .onUnload <- function(){ invisible(NULL) } pscl/R/extractVotes.r0000644000175100001440000000062410605527217014317 0ustar hornikusers## given an object of class ideal ## recover the rollcall object used in model fitting ## after applying the dropList etc extractRollCallObject <- function(object){ if(!inherits(object,"ideal")) stop("extractRollCallObject only defined for objects of class ideal") rcObj <- eval(object$call$object) dropList <- eval(object$call$dropList) tmpObj <- dropRollCall(rcObj,dropList) tmpObj } pscl/R/dropUnanimous.r0000644000175100001440000000150310555214103014453 0ustar hornikusers## drop unanimous cols of a (rollcall) matrix dropUnanimous <- function(obj, lop=0){ UseMethod("dropUnanimous") } dropUnanimous.rollcall <- function(obj,lop=0){ if(class(obj)!="rollcall") stop("dropUnanimous.rollcall only defined for objects of class rollcall") dropRollCall(obj, dropList=list(lop=lop)) } dropUnanimous.matrix <- function(obj,lop=0){ if(class(obj)!="matrix") stop("dropUnanimous.matrix only defined for objects of class matrix") if(lop>1 | lop<0 | is.na(lop) | !is.numeric(lop) | length(lop)!=1) stop("bad value for lop, must be a single proportion") goodObj <- !is.na(obj) if(!all(as.vector(obj[goodObj]) %in% c(0,1,NA))) stop("rollcall matrix contains codes other than 0, 1, and NA.") m <- apply(obj,2,minMargin) drop <- m <= lop out <- obj[,!drop] out } pscl/R/dropRollCall.r0000644000175100001440000002165111035255166014217 0ustar hornikusers## parse and execute drop list used by summary.rollcall and ideal printDropList <- function(list){ cat("Dropping elements of rollcall matrix using the following dropList:\n") if(!is.null(list$codes)){ cat(" Voting decisions with the following codes will be set to NA:\n") print(list$codes) cat("\n") } if(!is.null(list$lop) & is.numeric(list$lop)){ if(list$lop==0) cat(" Unanimous votes will be dropped.\n") else cat(" Votes with",list$lop, "or fewer legislators voting in the minority", "will be dropped.\n") } if(!is.null(list$legisMin) & is.numeric(list$legisMin)) cat(" Legislators with",list$legisMin, "or fewer non-missing voting decisions", "will be dropped.\n") if(!is.null(list$dropLegis)) cat(paste(" Legislators for whom the condition\n", " ", deparse(list$dropLegis), "\n", " is true (evaluated in the legis.data data frame) will be dropped.\n", sep="")) if(!is.null(list$dropVotes)) cat(paste(" Votes for which the condition\n", deparse(list$dropVotes), "\n", " is true (evaluated in the vote.data data frame) will be dropped.\n", sep="")) cat("\n") invisible(NULL) } compareRollCallObjects <- function(old,new){ legislators <- dimnames(old$votes)[[1]] n <- length(legislators) votes <- dimnames(old$votes)[[2]] m <- length(votes) if(all(dim(old$votes)==dim(new$votes))) keep <- list(legislators=rep(TRUE,n),votes=rep(TRUE,m)) else{ newLegis <- dimnames(new$votes)[[1]] newVotes <- dimnames(new$votes)[[2]] keep <- list(legislators=legislators%in%newLegis, votes=votes%in%newVotes) } names(keep$legislators) <- legislators names(keep$votes) <- votes keep } dropRollCall <- function(object,dropList=NULL,debug=FALSE){ if(class(object)!="rollcall"){ stop("dropRollCall only works for objects of class rollcall.") } tmpRollCall <- object if(!is.list(dropList) | is.null(dropList)){ cat("dropList must be a non-null list or alist.\nNo subsetting will occur.\n") return(object) } if(debug) printDropList(dropList) flag <- TRUE ## raise the flag counter <- 1 while(flag){ ## loop until the flag goes down if(debug) cat(paste("\ndropRollCall: Pass number",counter,"over roll call object\n")) v <- tmpRollCall$votes dimOld <- dim(v) ## store this if(debug) cat(paste(" The roll call matrix has dimension", dimOld[1],"legislators", "and", dimOld[2],"rollcalls.\n")) ## strip out user-designated votes of a particular code if(!is.null(dropList$codes) & length(dropList$codes)>0){ if(debug) cat(" Processing dropList voting codes...\n") dc <- dropList$codes dCodes <- NULL if(all(is.character(dc))){ ## named element of codes list? dropCodes <- match(dc,names(tmpRollCall$codes)) dropCodes <- dropCodes[!is.na(dropCodes)] if(length(dropCodes)>0){ for(j in dropCodes) dCodes <- c(dCodes,tmpRollCall$codes[j]) ## drop these keepCodes <- !(names(tmpRollCall$codes) %in% dc) keepCodes <- tmpRollCall$codes[keepCodes] tmpRollCall$codes <- keepCodes } } if(is.numeric(dc)){ ## or numeric elements dCodes <- dc[dc %in% unique(as.vector(v))] } bad <- v %in% dCodes if(debug) cat(paste(" dropRollCall will set",sum(bad),"voting decisions to NA.\n")) tmpRollCall$votes[bad] <- NA rm(bad) } dropLegis <- rep(FALSE,dim(v)[1]) dropVotes <- rep(FALSE,dim(v)[2]) ## drop legislators if too little data if(!is.null(dropList$legisMin)){ if(debug) cat(" dropRollCall processing minimum votes by legislator (legisMin) restrictions...\n") legisMin <- dropList$legisMin if(length(legisMin)!=1 | is.na(legisMin) | !is.numeric(legisMin) | legisMin >= tmpRollCall$m) stop(" Bad value for legisMin in drop list.") vtmp <- convertCodes(tmpRollCall) goodCount <- apply(vtmp,1,function(x)sum(!is.na(x))) dropLegis <- dropLegis | goodCount= tmpRollCall$n) stop(" Invalid value for lop") if(is.null(tmpRollCall$voteMargins)){ if(debug) cat(" Computing vote margins...\n") tmpRollCall <- computeMargins(tmpRollCall,dropList=NULL) } r <- tmpRollCall$voteMargins[,"Min"] <= lop if(debug) cat(paste(" dropRollCall will drop",sum(r),"roll calls due to lop-sidedness.\n")) dropVotes <- dropVotes | r if(debug) cat(" dropRollCall finished processing lop-sided restrictions.\n") } ## check for subsetting in vote.data if(!is.null(dropList$dropVotes) & counter==1){ r <- dropRollCallViaData(dropList$dropVotes, object=tmpRollCall, d=expression(vote.data)) if(!is.null(r)) dropVotes <- dropVotes | r } ## final processing if(debug) cat(paste("dropRollCall will drop ", sum(dropLegis), " legislators & ", sum(dropVotes), " rollcalls.\n", sep="")) ## if(sum(dropLegis)>0){ ## cat("Dropped Legislators:\n") ## print(dimnames(tmpRollCall$votes)[[1]][dropLegis]) ## } ## if(sum(dropVotes)>0){ ## cat("Dropped Votes:\n") ## print(dimnames(tmpRollCall$votes)[[2]][dropVotes]) ## } if(sum(dropLegis>0) | sum(dropVotes)>0) tmpRollCall$votes <- tmpRollCall$votes[!dropLegis,!dropVotes] if(!is.null(tmpRollCall$legis.data) & sum(dropLegis)>0){ tmpRollCall$legis.data <- tmpRollCall$legis.data[!dropLegis,] if(class(object$legis.data)=="data.frame"){ class(tmpRollCall$legis.data) <- "data.frame" names(tmpRollCall$legis.data) <- names(object$legis.data) } } if(!is.null(tmpRollCall$vote.data) & sum(dropVotes)>0){ tmpRollCall$vote.data <- tmpRollCall$vote.data[!dropVotes,] if(class(object$vote.data)=="data.frame"){ class(tmpRollCall$vote.data) <- "data.frame" names(tmpRollCall$vote.data) <- names(object$vote.data) } } if(!is.null(tmpRollCall$voteMargins) & sum(dropVotes)>0) tmpRollCall$voteMargins <- tmpRollCall$voteMargins[!dropVotes,] dimNew <- dim(tmpRollCall$votes) tmpRollCall$n <- dimNew[1] tmpRollCall$m <- dimNew[2] if(all(dimNew==dimOld)){ ## if no change from previous pass if(debug) cat("\ndropRollCall has finished processing the rollcall object.\n\n") flag <- FALSE ## lower the flag, quit loop } counter <- counter + 1 } ## and finally, add dropped information to rollcall object if(!is.null(dropList)){ newdropInfo <- compareRollCallObjects(object,tmpRollCall) if(is.null(tmpRollCall$dropInfo)){ tmpRollCall$dropInfo <- newdropInfo tmpRollCall$dropInfo$dropList <- dropList } else{ ## add this dropList to the others tmpRollCall$dropInfo <- list(previous=tmpRollCall$dropInfo, new=list(legislators=newdropInfo$legislators, votes=newdropInfo$votes, dropList=dropList)) } } return(tmpRollCall) ## return rollcall object } dropRollCallViaData <- function(expr,object,d){ cf <- match.call() f <- try(eval(d,envir=object),silent=TRUE) if(inherits(f,"try-error")){ cat(paste("The data frame ", cf$d, " was not found in ", cf$object, ".\n",sep="")) cat("Proceeding by ignoring this subsetting restriction.\n") return(NULL) } r <- try(eval(expr,f),silent=TRUE) if(inherits(r,"try-error")){ r <- rep(FALSE,dim(f)[1]) cat(paste("The assertion ", deparse(expr), " could not be evaluated in the ", cf$d, " component of ", cf$object, ".\n", sep="")) cat("Proceeding by ignoring this assertion.\n") } if(!is.logical(r)) stop("'x' must evaluate to logical") r <- r & !is.na(r) r } pscl/R/betaHPD.r0000644000175100001440000000505310555214103013063 0ustar hornikusersbetaHPD <- function(alpha,beta,p=.95,plot=FALSE,xlim=NULL,debug=FALSE){ if(is.na(p) | is.nan(p) | p > 1 | p < 0) stop("p not between 0 and 1\n") if(alpha<=1 | beta <=1) stop("betaHPD only implemented for alpha and beta both > 1\n") ## initialize internal logical flags compute <- TRUE swap <- FALSE if(alpha==beta){ if(debug) cat("symmetric case, alpha=",alpha,"beta=",beta,"\n") out <- qbeta((1 + c(-1,1)*p)/2, alpha,beta) compute <- FALSE } if(alpha>beta){ swap <- TRUE alphaStar <- beta betaStar <- alpha } else if(beta>alpha){ swap <- FALSE alphaStar <- alpha betaStar <- beta } if(debug) cat("swap=",swap,"\n") func <- function(x0,alpha,beta){ y0 <- dbeta(x0,alpha,beta) p0 <- pbeta(x0,alpha,beta) x1 <- qbeta(p0+p,alpha,beta) y1 <- dbeta(x1,alpha,beta) out <- abs(y0-y1) out } if(compute){ foo <- try(optimize(f=func,alpha=alphaStar,beta=betaStar, tol=.Machine$double.eps^(.6), interval=c(.Machine$double.eps, qbeta(1-p, alphaStar,betaStar)))) if(inherits(foo,"try-error")){ warning("optimization in betaHPD failed\n") out <- rep(NA,2) } else{ if(debug){ cat("results of optimization:\n") print(foo) } out <- c(foo$minimum, qbeta(pbeta(foo$minimum,alphaStar,betaStar)+p, alphaStar,betaStar) ) } if(swap){ out <- 1-out out <- sort(out) if(debug){ cat("swapped back\n") print(out) } } } ## plotting if(plot & all(!is.na(out))){ xseq <- NULL if(length(xlim)==2 & all(!is.na(xlim))){ if(xlim[2]>xlim[1] & xlim[1] >= 0 & xlim[2] <= 1){ xseq <- seq(xlim[1]+(.Machine$double.eps^(.25)), xlim[2]+(.Machine$double.eps^(.25)), length=1000) } } if(is.null(xseq)) xseq <- seq(min(qbeta(.0001,alpha,beta),out[1]), max(qbeta(.9999,alpha,beta),out[2]), length=1000) plot(xseq,dbeta(xseq,alpha,beta), xlab=expression(theta), ylab="", axes=F, type="n") axis(1) ## get polygon for HDR dseq <- seq(out[1],out[2],length=250) fx <- dbeta(dseq,alpha,beta) polygon(x=c(out[1],dseq,rev(dseq)), y=c(0,fx,rep(0,250)), border=F,col=gray(.45)) lines(xseq,dbeta(xseq,alpha,beta)) } out } pscl/NEWS0000644000175100001440000003122011765757035011746 0ustar hornikusers1.04.4 * clean up partial matches to args, keeping R check happy 1.04.3 * bug in postProcess, not evaluating args in call of ideal object 1.04.2 * minor typo in dropRollCall.Rd 1.04.1 * fixed bug in non-English locales for hurdle/zeroinfl formula processing if second part of formula contained a period. 1.04 * fixed quite serious bug with storing item parameters * COPYING file deprecated (?), deleted from repos with r174 1.03.12 * minor bug in tracex with d>1 * deprecate showAll plotting option in tracex, change to "multi" (default=FALSE) 1.03.11 * small change to documentation for ca2006 (thanks Arthur Aguirre) 1.03.10 * pythag deprecated in Rmath.h, use system hypot instead (3/13/2011) * warnings about memory etc only come on with verbose=TRUE (req by Stephen Jessee) 1.03.9 * ideal: small change in partyLoyalty (thanks to Chris Hanretty) * ideal: reformat output of ideal to be 3-d arrays * ideal: change default prior precision for item parameters to .04 (used to be .01) * added UKHouseOfCommons data; Example 6.9 in BASS 1.03.8 * added an optional "at" argument to predprob() methods for count data so that the counts at which the probabilities are evaluated can be specified 1.03.7 * small bug in constrain.item (reported by Paul Johnson) * change normalization option in ideal to generate posterior means with mean 0, sd 1 * do normalization over all dimensions * typos in documentation for pseudo-R2 (thanks to Henrik Prn) 1.03.6 * made gam dependency explicit * change linear.hypothesis to linearHypothesis 1.03.5 * added AustralianElectionPolling * tidy up Rd files for data sets (itemize -> describe) * use dQuote in Rd files (or not) * update AustralianElections with 2007 results 1.03.4 * added iraqVote * updated presidentialElections with 2008 results * added nj07 * added vote92 1.03.3 * improved offset handling in hurdle()/zeroinfl(): offsets in zero model are now allowed and can be different from count model. See ?hurdle/?zeroinfl for details. * included error message for negative binomial zero hurdle model with only an intercept as such models are not identified * fixed bug in predict() method for "hurdle" object when a Poisson zero hurdle model is employed * fixed bug in formula processing of hurdle()/zeroinfl(): formulas of type "y ~ . | . - x1 - x2" were not processed correctly. * for weighted hurdle/zeroinfl models the number of observations is now the effective number, i.e., with weights > 0 1.03.2 * fixing .Last.lib problems * turned off MDA option in ideal by default, seems broken, needs work 1.03a * make startvalues in ideal accept names other than xstart (anything unique that starts with x will do) 1.03 * bug in ideal start value argument processing thanks to Bjorn Hoyland 1.02 * added politicalInformation data * added MDA option to ideal 1.01 * added EfronMorris data * added RockTheVote data 1.00 * updated CITATION and docs to version 1.00 accompanying JSS paper 0.97 * minor changes to print and summary methods for rollcall and ideal objects * bugs in ideal (discovered via odd combination of store.item and file) * dropRollCallObject makes prettier output, works a little more sanely * s109 is now updated to its final status, example points to voteview.com * s110 in examples for readKH * adding component named "dropInfo" to rollcall objects produced by dropRollCall, per request of Keith Poole (this stores information about which legislators/votes are retained by dropRollCall) * added presidentialElections data from Jackman book manuscript * bugs in igammaHDR fixed, some typos too 0.96 * Final changes for JSS paper (before release 1.0 accompanying JSS paper). * Changed the default formula specification for zero-inflated models. y ~ x now means y ~ x | x and *not* y ~ x | 1 anymore. Thus, the same default formula processing is applied to zero-inflated and hurdle models. * Error in normalizeIdeal, found by Jeff Lewis 0.95 * fixed fitted() and predict() methods for "hurdle" and "zeroinfl" for the case when an offset is specified (this had been erroneously ignored previously) 0.94 * added analytical gradients for hurdle() and zeroinfl() (speed-up of factor 5-10) * new package "sandwich" (2.1-0) provides estfun() and bread() methods for "hurdle" and "zeroinfl" objects, thus sandwich() and vcovOPG() covariances are available * extended/improved countreg vignette * fixed Pearson residuals to use correct zero-augmented variance * extended predict() methods: type "count" and "zero" * added extractAIC() methods 0.93 * improving matching legislator and vote names in constrain functions, in response to sub-optimal behavior reported by Keith Poole 0.92 * minor errors in various functions spotted with stricter code checking in R-devel 2.6 * unescaped "%" in documentation for s109 * need negative 1 for negative intercept in another part of predict.ideal (for the case where the researcher did not supply burn-in; 05/15/2007). 0.91 * added Monte Carlo simulation of pi (simpi) 0.90 * version bump as requested by Achim * adding pseudo r-squared stuff * adding admit data for ordered probit example * adding logLik.polr * adding hitmiss method 0.76 * offset and weights arguments have been added to zeroinfl() and hurdle() * hurdletest() is a new wrapper for linear.hypothesis() from the "car" package to test for the presence of hurdles. * A vignette about count data regression in R has been added (which in particular explains the ideas behind zeroinfl() and hurdle()). * correcting/improving documentation of ideal re identification and the normalize option * added absentee ballot data from Orley Ashenfelter, used in BASS * John Fox noted an error in odTest (wrong p-value); fixed. 0.75 * version bump, requested by CRAN maintainers * minor typo in help for predict.ideal * fixed bugs with interactive() in ideal.r * trouble-shooting predict.ideal as per request of Boris Shor * bug (?) in predict.ideal; after 0.73 change to negative intercept, need change in predict.ideal.r to match * in zeroinfl(): binomial(link = link) is deprecated, use binomial(link = linkstr) instead 0.74 * deprecating meanzero option in ideal, replace with normalize * new options for specifying start values in ideal (eigen, random, or user-supplied list); this fixes a bug reported by Boris Shor when working with large rollcall objects * removed bad escape "\," in readKH reported by Kurt Hornick * dummy entry to force svn commit/update (testing new svn server) 0.73 * added seatsVote class and ca2006 data * cleaned up startvalues processing in ideal * improved priors in ideal * added verbose option to ideal * less console output from ideal.c * some changes to documentation, e.g., postProcess gets extra references * sort output by posterior means of ideal points in summary.ideal * improved tracex * fixed bug in dropRollCall (was dropping legis.data attributes) * fixed bug in partyLoyalty, called by summary.rollcall(...,verbose=TRUE) * finally changed ideal model to have a negative intercept; required changes to updatex.c, updatey.c, and xreg.c 0.72 * fixed error in bioChemists data found by Bettina Grn , variable kids5 was off by 1 unit, now runs from min of zero (no kids). 0.71 * fixed bug in betaHPD discovered by John Bullock 0.70 * completely rewritten version of hurdle() and zeroinfl(): - new formula interface of type y ~ x | z where y ~ x specifies the count model and z the inflation/hurdle regressors. - re-structured returned value, is now more similar to "glm" objects - extended/enhanced extractor functions 0.62 * plot.ideal.1d: better left plot margin, based on max length of legis.name * plot.ideal.2d: inconsistent testing of presence of beta in ideal object when overlaying cutting planes * plot.ideal.Rd: more examples (but in \dontrun) * tracex: bug for 2d ideal objects * tracex: 2d, make legend lines heavier for showAll * tracex: for R >= 2.4, change par() to par(no.readonly=TRUE) * fixed typo in plot.ideal.Rd 0.61 * fixed bug in summary.ideal found by Keith Poole (8/8/06) * documentation of ideal section on Identification changed to reflect presence of postProcess function * added summary.rollcall into NAMESPACE per request of Jeff Lewis * no nsl function on Windows, changed readKH to simply call readLines with a try-error wrapper per suggestion of XP-user Jeff Lewis * processing of dropList improved, per suggestion of Jeff Lewis * cosmetic changes to print.summary.rollcall * fixed errors caused by removing sysdata.rda; now utility data sets such as stateinfo and partyinfo have to loaded via data() in functions inside readKH subfunctions; again, Jeff Lewis reported error testing readKH function. 0.60 * added postProcess * added jitter to plot.predict.ideal * changed "start" to "burnin" in many function that handle ideal objects * changed checkStart to checkBurnIn in idealHelper.r, returns "keep" (logical vector) * improved documentation for plot1d * dropped plot1d and plot2d from export in NAMESPACE * consolidated some help files, making fewer entries in package index etc * checked package with codetools(), cleaned up some redundancies, overwriting of function args inside of functions etc * minor stylistic changes to titles and descriptions in help files 0.59 fixed compiler warning in dtnorm regarding return value fixed compiler warning in IDEAL regarding double printed as int minor documentation fix removed unneeded directories 0.58 documentaton fixes and cleanups, prompted by Kurt Hornik's check of 0.57 at CRAN fixed errors in rollcall documentation 0.57 added dtl file support to readKH extensive reliance on match.call(), rather than carrying around copies of objects, many changes to numerous functions dropList introduced, many functions changed; see dropRollCall and dropUnanimous (rollcall objects) added extractRollCallObject (for ideal objects) added computeMargins, for rollcall objects added convertCodes, operates on codes component of roll call object tracex handles 2d traces gracefully added plot.predict.ideal prior precisions in constrain.legis and contstrain.item are .01 for unconstrained parameters added s109, dropped s102 as demonstration data, ships with package added vectorRepresentation (rollcall object) 0.56 changed rollcall class to have legis.data and vote.data data frames amended plotting functions appropriately rollcall objects have party loyalty scores rollcall objects have lopsided data; summary.rollcall/print.summary.rollcall will display ideal saves some barebones summary statistics (posterior means) summary.ideal computes standard deviations summary.ideal/print.summary.ideal displays information on bills that fail to discriminate plot1d (plot method for 1d ideal objects) has option for all legislator names plot2d (plot method for 2d ideal objects) has option to overlay estimated cutting lines added readKH function and supporting data objects in R/sysdata.rda (state.info and party) readKH has extensive checks and debugging of reads from web (thanks to Kurt Kornik ) minor bug fixes in documentation and examples made ideal examples shorter add coda to list of required packages error in negative binomial hurdle model, added theta to coefficients dimnames added TODO file to top-level directory of package fixed bug in print.zeroinfl (thanks to Bettina Grn ) bugs in zeroinfl (Bettina Grn ) corrected spelling of Ginsb*u*rg in sc9497 (Supreme Court sample data) 0.55 added ideal point estimation (Alex Tahk) added gamma functions for Jackman BASS book 0.54 fixed errors in documentation for summary.zeroinfl 0.53 edited documentation for odTest 0.52 changed print.matrix references to print, since print.matrix depreacted in R > 2.1 added ntable from Jim Fearon added betaHPD 0.51 fixed error in print.summary.zeroinfl (thanks to Dave Atkins; datkins@fuller.edu) 0.5 initial relase to CRAN pscl/NAMESPACE0000644000175100001440000000504710770004540012453 0ustar hornikusersuseDynLib("pscl") export("hurdle", "hurdle.control", "hurdletest", "zeroinfl", "zeroinfl.control", "odTest", "predprob", "vuong", "ntable", "betaHPD") export("densigamma", "pigamma", "qigamma", "rigamma", "igammaHDR") export("computeMargins", "constrain.items", "constrain.legis", "convertCodes", "dropRollCall", "dropUnanimous", "extractRollCallObject", "ideal", "idealToMCMC", "readKH", "rollcall", "summary.rollcall", "plot.predict.ideal", "plot.ideal", "postProcess", "simpi", "tracex", "vectorRepresentation") export("seatsVotes", "plot.seatsVotes") export("hitmiss", "pR2") importFrom("MASS", "glm.nb") importFrom("stats", "logLik") ## methods for class zeroinfl S3method("print", "zeroinfl") S3method("print", "summary.zeroinfl") S3method("summary", "zeroinfl") S3method("coef", "zeroinfl") S3method("vcov", "zeroinfl") S3method("logLik", "zeroinfl") S3method("predict", "zeroinfl") S3method("residuals", "zeroinfl") S3method("fitted", "zeroinfl") S3method("predprob", "zeroinfl") S3method("terms", "zeroinfl") S3method("model.matrix", "zeroinfl") S3method("extractAIC", "zeroinfl") ## methods for class hurdle S3method("print", "hurdle") S3method("print", "summary.hurdle") S3method("summary", "hurdle") S3method("coef", "hurdle") S3method("vcov", "hurdle") S3method("logLik", "hurdle") S3method("predict", "hurdle") S3method("residuals", "hurdle") S3method("fitted", "hurdle") S3method("predprob", "hurdle") S3method("terms", "hurdle") S3method("model.matrix", "hurdle") S3method("extractAIC", "hurdle") ## methods for class ideal S3method("plot", "ideal") S3method("plot", "predict.ideal") S3method("predict", "ideal") S3method("predprob", "ideal") S3method("print", "ideal") S3method("print", "predict.ideal") S3method("print", "summary.ideal") S3method("summary", "ideal") ## methods for class rollcall S3method("dropUnanimous", "rollcall") S3method("print", "rollcall") S3method("print", "summary.rollcall") S3method("summary", "rollcall") ## misc methods S3method("dropUnanimous", "matrix") S3method("predprob", "glm") ## methods for class seatsVotes S3method("print", "seatsVotes") S3method("plot", "seatsVotes") S3method("summary", "seatsVotes") ## hitmiss methods S3method("hitmiss", "glm") S3method("hitmiss", "polr") S3method("hitmiss", "multinom") ## pR2 methods S3method("pR2", "glm") S3method("pR2", "polr") S3method("pR2", "multinom") pscl/man/0000755000175100001440000000000011765762344012023 5ustar hornikuserspscl/man/zeroinfl.Rd0000644000175100001440000002142611435323135014130 0ustar hornikusers\name{zeroinfl} \alias{zeroinfl} \alias{print.zeroinfl} \title{Zero-inflated Count Data Regression} \description{ Fit zero-inflated regression models for count data via maximum likelihood. } \usage{ zeroinfl(formula, data, subset, na.action, weights, offset, dist = c("poisson", "negbin", "geometric"), link = c("logit", "probit", "cloglog", "cauchit", "log"), control = zeroinfl.control(\dots), model = TRUE, y = TRUE, x = FALSE, \dots) } \arguments{ \item{formula}{symbolic description of the model, see details.} \item{data, subset, na.action}{arguments controlling formula processing via \code{\link[stats]{model.frame}}.} \item{weights}{optional numeric vector of weights.} \item{offset}{optional numeric vector with an a priori known component to be included in the linear predictor of the count model. See below for more information on offsets.} \item{dist}{character specification of count model family (a log link is always used).} \item{link}{character specification of link function in the binary zero-inflation model (a binomial family is always used).} \item{control}{a list of control arguments specified via \code{\link{zeroinfl.control}}.} \item{model, y, x}{logicals. If \code{TRUE} the corresponding components of the fit (model frame, response, model matrix) are returned.} \item{\dots}{arguments passed to \code{\link{zeroinfl.control}} in the default setup.} } \details{ Zero-inflated count models are two-component mixture models combining a point mass at zero with a proper count distribution. Thus, there are two sources of zeros: zeros may come from both the point mass and from the count component. Usually the count model is a Poisson or negative binomial regression (with log link). The geometric distribution is a special case of the negative binomial with size parameter equal to 1. For modeling the unobserved state (zero vs. count), a binary model is used that captures the probability of zero inflation. in the simplest case only with an intercept but potentially containing regressors. For this zero-inflation model, a binomial model with different links can be used, typically logit or probit. The \code{formula} can be used to specify both components of the model: If a \code{formula} of type \code{y ~ x1 + x2} is supplied, then the same regressors are employed in both components. This is equivalent to \code{y ~ x1 + x2 | x1 + x2}. Of course, a different set of regressors could be specified for the count and zero-inflation component, e.g., \code{y ~ x1 + x2 | z1 + z2 + z3} giving the count data model \code{y ~ x1 + x2} conditional on (\code{|}) the zero-inflation model \code{y ~ z1 + z2 + z3}. A simple inflation model where all zero counts have the same probability of belonging to the zero component can by specified by the formula \code{y ~ x1 + x2 | 1}. Offsets can be specified in both components of the model pertaining to count and zero-inflation model: \code{y ~ x1 + offset(x2) | z1 + z2 + offset(z3)}, where \code{x2} is used as an offset (i.e., with coefficient fixed to 1) in the count component and \code{z3} analogously in the zero-inflation component. By the rule stated above \code{y ~ x1 + offset(x2)} is expanded to \code{y ~ x1 + offset(x2) | x1 + offset(x2)}. Instead of using the \code{offset()} wrapper within the \code{formula}, the \code{offset} argument can also be employed which sets an offset only for the count model. Thus, \code{formula = y ~ x1} and \code{offset = x2} is equivalent to \code{formula = y ~ x1 + offset(x2) | x1}. All parameters are estimated by maximum likelihood using \code{\link[stats]{optim}}, with control options set in \code{\link{zeroinfl.control}}. Starting values can be supplied, estimated by the EM (expectation maximization) algorithm, or by \code{\link[stats]{glm.fit}} (the default). Standard errors are derived numerically using the Hessian matrix returned by \code{\link[stats]{optim}}. See \code{\link{zeroinfl.control}} for details. The returned fitted model object is of class \code{"zeroinfl"} and is similar to fitted \code{"glm"} objects. For elements such as \code{"coefficients"} or \code{"terms"} a list is returned with elements for the zero and count component, respectively. For details see below. A set of standard extractor functions for fitted model objects is available for objects of class \code{"zeroinfl"}, including methods to the generic functions \code{\link[base]{print}}, \code{\link[base]{summary}}, \code{\link[stats]{coef}}, \code{\link[stats]{vcov}}, \code{\link[stats]{logLik}}, \code{\link[stats]{residuals}}, \code{\link[stats]{predict}}, \code{\link[stats]{fitted}}, \code{\link[stats]{terms}}, \code{\link[stats]{model.matrix}}. See \code{\link{predict.zeroinfl}} for more details on all methods. } \value{ An object of class \code{"zeroinfl"}, i.e., a list with components including \item{coefficients}{a list with elements \code{"count"} and \code{"zero"} containing the coefficients from the respective models,} \item{residuals}{a vector of raw residuals (observed - fitted),} \item{fitted.values}{a vector of fitted means,} \item{optim}{a list with the output from the \code{optim} call for minimizing the negative log-likelihood,} \item{control}{the control arguments passed to the \code{optim} call,} \item{start}{the starting values for the parameters passed to the \code{optim} call,} \item{weights}{the case weights used,} \item{offset}{a list with elements \code{"count"} and \code{"zero"} containing the offset vectors (if any) from the respective models,} \item{n}{number of observations (with weights > 0),} \item{df.null}{residual degrees of freedom for the null model (= \code{n - 2}),} \item{df.residual}{residual degrees of freedom for fitted model,} \item{terms}{a list with elements \code{"count"}, \code{"zero"} and \code{"full"} containing the terms objects for the respective models,} \item{theta}{estimate of the additional \eqn{\theta}{theta} parameter of the negative binomial model (if a negative binomial regression is used),} \item{SE.logtheta}{standard error for \eqn{\log(\theta)}{log(theta)},} \item{loglik}{log-likelihood of the fitted model,} \item{vcov}{covariance matrix of all coefficients in the model (derived from the Hessian of the \code{optim} output),} \item{dist}{character string describing the count distribution used,} \item{link}{character string describing the link of the zero-inflation model,} \item{linkinv}{the inverse link function corresponding to \code{link},} \item{converged}{logical indicating successful convergence of \code{optim},} \item{call}{the original function call,} \item{formula}{the original formula,} \item{levels}{levels of the categorical regressors,} \item{contrasts}{a list with elements \code{"count"} and \code{"zero"} containing the contrasts corresponding to \code{levels} from the respective models,} \item{model}{the full model frame (if \code{model = TRUE}),} \item{y}{the response count vector (if \code{y = TRUE}),} \item{x}{a list with elements \code{"count"} and \code{"zero"} containing the model matrices from the respective models (if \code{x = TRUE}),} } \references{ Cameron, A. Colin and Pravin K. Trevedi. 1998. \emph{Regression Analysis of Count Data.} New York: Cambridge University Press. Cameron, A. Colin and Pravin K. Trivedi. 2005. \emph{Microeconometrics: Methods and Applications}. Cambridge: Cambridge University Press. Lambert, Diane. 1992. \dQuote{Zero-Inflated Poisson Regression, with an Application to Defects in Manufacturing.} \emph{Technometrics}. \bold{34}(1):1-14 Zeileis, Achim, Christian Kleiber and Simon Jackman 2008. \dQuote{Regression Models for Count Data in R.} \emph{Journal of Statistical Software}, \bold{27}(8). URL \url{http://www.jstatsoft.org/v27/i08/}. } \author{Achim Zeileis } \seealso{\code{\link{zeroinfl.control}}, \code{\link[stats]{glm}}, \code{\link[stats]{glm.fit}}, \code{\link[MASS]{glm.nb}}, \code{\link{hurdle}} } \examples{ ## data data("bioChemists", package = "pscl") ## without inflation ## ("art ~ ." is "art ~ fem + mar + kid5 + phd + ment") fm_pois <- glm(art ~ ., data = bioChemists, family = poisson) fm_qpois <- glm(art ~ ., data = bioChemists, family = quasipoisson) fm_nb <- glm.nb(art ~ ., data = bioChemists) ## with simple inflation (no regressors for zero component) fm_zip <- zeroinfl(art ~ . | 1, data = bioChemists) fm_zinb <- zeroinfl(art ~ . | 1, data = bioChemists, dist = "negbin") ## inflation with regressors ## ("art ~ . | ." is "art ~ fem + mar + kid5 + phd + ment | fem + mar + kid5 + phd + ment") fm_zip2 <- zeroinfl(art ~ . | ., data = bioChemists) fm_zinb2 <- zeroinfl(art ~ . | ., data = bioChemists, dist = "negbin") } \keyword{regression} pscl/man/zeroinfl.control.Rd0000644000175100001440000000505510746475630015623 0ustar hornikusers\name{zeroinfl.control} \alias{zeroinfl.control} \title{Control Parameters for Zero-inflated Count Data Regression} \description{ Various parameters that control fitting of zero-inflated regression models using \code{\link{zeroinfl}}. } \usage{ zeroinfl.control(method = "BFGS", maxit = 10000, trace = FALSE, EM = FALSE, start = NULL, \dots) } \arguments{ \item{method}{characters string specifying the \code{method} argument passed to \code{\link[stats]{optim}}.} \item{maxit}{integer specifying the \code{maxit} argument (maximal number of iterations) passed to \code{\link[stats]{optim}}.} \item{trace}{logical or integer controlling whether tracing information on the progress of the optimization should be produced (passed to \code{\link[stats]{optim}}).} \item{EM}{logical. Should starting values be estimated by the EM (expectation maximization) algorithm? See details.} \item{start}{an optional list with elements \code{"count"} and \code{"zero"} (and potentially \code{"theta"}) containing the coefficients for the corresponding component.} \item{\dots}{arguments passed to \code{\link[stats]{optim}}.} } \details{ All parameters in \code{\link{zeroinfl}} are estimated by maximum likelihood using \code{\link[stats]{optim}} with control options set in \code{\link{zeroinfl.control}}. Most arguments are passed on directly to \code{optim}, only \code{trace} is also used within \code{zeroinfl} and \code{EM}/\code{start} control the choice of starting values for calling \code{optim}. Starting values can be supplied, estimated by the EM (expectation maximization) algorithm, or by \code{\link[stats]{glm.fit}} (the default). Standard errors are derived numerically using the Hessian matrix returned by \code{\link[stats]{optim}}. To supply starting values, \code{start} should be a list with elements \code{"count"} and \code{"zero"} and potentially \code{"theta"} (for negative binomial components only) containing the starting values for the coefficients of the corresponding component of the model. } \value{ A list with the arguments specified. } \author{Achim Zeileis } \seealso{\code{\link{zeroinfl}}} \examples{ data("bioChemists", package = "pscl") ## default start values fm1 <- zeroinfl(art ~ ., data = bioChemists) ## use EM algorithm for start values fm2 <- zeroinfl(art ~ ., data = bioChemists, EM = TRUE) ## user-supplied start values fm3 <- zeroinfl(art ~ ., data = bioChemists, start = list(count = c(0.7, -0.2, 0.1, -0.2, 0, 0), zero = -1.7)) } \keyword{regression} pscl/man/vuong.Rd0000644000175100001440000000366211360736675013456 0ustar hornikusers\name{vuong} \alias{vuong} \title{Vuong's non-nested hypothesis test} \description{ Compares two models fit to the same data that do not nest via Vuong's non-nested test. } \usage{ vuong(m1, m2, digits = getOption("digits")) } \arguments{ \item{m1}{model 1, an object inheriting from class \code{glm}, \code{negbin} or \code{zeroinfl}} \item{m2}{model 2, as for model 1} \item{digits}{significant digits in printed result} } \details{ The Vuong non-nested test is based on a comparison of the predicted probabilities of two models that do not nest. Examples include comparisons of zero-inflated count models with their non-zero-inflated analogs (e.g., zero-inflated Poisson versus ordinary Poisson, or zero-inflated negative-binomial versus ordinary negative-binomial). A large, positive test statistic provides evidence of the superiority of model 1 over model 2, while a large, negative test statistic is evidence of the superiority of model 2 over model 1. Under the null that the models are indistinguishable, the test statistic is asymptotically distributed standard normal. The function will fail if the models do not contain identical values in their respective components named \code{y} (the value of the response being modeled). } \value{ nothing returned, prints the test-statistic and \eqn{p} value and exits silently. } \references{Vuong, Q.H. 1989. Likelihood ratio tests for model selection and non-nested hypotheses. \emph{Econometrica}. 57:307-333.} \author{Simon Jackman \email{jackman@stanford.edu}} \examples{ data("bioChemists") ## compare Poisson GLM and ZIP glm1 <- glm(art ~ ., data = bioChemists, family = poisson) zip <- zeroinfl(art ~ . | ., data = bioChemists, EM = TRUE) vuong(glm1, zip) ## compare negbin with zero-inflated negbin nb1 <- glm.nb(art ~ ., data=bioChemists) zinb <- zeroinfl(art ~ . | ., data = bioChemists, dist = "negbin", EM = TRUE) vuong(nb1, zinb) } \keyword{models} pscl/man/vote92.Rd0000644000175100001440000000512411360735503013430 0ustar hornikusers\name{vote92} \alias{vote92} \docType{data} \title{ Reports of voting in the 1992 U.S. Presidential election. } \description{ Survey data containing self-reports of vote choice in the 1992 U.S. Presidential election, with numerous covariates, from the 1992 American National Election Studies. } \usage{data(vote92)} \format{ A data frame with 909 observations on the following 10 variables. \describe{ \item{\code{vote}}{a factor with levels \code{Perot} \code{Clinton} \code{Bush}} \item{\code{dem}}{a numeric vector, 1 if the respondent reports identifying with the Democratic party, 0 otherwise.} \item{\code{rep}}{a numeric vector, 1 if the respondent reports identifying with the Republican party, 0 otherwise} \item{\code{female}}{a numeric vector, 1 if the respondent is female, 0 otherwise} \item{\code{persfinance}}{a numeric vector, -1 if the respondent reports that their personal financial situation has gotten worse over the last 12 months, 0 for no change, 1 if better} \item{\code{natlecon}}{a numeric vector, -1 if the respondent reports that national economic conditions have gotten worse over the last 12 months, 0 for no change, 1 if better} \item{\code{clintondis}}{a numeric vector, squared difference between respondent's self-placement on a scale measure of political ideology and the respondent's placement of the Democratic candidate, Bill Clinton} \item{\code{bushdis}}{a numeric vector, squared ideological distance of the respondent from the Republican candidate, President George H.W. Bush} \item{\code{perotdis}}{a numeric vector, squared ideological distance of the respondent from the Reform Party candidate, Ross Perot} } } \details{These data are unweighted. Refer to the original data source for weights that purport to correct for non-representativeness and non-response.} \source{ Alvarez, R. Michael and Jonathan Nagler. 1995. Economics, issues and the Perot candidacy: Voter choice in the 1992 Presidential election. \emph{American Journal of Political Science}. 39:714-44. Miller, Warren E., Donald R. Kinder, Steven J. Rosenstone and the National Election Studies. 1999. \emph{National Election Studies, 1992: Pre-/Post-Election Study}. Center for Political Studies, University of Michigan: Ann Arbor, Michigan. Inter-University Consortium for Political and Social Research. Study Number 1112. \url{http://dx.doi.org/10.3886/ICPSR01112}. } \references{ Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Examples 8.7 and 8.8. } \examples{ data(vote92) summary(vote92) } \keyword{datasets} pscl/man/vectorRepresentation.Rd0000644000175100001440000000431510555214104016520 0ustar hornikusers\name{vectorRepresentation} \alias{vectorRepresentation} \title{convert roll call matrix to series of vectors} \description{ Extract the information in a roll call matrix as a series of vectors with voting decision, a unique identifier for the legislator and a unique identifier for the roll call. } \usage{ vectorRepresentation(object, dropList = list(codes = c("missing", "notInLegis"))) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{an object of class \code{\link{rollcall}}} \item{dropList}{a \code{dropList}; see \code{\link{dropRollCall}}} } \details{ It is often the case that roll call matrices are sparse, say, when the roll call matrix has an \dQuote{overlapping generations} structure; e.g., consider forming data by pooling across a long temporal sequence of legislatures such that relatively few of the legislators in the data set actually vote on any given roll call. In such a case, representing the data as a roll call matrix is not particularly helpful nor efficient, either for data summaries or modeling. } \value{A \code{\link{matrix}} with \code{z} rows, where \code{z} is the number of non-missing entries in \code{object$votes}, with \sQuote{missingness} defined by the \code{codes} component of the \code{dropList}. The matrix has 3 columns: \item{vote}{the voting decision, either a \code{1} if the corresponding element of the roll call matrix \code{object$votes} is in the \code{yea} component of \code{object$codes}, or a \code{0} if the corresponding element of the roll call matrix is in the \code{nay} component of \code{object$codes}. Non-missing entries of the roll call matrix are not stored.} \item{i}{the row of the roll call matrix \code{object$votes} that supplied the voting decision; i.e., a unique identifier for the legislator generating this \code{vote}} \item{j}{the column of the roll call matrix \code{object$votes} that supplied the \code{vote}; i.e., a unique identifier for the vote.} } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{rollcall}}} \examples{ data(s109) y <- vectorRepresentation(s109) apply(y,2,table,exclude=NULL) } \keyword{manip} \keyword{utilities} pscl/man/unionDensity.Rd0000644000175100001440000000547611406255745015010 0ustar hornikusers\name{unionDensity} \alias{unionDensity} \docType{data} \title{cross national rates of trade union density} \description{ Cross-national data on relative size of the trade unions and predictors, in 20 countries. Two of the predictors are highly collinear, and are the source of a debate between Stephens and Wallerstein (1991), later reviewed by Western and Jackman (1994). } \usage{data(unionDensity) } \format{ \itemize{ \item{\code{union}}{numeric, percentage of the total number of wage and salary earners plus the unemployed who are union members, measured between 1975 and 1980, with most of the data drawn from 1979} \item{\code{left}}{numeric, an index tapping the extent to which parties of the left have controlled governments since 1919, due to Wilensky (1981).} \item{\code{size}}{numeric, log of labor force size, defined as the number of wage and salary earners, plus the unemployed} \item{\code{concen}}{numeric, percentage of employment, shipments, or production accounted for by the four largest enterprises in a particular industry, averaged over industries (with weights proportional to the size of the industry) and the resulting measure is normalized such that the United States scores a 1.0, and is due to Pryor (1973). Some of the scores on this variable are imputed using procedures described in Stephens and Wallerstein (1991, 945).} } } \source{Pryor, Frederic. 1973. \emph{Property and Industrial Organization in Communist and Capitalist Countries}. Bloomington: Indiana University Press. Stephens, John and Michael Wallerstein. 1991. Industrial Concentration, Country Size and Trade Union Membership. \emph{American Political Science Review} 85:941-953. Western, Bruce and Simon Jackman. 1994. Bayesian Inference for Comparative Research. \emph{American Political Science Review} 88:412-423. Wilensky, Harold L. 1981. Leftism, Catholicism, Democratic Corporatism: The Role of Political Parties in Recemt Welfare State Development. In \emph{The Development of Welfare States in Europe and America}, ed. Peter Flora and Arnold J. Heidenheimer. New Brunswick: Transaction Books. } \references{Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey.} \examples{ data(unionDensity) summary(unionDensity) pairs(unionDensity, labels=c("Union\nDensity", "Left\nGovernment", "log Size of\nLabor Force", "Economic\nConcentration"), lower.panel=function(x,y,digits=2){ r <- cor(x,y) par(usr=c(0,1,0,1)) text(.5,.5, format(c(r,0.123456789),digits=digits)[1], cex=1.5) } ) ols <- lm(union ~ left + size + concen, data=unionDensity) summary(ols) } \keyword{datasets} pscl/man/UKHouseOfCommons.Rd0000644000175100001440000000562411507177506015457 0ustar hornikusers\name{UKHouseOfCommons} \alias{UKHouseOfCommons} \docType{data} \title{1992 United Kingdom electoral returns} \description{Electoral returns, selected constituencies, 1992 general election for the British House of Commons} \usage{data(UKHouseOfCommons)} \format{ A data frame with 521 observations on the following 12 variables. \describe{ \item{\code{constituency}}{a character vector, name of the House of Commons constituency} \item{\code{county}}{a character vector, county of the House of Commons constituency} \item{\code{y1}}{a numeric vector, log-odds of Conservative to LibDem vote share} \item{\code{y2}}{a numeric vector, log-odds of Labor to LibDem vote share} \item{\code{y1lag}}{a numeric vector, \code{y1} from previous election} \item{\code{y2lag}}{a numeric vector, \code{y2} from previous election} \item{\code{coninc}}{a numeric vector, 1 if the incumbent is a Conservative, 0 otherwise} \item{\code{labinc}}{a numeric vector, 1 if the incumbent is from the Labor Party, 0 otherwise} \item{\code{libinc}}{a numeric vector, 1 if the incumbent is from the LibDems, 0 otherwise} \item{\code{v1}}{a numeric vector, Conservative vote share (proportion of 3 party vote)} \item{\code{v2}}{a numeric vector, Labor vote share (proportion of 3 party vote)} \item{\code{v3}}{a numeric vector, LibDem vote share (proportion of 3 party vote)} } } \details{ These data span only 521 of the 621 seats in the House of Commons at the time of 1992 election. Seats missing either a Conservative, Labor, or a LibDem candidate appear to have been dropped. The original Katz and King data set does not have case labels. I used matches to an additional data source to recover a set of constituency labels for these data; labels could not recovered for two of the constituencies. } \source{ Jonathan Katz; Gary King. 1999. "Replication data for: A Statistical Model of Multiparty Electoral Data", \url{http://hdl.handle.net/1902.1/QIGTWZYTLZ} Martin Baxter. \url{http://www.electoralcalculus.co.uk/electdata_1992ob.txt} } \references{ Katz, Jonathan and Gary King. 1999. ``A Statistical Model for Multiparty Electoral Data''. \emph{American Political Science Review}. 93(1): 15-32. Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Chichester. Example 6.9. } \examples{ data(UKHouseOfCommons) tmp <- UKHouseOfCommons[,c("v1","v2","v3")] summary(apply(tmp,1,sum)) col <- rep("black",dim(tmp)[1]) col[UKHouseOfCommons$coninc==1] <- "blue" col[UKHouseOfCommons$labinc==1] <- "red" col[UKHouseOfCommons$libinc==1] <- "orange" library(vcd) vcd::ternaryplot(tmp, dimnames=c("Cons","Lab","Lib-Dem"), labels="outside", col=col, pch=1, main="1992 UK House of Commons Election", cex=.75) } \keyword{datasets} pscl/man/tracex.Rd0000644000175100001440000000726411643415334013576 0ustar hornikusers\name{tracex} \alias{tracex} \title{trace plot of MCMC iterates, posterior density of legislators' ideal points} \description{ Produces a trace plot of the MCMC samples from the posterior density of legislators' \code{\link{ideal}} points. } \usage{ tracex(object, legis=NULL, d=1, conf.int=0.95, multi = FALSE, burnin=NULL,span=.25, legendLoc="topright") } \arguments{ \item{object}{an object of class \code{ideal}.} \item{legis}{a vector of either the names of legislators (or \code{\link[=pmatch]{partial matches}} of the names as given in the \code{\link{dimnames}} of \code{object$x}.} \item{d}{numeric, either a scalar or a vector of length two, the dimension(s) to be traced.} \item{conf.int}{numeric, the level of the confidence interval on the posterior mean to be plotted.} \item{multi}{logical, multiple plotting panels, one per legislators? If \code{FALSE} (default) and \code{length(d)==2}, display traces for all selected legislators' ideal points on the one plot.} \item{burnin}{of the recorded MCMC samples, how many to discard as burnin? Default is \code{NULL}, in which case the value of \code{burnin} in the \code{\link{ideal}} object is used.} \item{span}{numeric, a proportion, the \code{span} to be used when calling \code{loess} to generate a moving average for trace plots when \code{d=1}} \item{legendLoc}{numeric or character, and possibly a vector, specifying where to place the legend when \code{d=1}; setting \code{legendLoc=NULL} will suppress the legend for all requested trace plots} } \details{Produces a trace plot showing the history of the MCMC iterations for the ideal point of each of the legislators (partially) named in \code{legis}. For \code{d=1}, each trace plot includes a trace over iterations, the cumulative mean, a moving average, the MCMC-based estimate of the mean of the posterior, and a confidence interval (specified by \code{conf.int}) around the mean of the posterior (using the estimated \code{\link[=quantile]{quantiles}}) of the respective MCMC iterates). All of these values are calculated discarding the initial \code{burnin} iterations. When \code{d} is a vector of length two, a 2-dimensional trace plot is displayed, with the \code{d[1]} dimension on the horizontal axis, and the \code{d[2]} dimension on the vertical axis. When \code{d=1}, a legend will be placed on the plot; the option \code{legendLoc} controls the placing of the legend. \code{legendLoc} may be a vector, specifying a unique legend location for each requested trace plots. If \code{legendLoc} is of length 1, it will be \code{\link{rep}}licated to have length equal to the number of requested trace plots. } \seealso{\code{\link{ideal}}; \code{\link{pmatch}} for matching legislators' names. See \code{\link{legend}} for valid options to \code{legendLoc}.} \examples{ data(s109) ## short run for demo purposes only id1 <- ideal(s109, normalize=TRUE, maxiter=500, burnin=100,thin=10, verbose=TRUE) tracex(id1,legis="KENN") ## n.b., no such legislator named Thomas Bayes tracex(id1,legis=c("KENN","BOX","KYL","Thomas Bayes")) \dontrun{ id2 <- ideal(s109, d=2, ## unidentified! maxiter=5000, burnin=0, thin=50) tracex(id2,d=1,legis=c("KENNEDY","BOXER","KYL","Thomas Bayes")) tracex(id2,d=2,legis=c("KENNEDY","BOXER","KYL","Thomas Bayes")) tracex(id2,d=1:2, legis=c("KENNEDY","BOXER","KYL","Thomas Bayes")) ## partial matching tracex(id2,d=1:2, legis=c("KENN","BOX","BID","SNO","SPEC","MCCA","KYL", "Thomas Bayes"), multi=TRUE) } } \keyword{hplot} pscl/man/summary.rollcall.Rd0000644000175100001440000000604111035203613015566 0ustar hornikusers\name{summary.rollcall} \alias{summary.rollcall} \alias{print.summary.rollcall} \title{summarize a rollcall object} \description{ Provides a summary of the information about votes, legislators, etc in a \code{\link{rollcall}} object. } \usage{ \method{summary}{rollcall}(object, dropList=NULL, verbose=FALSE,debug=FALSE,...) \method{print}{summary.rollcall}(x, digits=1, ...) } \arguments{ \item{object}{an \code{\link{rollcall}} object.} \item{dropList}{a \code{\link{list}} or \code{\link{alist}}, listing voting decisions, legislators and/or votes to be dropped from the summary; see \code{\link{dropRollCall}} for details.} \item{verbose}{logical, if \code{TRUE}, compute legislator-specific and vote-specific Yea/Nay/\code{NA} summaries} \item{debug}{logical, if \code{TRUE}, print messages to console during processing of the \code{rollcall} object} \item{x}{an object of class \code{summary.rollcall}} \item{digits}{number of decimal places in printed display} \item{...}{further arguments passed to or from other methods.} } \value{ An object of class \code{summary.rollcall} with the following elements (depending on the logical flag \code{verbose}): \item{n}{number of legislators in the \code{\link{rollcall}} object, after processing the \code{dropList}} \item{m}{number of roll call votes in the \code{\link{rollcall}} object, after processing the \code{dropList}} \item{codes}{a \code{\link{list}} that describes how the voting decisions in the \code{\link{rollcall}} matrix (\code{object$votes}) map into \dQuote{Yea} and \dQuote{Nay} etc, after processing the \code{dropList}; see \code{\link{rollcall}} for more details} \item{allVotes}{a matrix containing a tabular breakdown of all votes in the \code{\link{rollcall}} matrix (\code{object$votes}), after processing the \code{dropList}} \item{partyTab}{a tabular breakdown of the legislators' party affiliations, after processing the \code{dropList}, and only if party affiliations are supplied as\code{object$legis.data$party}; see \code{\link{rollcall}} for details} \item{lopSided}{a tabular summary of the frequency of lop-sided roll call votes in the \code{\link{rollcall}} object, again, after processing the \code{dropList}} \item{legisTab}{a tabular summary of each legislators' voting history} \item{partyLoyalty}{the proportion of times that each legislator votes the way that a majority of his or her fellow partisans did, provided party affiliations are available} \item{voteTab}{a tabular summary of each rollcall's votes} \item{call}{the \code{\link[=match.call]{matched call}} used to invoke \code{summary.rollcall}} } \seealso{\code{\link{rollcall}}} \examples{ set.seed(314159265) fakeData <- matrix(sample(x=c(0,1),size=1000,replace=TRUE), 10,100) rc <- rollcall(fakeData) rc data(sc9497) rc <- rollcall(sc9497) summary(rc) data(s109) summary(s109) summary(s109,verbose=TRUE) } \keyword{classes} pscl/man/summary.ideal.Rd0000644000175100001440000001171411540242604015047 0ustar hornikusers\name{summary.ideal} \alias{summary.ideal} \title{summary of an ideal object} \description{ Provides a summary of the output from ideal point estimation contained in an object of class \code{ideal}. } \usage{ \method{summary}{ideal}(object, prob=.95, burnin=NULL, sort=TRUE, include.beta=FALSE,...) } \arguments{ \item{object}{an object of class \code{\link{ideal}}.} \item{prob}{scalar, a proportion between 0 and 1, the content of the highest posterior density (HPD) interval to compute for the parameters} \item{burnin}{of the recorded MCMC samples, how many to discard as burnin? Default is \code{NULL}, in which case the value of \code{burnin} in the \code{\link{ideal}} object is used.} \item{sort}{logical, default is \code{TRUE}, indicating that the summary of the ideal points be sorted by the estimated posterior means (lowest to highest)} \item{include.beta}{whether or not to calculate summary statistics of beta, if beta is available. If the item parameters were not stored in the \code{ideal} object, then \code{include.beta} is ignored.} \item{...}{further arguments passed to or from other functions} } \value{ An item of class \code{summary.ideal} with elements: \item{object}{the name of the ideal object as an \code{\link[=eval]{unevaluated}} \code{\link{expression}}, produced by \code{match.call()$object}} \item{xm}{\code{n} by \code{d} matrix of posterior means for the ideal points} \item{xsd}{\code{n} by \code{d} matrix of posterior means for the ideal points} \item{xHDR}{\code{n} by 2 by \code{d} array of HDRs for the ideal points} \item{bm}{\code{m} by \code{d+1} matrix of posterior means for the item parameters} \item{bsd}{\code{m} by \code{d+1} matrix of posterior standard deviation for the item parameters} \item{bHDR}{\code{m} by 2 by \code{d+1} array of HDRs for the item parameters} \item{bSig}{a \code{\link{list}} of length \code{d}, each component a vector of length \code{m}, of mode \code{logical}, equal to \code{TRUE} if the corresponding discrimination parameter is distinguishible from zero; see Details. If \code{store.item} was set to \code{FALSE} when \code{\link{ideal}} was invoked, then \code{bSig} is a list of length zero.} \item{party.quant}{if party information is available through the \code{rollcall} object that was used to run \code{ideal}, then \code{party.quant} gives the posterior mean of the legislators' ideal points by party, by dimension. If no party information is available, then \code{party.quant=NULL}.} } \details{The test of whether a given discrimination parameter is distinguishible from zero first checks to see if the two most extreme \code{quantiles} are symmetric around .5 (e.g., as are the default value of .025 and .975). If so, the corresponding quantiles of the MCMC samples for each discrimination parameter are inspected to see if they have the same sign. If they do, then the corresponding discrimination parameter is flagged as distinguishible from zero; otherwise not. } \note{When specifying a value of \code{burnin} different from that used in fitting the \code{\link{ideal}} object, note a distinction between the iteration numbers of the stored iterations, and the number of stored iterations. That is, the \code{n}-th iteration stored in an \code{\link{ideal}} object will not be iteration \code{n} if the user specified \code{thin>1} in the call to \code{\link{ideal}}. Here, iterations are tagged with their iteration number. Thus, if the user called \code{\link{ideal}} with \code{thin=10} and \code{burnin=100} then the stored iterations are numbered \code{100, 110, 120, ...}. Any future subsetting via a \code{burnin} refers to this iteration number.} \seealso{\code{\link{ideal}}} \author{Simon Jackman \email{jackman@stanford.edu}} \examples{ ## fake example set.seed(314159265) fakeData <- matrix(sample(x=c(0,1),size=1000,replace=TRUE), 10,100) rc <- rollcall(fakeData) ## short-run for demo purposes idFake <- ideal(rc,maxiter=500,burnin=100,thin=10) summary(idFake) ## Supreme Court Example data(sc9497) rc <- rollcall(data=sc9497$votes, legis.names=sc9497$legis.names, desc=sc9497$desc) id1 <- ideal(rc) summary(id1) \dontrun{ data(s109) cl2 <- constrain.legis(s109, x=list("KENNEDY (D MA)"=c(-1,0), "ENZI (R WY)"=c(1,0), "CHAFEE (R RI)"=c(0,-.5)), d=2) id2Constrained <- ideal(s109, d=2, priors=cl2, ## priors (w constraints) startvals=cl2, ## start value (w constraints) store.item=TRUE, maxiter=5000, burnin=500, thin=25) summary(id2Constrained, include.items=TRUE) } } \keyword{classes} pscl/man/state.info.Rd0000644000175100001440000000205711360722071014350 0ustar hornikusers\name{state.info} \alias{state.info} \docType{data} \title{information about the American states needed for U.S. Congress} \description{ Numeric codes and names of 50 states and the District of Columbia, required to parse Keith Poole and Howard Rosenthal's collections of U.S. Congressional roll calls. } \usage{data(state.info) } \format{ \describe{ \item{\code{icpsr}}{integer, numeric code for state used by the Inter-university Consortium for Political and Social Research} \item{\code{state}}{character, name of state or \code{Washington D.C.}} \item{\code{year}}{numeric or \code{NA}, year of statehood} } } \details{The function \code{\link{readKH}} converts the integer ICPSR codes into strings, via a table lookup in this data frame. Another table lookup in \code{\link{state.abb}} provides the 2-letter abbreviation commonly used in identifying American legislators, e.g., \code{KENNEDY, E (D-MA)}.} \seealso{\code{\link{state}} } \source{Various ICPSR codebooks. \url{http://www.icpsr.umich.edu}} \keyword{datasets} pscl/man/simpi.Rd0000644000175100001440000000444111406255745013430 0ustar hornikusers\name{simpi} \alias{simpi} \title{Monte Carlo estimate of pi (3.14159265...)} \description{ Monte Carlo estimation of pi } \usage{ simpi(n) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{n}{integer, number of Monte Carlo samples, defaults to 1000} } \details{ A crude Monte Carlo estimate of \eqn{\pi}{pi} can be formed as follows. Sample from the unit square many times (i.e., each sample is formed with two independent draws from a uniform density on the unit interval). Compute the proportion \eqn{p}{p} of sampled points that lie inside a unit circle centered on the origin; such points \eqn{(x,y)}{(x,y)} have distance from the origin \eqn{d = \sqrt{x^2 + y^2}}{d=sqrt(x^2 + y^2)} less than 1. Four times \eqn{p}{p} is a Monte Carlo estimate of \eqn{\pi}{pi}. This function is a wrapper to a simple C function, bringing noticable speed gains and memory efficiencies over implementations in native R. Contrast this Monte Carlo method with Buffon's needle and refinements thereof (see the discussion in Ripley (1987, 193ff). } \value{the Monte Carlo estimate of \eqn{\pi}{pi}} \references{Ripley, Brain D. 1987 [2006]. \emph{Stochastic Simulation}. Wiley: Hoboken, New Jersey.} \author{Simon Jackman \email{jackman@stanford.edu}} \examples{ seed <- round(pi*10000) ## hah hah hah m <- 6 z <- rep(NA,m) lim <- rep(NA,m) for(i in 1:m){ cat(paste("simulation for ",i,"\n")) set.seed(seed) timings <- system.time(z[i] <- simpi(10^i)) print(timings) cat("\n") lim[i] <- qbinom(prob=pi/4,size=10^i,.975)/10^i * 4 } ## convert to squared error z <-(z - pi)^2 lim <- (lim - pi)^2 plot(x=1:m, y=z, type="b", pch=16, log="y", axes=FALSE, ylim=range(z,lim), xlab="Monte Carlo Samples", ylab="Log Squared Error") lines(1:m,lim,col="blue",type="b",pch=1) legend(x="topright", legend=c("95\% bound", "Realized"), pch=c(1,16), lty=c(1,1), col=c("blue","black"), bty="n") axis(1,at=1:m, labels=c(expression(10^{1}), expression(10^{2}), expression(10^{3}), expression(10^{4}), expression(10^{5}), expression(10^{6}))) axis(2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{misc} pscl/man/seatsVotes.Rd0000644000175100001440000000652610555214104014441 0ustar hornikusers\name{seatsVotes} \alias{seatsVotes} %\alias{print.seatsVotes} %\alias{summary.seatsVotes} %- Also NEED an '\alias' for EACH other topic documented here. \title{A class for creating seats-votes curves} \description{ Convert a vector of vote shares into a seats-vote curve object, providing estimates of partisan bias. } \usage{ seatsVotes(x, desc = NULL, method = "uniformSwing") } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{a vector of vote shares for a specific party (either proportions or percentages)} \item{desc}{descriptive text} \item{method}{how to simulate a seats-vote curve; the only supported method at this stage is \code{uniformSwing}.} } \details{Simulation methods are required to induce a seats-votes curve given a vector of vote shares from one election. The uniform swing method simply slides the empirical distribution function of the vote shares \dQuote{up} and \dQuote{down}, computing the proportion of the vote shares that lie above .5 (by construction, the winning percentage in a two-party election) for each new location of the vector of vote shares. That is, as the empirical CDF of the observed vote shares slides up or down, more or less seats cross the .5 threshold. A seats-votes curve is formed by plotting the seat share above .5 as a function of the average district-level vote share (a weakly monotone function, since the empirical CDF constitutes a set of sufficient statistics for this problem). The simulation is run so as to ensure that average district-level vote shares range between 0 and 1. The extent to which the seats-votes curve departs from symmetry is known as bias. More specifically, the vertical displacement of the seats-votes curve from .5 when average district-level vote share is .5 is conventionally reported as an estimate of the bias of the electoral system. Different methods produce different estimates of seats-votes curves and summary estimands such as bias. The uniform swing method is completely deterministic and does not produce any uncertainty assessment (e.g., confidence intervals etc). } \value{ An object of class \code{seatsVotes}, with components \item{s}{Estimated seat shares over the range of simulated average, district-level vote shares} \item{v}{Simulated average district-level vote shares} \item{x}{observed seat shares, with missing data removed} \item{desc}{user-supplied descriptive character string} \item{call}{a list of class \code{\link{call}}, the call to the function} } \references{ Tufte, Edward R. 1973. The Relationship Between Seats and Votes in Two-Party Systems. \emph{American Political Science Review}. 67(2):540-554. Gelman, Andrew and Gary King. 1990. Estimating the Consequences of Electoral Redistrictring. \emph{Journal of the American Statistical Association}. 85:274-282. Jackman, Simon. 1994. Measuring Electoral Bias: Australia, 1949-93. \emph{British Journal of Political Science}. 24(3):319-357. } \author{Simon Jackman \email{jackman@stanford.edu}} \note{Additional methods to come later.} \seealso{\code{\link{plot.seatsVotes}} for plotting methods.} \examples{ data(ca2006) x <- ca2006$D/(ca2006$D+ca2006$R) sv <- seatsVotes(x, desc="Democratic Vote Shares, California 2006 congressional elections") } \keyword{misc} pscl/man/sc9497.Rd0000644000175100001440000000260210555214104013232 0ustar hornikusers\name{sc9497} \docType{data} \alias{sc9497} \title{votes from the United States Supreme Court, from 1994-1997} \description{ This data set provides information on the United States Supreme Court from 1994-1997. Votes included are non-unanimous. } \usage{data(sc9497)} \format{A list containing the elements: \describe{ \item{votes}{a matrix of the votes, 0=Nay, 1=Yea, \code{NA}=Abstained or missing data. The matrix columns are labeled with \code{vote.names} and the rows are labeled with \code{legis.names}.} \item{legis.names}{a vector of the names of the nine Justices sitting on the court at this time.} \item{party}{NULL; exists for consistency with House and Senate data sets.} \item{state}{NULL; exists for consistency with House and Senate data sets.} \item{district}{NULL; exists for consistency with House data sets.} \item{id}{NULL; exists for consistency with House and Senate data sets.} \item{vote.names}{a vector of strings numbering the cases simply to distinguish them from one another.} \item{desc}{a description of the data set.} } } \source{Harold J. Spaeth (1999). \emph{United States Supreme Court Judicial Database, 1953-1997 Terms}. Ninth edition. Inter-university Consortium for Political and Social Research. Ann Arbor, Michigan. \url{http://www.icpsr.umich.edu/}} \keyword{datasets} pscl/man/s109.Rd0000644000175100001440000000301511033023526012761 0ustar hornikusers\name{s109} \alias{s109} \docType{data} \title{rollcall object, 109th U.S. Senate (2005-06).} \description{A sample rollcall object, generated using a collection of the rollcalls of the 109th U.S. Senate (2005-2006).} \usage{data(s109)} \format{ A \code{\link{rollcall}} object containing the recorded votes of the 109th U.S. Senate, plus information identifying the legislators and the rollcalls. } \details{Note the coding scheme used by Poole and Rosenthal; Yea (1), Nay (6) etc.} \source{ Keith Poole's web site: \url{http://voteview.com/senate109.htm} Originally scraped from the Senate's web site by Jeff Lewis: see \url{http://adric.sscnet.ucla.edu/rollcall/static/S109.ord} Information identifying the votes is available at \url{ftp://voteview.com/dtaord/s109desc_final.csv} } \examples{ require(pscl) data(s109) is(s109,"rollcall") ## TRUE s109 ## print method for class rollcall summary(s109) ## summary method summary(s109,verbose=TRUE) \dontrun{ ## how s109 was created require(pscl) s109 <- readKH("ftp://voteview.com/dtaord/sen109kh.ord", desc="109th U.S. Senate", debug=TRUE) url <- "ftp://voteview.com/dtaord/s109desc_final.csv" s109$vote.data <- data.frame(read.csv(file=url,header=TRUE)) s109$vote.data$date <- as.Date(s109$vote.data$date, format="%Y-%m-%d") dimnames(s109$votes)[[2]] <- paste(s109$vote.data$session, s109$vote.data$number,sep="-") } } \keyword{datasets} pscl/man/rollcall.Rd0000644000175100001440000001425310622431235014102 0ustar hornikusers\name{rollcall} \alias{rollcall} \title{create an object of class rollcall} \description{ Create a \code{rollcall} object, used for the analysis of legislative voting or, equivalently, item-response modeling of binary data produced by standardized tests, etc. } \usage{ rollcall(data, yea=1, nay=0, missing=NA, notInLegis=9, legis.names=NULL, vote.names=NULL, legis.data=NULL, vote.data=NULL, desc=NULL, source=NULL) } \arguments{ \item{data}{voting decisions (for roll calls), or test results (for IRT). Can be in one of two forms. First, \code{data} may be a \code{\link{matrix}}, with rows corresponding to legislators (subjects) and columns to roll calls (test items). \code{data} can also be a \code{\link{list}} with an element named \code{votes} containing the matrix described above.} \item{yea}{numeric, possibly a vector, code(s) for a Yea vote in the rollcall context, or a correct answer in the educational testing context. Default is 1.} \item{nay}{numeric, possibly a vector, code(s) for a Nay vote in the rollcall context, or an incorrect answer in the educational testing context. Default is 0.} \item{missing}{numeric or \code{NA}, possibly a vector, code(s) for missing data. Default is \code{NA}.} \item{notInLegis}{numeric or \code{NA}, possibly a vector, code(s) for the legislator not being in the legislature when a particular roll call was recorded (e.g., deceased, retired, yet to be elected).} \item{legis.names}{a vector of names of the legislators or individuals. If \code{data} is a \code{list} or \code{data.frame} and has a component named \code{legis.names}, then this will be used. Names will be generated if not supplied, or if there are fewer unique names supplied than legislators/subjects (rows of the roll call matrix).} \item{vote.names}{a vector of names or labels for the votes or items. If \code{data} is a \code{list} or \code{data.frame} and has a component named \code{vote.names}, then this will be used. Names will be generated if not supplied, or if there are fewer unique names supplied than votes/test-items (columns of the roll call matrix).} \item{legis.data}{a \code{\link{matrix}} or \code{\link{data.frame}} containing covariates specific to each legislator/test-taker; e.g., party affiliation, district-level covariates. If this object does not have the same number of rows as \code{data}, an error is returned.} \item{vote.data}{a \code{\link{matrix}} or \code{\link{data.frame}} containing covariates specific to each roll call vote or test item; e.g., a timestamp, the bill sponsor, descriptive text indicating the type of vote. If this object does not have the same number of row as the number of columns in \code{data}, an error is returned.} \item{desc}{character, a string providing an (optional) description of the data being used. If \code{data} is a list and contains an element named \code{desc}, then this will be used.} \item{source}{character, a string providing an (optional) description of where the roll call data originated (e.g., a URL or a short-form reference). Used in print and summary methods.} } \details{See below for methods that operate on objects of class \code{rollcall}.} \value{ An object of class \code{rollcall}, a list with the following components: \item{votes}{a \code{\link{matrix}} containing voting decisions, with rows corresponding to legislators (test subjects) and columns to roll call votes (test items). Legislators (test subjects) and items (or votes) have been labeled in the \code{\link{dimnames}} attribute of this matrix, using the \code{legis.names} and/or \code{vote.names} arguments, respectively.} \item{codes}{a \code{\link{list}} with named components \code{yea}, \code{nay}, \code{notInLegis} and \code{missing}, each component a numeric vector (possibly of length 1 and possibly \code{NA}), indicating how entries in the \code{votes} component of the \code{rollcall} object should be considered. This list simply gathers up the values in the \code{yea}, \code{nay}, \code{notInLegis} and \code{missing} arguments passed to the function.} \item{n}{numeric, number of legislators, equal to \code{dim(votes)[1]}} \item{m}{numeric, number of votes, equal to \code{dim(votes)[2]}} \item{legis.data}{user-supplied data on legislators/test-subjects.} \item{vote.data}{user-supplied data on rollcall votes/test-items.} \item{desc}{any user-supplied description. If no description was provided, defaults \code{desc} defaults to \code{NULL}.} \item{source}{any user-supplied source information (e.g., a url or a short-form reference). If no description is provided, \code{source} defaults to \code{NULL}.} } \seealso{ \code{\link{readKH}} for creating objects from files (possibly over the web), in the format used for data from the United States Congress used by Keith Poole and Howard Rosenthal (and others). \code{\link{summary.rollcall}}, \code{\link{ideal}} for model fitting. } \examples{ ## generate some fake roll call data set.seed(314159265) fakeData <- matrix(sample(x=c(0,1),size=5000,replace=TRUE), 50,100) rc <- rollcall(fakeData) is(rc,"rollcall") ## TRUE rc ## print the rollcall object on screen data(sc9497) ## Supreme Court example data rc <- rollcall(data=sc9497$votes, legis.names=sc9497$legis.names, desc=sc9497$desc) summary(rc,verbose=TRUE) \dontrun{ ## s107 ## could use readKH for this dat <- readLines("sen107kh.ord") dat <- substring(dat,37) mat <- matrix(NA,ncol=nchar(dat[1]),nrow=length(dat)) for(i in 1:103){ mat[i,] <- as.numeric(unlist(strsplit(dat[i], split=character(0)))) } s107 <- rollcall(mat, yea=c(1,2,3), nay=c(4,5,6), missing=c(7,8,9), notInLegis=0, desc="107th U.S. Senate", source="http://voteview.ucsd.edu") summary(s107) } } \keyword{manip} pscl/man/RockTheVote.Rd0000644000175100001440000001000711406255745014477 0ustar hornikusers\name{RockTheVote} \alias{RockTheVote} \docType{data} \title{Voter turnout experiment, using Rock The Vote ads} \description{ Voter turnout data spanning 85 cable TV systems, randomly allocated to a voter mobilization experiment targetting 18-19 year olds with "Rock the Vote" television advertisments } \usage{data(RockTheVote)} \format{ A data frame with 85 observations on the following 6 variables. \describe{ \item{\code{strata}}{numeric, experimental strata} \item{\code{treated}}{numeric, 1 if a treated cable system, 0 otherwise} \item{\code{r}}{numeric, number of 18 and 19 year olds turning out} \item{\code{n}}{numeric, number of 19 and 19 year olds registered} \item{\code{p}}{numeric, proportion of 18 and 19 year olds turning out} \item{\code{treatedIndex}}{numeric, a counter indexing the 42 treated units} } } \details{Green and Vavreck (2008) implemented a cluster-randomized experimental design in assessing the effects of a voter mobilization treatment in the 2004 U.S. Presidential election. The clusters in this design are geographic areas served by a single cable television system. So as to facilitate analysis, the researchers restricted their attention to small cable systems whose reach is limited to a single zip code. Further, since the experiment was fielded during the last week of the presidential election, the researchers restricted their search to cable systems that were not in the 16 hotly-contested \dQuote{battleground} states (as designated by the \emph{Los Angeles Times}). Eighty-five cable systems were available for randomization and were assigned to treatment after stratification on previous turnout levels in presidential elections (as determined from analysis of the corresponding states' voter registration files). Each cable system was matched with one or sometimes two other cable systems in the same state, yielding 40 strata. Then within each strata, cable systems were randomly assigned to treatment and control conditions. Strata 3, 8 and 25 have two control cable systems and 1 treated system each, while strata 6 and 20 have two treated cable systems and one control system. The remaining 35 strata have 1 treated cable system and 1 control system. In this way there are 38 + 4 = 42 treated systems, spanning 40 experiment strata. The treatment involved researchers purchasing prime-time advertising spots on four channels in the respective cable system in which the researchers aired voter mobilization ads. The ads were produced by \emph{Rock the Vote}, targeted at younger voters, and aired four times per night, per channel, over the last eight days of the election campaign. After the election, public records were consulted to assemble data on turnout levels in the treated and control cable systems. In the analysis reported in Green and Vavreck (2008), the researchers focused on turnout among registered voters aged 18 and 19 years old. } \references{Green, Donald P. and Lynn Vavreck. 2008. Analysis of Cluster-Randomized Experiments: A Comparison of Alternative Estimation Approaches. \emph{Political Analysis} 16:138-152. Jackman, Simon, 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Example 7.9. } \examples{ data(RockTheVote) ## estimate MLEs of treatment effects deltaFunction <- function(data){ model <- glm(cbind(r,n-r)~treated, data=data, family=binomial) c(coef(model)[2], confint(model)[2,]) } tmp <- by(RockTheVote, as.factor(RockTheVote$strata), deltaFunction) tmp <- matrix(unlist(tmp),ncol=3,byrow=TRUE) indx <- order(tmp[,1]) plot(y=1:40, x=tmp[indx,1], pch=16,cex=1.25, xlim=range(tmp), ylab="", axes=FALSE, xlab="Estimated Treatment Effect (MLEs, Logit Scale)") text(y=1:40, x=par()$usr[1], pos=4, as.character((1:40)[indx]), cex=.5) segments(x0=tmp[indx,2], x1=tmp[indx,3], y0=1:40, y1=1:40) axis(1) axis(3) abline(v=0) } \keyword{datasets} pscl/man/readKH.Rd0000644000175100001440000001651711033027772013445 0ustar hornikusers\name{readKH} \alias{readKH} \title{read roll call data in Poole-Rosenthal KH format} \description{ Creates a \code{rollcall} object from the flat file format for roll call data used by Keith Poole and Howard Rosenthal. } \usage{ readKH(file, dtl=NULL, yea=c(1,2,3), nay=c(4,5,6), missing=c(7,8,9), notInLegis=0, desc=NULL, debug=FALSE) } \arguments{ \item{file}{string, name of a file or URL holding KH data} \item{dtl}{string, name of a file or URL holding KH \code{dtl} file (information about votes); default is \code{NULL}, indicating no \code{dtl} file} \item{yea}{numeric, possibly a vector, code(s) for a Yea vote in the rollcall context (or a correct answer in the educational testing context). Default is \code{c(1,2,3)}, which corresponds to Yea, Paired Yea, and Announced Yea in Poole/Rosenthal data files.} \item{nay}{numeric, possibly a vector, code(s) for a Nay vote in the rollcall context (or an incorrect answer in the educational testing context). Default is \code{c(4,5,6)}, which corresponds to Announced Nay, Paired Nay, and Nay in Poole/Rosenthal data files.} \item{missing}{numeric and/or \code{NA}, possible a vector, code(s) for missing data. Default is \code{c(0,7,8,9,NA)}; the first four codes correspond to Not Yet a Member, Present (some Congresses), Present (some Congresses), and Not Voting.} \item{notInLegis}{numeric or \code{NA}, possibly a vector, code(s) for the legislator not being in the legislature when a particular roll call was recorded (e.g., deceased, retired, yet to be elected). Default is \code{0} for Poole/Rosenthal data files.} \item{desc}{string, describing the data, e.g., \code{82nd U.S. House of Representatives}; default is \code{NULL}} \item{debug}{logical, print debugging information for net connection} } \value{an object of class \code{\link{rollcall}}, with components created using the identifying information in the Poole/Rosenthal files. If the function can not read the file (e.g., the user specified a URL and the machine is not connected to the Internet), the function fails with an error message (set \code{debug=TRUE} to help resolve these issues). } \details{Keith Poole and Howard Rosenthal have gathered an impressive collection of roll call data, spanning every roll call cast in the United States Congress. This effort continues now as a real-time exercise, via a collaboration with Jeff Lewis (109th Congress onwards). Nolan McCarty collaborated on the compilation of roll call data for the 102nd through 108th Congress. This function relies on some hard-coded features of Poole-Rosenthal flat files, and assumes that the \code{file} being supplied has the following structure (variable, start-end columns): \describe{ \item{ICPSR legislator unique ID}{4-8} \item{ICPSR state ID}{9-10} \item{Congressional District}{11-12} \item{state name}{13-20} \item{party code}{21-23} \item{legislator name}{26-36} \item{roll-call voting record}{37 to end-of-record} } This function reads data files in that format, and creates a \code{\link{rollcall}}, for which there are useful methods such as \code{\link{summary.rollcall}}. The \code{legis.data} component of the \code{\link{rollcall}} object is a \code{\link{data.frame}} which contains: \describe{ \item{\code{state}}{a 2-character string abbreviation of each legislator' state} \item{\code{icpsrState}}{a 2-digit numeric code for each legislator's state, as used by the Inter-university Consortium for Political and Social Research (ICPSR)} \item{\code{cd}}{numeric, the number of each legislator's congressional district within each state; this is always 0 for members of the Senate} \item{\code{icpsrLegis}}{a unique numeric identifer for each legislator assigned by the ICPSR, as corrected by Poole and Rosenthal, see \url{http://voteview.com/icpsr.htm}} \item{\code{partyName}}{character string, the name of each legislator's political party} \item{\code{party}}{numeric, code for each legislator's political party; see \url{http://voteview.com/PARTY3.HTM}} } The \code{\link{rownames}} attribute of this data frame is a concatenation of the legislators' names, party abbreviations (for Democrats and Republicans) and state, and (where appropriate), a district number; e.g., \code{Bonner (R AL-1)}. This tag is also provided in the \code{legis.name} component of the returned rollcall object. Poole and Rosenthal also make \code{dtl} files available for Congresses 1 through 106. These files contain information about the votes themselves, in a multiple-line per vote \code{ascii} format, and reside in the \code{dtl} director of Poole's web site, e.g., \url{ftp://pooleandrosenthal.com/dtl/102s.dtl} is the \code{dtl} file for the 102nd Senate. The default is to presume that no such file exists. When a \code{dtl} file is available, and is read, the \code{votes.data} attribute of the resulting \code{\link{rollcall}} object is a \code{\link{data.frame}} with one record per vote, with the following variables: \describe{ \item{\code{date}}{vector of class \code{\link{Date}}, date of the rollcall, if available; otherwise \code{NULL}} \item{\code{description}}{vector of mode \code{character}, descriptive text} } The \code{dtl} files are presumed to have the date of the rollcall in the first line of text for each roll call, and lines 3 onwards contain descriptive text. Finally, note also that the Poole/Rosenthal data sets often include the U.S. President as a pseudo-legislator, adding the announced positions of a president or the administration to the roll call matrix. This adds an extra \dQuote{legislator} to the data set and can sometimes produce suprising results (e.g., a U.S. Senate of 101 senators), and a \dQuote{legislator} with a surprisingly low party loyalty score (since the President/administration only announces positions on a relatively small fraction of all Congressional roll calls). } \references{Poole, Keith and Howard Rosenthal. 1997. \emph{Congress: A Political-Economic History of Roll Call Voting}. New York: Oxford University Press. Poole, Keith. \url{http://voteview.ucsd.edu} Rosenthal, Howard L. and Keith T. Poole. \emph{United States Congressional Roll Call Voting Records, 1789-1990: Reformatted Data [computer file].} 2nd ICPSR release. Pittsburgh, PA: Howard L. Rosenthal and Keith T. Poole, Carnegie Mellon University, Graduate School of Industrial Administration [producers], 1991. Ann Arbor, MI: Inter-university Consortium for Political and Social Research [distributor], 2000. \url{http://webapp.icpsr.umich.edu/cocoon/ICPSR-STUDY/09822.xml} } \seealso{\code{\link{rollcall}} } \examples{ \dontrun{ h107 <- readKH("ftp://voteview.com/hou107kh.ord", desc="107th U.S. House of Representatives") s107 <- readKH("ftp://voteview.com/sen107kh.ord", desc="107th U.S. Senate") ## Jeff Lewis has quasi-real-time roll call data on his site ## in the Poole/Rosenthal format s110 <- readKH("http://adric.sscnet.ucla.edu/rollcall/static/S110.ord", desc="110th U.S. Senate (2007-08)", debug=TRUE) } } \author{Simon Jackman \email{jackman@stanford.edu}} \keyword{datasets} pscl/man/prussian.Rd0000644000175100001440000000130010555214104014126 0ustar hornikusers\name{prussian} \alias{prussian} \docType{data} \title{Prussian army horse kick data} \description{ Deaths by year, by corp, from horse kicks. } \usage{data(prussian)} \format{ A data frame with 280 observations on the following 3 variables. \describe{ \item{\code{y}}{a numeric vector, count of deaths} \item{\code{year}}{a numeric vector, 18XX, year of observation} \item{\code{corp}}{a \code{\link{factor}}, corp of Prussian Army generating observation} } } \source{ von Bortkiewicz, L. 1898. \emph{Das Gesetz der Kleinen Zahlen.} Leipzig: Teubner. } \examples{ data(prussian) corpP <- glm(y ~ corp, family=poisson,data=prussian) summary(corpP) } \keyword{datasets} pscl/man/presidentialElections.Rd0000644000175100001440000000440511507177506016640 0ustar hornikusers\name{presidentialElections} \alias{presidentialElections} \docType{data} \title{elections for U.S. President, 1932-2008, by state} \description{ Data from states and the District of Columbia, Democratic share of the presidential vote, 1932-2008.} \usage{data(presidentialElections)} \format{ \itemize{ \item{state}{name of state, character} \item{demVote}{percent of the vote for president won by the Democratic candidate} \item{year}{numeric, integer} \item{south}{logical, \code{TRUE} if state is one of the 11 states of the former Confederacy} } } \note{996 observations, unbalanced panel data: (a) Hawaii and Alaska contribute data from 1960 onwards; (b) the District of Columbia contributes data from 1964 onward; (c) Alabama has missing data for 1948 and 1964.} \source{David Leip's Atlas of U.S. Presidential Elections \url{http://uselectionsatlas.org} } \examples{ data(presidentialElections) library(lattice) xyplot(demVote ~ year | state, panel=panel.lines, ylab="Democratic Vote for President (percent)", xlab="Year", data=presidentialElections, scales=list(y=list(cex=.6),x=list(cex=.35)), strip=strip.custom(par.strip.text=list(cex=.6))) ## Obama vs Kerry, except DC y08 <- presidentialElections$year==2008 y04 <- presidentialElections$year==2004 tmpData <- merge(y=presidentialElections[y08,], x=presidentialElections[y04,], by="state") tmpData <- tmpData[tmpData$state!="DC",] xlim <- range(tmpData$demVote.x,tmpData$demVote.y) col <- rep("black",dim(tmpData)[1]) col[tmpData$south.x] <- "red" plot(demVote.y ~ demVote.x, xlab="Kerry Vote Share, 2004 (percent)", ylab="Obama Vote Share, 2008 (percent)", xlim=xlim, ylim=xlim, type="n", las=1, data=tmpData) abline(0,1,lwd=2,col=gray(.65)) ols <- lm(demVote.y ~ demVote.x, data=tmpData) abline(ols,lwd=2) text(tmpData$demVote.x, tmpData$demVote.y, tmpData$state, col=col, cex=.65) legend(x="topleft", bty="n", lwd=c(2,2), col=c(gray(.65),"black"), legend=c("No Change from 2004","Regression")) legend(x="bottomright", bty="n", text.col=c("red","black"), legend=c("South","Non-South")) } \keyword{datasets} pscl/man/predprob.Rd0000644000175100001440000000202510555214104014104 0ustar hornikusers\name{predprob} \alias{predprob} \title{compute predicted probabilities from fitted models} \description{ Compute predicted probabilities from fitted models, optionally at new covariate values. } \usage{ predprob(obj, \dots) } \arguments{ \item{obj}{fitted model object} \item{\dots}{other arguments} } \details{ See documentation for specific methods. } \value{ A matrix of predicted probabilities, each row a vector of predicted probabilities over the range of responses seen in the data (i.e., \code{min(y):max(y)}), conditional on the values of covariates. } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{predprob.glm}}, \code{\link{predprob.zeroinfl}}} \examples{ data("bioChemists") zip <- zeroinfl(art ~ . | ., data = bioChemists, EM = TRUE) phat <- predprob(zip) newdata <- expand.grid(list(fem="Men",mar="Married", kid5=1,phd=3.103, ment=0:77)) phat <- predprob(zip, newdata = newdata) } \keyword{regression} \keyword{models} pscl/man/predprob.ideal.Rd0000644000175100001440000000254011507177506015177 0ustar hornikusers\name{predprob.ideal} \alias{predprob.ideal} \title{predicted probabilities from fitting ideal to rollcall data} \description{ Computes predicted probabilities of a \dQuote{Yea} vote conditional on the posterior means of the legislators' ideal points and vote-specific parameters. } \usage{ \method{predprob}{ideal}(obj, ...) } \arguments{ \item{obj}{An object of class \code{\link{ideal}}} \item{\dots}{Arguments to be passed to other functions} } \details{ This is a wrapper function to \code{\link{predict.ideal}}, extracting just the predicted probabilities component of the object returned by that function. Predicted probabilities can and are generated for each voting decision, irrespective of whether the legislator actually voted on any particular roll call. } \value{ A \code{\link{matrix}} of dimension \code{n} (number of legislators) by \code{m} (number of roll call votes). } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{ideal}}, \code{\link{predprob}}, \code{\link{predict.ideal}}} \examples{ data(s109) id1 <- ideal(s109, d=1, normalize=TRUE, store.item=TRUE, maxiter=500, burnin=100, thin=10) phat <- predprob(id1) dim(phat) } \keyword{methods}% at least one, from doc/KEYWORDS \keyword{models}% __ONLY ONE__ keyword per line pscl/man/predprob.glm.Rd0000644000175100001440000000410311507177506014675 0ustar hornikusers\name{predprob.glm} \alias{predprob.glm} \title{Predicted Probabilties for GLM Fits} \description{ Obtains predicted probabilities from a fitted generalized linear model object. } \usage{ \method{predprob}{glm}(obj, newdata = NULL, at = NULL, ...) } \arguments{ \item{obj}{a fitted object of class inheriting from \code{"glm"}} \item{newdata}{optionally, a data frame in which to look for variables with which to predict. If omitted, the fitted linear predictors are used.} \item{at}{an optional numeric vector at which the probabilities are evaluated. By default \code{0:max(y)} where \code{y} is the original observed response.} \item{...}{arguments passed to or from other methods} } \details{ This method is only defined for glm objects with \code{family=\link{binomial}} or \code{family=\link{poisson}}, or negative binomial count models fit with the \code{\link[MASS:glm.nb]{glm.nb}} function in \code{library(MASS)}. } \value{ A matrix of predicted probabilities. Each row in the matrix is a vector of probabilities, assigning predicted probabilities over the range of responses actually observed in the data. For instance, for models with \code{family=binomial}, the matrix has two columns for the "zero" (or failure) and "one" (success) outcomes, respectively, and trivially, each row in the matrix sums to 1.0. For counts fit with \code{family=poisson} or via \code{glm.nb}, the matrix has \code{length(0:max(y))} columns. Each observation used in fitting the model generates a row to the returned matrix; alternatively, if \code{newdata} is supplied, the returned matrix will have as many rows as in \code{newdata}. } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{predict.glm}}} \examples{ data(bioChemists) glm1 <- glm(art ~ ., data=bioChemists, family=poisson, trace=TRUE) ## poisson GLM phat <- predprob(glm1) apply(phat,1,sum) ## almost all 1.0 } \keyword{models}% at least one, from doc/KEYWORDS \keyword{regression}% __ONLY ONE__ keyword per line pscl/man/predict.zeroinfl.Rd0000644000175100001440000001001511507177506015562 0ustar hornikusers\name{predict.zeroinfl} \alias{predict.zeroinfl} \alias{residuals.zeroinfl} \alias{terms.zeroinfl} \alias{model.matrix.zeroinfl} \alias{coef.zeroinfl} \alias{vcov.zeroinfl} \alias{summary.zeroinfl} \alias{print.summary.zeroinfl} \alias{logLik.zeroinfl} \alias{fitted.zeroinfl} \alias{predprob.zeroinfl} \alias{extractAIC.zeroinfl} \title{Methods for zeroinfl Objects} \description{ Methods for extracting information from fitted zero-inflated regression model objects of class \code{"zeroinfl"}. } \usage{ \method{predict}{zeroinfl}(object, newdata, type = c("response", "prob", "count", "zero"), na.action = na.pass, at = NULL, \dots) \method{residuals}{zeroinfl}(object, type = c("pearson", "response"), \dots) \method{coef}{zeroinfl}(object, model = c("full", "count", "zero"), \dots) \method{vcov}{zeroinfl}(object, model = c("full", "count", "zero"), \dots) \method{terms}{zeroinfl}(x, model = c("count", "zero"), \dots) \method{model.matrix}{zeroinfl}(object, model = c("count", "zero"), \dots) } \arguments{ \item{object, x}{an object of class \code{"zeroinfl"} as returned by \code{\link{zeroinfl}}.} \item{newdata}{optionally, a data frame in which to look for variables with which to predict. If omitted, the original observations are used.} \item{type}{character specifying the type of predictions or residuals, respectively. For details see below.} \item{na.action}{function determining what should be done with missing values in \code{newdata}. The default is to predict \code{NA}.} \item{at}{optionally, if \code{type = "prob"}, a numeric vector at which the probabilities are evaluated. By default \code{0:max(y)} is used where \code{y} is the original observed response.} \item{model}{character specifying for which component of the model the terms or model matrix should be extracted.} \item{\dots}{currently not used.} } \details{ A set of standard extractor functions for fitted model objects is available for objects of class \code{"zeroinfl"}, including methods to the generic functions \code{\link[base]{print}} and \code{\link[base]{summary}} which print the estimated coefficients along with some further information. The \code{summary} in particular supplies partial Wald tests based on the coefficients and the covariance matrix (estimated from the Hessian in the numerical optimization of the log-likelihood). As usual, the \code{summary} method returns an object of class \code{"summary.zeroinfl"} containing the relevant summary statistics which can subsequently be printed using the associated \code{print} method. The methods for \code{\link[stats]{coef}} and \code{\link[stats]{vcov}} by default return a single vector of coefficients and their associated covariance matrix, respectively, i.e., all coefficients are concatenated. By setting the \code{model} argument, the estimates for the corresponding model components can be extracted. Both the \code{\link[stats]{fitted}} and \code{\link[stats]{predict}} methods can compute fitted responses. The latter additionally provides the predicted density (i.e., probabilities for the observed counts), the predicted mean from the count component (without zero inflation) and the predicted probability for the zero component. The \code{\link[stats]{residuals}} method can compute raw residuals (observed - fitted) and Pearson residuals (raw residuals scaled by square root of variance function). The \code{\link[stats]{terms}} and \code{\link[stats]{model.matrix}} extractors can be used to extract the relevant information for either component of the model. A \code{\link[stats]{logLik}} method is provided, hence \code{\link[stats]{AIC}} can be called to compute information criteria. } \author{Achim Zeileis } \seealso{\code{\link{zeroinfl}}} \examples{ data("bioChemists", package = "pscl") fm_zip <- zeroinfl(art ~ ., data = bioChemists) plot(residuals(fm_zip) ~ fitted(fm_zip)) coef(fm_zip) coef(fm_zip, model = "count") summary(fm_zip) logLik(fm_zip) } \keyword{regression} pscl/man/predict.ideal.Rd0000644000175100001440000001004411507177506015012 0ustar hornikusers\name{predict.ideal} \alias{predict.ideal} \alias{print.predict.ideal} \title{predicted probabilities from an ideal object} \description{Compute predicted probabilities from an \code{\link{ideal}} object. This predict method uses the posterior mean values of \eqn{x} and \eqn{\beta}{beta} to make predictions.} \usage{ \method{predict}{ideal}(object, cutoff=.5, burnin=NULL, ...) \method{print}{predict.ideal}(x,digits=2,...) } \arguments{ \item{object}{an object of class \code{ideal} (produced by \code{\link{ideal}}) with item parameters (beta) stored; i.e., \code{store.item=TRUE} was set when the \code{ideal} object was fitted} \item{cutoff}{numeric, a value between 0 and 1, the threshold to be used for classifying predicted probabilities of a Yea votes as predicted Yea and Nay votes.} \item{burnin}{of the recorded MCMC samples, how many to discard as burnin? Default is \code{NULL}, in which case the value of \code{burnin} in the \code{\link{ideal}} object is used.} \item{x}{object of class \code{predict.ideal}} \item{digits}{number of digits in printed object} \item{...}{further arguments passed to or from other methods.} } \details{ Predicted probabilities are computed using the mean of the posterior density of of \eqn{x} (ideal points, or latent ability) and \eqn{\beta} (bill or item parameters). The percentage correctly predicted are determined by counting the percentages of votes with predicted probabilities of a Yea vote greater than or equal to the \code{cutoff} as the threshold. } \value{ An object of class \code{predict.ideal}, containing: \item{pred.probs}{the calculated predicted probability for each legislator for each vote.} \item{prediction}{the calculated prediction (0 or 1) for each legislator for each vote.} \item{correct}{for each legislator for each vote, whether the prediction was correct.} \item{legis.percent}{for each legislator, the percent of votes correctly predicted.} \item{vote.percent}{for each vote, the percent correctly predicted.} \item{yea.percent}{the percent of yea votes correctly predicted.} \item{nay.percent}{the percent of nay votes correctly predicted.} \item{party.percent}{the average value of the percent correctly predicted by legislator, separated by party, if party information exists in the \code{rollcall} object used for \code{ideal}. If no party information is available, \code{party.percent = NULL}.} \item{overall.percent}{the total percent of votes correctly predicted.} \item{ideal}{the name of the \code{\link{ideal}} object, which can be later \code{\link{eval}}uated} \item{desc}{string, the descriptive text from the \code{\link{rollcall}} object passed to \code{\link{ideal}}} } \note{When specifying a value of \code{burnin} different from that used in fitting the \code{\link{ideal}} object, note a distinction between the iteration numbers of the stored iterations, and the number of stored iterations. That is, the \code{n}-th iteration stored in an \code{\link{ideal}} object will not be iteration \code{n} if the user specified \code{thin>1} in the call to \code{\link{ideal}}. Here, iterations are tagged with their iteration number. Thus, if the user called \code{\link{ideal}} with \code{thin=10} and \code{burnin=100} then the stored iterations are numbered \code{100, 110, 120, ...}. Any future subsetting via a \code{burnin} refers to this iteration number.} \seealso{\code{\link{ideal}}, \code{\link{summary.ideal}}, \code{\link{plot.predict.ideal}}} \examples{ data(s109) \dontrun{ id1 <- ideal(s109, normalize=TRUE, store.item=TRUE) ## too long for examples } id1 <- ideal(s109, d=1, normalize=TRUE, store.item=TRUE, ## need this to be TRUE for predict maxiter=500, burnin=100, thin=10) phat <- predict(id1) phat ## print method } \keyword{classes} pscl/man/predict.hurdle.Rd0000644000175100001440000001057211574512032015214 0ustar hornikusers\name{predict.hurdle} \alias{predict.hurdle} \alias{residuals.hurdle} \alias{terms.hurdle} \alias{model.matrix.hurdle} \alias{coef.hurdle} \alias{vcov.hurdle} \alias{summary.hurdle} \alias{print.summary.hurdle} \alias{logLik.hurdle} \alias{fitted.hurdle} \alias{predprob.hurdle} \alias{extractAIC.hurdle} \title{Methods for hurdle Objects} \description{ Methods for extracting information from fitted hurdle regression model objects of class \code{"hurdle"}. } \usage{ \method{predict}{hurdle}(object, newdata, type = c("response", "prob", "count", "zero"), na.action = na.pass, at = NULL, \dots) \method{residuals}{hurdle}(object, type = c("pearson", "response"), \dots) \method{coef}{hurdle}(object, model = c("full", "count", "zero"), \dots) \method{vcov}{hurdle}(object, model = c("full", "count", "zero"), \dots) \method{terms}{hurdle}(x, model = c("count", "zero"), \dots) \method{model.matrix}{hurdle}(object, model = c("count", "zero"), \dots) } \arguments{ \item{object, x}{an object of class \code{"hurdle"} as returned by \code{\link{hurdle}}.} \item{newdata}{optionally, a data frame in which to look for variables with which to predict. If omitted, the original observations are used.} \item{type}{character specifying the type of predictions or residuals, respectively. For details see below.} \item{na.action}{function determining what should be done with missing values in \code{newdata}. The default is to predict \code{NA}.} \item{at}{optionally, if \code{type = "prob"}, a numeric vector at which the probabilities are evaluated. By default \code{0:max(y)} is used where \code{y} is the original observed response.} \item{model}{character specifying for which component of the model the terms or model matrix should be extracted.} \item{\dots}{currently not used.} } \details{ A set of standard extractor functions for fitted model objects is available for objects of class \code{"hurdle"}, including methods to the generic functions \code{\link[base]{print}} and \code{\link[base]{summary}} which print the estimated coefficients along with some further information. The \code{summary} in particular supplies partial Wald tests based on the coefficients and the covariance matrix (estimated from the Hessian in the numerical optimization of the log-likelihood). As usual, the \code{summary} method returns an object of class \code{"summary.hurdle"} containing the relevant summary statistics which can subsequently be printed using the associated \code{print} method. The methods for \code{\link[stats]{coef}} and \code{\link[stats]{vcov}} by default return a single vector of coefficients and their associated covariance matrix, respectively, i.e., all coefficients are concatenated. By setting the \code{model} argument, the estimates for the corresponding model component can be extracted. Both the \code{\link[stats]{fitted}} and \code{\link[stats]{predict}} methods can compute fitted responses. The latter additionally provides the predicted density (i.e., probabilities for the observed counts), the predicted mean from the count component (without zero hurdle) and the predicted ratio of probabilities for observing a non-zero count. The latter is the ratio of probabilities for a non-zero implied by the zero hurdle component and a non-zero count in the non-truncated count distribution. See also Appendix C in Zeileis et al. (2008). The \code{\link[stats]{residuals}} method can compute raw residuals (observed - fitted) and Pearson residuals (raw residuals scaled by square root of variance function). The \code{\link[stats]{terms}} and \code{\link[stats]{model.matrix}} extractors can be used to extract the relevant information for either component of the model. A \code{\link[stats]{logLik}} method is provided, hence \code{\link[stats]{AIC}} can be called to compute information criteria. } \references{ Zeileis, Achim, Christian Kleiber and Simon Jackman 2008. \dQuote{Regression Models for Count Data in R.} \emph{Journal of Statistical Software}, \bold{27}(8). URL \url{http://www.jstatsoft.org/v27/i08/}. } \author{Achim Zeileis } \seealso{\code{\link{hurdle}}} \examples{ data("bioChemists", package = "pscl") fm <- hurdle(art ~ ., data = bioChemists) plot(residuals(fm) ~ fitted(fm)) coef(fm) coef(fm, model = "zero") summary(fm) logLik(fm) } \keyword{regression} pscl/man/pR2.Rd0000644000175100001440000000334611507177506012755 0ustar hornikusers\name{pR2} \alias{pR2} %- Also NEED an '\alias' for EACH other topic documented here. \title{compute various pseudo-R2 measures} \description{ compute various pseudo-R2 measures for various GLMs } \usage{ pR2(object, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{a fitted model object, for now of class \code{glm}, \code{polr}, or \code{mulitnom}} \item{\dots}{additional arguments to be passed to or from functions} } \details{Numerous pseudo r-squared measures have been proposed for generalized linear models, involving a comparison of the log-likelihood for the fitted model against the log-likelihood of a null/restricted model with no predictors, normalized to run from zero to one as the fitted model provides a better fit to the data (providing a rough analogue to the computation of r-squared in a linear regression). } \value{ A vector of length 6 containing \item{llh}{The log-likelihood from the fitted model} \item{llhNull}{The log-likelihood from the intercept-only restricted model} \item{G2}{Minus two times the difference in the log-likelihoods} \item{McFadden}{McFadden's pseudo r-squared} \item{r2ML}{Maximum likelihood pseudo r-squared} \item{r2CU}{Cragg and Uhler's pseudo r-squared} } \references{Long, J. Scott. 1997. \emph{Regression Models for Categorical and Limited Dependent Variables}. Sage. pp104-106.} \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{extractAIC}}, \code{\link{logLik}}} \examples{ data(admit) require(MASS) ## ordered probit model op1 <- polr(score ~ gre.quant + gre.verbal + ap + pt + female, Hess=TRUE, data=admit, method="probit") pR2(op1) } \keyword{models} pscl/man/postProcess.Rd0000644000175100001440000002073111507177506014633 0ustar hornikusers\name{postProcess} \alias{postProcess} \title{remap MCMC output via affine transformations} \description{ Remap the MCMC iterates in an \code{\link{ideal}} object via an affine transformation, imposing identifying restrictions ex post (aka post-processing).} \usage{ postProcess(object, constraints="normalize", debug = FALSE) } \arguments{ \item{object}{an object of class \code{\link{ideal}}} \item{constraints}{list of length \code{d+1}, each component providing a set of \code{d} restrictions, where \code{d} is the dimension of the fitted \code{\link{ideal}} model; or the character string \code{normalize} (default). If a list, the name of each component should uniquely match a legislator/subject's name. See Details.} \item{debug}{logical flag for verbose output, used for debugging} } \details{ Item-response models are unidentified without restrictions on the underlying parameters. Consider the \code{d=1} dimensional case. The model is \deqn{P(y_{ij} = 1) = F(x_i \beta_j - \alpha_j)}{% Pr(y_[ij] = 1) = F(x_i b_j - a_j). } Any linear transformation of the latent traits, say, \deqn{x^* = mx + c}{% x* = mx + c } can be exactly offset by applying the appropriate linear transformations to the item/bill parameters, meaning that there is no unique set of values for the model parameters that will maximize the likelihood function. In higher dimensions, the latent traits can also be transformed via any arbitrary rotation, dilation and translation, with offsetting transformations applied to the item/bill parameters. One strategy in MCMC is to ignore the lack of identification at run time, but apply identifying restrictions ex post, \dQuote{post-processing} the MCMC output, iteration-by-iteration. In a \code{d}-dimensional IRT model, a sufficient condition for global identification is to fix \code{d+1} latent traits, provided the constrained latent traits span the \code{d} dimensional latent space. This function implements this strategy. The user supplies a set of constrained ideal points in the \code{constraints} list. The function then processes the MCMC output in the \code{\link{ideal}} \code{object}, finding the transformation that maps the current iteration's sampled values for \code{x} (latent traits/ideal points) into the sub-space of identified parameters defined by the fixed points in \code{constraints}; i.e., what is the affine transformation that maps the unconstrained ideal points into the constraints? Aside from miniscule numerical inaccuracies resulting from matrix inversion etc, this transformation is exact: after post-processing, the \code{d+1} constrained points do not vary over the MCMC iterations. The remaining \code{n-d-1} ideal points are subject to (posterior) uncertainty; the \dQuote{random tour} of the joint parameter space of these parameters produced by the MCMC algorithm has been mapped into a subspace in which the parameters are globally identified. If the \code{\link{ideal}} object was produced with \code{store.item} set to \code{TRUE}, then the item parameters are also post-processed, applying the inverse transformation. Specifically, recall that the IRT model is \deqn{P(y_{ij} = 1) = F(x_i'\beta_j)}{% Pr(y_[ij] = 1) = F(x_i' b_j)} where in this formulation \eqn{x_i} is a vector of length \code{d+1}, including a \code{-1} to put a constant term into the model (i.e., the intercept or difficulty parameter is part of \eqn{\beta_j}{beta_j}). Let \eqn{A} denote the non-singular, \code{d+1}-by-\code{d+1} matrix that maps the \eqn{x} into the space of identified parameters. Recall that this transformation is computed iteration by iteration. Then each \eqn{x_i} is transformed to \eqn{x^*_i = Ax_i}{x*_i = Ax_i} and \eqn{\beta_j}{b_j} is transformed to \eqn{\beta_j^* = A^{-1} \beta_j}{b_j^* = A^(-1) b_j}, \eqn{i = 1, \ldots, n; j = 1, \ldots, m}. Local identification can be obtained for a one-dimensional model by simply imposing a normalizing restriction on the ideal points: this normalization (mean zero, standard deviation one) is the default behavior, but (a) is only sufficient for local identification when the \code{rollcall} object was fit with \code{d=1}; (b) is not sufficient for even local identification when \code{d>1}, with further restrictions required so as to rule out other forms of invariance (e.g., translation, or "dimension-switching", a phenomenon akin to label-switching in mixture modeling). The default is to impose dimension-by-dimension normalization with respect to the means of the marginal posterior densities of the ideal points, such that the these means (the usual Bayes estimates of the ideal points) have mean zero and standard deviation one across legislators. An offsetting transformation is applied to the items parameters as well, if they are saved in the \code{ideal} object. Specifically, in one-dimension, the two-parameter IRT model is \deqn{P(y_{ij} = 1) = F(x_i \beta_j - \alpha_j).}{Pr(y_[ij] = 1) = F(x_i b_j - a_j).} If we normalize the \eqn{x_i} to \eqn{x*_i = (x_i - c)/m} then the offsetting transformations for the item/bill parameters are \eqn{\beta_j^* = \beta_j m}{b*_j = b_j m} and \eqn{\alpha_j^* = \alpha_j - c\beta_j}{a*_j = a_j - cb_j}. } \value{ An object of class \code{\link{ideal}}, with components suitably transformed and recomputed (i.e., \code{x} is transformed and \code{xbar} recomputed, and if the \code{\link{ideal}} object was fit with \code{store.item=TRUE}, \code{beta} is transformed and \code{betabar} is recomputed). } \references{ Hoff, Peter, Adrian E. Raftery and Mark S. Handcock. 2002. Latent Space Approaches to Social Network Analysis. \emph{Journal of the American Statistical Association} 97:1090--1098. Edwards, Yancy D. and Greg M. Allenby. 2003. Multivariate Analysis of Mulitple Response Data. \emph{Journal of Marketing Research} 40:321--334. Rivers, Douglas. 2003. \dQuote{Identification of Multidimensional Item-Response Models.} Typescript. Department of Political Science, Stanford University. } \author{Simon Jackman \email{jackman@stanford.edu}} \note{Applying transformations to obtain identification can sometimes lead to surprising results. Each data point makes the same likelihood contributions with either the identified or unidentified parameters. But, in general, predictions generated with the parameters set to their posterior means will differ depending on whether one uses the identified subset of parameters or the unidentified parameters. For this reason, caution should be used when using a function such as \code{\link{predict}} after post-processing output from \code{\link{ideal}}. A better strategy is to compute the estimand of interest at each iteration and then take averages over iterations. When specifying a value of \code{burnin} different from that used in fitting the \code{\link{ideal}} object, note a distinction between the iteration numbers of the stored iterations, and the number of stored iterations. That is, the \code{n}-th iteration stored in an \code{\link{ideal}} object will not be iteration \code{n} if the user specified \code{thin>1} in the call to \code{\link{ideal}}. Here, iterations are tagged with their iteration number. Thus, if the user called \code{\link{ideal}} with \code{thin=10} and \code{burnin=100} then the stored iterations are numbered \code{100, 110, 120, ...}. Any future subsetting via a \code{burnin} refers to this iteration number. } \examples{ data(s109) ## short run for examples id1 <- ideal(s109, d=1, normalize=FALSE, ## no identification...! store.item=TRUE, maxiter=500, burnin=0, thin=10) id1Local <- postProcess(id1) ## default is to normalize summary(id1Local) id1pp <- postProcess(id1, constraints=list(BOXER=-1,INHOFE=1)) summary(id1Local) \dontrun{ id2 <- ideal(s109, d=2, store.item=TRUE, maxiter=1e4, burnin=0, thin=25) tracex(id2,d=1:2, legis=c("BOXER","INHOFE","BYRD","CHAFEE","MCCAIN"), showAll=TRUE) id2pp <- postProcess(id2, constraints=list(BOXER=c(-1,0), INHOFE=c(1,0), CHAFEE=c(0,.25))) tracex(id2pp,d=1:2, legis=c("BOXER","INHOFE","COLLINS","FEINGOLD","COLEMAN", "CHAFEE","MCCAIN","KYL"), showAll=TRUE) } } \keyword{models} pscl/man/politicalInformation.Rd0000644000175100001440000000361711077152430016470 0ustar hornikusers\name{politicalInformation} \alias{politicalInformation} \docType{data} \title{Interviewer ratings of respondent levels of political information} \description{ Interviewers administering the 2000 American National Election Studies assigned an ordinal rating to each respondent's "general level of information" about politics and public affairs. } \usage{data(politicalInformation)} \format{ A data frame with 1807 observations on the following 8 variables. \describe{ \item{\code{y}}{interviewer rating, a factor with levels \code{Very Low} \code{Fairly Low} \code{Average} \code{Fairly High} \code{Very High}} \item{\code{collegeDegree}}{a factor with levels \code{No} \code{Yes}} \item{\code{female}}{a factor with levels \code{No} \code{Yes}} \item{\code{age}}{a numeric vector, respondent age in years} \item{\code{homeOwn}}{a factor with levels \code{No} \code{Yes}} \item{\code{govt}}{a factor with levels \code{No} \code{Yes}} \item{\code{length}}{a numeric vector, length of ANES pre-election interview in minutes} \item{\code{id}}{a factor, unique identifier for each interviewer} } } \details{ Seven respondents have missing data on the ordinal interviewer rating. The covariates \code{age} and \code{length} also have some missing data. } \source{ The National Election Studies (www.electionstudies.org). THE 2000 NATIONAL ELECTION STUDY [dataset]. Ann Arbor, MI: University of Michigan, Center for Political Studies [producer and distributor]. } \references{ Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. } \examples{ data(politicalInformation) table(politicalInformation$y,exclude=NULL) require(MASS) op <- polr(y ~ collegeDegree + female + log(age) + homeOwn + govt + log(length), data=politicalInformation, Hess=TRUE, method="probit") } \keyword{datasets} pscl/man/plot.seatsVotes.Rd0000644000175100001440000000577511643415334015432 0ustar hornikusers\name{plot.seatsVotes} \alias{plot.seatsVotes} %- Also NEED an '\alias' for EACH other topic documented here. \title{plot seats-votes curves} \description{ Plot seats-votes curves produced by \code{seatsVotes} } \usage{ \method{plot}{seatsVotes}(x, type = c("seatsVotes", "density"), legend = "bottomright", transform=FALSE, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{an object of class \code{\link{seatsVotes}}} \item{type}{character, partially matching the options above; see details} \item{legend}{where to put the legend when plotting with \code{type="seatsVotes"}} \item{transform}{logical, whether to transform the vote shares for \code{type="density"}; see Details} \item{\dots}{arguments passed to or from other functions (e.g., options for the \code{\link{density}} function, when \code{type="density"})} } \details{A seats-votes curve (with various annotations) is produced with option \code{type="seatsVotes"}. A density plot of the vote shares is produced with \code{type="density"}. A bimodal density corresponds to an electoral system with a proliferation of safe seats for both parties, and a seats-votes curve that is relatively flat (or \dQuote{unresponsive}) in the neighborhood of average district-level vote shares of 50 percent. The density is fitted using the defaults in the \code{\link{density}} function, but with the density constrained to fall to zero at the extremes of the data, via the \code{from} and \code{to} options to density. A \code{\link{rug}} is added to the density plot. If \code{transform=TRUE}, the vote shares are transformed prior to plotting, so as to reduce the extent to which extreme vote shares close to zero or 1 determine the shape of the density (i.e., this option is available only for plots of \code{type="density"}). The transformation is a sinusoidal function, a scaled \dQuote{log-odds/inverse-log-odds} function mapping from (0,1) to (0,1): i.e., \eqn{f(x) = g(k\cdot h(x))}{f(x) = g(kh(x))} where \eqn{h(x)} is the log-odds transformation \eqn{h(x) = \log(x/(1-x))}{h(x) = log[x/(1-x)]}, \eqn{k} is a scaling parameter set to \eqn{\sqrt{3}}{sqrt(3)}, and \eqn{g(x)} is the inverse-log-odds transformation \eqn{g(x) = \exp(x)/(1+\exp(x))}{g(x) = exp(x)/[1+exp(x)]}. Note that this transformation is cosmetic, with the effect of assigning more of the graphing region to be devoted to marginal seats. } \value{ The function performs the requested plots and exits silently with \code{invisible{NULL}}. } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{density}}, \code{\link{rug}}} \examples{ data(ca2006) x <- ca2006$D/(ca2006$D+ca2006$R) sv <- seatsVotes(x, desc="Democratic Vote Shares, California 2006 congressional elections") plot(sv) plot(sv,type="density") plot(sv,type="density",transform=TRUE) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{hplot} pscl/man/plot.predict.ideal.Rd0000644000175100001440000000354211643415334015767 0ustar hornikusers\name{plot.predict.ideal} \alias{plot.predict.ideal} \title{plot methods for predictions from ideal objects} \description{ Plot classification success rates by legislators, or by roll calls, using predictions from ideal. } \usage{ \method{plot}{predict.ideal}(x, type = c("legis", "votes"),...) } \arguments{ \item{x}{an object of class \code{\link{predict.ideal}}.} \item{type}{string; one of \code{legis} or \code{votes}.} \item{...}{further arguments passed to or from other methods.} } \details{ \code{type="legis"} produces a plot of the \dQuote{percent correctly predicted} for each legislator/subject (using the classification threshold set in \code{\link{predict.ideal}}) against the estimated ideal point of each legislator/subject (the estimated mean of the posterior density of the ideal point), dimension at a time. If the legislators' party affiliations are availble in the \code{\link{rollcall}} object that was passed to \code{\link{ideal}}, then legislators from the same party are plotted with a unique color. \code{type="votes"} produces a plot of classification rates for each roll call, by the percentage of legislators voting for the losing side. The \code{x}-ordinate is jittered for clarity. } \value{ After drawing plots on the current device, exits silently returning \code{invisible(NULL)}. } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{predict.ideal}} \code{\link{ideal}} } \examples{ data(s109) id1 <- ideal(s109, d=1, normalize=TRUE, ## local identification in 1d store.item=TRUE, ## need this for predictions maxiter=500, ## short run for demo purposes burnin=100, thin=10) phat <- predict(id1) plot(phat,type="legis") plot(phat,type="votes") } \keyword{hplot}% __ONLY ONE__ keyword per line pscl/man/plot.ideal.Rd0000644000175100001440000001156411360734237014343 0ustar hornikusers\name{plot.ideal} \alias{plot.ideal} \alias{plot1d} \alias{plot2d} \title{plots an ideal object} \description{ Plot of the results of an ideal point estimation contained in an object of class \code{ideal}. } \usage{ \method{plot}{ideal}(x, conf.int=0.95, burnin=NULL, ...) plot1d(x, d=1, conf.int=0.95, burnin=NULL, showAllNames = FALSE, ...) plot2d(x, d1=1, d2=2, burnin=NULL, overlayCuttingPlanes=FALSE, ...) } \arguments{ \item{x}{an object of class \code{\link{ideal}}} \item{conf.int}{for "ideal" objects with 1 dimension estimated, the level of the confidence interval to plot around the posterior mean for each legislator. If 2 or more dimensions were estimated, \code{conf.int} is ignored.} \item{d}{integer, which dimension to display in a 1d plot, if the object is a multidimensional ideal object}. \item{burnin}{of the recorded MCMC samples, how many to discard as burnin? Default is \code{NULL}, in which case the value of \code{burnin} in the \code{\link{ideal}} object is used.} \item{showAllNames}{\code{\link{logical}}, if \code{TRUE}, the vertical axis will the names of all legislators. Default is \code{FALSE} to reduce clutter on typical-sized graph.} \item{d1}{integer, the number of the first dimension to plot when plotting multi-dimensional \code{\link{ideal}} objects. This dimension will appear on the horizontal (x) axis.} \item{d2}{integer, the number of the second dimension to plot when plotting multi-dimensional \code{\link{ideal}} objects. This dimension will appear on the vertical (y) axis.} \item{overlayCuttingPlanes}{logical, if \code{TRUE}, overlay the estimated bill-specific cutting planes} \item{...}{other parameters to be passed through to plotting functions.} } \details{ If the \code{ideal} object comes from fitting a \code{d=1} dimensional model, then \code{plot.ideal} plots the mean of the posterior density over each legislator's ideal point, accompanied by a \code{conf.int} confidence interval. In this case, \code{plot.ideal} is simply a wrapper function to \code{\link{plot1d}}. If the \code{ideal} object has \code{d=2} dimensions, then \code{\link{plot2d}} is called, which plots the (estimated) mean of the posterior density of each legislator's ideal point (i.e., the ideal point/latent trait is a point in 2-dimensional Euclidean space, and the posterior density for each ideal point is a bivariate density). Single dimension summaries of the estimated ideal points (latent traits) can be obtained for multidimensional \code{\link{ideal}} objects by passing the \code{\link{ideal}} object directly to \code{plot1d} with \code{d} set appropriately. If the \code{\link{ideal}} object has \code{d>2} dimensions, a scatterplot matrix is produced via \code{\link{pairs}}, with the posterior means of the ideal points (latent traits) plotted against one another, dimension by dimension. For unidimensional and two-dimensional models, if party information is available in the \code{rollcall} object contained in the \code{ideal} object, legislators from different parties are plotted in different colors. If the \code{ideal} object has more than 2 dimensions, \code{plot.ideal()} produces a matrix of plots of the mean ideal points of each dimension against the posterior mean ideal points of the other dimensions. } \note{When specifying a value of \code{burnin} different from that used in fitting the \code{\link{ideal}} object, note a distinction between the iteration numbers of the stored iterations, and the number of stored iterations. That is, the \code{n}-th iteration stored in an \code{\link{ideal}} object will not be iteration \code{n} if the user specified \code{thin>1} in the call to \code{\link{ideal}}. Here, iterations are tagged with their iteration number. Thus, if the user called \code{\link{ideal}} with \code{thin=10} and \code{burnin=100} then the stored iterations are numbered \code{100, 110, 120, ...}. Any future subsetting via a \code{burnin} refers to this iteration number.} \seealso{\code{\link{ideal}}; \code{\link{tracex}} for trace plots, a graphical aid useful in diagnosing convergence of the MCMC algorithms.} \examples{ data(s109) id1 <- ideal(s109, d=1, normalize=TRUE, store.item=TRUE, maxiter=500, ## short run for examples burnin=100, thin=10) plot(id1) \dontrun{ id2 <- ideal(s109, d=2, store.item=TRUE, maxiter=11e2, burnin=1e2, verbose=TRUE, thin=25) plot(id2,overlayCuttingPlanes=TRUE) id2pp <- postProcess(id2, constraints=list(BOXER=c(-1,0), INHOFE=c(1,0), CHAFEE=c(0,.25))) plot(id2pp,overlayCuttingPlanes=TRUE) } } \keyword{hplot} pscl/man/partycodes.Rd0000644000175100001440000000133410555214104014446 0ustar hornikusers\name{partycodes} \alias{partycodes} \docType{data} \title{political parties appearing in the U.S. Congress} \description{ Numeric codes and names of 85 political parties appearing in Poole and Rosenthal's collection of U.S. Congressional roll calls. } \usage{data(partycodes)} \format{ \itemize{ \item{\code{code}}{integer, numeric code for legislatorappearing in Poole and Rosenthal rollcall data files} \item{\code{party}}{character, name of party} } } \details{The function \code{\link{readKH}} converts the integer codes into strings, via a table lookup in this data frame.} \seealso{\code{\link{readKH}} } \source{Keith Poole's website: \url{http://voteview.com/party3.dat}} \keyword{datasets} pscl/man/odTest.Rd0000644000175100001440000000521311360736032013537 0ustar hornikusers\name{odTest} \alias{odTest} \title{likelihood ratio test for over-dispersion in count data} \description{ Compares the log-likelihoods of a negative binomial regression model and a Poisson regression model. } \usage{ odTest(glmobj, alpha=.05, digits = max(3, getOption("digits") - 3)) } \arguments{ \item{glmobj}{an object of class \code{negbin} produced by \code{\link[MASS:glm.nb]{glm.nb}}} \item{alpha}{significance level of over-dispersion test} \item{digits}{ number of digits in printed output} } \details{The negative binomial model relaxes the assumption in the Poisson model that the (conditional) variance equals the (conditional) mean, by estimating one extra parameter. A likelihood ratio (LR) test can be used to test the null hypothesis that the restriction implicit in the Poisson model is true. The LR test-statistic has a non-standard distribution, even asymptotically, since the negative binomial over-dispersion parameter (called \code{theta} in \code{glm.nb}) is restricted to be positive. The asymptotic distribution of the LR (likelihood ratio) test-statistic has probability mass of one half at zero, and a half \eqn{\chi^2_1}{chi-square (1)} distribution above zero. This means that if testing at the \eqn{\alpha}{alpha} = .05 level, one should not reject the null unless the LR test statistic exceeds the critical value associated with the \eqn{2\alpha}{2 alpha} = .10 level; this LR test involves just one parameter restriction, so the critical value of the test statistic at the \eqn{p}{p} = .05 level is 2.7, instead of the usual 3.8 (i.e., the .90 quantile of the \eqn{\chi^2_1}{chi-square (1)} distribution, versus the .95 quantile). A Poisson model is run using \code{\link{glm}} with family set to \code{link{poisson}}, using the \code{\link{formula}} in the negbin model object passed as input. The \code{\link{logLik}} functions are used to extract the log-likelihood for each model. } \value{None; prints results and returns silently} \references{A. Colin Cameron and Pravin K. Trivedi (1998) \emph{Regression analysis of count data}. New York: Cambridge University Press. Lawless, J. F. (1987) Negative Binomial and Mixed Poisson Regressions. \emph{The Canadian Journal of Statistics}. 15:209-225. } \author{Simon Jackman \email{jackman@stanford.edu}. John Fox noted an error in an earlier version.} \seealso{\code{\link[MASS:glm.nb]{glm.nb}}, \code{\link{logLik}}} \examples{ data(bioChemists) require(MASS) modelnb <- glm.nb(art ~ ., data=bioChemists, trace=TRUE) odTest(modelnb) } \keyword{regression}% at least one, from doc/KEYWORDS pscl/man/ntable.Rd0000644000175100001440000000206210621663212013537 0ustar hornikusers\name{ntable} \alias{ntable} \title{nicely formatted tables} \description{ Nicely formatted tables, with row or column marginals etc. } \usage{ ntable(x,y=NULL, percent=1,digits=2, row=FALSE,col=FALSE) } \arguments{ \item{x}{vector or \code{\link{factor}}} \item{y}{vector of \code{\link{factor}}} \item{percent}{integer, 1 for row percentages (default), 2 for column percentages} \item{digits}{integer, digits to print after decimal place (default is 2)} \item{row}{logical, if \code{TRUE}, print row marginals} \item{col}{logical, if \code{TRUE}, print column marginals} } \details{A wrapper function to \code{\link{prop.table}} that produces prettier looking results. } \value{ nothing returned; the function prints the table and exits silently. } \seealso{\code{\link{prop.table}}, \code{\link{table}}} \author{Jim Fearon \email{jfearon@stanford.edu}} \examples{ data(bioChemists) attach(bioChemists) ntable(fem) ntable(fem,mar,row=TRUE) ntable(fem,mar,per=2,col=TRUE) ntable(fem,mar,per=2,row=TRUE,col=TRUE) } \keyword{print} pscl/man/nj07.Rd0000644000175100001440000000271711360735053013063 0ustar hornikusers\name{nj07} \alias{nj07} \docType{data} \title{rollcall object, National Journal key votes of 2007} \description{A rollcall object containing 99 rollcalls from the 2nd session of the 110th U.S. Senate, designated by \emph{National Journal} as the "key votes" of 2007. These data were used to by \emph{National Journal} to rate (then Senator) Barack Obama was the "most liberal senator" in 2007.} \usage{data(nj07)} \format{ A \code{\link{rollcall}} object containing the recorded votes, plus information identifying the legislators and the rollcalls. } \details{Note the coding scheme used by Poole and Rosenthal; Yea (1,2,3), Nay (4,5,6) etc.} \source{ Keith Poole's web site: \url{http://voteview.com/senate110.htm} Originally scraped from the Senate's web site by Jeff Lewis: see \url{http://adric.sscnet.ucla.edu/rollcall/static/S110.ord} Josh Clinton compiled the list of \emph{National Journal} key votes. } \references{ Clinton, Joshua and Simon Jackman. 2009. To Simulate or NOMINATE? \emph{Legislative Studies Quarterly}. V34(4):593-621. Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Example 9.2. } \examples{ require(pscl) data(nj07) is(nj07,"rollcall") ## TRUE nj07 ## print method for class rollcall names(nj07) names(nj07$vote.data) table(nj07$vote.data$policyArea) summary(nj07) ## summary method summary(nj07,verbose=TRUE) } \keyword{datasets} pscl/man/iraqVote.Rd0000644000175100001440000000346011360735153014074 0ustar hornikusers\name{iraqVote} \alias{iraqVote} \docType{data} \title{ U.S. Senate vote on the use of force against Iraq, 2002. } \description{ On October 11, 2002, the United States Senate voted 77-23 to authorize the use of military force against Iraq. This data set lists the \dQuote{Ayes} and \dQuote{Nays} for each Senator and some covariates. } \usage{data(iraqVote)} \format{ A data frame with 100 observations on the following 6 variables. \describe{ \item{\code{y}}{a numeric vector, the recorded vote (1 if Aye, 0 if Nay)} \item{\code{state.abb}}{two letter abbreviation for each state} \item{\code{name}}{senator name, party and state, e.g., \code{AKAKA (D HI)}} \item{\code{rep}}{logical, \code{TRUE} for Republican senators} \item{\code{state.name}}{name of state} \item{\code{gorevote}}{numeric, the vote share recorded by Al Gore in the corresponding state in the 2000 Presidential election} } } \details{The only Republican to vote against the resolution was Lincoln Chafee (Rhode Island); Democrats split 29-22 in favor of the resolution. } \source{ Keith Poole, 107th Senate Roll Call Data. \url{ftp://voteview.com/sen107kh.ord} The Iraq vote is vote number 617. David Leip's Atlas of U.S. Presidential Elections. \url{http://uselectionatlas.org} } \references{ Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Chichester. Example 8.3. } \examples{ data(iraqVote) ## probit model glm1 <- glm(y ~ gorevote + rep, data=iraqVote, family=binomial(link=probit)) \dontrun{ require(MCMCpack) albertChib <- MCMCprobit(y ~ gorevote + rep, data=iraqVote, burnin=0, B0=1e-3, mcmc=1e4, verbose=0) } } \keyword{datasets} pscl/man/igamma.Rd0000644000175100001440000001263310555214104013530 0ustar hornikusers\name{igamma} \alias{igamma} \alias{densigamma} \alias{pigamma} \alias{qigamma} \alias{rigamma} \alias{igammaHDR} \title{inverse-Gamma distribution} \description{Density, distribution function, quantile function, and highest density region calculation for the inverse-Gamma distribution with parameters \code{alpha} and \code{beta}.} \usage{ densigamma(x,alpha,beta) pigamma(q,alpha,beta) qigamma(p,alpha,beta) rigamma(n,alpha,beta) igammaHDR(alpha,beta,content=.95,debug=FALSE) } \arguments{ \item{x,q}{vector of quantiles} \item{p}{vector of probabilities} \item{n}{number of random samples in \code{rigamma}} \item{alpha,beta}{rate and shape parameters of the inverse-Gamma density, both positive} \item{content}{scalar, 0 < \code{content} < 1, volume of highest density region} \item{debug}{logical; if TRUE, debugging information from the search for the HDR is printed} } \details{ The inverse-Gamma density arises frequently in Bayesian analysis of normal data, as the (marginal) conjugate prior for the unknown variance parameter. The inverse-Gamma density for \eqn{x>0} with parameters \eqn{\alpha>0} and \eqn{\beta>0} is \deqn{f(x) = \frac{\beta^\alpha}{\Gamma(\alpha)} x^{-\alpha-1} \exp(-\beta/x)}{% (beta^alpha)/Gamma(alpha) x^(-alpha-1) exp(-beta/x) } where \eqn{\Gamma(x)} is the \code{\link{gamma}} function \deqn{\Gamma(a) = \int_0^\infty t^{a-1} \exp(-t) dt}{% Gamma(a) = int_0^infty t^(a-1) exp(-t) dt } and so ensures \eqn{f(x)} integrates to one. The inverse-Gamma density has a mean at \eqn{\beta/(\alpha-1)}{beta/(alpha-1)} for \eqn{\alpha>1}{alpha>1} and has variance \eqn{\beta^2/((\alpha-1)^2 (\alpha-2))}{beta^2/((alpha-1)^2 (alpha-2))} for \eqn{\alpha>2}{alpha>2}. The inverse-Gamma density has a unique mode at \eqn{\beta/(\alpha+1)}{beta/(alpha+1)}. The evaluation of the density, cumulative distribution function and quantiles is done by calls to the \code{dgamma}, \code{pgamma} and \code{igamma} functions, with the arguments appropriately transformed. That is, note that if \eqn{x \sim IG(\alpha,\beta)}{x ~ IG(alpha,beta} then \eqn{1/x \sim G(\alpha,\beta)}{1/x ~ G(alpha,beta)}. \emph{Highest Density Regions}. In general, suppose \eqn{x} has a density \eqn{f(x)}, where \eqn{x \in \Theta}. Then a highest density region (HDR) for \eqn{x} with content \eqn{p \in (0,1]} is a region (or set of regions) \eqn{\mathcal{Q} \subseteq \Theta} such that: \deqn{\int_\mathcal{Q} f(x) dx = p}{% int_Q f(x) dx = p } and \deqn{f(x) > f(x^*) \, \forall\ x \in \mathcal{Q}, x^* \not\in \mathcal{Q}.}{% f(x) > f(x*) for all x in Q and all x* not in Q. } For a continuous, unimodal density defined with respect to a single parameter (like the inverse-Gamma case considered here with parameters \eqn{0 < \alpha < \infty, \,\, 0 < \beta < \infty}), a HDR region \eqn{Q} of content \eqn{p} (with \eqn{0 < p < 1}) is a unique, closed interval on the real half-line. This function uses numerical methods to solve for the boundaries of a HDR with \code{content} \eqn{p} for the inverse-Gamma density, via repeated calls the functions \code{densigamma}, \code{pigamma} and \code{qigamma}. In particular, the function \code{\link{uniroot}} is used to find points \eqn{v} and \eqn{w} such that \deqn{f(v) = f(w)} subject to the constraint \deqn{\int_v^w f(x; \alpha, \beta) d\theta = p.}{% int_v^w f(x; alpha, beta) d theta = p. } } \value{\code{densigamma} gives the density, \code{pigamma} the distribution function, \code{qigamma} the quantile function, \code{rigamma} generates random samples, and \code{igammaHDR} gives the lower and upper limits of the HDR, as defined above (\code{NA}s if the optimization is not successful). } \note{The \code{densigamma} is named so as not to conflict with the \code{\link{digamma}} function in the R \code{\link{base}} package (the derivative of the \code{gamma} function). } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{gamma}}, \code{\link{dgamma}}, \code{\link{pgamma}}, \code{\link{qgamma}}, \code{\link{uniroot}}} \examples{ alpha <- 4 beta <- 30 summary(rigamma(n=1000,alpha,beta)) xseq <- seq(.1,30,by=.1) fx <- densigamma(xseq,alpha,beta) plot(xseq,fx,type="n", xlab="x", ylab="f(x)", ylim=c(0,1.01*max(fx)), yaxs="i", axes=FALSE) axis(1) title(substitute(list(alpha==a,beta==b),list(a=alpha,b=beta))) q <- igammaHDR(alpha,beta,debug=TRUE) xlo <- which.min(abs(q[1]-xseq)) xup <- which.min(abs(q[2]-xseq)) plotZero <- par()$usr[3] polygon(x=xseq[c(xlo,xlo:xup,xup:xlo)], y=c(plotZero, fx[xlo:xup], rep(plotZero,length(xlo:xup))), border=FALSE, col=gray(.45)) lines(xseq,fx,lwd=1.25) \dontrun{ alpha <- beta <- .1 xseq <- exp(seq(-7,30,length=1001)) fx <- densigamma(xseq,alpha,beta) plot(xseq,fx, log="xy", type="l", ylim=c(min(fx),1.01*max(fx)), yaxs="i", xlab="x, log scale", ylab="f(x), log scale", axes=FALSE) axis(1) title(substitute(list(alpha==a,beta==b),list(a=alpha,b=beta))) q <- igammaHDR(alpha,beta,debug=TRUE) xlo <- which.min(abs(q[1]-xseq)) xup <- which.min(abs(q[2]-xseq)) plotZero <- min(fx) polygon(x=xseq[c(xlo,xlo:xup,xup:xlo)], y=c(plotZero, fx[xlo:xup], rep(plotZero,length(xlo:xup))), border=FALSE, col=gray(.45)) lines(xseq,fx,lwd=1.25) } } \keyword{distribution} pscl/man/idealToMCMC.Rd0000644000175100001440000000336011406255745014327 0ustar hornikusers\name{idealToMCMC} \alias{idealToMCMC} \title{convert an object of class ideal to a coda MCMC object} \description{ Converts the x element of an \code{ideal} object to an MCMC object, as used in the \pkg{coda} package. } \usage{ idealToMCMC(object, burnin=NULL) } \arguments{ \item{object}{an object of class \code{\link{ideal}}.} \item{burnin}{of the recorded MCMC samples, how many to discard as burnin? Default is \code{NULL}, in which case the value of \code{burnin} in the \code{\link{ideal}} object is used.} } \value{A \code{\link[coda:mcmc]{mcmc}} object as used by the \pkg{coda} package, starting at iteration \code{start}, drawn from the \code{x} component of the \code{\link{ideal}} object.} \note{When specifying a value of \code{burnin} different from that used in fitting the \code{\link{ideal}} object, note a distinction between the iteration numbers of the stored iterations, and the number of stored iterations. That is, the \code{n}-th iteration stored in an \code{\link{ideal}} object will not be iteration \code{n} if the user specified \code{thin>1} in the call to \code{\link{ideal}}. Here, iterations are tagged with their iteration number. Thus, if the user called \code{\link{ideal}} with \code{thin=10} and \code{burnin=100} then the stored iterations are numbered \code{100, 110, 120, ...}. Any future subsetting via a \code{burnin} refers to this iteration number.} \seealso{\code{\link{ideal}}, \code{\link[coda:mcmc]{mcmc}}} \examples{ data(s109) id1 <- ideal(s109, d=1, normalize=TRUE, maxiter=1100, ## short run for demo purposes burnin=100, thin=10) id1coda <- idealToMCMC(id1) summary(id1coda) } \keyword{classes} pscl/man/ideal.Rd0000644000175100001440000004410311765762302013364 0ustar hornikusers\name{ideal} \alias{ideal} \title{analysis of educational testing data and roll call data with IRT models, via Markov chain Monte Carlo methods} \description{ Analysis of \code{rollcall} data via the spatial voting model; analogous to fitting educational testing data via an item-response model. Model fitting via Markov chain Monte Carlo (MCMC). } \usage{ ideal(object, codes = object$codes, dropList = list(codes = "notInLegis", lop = 0), d = 1, maxiter = 10000, thin = 100, burnin = 5000, impute = FALSE, mda = FALSE, normalize = FALSE, meanzero = normalize, priors = NULL, startvals = "eigen", store.item = FALSE, file = NULL, verbose=FALSE) } \arguments{ \item{object}{an object of class \code{\link{rollcall}}} \item{codes}{a \code{\link{list}} describing the types of voting decisions in the roll call matrix (the \code{votes} component of the \code{\link{rollcall}} \code{object}); defaults to \code{object$codes}, the codes in the rollcall object.} \item{dropList}{a \code{\link{list}} (or \code{\link{alist}}) listing voting decisions, legislators and/or votes to be dropped from the analysis; see \code{\link{dropRollCall}} for details.} \item{d}{numeric, (small) positive integer (defaults to 1).} \item{maxiter}{numeric, positive integer, multiple of \code{thin}} \item{thin}{numeric, positive integer, thinning interval used for recording MCMC iterations.} \item{burnin}{number of MCMC iterations to run before recording. The iteration numbered \code{burnin} will be recorded. Must be a multiple of \code{thin}.} \item{impute}{\code{\link{logical}}, whether to treat missing entries of the rollcall matrix as missing at random, sampling from the predictive density of the missing entries at each MCMC iteration.} \item{mda}{\code{\link{logical}}, do parameter expansion/marginal data augmentation (see Details); default is \code{FALSE} (experimental)} \item{normalize}{\code{\link{logical}}, impose identification with the constraint that the ideal points have mean zero and standard deviation one, in each dimension. For one dimensional models this option is sufficient to locally identify the model parameters. See Details.} \item{meanzero}{to be deprecated/ignored; use \code{normalize} instead.} \item{priors}{a \code{list} of parameters (means and variances) specifying normal priors for the legislators' ideal points. The default is \code{NULL}, in which case the normal priors used have mean zero and precision 1 for the ideal points (ability parameters) and mean zero and precision .04 (variance 25) for the bill parameters (item discrimination and difficulty parameters). If not \code{NULL}, \code{priors} must be a \code{list} with as many as four named components \code{xp, xpv, bp, bpv}, where \describe{ \item{\code{xp}}{a \code{n} by \code{d} matrix of prior \emph{means} for the legislators' ideal points; or alternatively, a scalar, which will be replicated to fill a \code{n} by \code{d} matrix.} \item{\code{xpv}}{a \code{n} by \code{d} matrix of prior \emph{precisions} (inverse variances); or alternatively, a scalar, which will be replicated to fill a \code{n} by \code{d} matrix.} \item{\code{bp}}{a \code{m} by \code{d+1} matrix of prior means for the item parameters (with the item difficulty parameter coming last); or alternatively, a scalar, which will be replicated to fill a \code{m} by \code{d+1} matrix.} \item{\code{bpv}}{a \code{m} by \code{d+1} matrix of prior precisions for the item parameters; or alternatively, a scalar, which will be replicated to fill a \code{m} by \code{d+1} matrix.} } None of the components should contain \code{NA}. If any of the four possible components are not provided, then the corresponding component of \code{priors} is assigned using the default values described above.} \item{startvals}{either a string naming a method for generating start values, valid options are \code{"eigen"} (the default) or \code{"random"}; or a \code{list} containing start values for legislators' ideal points and item parameters. See Details.} \item{store.item}{\code{\link{logical}}, whether item discrimination parameters should be stored. Storing item discrimination parameters can consume a large amount of memory. These need to be stored for prediction; see \code{\link{predict.ideal}}.} \item{file}{string, file to write MCMC output. Default is \code{NULL}, in which case MCMC output is stored in memory. Note that post-estimation commands like \code{plot} will not work unless MCMC output is stored in memory.} \item{verbose}{logical, default is \code{FALSE}, which generates relatively little output to the R console during execution.} } \details{The function fits a \code{d}+1 parameter item-response model to the roll call data object, so in one dimension the model reduces to the two-parameter item-response model popular in educational testing. See References. \strong{Identification}: The model parameters are \strong{not identified} without the user supplying some restrictions on the model parameters; i.e., translations, rotations and re-scalings of the ideal points are observationally equivalent, via offsetting transformations of the item parameters. It is the user's responsibility to impose these identifying restrictions if desired; the following brief discussion provides some guidance. For one-dimensional models (i.e., \code{d=1}), a simple route to identification is the \code{normalize} option, which guarantees \emph{local} identification (identification up to a 180 rotation of the recovered dimension). Near-degenerate \dQuote{spike} priors (priors with arbitrarily large precisions) or the \code{constrain.legis} option on any two legislators' ideal points ensures \emph{global} identification in one dimension. Identification in higher dimensions can be obtained by supplying fixed values for \code{d+1} legislators' ideal points, provided the supplied points span a \code{d}-dimensional space (e.g., three supplied ideal points form a triangle in \code{d=2} dimensions), via the \code{\link{constrain.legis}} option. In this case the function defaults to vague normal priors, but at each iteration the sampled ideal points are transformed back into the space of identified parameters, applying the linear transformation that maps the \code{d+1} fixed ideal points from their sampled values to their fixed values. Alternatively, one can impose restrictions on the item parameters via \code{\link{constrain.items}}. See the examples in the documentation for the \code{\link{constrain.legis}} and \code{\link{constrain.items}}. Another route to identification is via \emph{post-processing}. That is, the user can run \code{ideal} without any identification constraints (which does not pose any formal/technical problem in a Bayesian analysis -- the posterior density is still well defined and can be explored via MCMC methods) -- but then use the function \code{\link{postProcess}} to map the MCMC output from the space of unidentified parameters into the subspace of identified parameters. See the example in the documentation for the \code{\link{postProcess}} function. When the \code{normalize} option is set to \code{TRUE}, an unidentified model is run, and the \code{ideal} object is post-processed with the \code{normalize} option, and then returned to the user (but again, note that the \code{normalize} option is only implemented for unidimensional models). \strong{Start values}. Start values can be supplied by the user, or generated by the function itself. The default method, corresponding to \code{startvals="eigen"}, first forms a \code{n}-by-\code{n} correlation matrix from the double-centered roll call matrix (subtracting row means, and column means, adding in the grand mean), and then extracts the first \code{d} principal components (eigenvectors), scaling the eigenvectors by the square root of their corresponding eigenvector. If the user is imposing constraints on ideal points (via \code{\link{constrain.legis}}), these constraints are applied to the corresponding elements of the start values generated from the eigen-decomposition. Then, to generate start values for the rollcall/item parameters, a series of \code{\link[=family]{binomial}} \code{\link[=glm]{glms}} are estimated (with a probit \code{\link[=make.link]{link}}), one for each rollcall/item, \eqn{j = 1, \ldots, m}. The votes on the \eqn{j}-th rollcall/item are binary responses (presumed to be conditionally independent given each legislator's latent preference), and the (constrained or unconstrained) start values for legislators are used as predictors. The estimated coefficients from these probit models are stored to serve as start values for the item discrimination and difficulty parameters (with the intercepts from the probit GLMs multiplied by -1 so as to make those coefficients difficulty parameters). The default \code{eigen} method generates extremely good start values for low-dimensional models fit to recent U.S. congresses (where high rates of party line voting result in excellent fits from low dimensional models). The \code{eigen} method may be computationally expensive or even impossible to implement for \code{rollcall} objects with large numbers of legislators. The \code{random} method generates start values via iid sampling from a N(0,1) density, via \code{\link{rnorm}}, imposes any constraints that may have been supplied via \code{\link{constrain.legis}}, and then uses the probit method described above to get start values for the rollcall/item parameters. If \code{startvals} is a \code{list}, it must contain the named components \code{x} and/or \code{b}, or named components that (uniquely) begin with the letters \code{x} and/or \code{b}. The component \code{x} must be a vector or a matrix of dimensions equal to the number of individuals (legislators) by \code{d}. If supplied, \code{startvals$b} must be a matrix with dimension number of items (votes) by \code{d}+1. The \code{x} and \code{b} components cannot contain \code{NA}. If \code{x} is not supplied when \code{startvals} is a list, then start values are generated using the default \code{eiegn} method described above, and start values for the rollcall/item parameters are regenerated using the probit method, ignoring any user-supplied values in \code{startvals$b}. That is, user-supplied values in \code{startvals$b} are only used when accompanied by a valid set of start values for the ideal points in \code{startvals$x}. \strong{Implementation via Data Augmentation}. The MCMC algorithm for this problem consists of a Gibbs sampler for the ideal points (latent traits) and item parameters, conditional on latent data \eqn{y^*}, generated via a data augmentation (DA) step. That is, following Albert (1992) and Albert and Chib (1993), if \eqn{y_{ij} = 1} we sample from the truncated normal density \deqn{y_{ij}^* \sim N(x_i' \beta_j - \alpha_j, 1)\mathcal{I}(y_{ij}^* \geq 0)} and for \eqn{y_{ij}=0} we sample \deqn{y_{ij}^* \sim N(x_i' \beta_j - \alpha_j, 1)\mathcal{I}(y_{ij}^* < 0)} where \eqn{\mathcal{I}} is an indicator function evaluating to one if its argument is true and zero otherwise. Given the latent \eqn{y^*}, the conditional distributions for \eqn{x} and \eqn{(\beta,\alpha)} are extremely simple to sample from; see the references for details. This data-augmented Gibbs sampling strategy is easily implemented, but can sometimes require many thousands of samples in order to generate tolerable explorations of the posterior densities of the latent traits, particularly for legislators with short and/or extreme voting histories (the equivalent in the educational testing setting is a test-taker who gets many items right or wrong). % The MCMC algorithm can generate better performance % via a parameter expansion strategy usually referred to as \emph{marginal % data augmentation} (e.g., van Dyk and Meng 2001). The idea is to % introduce a additional working parameter into the MCMC sampler that % has the effect of improving the performance of the sampler in the % sub-space of parameters of direct interest. In this case we % introduce a variance parameter \eqn{\sigma^2} for the latent data; % in the DA algorithm of Albert and Chib (1993) --- and in any conventional % probit analysis --- this parameter is set % to 1.0 for identification. In the MDA approach we carry this % (unidentified) parameter into the DA stage of the algorithm with an % improper prior, \eqn{p(\sigma^2) \propto \sigma^{-2}}, % generating \eqn{y^*} that exhibit bigger moves from iteration to % iteration, such that in turn the MCMC algorithm displays better % mixing with respect to the identified parameters of direct interest, % \eqn{x} and \eqn{(\beta,\alpha)} than the mixing obtained from % the Gibbs-with-DA MCMC algorithm. The MDA algorithm is the default % in \code{ideal}, but Gibbs-with-DA can be implemented by setting % \code{mda=FALSE} in the call to \code{ideal}. } \value{a \code{\link{list}} of class \code{ideal} with named components \item{n}{\code{\link{numeric}}, integer, number of legislators in the analysis, after any subseting via processing the \code{dropList}.} \item{m}{\code{\link{numeric}}, integer, number of rollcalls in roll call matrix, after any subseting via processing the \code{dropList}.} \item{d}{\code{\link{numeric}}, integer, number of dimensions fitted.} \item{x}{a three-dimensional \code{\link{array}} containing the MCMC output with respect to the the ideal point of each legislator in each dimension. The three-dimensional array is in iteration-legislator-dimension order. The iterations run from \code{burnin} to \code{maxiter}, at an interval of \code{thin}.} \item{beta}{a three-dimensional \code{\link{array}} containing the MCMC output for the item parameters. The three-dimensional array is in iteration-rollcall-parameter order. The iterations run from \code{burnin} to \code{maxiter}, at an interval of \code{thin}. Each rollcall has \code{d+1} parameters, with the item-discrimination parameters stored first, in the first \code{d} components of the 3rd dimension of the \code{beta} array; the item-difficulty parameter follows in the final \code{d+1} component of the 3rd dimension of the \code{beta} array.} \item{xbar}{a \code{n} by \code{d} \code{\link{matrix}} containing the means of the MCMC samples for the ideal point of each legislator in each dimension, using iterations \code{burnin} to \code{maxiter}, at an interval of \code{thin}.} \item{betabar}{a \code{m} by \code{d+1} \code{\link{matrix}} containing the means of the MCMC samples for the item-specific parameters, using iterations \code{burnin} to \code{maxiter}, at an interval of \code{thin}.} \item{args}{calling arguments, evaluated in the frame calling \code{ideal}.} \item{call}{an object of class \code{\link{call}}, containing the arguments passed to \code{ideal} as unevaluated expressions or values (for functions arguments that evaluate to scalar integer or logical such as \code{maxiter}, \code{burnin}, etc).} } \references{ Albert, James. 1992. Bayesian Estimation of normal ogive item response curves using Gibbs sampling. \emph{Journal of Educational Statistics}. 17:251-269. Albert, James H. and Siddhartha Chib. 1993. Bayesian Analysis of Binary and Polychotomous Response Data. \emph{Journal of the American Statistical Association}. 88:669-679. Clinton, Joshua, Simon Jackman and Douglas Rivers. 2004. The Statistical Analysis of Roll Call Data. \emph{American Political Science Review}. 98:335-370. Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Patz, Richard J. and Brian W. Junker. 1999. A Straightforward Approach to Markov Chain Monte Carlo Methods for Item Response Models. \emph{Journal of Education and Behavioral Statistics}. 24:146-178. Rivers, Douglas. 2003. \dQuote{Identification of Multidimensional Item-Response Models.} Typescript. Department of Political Science, Stanford University. van Dyk, David A and Xiao-Li Meng. 2001. The art of data augmentation (with discussion). \emph{Journal of Computational and Graphical Statistics}. 10(1):1-111. } \author{Simon Jackman \email{jackman@stanford.edu}, with help from Christina Maimone and Alex Tahk.} \seealso{ \code{\link{rollcall}}, \code{\link{summary.ideal}}, \code{\link{plot.ideal}}, \code{\link{predict.ideal}}. \code{\link{tracex}} for graphical display of MCMC iterative history. \code{\link{idealToMCMC}} converts the MCMC iterates in an \code{ideal} object to a form that can be used by the \code{coda} library. \code{\link{constrain.items}} and \code{\link{constrain.legis}} for implementing identifying restrictions. \code{\link{postProcess}} for imposing identifying restrictions \emph{ex post}. \code{\link[MCMCpack:MCMCirt1d]{MCMCirt1d}} and \code{\link[MCMCpack:MCMCirtKd]{MCMCirtKd}} in the \pkg{MCMCpack} package provide similar functionality to \code{ideal}. } \examples{ data(s109) ## ridiculously short run for examples n <- dim(s109$legis.data)[1] x0 <- rep(0,n) x0[s109$legis.data$party=="D"] <- -1 x0[s109$legis.data$party=="R"] <- 1 id1 <- ideal(s109, d=1, startvals=list(x=x0), normalize=TRUE, store.item=TRUE, maxiter=100, burnin=0, thin=10, verbose=TRUE) summary(id1) \dontrun{ ## more realistic long run idLong <- ideal(s109, d=1, priors=list(xpv=1e-12,bpv=1e-12), normalize=TRUE, store.item=TRUE, maxiter=260E3, burnin=10E3, thin=100) } } \keyword{models} pscl/man/hurdletest.Rd0000644000175100001440000000326611435323135014465 0ustar hornikusers\name{hurdletest} \alias{hurdletest} \title{Testing for the Presence of a Zero Hurdle} \description{ Wald test of the null hypothesis that no zero hurdle is required in hurdle regression models for count data. } \usage{ hurdletest(object, \dots) } \arguments{ \item{object}{A fitted model object of class \code{"hurdle"} as returned by \code{\link{hurdle}}, see details for more information.} \item{\dots}{arguments passed to \code{\link[car]{linearHypothesis}}.} } \details{ If the same count distribution and the same set of regressors is used in the hurdle model for both, the count component and the zero hurdle component, then a test of pairwise equality between all coefficients from the two components assesses the null hypothesis that no hurdle is needed in the model. The function \code{hurdletest} is a simple convenience interface to the function \code{\link[car]{linearHypothesis}} from the \pkg{car} packages that can be employed to carry out a Wald test for this hypothesis. } \value{ An object of class \code{"anova"} as returned by \code{\link[car]{linearHypothesis}}. } \references{ Cameron, A. Colin and Pravin K. Trivedi. 1998. \emph{Regression Analysis of Count Data}. New York: Cambridge University Press. Cameron, A. Colin and Pravin K. Trivedi 2005. \emph{Microeconometrics: Methods and Applications}. Cambridge: Cambridge University Press. } \author{Achim Zeileis } \seealso{\code{\link{hurdle}}, \code{\link[car]{linearHypothesis}}} \examples{ data("bioChemists", package = "pscl") fm <- hurdle(art ~ ., data = bioChemists, dist = "negbin", zero = "negbin") if(require("car")) hurdletest(fm) } \keyword{regression} pscl/man/hurdle.Rd0000644000175100001440000002217711357753220013574 0ustar hornikusers\name{hurdle} \alias{hurdle} \alias{print.hurdle} \title{Hurdle Models for Count Data Regression} \description{ Fit hurdle regression models for count data via maximum likelihood. } \usage{ hurdle(formula, data, subset, na.action, weights, offset, dist = c("poisson", "negbin", "geometric"), zero.dist = c("binomial", "poisson", "negbin", "geometric"), link = c("logit", "probit", "cloglog", "cauchit", "log"), control = hurdle.control(\dots), model = TRUE, y = TRUE, x = FALSE, \dots) } \arguments{ \item{formula}{symbolic description of the model, see details.} \item{data, subset, na.action}{arguments controlling formula processing via \code{\link[stats]{model.frame}}.} \item{weights}{optional numeric vector of weights.} \item{offset}{optional numeric vector with an a priori known component to be included in the linear predictor of the count model. See below for more information on offsets.} \item{dist}{character specification of count model family.} \item{zero.dist}{character specification of the zero hurdle model family.} \item{link}{character specification of link function in the binomial zero hurdle (only used if \code{zero.dist = "binomial"}.} \item{control}{a list of control arguments specified via \code{\link{hurdle.control}}.} \item{model, y, x}{logicals. If \code{TRUE} the corresponding components of the fit (model frame, response, model matrix) are returned.} \item{\dots}{arguments passed to \code{\link{hurdle.control}} in the default setup.} } \details{ Hurdle count models are two-component models with a truncated count component for positive counts and a hurdle component that models the zero counts. Thus, unlike zero-inflation models, there are \emph{not} two sources of zeros: the count model is only employed if the hurdle for modeling the occurence of zeros is exceeded. The count model is typically a truncated Poisson or negative binomial regression (with log link). The geometric distribution is a special case of the negative binomial with size parameter equal to 1. For modeling the hurdle (occurence of positive counts) either a binomial model can be employed or a censored count distribution. Binomial logit and censored geometric models as the hurdle part both lead to the same likelihood function and thus to the same coefficient estimates. A censored negative binomial model for the zero hurdle is only identified if there is at least one non-constant regressor with (true) coefficient different from zero (and if all coefficients are close to zero the model can be poorly conditioned). The \code{formula} can be used to specify both components of the model: If a \code{formula} of type \code{y ~ x1 + x2} is supplied, then the same regressors are employed in both components. This is equivalent to \code{y ~ x1 + x2 | x1 + x2}. Of course, a different set of regressors could be specified for the zero hurdle component, e.g., \code{y ~ x1 + x2 | z1 + z2 + z3} giving the count data model \code{y ~ x1 + x2} conditional on (\code{|}) the zero hurdle model \code{y ~ z1 + z2 + z3}. Offsets can be specified in both parts of the model pertaining to count and zero hurdle model: \code{y ~ x1 + offset(x2) | z1 + z2 + offset(z3)}, where \code{x2} is used as an offset (i.e., with coefficient fixed to 1) in the count part and \code{z3} analogously in the zero hurdle part. By the rule stated above \code{y ~ x1 + offset(x2)} is expanded to \code{y ~ x1 + offset(x2) | x1 + offset(x2)}. Instead of using the \code{offset()} wrapper within the \code{formula}, the \code{offset} argument can also be employed which sets an offset only for the count model. Thus, \code{formula = y ~ x1} and \code{offset = x2} is equivalent to \code{formula = y ~ x1 + offset(x2) | x1}. All parameters are estimated by maximum likelihood using \code{\link[stats]{optim}}, with control options set in \code{\link{hurdle.control}}. Starting values can be supplied, otherwise they are estimated by \code{\link[stats]{glm.fit}} (the default). By default, the two components of the model are estimated separately using two \code{optim} calls. Standard errors are derived numerically using the Hessian matrix returned by \code{\link[stats]{optim}}. See \code{\link{hurdle.control}} for details. The returned fitted model object is of class \code{"hurdle"} and is similar to fitted \code{"glm"} objects. For elements such as \code{"coefficients"} or \code{"terms"} a list is returned with elements for the zero and count components, respectively. For details see below. A set of standard extractor functions for fitted model objects is available for objects of class \code{"hurdle"}, including methods to the generic functions \code{\link[base]{print}}, \code{\link[base]{summary}}, \code{\link[stats]{coef}}, \code{\link[stats]{vcov}}, \code{\link[stats]{logLik}}, \code{\link[stats]{residuals}}, \code{\link[stats]{predict}}, \code{\link[stats]{fitted}}, \code{\link[stats]{terms}}, \code{\link[stats]{model.matrix}}. See \code{\link{predict.hurdle}} for more details on all methods. } \value{ An object of class \code{"hurdle"}, i.e., a list with components including \item{coefficients}{a list with elements \code{"count"} and \code{"zero"} containing the coefficients from the respective models,} \item{residuals}{a vector of raw residuals (observed - fitted),} \item{fitted.values}{a vector of fitted means,} \item{optim}{a list (of lists) with the output(s) from the \code{optim} call(s) for minimizing the negative log-likelihood(s),} \item{control}{the control arguments passed to the \code{optim} call,} \item{start}{the starting values for the parameters passed to the \code{optim} call(s),} \item{weights}{the case weights used,} \item{offset}{a list with elements \code{"count"} and \code{"zero"} containing the offset vectors (if any) from the respective models,} \item{n}{number of observations (with weights > 0),} \item{df.null}{residual degrees of freedom for the null model (= \code{n - 2}),} \item{df.residual}{residual degrees of freedom for fitted model,} \item{terms}{a list with elements \code{"count"}, \code{"zero"} and \code{"full"} containing the terms objects for the respective models,} \item{theta}{estimate of the additional \eqn{\theta}{theta} parameter of the negative binomial model(s) (if negative binomial component is used),} \item{SE.logtheta}{standard error(s) for \eqn{\log(\theta)}{log(theta)},} \item{loglik}{log-likelihood of the fitted model,} \item{vcov}{covariance matrix of all coefficients in the model (derived from the Hessian of the \code{optim} output(s)),} \item{dist}{a list with elements \code{"count"} and \code{"zero"} with character strings describing the respective distributions used,} \item{link}{character string describing the link if a binomial zero hurdle model is used,} \item{linkinv}{the inverse link function corresponding to \code{link},} \item{converged}{logical indicating successful convergence of \code{optim},} \item{call}{the original function call,} \item{formula}{the original formula,} \item{levels}{levels of the categorical regressors,} \item{contrasts}{a list with elements \code{"count"} and \code{"zero"} containing the contrasts corresponding to \code{levels} from the respective models,} \item{model}{the full model frame (if \code{model = TRUE}),} \item{y}{the response count vector (if \code{y = TRUE}),} \item{x}{a list with elements \code{"count"} and \code{"zero"} containing the model matrices from the respective models (if \code{x = TRUE}).} } \references{ Cameron, A. Colin and Pravin K. Trivedi. 1998. \emph{Regression Analysis of Count Data}. New York: Cambridge University Press. Cameron, A. Colin and Pravin K. Trivedi 2005. \emph{Microeconometrics: Methods and Applications}. Cambridge: Cambridge University Press. Mullahy, J. 1986. Specification and Testing of Some Modified Count Data Models. \emph{Journal of Econometrics}. \bold{33}:341--365. Zeileis, Achim, Christian Kleiber and Simon Jackman 2008. \dQuote{Regression Models for Count Data in R.} \emph{Journal of Statistical Software}, \bold{27}(8). URL \url{http://www.jstatsoft.org/v27/i08/}. } \author{Achim Zeileis } \seealso{\code{\link{hurdle.control}}, \code{\link[stats]{glm}}, \code{\link[stats]{glm.fit}}, \code{\link[MASS]{glm.nb}}, \code{\link{zeroinfl}} } \examples{ ## data data("bioChemists", package = "pscl") ## logit-poisson ## "art ~ ." is the same as "art ~ . | .", i.e. ## "art ~ fem + mar + kid5 + phd + ment | fem + mar + kid5 + phd + ment" fm_hp1 <- hurdle(art ~ ., data = bioChemists) summary(fm_hp1) ## geometric-poisson fm_hp2 <- hurdle(art ~ ., data = bioChemists, zero = "geometric") summary(fm_hp2) ## logit and geometric model are equivalent coef(fm_hp1, model = "zero") - coef(fm_hp2, model = "zero") ## logit-negbin fm_hnb1 <- hurdle(art ~ ., data = bioChemists, dist = "negbin") summary(fm_hnb1) ## negbin-negbin ## (poorly conditioned zero hurdle, note the standard errors) fm_hnb2 <- hurdle(art ~ ., data = bioChemists, dist = "negbin", zero = "negbin") summary(fm_hnb2) } \keyword{regression} pscl/man/hurdle.control.Rd0000644000175100001440000000567611057340007015250 0ustar hornikusers\name{hurdle.control} \alias{hurdle.control} \title{Control Parameters for Hurdle Count Data Regression} \description{ Various parameters that control fitting of hurdle regression models using \code{\link{hurdle}}. } \usage{ hurdle.control(method = "BFGS", maxit = 10000, trace = FALSE, separate = TRUE, start = NULL, \dots) } \arguments{ \item{method}{characters string specifying the \code{method} argument passed to \code{\link[stats]{optim}}.} \item{maxit}{integer specifying the \code{maxit} argument (maximal number of iterations) passed to \code{\link[stats]{optim}}.} \item{trace}{logical or integer controlling whether tracing information on the progress of the optimization should be produced (passed to \code{\link[stats]{optim}}).} \item{separate}{logical. Should the estimation of the parameters in the truncated count component and hurdle zero component be carried out separately? See details.} \item{start}{an optional list with elements \code{"count"} and \code{"zero"} (and potentially \code{"theta"}) containing the coefficients for the corresponding component.} \item{\dots}{arguments passed to \code{\link[stats]{optim}}.} } \details{ All parameters in \code{\link{hurdle}} are estimated by maximum likelihood using \code{\link[stats]{optim}} with control options set in \code{\link{hurdle.control}}. Most arguments are passed on directly to \code{optim}, only \code{trace} is also used within \code{hurdle} and \code{separate}/\code{start} control how \code{optim} is called. Starting values can be supplied via \code{start} or estimated by \code{\link[stats]{glm.fit}} (default). If \code{separate = TRUE} (default) the likelihoods of the truncated count component and the hurdle zero component will be maximized separately, otherwise the joint likelihood is set up and maximized. Standard errors are derived numerically using the Hessian matrix returned by \code{\link[stats]{optim}}. To supply starting values, \code{start} should be a list with elements \code{"count"} and \code{"zero"} and potentially \code{"theta"} (a named vector, for models with negative binomial components only) containing the starting values for the coefficients of the corresponding component of the model. } \value{ A list with the arguments specified. } \author{Achim Zeileis } \seealso{\code{\link{hurdle}}} \examples{ data("bioChemists", package = "pscl") ## default start values fm1 <- hurdle(art ~ fem + ment, data = bioChemists, dist = "negbin", zero = "negbin") ## user-supplied start values and other options fm2 <- hurdle(art ~ fem + ment, data = bioChemists, dist = "negbin", zero = "negbin", trace=TRUE, separate=FALSE, start = list(count = c(0.3, -0.2, 0), zero = c(4, -2, 0.8), theta = c(count = 2, zero = 0.1))) } \keyword{regression} pscl/man/hitmiss.Rd0000644000175100001440000000537611406255745013777 0ustar hornikusers\name{hitmiss} \alias{hitmiss} \alias{hitmiss.glm} %- Also NEED an '\alias' for EACH other topic documented here. \title{Table of Actual Outcomes against Predicted Outcomes for discrete data models} \description{ Cross-tabulations of actual outcomes against predicted outcomes for discrete data models, with summary statistics such as percent correctly predicted (PCP) under fitted and null models. For models with binary responses (generalized linear models with \code{family=binomial}), the user can specific a classification threshold for the predicted probabilities. } \usage{ hitmiss(obj, digits = max(3, getOption("digits") - 3), ...) \method{hitmiss}{glm}(obj,digits=max(3,getOption("digits")-3), ..., k=.5) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{obj}{a fitted model object, such as a \code{glm} with \code{family=binomial}, a \code{polr} model for ordinal responses, or a \code{multinom} model for unordered/multinomial outcomes} \item{digits}{number of digits to display in on-screen output} \item{\dots}{additional arguments passed to or from other functions} \item{k}{classification threshold for binary models} } \details{For models with binary responses, the user can specify a parameter 0 < \code{k} < 1; if the predicted probabilities exceed this threshold then the model is deemed to have predicted y=1, and otherwise to have predicted y=0. Measures like percent correctly predicted are crude summaries of model fit; the cross-tabulation of actual against predicted is somewhat more informative, providing a little more insight as to where the model fits less well. } \value{ For \code{hitmiss.glm}, a vector of length 3: \item{pcp}{Percent Correctly Predicted} \item{pcp0}{Percent Correctly Predicted among y=0} \item{pcp1}{Percent Correctly Predicted among y=1} } \author{Simon Jackman \email{jackman@stanford.edu}} \note{To-do: The \code{glm} method should also handle binomial data presented as two-vector success/failures counts; and count data with \code{family=poisson}, the \code{glm.nb} models and \code{zeroinfl} and \code{hurdle} etc. We should also make the output a class with prettier print methods, i.e., save the cross-tabulation in the returned object etc. } \seealso{\code{\link{pR2}} for pseudo r-squared; \code{\link{predict}}; \code{\link{extractAIC}}. See also the \pkg{ROCR} package and the \code{lroc} function in the \pkg{epicalc} package for ROC computations for assessing binary classifications.} \examples{ data(admit) require(MASS) ## ordered probit model op1 <- polr(score ~ gre.quant + gre.verbal + ap + pt + female, Hess=TRUE, data=admit, method="probit") hitmiss(op1) } \keyword{models} pscl/man/extractRollCallObject.Rd0000644000175100001440000000254211540242604016522 0ustar hornikusers\name{extractRollCallObject} \alias{extractRollCallObject} \title{return the roll call object used in fitting an ideal model} \description{ Given a fitted model of class \code{\link{ideal}}, return the \code{\link{rollcall}} object that was used in the model fitting (i.e., apply all subseting and recoding implied by the \code{dropList} passed to \code{\link{ideal}}). } \usage{ extractRollCallObject(object) } \arguments{ \item{object}{an object of class \code{\link{ideal}}} } \details{ This function is used by many post-estimation commands that operate on objects of class \code{\link{ideal}}. The function inspects the \code{call} attribute of the \code{\link{ideal}} object, extracting the name of the \code{\link{rollcall}} object and the \code{dropList}, then hands them over to \code{\link{dropRollCall}}. } \value{ An object of class \code{\link{rollcall}} } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{rollcall}}; see \code{\link{dropRollCall}} for details on the form of a \code{dropList}.} \examples{ data(s109) id1 <- ideal(s109, d=1, normalize=TRUE, maxiter=500, ## short run for demo purposes burnin=100, thin=10) tmp <- extractRollCallObject(id1) summary(tmp) v <- convertCodes(tmp) ## roll call matrix per se } \keyword{models} pscl/man/EfronMorris.Rd0000644000175100001440000000220411360735661014546 0ustar hornikusers\name{EfronMorris} \alias{EfronMorris} \docType{data} \title{Batting Averages for 18 major league baseball players, 1970} \description{Batting averages for 18 major league baseball players, first 45 at bats of the 1970 season.} \usage{data(EfronMorris)} \format{ \describe{ \item{\code{name}}{character, name of player} \item{\code{team}}{character, team of player, abbreviated} \item{\code{league}}{character, National League or American League} \item{\code{r}}{numeric, hits in 1st 45 at bats} \item{\code{y}}{numeric, \code{r}/45, batting average over 1st 45 at bats} \item{\code{n}}{numeric, number of at bats, remainder of 1970 season} \item{\code{p}}{numeric, batting average over remainder of 1970 season} } } \source{Efron, Bradley and Carl Morris. 1975. Data Analysis Using Stein's Estimator and Its Generalizations. \emph{Journal of the American Statistical Association}. 70:311-319. } \examples{ data(EfronMorris) attach(EfronMorris) plot(p~y, xlim=range(p,y), ylim=range(p,y), xlab="Batting Average, 1st 45 at bats", ylab="Batting Average, Remainder of Season") abline(0,1) } \keyword{datasets} pscl/man/dropUnanimous.Rd0000644000175100001440000000300511037422543015135 0ustar hornikusers\name{dropUnanimous} \alias{dropUnanimous} %\alias{dropUnanimous.rollcall} %\alias{dropUnanimous.matrix} \title{drop unanimous votes from rollcall objects and matrices} \description{ Drop unanimous votes from rollcall objects and rollcall matrices. } \usage{dropUnanimous(obj, lop = 0)} \arguments{ \item{obj}{object, either of class \code{\link{rollcall}} or \code{\link{matrix}}} \item{lop}{numeric, non-negative integer, less than number of legislators represented in \code{obj}. Roll calls with \code{lop} or fewer legislators voting in the minority are dropped. Default is 0, meaning that unanimous votes are dropped.} } \details{ Unanimous votes are the equivalent of test items that all subjects score \dQuote{correct} (or all subjects scores \dQuote{incorrect}); since there is no variation among the legislators/subjects, these votes/items provide no information as to latent traits (ideology, preferences, ability). A reasonably large number of rollcalls in any contemporary U.S. Congress are unanimous. Specific methods are provided for objects of class \code{\link{rollcall}} or \code{\link{matrix}}. } \value{ A \code{\link{rollcall}} object or a \code{\link{matrix}} depending on the class of \code{object}. } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{dropRollCall}}, \code{\link{rollcall}}, \code{\link{summary.rollcall}}, \code{\link{ideal}}} \examples{ data(s109) s109.working <- dropUnanimous(s109) summary(s109.working) } \keyword{manip} pscl/man/dropRollCall.Rd0000644000175100001440000001400111763434561014672 0ustar hornikusers\name{dropRollCall} \alias{dropRollCall} \title{drop user-specified elements from a rollcall object} \description{ Drop user-specified elements of rollcall object, returning a roll call object. } \usage{ dropRollCall(object, dropList,debug=FALSE) } \arguments{ \item{object}{an object of class \code{\link{rollcall}}} \item{dropList}{a \code{\link{list}} (or \code{\link{alist}}) with some (or all) of the following components: \describe{ \item{codes}{character or numeric, possibly a vector. If character, it should match the names of \code{object$codes}, indicating the set of entries in \code{object$votes} to be set to \code{NA}. If numeric, then \code{codes} indicates the entries in \code{object$votes} that will be set to \code{NA}.} \item{lop}{numeric, non-negative integer, less than number of legislators represented in \code{object}. Roll calls with \code{lop} or fewer legislators voting in the minority are dropped.} \item{legisMin}{numeric, non-negative integer, less than number of roll calls represented in \code{object}. Legislators with \code{legisMin} or fewer votes are dropped.} \item{dropLegis}{an \code{\link{expression}} that evaluates to mode \code{logical}, vector of length equal to the number of legislators represented in \code{object}. The expression is evaluated in the \code{legis.data} component of the rollcall \code{object}. Legislators for whom the expression evaluates to \code{TRUE} are dropped.} \item{dropVotes}{an \code{\link{expression}} that evaluates to mode \code{logical}, vector of length equal to the number of rollcalls represented in \code{object}. The expression is evaluated in the \code{vote.data} component of the rollcall \code{object}. Rollcalls for which the expression evaluates to \code{TRUE} are dropped.} } } \item{debug}{\code{logical}, set to \code{TRUE} to see messages printed to the console as inspection and subsetting of the \code{rollcall} object takes place} } \details{It is often desirable to restrict the analysis of roll call data in various ways. For one thing, unanimous votes provide no information discriminating among legislators: hence, summary and analysis should almost always use \code{dropList=list(lop=0)}. See the examples for other possibilities, limited only by the information supplied in \code{legis.data} and \code{votes.data}. } \value{ An object of class \code{\link{rollcall}} with components modified/added by the subsetting indicated in the \code{dropList}. } \author{Simon Jackman \email{jackman@stanford.edu}} \note{ With the exception of \code{codes}, each component of \code{dropList} generates a vector of mode \code{\link{logical}}, either with respect to legislators or votes. These logical vectors are then combined element-wise, such that if any one of the subseting restrictions is \code{TRUE} for a particular legislator or vote, then that legislator or vote is dropped. Some summaries are reported to the console along the way if \code{debug=TRUE}. \code{dropRollCall} adds a component named \code{dropInfo} to the \code{rollcall} object it returns. This component is itself a list containing named components \describe{ \item{legislators}{a vector of mode \code{logical}, with each element \code{TRUE} if the legislator is retained in the returned \code{rollcall} object.} \item{votes}{a vector of mode \code{logical}, with each element \code{TRUE} if the corresponding is retained in the returned \code{rollcall} object.} \item{dropList}{the \code{dropList} supplied as input to \code{dropRollCall}.} } If the input \code{rollcall} object is itself the product of a call to \code{dropRollCall}, the \code{dropInfo} component on output is a list with named components \describe{ \item{previous}{the \code{dropInfo} component of the input \code{rollcall} object.} \item{new}{the \code{dropInfo} list created by the current call to \code{dropRollCall}.} } Functions like \code{summary.rollcall} try to handle this information sensibly. When \code{dropList} uses the \code{dropLegis} or \code{dropVotes} components then \code{dropList} should be constructed via the \code{\link{alist}} command; this ensures that the \code{dropLegis} and \code{dropVotes} components of \code{dropList} are objects of mode \code{\link{expression}}, and \code{\link{eval}}uated to mode \code{\link{logical}} in the \code{legis.data} and \code{vote.data} \code{\link{environment}s} by the function, if possible (rather than being evaluated immediately in the environment calling \code{dropRollCall} or constructing \code{dropList}). See the examples. This is not entirely satisfactory, and behavior more like the \code{subset} argument in function \code{\link{lm}} would be preferable. } \seealso{\code{\link{dropUnanimous}}, \code{\link{summary.rollcall}}, \code{\link{ideal}}, \code{\link{alist}}.} \examples{ data(s109) s109.working <- dropRollCall(s109, dropList=list(lop=0)) summary(s109.working) s109.working <- dropRollCall(s109, dropList=list(lop=0, code="notInLegis")) summary(s109.working) s109.working <- dropRollCall(s109, dropList=list(lop=3, code="notInLegis")) summary(s109.working) ## note use of alist, since dropLegis is an expression dropList <- alist(lop=3, dropLegis=party!="D", code="notInLegis") s109.working <- dropRollCall(s109,dropList=dropList,debug=TRUE) summary(s109.working) s109.working <- dropRollCall(s109.working,dropList=list(legisMin=25)) summary(s109.working) \dontrun{ ## read 102nd House from Poole web site h102 <- readKH("ftp://voteview.ucsd.edu/dtaord/hou102kh.ord") ## drop President from roll call matrix h102 <- dropRollCall(h102, dropList=alist(dropLegis=state=="USA")) summary(h102) } } \keyword{manip} pscl/man/convertCodes.Rd0000644000175100001440000000224010555214104014724 0ustar hornikusers\name{convertCodes} \alias{convertCodes} \title{convert entries in a rollcall matrix to binary form} \description{ Convert roll call matrix to binary form using encoding information. } \usage{ convertCodes(object, codes = object$codes) } \arguments{ \item{object}{\code{\link{rollcall}} object} \item{codes}{list, mapping entries in the \code{votes} component of \code{rollcall} object to 0 (\sQuote{Nay}), 1 (\sQuote{Yea}) and \code{NA} (missing, abstentions, etc). Defaults to the \code{codes} component of the \code{rollcall} object.} } \details{ See \code{\link{rollcall}} for details on the form of the \code{codes} list. } \value{a \code{\link{matrix}} with dimensions equal to the dimensions of the \code{votes} component of the \code{rollcall} object.} \author{Simon Jackman \email{jackman@stanford.edu}} \note{Any entries in the \code{votes} matrix that can not be mapped into \code{c(0,1,NA)} using the information in \code{codes} are mapped to \code{NA}, with an informative message sent to the console. } \seealso{\code{\link{rollcall}}} \examples{ data(s109) mat <- convertCodes(s109) table(mat,exclude=NULL) } \keyword{manip} pscl/man/constrain.legis.Rd0000644000175100001440000001341011137510775015403 0ustar hornikusers\name{constrain.legis} \alias{constrain.legis} \title{constrain legislators' ideal points in analysis of roll call data} \description{ Sets constraints on specified legislators for ideal point estimation by generating appropriate priors and start values. } \usage{ constrain.legis(obj, dropList = list(codes = "notInLegis", lop = 0), x, d = 1) } \arguments{ \item{obj}{an object of class \code{\link{rollcall}}.} \item{dropList}{a \code{\link{list}} (or \code{\link{alist}}) indicating which voting decisions, legislators and/or roll calls are to be excluded from the subsequent analysis; see \code{\link{dropRollCall}} for details.} \item{x}{a \code{\link{list}} containing elements with names partially matching legislators found in \code{dimnames(object$votes)[[1]]} (but after any sub-setting specified by \code{dropList}). Each element must be a vector containing \code{d} elements, specifying the value to which the ideal point should be constrained in each of \code{d} dimensions. \code{x} must have at least \code{d+1} components; i.e., supplying a necessary (but not sufficient) set of constraints for global identification of the parameters of a \code{d}-dimensional item-response model, see Details.} \item{d}{the number of dimensions for which to set up the priors and start values.} } \details{ \code{constrain.items} and its cousin, \code{\link{constrain.legis}} are usefully thought of as \dQuote{pre-processor} functions, implementing identification constraints for the ideal point model by generating priors \emph{and} start values for both the item parameters and the ideal points. For the legislators specified in \code{x}, the prior mean for each dimension is set to the specified value and the prior precision for each dimension is set to \code{1e12} (i.e., a near-degenerate \dQuote{spike} prior, and, for all practical purposes, constraining that parameter to a fixed value). For the other legislators, the priors on their ideal points are set to a mean of 0 and a small precision of .01, corresponding to a prior variance of 100, or a prior 95 percent confidence interval of -20 to 20. All of the item parameter priors are set to mean 0, precision 0.01. Start values are also generated for both ideal points and item parameters. The start values for the legislators named in \code{x} are set to the values specified in \code{x}. The list resulting from \code{constrain.legis} can then be given as the value for the parameters \code{priors} and \code{startvals} when \code{\link{ideal}} is run. \code{constrain.legis} requires that \code{d+1} constraints be specified; if the constrained ideal points points are linearly independent, then the parameters of the item-response model are (at least locally) identified. For instance, when fitting a 1 dimensional model, constraining the ideal points of two legislators is sufficient to globally identify the model parameters. \code{\link{dropRollCall}} is first called to generate the desired roll call matrix. The entries of the roll call matrix are mapped to \code{c(0,1,NA)} using the \code{codes} component of the \code{\link{rollcall}} \code{object}. See the discussion in the documentation of \code{\link{ideal}} for details on the generation of start values. } \value{ a list with elements: \item{xp}{prior means for ideal points. A matrix of dimensions number of legislators in \code{rc} by \code{d}.} \item{xpv}{prior meansprecisions for ideal points. A matrix of dimensions number of legislators in \code{rc} by \code{d}.} \item{bp}{prior means for item parameters. A matrix of dimensions number of items or votes in \code{rc} by \code{d+1}.} \item{bpv}{prior meansprecisions for item parameters. A matrix of dimensions number of items or votes in \code{rc} by \code{d+1}.} \item{x}{start values for ideal points. A matrix of dimensions number of legislators in \code{rc} by \code{d}.} \item{b}{start values for ideal points. A matrix of dimensions number of items or votes in \code{rc} by \code{d+1}.} } \seealso{ \code{\link{rollcall}}, \code{\link{ideal}}, \code{\link{constrain.items}}. See \code{\link{pmatch}} on how supplied names are matched against the names in the \code{\link{rollcall}} object. } \examples{ data(s109) cl <- constrain.legis(s109, x=list("KENNEDY"=-1, "ENZI"=1), d=1) ## short run for examples id1Constrained <- ideal(s109, d=1, priors=cl, ## use cl startvals=cl, ## use cl maxiter=500, burnin=100, thin=10) summary(id1Constrained) cl2 <- constrain.legis(s109, x=list("KENNEDY"=c(-1,0), "ENZI"=c(1,0), "CHAFEE"=c(0,-.5)), d=2) \dontrun{ ## too long for examples id2Constrained <- ideal(s109, d=2, priors=cl2, ## priors (w constraints) startvals=cl2, ## start value (w constraints) store.item=TRUE, maxiter=5000, burnin=500, thin=25) } ## short run for examples id2Constrained <- ideal(s109, d=2, priors=cl2, ## priors (w constraints) startvals=cl2, ## start value (w constraints) store.item=TRUE, maxiter=500, burnin=100, thin=10) summary(id2Constrained,include.items=TRUE) } \keyword{datagen} pscl/man/constrain.items.Rd0000644000175100001440000001150610555214104015413 0ustar hornikusers\name{constrain.items} \alias{constrain.items} \title{constrain item parameters in analysis of roll call data} \description{ Sets constraints on specified item parameters in Bayesian analysis of roll call data by generating appropriate priors and start values for Markov chain Monte Carlo iterations. } \usage{ constrain.items(obj, dropList = list(codes = "notInLegis", lop = 0), x, d = 1) } \arguments{ \item{obj}{an object of class \code{\link{rollcall}}.} \item{dropList}{a \code{\link{list}} (or \code{\link{alist}}) indicating which voting decisions, legislators and/or roll calls are to be excluded from the subsequent analysis; see \code{\link{dropRollCall}} for details.} \item{x}{a \code{\link{list}} containing elements with names matching votes found in \code{dimnames(object$votes)[[2]]} (but after any subsetting specified by \code{dropList}). Each component of the list must be a vector containing \code{d} elements, specifying the value to which the item discrimination parameters should be constrained, in each of the \code{d} dimensions. The intercept or item difficultly parameter will not be constrained.} \item{d}{numeric, positive integer, the number of dimensions for which to set up the priors and start values.} } \details{\code{constrain.items} and its cousin, \code{\link{constrain.legis}} are usefully thougt of as \dQuote{pre-processor} functions, generating priors \emph{and} start values for both the item parameters and the ideal points. For the items specified in \code{x}, the prior mean for each dimension is set to the value given in \code{x}, and the prior precision for each dimension is set to \code{1e12} (i.e., a near-degenerate \dQuote{spike} prior). For the other items, the priors are set to a mean of 0 and precision 0.01. All of the ideal points are given normal priors with mean 0, precision 1. Start values are also generated for both ideal points and item parameters. The start values for the items specified in \code{x} are set to the values specified in \code{x}. The list resulting from \code{constrain.items} can then be given as the value for the parameters \code{priors} and \code{startvals} when \code{\link{ideal}} is run. The user is responsible for ensuring that a sufficient number of items are constrained such that when \code{\link{ideal}} is run, the model parameters are identified. \code{\link{dropRollCall}} is first called to generate the desired roll call matrix. The entries of the roll call matrix are mapped to \code{c(0,1,NA)} using the \code{codes} component of the \code{\link{rollcall}} \code{object}. See the discussion in the documentation of \code{\link{ideal}} for details on the generation of start values. } \value{ a list with elements: \item{xp}{prior means for ideal points. A matrix of dimensions number of legislators in \code{obj} by \code{d}.} \item{xpv}{prior meansprecisions for ideal points. A matrix of dimensions number of legislators in \code{obj} by \code{d}.} \item{bp}{prior means for item parameters. A matrix of dimensions number of items or votes in \code{obj} by \code{d+1}.} \item{bpv}{prior meansprecisions for item parameters. A matrix of dimensions number of items or votes in \code{obj} by \code{d+1}.} \item{xstart}{start values for ideal points. A matrix of dimensions number of legislators in \code{obj} by \code{d}.} \item{bstart}{start values for ideal points. A matrix of dimensions number of items or votes in \code{obj} by \code{d+1}.} } \seealso{ \code{\link{rollcall}}, \code{\link{ideal}}, \code{\link{constrain.legis}} } \examples{ ## run ideal with the default parameters data(s109) \dontrun{ ## run a 1d model, look for lack of fit id1 <- ideal(s109, d=1, meanzero=TRUE, store.item=TRUE, maxiter=1e5, burnin=1e3, thin=1e2) id1sum <- summary(id1,include.beta=TRUE) suspect1 <- id1sum$bSig[[1]]=="95% CI overlaps 0" close60 <- id1sum$bResults[[1]][,"Yea"] < 60 close40 <- id1sum$bResults[[1]][,"Yea"] > 40 suspect <- suspect1 & close60 & close40 id1sum$bResults[[1]][suspect,] suspectVotes <- dimnames(id1sum$bResults[[1]][suspect,])[[1]] } ## constraints on 2d model, ## close rollcall poorly fit by 1d model ## serves as reference item for 2nd dimension cl <- constrain.items(s109, x=list("2-150"=c(0,7), "2-169"=c(7,0)), d=2) \dontrun{ id1Constrained <- ideal(s109, d=2, meanzero=TRUE, priors=cl, startvals=cl, maxiter=1e5, burnin=1e3, thin=1e2) summary(id1Constrained,include.beta=TRUE) } } \keyword{datagen} pscl/man/computeMargins.Rd0000644000175100001440000000370211040050415015260 0ustar hornikusers\name{computeMargins} \alias{computeMargins} \title{add information about voting outcomes to a rollcall object} \description{ Add summaries of each roll call vote to a \code{\link{rollcall}} object. } \usage{ computeMargins(object, dropList = NULL) } \arguments{ \item{object}{an object of class \code{\link{rollcall}}} \item{dropList}{a \code{\link{list}} (or \code{\link{alist}}) listing voting decisions, legislators and/or votes to be dropped from the analysis; see \code{\link{dropRollCall}} for details.} } \details{ The subseting implied by the \code{dropList} is first applied to the \code{\link{rollcall}} object, via \code{\link{dropRollCall}}. Then, for each remaining roll call vote, the number of legislators voting \dQuote{Yea}, \dQuote{Nay}, and not voting are computed, using the encoding information in the \code{codes} component of the \code{\link{rollcall}} object via the \code{\link{convertCodes}} function. The matrix of vote counts are added to the \code{\link{rollcall}} object as a component \code{voteMargins}. } \value{ An object of class \code{\link{rollcall}}, with a component \code{voteMargins} that is a matrix with four columns: \item{Yea}{number of legislators voting \dQuote{Yea}} \item{Nay}{number of legislators voting \dQuote{Nay}} \item{NA}{number of legislators not voting \dQuote{Nay}} \item{Min}{the number of legislators voting on the losing side of the roll call} } \author{Simon Jackman \email{jackman@stanford.edu}} \seealso{\code{\link{dropRollCall}} on specifying a \code{dropList}. The vote-specific marginals produced by theis function are used by as \code{\link{dropRollCall}}, \code{\link{summary.ideal}} and \code{\link{predict.ideal}}.} \examples{ data(s109) tmp <- computeMargins(s109) dim(tmp$voteMargins) ## 645 by 4 tmp <- computeMargins(s109, dropList=list(codes="notInLegis",lop=0)) dim(tmp$voteMargins) ## 544 by 4 } \keyword{manip} pscl/man/ca2006.Rd0000644000175100001440000000527211574512032013174 0ustar hornikusers\name{ca2006} \alias{ca2006} \docType{data} \title{California Congressional Districts in 2006} \description{ Election returns and identifying information, California's 53 congressional districts in the 2006 Congresisonal elections. } \usage{data(ca2006)} \format{ A data frame with 53 observations on the following 11 variables. \describe{ \item{\code{district}}{numeric, number of Congressional district} \item{\code{D}}{numeric, number of votes for the Democratic candidate} \item{\code{R}}{numeric, votes for the Republican candidate} \item{\code{Other}}{numeric, votes for other candidates} \item{\code{IncParty}}{character, party of the incumbent (or retiring member), \code{D} or \code{R}} \item{\code{IncName}}{character, last name of the incumbent, character \code{NA} if no incumbent running} \item{\code{open}}{logical, \code{TRUE} if no incumbent running} \item{\code{contested}}{logical, \code{TRUE} if both major parties ran candidates} \item{\code{Bush2004}}{numeric, votes for George W. Bush (R) in the district in the 2004 presidential election} \item{\code{Kerry2004}}{numeric, votes for John Kerry (D) in 2004} \item{\code{Other2004}}{numeric votes for other candidates in 2004} \item{\code{Bush2000}}{numeric, votes for George W. Bush in 2000} \item{\code{Gore2000}}{numeric, votes for Al Gore (D) in 2000} } } \source{2006 data from the California Secretary of State's web site, \url{http://vote2006.sos.ca.gov/Returns/usrep/all.htm}; Excel data at \url{http://www.sos.ca.gov/elections/sov/2006_general/congress.xls}. 2004 and 2000 presidential vote in congressional districts from the 2006 \emph{Almanac of American Politics}. Thanks to Arthur Aguirre for the updated links, above. } \references{ Michael Baraon and Richard E. Cohen. 2006. \emph{The Almanac of American Politics, 2006.} National Journal Group: Washington, D.C. } \examples{ data(ca2006) ## 2006 CA congressional vote against 2004 pvote y <- ca2006$D/(ca2006$D+ca2006$R) x <- ca2006$Kerry2004/(ca2006$Kerry2004+ca2006$Bush2004) pch <- rep(19,length(y)) pch[ca2006$open] <- 1 col <- rep("black",length(y)) col[11] <- "red" ## Pembo (R) loses to McNerney (D) plot(y~x,pch=pch, col=col, xlim=range(x,y,na.rm=TRUE), ylim=range(x,y,na.rm=TRUE), xlab="Kerry Two-Party Vote, 2004", ylab="Democratic Two-Party Vote Share, 2006") abline(0,1) abline(h=.5,lty=2) abline(v=.5,lty=2) legend(x="topleft", bty="n", col=c("red","black","black"), pch=c(19,19,1), legend=c("Seat Changing Hands", "Seat Retained by Incumbent Party", "Open Seat (no incumbent running)") ) } \keyword{datasets} pscl/man/bioChemists.Rd0000644000175100001440000000211511360735336014552 0ustar hornikusers\name{bioChemists} \alias{bioChemists} \docType{data} \title{article production by graduate students in biochemistry Ph.D. programs} \description{ A sample of 915 biochemistry graduate students. } \usage{data(bioChemists)} \format{ \describe{ \item{\code{art}}{count of articles produced during last 3 years of Ph.D.} \item{\code{fem}}{factor indicating gender of student, with levels Men and Women} \item{\code{mar}}{factor indicating marital status of student, with levels Single and Married} \item{\code{kid5}}{number of children aged 5 or younger} \item{\code{phd}}{prestige of Ph.D. department} \item{\code{ment}}{count of articles produced by Ph.D. mentor during last 3 years} } } \source{found in Stata format at \url{http://www.indiana.edu/~jslsoc/stata/socdata/couart2.dta}} \references{Long, J. Scott. 1990. The origins of sex differences in science. \emph{Social Forces}. 68(3):1297-1316. Long, J. Scott. 1997. \emph{Regression Models for Categorical and Limited Dependent Variables}. Thousand Oaks, California: Sage. } \keyword{datasets} pscl/man/betaHPD.Rd0000644000175100001440000001060010555214104013534 0ustar hornikusers\name{betaHPD} \alias{betaHPD} \title{compute and optionally plot beta HDRs} \description{Compute and optionally plot highest density regions for the Beta distribution.} \usage{ betaHPD(alpha,beta,p=.95,plot=FALSE,xlim=NULL,debug=FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{alpha}{scalar, first shape parameter of the Beta density. Must be greater than 1, see details} \item{beta}{scalar, second shape parameter of the Beta density. Must be greater than 1, see details} \item{p}{scalar, content of HPD, must lie between 0 and 1} \item{plot}{logical flag, if \code{TRUE} then plot the density and show the HDR} \item{xlim}{numeric vector of length 2, the limits of the density's support to show when plotting; the default is \code{NULL}, in which case the function will confine plotting to where the density is non-neglible} \item{debug}{logical flag, if \code{TRUE} produce messages to the console} } \details{The Beta density arises frequently in Bayesian models of binary events, rates, and proportions, which take on values in the open unit interval. For instance, the Beta density is a conjugate prior for the unknown success probability in binomial trials. With shape parameters \eqn{\alpha > 1} and \eqn{\beta > 1}, the Beta density is unimodal. In general, suppose \eqn{\theta \in \Theta \subseteq R^k} is a random variable with density \eqn{f(\theta)}. A highest density region (HDR) of \eqn{f(\theta)} with content \eqn{p \in (0,1]} is a set \eqn{\mathcal{Q} \subseteq \Theta} with the following properties: \deqn{\int_\mathcal{Q} f(\theta) d\theta = p} and \deqn{f(\theta) > f(\theta^*) \, \forall\ \theta \in \mathcal{Q}, \theta^* \not\in \mathcal{Q}.} For a unimodal Beta density (the class of Beta densities handled by this function), a HDR of content \eqn{0 < p < 1} is simply an interval \eqn{\mathcal{Q} \in (0,1)}. This function uses numerical methods to solve for the end points of a HDR for a Beta density with user-specified shape parameters, via repeated calls to the functions \code{\link{dbeta}}, \code{\link{pbeta}} and \code{\link{qbeta}}. The function \code{\link{optimize}} is used to find points \eqn{v} and \eqn{w} such that \deqn{f(v) = f(w)} subject to the constraint \deqn{\int_v^w f(\theta; \alpha, \beta) d\theta = p,} where \eqn{f(\theta; \alpha, \beta)} is a Beta density with shape parameters \eqn{\alpha} and \eqn{\beta}. In the special case of \eqn{\alpha = \beta > 1}, the end points of a HDR with content \eqn{p} are given by the \eqn{(1 \pm p)/2} quantiles of the Beta density, and are computed with the \code{\link{qbeta}} function. Again note that the function will only compute a HDR for a unimodal Beta density, and exit with an error if \code{alpha<=1 | beta <=1}. Note that the uniform density results with \eqn{\alpha = \beta = 1}, which does not have a unique HDR with content \eqn{0 < p < 1}. With shape parameters \eqn{\alpha<1} and \eqn{\beta>1} (or vice-versa, respectively), the Beta density is infinite at 0 (or 1, respectively), but still integrates to one, and so a HDR is still well-defined (but not implemented here, at least not yet). Similarly, with \eqn{0 < \alpha, \beta < 1} the Beta density is infinite at both 0 and 1, but integrates to one, and again a HDR of content \eqn{p<1} is well-defined in this case, but will be a set of two disjoint intervals (again, at present, this function does not cover this case). } \value{ If the numerical optimization is successful an vector of length 2, containing \eqn{v} and \eqn{w}, defined above. If the optimization fails for whatever reason, a vector of \code{NAs} is returned. The function will also produce a plot of the density with area under the density supported by the HDR shaded, if the user calls the function with \code{plot=TRUE}; the plot will appear on the current graphics device. Debugging messages are printed to the console if the \code{debug} logical flag is set to \code{TRUE}. } \author{Simon Jackman \email{jackman@stanford.edu}. Thanks to John Bullock who discovered a bug in an earlier version.} \seealso{\code{\link{pbeta}}, \code{\link{qbeta}}, \code{\link{dbeta}}, \code{\link{uniroot}}} \examples{ betaHPD(4,5) betaHPD(2,120) betaHPD(120,45,p=.75,xlim=c(0,1)) } \keyword{distribution}% at least one, from doc/KEYWORDS pscl/man/AustralianElections.Rd0000644000175100001440000000636311360733036016256 0ustar hornikusers\name{AustralianElections} \alias{AustralianElections} \docType{data} \title{elections to Australian House of Representatives, 1949-2007} \description{ Aggregate data on the 24 elections to Australia's House of Representatives, 1949 to 2007. } \usage{data(AustralianElections)} \format{ A data frame with the following variables: \describe{ \item{\code{date}}{date of election, stored using the \code{\link{Date}} class} \item{\code{Seats}}{numeric, number of seats in the House of Representatives} \item{\code{Uncontested}}{numeric, number of uncontested seats} \item{\code{ALPSeats}}{numeric, number of seats won by the Australian Labor Party} \item{\code{LPSeats}}{numeric, number of seats won by the Liberal Party} \item{\code{NPSeats}}{numeric, number of seats won by the National Party (previously known as the Country Party)} \item{\code{OtherSeats}}{numeric, number of seats won by other parties and/or independent candidates} \item{\code{ALP}}{numeric, percentage of first preference votes cast for Australian Labor Party candidates} \item{\code{ALP2PP}}{numeric, percentage of the two-party preferred vote won by Australian Labor Party candidates} \item{\code{LP}}{numeric, percent of first preference votes cast for Liberal Party candidates} \item{\code{NP}}{numeric, percent of first preference votes cast for National Party (Country Party) candidates} \item{\code{DLP}}{numeric, percent of first preference votes cast for Democratic Labor Party candidates} \item{\code{Dem}}{numeric, percent of first preference votes cast for Australian Democrat candidates} \item{\code{Green}}{numeric, percent of first preference votes cast for Green Party candidates} \item{\code{Hanson}}{numeric, percent of first preference votes cast for candidates from Pauline Hanson's One Nation party} \item{\code{Com}}{numeric, percent of first preference votes cast for Communist Party candidates} \item{\code{AP}}{numeric, percent of first preference votes cast for Australia Party candidates} \item{\code{Informal}}{numeric, percent of ballots cast that are spoiled, blank, or otherwise uncountable (usually because of errors in enumerating preferences)} \item{\code{Turnout}}{numeric, percent of enrolled voters recorded as having turned out to vote (Australia has compulsory voting)} } } \source{Australian Electoral Commission. \url{http://www.aec.gov.au}. } \references{Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Example 3.5. } \examples{ data(AustralianElections) attach(AustralianElections) alpSeatShare <- ALPSeats/Seats alpVoteShare <- ALP2PP/100 ## log-odds transforms x <- log(alpVoteShare/(1-alpVoteShare)) y <- log(alpSeatShare/(1-alpSeatShare)) ols <- lm(y~x) ## Tufte-style seats-votes regression xseq <- seq(-4.5,4.5,length=500) yhat <- coef(ols)[1] + coef(ols)[2]*xseq yhat <- exp(yhat)/(1+exp(yhat)) xseq <- exp(xseq)/(1+exp(xseq)) ## seats vote curve plot(x=alpVoteShare, y=alpSeatShare, xlab="ALP Vote Share", ylab="ALP Seat Share") lines(xseq,yhat,lwd=2) abline(h=.5,lty=2) abline(v=.5,lty=2) } \keyword{datasets} pscl/man/AustralianElectionPolling.Rd0000644000175100001440000000661111406255745017423 0ustar hornikusers\name{AustralianElectionPolling} \alias{AustralianElectionPolling} \docType{data} \title{ Political opinion polls in Australia, 2004-07 } \description{ The results of 239 published opinion polls measuring vote intentions (1st preference vote intention in a House of Representatives election) between the 2004 and 2007 Australian Federal elections, from 4 survey houses. } \usage{data(AustralianElectionPolling)} \format{ A data frame with 239 observations on the following 14 variables. \describe{ \item{\code{ALP}}{a numeric vector, percentage of respondents reported as intending to vote for the Australian Labor Party} \item{\code{Lib}}{a numeric vector, percentage of respondents reported as intending to vote for the Liberal Party} \item{\code{Nat}}{a numeric vector, percentage of respondents reported as intending to vote for the National Party} \item{\code{Green}}{a numeric vector, percentage of respondents reported as intending to vote for the Greens} \item{\code{FamilyFirst}}{a numeric vector, percentage of respondents reported as intending to vote for the Family First party} \item{\code{Dems}}{a numeric vector, percentage of respondents reported as intending to vote for the Australian Democrats} \item{\code{OneNation}}{a numeric vector, percentage of respondents reported as intending to vote for One Nation} \item{\code{DK}}{a numeric vector, percentage of respondents reported as expressing no preference or a \dQuote{don't know} response} \item{\code{sampleSize}}{a numeric vector, reported sample size of the poll} \item{\code{org}}{a factor with levels \code{Galaxy}, \code{Morgan, F2F}, \code{Newspoll}, \code{Nielsen} and \code{Morgan, Phone}, indicating the survey house and/or mode of the poll} \item{\code{startDate}}{a Date, reported start of the field period} \item{\code{endDate}}{a Date, reported end of the field period} \item{\code{source}}{a character vector, source of the poll report} \item{\code{remark}}{a character vector, remarks noted by author and/or research assistant coders} } } \details{Morgan uses two modes: phone and face-to-face. The 2004 Australian election was on October 9; the ALP won 37.6\% of the 1st preferences cast in elections for the House of Representatives. The ALP won the 2007 election (November 24) with 43.4\% of 1st preferences. The ALP changed leaders twice in the 2004-07 inter-election period spanned by these data: (1) Mark Latham resigned the ALP leadership on January 18 2005 and was replaced by Kim Beazley; (2) Beazley lost the ALP leadership to Kevin Rudd on December 4, 2006. The then Prime Minister, John Howard, announced the November 2007 election on October 14, 2007. } \source{See the \code{source} variable. Andrea Abel assisted with the data collection. } \references{ Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Example 9.3. } \examples{ data(AustralianElectionPolling) xyplot(ALP ~ startDate | org, data=AustralianElectionPolling, layout=c(1,5), type="b", xlab="Start Date", ylab="ALP") ## test for house effects library(gam) y <- AustralianElectionPolling$ALP/100 v <- y*(1-y)/AustralianElectionPolling$sampleSize w <- 1/v m1 <- gam(y ~ lo(startDate,span=1/10), weight=w, data=AustralianElectionPolling) m2 <- update(m1, ~ . + org) anova(m1,m2) } \keyword{datasets} pscl/man/admit.Rd0000644000175100001440000000265610614240724013402 0ustar hornikusers\name{admit} \alias{admit} \docType{data} \title{Applications to a Political Science PhD Program} \description{ Ordinal ratings (faculty evaluations) of applicants to a Political Science PhD Program.} \usage{data(admit)} \format{ A data frame with 106 observations on the following 6 variables. \describe{ \item{\code{score}}{an ordered factor with levels \code{1} < \code{2} < \code{3} < \code{4} < \code{5}} \item{\code{gre.quant}}{applicant's score on the quantitative section of the GRE; the maximum score is 800} \item{\code{gre.verbal}}{applicant's score on the verbal section of the GRE; the maximum score is 800} \item{\code{ap}}{1 if the applicant indicated an interest in American politics; 0 otherwise} \item{\code{pt}}{1 if the applicant indicated an interest in Political Theory; 0 otherwise} \item{\code{female}}{1 for female applicants; 0 otherwise} } } \references{Jackman, Simon. 2004. "What Do We Learn From Graduate Admissions Committees?: A Multiple-Rater, Latent Variable Model, with Incomplete Discrete and Continuous Indicators." \emph{Political Analysis}. 12(4):400-424. } \examples{ data(admit) summary(admit) require(MASS) ## ordered probit model op1 <- polr(score ~ gre.quant + gre.verbal + ap + pt + female, Hess=TRUE, data=admit, method="probit") summary(op1) hitmiss(op1) logLik(op1) pR2(op1) } \keyword{datasets} pscl/man/absentee.Rd0000644000175100001440000001015311406255745014072 0ustar hornikusers\name{absentee} \alias{absentee} \docType{data} \title{Absentee and Machine Ballots in Pennsylvania State Senate Races} \description{ Absentee ballot outcomes contrasted with machine ballots, cast in Pennsylvania State Senate elections, selected districts, 1982-1993. } \usage{data(absentee)} \format{ A data frame with 22 observations on the following 8 variables. \describe{ \item{\code{year}}{a numeric vector, year of election, 19xx} \item{\code{district}}{a numeric vector, Pennsylvania State Senate district} \item{\code{absdem}}{a numeric vector, absentee ballots cast for the Democratic candidate} \item{\code{absrep}}{a numeric vector, absentee ballots cast for the Republican candidate} \item{\code{machdem}}{a numeric vector, votes cast on voting machines for the Democratic candidate} \item{\code{machrep}}{a numeric vector, votes cast on voting machines for the Republican candidate} \item{\code{dabs}}{a numeric vector, Democratic margin among absentee ballots} \item{\code{dmach}}{a numeric vector, Democratic margin among ballots case on voting machines} } } \details{In November 1993, the state of Pennsylvania conducted elections for its state legislature. The result in the Senate election in the 2nd district (based in Philadelphia) was challenged in court, and ultimately overturned. The Democratic candidate won 19,127 of the votes cast by voting machine, while the Republican won 19,691 votes cast by voting machine, giving the Republican a lead of 564 votes. However, the Democrat won 1,396 absentee ballots, while the Republican won just 371 absentee ballots, more than offsetting the Republican lead based on the votes recorded by machines on election day. The Republican candidate sued, claiming that many of the absentee ballots were fraudulent. The judge in the case solicited expert analysis from Orley Ashenfelter, an economist at Princeton University. Ashenfelter examined the relationship between absentee vote margins and machine vote margins in 21 previous Pennsylvania Senate elections in seven districts in the Philadelphia area over the preceding decade.} \source{ Ashenfelter, Orley. 1994. Report on Expected Asbentee Ballots. Typescript. Department of Economics, Princeton University. } \references{ Ashenfelter, Orley, Phillip Levine and David Zimmerman. 2003. \emph{Statistics and Econometrics: Methods and Applications}. New York: John Wiley and Sons. Jackman, Simon. 2009. \emph{Bayesian Analysis for the Social Sciences}. Wiley: Hoboken, New Jersey. Examples 2.13, 2.14, 2.15. } \examples{ data(absentee) summary(absentee) denom <- absentee$absdem + absentee$absrep y <- (absentee$absdem - absentee$absrep)/denom * 100 denom <- absentee$machdem + absentee$machrep x <- (absentee$machdem - absentee$machrep)/denom *100 ols <- lm(y ~ x, subset=c(rep(TRUE,21),FALSE) ## drop data point 22 ) ## predictions for disputed absentee point yhat22 <- predict(ols, newdata=list(x=x[22]), se.fit=TRUE, interval="prediction") tstat <- (y[22]-yhat22$fit[,"fit"])/yhat22$se.fit cat("tstat on actual outcome for obs 22:",tstat,"\n") cat(paste("Pr(t>",round(tstat,2),") i.e., one-sided:\n",sep="")) cat(1-pt(tstat,df=yhat22$df),"\n") ## make a picture xseq <- seq(min(x)-.1*diff(range(x)), max(x)+.1*diff(range(x)), length=100) yhat <- predict(ols,interval="prediction", newdata=list(x=xseq)) plot(y~x, type="n", axes=FALSE, ylim=range(yhat,y), xlim=range(xseq),xaxs="i", xlab="Democratic Margin, Machine Ballots (Percentage Points)", ylab="Democratic Margin, Absentee Ballots (Percentage Points)") polygon(x=c(xseq,rev(xseq)), ## overlay 95% prediction CI y=c(yhat[,"lwr"],rev(yhat[,"upr"])), border=FALSE, col=gray(.85)) abline(ols,lwd=2) ## overlay ols points(x[-22],y[-22],pch=1) ## data points(x[22],y[22],pch=16) ## disputed data point text(x[22],y[22], "Disputed\nElection", cex=.75, adj=1.25) axis(1) axis(2) } \keyword{datasets} pscl/inst/0000755000175100001440000000000011765762344012225 5ustar hornikuserspscl/inst/doc/0000755000175100001440000000000011765762344012772 5ustar hornikuserspscl/inst/doc/DebTrivedi.rda0000644000175100001440000016173610605527220015501 0ustar hornikusers} %WUu{zfz&>3" (PPT@`TDP\Adq?\psQCBv d#!u߿ܪU׫{s?I|_ ?7̅q^}}g>;6=h㼴YG|Ʊg<=zvsly؜WhS\sc׿wI;k.;K]v4|o;ͽg4m34>;hm`<]~k8 \ejaf +a"טi~'5p>ytYG@6֕nxK+acY?{2<]a“M짶0 7죶͘o;l3x8Bv>x,F 8zL&lCNYЙyt/Ä_ pby~_͸;,P{JD<Ϗu<*Eu_<H0+x0c>l>yľ >QB̗ >] t2aV׿_5Hscځu z?l9pG1!s:wR t!LlBմ[~l&>.+`Q}8 4浇`&òpq2_k_e[ 4V;M;)Ld>&:2ao56c_fY}Bck =,,{ /lR|}@doA,oЋGJFa; }P[S;7G1vrЅ5Z}>&>i0gV$8$P!Lgм@?y bneгa"COkfNE!c?W9;}&BN< :r Y*2ffA/Q֯C=qV}:I?<`?>ZXԆiT?G8<)tsZ(s2i]s= ~3XG8j=;"=G0S@tpv8|B'0 m,ۉaǀߠ1wkk'\HmkN&5mQ<߁A{v#)9zc\;y݄{& S'ss}>%LH'|/A+a:G|Gy^k?C{7,kT7Wca9<$|z0֜|uwa6Q_31s^ b9z]5Oxj!&y*}'K̷{+L뽓D@p ?x`v7hac3"\6\V m)aCOϢvl#{ ~,rErzƁ.؞0u(h˸fCsk!L/Cf+5\]N'X`_u_ț ~̙cfCp Y|pϹWò?LhBp}4 aװ&ɉaf}<T: ~@AP1Oz@WqbBNn:!Lt,|N>C.F\sa0Gƹ &cuAkgΏbh´C< ϓ lb etx03 B:0_5.9N a N\{@-RZ`﯇iCg8O& 1 <g+ra_%x h1z{_ceye%dj9Lpu5`YϢ |U6ǃ7,KId'Ezl7||<(JsGm0_Њ4lY&pB/JD;d kEdYmO6(kߺ%LN'9pBos9{!?}kźKLih5L@. l2A6w!Ll (qZo7Gb?bf*B.9:uh`˴<LJ.c>pyr\ ^:@hȵ9^S"bޅބ<R;} ^ oL2 ߉&aYws3~=h'@My9nxb. = 1Hä=d]qDg> z?x62>i|ZNj±qa4YOkíp"=01бui<^]j:@y?9(i+6 };´;5.`7pnwMN'p>@uQǾ s!Lbkl8D_}[@v >D|9.zO|B׽VdtХ4~Ɠ>@b< `٨=`ºJ]zOr['\hMϡ5q'A'xi{NΆ.ܱ2Kνm0y֫ye>-}=2qô~&ۯ92an滋?`[6OIy-8;d!!Ln?Lt ``i Y<,tӇufG~XWχi>E1`> \?t.dC2=UB̕khq$ṫ0XaZ{ÄVkpΉ_AO:z,3Q t[wop=W5 =oOe=V!<牀xC|8Ļw>g{~ `o=38Aa~QùQQ%m 6˂c5d jKs!q$^8pz99y\&68uؕ05d=N39gڳeh>gu007΃p,-=`w^Ƙ՟kg=0EaBwp`,ć|㽒X<Ƃno) &`oP 6:4gB^f- 1p{vx1_,'sabٞF={MJʒq_c.!o&l0*i `ry.N \bڮ>.t ЏuY>p?d!_6\obՋ][R쨭E uHǔnu=ip|T TƮޠm7J}Ċu\5J.akXtTYwc6.k( nAɾwr%ZǂuI>v1f:p_ ʴ aB˳}R]g?]*m91r0)_>>}[R|kBn9|U͗-6>cVYT=|עHw ;Cл\LLbe8e'A=~)l'xɏ}hwRg o#޶+䞗Cr\敳O} e\Jb)_|{xHX~*i|9; ;Yh}r}Zs΂4QlRl\Ǿ0ќ~S1u1FasEc5PVRHo(h<ξYA癡o\e9cc:0:376ńUVXc>u5fį_3wk<듿-.9jWސ^Ht}Y#7sٿ-X=!7X$Wַ.^Is6 gV'TR]ߪQyp+.N9()1Og \[ᎍb.-_tl-x'g?jX~gNr|TJ`,Tܘ5)©~<*ľk;5SǫC讁5т9X^B#A[Z[gTE)oCoWեtّ=)xG(U66c}w&AKkC]k-1+1c>lo*K=5,{nޣb)8F)Y݊y,@V CחW3 X }<:R׻ 7æwAT(suyh0qehlЦ ޟ Lá LWHS9@.N~ 縹=7αo͹aoGY1߂3D{~W%VfͻMfo'{> ؼR9ؿE]3ct_goK,m};)憎x^+~k;˦X~H[ ! MXڄ\|(R{1*{9{9n\ 6~kC EORydcH)/W:W#m|b>:؞<򀷾GK~Yos+c_ūrOVL7=qV|[g-}JFWYϬ1X95F.…ڗtu͢x`a㞓#Ubž2 0AXk{V_/O#ՇM*w?{s0{ t}]ߒJNc \4fSx!s۪SRJ}kYr8MY_#ߧ6<DN1|L~x%җ="(ur~cC\RQ g)8bcW3=>Sic}`[ (֕K\'˷XCu'}^Q;X(XU?CJg!Wrx-Ӟ6=۰ny}G}_c<?Iy]o.ҵHkrX:^O/ lG]hg>k>k־`ZrUwjN7oY;M=j[u\AZ`\ ߱Rb7ra/OwbO['VRõJ*\FoIJcm<_}9[-ˍkCW6h'&Ε>qVT1;#GzgX%.P,+7_eշU܈≿xҽ%9OaӼP_?ݏŵ>U)=GX:8g gbq0.by\;.?wR[}߳;!k!V)_ˇQ-ߐZRyJ}οcȽal~g3;Y+gu}'TjRW3M.1kͽx'&ٮ{u,Uy|7Ǐ1T,Or*HouoK~[q<c߬"C5OaJKb\KIC0x/y\t(scuk~ͣr2cm~dz+zJXVj'8AҡdM/e+JtW꾧 C\6n-}O07 <6޽T:NŊ}`yƍ#[-{7ߤOufhlV}^ _~>6fj&f̡~=4bPWȍ7K{%PH[iYO9}ն:/}K}qڐ\N.6Uڶ0p鳗bhnա=4Vj4+s~ g #ϥߘqxU>ܬ|Xlwk.j<<1}#UȒ'd=O=Ś}uVYg­?zP+,e3/g>Km |J{%%*C✘}ݡq gj\b<`kŮ9S-05ޑa踩~ΉWȯm}K'ޕb;+/rH,b<} {)B߰/'jα/kאR?Q_}3~Hݭ诏*>P0GXp֝->߯gh,庤Gx\4~`m)\RWO9\I\_9V/H42 <,>d?]88E!0ƙKq+O_:T}|Xr.1ξAj|K^R}>[*}cy|xv}΋KuP\=or_hs gx--܏cSg3Gb3w4 Yķmb] -GחYwb6UYa9R4|rgyuzɺ<0LVrܨ{x`Rm;=K9;7e]rq-b~^b_fVw$-_n{8Vw=WlBxyf.\ Nằg,?%CTݴV$2#7Ȭ]me7AH>}bo1iݬ6.}bԾ˒9wb~liC!:SR>mKK bϺf}Ws_>b.%ⷾ1qHb-/xJ_y{.j!r{gagR [5.[!_1[]\6ޗW'-y9Խ}oaZwEr{MYjγftu=6a]>o/lzq<%lk阩c9eg}ޫ|[g P*V!V띃XIߡO7^3+Ӄ_R?mήBk^4g׷9j'(%z*7y)d-z+]Y;RG{CKuqbP-ՓC޽pR=z16ux=z^Yxq1>SﴦƉ&}w-%Vs=KthGDR>;UfiCvő}cT^kOb5+{74J_ǏUWYj}ұyxC/<8!<-zұs}ʬtNPb}RSzӐַH<9TK,ۧ>tE^R^+oۡ/6ސzVBSYЦ`}Ǝw;(~޷ Kxy]sqk"1e7b2)/B&gᣔϡ}t!JXd ?,-1ןOwb}ko[BY*CKcV%̚=mm^eV#J瓲~Rrڇ;gx ŃsIc!Jg 5KFstGҧ;+{Yh+}o ÑȫNJTmIY ^}g.k_qKͪ,q)I32=\ ?Gf)||{to<&ȭEyp\»1uH.'ly_*W-^_?+CJ>JXKfr1бK3|߄e?/M5)YV1{H3rgZ.}<Ÿ F?}쨇<nO"ׇ/>~˻~ƹYľP3+f:Fg\ScXRZ뗦Yn]X)u8%g JbV[X3xcnc0}f>bo;l89yDG@mGnS_Ήr͞}%v/m񖒾<2XNDuR}URfa߽}|NT^gG{0X  Y2Sx,E1[{߷s-)Ku_ٷ־> ѵDGzҸO1Km9oǮzhR#)%/[%6nHQd]e]{tG7x̊>KsOQRb6؂Tٛe)^n3>2=V!dL؞>SY\αd. 9|jʃP g3_4{-S /mOkJ81>V'W_wFp>:UK}ʦz,_-6+S:gOX#7LJٛm+xtR{z.O{JN8N ˑgg}".!~ڷ}q=#}sPD?־>OVV_ؼ5~lF%`׬`ehX<0tm NLrY0/Ro}g]CJ,ȫ-H]wH)R?:59[Mu[mB>fq昚Or< 12}4*\)82s߳%<-5?sꙧ(.Ѿzײּn)^K?Yx/wJ!ʸԃC&X:?e饔.Nsd&ޢU/)b}{9RR-Ƨ%GJ?7Nu!^?.!nKR8+ѻ;FX_/b<}!Xtoa^||Y!w-O)Wb}X~D>C }_>&z:ygfG!r1O_ddPvޱfS(;<St} yCbn?Wb}ydtڊcVqPєڄ^N:zݵb܂蜯q|~܊v[uBKl[/>Z.w'F(|߬(Jui<;؇>,}}='`\,Ts[[j/^{:d]Fi㳜ϟ] )Kc/|:$[1D߸W_L<]NWŅKuuiN܃GK}9{1n DL?\]'CkkK-g}pg>V,V[#G#ْX,}!cxcKr>"Ϲ^~k.):x!hstY}aU9>|>zӺ筫s9~ԷgVLk;X.cC'hY2Wc=vOy)Gx/}ګ!'y3[-S%xK} Y}>s/񏶂}qZc_KΘm냧xioK!s=ŊC!kN}qr}C'A1fILiWqzƎշP>]a^q^m_?iX_ʫ/<)P8*:*Ap1l9֯c^C5Ӕ=å0MeYK!>?92OLϘ}Dl#,͍zd1tc/Se:gsro-H홟Ԯx\}9Lh?7xFi [g*['b:z\xi{ZOi[6k<0Cm?cte'f#9.l5xp/fϵNLY'0Н'Pt m꠽`'QX\w7C1Yc8C|okЂ3=,X,; S}_Lxܘ´-~u~[kKX0zO*g18bs a_j_Tι~̆撪B7΍D9kf~Z)~@{?疝W TloCIZsR=m9[Up:NJ&ց>b9.R1Ғ^ XÑN5ä939,o/KyΌNP;@^Cu`΢Rr(uٷbMUqjNֹ],Sc cK. ~gWu1ވ),߅a~zO 3ZX- ' ish9B/1ۭ<2u61}Hݘ- tOc nk4=pIz1PjbzXe!G!t}曘)˺!0mFd*fV>tNT)p_5f>-z=d 01َ  tB)YgKyAôl;C!tqrDž jQWy~f.ɵZ\aecTYutfYS;˼U]1}j!tᆌ~1-)=t"&Q*]U#ǚW~CgU?c\W $mT[{Q_u })3dX8ds$:tU>@}h=r2}WNcGlygk-:n 7 _q+6Y^Gyi}`j<^8f[ 5Bo:~n;˒[w)\Ǵ:cYݽoO1ݭPGϋqBwUU-_WYVY_݃s7A XEeBu1_f> G?`eZYVatl'5*1Cw<^9eu*c/5OŰ)| ~_ly|[uuF-.<{h1c{DDiu6jWcW9.1mԶj;fzzLgƉ^Q~T1-4NTܠab|zqCb>.hjӹX:ֽc};aX@cK^wl[GԷ!H]=Q?1`v(-S~493ްa\3KiSr?Н7˦/3˿}X[ܿ Էq}B0=yӲ_v\yZWX0HX5fecb>1'T>Վݲ3!F*StQ}# P > >fb:ikN#U9fb2=ü uMꃰ (zkx '}`f ɻƧ;b00 1.;B&NjUa9VILZ{ogCJƛ<%}rH5ܘs/Y󉱆Һ4R*!:H-}ᙕ,Z.u}z^ܖЭpN>sC}d?*9f'Y[F%cRd>ʁuozѯ%{V|1'J,[1Y"}SJm~Sڶ͛җb|2 xvhYa+txSv$Gs|5+fHĥG~b{l[m,5}Kx~X<)[-|({CR(bT2#9,c|AMϜS0G6BWhw!p#Ҹ.E >b6cu,= czy[kn;fscDZl_Ǒ%>|vsl+M>[MHs_cys qg1Ծ|2ykۭǏtVo=fa3bvh=Cn7mq4حkm6#Yjwwcuۭ>湭>l:&~v둣I/m7-G|}{햳nvv+n/r+͇|#slޕg6q8v`3)5lPv<;m/{~~sY/!负Gg4S5.3Yz?`s}zݣR@_Ӵ}z`No޳Cp5h^7H=<,/;ţ~`gȼ1>sqS<_9)O.Sikx2?=+ߟ*4ଢ଼>Mک|*Z8d-<B'Sp̷>Ǚi2N~ # >8Stn@;]Uyj}2?p괓y3Nu,G 取0߳TvJC{HQL'oʗ^WY|#Tv|y7eS=*tT}t<(>G+ z[DUKSJ+gWAA}.xRz*Oόc'ώSyg*\[= x8$T9PK\wbsuC,}[~[&tk* __kS}'sTk|A"|I䣣V? N%RU_3tiMȅVȸ*?םVBW〧oş ܋}`/K4a'x |"z~,=fAҏiv?u#[8,x[]i|~;C[k;V8j<ʧxBk{>; t1\ ?);qѿ*ʗ/*/;!aj5.Rw>0|ʛUs|NwH<T‌3MSyՋ(2/Wg~:VU9P=ѼeKiN -"_!?OAX/ȇGߚCqƉ<wtg5OtR3긪j;vC&|։'= 0ţWf75U=|/[ zHX |u֓;_t~e,}_nN[7WC;Uwsm'v[jK_v7~5,U{ x5;\yg]IиNL'R?ޖ;Qj=%֞u1C ]|<^ξjgέwXsœw\Nާi/P3; d^S=L5.k<{PV|:^%+Yξ/ŧSk~GΆttxu_TWkݰ.]#"/;@[qKg̰ s. t#ZR]:]$x|j^Go< v{yV[NZ? ;z*?r_5~+汴٪g_ֺZ~J.mMo;DC?uS![>?߭A58JW[cuS[n=>ȕvMC!_+:WkX[N~Z_Mgk;Lx׸WUxVS2S_ޤyM]]Sg_]7[c{~dN~[o;03Q'׺?9k^J.+ٗvDEH}#+n[K6 ͹ݷќ>w Yy-f`=P<)_麭~vcXéU8;뮂=^:~OmOKwg\C :?+Q^7~q;(S:{ P?S9]3 :"_O9>x= CNuBg߆S-wN>}Y~ٟzH?S)|z_˯Jg;]O]'r%?E.ߢok;y$~C[cq~'zP~%V>ߌ_WS:/-Eg@WߏPz[;־Sk_Gg\w3d>uјCFgD/\ʼx#2?4]vy$/r|ڭvѤ v; +yvUU>:2 nV>F{'3oU_j=$u{qd~F=cwTO=ZoQ}ת'k;Ӻf{{f_Tu|gtxM=}O=6CW~U>/:rOC2{wk <\ݷvڇ`־:qȟu_Tkي[Z>vtfkqּu;Xrʋ̿@Qmy vUDױG뼟(r[yVEA?śhW/"rm}AGwP]_z?{ʇ*{{*r]~_Cu[ GC'^١;"zӐWG_`G'}KR q+HVyA-w_:븊_/}ֺW\ױ߬?у"o:/ͼxjϢ'TO*;@|@踝1֟W:\X|`{ȢԎZ(¿Cgߞȩv0_oŝjwϖkڧ׉~}/UFgYu뵜[ʯr.:e{@Ƶo|{0ֱs_$kF|nWoe~vgk_ b7h>]'/4^>(ξ揬 >='#XL}LG֩} xѸ|/Qk'y!OEѫ*o}گ9ݷ#B:-~Uބ~죐-돊_W{=Rߑ[~Qڠ躆yln]Pޕȋ?4n')44 ~0#YP->!kUy|SӱSZOZ:־P;Qg_큥}ߤދEÒcs)G寴yGu#|t]BYWy-pZvi :u+Ol1_WWw4>m%zxC?:\w֗Ϫ,5_y =:Yd\CF[wu |?YSV{q),3շJ]$"U^'=˘/;煮?CX¾mt5qѹ1cy:6`Xtc sn8UŬakߋ5.;n=r.}Kqugww#G>:6U/OJm>F-sqǎcrUhr}>ZtV8=3.ͅJ!d1V|VtVa+mM;RGlgNh,=rs2ǭžxv9e;#ѷd/_y;tG "Y܀c΍ L+y5PiysgRrdy\rR}[Q~}JDR}55~JWB{zc {&COJs8*k:#p\-Eoz#;|><\ [w>G99^.wk>4ZZgyzK祁%O9>[rns8c(>MS=0{3bcz0g]sx΍Ԝ9>)Zz3c<+'s^ߋX=^(u/ze!L^\Xp啗}Ã>}㜞%8K)׾z`SswS}ϼ꿤nKx7_~Bܼr2Rxz˃=tL'%){hw9Zy}9\xp[*C>MS6NrPŸ^a )W=%ś^+%RKx+C%8w %2]/ߖc|kx:bG%(ӹ5E Kx77Oy^yp_B*ۃRgTl9I"ߜXz">|g \Stᑑ\ܽozéGr}y.ErOe/E d7Gb0xaw޺^gn2c%2^1XKj^9^˵_%x^://=s`+œ5FN^S0_OjziNJd,^*WR0xy6'<|29ȍWr_"%0;gk-[ g:{/- K z◾s>/iK *lտMn^yX4 rr3E3ձ9ʞ8:%Kg_y1dzR}zyʩWK͍UwΥ2{o}d&';Ru=0xK/鋣xd6{i6Jp9h%}q<{?5T_^ς-'%r֗RJHN&<8ꂡkYӗ&1|T_֜sQS{Nj_%Fc3LyhKTҹh`!G8I`a}1WJv)\#'WK×|R*ye{ Ky̋ܜJ؋CMRz"%2gJJͩn9xd#]=]B˾W}7wr3%߇F%OK.J3xqGS+-S3//杂DJdK ?9y ?{x6%79y;S2\*{9z{GVNMn^)g)\~S<9>*K{oA_G6yx+կ)xxDwySJgȵsd%4蕣k)Ss'U7G{TƼ4瞹;ECr<s<^)#r2{/=4♔ze8ƃ2kߩC朢1sOqK/=>Jyͯ=|3)IY8Vcޱq{<[mJsԿ~:=_kkϫ.W\0헱VXvl2ͱԴY3;VE`)ka5wqw5כ`{{3[^Æ7[K=A؜AО0Ic+, |wרIu[=#^l9oh{Bw>7zF㶻Dv0'HQ:dIp Ä'v4ܠ0-gX6a;9AA!+{h0M vQ;}w3}+sRޅL3 U'3ߪA]nL/ 3)cqY]>0bVL]e.}`ڊe0={C9`y\i`_ ]pyzզ_ b8@w!Llƞ#„o @vddBױ]V`ڲ&rxPb\.4:kUul%x,hξbN[qQol㗩o|~O?L>L+{_<W,j`b~]a:Лe<ûB4e|ݑ]_kJO(ފ&sOw8`ک]Lb:z7b?/iT}aay^$oy0<,',o1~d>R?Jׅ Rm'tg37GS^_/LnA_KG [HQ=lt,TGј*\_s*Վ pB1/~XG.sǪm9r aе5طeq.x ~# ??e}S%;D#wzkf>@j`\ˡ#n0g;g_d3TWo6M !S#~cU!K(pʛT;߈ W!?/dSp^$hcF Ճf;< Иh]]|؍aEU8܀Ca֛3:]BLthGt}^ >ymuN79ۺ5kTu8ЋJx%1xHu E`aC7pt=rd<^W@6)t?F,[z:<Yqͼ@_3b[}b*=>Ӏ3u'sB;„y!8ŸfflC?sλq. Qa^`6e#gj381 L&+IDX?P^K}81xRL?=έ-ս(\ L8T}4_˶q<*meT}I%\hؐ E|d t.&=NܬwS}}VqrS]oEJh<}R:K!L2se=0bq~oy.Qa"'X<8uU}d9/@P8~BzI#W4^>ߎ){|O\Ʈ>zuZ ́sg{5 xKaLa}kjb2U)[5t|I?|Y< bd\=X&nЊkT}wˌG|0s%oQ_1oUcn9Po5t+3\V]^O`=nZ*ќ//_ ,'!Lx%#dRvcZx`-yg)* {H>}F_9p̂u֖y,gX6 Sη~Ty ;Ū_x|IsutNiƺ^ K'3SiL~کooYk'=u] ?㬳! a_X>Org aڇ 6^\1. Dv},i"u"W90d<.a/z3CBO! g/p~%KϸnӫW|qu|O}=??U?OIo.CvSus}Wy=mեgyY~?VW|?ΏWt~_۞ozu?U|G7|{6X=ﬡ9OFk?SƌP][s7ݫW߿sol7|3?Qq|/yB'_~1>FK|WlM՝/}оTW;V'>yy5=>に}/V7pW_''8޳k9~kյ'k{Xu_xiusp Gosu~o/zxю?kN?7xտy̗^]o\P]Qswu\5G{ =/w7,ܸ'U~&?җ|ߥյOr]tɟG3gT[n|Fn~Z=4f{VnC{/k_w~A踷no オdK:x7rt5pG=Wq=zG>g/Vnh뗎7\]?fW7K]ݞo|~u;QOgV7~{sCo߿QߓG+7>m{Y7=/nh+F'5^jϗmhO|?<Ѿ='#(j-x >Ҟўthmg{YnƞZcz]߳.a_ӏ{_|ۋo.lz|5NnU8Wؐo۪=\]进7蔱Z-MWщ9o|ۇY׎su՘W7\tSW={u7j #?ڞ/?h>3zڷ]XݼFg5%;jF ?0iΣ跿suGc.>{, 8'~VPTgM9-=Zpn7ݾbƄY\}>AOyNsGo3hGk _y}/K7:xhoHSWN;?zOw=5zIu#7Gk_ʃ?aF'SF5x^9ڳ'F{j7V?򌧽|׵祝5(|u%Ozhyx=ùS5./;-[󳷌V?K_IꪗZ7FKw>688Wmhp45cЭxuc7{֎φ[ =s# =B#K0 y84?~l?G uz'uץYnCGlX{8Woh߿Ӛ~[~v9Zye8W7|ؐvϻ9zoģ}~n_O}hgEꃛxo[7IM>ӛquح_{{{Ju6w'WWꁱ}.jU۪k7h^=z?F+[Gw{iv٠_ hԞ~zSWkrQ}׭u9牵 ,c0mUg`G g =g ՅMڼ?$S^{=TWlom<]=a?Z|z耟R]368vmF9h cS׬oK0.7k{~kJ]WvgF{ﲱyytWl\]Ox?cS7}Mc}ɵYb͹?qG8YcvG6auC0[k.x Σ}i7_yՍ774j3qoV5]hn׾{pnp.}hWi}4\ݲ_>&Z8_\<|b#5x~_:=4~-M-~>?r.xBuy^=vUɃ40vlnk.#`/&;wÏՉs+6muIk袱[򴶿9/ڔ}cq9zW6M}l/ΰ-??cGlӿnlJ8_60yf>=_共C2ڻ 'O OY}eu8>NWqP efpclv@X硪L=U1pGP/<~Hu8s{e{ ź#rS:;~'kbvcW܎PQwDt;:aLWt0POlv{;ktgu>x lP7'e?5wx[Pp3cNa:HwU=`U7ǃo= i]1>;w x1ݹf/Ny`U s@l8nu13bGvxׄ:&\oM?ӬtO=u>O<}v[OLwo@gG*tlni|ڝj}ӟv; w$b!̃AAfY~~u6Wݮ侀0O_ݾUĝiikCp~n SH \OUxQ`^HC)?ռb{f#Ɏ4w_kn'C} ˘n,/\y}Zn?FUY0(曯ف:v;;}:w0/·yvƋ1(!H'-]ܯFw ^gxY>[Vks0 oE.fVzpd 1'4o׍%y>\~P/^#1GUk3PM_՜qgL76'T5&w6k>_~dsD&HwkjxZ{U9^mo Ƙ.vcjAqw7}Iy:1'Ðbzp5 6w9]?Vw'Q9}uj>w叇~fͽvoqqC]!?cu o]eUg'/0CawtSp;,}x]#Ǫv߅߾xw6ap+V7%̫D?ƫH7 19ZuqgΓsdOt4gI,1&\ u*;#O OP㣻=f8틡?ͻyVjn㯽ǜ@]|:<4|U~+H7/7UyaΆ~݇P̣Ǹ;f :\1o~J'X>\C;|FXg/!Գ~kHuѫ& qWkAt/||w/~W?p u^; ) :@uy]\JҍyΘ [%uػBs2 *͆ER#F/DG|[(9&m^?sx }<;~՚m>?dPwyޜ{b1_#;cUA|{E_bCN=cۍ9C?IԿv?;g~7:}GՑ[WuD4{O?p?]2YLUfZ;k>:S;cc^{+-c{.9QEca~,alR?N.szCNxYYu_p yqy̟!}7AH: ;rwa0{3T5mw,ܓsoyr7yc{oUhe7- NgHO7ԉ8zٿ0{&T5a^- ]'Po@x1ѯ<| ?ǵ~zQD3x!5ao>c7|g5_yS~_Ճoys;|=øP߯0wØ8 ={>/M_?Od2wQjz9P%fg8~OTQ7qjW6ӝ|Ic> _~_q统$E>+O=V=>ps~]n&8wEݽ~ÿ&0r`פּ7t{+;C\gs+_ξ:oXHު0BǸukn ˆ:[LdnYV{P՝iUx~E;1׆qx ?n6p+jο ϭq^9x~tg1̻|8#/sЏ uN߿#x{ߺjJuǿ*a,zuBf ڃ~} Eנ>=G3rMnoP㢌/C~sPG܏:aԽ&kvૢid]wF!fEaSn7ab>նiv,1Q 㮘߶ 8@po~$|a 90Q xp/7~'?0O^/igut;O.w8o֍|Ṭ. >3yP=IW8 GQX:ٓ8ߟ;;g?\{[_Ḟn[0]jݜp5W0a}1'HߙAbu>l6msS_Ew05;ৎaTyC1ÌKİ~&bv<+xey)w~wט@ |ȡ;~ǾOq|XqdH}>$놏~3G)f Wt< _wc+7.dOT7l7Qu+nGfc}i /1/ nz[߃:UV:fLw4q>87C8_@\gGbQ Ocs"oq?_wy-~*\1w;Xܾq_M3an›hbvHlu?0[!ܑ ? ۃ'}?Nt o|Q\'{~t wo"1r  ;ߍq2r`$=]t5JL7пߌk?Nc~Hߋ2CG.`{]79smD_0׃a}r_Ncv`~$+4g8W_xva/}3C=gTaӍuFcvNֹ%ru[~r/ꀇNcf*`gºOaaxqy\۷5sDb~)~K(cG]%t p_Q܃/a}g/Gl.~yw|O~ggu?9/t'+);7a~0֭u.oHן֏wC9~#xN~=nB{1\1{ 'x13a]֫7yJ_fBju_ōsf=Nq}Ht~E n]z019Č/sCwtOuSbd8uf^~(YD_m7~Ƴ _S]'u}pb9?=8/{W#2\o; ,LJn"s꜄{-?@c?Պ?~Bmb__Gt'F`(tU`>hH߇zY2aGaC~5yA1}Wp`7?ΰOaݯۏ^:;pq~xa];ћwot{8sϻy1}Ë?;1?Q[zE}|7M7H?cy$gq_|yVԥn!SǰW0{Gos?cUu>;<3UѺ0]1?|Fw1ߋ[{obH7d8o7o9g[] ؇hKUx;]8;^\Mֹ1;ߊ.>/?~-q;] a*us~qxџ<'f8X1Ux~NU 린 aMc>W>07ƭ;𺆰{ ^ujԮO\`ufyyC%/?^|;!ү&A`$/tB|oUk kvs6[q:aa#L_qa QP/Oc>яr: ou!9" ֑m ゘n1^ۈ/1c]SX'T)PB|[sr |aqcn u)!Mx~]1p~sc4BMW唷n Nb|ɘ3Xo¼'쳿0熰3C;o9#RwaFU# 1B]{kG!;O<:NQ3qt=XOuXՃb-d/E>E?t$\|3W[_sX}zxWCLU+m 41_3_N~Kw$:3xέZL;:ZGB)ZbvE&t?  lCq"}'B? 3Խc7|*<~߼;>ύ \6yG{-`5B?>D5jy_<;&v=O;:$u(G1S?/X}S(O c\q{]q~ w>su^ϻ3W1}7xƣ#}61?Bj\Rmajӻ*+f<[1G0wxu܍99- w;1X ux,=)'M9abuZ{)}u21ź~??ց^\Gx:/}/q?/~!4|Q?zYO#w3u sӡK U>m_w'{7֯'0y{봇 maمnxn\n ߀:|kUČb=ү/>~߀:'ޟ1[}oܣXw"x-a|UW"qs~g~v^^a={`~3(ק?#q߻X<=үA8~A)1!gmHXWctOw:{ύFg^G}0p<7#CϙxO0\fes>P~M? az>asH߁W8qF v'~t{z]m]lX.y?G畄Cb ?}c}">?t_/<= 07D5fP7E~٨g4x;ϙNpCa 7{s.\WQ1ߍTn^Tp 6 c=ڸ*#+Xz.~8.x$|^xQ_:pϩ~G\G :ҍ49yWE_9qv̫Q=er8h5A1?Nug~ɫVudM{/}s;7q)= 1]oًෞø>gnl^XGs+۳Y//F10HֹOH؟ouźnЯnqC=/Rf0 o~O : 1},7ٍ׃>o諅KFӘzL}xG%zPs3#,~ tnۍ0 0Nc_ ߼лΫtCx>'t tWc]Zc܃׆4(w>uh C^:t7מ>|.Yo)x[WztxNO}cw{Xkuxx:_ N7M?2Doby\9+yČ3w?$w}$+K:ֽP~y9xĝ=ü~]w_ꏛ1~>|X̝|ј}72ԭO8Ɵ3|`ELwPߘ\ ^?'[Q< *S?DŽ/ׁȸxS5auCwLcwx^8|G¼zߏ]>̯rqI/.-^svoc'úUw JQ)ϼ9x81`B+o 6udq_qKe:</Hw?cȗpS;yx1wßHb?*d*>'fm\:n?svHw+|lSsܼTU| ?|>' '0ums72>G70zw89oRs~?%jE>!apqZOEww71ӎ{ _r#K~@ yyճEkP_tuϙ9|I|_د-f/'X1>;ۇ~S\XׂgHK1߄u=q$bn|Acv}^ݟ1Ukyat|w5Q7?'V샾}𼰾3pίvc?b? 87 Oَ0榻soz)W~k3/vwu1-P f<Ę8k{~N7 ^_u ϣwyB?Ώ]UCx]Gh.qpχoޏދ^:I|^0<ܘS$E{>GH7ϥ~)x??{IxX:Q] [-q?LcNS8??^c_oyb^醱*&gItO9p ًs&|nA7:wzGY?$֛Ey? sGhj if黱7:tܯcN*xOҍaFq}~>9.z ^o=_`bu[~3C:/[ߝDw c]~俺cNc߂O^x]Xt0#~VX{y.&۱~Ƶ‹;u;fܗt~ !g!YMlU#UGf,|n]9}eo_cOD E#:8 ?bq侰;>!${1tǰl>b_)c6u~+EQܿH?N;1'>q<|e؇סF]$fO8:>a_ w0|^W]KszġPV 7~hq9u1u2uNHfkm~ X՟kֹ^4O|f5Z܎K;1s hؿ:C xrM.xV[yuuc,1Go>i?~u~uŘc*\Hw§?-n o k\ϧ^qyB=Ά}>1f Mb]KsE?ߧ;"}'>9u^8ѽc0hhl՟kk)^<_֥ڞo,1h,w[\?;\r!VB\B|r]c,=\̵2ϵrs-^jZ^sP^ccbb!u \)\]/>7ho,ky6,9w%}XR|ZL[K::Zh?o)7Vϻ&/Ei!Ϸ,繽_W+rzTuŜ>;x9^k_TX߅d1i/jr;^srRZi^ s!RxǘwZ[^Ҏůk1ϰ=4no\شsM\uu|f{O\R¥^[{i;ﱕk絕꿷79歼VK]^V.&em)mo}]Rܯiu)qq͆z]zlf;LYv%+5,.op%ەab_nl8ƮjR]V^\]{f%ڛ\s\ޗ=|ZB_Wc61\kgtz>zt%V_o+wReV{%\svc|Ϭَcs1?8}>ǛWr-u.bW{\:BT_:.u^:Zu3_qϕr \m9xe~]sv[y.hu,x>g;Jnc\Ԏ:=_I5٘3[X\v徏㿐2j93ev/3?}cv+uک+=.9isoLRүz}kq\qVlJ7Wy^BI;v;BQʁVNx){0l^וtnmtr_W곽}_×{]ʾ-sΘ`aԘRcKSsX`׶ԯk׳үl\oz`+V.kI[h{okՏo;_o{zs=w}o5wv_7sk^^u}۫?xm.ԫUuc}vwpkn{u;yپuWumwꢣ}o~jwlo$~$~o7EFi]Rewy]QW!uR!uR!uR!uR!uRuZuZuZuZuZm$uIFRm$uIFRm$uiFZmuiFZmuiFZmduYFVmduYFVmduyF^muyF^muyF^QmuEFQQmuEFQQmueFYQmueFYQmueFnS>s۠vnmP jA6۠vjW]vjW]vjW]vUjW]vUjW]vj7vj7vj7vj7vj7vSj7vSj7vSj7vSj7vSj7v3j7v3j7v3j7v3j7v3j7vsj7vsj7vsj7vsj7vsj7v jv jv jv jv jvKjvKjvKjvKjvKjx ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux ^5W Ux%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWBx%+!^ JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRx+%^)JWJRxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW *!^%īxUBJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īxRUJJW)*%^īx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW*#^eīx2UFʈW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxrUNʉW9*'^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W ^īxU UA*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^īxUJUI*W%$^+ۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oۅv!]oەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەv%]oWەI{i (h>k$ #@l-÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷>|÷=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷o=|{÷۟/ٯx_g~2PFupscl/inst/doc/countreg.Rnw0000644000175100001440000017322711507177506015316 0ustar hornikusers\documentclass[nojss]{jss} %% need no \usepackage{Sweave} \usepackage{thumbpdf} %% new commands \newcommand{\class}[1]{``\code{#1}''} \newcommand{\fct}[1]{\code{#1()}} \author{Achim Zeileis\\Universit\"at Innsbruck \And Christian Kleiber\\Universit\"at Basel \And Simon Jackman\\Stanford University} \Plainauthor{Achim Zeileis, Christian Kleiber, Simon Jackman} \title{Regression Models for Count Data in \proglang{R}} \Plaintitle{Regression Models for Count Data in R} \Keywords{GLM, Poisson model, negative binomial model, hurdle model, zero-inflated model} \Abstract{ The classical Poisson, geometric and negative binomial regression models for count data belong to the family of generalized linear models and are available at the core of the statistics toolbox in the \proglang{R} system for statistical computing. After reviewing the conceptual and computational features of these methods, a new implementation of hurdle and zero-inflated regression models in the functions \fct{hurdle} and \fct{zeroinfl} from the package \pkg{pscl} is introduced. It re-uses design and functionality of the basic \proglang{R} functions just as the underlying conceptual tools extend the classical models. Both hurdle and zero-inflated model, are able to incorporate over-dispersion and excess zeros---two problems that typically occur in count data sets in economics and the social sciences---better than their classical counterparts. Using cross-section data on the demand for medical care, it is illustrated how the classical as well as the zero-augmented models can be fitted, inspected and tested in practice. } \Address{ Achim Zeileis\\ Department of Statistics\\ Universit\"at Innsbruck\\ Universit\"atsstr.~15\\ 6020 Innsbruck, Austria\\ E-mail: \email{Achim.Zeileis@R-project.org}\\ URL: \url{http://statmath.wu-wien.ac.at/~zeileis/} } \begin{document} \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE} %\VignetteIndexEntry{Regression Models for Count Data in R} %\VignetteDepends{sandwich,zoo,lmtest,MASS,car} %\VignetteKeywords{GLM, Poisson model, negative binomial model, hurdle model, zero-inflated model} %\VignettePackage{pscl} <>= library("sandwich") library("lmtest") library("MASS") library("car") library("pscl") load("DebTrivedi.rda") clog <- function(x) log(x + 0.5) cfac <- function(x, breaks = NULL) { if(is.null(breaks)) breaks <- unique(quantile(x, 0:10/10)) x <- cut(x, breaks, include.lowest = TRUE, right = FALSE) levels(x) <- paste(breaks[-length(breaks)], ifelse(diff(breaks) > 1, c(paste("-", breaks[-c(1, length(breaks))] - 1, sep = ""), "+"), ""), sep = "") return(x) } options(prompt = "R> ") refit_models <- TRUE @ \section{Introduction} \label{sec:intro} Modeling count variables is a common task in economics and the social sciences. The classical Poisson regression model for count data is often of limited use in these disciplines because empirical count data sets typically exhibit over-dispersion and/or an excess number of zeros. The former issue can be addressed by extending the plain Poisson regression model in various directions: e.g., using sandwich covariances or estimating an additional dispersion parameter (in a so-called quasi-Poisson model). Another more formal way is to use a negative binomial (NB) regression. All of these models belong to the family of generalized linear models \citep[GLMs, see][]{countreg:Nelder+Wedderburn:1972,countreg:McCullagh+Nelder:1989}. However, although these models typically can capture over-dispersion rather well, they are in many applications not sufficient for modeling excess zeros. Since \cite{countreg:Mullahy:1986} and \cite{countreg:Lambert:1992} there is increased interest, both in the econometrics and statistics literature, in zero-augmented models that address this issue by a second model component capturing zero counts. Hurdle models \citep{countreg:Mullahy:1986} combine a left-truncated count component with a right-censored hurdle component. Zero-inflation models \citep{countreg:Lambert:1992} take a somewhat different approach: they are mixture models that combine a count component and a point mass at zero. An overview of count data models in econometrics, including hurdle and zero-inflated models, is provided in \cite{countreg:Cameron+Trivedi:1998,countreg:Cameron+Trivedi:2005}. In \proglang{R} \citep{countreg:R:2008}, GLMs are provided by the model fitting functions \fct{glm} \citep{countreg:Chambers+Hastie:1992} in the \pkg{stats} package and \fct{glm.nb} in the \pkg{MASS} package \citep{countreg:Venables+Ripley:2002} along with associated methods for diagnostics and inference. Here, we discuss the implementation of hurdle and zero-inflated models in the functions \fct{hurdle} and \fct{zeroinfl} in the \pkg{pscl} package \citep{countreg:Jackman:2008}, available from the Comprehensive \proglang{R} Archive Network (CRAN) at \url{http://CRAN.R-project.org/package=pscl}. The design of both modeling functions as well as the methods operating on the associated fitted model objects follows that of the base \proglang{R} functionality so that the new software integrates easily into the computational toolbox for modeling count data in \proglang{R}. The remainder of this paper is organized as follows: Section~\ref{sec:software} discusses both the classical and zero-augmented count data models and their \proglang{R} implementations. In Section~\ref{sec:illustrations}, all count regression models discussed are applied to a microeconomic cross-section data set on the demand for medical care. The summary in Section~\ref{sec:summary} concludes the main part of the paper; further technical details are presented in the appendix. \section{Models and software} \label{sec:software} \begin{table}[b!] \begin{center} \begin{tabular}{|l|l|l|p{7.4cm}|} \hline Type & Distribution & Method & Description \\ \hline GLM & Poisson & ML & Poisson regression: classical GLM, estimated by maximum likelihood (ML) \\ & & quasi & ``quasi-Poisson regression'': same mean function, estimated by quasi-ML (QML) or equivalently generalized estimating equations (GEE), inference adjustment via estimated dispersion parameter \\ & & adjusted & ``adjusted Poisson regression'': same mean function, estimated by QML/GEE, inference adjustment via sandwich covariances\\ & NB & ML & NB regression: extended GLM, estimated by ML including additional shape parameter \\ \hline zero-augmented & Poisson & ML & zero-inflated Poisson (ZIP), hurdle Poisson \\ & NB & ML & zero-inflated NB (ZINB), hurdle NB \\ \hline \end{tabular} \caption{\label{tab:overview} Overview of discussed count regression models. All GLMs use the same log-linear mean function ($\log(\mu) = x^\top \beta$) but make different assumptions about the remaining likelihood. The zero-augmented models extend the mean function by modifying (typically, increasing) the likelihood of zero counts.} \end{center} \end{table} In this section, we briefly outline the theory and its implementation in \proglang{R} \citep{countreg:R:2008} for some basic count data regression models as well as their zero-augmented extensions (see Table~\ref{tab:overview} for an overview). The classical Poisson, geometric and negative binomial models are described in a generalized linear model (GLM) framework; they are implemented in \proglang{R} by the \fct{glm} function \citep{countreg:Chambers+Hastie:1992} in the \pkg{stats} package and the \fct{glm.nb} function in the \pkg{MASS} package \citep{countreg:Venables+Ripley:2002}. The hurdle and zero-inflated extensions of these models are provided by the functions \fct{hurdle} and \fct{zeroinfl} in package \pkg{pscl} \citep{countreg:Jackman:2008}. The original implementation of \cite{countreg:Jackman:2008} was improved by \cite{countreg:Kleiber+Zeileis:2008} for \pkg{pscl} to make the fitting functions and the fitted model objects more similar to their \fct{glm} and \fct{glm.nb} counterparts. The most important features of the new \fct{hurdle} and \fct{zeroinfl} functions are discussed below while some technical aspects are deferred to the appendix. An alternative implementation of zero-inflated count models is available in the currently orphaned package \pkg{zicounts} \citep{countreg:Mwalili:2007}. Another extension of zero-inflated Poisson models is available in package \pkg{ZIGP} \citep{countreg:Erhardt:2008} which allows dispersion---in addition to mean and zero-inflation level---to depend on regressors. However, the interfaces of both packages are less standard with fewer (or no) standard methods provided. Therefore, re-using generic inference tools is more cumbersome and hence these packages are not discussed here. Two packages that embed zero-inflated models into more general implementations of GLMs and GAMs (generalized additive models) are \pkg{gamlss} \citep{countreg:Stasinopoulos+Rigby:2007} and \pkg{VGAM} \citep{countreg:Yee:2008}. The latter also provides hurdle models (under the name zero-altered models). Both implementations allow specification of only one set of regressors. In addition to zero-augmented models, there are many further extensions to the classical Poisson model which are not discussed here. Some important model classes include finite mixture models---implemented in \proglang{R} in package \pkg{flexmix} \citep{countreg:Leisch:2004}---and generalized estimating equations (GEE)---provided in \proglang{R} by package \pkg{geepack} \citep{countreg:Halekoh+Hojsgaard+Yan:2006}---and mixed-effects models---available in \proglang{R} in packages \pkg{lme4} and \pkg{nlme} \citep[see][]{countreg:Pinheiro+Bates:2000}. Further information about the models and alternative \proglang{R} implementations can be found in the respective references. \subsection{Generalized linear models} \subsubsection{Model frame} The basic count data regression models can be represented and understood using the GLM framework that emerged in the statistical literature in the early 1970s \citep{countreg:Nelder+Wedderburn:1972}. In the following, we briefly sketch some important aspects relating to the unifying conceptual properties and their implementation in \proglang{R}---for a detailed theoretical account of GLMs see \cite{countreg:McCullagh+Nelder:1989}. GLMs describe the dependence of a scalar variable $y_i$ ($i = 1, \dots, n$) on a vector of regressors $x_i$. The conditional distribution of $y_i | x_i$ is a linear exponential family with probability density function \begin{equation} \label{eq:family} f(y; \lambda, \phi) \quad = \quad \exp \left( \frac{y \cdot \lambda - b(\lambda)}{\phi} + c(y, \phi) \right), \end{equation} where $\lambda$ is the canonical parameter that depends on the regressors via a linear predictor and $\phi$ is a dispersion parameter that is often known. The functions $b(\cdot)$ and $c(\cdot)$ are known and determine which member of the family is used, e.g., the normal, binomial or Poisson distribution. Conditional mean and variance of $y_i$ are given by $\E[y_i \, | \, x_i] = \mu_i = b'(\lambda_i)$ and $\VAR[y_i \, | \, x_i] = \phi \cdot b''(\lambda_i)$. Thus, up to a scale or dispersion parameter $\phi$, the distribution of $y_i$ is determined by its mean. Its variance is proportional to $V(\mu) = b''(\lambda(\mu))$, also called variance function. The dependence of the conditional mean $\E[y_i \, | \, x_i] = \mu_i$ on the regressors $x_i$ is specified via \begin{equation} \label{eq:mean} g(\mu_i) \quad = \quad x_i^\top \beta, \end{equation} where $g(\cdot)$ is a known link function and $\beta$ is the vector of regression coefficients which are typically estimated by maximum likelihood (ML) using the iterative weighted least squares (IWLS) algorithm. Instead of viewing GLMs as models for the full likelihood (as determined by Equation~\ref{eq:family}), they can also be regarded as regression models for the mean only (as specified in Equation~\ref{eq:mean}) where the estimating functions used for fitting the model are derived from a particular family. As illustrated in the remainder of this section, the estimating function point of view is particularly useful for relaxing the assumptions imposed by the Poisson likelihood. \proglang{R} provides a very flexible implementation of the general GLM framework in the function \fct{glm} \citep{countreg:Chambers+Hastie:1992} contained in the \pkg{stats} package. Its most important arguments are \begin{Soutput} glm(formula, data, subset, na.action, weights, offset, family = gaussian, start = NULL, control = glm.control(...), model = TRUE, y = TRUE, x = FALSE, ...) \end{Soutput} where \code{formula} plus \code{data} is the now standard way of specifying regression relationships in \proglang{R}/\proglang{S} introduced in \cite{countreg:Chambers+Hastie:1992}. The remaining arguments in the first line (\code{subset}, \code{na.action}, \code{weights}, and \code{offset}) are also standard for setting up formula-based regression models in \proglang{R}/\proglang{S}. The arguments in the second line control aspects specific to GLMs while the arguments in the last line specify which components are returned in the fitted model object (of class \class{glm} which inherits from \class{lm}). By default the model frame (\code{model}) and the vector $(y_1, \dots, y_n)^\top$ (\code{y}) but not the model matrix (\code{x}, containing $x_1, \dots, x_n$ combined row-wise) are included. The \code{family} argument specifies the link $g(\mu)$ and variance function $V(\mu)$ of the model, \code{start} can be used to set starting values for $\beta$, and \code{control} contains control parameters for the IWLS algorithm. For further arguments to \fct{glm} (including alternative specifications of starting values) see \code{?glm}. The high-level \fct{glm} interface relies on the function \fct{glm.fit} which carries out the actual model fitting (without taking a formula-based input or returning classed output). For \class{glm} objects, a set of standard methods (including \fct{print}, \fct{predict}, \fct{logLik} and many others) are provided. Inference can easily be performed using the \fct{summary} method for assessing the regression coefficients via partial Wald tests or the \fct{anova} method for comparing nested models via an analysis of deviance. These inference functions are complemented by further generic inference functions in contributed packages: e.g., \pkg{lmtest} \citep{countreg:Zeileis+Hothorn:2002} provides a \fct{coeftest} function that also computes partial Wald tests but allows for specification of alternative (robust) standard errors. Similarly, \fct{waldtest} from \pkg{lmtest} and \fct{linearHypothesis} from \pkg{car} \citep{countreg:Fox:2002} assess nested models via Wald tests (using different specifications for the nested models). Finally, \fct{lrtest} from \pkg{lmtest} compares nested models via likelihood ratio (LR) tests based on an interface similar to \fct{waldtest} and \fct{anova}. \subsubsection{Poisson model} The simplest distribution used for modeling count data is the Poisson distribution with probability density function \begin{equation} \label{eq:Poisson} f(y; \mu) \quad = \quad \frac{\exp(-\mu) \cdot \mu^{y}}{y!}, \end{equation} which is of type~(\ref{eq:family}) and thus Poisson regression is a special case of the GLM framework. The canonical link is $g(\mu) = \log(\mu)$ resulting in a log-linear relationship between mean and linear predictor. The variance in the Poisson model is identical to the mean, thus the dispersion is fixed at $\phi = 1$ and the variance function is $V(\mu) = \mu$. In \proglang{R}, this can easily be specified in the \fct{glm} call just by setting \code{family = poisson} (where the default log link could also be changed in the \fct{poisson} call). In practice, the Poisson model is often useful for describing the mean $\mu_i$ but underestimates the variance in the data, rendering all model-based tests liberal. One way of dealing with this is to use the same estimating functions for the mean, but to base inference on the more robust sandwich covariance matrix estimator. In \proglang{R}, this estimator is provided by the \fct{sandwich} function in the \pkg{sandwich} package \citep{countreg:Zeileis:2004,countreg:Zeileis:2006}. \subsubsection{Quasi-Poisson model} Another way of dealing with over-dispersion is to use the mean regression function and the variance function from the Poisson GLM but to leave the dispersion parameter $\phi$ unrestricted. Thus, $\phi$ is not assumed to be fixed at $1$ but is estimated from the data. This strategy leads to the same coefficient estimates as the standard Poisson model but inference is adjusted for over-dispersion. Consequently, both models (quasi-Poisson and sandwich-adjusted Poisson) adopt the estimating function view of the Poisson model and do \emph{not} correspond to models with fully specified likelihoods. In \proglang{R}, the quasi-Poisson model with estimated dispersion parameter can also be fitted with the \fct{glm} function, simply setting \code{family = quasipoisson}. \subsubsection{Negative binomial models} A third way of modeling over-dispersed count data is to assume a negative binomial (NB) distribution for $y_i | x_i$ which can arise as a gamma mixture of Poisson distributions. One parameterization of its probability density function is \begin{equation} \label{eq:negbin} f(y; \mu, \theta) \quad = \quad \frac{\Gamma(y + \theta)}{\Gamma(\theta) \cdot y!} \cdot \frac{\mu^{y} \cdot \theta^\theta}{(\mu + \theta)^{y + \theta}}, \end{equation} with mean $\mu$ and shape parameter $\theta$; $\Gamma(\cdot)$ is the gamma function. For every fixed $\theta$, this is of type~(\ref{eq:family}) and thus is another special case of the GLM framework. It also has $\phi = 1$ but with variance function $V(\mu) = \mu + \frac{\mu^2}{\theta}$. Package \pkg{MASS} \citep{countreg:Venables+Ripley:2002} provides the family function \fct{negative.binomial} that can directly be plugged into \fct{glm} provided the argument \code{theta} is specified. One application would be the geometric model, the special case where $\theta = 1$, which can consequently be fitted in \proglang{R} by setting \code{family = negative.binomial(theta = 1)} in the \fct{glm} call. If $\theta$ is not known but to be estimated from the data, the negative binomial model is not a special case of the general GLM---however, an ML fit can easily be computed re-using GLM methodology by iterating estimation of $\beta$ given $\theta$ and vice versa. This leads to ML estimates for both $\beta$ and $\theta$ which can be computed using the function \fct{glm.nb} from the package \pkg{MASS}. It returns a model of class \class{negbin} inheriting from \class{glm} for which appropriate methods to the generic functions described above are again available. \subsection{Hurdle models} In addition to over-dispersion, many empirical count data sets exhibit more zero observations than would be allowed for by the Poisson model. One model class capable of capturing both properties is the hurdle model, originally proposed by \cite{countreg:Mullahy:1986} in the econometrics literature \citep[see][for an overview]{countreg:Cameron+Trivedi:1998,countreg:Cameron+Trivedi:2005}. They are two-component models: A truncated count component, such as Poisson, geometric or negative binomial, is employed for positive counts, and a hurdle component models zero vs.\ larger counts. For the latter, either a binomial model or a censored count distribution can be employed. More formally, the hurdle model combines a count data model $f_\mathrm{count}(y; x, \beta)$ (that is left-truncated at $y = 1$) and a zero hurdle model $f_\mathrm{zero}(y; z, \gamma)$ (right-censored at $y = 1$): \begin{equation} \label{eq:hurdle} f_\mathrm{hurdle}(y; x, z, \beta, \gamma) = \left\{ \begin{array}{ll} f_\mathrm{zero}(0; z, \gamma) & \mbox{if } y = 0, \\ (1 - f_\mathrm{zero}(0; z, \gamma)) \cdot f_\mathrm{count}(y; x, \beta)/(1 - f_\mathrm{count}(0; x, \beta)) & \mbox{if } y > 0 \end{array} \right. \end{equation} The model parameters $\beta$, $\gamma$, and potentially one or two additional dispersion parameters $\theta$ (if $f_\mathrm{count}$ or $f_\mathrm{zero}$ or both are negative binomial densities) are estimated by ML, where the specification of the likelihood has the advantage that the count and the hurdle component can be maximized separately. The corresponding mean regression relationship is given by \begin{equation} \label{eq:hurdle-mean} \log(\mu_i) \quad = \quad x_i^\top \beta + \log(1 - f_\mathrm{zero}(0; z_i, \gamma)) - \log(1 - f_\mathrm{count}(0; x_i, \beta)), \end{equation} again using the canonical log link. For interpreting the zero model as a hurdle, a binomial GLM is probably the most intuitive specification\footnote{Note that binomial logit and censored geometric models as the hurdle part both lead to the same likelihood function and thus to the same coefficient estimates \citep{countreg:Mullahy:1986}.}. Another useful interpretation arises if the same regressors $x_i = z_i$ are used in the same count model in both components $f_\mathrm{count} = f_\mathrm{zero}$: A test of the hypothesis $\beta = \gamma$ then tests whether the hurdle is needed or not. In \proglang{R}, hurdle count data models can be fitted with the \fct{hurdle} function from the \pkg{pscl} package \citep{countreg:Jackman:2008}. Both its fitting function and the returned model objects of class \class{hurdle} are modelled after the corresponding GLM functionality in \proglang{R}. The arguments of \fct{hurdle} are given by \begin{Soutput} hurdle(formula, data, subset, na.action, weights, offset, dist = "poisson", zero.dist = "binomial", link = "logit", control = hurdle.control(...), model = TRUE, y = TRUE, x = FALSE, ...) \end{Soutput} where the first line contains the standard model-frame specifications, the second and third lines have the arguments specific to hurdle models and the arguments in the last line control some components of the return value. If a \code{formula} of type \code{y ~ x1 + x2} is supplied, it not only describes the count regression relationship of $y_i$ and $x_i$ but also implies that the same set of regressors is used for the zero hurdle component $z_i = x_i$. This is could be made more explicit by equivalently writing the formula as \code{y ~ x1 + x2 | x1 + x2}. Of course, a different set of regressors could be specified for the zero hurdle component, e.g., \code{y ~ x1 + x2 | z1 + z2 + z3}, giving the count data model \code{y ~ x1 + x2} conditional on (\code{|}) the zero hurdle model \code{y ~ z1 + z2 + z3}. The model likelihood can be specified by the \code{dist}, \code{zero.dist} and \code{link} arguments. The count data distribution \code{dist} is \code{"poisson"} by default (it can also be set to \code{"negbin"} or \code{"geometric"}), for which the canonical log link is always used. The distribution for the zero hurdle model can be specified via \code{zero.dist}. The default is a binomial model with \code{link} (defaulting to \code{"logit"}, but all link functions of the \fct{binomial} family are also supported), alternatively a right-censored count distribution (Poisson, negative binomial or geometric, all with log link) could be specified. ML estimation of all parameters employing analytical gradients is carried out using \proglang{R}'s \fct{optim} with control options set in \fct{hurdle.control}. Starting values can be user-supplied, otherwise they are estimated by \fct{glm.fit} (the default). The covariance matrix estimate is derived numerically using the Hessian matrix returned by \fct{optim}. See Appendix~\ref{app:hurdle} for further technical details. The returned fitted-model object of class \class{hurdle} is a list similar to \class{glm} objects. Some of its elements---such as \code{coefficients} or \code{terms}---are lists with a zero and count component, respectively. For details see Appendix~\ref{app:hurdle}. A set of standard extractor functions for fitted model objects is available for objects of class \class{hurdle}, including the usual \fct{summary} method that provides partial Wald tests for all coefficients. No \fct{anova} method is provided, but the general \fct{coeftest}, \fct{waldtest} from \pkg{lmtest}, and \fct{linearHypothesis} from \pkg{car} can be used for Wald tests and \fct{lrtest} from \pkg{lmtest} for LR tests of nested models. The function \fct{hurdletest} is a convenience interface to \fct{linearHypothesis} for testing for the presence of a hurdle (which is only applicable if the same regressors and the same count distribution are used in both components). \subsection{Zero-inflated models} Zero-inflated models \citep{countreg:Mullahy:1986,countreg:Lambert:1992} are another model class capable of dealing with excess zero counts \citep[see][for an overview]{countreg:Cameron+Trivedi:1998,countreg:Cameron+Trivedi:2005}. They are two-component mixture models combining a point mass at zero with a count distribution such as Poisson, geometric or negative binomial. Thus, there are two sources of zeros: zeros may come from both the point mass and from the count component. For modeling the unobserved state (zero vs.\ count), a binary model is used: in the simplest case only with an intercept but potentially containing regressors. Formally, the zero-inflated density is a mixture of a point mass at zero $I_{\{0\}}(y)$ and a count distribution $f_\mathrm{count}(y; x, \beta)$. The probability of observing a zero count is inflated with probability $\pi = f_\mathrm{zero}(0; z, \gamma)$: \begin{equation} \label{eq:zeroinfl} f_\mathrm{zeroinfl}(y; x, z, \beta, \gamma) \quad = \quad f_\mathrm{zero}(0; z, \gamma) \cdot I_{\{0\}}(y) \; + \; (1 - f_\mathrm{zero}(0; z, \gamma)) \cdot f_\mathrm{count}(y; x, \beta), \end{equation} where $I(\cdot)$ is the indicator function and the unobserved probability $\pi$ of belonging to the point mass component is modelled by a binomial GLM $\pi = g^{-1}(z^\top \gamma)$. The corresponding regression equation for the mean is \begin{equation} \label{eq:zeroinfl-mean} \mu_i \quad = \quad \pi_i \cdot 0 \; + \; (1 - \pi_i) \cdot \exp(x_i^\top \beta), \end{equation} using the canonical log link. The vector of regressors in the zero-inflation model $z_i$ and the regressors in the count component $x_i$ need not to be distinct---in the simplest case, $z_i = 1$ is just an intercept. The default link function $g(\pi)$ in binomial GLMs is the logit link, but other links such as the probit are also available. The full set of parameters of $\beta$, $\gamma$, and potentially the dispersion parameter $\theta$ (if a negative binomial count model is used) can be estimated by ML. Inference is typically performed for $\beta$ and $\gamma$, while $\theta$ is treated as a nuisance parameter even if a negative binomial model is used. In \proglang{R}, zero-inflated count data models can be fitted with the \fct{zeroinfl} function from the \pkg{pscl} package. Both the fitting function interface and the returned model objects of class \class{zeroinfl} are almost identical to the corresponding \fct{hurdle} functionality and again modelled after the corresponding GLM functionality in \proglang{R}. The arguments of \fct{zeroinfl} are given by \begin{Soutput} zeroinfl(formula, data, subset, na.action, weights, offset, dist = "poisson", link = "logit", control = zeroinfl.control(...), model = TRUE, y = TRUE, x = FALSE, ...) \end{Soutput} where all arguments have almost the same meaning as for \fct{hurdle}. The main difference is that there is no \code{zero.dist} argument: a binomial model is always used for distribution in the zero-inflation component. Again, ML estimates of all parameters are obtained from \fct{optim}, with control options set in \fct{zeroinfl.control} and employing analytical gradients. Starting values can be user-supplied, estimated by the expectation maximization (EM) algorithm, or by \fct{glm.fit} (the default). The covariance matrix estimate is derived numerically using the Hessian matrix returned by \fct{optim}. Using EM estimation for deriving starting values is typically slower but can be numerically more stable. It already maximizes the likelihood, but a single \fct{optim} iteration is used for determining the covariance matrix estimate. See Appendix~\ref{app:zeroinfl} for further technical details. The returned fitted model object is of class \class{zeroinfl} whose structure is virtually identical to that of \class{hurdle} models. As above, a set of standard extractor functions for fitted model objects is available for objects of class \class{zeroinfl}, including the usual \fct{summary} method that provides partial Wald tests for all coefficients. Again, no \fct{anova} method is provided, but the general functions \fct{coeftest} and \fct{waldtest} from \pkg{lmtest}, as well as \fct{linearHypothesis} from \pkg{car} can be used for Wald tests, and \fct{lrtest} from \pkg{lmtest} for LR tests of nested models. \section{Application and illustrations} \label{sec:illustrations} In the following, we illustrate all models described above by applying them to a cross-sectional data set from health economics. Before the parametric models are fitted, a basic exploratory analysis of the data set is carried out that addresses some problems typically encountered when visualizing count data. At the end of the section, all fitted models are compared highlighting that the modelled mean function is similar but the fitted likelihood is different and thus, the models differ with respect to explaining over-dispersion and/or the number of zero counts. \subsection{Demand for medical care by the elderly} \cite{countreg:Deb+Trivedi:1997} analyze data on 4406 individuals, aged 66 and over, who are covered by Medicare, a public insurance program. Originally obtained from the US National Medical Expenditure Survey (NMES) for 1987/88, the data are available from the data archive of the \textit{Journal of Applied Econometrics} at \url{http://www.econ.queensu.ca/jae/1997-v12.3/deb-trivedi/}. It was prepared for an \proglang{R} package accompanying \cite{countreg:Kleiber+Zeileis:2008} and is also available as \code{DebTrivedi.rda} in the \textit{Journal of Statistical Software} together with \cite{countreg:Zeileis:2006}. The objective is to model the demand for medical care---as captured by the number of physician/non-physician office and hospital outpatient visits---by the covariates available for the patients. Here, we adopt the number of physician office visits \code{ofp} as the dependent variable and use the health status variables \code{hosp} (number of hospital stays), \code{health} (self-perceived health status), \code{numchron} (number of chronic conditions), as well as the socio-economic variables \code{gender}, \code{school} (number of years of education), and \code{privins} (private insurance indicator) as regressors. For convenience, we select the variables used from the full data set: <
>= dt <- DebTrivedi[, c(1, 6:8, 13, 15, 18)] @ <>= dt2 <- DebTrivedi[, -(2:6)] dt2$region <- relevel(dt2$region, "other") @ To obtain a first overview of the dependent variable, we employ a histogram of the observed count frequencies. In \proglang{R} various tools could be used, e.g., \code{hist(dt$ofp, breaks = 0:90 - 0.5)} for a histogram with rectangles or <>= plot(table(dt$ofp)) @ (see Figure~\ref{fig:ofp}) for a histogram with lines which brings out the extremely large counts somewhat better. The histogram illustrates that the marginal distribution exhibits both substantial variation and a rather large number of zeros. \setkeys{Gin}{width=.5\textwidth} \begin{figure}[p] \begin{center} <>= plot(table(dt$ofp), xlab = "Number of physician office visits", ylab = "Frequency", axes = FALSE) axis(2) axis(1, at = 0:18 * 5, labels = FALSE) axis(1, at = 0:9 * 10) @ \caption{\label{fig:ofp} Frequency distribution for number of physician office visits.} \end{center} \end{figure} \setkeys{Gin}{width=\textwidth} \begin{figure}[p] \begin{center} <>= par(mfrow = c(1, 2)) plot(ofp ~ numchron, data = dt) plot(clog(ofp) ~ cfac(numchron), data = dt) @ \caption{\label{fig:bad-good} Bivariate explorative displays for number of physician office visits plotted against number of chronic conditions.} \end{center} \end{figure} A natural second step in the exploratory analysis is to look at pairwise bivariate displays of the dependent variable against each of the regressors bringing out the partial relationships. In \proglang{R}, such bivariate displays can easily be generated with the \fct{plot} method for formulas, e.g., via \code{plot(y ~ x)}. This chooses different types of displays depending on the combination of quantitative and qualitative variables as dependent or regressor variable, respectively. However, count variables are treated as all numerical variables and therefore the command <>= plot(ofp ~ numchron, data = dt) @ produces a simple scatterplot as shown in the left panel of Figure~\ref{fig:bad-good}. This is clearly not useful as both variables are count variables producing numerous ties in the bivariate distribution and thus obscuring a large number of points in the display. To overcome the problem, it is useful to group the number of chronic conditions into a factor with levels `0', `1', `2', and `3 or more' and produce a boxplot instead of a scatterplot. Furthermore, the picture is much clearer if the dependent variable is log-transformed (just as all count regression models discussed above also use a log link by default). As there are zero counts as well, we use a convenience function \fct{clog} providing a continuity-corrected logarithm. <>= clog <- function(x) log(x + 0.5) @ For transforming a count variable to a factor (for visualization purposes only), we define another convenience function \fct{cfac} <>= cfac <- function(x, breaks = NULL) { if(is.null(breaks)) breaks <- unique(quantile(x, 0:10/10)) x <- cut(x, breaks, include.lowest = TRUE, right = FALSE) levels(x) <- paste(breaks[-length(breaks)], ifelse(diff(breaks) > 1, c(paste("-", breaks[-c(1, length(breaks))] - 1, sep = ""), "+"), ""), sep = "") return(x) } @ which by default tries to take an educated guess how to choose the breaks between the categories. Clearly, the resulting exploratory display of the transformed variables produced by <>= plot(clog(ofp) ~ cfac(numchron), data = dt) @ (shown in the right panel of Figure~\ref{fig:bad-good}) brings out much better how the number of doctor visits increases with the number of chronic conditions. \setkeys{Gin}{width=\textwidth} \begin{figure}[p] \begin{center} <>= par(mfrow = c(3, 2)) plot(clog(ofp) ~ health, data = dt, varwidth = TRUE, ylab = "Physician office visits (in clogs)", xlab = "Self-perceived health status", main = "health") plot(clog(ofp) ~ cfac(numchron), data = dt, ylab = "Physician office visits (in clogs)", xlab = "Number of chronic conditions", main = "numchron") plot(clog(ofp) ~ privins, data = dt, varwidth = TRUE, ylab = "Physician office visits (in clogs)", xlab = "Covered by private insurance", main = "privins") plot(clog(ofp) ~ cfac(hosp, c(0:2, 8)), data = dt, ylab = "Physician office visits (in clogs)", xlab = "Number of hospital stays", main = "hosp") plot(clog(ofp) ~ gender, data = dt, varwidth = TRUE, ylab = "Physician office visits (in clogs)", xlab = "Gender", main = "gender") plot(cfac(ofp, c(0:2, 4, 6, 10, 100)) ~ school, data = dt, breaks = 9, ylab = "Physician office visits (number of visits)", xlab = "Number of years of education", main = "school") @ \caption{\label{fig:ofp2} Number of physician office visits plotted against regressors used.} \end{center} \end{figure} Analogous displays for the number of physician office visits against all regressors can be produced via <>= plot(clog(ofp) ~ health, data = dt, varwidth = TRUE) plot(clog(ofp) ~ cfac(numchron), data = dt) plot(clog(ofp) ~ privins, data = dt, varwidth = TRUE) plot(clog(ofp) ~ cfac(hosp, c(0:2, 8)), data = dt) plot(clog(ofp) ~ gender, data = dt, varwidth = TRUE) plot(cfac(ofp, c(0:2, 4, 6, 10, 100)) ~ school, data = dt, breaks = 9) @ and are shown (with slightly enhanced labeling) in Figure~\ref{fig:ofp2}. The last plot uses a different type of display. Here, the dependent count variable is not log-transformed but grouped into a factor and then a spinogram is produced. This also groups the regressor (as in a histogram) and then produces a highlighted mosaic plot. All displays show that the number of doctor visits increases or decreases with the regressors as expected: \code{ofp} decreases with the general health status but increases with the number of chronic conditions or hospital stays. The median number of visits is also slightly higher for patients with a private insurance and higher level of education. It is slightly lower for male compared to female patients. The overall impression from all displays is that the changes in the mean can only explain a modest amount of variation in the data. <>= if(refit_models & file.exists("countreg-models.rda")) file.remove("countreg-models.rda") if(file.exists("countreg-models.rda")) { load("countreg-models.rda") } else { fm_pois <- glm(ofp ~ ., data = dt, family = poisson) fm_qpois <- glm(ofp ~ ., data = dt, family = quasipoisson) fm_nbin <- glm.nb(ofp ~ ., data = dt) fm_zinb0 <- zeroinfl(ofp ~ ., data = dt, dist = "negbin") fm_zinb <- zeroinfl(ofp ~ . | hosp + numchron + privins + school + gender, data = dt, dist = "negbin") fm_hurdle0<- hurdle(ofp ~ ., data = dt, dist = "negbin") fm_hurdle <- hurdle(ofp ~ . | hosp + numchron + privins + school + gender, data = dt, dist = "negbin") fm_hurdle2<- hurdle(ofp ~ ., data = dt2, dist = "negbin") if(!refit_models) save(fm_pois, fm_qpois, fm_nbin, fm_zinb0, fm_zinb, fm_hurdle0, fm_hurdle, fm_hurdle2, file = "countreg-models.rda") } @ \subsection{Poisson regression} As a first attempt to capture the relationship between the number of physician office visits and all regressors---described in \proglang{R} by the formula \code{ofp ~ .}---in a parametric regression model, we fit the basic Poisson regression model <>= fm_pois <- glm(ofp ~ ., data = dt, family = poisson) @ and obtain the coefficient estimates along with associated partial Wald tests <>= summary(fm_pois) @ All coefficient estimates confirm the results from the exploratory analysis in Figure~\ref{fig:ofp2}. All coefficients are highly significant with the health variables leading to somewhat larger Wald statistics compared to the socio-economic variables. However, the Wald test results might be too optimistic due to a misspecification of the likelihood. As the exploratory analysis suggested that over-dispersion is present in this data set, we re-compute the Wald tests using sandwich standard errors via <>= coeftest(fm_pois, vcov = sandwich) @ All regressors are still significant but the standard errors seem to be more appropriate. This will also be confirmed by the following models that deal with over-dispersion (and excess zeros) in a more formal way. \subsection{Quasi-Poisson regression} The quasi-Poisson model <>= fm_qpois <- glm(ofp ~ ., data = dt, family = quasipoisson) @ leads to an estimated dispersion of $\hat \phi = \Sexpr{round(summary(fm_qpois)$dispersion, digits = 3)}$ which is clearly larger than $1$ confirming that over-dispersion is present in the data.\footnote{Alternatively, over-dispersion can be confirmed by comparison of the log-likelihoods of the Poisson and negative binomial model.} The resulting partial Wald tests of the coefficients are rather similar to the results obtained from the Poisson regression with sandwich standard errors, leading to the same conclusions. As before, they can be obtained via <>= summary(fm_qpois) @ The output is suppressed here and is presented in tabular form in Table~\ref{tab:summary}. \subsection{Negative binomial regression} A more formal way to accommodate over-dispersion in a count data regression model is to use a negative binomial model, as in <>= fm_nbin <- glm.nb(ofp ~ ., data = dt) summary(fm_nbin) @ As shown in Table~\ref{tab:summary}, both regression coefficients and standard errors are rather similar to the quasi-Poisson and the sandwich-adjusted Poisson results above. Thus, in terms of predicted means all three models give very similar results; the associated partial Wald tests also lead to the same conclusions. One advantage of the negative binomial model is that it is associated with a formal likelihood so that information criteria are readily available. Furthermore, the expected number of zeros can be computed from the fitted densities via $\sum_i f(0, \hat \mu_i, \hat \theta)$. \subsection{Hurdle regression} The exploratory analysis conveyed the impression that there might be more zero observations than explained by the basic count data distributions, hence a negative binomial hurdle model is fitted via <>= fm_hurdle0 <- hurdle(ofp ~ ., data = dt, dist = "negbin") @ This uses the same type of count data model as in the preceeding section but it is now truncated for \code{ofp < 1} and has an additional hurdle component modeling zero vs.\ count observations. By default, the hurdle component is a binomial GLM with logit link which contains all regressors used in the count model. The associated coefficient estimates and partial Wald tests for both model components are displayed via <>= summary(fm_hurdle0) @ The coefficients in the count component resemble those from the previous models, but the increase in the log-likelihood (see also Table~\ref{tab:summary}) conveys that the model has improved by including the hurdle component. However, it might be possible to omit the \code{health} variable from the hurdle model. To test this hypothesis, the reduced model is fitted via <>= fm_hurdle <- hurdle(ofp ~ . | hosp + numchron + privins + school + gender, data = dt, dist = "negbin") @ and can then be compared to the full model in a Wald test <>= waldtest(fm_hurdle0, fm_hurdle) @ or an LR test <>= lrtest(fm_hurdle0, fm_hurdle) @ which leads to virtually identical results. \begin{table}[p] \begin{center} \begin{tabular}{|l|rrrr|rr|} \hline Type & \multicolumn{4}{|c|}{GLM} & \multicolumn{2}{|c|}{zero-augmented} \\ Distribution & \multicolumn{3}{|c}{Poisson} & \multicolumn{1}{c|}{NB} & \multicolumn{1}{|c}{Hurdle-NB} & \multicolumn{1}{c|}{ZINB} \\ Method & \multicolumn{1}{|c}{ML} & \multicolumn{1}{c}{adjusted} & \multicolumn{1}{c}{quasi} & \multicolumn{1}{c|}{ML} & \multicolumn{1}{|c}{ML} & \multicolumn{1}{c|}{ML} \\ Object & \code{fm_pois} & \code{fm_pois} & \code{fm_qpois} & \code{fm_nbin} & \code{fm_hurdle} & \code{fm_zinb} \\ \hline <>= fm <- list("ML-Pois" = fm_pois, "Adj-Pois" = fm_pois, "Quasi-Pois" = fm_qpois, "NB" = fm_nbin, "Hurdle-NB" = fm_hurdle, "ZINB" = fm_zinb) fm_summary <- matrix(character(6 * 33), ncol = 6) colnames(fm_summary) <- names(fm) rownames(fm_summary) <- c(as.vector(rbind(names(coef(fm_hurdle, model = "count")), "")), as.vector(rbind(names(coef(fm_hurdle, model = "zero")), "")), "no.\\ parameters", "$\\log L$", "AIC", "BIC", "$\\sum_i \\hat f_i(0)$") rownames(fm_summary)[1:28] <- ifelse(rownames(fm_summary)[1:28] == "", "", paste("\\code{", rownames(fm_summary)[1:28], "}", sep = "")) fm_summary[1:8 * 2 - 1,] <- sapply(fm, function(x) paste("$", format(round(coef(x)[1:8], digits = 3)), "$\\phantom{)}", sep = "")) fm_summary[1:8 * 2,] <- sapply( c(list("ML-Pois" = vcov(fm_pois), "Adj-Pois" = sandwich(fm_pois)), lapply(fm[-(1:2)], function(x) vcov(x))), function(x) paste("(", format(round(sqrt(diag(x))[1:8], digits = 3)), ")", sep = "")) fm_summary[1:6 * 2 + 15,] <- cbind(NA, NA, NA, NA, sapply(fm[5:6], function(x) paste("$", format(round(coef(x, model = "zero"), digits = 3)), "$\\phantom{)}", sep = ""))) fm_summary[1:6 * 2 + 16,] <- cbind(NA, NA, NA, NA, sapply(fm[5:6], function(x) paste("(", format(round(sqrt(diag(vcov(x)))[-(1:8)], digits = 3)), ")", sep = ""))) fm_summary[29,] <- sapply(fm, function(x) attr(logLik(x), "df")) fm_summary[30,] <- paste("$", format(sapply(fm, function(x) round(logLik(x), digits = 1))), "$", sep = "") fm_summary[31,] <- format(round(sapply(fm, AIC), digits = 1)) fm_summary[32,] <- format(round(sapply(fm, AIC, k = log(nrow(dt))), digits = 1)) fm_summary[33,] <- round(c("ML-Pois" = sum(dpois(0, fitted(fm_pois))), "Adj-Pois" = NA, "Quasi-Pois" = NA, "NB" = sum(dnbinom(0, mu = fitted(fm_nbin), size = fm_nbin$theta)), "NB-Hurdle" = sum(predict(fm_hurdle, type = "prob")[,1]), "ZINB" = sum(predict(fm_zinb, type = "prob")[,1]))) fm_summary[30:33,2:3] <- NA fm_summary[is.na(fm_summary)] <- " " fm_summary <- paste(apply(cbind(rownames(fm_summary), fm_summary), 1, paste, collapse = " & "), "\\\\") fm_summary[c(16, 28, 33)] <- paste(fm_summary[c(16, 28, 33)], "\\hline") writeLines(fm_summary) @ \end{tabular} \caption{\label{tab:summary} Summary of fitted count regression models for NMES data: coefficient estimates from count model, zero-inflation model (both with standard errors in parantheses), number of estimated parameters, maximized log-likelihood, AIC, BIC and expected number of zeros (sum of fitted densities evaluated at zero). The observed number of zeros is \Sexpr{sum(dt$ofp < 1)} in \Sexpr{nrow(dt)} observations.} \end{center} \end{table} \subsection{Zero-inflated regression} A different way of augmenting the negative binomial count model \code{fm_nbin} with additional probability weight for zero counts is a zero-inflated negative binomial (ZINB) regression. The default model is fitted via <>= fm_zinb0 <- zeroinfl(ofp ~ ., data = dt, dist = "negbin") @ As for the hurdle model above, all regressors from the count model are also used in the zero-inflation model. Again, we can modify the regressors in the zero-inflation part, e.g., by fitting a second model <>= fm_zinb <- zeroinfl(ofp ~ . | hosp + numchron + privins + school + gender, data = dt, dist = "negbin") @ that has the same variables in the zero-inflation part as the hurdle component in \code{fm_hurdle}. By omitting the \code{health} variable, the fit does not change significantly which can again be brought out by a Wald test <>= waldtest(fm_zinb0, fm_zinb) @ or an LR test \code{lrtest(fm_zinb0, fm_zinb)} that produces virtually identical results. The chosen fitted model can again be inspected via <>= summary(fm_zinb) @ See Table~\ref{tab:summary} for a more concise summary. \subsection{Comparison} Having fitted several count data regression models to the demand for medical care in the NMES data, it is, of course, of interest to understand what these models have in common and what their differences are. In this section, we show how to compute the components of Table~\ref{tab:summary} and provide some further comments and interpretations. As a first comparison, it is of natural interest to inspect the estimated regression coefficients in the count data model <>= fm <- list("ML-Pois" = fm_pois, "Quasi-Pois" = fm_qpois, "NB" = fm_nbin, "Hurdle-NB" = fm_hurdle, "ZINB" = fm_zinb) sapply(fm, function(x) coef(x)[1:8]) @ The result (see Table~\ref{tab:summary}) shows that there are some small differences, especially between the GLMs and the zero-augmented models. However, the zero-augmented models have to be interpreted slightly differently: While the GLMs all have the same mean function (\ref{eq:mean}), the zero-augmentation also enters the mean function, see (\ref{eq:zeroinfl-mean}) and (\ref{eq:hurdle-mean}). Nevertheless, the overall impression is that the estimated mean functions are rather similar. Moreover, the associated estimated standard errors are very similar as well (see Table~\ref{tab:summary}): <>= cbind("ML-Pois" = sqrt(diag(vcov(fm_pois))), "Adj-Pois" = sqrt(diag(sandwich(fm_pois))), sapply(fm[-1], function(x) sqrt(diag(vcov(x)))[1:8])) @ The only exception are the model-based standard errors for the Poisson model, when treated as a fully specified model, which is obviously not appropriate for this data set. In summary, the models are not too different with respect to their fitted mean functions. The differences become obvious if not only the mean but the full likelihood is considered: <>= rbind(logLik = sapply(fm, function(x) round(logLik(x), digits = 0)), Df = sapply(fm, function(x) attr(logLik(x), "df"))) @ The ML Poisson model is clearly inferior to all other fits. The quasi-Poisson model and the sandwich-adjusted Poisson model are not associated with a fitted likelihood. The negative binomial already improves the fit dramatically but can in turn be improved by the hurdle and zero-inflated models which give almost identical fits. This also reflects that the over-dispersion in the data is captured better by the negative-binomial-based models than the plain Poisson model. Additionally, it is of interest how the zero counts are captured by the various models. Therefore, the observed zero counts are compared to the expected number of zero counts for the likelihood-based models: <>= round(c("Obs" = sum(dt$ofp < 1), "ML-Pois" = sum(dpois(0, fitted(fm_pois))), "NB" = sum(dnbinom(0, mu = fitted(fm_nbin), size = fm_nbin$theta)), "NB-Hurdle" = sum(predict(fm_hurdle, type = "prob")[,1]), "ZINB" = sum(predict(fm_zinb, type = "prob")[,1]))) @ Thus, the ML Poisson model is again not appropriate whereas the negative-binomial-based models are much better in modeling the zero counts. By construction, the expected number of zero counts in the hurdle model matches the observed number. In summary, the hurdle and zero-inflation models lead to the best results (in terms of likelihood) on this data set. Above, their mean function for the count component was already shown to be very similar, below we take a look at the fitted zero components: <>= t(sapply(fm[4:5], function(x) round(x$coefficients$zero, digits = 3))) @ This shows that the absolute values are rather different---which is not surprising as they pertain to slightly different ways of modeling zero counts---but the signs of the coefficients match, i.e., are just inversed. For the hurdle model, the zero hurdle component describes the probability of observing a positive count whereas, for the ZINB model, the zero-inflation component predicts the probability of observing a zero count from the point mass component. Overall, both models lead to the same qualitative results and very similar model fits. Perhaps the hurdle model is slightly preferable because it has the nicer interpretation: there is one process that controls whether a patient sees a physician or not, and a second process that determines how many office visits are made. \section{Summary} \label{sec:summary} The model frame for basic count data models from the GLM framework as well as their implementation in the \proglang{R} system for statistical computing is reviewed. Starting from these basic tools, it is presented how hurdle and zero-inflated models extend the classical models and how likewise their \proglang{R} implementation in package \pkg{pscl} re-uses design and functionality of the corresponding \proglang{R} software. Hence, the new functions \fct{hurdle} and \fct{zeroinfl} are straightforward to apply for model fitting. Additionally, standard methods for diagnostics are provided and generic inference tools from other packages can easily be re-used. \section*{Computational details} The results in this paper were obtained using \proglang{R}~\Sexpr{paste(R.Version()[6:7], collapse = ".")} with the packages \pkg{MASS}~\Sexpr{gsub("-", "--", packageDescription("MASS")$Version)}, \pkg{pscl}~\Sexpr{gsub("-", "--", packageDescription("pscl")$Version)}, \pkg{sandwich}~\Sexpr{gsub("-", "--", packageDescription("sandwich")$Version)}, \pkg{car}~\Sexpr{gsub("-", "--", packageDescription("car")$Version)}, \pkg{lmtest}~\Sexpr{gsub("-", "--", packageDescription("lmtest")$Version)}. \proglang{R} itself and all packages used are available from CRAN at \url{http://CRAN.R-project.org/}. \bibliography{countreg} \newpage \begin{appendix} \section{Technical details for hurdle models} \label{app:hurdle} The fitting of hurdle models via ML in \fct{hurdle} is controlled by the arguments in the \fct{hurdle.control} wrapper function: \begin{Soutput} hurdle.control(method = "BFGS", maxit = 10000, trace = FALSE, separate = TRUE, start = NULL, ...) \end{Soutput} This modifies some default arguments passed on to the optimizer \fct{optim}, such as \code{method}, \code{maxit} and \code{trace}. The latter is also used within \fct{hurdle} and can be set to produce more verbose output concerning the fitting process. The argument \code{separate} controls whether the two components of the model are optimized separately (the default) or not. This is possible because there are no mixed sources for the zeros in the data (unlike in zero-inflation models). The argument \code{start} controls the choice of starting values for calling \fct{optim}, all remaining arguments passed through \code{...} are directly passed on to \fct{optim}. By default, starting values are estimated by calling \fct{glm.fit} for both components of the model separately, once for the counts and once for zero vs.\ non-zero counts. If starting values are supplied, \code{start} needs to be set to a named list with the parameters for the \code{$count} and \code{$zero} part of the model (and potentially a \code{$theta} dispersion parameter if a negative binomial distribution is used). The fitted model object of class \class{hurdle} is similar to \class{glm} objects and contains sufficient information on all aspects of the fitting process. In particular, the estimated parameters and associated covariances are included as well as the result from the \fct{optim} call. Furthermore, the call, formula, terms structure etc.\ is contained, potentially also the model frame, dependent variable and regressor matrices. Following \fct{glm.nb}, the $\theta$ parameter of the negative binomial distribution is treated as a nuisance parameter. Thus, the \code{$coefficients} component of the fitted model object just contains estimates of $\beta$ and $\gamma$ while the estimate of $\theta$ and its standard deviation (on a log scale) are kept in extra list elements \code{$theta} and \code{$SE.logtheta}. \section{Technical details for zero-inflated models} \label{app:zeroinfl} Both the interface of the \fct{zeroinfl} function as well as its fitted model objects are virtually identical to the corresponding \class{hurdle} functionality. Hence, we only provide some additional information for those aspects that differ from those discussed above. The details of the ML optimization are again provided by a \fct{zeroinfl.control} wrapper: \begin{Soutput} zeroinfl.control(method = "BFGS", maxit = 10000, trace = FALSE, EM = FALSE, start = NULL, ...) \end{Soutput} The only new argument here is the argument \code{EM} which allows for EM estimation of the starting values. Instead of calling \fct{glm.fit} only once for both components of the model, this process can be iterated until convergence of the parameters to the ML estimates. The optimizer is still called subsequently (for a single iteration) to obtain the Hessian matrix from which the estimated covariance matrix can be computed. \section{Methods for fitted zero-inflated and hurdle models} \label{app:methods} Users typically should not need to compute on the internal structure of \class{hurdle} or \class{zeroinfl} objects because a set of standard extractor functions is provided, an overview is given in Table~\ref{tab:methods}. This includes methods to the generic functions \fct{print} and \fct{summary} which print the estimated coefficients along with further information. The \fct{summary} in particular supplies partial Wald tests based on the coefficients and the covariance matrix. As usual, the \fct{summary} method returns an object of class \class{summary.hurdle} or \class{summary.zeroinfl}, respectively, containing the relevant summary statistics which can subsequently be printed using the associated \fct{print} method. The methods for \fct{coef} and \fct{vcov} by default return a single vector of coefficients and their associated covariance matrix, respectively, i.e., all coefficients are concatenated. By setting their \code{model} argument, the estimates for a single component can be extracted. Concatenating the parameters by default and providing a matching covariance matrix estimate (that does not contain the covariances of further nuisance parameters) facilitates the application of generic inference functions such as \fct{coeftest}, \fct{waldtest}, and \fct{linearHypothesis}. All of these compute Wald tests for which coefficient estimates and associated covariances is essentially all information required and can therefore be queried in an object-oriented way with the \fct{coef} and \fct{vcov} methods. Similarly, the \fct{terms} and \fct{model.matrix} extractors can be used to extract the relevant information for either component of the model. A \fct{logLik} method is provided, hence \fct{AIC} can be called to compute information criteria and \fct{lrtest} for conducting LR tests of nested models. The \fct{predict} method computes predicted means (default) or probabilities (i.e., likelihood contributions) for observed or new data. Additionally, the means from the count and zero component, respectively, can be predicted. For the count component, this is the predicted count mean (without hurdle/inflation): $\exp(x_i^\top \beta)$. For the zero component, this is the the ratio of probabilities $(1 - f_\mathrm{zero}(0; z_i, \gamma))/(1 - f_\mathrm{count}(0; x_i, \beta))$ of observing non-zero counts in hurdle models. In zero-inflation models, it is the probability $f_\mathrm{zero}(0; z_i, \gamma)$ of observing a zero from the point mass component in zero-inflated models Predicted means for the observed data can also be obtained by the \fct{fitted} method. Deviations between observed counts $y_i$ and predicted means $\hat \mu_i$ can be obtained by the \fct{residuals} method returning either raw residuals $y_i - \hat \mu_i$ or the Pearson residuals (raw residuals standardized by square root of the variance function) with the latter being the default. \begin{table}[t!] \begin{center} \begin{tabular}{|l|p{8.7cm}|} \hline Function & Description \\ \hline \fct{print} & simple printed display with coefficient estimates\\ \fct{summary} & standard regression output (coefficient estimates, standard errors, partial Wald tests); returns an object of class ``\code{summary.}\textit{class}'' containing the relevant summary statistics (which has a \fct{print} method) \\ \hline \fct{coef} & extract coefficients of model (full or components), a single vector of all coefficients by default \\ \fct{vcov} & associated covariance matrix (with matching names) \\ \fct{predict} & predictions (means or probabilities) for new data \\ \fct{fitted} & fitted means for observed data \\ \fct{residuals} & extract residuals (response or Pearson) \\ \hline \fct{terms} & extract terms of model components \\ \fct{model.matrix} & extract model matrix of model components \\ \fct{logLik} & extract fitted log-likelihood \\ \hline \fct{coeftest} & partial Wald tests of coefficients \\ \fct{waldtest} & Wald tests of nested models \\ \fct{linearHypothesis} & Wald tests of linear hypotheses \\ \fct{lrtest} & likelihood ratio tests of nested models \\ \fct{AIC} & compute information criteria (AIC, BIC, \dots) \\ \hline \end{tabular} \caption{\label{tab:methods} Functions and methods for objects of class \class{zeroinfl} and \class{hurdle}. The first three blocks refer to methods, the last block contains generic functions whose default methods work because of the information supplied by the methods above.} \end{center} \end{table} \section{Replication of textbook results} \label{app:replication} \citet[p.~204]{countreg:Cameron+Trivedi:1998} use a somewhat extended version of the model employed above. Because not all variables in that extended model are significant, a reduced set of variables was used throughout the main paper. Here, however, we use the full model to show that the tools in \pkg{pscl} reproduce the results of \cite{countreg:Cameron+Trivedi:1998}. After omitting the responses other than \code{ofp} and setting \code{"other"} as the reference category for \code{region} using <>= dt2 <- DebTrivedi[, -(2:6)] dt2$region <- relevel(dt2$region, "other") @ we fit a model that contains all explanatory variables, both in the count model and the zero hurdle model: <>= fm_hurdle2 <- hurdle(ofp ~ ., data = dt2, dist = "negbin") @ The resulting coefficient estimates are virtually identical to those published in \citet[p.~204]{countreg:Cameron+Trivedi:1998}. The associated Wald statistics are also very similar provided that sandwich standard errors are used \citep[which is not stated explicitely in][]{countreg:Cameron+Trivedi:1998}. <>= cfz <- coef(fm_hurdle2, model = "zero") cfc <- coef(fm_hurdle2, model = "count") se <- sqrt(diag(sandwich(fm_hurdle2))) round(cbind(zero = cfz, zero_t = cfz/se[-seq(along = cfc)], count = cfc, count_t = cfc/se[seq(along = cfc)]), digits = 3)[c(3, 2, 4, 5, 7, 6, 8, 9:17, 1),] logLik(fm_hurdle2) 1/fm_hurdle2$theta @ There are some small and very few larger deviations in the Wald statistics which are probably explicable by different approximations to the gradient of $\theta$ (or $1/\theta$ or $\log(\theta)$) and the usage of different non-linear optimizers (and at least ten years of software development). More replication exercises are performed in the example sections of \pkg{AER} \citep{countreg:Zeileis+Kleiber:2008}, the software package accompanying \cite{countreg:Kleiber+Zeileis:2008}. \end{appendix} \end{document} pscl/inst/doc/countreg.pdf0000644000175100001440000151160611765762344015325 0ustar hornikusers%PDF-1.5 % 142 0 obj << /Length 3438 /Filter /FlateDecode >> stream xڵZKϯБZtNkǏx]w\Eq$e%Q{U'RÌFh4~Pl=f_Eff06Y:$  W_aH,xg- :d{9yz&W;d}Y8 QY yMXeY<$¨g4sOo+yӟ[#l{^d3UTZaM3^eOx-  $g(LK/ѣx$8ykq|:0-$A-nNw֤3R?\n@0, 1I8`5k {v,TK9n?fpV;8@@YwInB8 (V`"4Ms: H 8HDIRЍg)Ȇ[}m i,!KjPр si{VrAOyO509<9Dڦ[Ga]G-p!EA+z!Uհ!C)m)3ig׍ai}'o?DGre'eBT.9)[neNdɦl:C&"$XϷ^q8LJ^bb^Q w' y%̀Ϯ2% J~;>j$(}jy}+i 1;+'L elYn^: ?q4Đ&["U;Yj!JDƗzỊ ?L)i9lǓz{1׌4j~'B3^osb|7~x7IZm/[b}z+q?e#|1Q?_GJܠ{٫gvX9l9] t5970N7> Ҿ~0a75fݑ~X;XYoZ/p U `hQKAH?l[rVV.?A<3"k }mG*zW~95aC]oF|ا*o6qumswӟ3%&eP:VM $%|/` TjMF'.>B?x k{~fиߖLt_^ endstream endobj 181 0 obj << /Length 3857 /Filter /FlateDecode >> stream xڭrF]_'ʄ1V9N8{[9  ɲ  @IE i$$9*$.RM.&i&'Gϳ^e eT`И;ivs:5FGth/;~xͩ.kl1w^]~BH:(*EQ1'쫿Q&NҸМ?4i/N';͏ޜL~WN 7@[ yWupUDwF3Zzr"HKmm͖h5osYͶ`2ny#tj2 la Nm=k8IkxI\kvC|­O\#!T kWVG ~nf؆nn$*ejqZ脭+&CS xAPkvCXTLzLcO !|ʇ<=A3WNi`Ufn{Y Ӊ ,8k MR1 q\Y(l5pfxN !?"Sm'Cu PB(-W^0O nƗ SJh__2O)_UG;!IicS(\;, !]AMkXnq'nx{>kHn5lM=K)ע { {} ˦U R,ؿh/2P԰kwWbo) ^z_DMt2ݲCJrLvKnL(u+LIE 4<ڃ T[;q>V0$*OZ"&m| BGgЩ֏Lz]F@on-K{l ][B1cל 4lo?"٤{{o;5ꯁ{Op)-s8ZHa󕓬^ P{^ pT[Y[ A &p τ*Uӄ~yJ D65Eَ5Âx&!]xQzveHˏjWnfNa,˾yA ~ ֆw|t*Gw.D͔רi42`G6k1@Cst\!}a]|V{ynk^,i1<,\q9o{/~ Y,G- e2֩7 `J/^FM,e$ Y6 O,za6,a4F.]bxnǴgF)tSV 557 )٬u[jqgLq@o'TK>7SsS 5$VuHu_*Rfe]XdHco(p{!AqJl4X ey;qqY7S<,ØlrՇ̚N"cxKo' 猴UKbkn4"I 6 aqj2[g2CjKxK#k@ߐȯ&O~:   JP el\r,\ dtvr{8|e>@޽>^jq-F;x)a+C1aR\7d0Ya4tNწ vQ lq~=ƺ_A]8v1g˟018:̢Htb]p4¯320ON^up9K)_W7kRZ[ vrL#:{="LO& ,0,sAp< + Sb3z(oe<26@E>KJȴ@sy<`*SL~)H']RbeG;YaNY©GXWdSQh"2'ɰ9xQ:KS*')tbPfO0T$Ou]Õ>C.\NY]m8 LR??>S3ԺSfL{Qht)&n\E ‚IŸx # 〒iZ%YzD[Q 1hhC}_M1x?|/c*gDxZl/qTQe't+>W|CV'FY9|vfgEagȎ@PENIfuDtzs8<; BN:=6>; N:<$wXa~P2`ܰYzf~IOc@ɻgƛod-M#t1V<cac1A|[h`UH`1='= NRx*^K HR$ja:'ظ25 (R>)?JBWxZVoVJre0g^Fn/,FbŴ_0f nLs2j FX{X^Ql,NscC^D ATExUdТE A`l hUf=,vuq0).Y;%K7XdUxaۨywW WO^]dJ_ T;Ch{nL:o,N)A[ uj97vjt zlŠQZ(ɾ.YCy}%,0P2#r3)'_sކ {7r`R3u\JtO"W endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 920 /Length 39649 /Filter /FlateDecode >> stream xڴeTQ6'a0[@pww$ NpIwww9{oY3Oꮮ^ @ 7 qrNNNd# s@0; Ajw*?YHz ؃%YL1݂Q^s{?:^ +j79_u-aRr0Q&}N#i-?|KcSIq> nոÊz)[YYď2HMMk$4~m8n9:fG6[L;%}8UZlg~3 tCcn*1{vSkn7Z$ߣ9'!F A}Moߙ+iAUjEJo*@bSG [/α_lO!C)ASV_w >ԁ9ߔ wز^ 1m5];u/zfW?\NV>{m lOykT $7*Ŝ㽓w9eH_zmDŘ꜕08FEYH&q@DxXw&5ys]Qcne-քn, 7yu]SCy5Ҥ?DnQzH n8#_r\bz6 LмBUUOȒ$fH`Sw5[ CE$$9BÜetm4GCԗ; (ob ra@BZYUF*Iv!7b$zFhۥj-d)g5Lr]jRP0$@K=j"rZ:% gpcq꾨i#1J~Dެ̄<wl5˓6w9ATDϪw~UKp \ג_NJMa*yfcLxπ$"&]qBpI) f2<O8kq&N3^P˾Ԓ? %/$+ =ZTyqoFzpf[*V]bBo= _X}rfR;ت-`hk qlGfsz}k/[S<  6cs}o`+ hq~65 lHhx[>V+J=`~ ,Mpяbv$sv?qg$oɬ ۜNtgYrDJ~Q0gɡBL DݾLs DHȿ`N [Sbȴš]cFȰ4.Ez+z㹦? >\mr3쓍E޾XP提ʲYo󩶸k-z.U5¥w<ƹk4z7.VfsS#vq}])p<t!ڌ=M9Jse_J+Qoj;Ĥ1>Rʽݔ;KVm G$USSI,LFr3:_Gөk3W0Z/e*DgJV2M0ɵC>0M$ݳSGp2zF@*/ {\i@>R5KYoT``SV/{?đ>l[Qm!qޥIÅu&c"&j3L+H"U#"tc?/h2j(,:" g@ A4lEFľ UEӕUV1QBp389 `3Tq*EA~+;r7J]j%!traPM;@&W -Xҭ1+`"Q|{$v$dlਆQ$LʏҨtwxibWHtUjqȗ)5BSqףZznĖO}i"4h]}D{t$!cP^7Ѱg壻շ?$S[=)%K&te>P,>d&Z!ŧw7XBJ]+KOeqEBlL8<BIu,?|MFbc[590Ƹ]T{K`t٧;,}kG4=f0 tSl'( gTo'8YLL{OK;ڑ-(Ċr`Lj6>&.֧7D7p/QέeJN |>y;/^ W% M~ 'Y8LEORnwE` w9O&jNsrWc -L$bૢ0VCGs M0g*$3 2 J],t26<$;H"55x], GG?-ml);v4S tS a0G[e(Y{yNKj1ЃyWS#_̈hysL+˲fJ/<|V ]:_QwvSɰR4-H5ARG_7Io>[5V$L|fi2-.T)Rs}T5@%K"I3hSfDDZxyOq+B_ vK|-rNIo2irA8SS|z-6U|")ҐV0N[$F8iy n½)sܶ=DdwP(ܷ4kik/ª#yjE0;F2#IG]^yMK33r%W~BX:TgXYu@l>/<tu0vOJUz6fn%z̥5tF4~ꃤb"뎗(¼(Oo|C.*(Ue^?Ӝ\j_6B }uk 7}}V SQzCÛ*[#y}6KuB,>[B.hY`m%p@ܞӺֲ .e}lbf/} ބmV8b=fӳ/C &\m7cΑ=ZIGl9/R"\U2Owe{}I&r_2HnY[_v(Pʟ/yIǕVD&r0<6E.ȶ¶4 ~hih#).-9ާ;sRm']Xǐ<<`8}d#FP %DǸWw PM}ÞO`"GڟqH2N` sV+9\ˮ>U@>xpaBoGdˆ*mRŅ/t_؂^̙@%wMmF~3 X?>ՔZ'0WGH Bp'Pj"?"UQPkzo򉏰' +vV >QIq3XF(u,.*Bԣa?67fI4xc߹~KKyCS _ 9q \(I sFdbAt87+_:Zf~K-N.,lWT9S(,~j<-e1bv~$7A8{N2RAQxS [$;鎫ϠFքgL eH(ҿ3u2Q2ޞS>r{|4WVniwPPe"%5<Jr}|xɣMѼS(SLZrxTN#jMG"}{ss=,_@AENJo5j 7{N *y#QDш#39oRv"{mXqoR)ґV^(ö7̱1Դ;˘GV'^.6%\WeWaXas\^5Fw{ Tcd)P߳L!U >U}|@郿@ ~q+"2x "7W0Z|a =^Rz9?P']'lt %/g2fP"; HZlmpC,h )?Kjwf/ܮ&aV2o); iŶ]uHйx>܀[ȿ [M544^ZydZ}-e5,.dE4,Ie]aG๺c4˥U=OhyFLc.̊A ]/)¿~TSL}TD GjO>?¢`9aO5PU лS5!Ni\_74WiY0#c5:+a'ue|#|A]_JJJY (l~x#e P-6gJ=:d6T)mbbҕ9׮RsP?^ULU\߮ iDƥb^2ɞ 7OYTҝ5l#J/OrʍCH{d3$w4pʼ ?iN9Yifw T~̇6%Km]hI:;,bq Տ*,rNp:jc"-#O2p68 =݊2?*GK ]apϺDJWQw3ȐоʡYŕsQ}SlD;̓_3nh,k.D;mʕ:iB'pABF%N;KbKbzZe>tsssYҊ1'oRgm226'"V1cE.NtgaGĊWFp`s13 ;ꉹ;-x 5/[*=tЂփDz |SC{փ@ Me, bo?YֽO6hx~ِڴ;y4l#w2|Ė@OJ~h5P,hf0+˻+ߠ&8jO=x"Gp|ru *3!pUs?( .hO*NW@{cS &K`g^uv+ jЖI@E+= H7@X?7yPnX%HWvB^tIT379eQ\9fkkk`V「ǪAhhxhAznu_ D_آᘨ#ޕ<glw_RI)2FIiҞ*f~=_qՁ'3Ǚ`wzy|F/JēOE, !;#/(hȜܑ4q$HX vw|\Lȟ D~e3t.`V3|iq7+wC}*{t:?F(YO'hXOB'ϰ0=X]s]|/ds;ګ_HGcI]IUdɧ$5Z Kt؁Mc^W)4 WV0EJZAW2oW=RnQ]ݤʑy` 1[a>2ݰqG^&*0d-h.N7?4[\ї|] 1M0kR^Іr6Jbbb Zt$N_殚jE|;:Nk~ڝ=gMm-ƌH ,̣¤ǷS'C7g<:G#ŵʉR,WD:vp46 Y8WiRX&86(c;Nza_Խ]L/xw8~=.ʿY:rˬFngR;N,|2|Wc5ߘ#HIğKIXATgcn89Umrf_}|Rb ];Le=.7]5`Cb=KƮ]}-Jv^ONk0N7wԿ"z4e ؖ3IpP{ Gٵm%|ZYxoь.us1뼬d+04$ev=}'u:anB's5meJ(#!K`u`4<)n~F?wsd/QXWuAG^CZ;OA} XXz,L4]Z)JvNK g*p9!nf -fvf'0r 6|bW'68wSwǦw t,* ym16p|2St4\㭦ofEO{GPн~Ųl7_< ."8>zuUhp Ay{1[׵Z`/<jG%t=`[14 7)M0p!Mr$Ege1%TD;%O `mF|hDOrHۅV1G]f|m󞏿gaٌQxxK՟sdV'' }٨s f厥\<5Y"aF&K-37m'"+^Q9hRȰݞC=HqE'V)kWငEQ6#ͦT?c%*b)wkE"+ FQx =}":C]ן ~H zN.`9޾H~zH&#؋D;6Cch *cS12G5 KO$yvlo\r0I-`~̉s{-@&< D^<ԧXW^.t{hz`?YL]vMf'_`b/,SO|NZfTA]J5ОAI熒y]`p.)D(J8;-Na㛤/!QNY ?D0R]ާuB 8G!>,}8&a󁼯8' )RMbbSTb,1Ѩ0h^ SkH710I(#D' Qfsd]ęGV<{sR0Ҹ}pap`ԏS21CZz/}IW26X7cf7JVLTw#8>v*eH_[&;yLnWj/Ydm2PODŽYYYCZ#YUzlSwzf'"7w5zTc>  H< BKE|VH1#FBTtqF `,Tse>YqԾM z|@` &I!;c31GR9+M,>hei |ؠ]p{K$SY1 g3p"a.hga h0r)uo(bR*@1Hz'U{օKe;8H-p"L{;x%d3#k˨Aͼ:u'[7is \ dW[7|T[;J_&z\_*:7/A 諃G >ӷ_2\(ڇ JOW@>DL/o~tJ[[$9NON;[ښҪp)RbQ,uOqHf|tO): B" +kC+M9);{zO)uLy|Fma]$zQ;uT u/z7guw?+n)Ǚs|϶[y^ˡ\VJ6RT6bQw6'U%9}+aAQPK1i; @Q٬9-\ze~bP*,zE=I9KoxvK~,dޓԙ޼FѰ%@ =} V(^Mr6^~]'Jku0 %aQZGlma#B &t,[&"N,JsQ]:\F }TAE;Cc;YY4F_k\uÍi~=md_M~.P555VD qFEaႱa.^;sx[NG@1p})M7HykKR Iԯ*"B91lLz.?ӅCY|3+u R|l5UƖ*0+^nH4#i2[3[")ƓIa}ʔ_`ɒc*ߝ&T ,.#鈕0Q0k-l艏<?_qn)Qߘm~U~.d2GWqtO2eCg$4R>̘i`$57mօl;mr| y:R99Km|at"[m=M[Pb!'،WFzfj_Mo.t/j ?hy!/nphP,ҵNÌ)~^IЏE8p`7d[咻~+h~'Yt&@+ۋ-qEOdfY*cDy]r_]эTiˍTGI(0a+3Lo03H:bHrkHi96wHϷ2>tQCmFi^9[u ͓ztbgq ?{i!WG\3IH vM" o>/\<`1n+# 4D\\]X]U[Y95DZ^k9OU,rfR5FSL\E9vH'LE.ˍkWbw/5RݑGqU?B*aY"~&\MtՋX^MMh_'i2(qYuhM)v4Ne-C[fOm(Kl{tQaV@qxuZM.W@Sa\@w1?[ A!Lm7C= qÌ^Em،?g-<#؃u-DgD8EAiS\~V!UA/:Ud2W\!&rz e p${*<mCtaOuTz* h;,: G;OhyX(=֙_nNJ`yf̻C8ÐV1g>tJ !{~q$GM^ꮄCpԮK JM3gdJ`X}z Y][MŢr?עpkL0^ktai"\邧QTNƉ!@3ޢ{ڭzԜ ɯ&ogC!*+uzw+rK*#UI'/;j`~'.[JKV!GӼj("^Ȼ*dl8Hxh0FapUڂ/L6-@&#p .Pl'Yβ76q=xuE>iKKzbA:w]XQ\t2~Й!םLeЭ }r \=RCֶ 峈RBYTRȨzm7]Cx=I@A}-¨v&,P gQu*Ps4H9E&_KA)H>eARieYI2 uAL>j3N_iL lJ22gԫ"ҹ_`PMA%iE”SdTda%.x@@Z|.=6m YΨ$fn0~z^K1=?:T6##;mYLL^'tG"ޅ`z8HR;y6ϸzɤ?3 R[V jb4Ovi,utu-/zz~פ֪,_9ilh%{<׽$ ԗmisТǪp̓D[W9s`ʼ+F,3mC{S|VG9aֿ /YwA m冟UKs'fJ8U@S['MO*nQ8LwCG1p 9;AplWQ=kCCrxh_nKyV3!)ػ]$~1򏥀+nVGOW (:&o^z`x7+jv3ςqlgȼ>9xbIPmut+{l:C"z-O?IՎGpHhkq||Q 8 ]+CaC{xg>gO1sԿ\ԼZ_ J!p~.q|ۦLi =Hm_/? ]כ ?eXF)f:wM](QקSWF2;\?3>Y7%EfӼơW:;c_ hH՛Z-%K#%XUE``aX]ؑSXLZxvvu̎Z ^$˴:~V\w/< j!>n06M&'}'M$:u I!5 ǍBL?ni t…ïU"ZW QltP '<7mz;@ޖ,0a~kNӲ]H=Y-rp(`1Eߵ Tf쫜?/;+XAė[=nj+?>tU;ɠRx\==.@9y4 ~\-+ fs=.ܠW &11hy+( +t>H⢶Բ裘>|櫬E7-+"Rt0L B5wߔ+(m„QQUg=Eߔ;&[FD&X"q,ƔGC΂|B+/;BjjVHdkTxùzGw_=$xlܚxj:G%w%D5dB$YGeN-֩c/ͪjѡp#Q0\E29=L|dQ)|&YGr \6gwqQ^T5MJX|>ai2üZmw%hهe`.cxY;)1xsv3&ze*hÿ̈D:[/d9e2U1BTXQTF_=iW`~Q*Q19/1w{7]xj[(G|\wٿcRQoDjz RD0cf353)G@#0B|NR>51> w$[s^?=' ߹[gffjppzA/)عyz>W?yXho A4g >O%ԆydZ;A3_gs3Cʹgh78I6a;dYdW2÷tuaRz`bNtxk;^6~)DnuO}"3m[ F? M<0ϰ< ёsq~EwTQr >ԏz]l_ۺV;34:>Ӄfɣow}ڈqQ.6%L `ndi2ء]؛V),WϱVH}{t(VVO=55u,]B\۫:>͎^Z.JvDH80O' >S_]e3ƁsOҵ)\ 3y 1L/~}ck(C;t]m۶m۶m۶m۶ݻw۶m{y$\Jj1fY b "|ĈA1{SLRB#Lzb_??!G10ƒaާr8&9Y.Gy4-̌TͶSp)Zw+'aIlN,y}TGϾ%vŻZrq0a!NR32>SL2Jv,:lM4hnUY VC)K @:վ!Z~"Ld ڛ$ftoLV" ֡ /3*g>Nn Uo 1ku|#X΃ s|I e)OFA…-JhV;E7A*ё xmL)ur[1RC x$'+m2:D^x4/\Y0x=䱒wt҂ Y¯iv&oASU;*,{{P!ϭ#d7|BF y1B%+I,b.'mΊs8fB>LbvY]5>ظˡn`org*(+aB]Q#RWe^ Aes̉}̃eHƫ!뉴A)z:$snpj47x_wnES!#yjHrBSN禡l8Q㱴ӱT^&P3EN,q[Ho m>)BvySSf”`TtuTUڻW hRϜ7jb`ؐ( +`5":ӑJlz![T"t8;*<@ĕ!L8tŽa,+(k-gfC]+$D=f[X=K(w`MY&(ULsUiV@UKBC%Q̞D@w,s֢d07/["ijwY#J>O9 o /6Da^읁Z~\34gT9- r?\6TZȖ=r~|\U_WWr}p@Sl5k%ZuMu5x6bB;u]]lã7~7a^|7oNljfh덮HkFNqTnF xHc4E&-y{ qfڸ2(RXUzgqG/ӕث%vY>hؖ$'[ /x^gF1u 3R%dVQEri[. a6pQEZ#C ~ QxRϪ ,\~fB?{:PMneOqBjCyLeT.u`tV"GwΈ i,Ϋzk07ޟC1UxڦQ>m-qv7=Ύ{bllã#2V_ wo),*^H#6FP_m^Թ)ZcH~FAgVYТGX$#w73k0P鴘Pf,w|jXe,mPV66g㵍5veJL~\BWI3 f4ttXquѲM&i]: Խ"^Zf2aʬoOZTyb8Du 6;4]yfw'#q#'M f'E<$2YIrOhNɮsaLœ"zϩpE0RUZzzhmk r73. B !c2'D>=d'u<16TcɓL$ɦD߯W[=PT)'w0nI,-K| <:pق/Ĺ֙}0ݳ)43Z10+/#3%B ػJ HpԒq"ˤ)M@0Ha^yiv|dD3=11QbZM/E#&gbT)+J#LDk~ NeO V5s+Ü/Erq^W>^nnϜX?1OOO6u4F𺺺#F#gR5E<Ԧ |WŹ}.+͘.">O T0zj[b"Шv66^. ةr`\>#B\n㨝I`* \5<^/.(bq^ZYtEqQ1G ߿ k]چM ە."=؋d# r >htϏ/ځD!8N /arӋo׬NC+7x ~_/7777[qyƒpvf[#25o Sd92yTeT5eG--\M<]f "Īio ]ML2t1=^-uyy?|_ z[: dc3|͘LZB] j\3U)N~g-^ '{UVIgIqbD c=@oAI/f4:`gF,`-˥ IgoF H H522c<݅Jj 1,lTJT   e/O'?eQ RYޭ[SQOߺE'0![eLeUMw's 8 %@AV}М8Y~rY7Ф^-'(7/@xDaD}bW%iچvLy.D*yrZ5 \ј'4&B_jþuj;`:;+?orR^N^P6.[C Q%EPN.`;Abѯ EUelѲv a3†lygn:xأPz?ۘ&.Tu+"ދw߮d֪4Azދ}HHq^ 73}|Tbπ"RZ3JL#`u0g8"3.+^웈yKܵBفf]OeR-}ʐܱ$WFZ!ŭH2L}I.̹`ŷ#}kxAHgݵ-el2 ! VRg -*KXgUxa+~ɧv[Ugu2-CxkTCDvE9ۍ3cF O7 |*]sqBRQ%a=HQqB? h,;`>530&V訸J,.Lj(s}Hu="z:i3&>Wc뾨Q6Z!3|zt{֗Rnŧbu9k5uCàk|R&yG2Srt:oj55FzN{RYԨuƞj#Tt7O Y65>>Wl=2=ob=f,3nsw.xgoNƟv/sP&{hJ$ni|?D dT:.n"f7v}QS>~~3E鷺sG?Ҟ#qZ$ϺX_:hm]o/[!=.WOvS}g3}q^+2L$:iE YF ,s4x3Z|g"O]r!Ny߾k %ז@׸59(G:`2f?ČТE?ww5|5^ldK٣W_EkV3lg!^eMݝ#Kml=՛elT&ڭ}󛣰Ral~~!^L}ntBmDb~M`1G$fҤc)KpzrkJ!sCG-vSQVN3<Xo?f-V,/Z,_Gd쒕[[%cWBGbɜ`р(&^CF,֙XBcI`IRwu:JZė)݃6~$e?06`˶M:}ʌ)[_LC_-Z?UG >[7C%ݸ=qJܙԮ^%̅-:fXIyuVb(#t0Z~wa9 Ch9̆XVwg\-9ȿwq.}QrQK#x H #$% C!C+[~q>QUWT^ޱ_^|||zzw߿lߪ+w(eU? 23kə8t ቇ1VBG)HX#" O^onNpԖ.x۴BoV*ӆ@#]B=##0aЌeߟ^"9M\8zx~Qd'VCrÓ2$qWӓtə"Ѵ/TY4R<Q#~o;I5˘NYcL/=0m-K_=JHIb F]T#vz6i@nP_gR*& T6/0Ƨ i@00{~a0irQ*˸;'T.G9 !!Űo}ם7<d6- f@v2a (J>WG >Ԅ:RzM_PDb|U )ZޒЩ"z;dL;p^9Ωe!@ :8R0O@(&SGM]IΕÝO&eUمHG}M\ vCC%:!RA>/M>f 8BVKk٪-(?dKuQf:~3=p|AV Rf{{M|J` -//1jԫkAX^F A0taQzu[vvvf~!tJo kKW? NA֙ pH>M/iT~yiM?}}}}Ԅ=l@*LS(nlQ6]9g?e/#DSd*gS])&1utK-խBs^5QQ1֭׭TBSv*֫aOljd,3!xkH7֧Ow'ƒE-:vlؐ7$gIsP7HUx K{sHSd-hu B{ْta[L&xn\S=@Жks)&4p~[-p#Gzq˿_f֭[+ZkoZJ,O2pq{SfFO:[ Wj "N77qf -Ubz:Z[73'"m`7aT`;gE;vg\UƗx/ڨBz(q˜"W>3UX\5?kWLᡜ|INeTxB="`;%YCaɨ ]Шqa ahIҢrȃrH_Wf3k/ j]zDs:pJ 'AO:>:%]$!k[adgyC]>dgd3bS*y#iC p`w½*$߄!Ema^+|ZnH?QC !ǞAns'$J` ?5$|3"؞MUn8!g|TWf86&ռψ6*Qۤ՛p+U9 P'_k-`vEm%}Mv1TxHoxWNaćiEv<@C.9pfVr ?,*6h̢>f^RRapL\(dj=p"q,{xxp;/\Ş0iȨ:b3 W [uZFȆCw^x~s\ xy?hRl̚I!'ǙuYj]l}Cʉ0n!"\w1[6bK,ڥb=xz7 Ca=7֛ B?qMlow k)1q@") hmKx)mv;~^7]{Bȿ0ʨm?[(+_x|kBP_m']J~̅&pmBWWF+Iyri j\[+<vlj~5NI_&H6};٘9J,/+"'fA@$ 0NԶamxX UsW=P-_Xzyye͞~tw/nnne 'hj%VF>cs+4xVU 4{88u9إ)~G8XGɟúkPON{j餑5*l@ҲmA+]3T7b^[pʽ٧{١(^U}ѯs6uiSVcaq~Nid$~V+4C|l6MQ ytD.ӭB%V8跰> q!ٗNx,ԬiRLQɖ鷒DA#Y8uc:2%w--x}3\0Dk mLkX%!M@dk +DOI^NkrG8/0DB '.up(99SV ?\@2ϺGtH:|*APX=}?V̈4yO/a#8#P*cd?%=U\ )D^5a^ {9qS/JgҚ6/NI2]PDr 7tUQx_Izh^P2`lNAvqBdv"3D^+լYtjKCrdkZe&DWU6<% Eq[w.uzmyYq|.ek-#vK/D2c7 ? B`?YT^N=C+ *8'n[,{KHaڤkoԆF~_,Xd]K"-HP"J}$[8r}M;E1 $8`"l,dcl3L/)an89(\j Ns2"$ԇWt@d z+{yI6 '{s;%O3T""G̔)!fM5UB.:s}ݏ^(7E+a A oyf`)@M$Jə:_'N;Jb`eVAEiM% Ј, 1]AZf&("&rd7eee?oۓyfE.Kfz,Jd-ryGtr[A?>XAN\@jz:l$w(j%AL}Y9<4&s 2!N#}Snk7<7'S,$C=O$_ nZxf!Q}{ɶ0tql*-}DYܕm }mҴk~sJ*E@ `,*!E1:W\jtU̢r-&7 :-ƞ͖ 啙c!w Ge{ [^/ZW%A}HvX({ I :uDDQJrINqv` 7xW ܯ[]rS,2o#S( zΑ?k޼~7>uSUnT(ִ)x#FzpsDiaǴw.Wn]T`bÂBJh)LJ,T*ݰWY!*!ŵV#PIu$k B̠ ZyD*1oPWWQ/.> o@+Fd_x8[Q4|{L^|?4"?C.F/?:Q>W) ns/J<PԊCuiy͆ ,2"u"B.-Y!)zøRd,PMٴq$vgCK}GZ,IUn@ޢ,+CaҠs8 GsWJz@L *Z2;D+.apbhP~ Z"5zJۚP$<ā (RFG 3tQCXSzu7+1hܩRpLҠJd] <^֑Cg~Z  [8bZhv9A\Bв(LNˇ;}lx9ߔ -\[YbJUl<ѶJԔ\'WbnjL^`e (s>[|i %;PUGUMo֯*gbLj?ʓ9#[8׻Ma؂KMA0Y״ج 6j0ϱH(:m\TE'Mgϭ")'_9ofuEF8 Q0Ng-O9J`"ثe!qtͻCi8f @@޿l"8BũTW}bl"@dא^D]d7bu#@5dXu[?K~9cy;<{h79&gwrb.wp{/Jcx_QƟ7G82r\NBL uvK+4[P%OJBI@4fEĥ[ɍFA\jJa~dE-1ׇ̬YzKQܿ6oŵVvB-KG_Je7uV`y'T`[K*fZ%Ma\w<%J$r>حZ_anY}So: P|Ojq*s3e'ů=QYM:3*ں^eGO:JqL{A!@䙙 eL;qJ']!?Uc*+ 3vRPqN3vOY֦0,1i-+K 3,8hF`g??9c3lBݹqG,~L~#'̬C&}!n 6F1?Vf\k뼖ăň8dm4`mdZ(C8/`q0qv1պ$$=ZppG Mt~B!#ِitxtE3I 2P 4 Da#3SQM-Ԭ'\sKrŗ%T}ba+BFg `ӓxdoy?5Zgw"} 䓋S#0'nc%͉0_ kr1'.:|@\ffkI2}`oH4f!K;+ rr:2X3BW;ZhX4p6NWI5DUP}QYճTK9]hNy|ojw'lX!HxXP(D(ѓ"-#W6 4.Ru>đ 'JN Q# na'4iQyՎ>wT;0uy9KʜɻjؗCQ KD]Sc0QG8Q{gw(VSˆ{=`{imJDgSqgʮh[j8Ͻٯ7)$q~`|yX9qd0צ+&=y&Wk>N9e(RS"XW \4 *8Pɵ@`wNJzR44SU}P=byA+ NK0F ?;pbʐB, (,(H2\$V D((#0S(A<19wcEλ73Y:g!rڤ_xzfrlGۗfM[?|D6 >wnox5@̐q\C")\Nn輳x= hu騙3}JeK ' t˒t:}J8ϠT<_]"u֭w=x¶MY^?C_=,--~Y2Ho8fE'n($B7v97̀<,wQ^D >qu{COy":ǔ}?w>c-6_Hfh"O"j.I}S#IXa4 yJ "«*˶~'~*19^}WmA [K8p) GWhI m)!йm= [` SQ&Q٨^'HwO7m % ֩SgR|y*)6y!N kBꐯŖ!u#w)ͅ@N-EΞҐ ASX?]8J=BBh$QNʗb+mRDHs~'d-RpEՔu*i̮z"woIu>[㮫`;jAIpNpז AB8念'#N@d>[95*:I?MxF,"Ki @ә))&u"Rh2t4Fb.\9U+ߒJB,TٞYRֲb03&KJIZ$H,QH,%[IDʮ"S w]r9yι=s9嚱KO*~"mKHH5֣]geaƼp>,Ѩ)rJ0) ygD=3w};L[I׈!_7ᜎzҝM+s/_J]uyBT?KÁ95T:yiAGfC+sӅeIOqF^uEaպj9oM[YTms:=q=jin``DעJQI>C.SYIIIs2=pp<em)ŷah&Yϡ/z$[FKһ1ǹ+{༣| m6w޽%ussss)1PJ5)'oBa0z"^gՆ&'l(W۶> O:#R< MNNf[1v<6#N׵:iT2?V{r1(ngnMY._dx_^O\w3kb\5I%]By]/9v -:wW$s0y Q. sAyn%1t7f\wI>>`NM Mw5\K6^mrGm^w'e"´M#?[paeyFM>?)Q2QsK*j'gy1}e$79DS~ JMywc+޾}Zh:5i?ޣF[6O6{M!H->mf؝zGGꈈ’Zrg1}H9Klh/U4yxr}c!z>/%h][ƪOgZGܼԝݤ9ORIK|gs_ =͆>[ d9=2sۨv .?Pw~8oYrߧn[\>ȫ$4[4%yoI ȈKgiV/^q"͌$h"(c7(Q]UfE#Mod]Xe1N)z{Wtp4t{afo§Fo_T^d:tFe{lmCFMR:}gnzjΜm#}|rW[<L=56@hxbJØ1G >T[>I؜qRZE[Ս}Y?fS"⍍ 5:h,e$giYS0Try3wnYv?IQ_}N5j._ӀLD^31K);B=,4 gw'xw`=pwݣ;vW'X//}.sɏ]ޔ߻f&tĪvC=QJC+ֆ(Ls(mf3V^^^>a0Knr{wf-.É+,,,d@+%1OGV ,}q@Xcg_EEWH#}jx6p@ZCK::SuOT|~PQS56 SH/Ѫt&AHmK/GK7#Y .כ3fyT.x~CJMIȶmM;m%[7so:4۹ytzCux0CbH%JGs󉈫WY MV~|s %ΞmU\ӹ.CvSU0Y=9؋ĵ12c?Ur(ZMCcv #On[×}'o[曽otȄpړ|b}#o7yR&\BL€f}g;Kf6._Ja}NEo]E[Ef;pNvYmsBnVļ+T sް˹}cÁ["Af̰w+ yT-^eF/ˇ&|VR_r_cY˖a Y`W'Vs{ݰP򘙓JMLSSﺋ AOalX&;T"r?#q[Ħ;6{xaCߏKGJxV0HFCٗ Sip3!_h]ے8$7'^:M6%[~O1̗4+JV]qE\w [ aETOhM)!j'_I-̥^YU(U&_s:B'U}pn^aN-E\zpl˶kTL+.(pU;r:w̫값Ln[FeEE*:z{,"iK]d؈ ; $*q(&뿞*Y35qfBܜZZt|p8$2)۰BFDqs"fdJzDbxf R.S?Sf<4tusCfK##NmZ^E]0&^'b`F(`vXwr-3\{)P84kx2=qvf]nM'SB+NCn_Qdz/>ӎr<`E9;wVbزOJi;d~d[J精) 58Qʽ"MWr ʉFYpN*c}O t=OIWQ?ψMOW`qdF6\E 2iJ8цʮ50QLqk8 Y][F3=.E|jp~Ѻ¬eݵVudj]}{2ۤ@`ZTS*dBt$S)P8TI:Y*צod:S 'PӋ@#.wO!  i)DKt%S790(rn>yo@1c:nD( _\ T}@!FtYg=}XOt!xd ՍLp&,^.5LM9\CAB4"<~1 7$0챠oN7Hwk\}?=IsCHszw*]hD8|/ůO~#zm)~oOF?h#ml yc#_\ԄF,U)ёDYPѓ@,Y_AXcJfMY}+l=ITou&{kC,,9(пPcw<+ޞTyy]=MTC˾-BY fN .D.$P> stream x[[~Уeș-4.dq0+Fc?Br8#jMVrx9jRL^>'_Z;ZNYiᴞ҉Zr+9]j{_ lǦi?~7W3aoMSW7OeJ֕PzTm~1r2ӥ``YH&1jBJ3/#:x.᪛=;=jN @.R d J ]g'30!Z}85m:DĮ{`&@*n2Zٖ8EMq}˲0hWb1KqI, ) yq$1_(ᶾJTJv{ V*a[li=/dq]O7$vCo z2Nj(#R;OѼٰ6{a_{eХ{K:Xz%|B#tQ05(dߐl\h/~۲;IxMA,HBԞ m&Co>)('{t|=xr F|4^~+-Dlf/3d~EGg{}%Jcɣ؃>~ح!O%U- :Q wR{ЉBGa,OIOJv(~wH#O؋G2a! *+,Ϗ0ϥyCd_1nޒ`1ZB%LW=n_a0aσnwag&{Wud+35;s~ 7{w0(/.т;.^#"\yʂK5`Al>Z܀vz7۞'Dƶj@-es!szt?{x_p,}Xp-1D [\M>ts >Ғ|Lo=i:j8!uˆkRY[!68eYCNw#;fl 8 <9=& C`Ct1>ȤKxxA+/?{k@c!U2Sykek&V(U GUxǓ S?%@ dTw;#Nov~)[_npY. .$H,QBQ^#ΎɭA?am/\%q:B'_9ݎ[CxZb9 ]$󅰃wͶ.DS EcgǓs.n+] {62cQ!Zp8;YhNA}' k'K@9X[, Jb5\u 29UV7/C:il @Tt坧ړ1ݐOBJ8K8Ta++]@ Z+*眡Dg7g('Q┘|o%*{mY5.r¸p;cDgb4p]U%D_zX~1 d茉#rD_3rfLB9E9@/#H+}ŭO|s joj|(JX jLե(H3M)q]R괊FzD k;g˶#[QOdGr-c Ѹ2K9*[h!SgQ(n{{4f] aRG]H)D9gd`ܪ:Qpj9ݥE^ H˫ʰoO4eAA7>@d_p*ad1g*ҀˌVgDX6_4K=EC[K_IiF}qzݗSھ̊tП|i$.K˃uo9)lYӗU"mOQi`-2pV|CIѓmNz*\B;CE 1|6Tɨcl++ƒHxzMӇP[ZHROrXYC\U`-)ʔcFU^ )vL81y)~Y83`laOAq vlWC&ZYWITyfRI4ID4La?\Ɨ2 y}]r:37v2IHIe | Naq5$I. 'Ie&jn^Ta0>7p("^ͤuӿŅ˧2 Nw.3 eOE{}# j{<5VwY7" ?:l{$e]!R俹4hZO FBp ^ -T>} g(D6|TI7p 2'A*!aqU-`= W,BG|,JiYƞ؁gz#Q$QT7 mNJ*ttm&-,a/ĹTJ 3rLڲ':RҤˏ䪄E|W}ra+$5c{qg8 Rs_>B &ovR*1fóǑU+< "iaaS P5ڼM!rWH jlnmY=؎Pp=hBa!@Ӈ "-HP,{(@>02[!/ >&1zTӻp>rco}8 T79} m0oh8d{wXHKЂYܭ-v¦'7VOXc;d]^(5D9GھMxE(]Hr'D]M]-WStMc+ѿim{7H6)e=OAތPoj.ԬG*F cr<>Vڤw*rnZ*LZ?qX.E^^ܪ,@ď, ǜ !elvKDggg 7\cרE]Vܨ@J H= XO63e&Qz;eKV $6> 16Zʺ$b3Sl N+\z;ZE lQ䓼VqG8{^W ?b*;} XG=KmRAk=F>+ޜQ7 *FOxBJʡ/ r9JRΜA5CFqVv2hHlu oVxˉ}+.c|YrXX1ljQ~ڏX`S*?KnKDY+Q?FcAxxn0tV*}yWӝ+m8Cf8b6CA5#XN/\V􇬭 nBTCk>dBk߸x `z.;%'!A777@ŽmG6@cʻϐ*HU `J<ަVQ}n|}qTHx> endstream endobj 247 0 obj << /Length 4402 /Filter /FlateDecode >> stream xڵ;isȱ+Zbf08rw7MVe ɊIQ!HkIvrYfQ,û_iЅjV/]/]Z6_WUV-a ˛[\Yk? vnn4]fywGO 4F+Ӹ(\C[xpМx?1$k`7!urmo+dѠRAέ%c\~ǎ> >ч;l1-~M(]D ZGmrG*t@9 V MÝ/_c+4B. <fRa qҰgHx3beV ە-z%a="ˀx\ w]LzupN;n#"y Bub&'0i!qTXRU"?ylc*KWorVvCpwŗN~ww0acʷpܖ߷*ߌ{ZnxuQ Ei)ײĦ~?72$k2C7$GJ 2I^YdO GYT?}MAxwF 6BAF^Ao@͉u)9c&: 8]YV)AcZ?v9P+SsNxw,z>=-)EHށFR~Lʉ_81V1wޒ'n0Zu").L=> fٝv`ꑉcP4轼`ZWkU#CAR/d^Fq8Dt@y,|ǭiagڷmPwxa -tm&{"᰺"hXl=1:$M.ͳm`R wwUt3b4\Ac2 ldˠ>vأϦA8u^ޑ18УjI29=bs*L/Qƞ2 G69,g4 =bzix+X=IU y8<&1Wh/!q-o{EKh۱ɸ xږYӨ^XNJ^F=C,)yC7O BDq*#oK^3M_n:ڕʙ韛9sQY `j/ضVl!HAMgy2jy!.D@Py-TО|_O?v6t#G1כ_ESTz~2 Z' 8d܋l1!|aKSPkUs S pI'æ@dmbp?R3IGx﹋LTU$ %g2/9S9:Yi+UfԐQ^w#ͤC'V3 Ȩ)f놼 x)<&lv08Cƪ5ϥse*a@stm8l*?rq`܊ @85']ȿznbN8[~J3ԞHv˅ٯ.M)ɺmp fdGꑾjD:#,Ci-]H9Kj2ԪGYUKTRS-uB<+X0i^1Q+ #7W>QT9C~%ie:aOZiCgJ1fkƈLʀspxN29s*Z=g^- 9s`+h9ڭci2l8 :. Q[VUVq0kYdVO${ytHOV*U1E1WҘ9]a^yc2sF7sUJg6/c63[(!w(EZbT4g 3տZ[o7$|vՅRyxǝ|7Dd {U-H9R=+~lvPWbuΈ5 dnD9i; 鳱\,3-Te$Dl{ *ڒ_F0JOY7 Ny7) v^ӥ''C@9Nb̘_݆[, g=6d? RU^s'}Vf.M oK4e)mf_LBc% =&_JfդˁW*~3YyRy(ʻ%sBŷ.yIkҠ`◿ t)6[VUT]_Hwijb];@Ԁ2!Oiu!IzGDSM̈́A4ǼǼm/6mm5yLR^]"DzuVr;;׬'rߖے޶1I<,_Vde endstream endobj 267 0 obj << /Length 4132 /Filter /FlateDecode >> stream xڵ[[s~`DMMdqNI&$M$IV$E2/qKv< ,pppjRMzO^DVZ9HEh\/&L?_fzw%kiZ=~5Gph/˛LO;Dn]+isvB H8E78#'3mmҀ9L#=Xϑ{\ KosE=/TuXoU 0VyPFA.T l&,sӿ~u5R}ȐxŬ9oi`دfys`OߢaǠ4OcjHbtf~-d&M%SZX8#Qjfj;[Œ~ek)HěD@;? =ʞDmpw$ً%1&qM.C,<#%/(6/Nᘦi[XԞY<XNk<|&.W+l//ϺM+{s]<$LI(:+m@%2h{Vee1`9WV:8?hQOQhD> ڒڰZRΎ _z=W9\Q&H-tY%cmh.8!-%T*",;Ao<\ɨl tJXde(t%}Bf rt(p 5wDhD>WyC#Ȃ6r߼?(>=?d竧HW|WP]u5r,>hVLRL>ޘdoHVˢXÜ$(Dd'f%M#=XɄZ =~ >' 7~C&)]bH)v,lX=`[DD~ˍQv0Dgq}{:2T R=E48ȒS/VSMvl(*4劉qz_Y$O$K 8,K~G{c:RȖ4>,r˲\,|fP=%X%0pi CJ 9#F8@oAJ a{bwsX? [ҼsJt>gq,3v(AQmWфC{pb@6(hζd::S}TP,r! Ix<@ #8d\HQޒxZVB0(T\[u ۜ5l`C뢗fLJv0C?dcD c RЅC)N4H|K*n/Y<7#]EKZC]6w ΓXreǺ<{b2}zoքRk|gwGY>@ B0,QŅ[pRZ3fFTC\ut <&WXxVPɸ8 >,-B(l-*&x D]p TKy]J9a$Ll˺ IjPk$-jq۴ŝG+g !_+9T/(WNsAIƽJ  ]=>N)7plW̽' #W w 1 /ORL >z jQ{x%5]*| 6mh/;ޥ Ƞ!g :-ӊ0G_DB~ N&Aw7m])On<澣Mg*!bf\ἑ?WDBxGBct`}H~%UB>CbȡS2W\.T8G5h/aU!V/َFHӎ( څ8_b!EmxۂQſȜJzx!Ix _]Z[uٟR>'%b/_v endstream endobj 282 0 obj << /Length 4297 /Filter /FlateDecode >> stream xْ}B'Me #.9q*LL+:=zFu]f닿^7uҥVMW4Bϯ8Ţ,[l_,L3_W=7~;B´_smjeZA1 9o*=Zu(uU-X[ [_C_g;ec`*f SF tfޯV0a?ޔ>wᦌwNM=Mi"us2yٯ'jgxqwӻ .gx[Z _&!K8A!.x"{2G o02!9p{nd?[ɾ wTYNfn=ƮbDPq+ ʴݕt{ff~>厁$tGXav+cYIk ܾADq*@UUUe51~+$8f+~'hg(Wi[gʸxt5=][O4Ҳ$mA&du$|HAY[0Pף7,6|u̿u./ڊ!a]j >ޣkx8=J BDWs*旄{9^0uy, DnLMDEeh  Oa#2_mD;VQqǛz;hu-ot*#@j)Z5X/)y)2`j̲`zOq aq O3qIwIhD2&Jm/uߕ )f6oU]ɗ!XCyϭY4Y֕2q;ֲ%ڪu#>|qi`?]VӍjIŶz5aAL\)MdC0߶"UM|l!G&HKp\Jip_9[e!<+lZ֦l Er}:SU©QrfI0`*mAiy -cCVpK?Y4Ǣ܈^5K–Oѯ+bK<@[Հ0ydg A\!hyb_u]C*lnx.sUF&NWd@! (mt8NߕAy1Dɓ3uܧCE?f.a3PQPUp^jtbhUPq?;w-,WkU',ಊJϭcL2u.] e@Q9EjtD<{[k`el~x6j]C0s\$!<GoR=p4'J&O8b 'P.y%0$~@Z_BJhqq;% 0b߾'G!UR:Z L(ZK1[UXJVEDEd Gη7>vQ ]^!KIfS7x6NSKaLP!+!(@ɛj~)IjΉ82Y%)rnpPU#4jv\> :nx8:p?"P  3VDdhuԭ7rgfHFkXLm6DP%hԼ Pu]2Nv6`BٟeCQA(pMmIPugn(9Ektߎ78/pѝ-"X57vov4{|7X:'çY2ȍ쬜B?> P4\q^+urG;.]|\ ^Vw{On&`p-a ӯ){/fJ0piP(2bGWk&_$ӸM,_c1eC"n F9#'V</%L N๫)W89מ!w=sw6џRv O=WWs7ގ:ʴDn.Fk ΄OjiTߩNWw)YoiФWqK{Zt0/<p/.Fj3I~5e~eD̆%@6VOgաk\m\P$|/WB! zXRq5DI@|E1Aܭ_Rf`U% hAgx`D*T@VTz*|isCRs&k3 4]fbҹ'u>(F:o2+p" |$ō(| '.cUpZ?XȴRϜOgH옓Byu*BOsȯaέW(0 K#QqBFBZ?_(^&KY`RGѢk}7)[e3Dx*1 Z:`#yzkJ֤B{o%,h%8o,de6/!PN6C.Ze>_>#;P¶.,Jx~QԵ i6]h- \G 'C:Y'(N~)*٢?S 0~pqAAoW>EBZ9'wJC݀돠ɘ0&)tZU K()z&F z$V*d'݀@|^+*K˶ywnl P`qcg5w(t?DECGObHk>:!㡒د._JSMW gͫZVn*vQ`)ٟ^?/6PQ;fd>dR<7!gMq9ie'Zy' .珽K/\5ч&}Cz L4s#mE.N݇-𼖢!T,K50|NSžJGT·2Bz-hw祇h]UjG&P|7zF[{̴1Z}BCMKA/ endstream endobj 192 0 obj << /Type /ObjStm /N 100 /First 909 /Length 2731 /Filter /FlateDecode >> stream x[ks>Bw^W*0!llQ<->MǞ8q>tk<W1[-IW#6e_P0-*kTpJc#kl@|:*X^rx H |Ypy ybߥ3fD*HtgQC{DR>iGE%w(_g &3Nʣم PAGDT!wOc2v#Z( hCHfg$%W:&}T;f)Hc1"1D`" @^TrDUOI)CPprѿ)0tJDQ)_* f9 jʂ (FAd3Ήm|غ *g4bz*Q{.^:%٥UIL)s} Y C0H3zhtfP.a.2_ ,Ϻc,^vڪ9ڋRtz#Rhl)(g|)9m`pL8?ߟ4/?y8/Vb])j^7Oܠ 'a{R:'ZRg:!fѱJDG+4mw54WżyG;]4ßΗP^,OIaOE/3:b&LЮPjxPcEa{5Q-$ ^ %ڬSH_ǃ]B/NYyqx c(_t7B4H1Ncb`Eb? xjrZ'e ]q.:XuF!@8>`dP~OD۶c$Q&ѹ0% ?h5=:k[tCDWi0[Nj>@v%h6M ,|.kAD 29bpv~~/x wx |R0?G6' ఢ.!w0Vn׸8Yi9." 0 9YJ ^  `% ׳vK;Cbl;g=f!C/ F/^ߘ l8XeM  C(|5 T nߐic0v1rAP MzC9 !VoXt 㡚珟e~^osIs|u9bq'2d|_Qc˵5$ mf !$ab]+~kH?!xՈ>+T`ļkT 9 >C}8{d qQW&uF @uO|6?mgޣأ n2h5ǮY.X+^xjR Dud}:Z 5}rDҍ>ރx{5?Ȳ>d2Dmg*`ThL zn|6A9hI~1 !r-Ixnim Z29Yƭo[JiKSEr۲K_奯WY髬 UV*+C&/?AS.rO:pY%[uPiMu@G FK1J Řޚ ˚κTv"$2 3|yx|+xnP9>Q7 . E lan@W7AW|]enpe\d49:\wDWM1aO$$-kL ͖B~WLFxJ4SQ;ɐWy;DαQ9߯Yu;oӐcLwxT*6Е-%~]Wqxw]rE*w]$D tB?3KK1t5.Ϩq1`7A#(s1> stream x[Fv/Q##uk$A`w#H?>廙Tճ":{ۛ/_}jՙ&s\hzn^/o:fqV{;7~^'zGyǓ3ѿf%oo0,͟{f`_շʕ 6kZj>_fn\6Zj ز&7,_;=n!|ߴ/6+ޓ7垴v]RBj4К'_Նn? 35khW&qi>wo4)"wDCTb߀KwH+$ұmuD-WM\ٞ_]hzin- 8 i$jetmG޽@i(]k} q#徼$Wn !bhD / 4B!ƃى nmB?[ӿVB\DqťY=MG aeG= BeeK}d8%!e'/M=2p >J2Zzm‡d]/2u=- !rfΔQt˰AiPT@Kҍd0nB7gm`}_.4Y巉I+l v54'1A*cCoC6@HOɱ'_rCt3`s3|;wcTmkFI_t@=-GQB|L V={ |# d %C(NQJ$]Ĭ]z7ڨ?֔&4I.pϦ'\sJU,MR0t ݑ[ i_Eav*i|E8v* NȫYm)!lz82~ vmNӊ :9[1 QuH6i0a¢ }FlyPCP뎽-!n++\z:V/[{K8H@|ߵƒ~2\Qhۡ4cGNh0+`G.;UFOHQC1JHES k-hHwѓ j\>$4[ȿk6evDn:Gʯ}nݏe0ᶐ{)Ah~=<&w"b8VI2ep>*>EXs\[-N|ǿ \p37*#[ӨeՍ]-bK@%O0^7yP1"p֓lu}MNTBl?Y2'qhu$QEętBE1ڪK࠿ La!t~d%fTҾK<2kJ {>aҰk\\ þ69ͳ7EԲ$[GUiݴ3VtFY湝}C¨1$GAT:@kSk!Z XLJ:\~"*bQ.1Zp8KnٜC3,Y 9'4^B~Ҧ;{aGfɎ 5ֹ۠)0qDFF[Sz]4{aS&iyGqa, 6mᇜ:l8cȪuSSJl5m'bU '(Tx-(54+4 Г{2jլE0ZN;y ?3@Ƙŏ{ ]w$bft9ȓ,?: ӹ##/NV1M]a=b$Ñg}3o }cjVmU؟Db=+{ @Xiq먍ؗ,LL*ppptjQS] ОzF`LcsQ1;W%4)Ҋ9l./Nu7{V\P- A '$Y!wɤ.)MBֈbEi \1Mw0.OR%&Nk+f|<@QN pcb. Dy51 1)y 87{$p v9A nɊN8bX?$y8FE)zvX"[qД21'5sHـpIav33|8Rf U&d-B<cǕUpn2乨@~5R,)DM4 _GwK0gsr ]+'T&)9aj`7TI|J_)Xh(iw%u eEP 6)kA'aRSq~I}VV幖6r:0bY2AJ`UqqhyRF8$8J%9'a|:.O?Ʋ$RHBnjH|H#WUDԅdIp8^#GB9WHP?5y(.eRvGN.l^G;p>qna5{ܯ8h0Zjzr:oGdpmSHorƥ ҍsvIWQq P4!G juo<9\cp>Š Ā|} 8\t*4&guq [J0T3;p-Ї}nd&ƸwA)' G˪³mcJSiuLjm"5cMNSm8r$GDS58XTh*!ۃO˝eλ9C>^5 |j"Fv_!ty_#^8kp։Ld Lߘ\e;t`[0$^*E>_h_<8{Ӷ6;Vo5d3d>7a.Rk$Wuv)#d 6Nn57~}5庼Gi 'M_8p 6Zoq#QU\jP~S|,sڀkhdʓt`1:<2 "+;hǃԥ*BBM ZA6rpC9ak8j_铜(ݶrM]׹c%U4jMyQ1 2r N**"`ahsa ܿǀR)6Ȼ[SvMؚif̹`F0{}0J](@sɜLU_ROg׺1ɚσ7D)xIh* ?vMۛyh4^n|0E{@ ~kN^BI}>$ .wrИ m͵ygH<JƎdehGJ\~[ Qft״4g;4VL*hd6:QbتDf3hR)VU30gqU}c\F;cZ7X5jKxu<+'l7sկV?g^3x g^`{5S]r0"xIsHf @@ijRH6xHl-?]D77u+ ]g|} y .Ke!V7Gߣ#E,gM*`Q*,_?b8 endstream endobj 318 0 obj << /Length 3899 /Filter /FlateDecode >> stream xڭnG_!t 샽YYV>!5CZ~c4̞>N~/~xw0y歹Z]4.uYs߫~WU$LV9K3[a9;{˹gKܽ:; &OPhLfңs^rθ,[hYg5[M?!Ⱏucf"t N7-4xk[;뎽4ppϗe56]#)Tv9/|v][@>?ݱ*D?aY<~MR2UY]T:)@UVVMc"Y_!nI7&"P*^́{e2-7tx#?7,@혐D [9fZ0ϞԡS}$kgV,Nފ* {8sVVJ~covYRvBiThҨ?e8_ߍH:Q|ERq  fsCm6 C(zQ-ʅݡnT'խd)'1-}Jdu2-92m]gIFPDeZf@[/X2b$8#r@lW)̴UbU1rb{+섶0mz"Yƞf _րvA 7n#x]"˪ƟE|bIsD6aJA+oZc["ueE.dIaZk\7lA=an=Mՠ!kZqpdovE-FRpQ+B=d⬑UƮ,gî60 ?`ȭf\1%%e20A`ddˀrwA9P!m[8Lev/ȒsxKp/xEF-o_q^<+hXujX=8Os @rYKui( uD!{gC~=7VB qpJ[`ˍe<̮ꜽ =EkuJ/" !y>fɞ&OɲK6E z>/}8K&}I&7ht#T'd,E&B xZq 媒?[}lYǮh[M&EՏ@OaZ nΧՀ%?j[b ׫e4%[l[lUm=BxnVXOlӅU+F}wEU*\Ո^Ac2dU* O^ 5)`Q=, 6Y{r'5I L2 7/2Vuˉ$aڬ2Aj S6y &>e$6 ;k+S Z6ɩjrpAV[?pmG ,&Q>EnRRM%&*C,&/RK\(N5 f/ yst=PbI ot۝`K%ay2!>Sl&Ev",(p%Q/6@IbKƑrG*ϞB,T׈/?L8d]F1\_1GǓ!R=Ctm}OarvzDDl3Qxe2ʿ̬~Ig BeJ"c D* 08Lk8D.{7)QceTLrR򩠪R†7#*čml v\gwe—BnGƠ$Lҧ.L7>1ȷjfg:igA }dV%? UsȥA MkBD|e%aNEGքڋzpج(FX7ortl/{A,LVgy=a}lx\ [O SBYjVA*4{"^yڑ[{O SoH^DseHgu=yc=* [499CrgAE ?. SoT tRJ"S A7V#GzO]Si!kashuGz`:s"xwjYz8r#rH^muu`I(%$,3˥!à! ]ϭ[~4nP@(B&oD9$NeZ{F_v}T"tSXI_qW 2`.RxFBjhTG[JHIԦ؅tG UpZw!>ن%Rv saF`s(@Z^klth%;~W'nh=ڲA0w .fщԅ^_:~f ':4 _?Qi|$gU%|gj~ʌcOXU̴m=Z/NpK!gŬ([Go @_yJzѕ5wd(O# oNW]fOk2rK: uRUS*/W`l;a|hD?,/sLԯZT%H,?]Lw<1 ~n%̛{x܌y^P endstream endobj 329 0 obj << /Length 3516 /Filter /FlateDecode >> stream xڍZY~!U,$UN2m|♪\ƀSS9kwK9M4΢ͻoWsSO80_$I8C^G4. XkgAhe.Okͻ8$ehCGp̫H.8[i<[$YX5iMLFv0sEA߷x:w<3_asx^iBzL γ+ݶ a- 7? 4̍=쇟|<{PGjr_\NB_zIz J>|@,,=FVHh4o0Qq>[I`-+. 0IYzR3`yFU <6O=VY@+'ܠATZs=sA%/7& ~mRGJYq8@\KF$(Rq}\$UZZ;:ҋ؁|DYtwCe8-V&a\UCS|5k<ϲ}% 菐Ȳ&szxGrB[O0` :]a Hd@C_j8{6`9t,LWZybMn{3Sy7s")rCC}UdE&"+iJ ha} P"];ALz #,*=KǪd8Z6\'9 h^^ƻFDLQqGw9ص؇!_ æSC?KK966\k.$Iɱᔋ Kvp?D,@wBgjEs6;ZQ$&g$@M@>a(Vq۱Te؈50RdennOx=p o O0L P}>Ts8`hDUf : qdB ;esH2)xY:20u{Nw٫]Z-HG ;Jl D8:*=d !RZs yKKUat)!q`gRN%hp-D T.!ג<D@Bey63OI?)1ø=lq5q@p;T$:{(GL!)"F%4h,ډuG:GG[k^|ȽРP*rb"hǨq!@Z%"T*?H9&Z"neJ8}Ef*S)Sgnߔ.)cGҪWkݫ1y`,d}=Dw@^H_!(-:D# .Ys&Ė~jƀēa/u) kg; }i v3F|- T"=(JA=ϋ۰>oe߲f9'^D`(ɄeFǜjT@`N.!t*b )8ٽt~)vq8q?K|V؃;<҂oLOqRQEV${' KqK+&cXR /F-`=U1@!%L0HfX3808bw_߯0"UW/<>,yZwZVky% x qI}3KK 0\ G h2nyS~(sBWIU;ج6aؒjja֥)iFj_/h$+ysh4Ď|:7:Uu׫ &0E.rÒӃ Z;wE/SP 2w;gxi2X\fi͡_&+BéDxgǸny(yaISt@]Ybn9uei02fRh!ԜNj,.rv/w.ة,|E}ms9蚓Z8DPdM _ꃔuO6q&5eBy( 6!K1 ?b<$?ef1v']r{6.āٚڧ u V§d=yҦHMJߡ9Jl/.\2Mz FQp$r[yzv&ѽbm.)͢|s}C3*5~)kAޒ%M^=P )d*UF4[Iֽen'FGu{q"}—$Q~)^lv?e8%Qݦ[QHpÀw?M%e3+eb-4 ,Wl(*7;[z*B얀ˍ,n2Lx&&&CLc#YB^6f 6dvgl$;7"HOo6'ǖi'иzc*qMxͲ#,z >ұz ;.ͩLk"Ne%H嶚gnj}IneA@ u"<0+kX7^]=NLxo@y=ޣUZ!=^o۔6G g@i"$o8sMnq̰3'{H]PS6"Ԣoixfc-Ӷvշ R b_, a;ӗ4٠U`yĖ1Bv "|j+w>SR1e^m\ϾJAM'gc0}NvF^s rBLp^Ewe>2_GPaDl3ʃPoEK{cوeAٖ*֪$6n{$n錫hx`>Ĕ6 hpϟ]^k|okin(~=Dj:TNla#tv0ta[BIݹHw81V$A2se֝V Kn`kqkiBv-\) F &Lb`Ƣa endstream endobj 337 0 obj << /Length 490 /Filter /FlateDecode >> stream xڕSM0+|4lzfJ=6! IJVcfoSxh\@ʴQasJ?%bYU`Y \AqccF8V|}x~?axk'>r_1Rӏ[Nr߁.( zPEP\d*WE/*Cg}}gJ\! QȊLC,ti 8qbe/8iճ_"o'*;I i0O(O!W{P+@CCP_)ͼs•rT.>Ze5ѓ&-16;dN= 4Keq^Ț[6j!sLlS?ݵL lr0Z)Wzd HcvSk}T('rQ9zb!;Z5 Ʉ$_p [}Jw/C endstream endobj 324 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./countreg-ofp-plot2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 339 0 R /BBox [0 0 360 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 340 0 R>> /ExtGState << >>/ColorSpace << /sRGB 341 0 R >>>> /Length 1178 /Filter /FlateDecode >> stream xKo7 +te~\4 4@zrh]i_JD&mqPGę ̝yޙGhJ/7H<]_חk?/_$k09s6/0?l^LuP7DyH|4[AQ&gXу GKAtCW !,MHl.jI'h9qf^+ɜ ndɜȅ5=ɥ!SXzE>Iѹ!jV tBh|A\*_PuRt8A*#!d!\7(j8]4s<+OmQ8v V O {<}\Q0v Ϲ6*O]^FDэBQ hէ.aك:>[F?%O:zx8%O:)vS+e މL^ ̗ iRk=-XnjfT nyB婩ZPyjj'T Z*B|(OϨ<**XɟQy:'T*߿d~oUYP|#!T^Ҫ,֡9TZCKshL?s#}Pq$먿`L0v8 .Kp<"H1qo #=1}w*\$mI endstream endobj 343 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 325 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./countreg-bad-good.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 344 0 R /BBox [0 0 720 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 345 0 R/F2 346 0 R>> /ExtGState << >>/ColorSpace << /sRGB 347 0 R >>>> /Length 10985 /Filter /FlateDecode >> stream x[+gW2h:eh)H#q\("aH4OjMy']vowa8|qӯ;]yw}_-|:w8?> O}4p?{˟Ϸ|}8w~at:t/g_,?}X8zwnrLJ /s78ڝ 'n? }ߝ |=ɷkl=|_oxp;9ra5]LVxGv :XUbtzlm j73` |V04!'BZL(> l^ot'5m~ wlV.\HiT*i λA<6I^86AR/4C:3ap껱N|CdQ̷r^;~rP$OLFhmF# ӫčlu!hpvB6eyU5U<FNYm%Ne,H(zj.$ nC/L]'M##cݹ|W&w%Z/DlIW4\+6XWݢ`qx NӖ>6ШU.` vWB1%5\22\v*H0RM!i覲HV<C Ę fz3v;ϭV>BxKִ;'dc* (gi>KX5io.`i_EvmHamf$Q.[6mPP2$*lڭ^8 YdҧO AZ4Fh[hh[[0cUTJ IT-CiG`cĀ 1~8L*X 5xDehQ{{waܬVqo*'g!3ֶN]_p5 Rp' o t+6@3lK"Ɖ-;mȊ\ r`f0k]kYMEw$650lY Tyh*H`s '6}J-ih LD#2\^ I4[UZKpH?]\q2 żB 8'-Wډ5^[4KpFk82GC9\i @) ٲl`c!0-0Ea#%<`@I}wy+njI>~)o1tw@GLI ALАEMV!7#(B^MB q*nxZWB~E"b;` Nkb(Hͺ5=7h;<ӂѣ'$`& m#b$npj85xfLU%E=n!<ޝjE6fͼphSN RHН ܩ%!rו :ZlD+G4Vf'V&xWBhcn^Fk @`tnUebJ*x Jte-Xs14XQDnos$ 0VEǷc7V7 !2rVĄG)^^m#7B`35Dм| dZhY1Rf|tiTGLi~ƂJrV2D4 "8LpIzCX1$FVkUhDa{yt8eFFD|QZ]UMME>O%!@ގ̏ ,fpaI[VAƤk ZX+ G\YrXJm8b`qZ$ Cˊaj&~D|L2q+ +}KA1ĔSLi6 Mj&bDayn |6eg}qLGcDm-9Rx,&OH)Az1nٓz,f\`ESÚ ؅!B TU{vdpn`#!  @ e!6P'PFu !YT9֒XH #E6*; !|{ D= + 0&7`" 2 nkNdq:u 2d.](#/692 eZ8.9<ڨ@&F?@ْlh{Xx*k @|iCP:۳SxzH]"%`T*(s=ÛTPA0}NeSI tsQ2t/:kM fhYͯGDLl$û3(˴)j !V"W&L' zYԤl&b0.0E.j OXfoųDl"C6^Nq#ВAϽKKj I~h@Z'M!aXBEu}a?^@k24a Dٓn^1zyj54JܣZf-dhAc桊hdF74cΠQco)W F-2P&칱cw40눘9x3,.5/GbgfC)=  @5DBe8Y%f2VItұZQhT"*02kGS\Yd`Z@Rd:$d |4f~,//\500]z!Awa.㗽n@I \ LzPձP"aNl0DyBDd=U#Ml9i#ҫPn )j" ae53 jQkrvΙ'd 4S^LjVHKH JXx۾k!RqYF%ꗽLkW$<ȞMLbt8uC}fOg !&(a H+Р0Ӗ71 =# ̈́yzBHC2j8Sw_3Ol];1`f\8|#(AdC .RnPamDz& {m:]6mf#֜ȭΕXIH }"42]v#^S*LaSV9& A=!em (O};Fd3<ʧ4Cca@L5;1@HRmC)kyiRrȊV?DE˕0%uXJb'W SɀcXrN cE t%!tdnz%`WMmdH>/|tGWFYsKxP3[ؖlM{hE" \d&#++X M!Fuh@sl4븨Kz4!!!xyY P`@RsP<:g2DqT5ˊ8Zi=*=!*;hYe'~֢&7:D"xL=fj@xbTOeB= * '^ڔ&qfWT1͙1JDs+[b]Y>y1 m>#A rk\lx56 uvuI4rB(q,(_$әw?p>&-ęX6#ʕ=,+2A(rWtY$-eY*L`!7/DcX=4d&P֔$dB4g1.ic-+.7<]_@GT3 Siiz6d?vb<43@x9i:N0򡄕Y4=vQ!i!a!IH(C h1ʹ _`Ҿb43l>"b6+&iou!(Uy 8ӳ#{@>]85ẇ>a(*"KJ@l*`1) 2C{e#!:^ CLz rq >@=WOF|q5P"5^I}gl)H$s?Ol|وUG(veardɩ4ea$wï.ePd` 0%ila eQx 9Tՙ6A H=?cgNXWW]/EP}8@4u/RLvr>=asñ.63Sr3RXT&袦vU:",49S{-fO.6 wφQ%-h:A(E,ý=^HSsaP|5Mf D"NÏf2R( 6E vh!D^%ΙjhԮkD4Q6y୆V%_\*bڎ?ŷ =IyG1X4@6! s]y[h#ON&1OpjR n2_NadK'bH?a'D@$,8UJMhepʆ/ͪ ] QU{b\EExZ+`k&d0( O[~?(kA 1 բOfבjj yZ3 S5V)X7y7K(AWoɜy^a-x|(&׵'kJ L +40oE#В- Hc72@w%bt.1PGCxh ]1BI (U4"vl2`eVȂ2-sb/j&P#<4ӣ#\Dy4#;IdUxY z2zĘQ."W X-[MC76@: A bZ ="6Ktn;@́q52 %1'gЏYkp_|k\/U[".Au1&1 !lw*4VQ̑c~$LH ^TV\0 uu{c rV'0m m}ⶠK=3g] ԝ [ c㷄E DgM%EXJL4q_*yt'G5XPDbbX\ʤ> B}M>(F/jCE 3+J$݋Qm΄MbI,\9,K LT1tlV,U"9FCZ#7\+[TlagfkjbZxxBTܳюϰ-$hE&cJc&:^<6kʢnW ڦxHpE윱>b%`hv "&aGf#oml,pqTqˤ[k(D`./>Ck84 F F,f t9&*N|茱G -&n2*[ġ*4"ELvJ@X<&M}. %L멄_0#rAR2a{t G@>(Z"A Q%2i%_ 7j+KPP&O#a(o70v%R2{fOES C1t@fd`xԵEDTe0d'+ JǘPGsVFؠ6(Ňw_o~>yCr?|忞O?A|.V9_>׮_vi~ܝN~Q=|cqҦݱ~x?v?{ eEC7N'u}avsw:|}quݷp\pt_vy|{bܷSwyyonݭ6=|şa>aYȟO>eE>|_~?_pxZ]ǰ /8۟f:?]߳07G}aYӲMayXa>׷۾-_ %c?o| w?{9r ߷o^?c>oxھo79yǥ ,K7LJ;ae_re\vg\ /0_/o}m_h _>/} }'\vޯ-;.}{'q}ywnewi}r+{N߷a{ mSBgj'h7W.x89;gگrϝ{\w^/{.2.j}˝w9W]{{o\߱~~O;mn|8p?G8p?ho@͎ȯ `Ϸ/[o/~vח/??oCɟ˱Ï8vx|n˱ӿ72.Ȱ_ۀoc8<ݽc}}p/X_߽cޱ^Iܯpw?Iۏ«o_9r?}8^T8z F:7xi_a+?-oo^$\׆孁r@l~HDv endstream endobj 349 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 355 0 obj << /Length 2533 /Filter /FlateDecode >> stream xZoBOr\>ҤE\\%(hD;$ޝRdE0d-1;;Pn~wm<ݭgATY^j~~[.tYK<76z5/`fS{n7w/,P#w2R^ύ+iڿ[,PK\SRotsIM9G_Ip~K_?ϟi4Ca(/r2SvmDQǜ x4+Y`M &jQ@vy"g\᭣ x}Gq#Ww+KKca9[Vܲ5| :\9U#gUO{\mA>DZ'|;|Ϥt٥ɑ]lD&AeWOi9_Z'Ħ0W8~m{?82ꝶ<3vbrԁݫ;WHN0XG[Fy%۟^qؐ?B ʪ>}mr8XZihE`4x#[jn[L"B{m@ubS]x+ةFrϋg:jf#GD^=rN@p+QٱAx 5$ d^j2V퀍k PʭP4?nPx+) 2L7Fc%|!S8/z #EC&.̣A0s`IFW$ c5|6䌚r,R)C[9 mumYQf;% NE /[KK KZUq1^΀q F㠐g ;[6+Pҵ@3:8k_U yk;gHv VvR?!gP{g)+6>pO5~RL|TOWv' R-ctB,a տYpc HGzb9܄1.wXcI RL98ܹ% @:ldb=͆u1 0RS` j{ƶD"bw63c)KdOh٭4'Z۾ δv A%A8e Ɔڬ='z/N^8j!OV&%0 XBU4Q#'6׸7HT?F0m&xx~f^<̝#hJptR] , /V*ArjaQ2<$n_b*z ;Ipq2ȭdoYlЦ5Pw? Z~:HLZJv,f Q_H c>7Jo?Y^#}cl;D5vۘ 8!^eȂXwM٫!Pc9RA?`岡J.@:|=49l669jFHCWIPhTN#seɺjW =$b)Ӛ+g x戄БQ5*$pxub2&#a8L3S1)Tg]x)F/x 8 b檟SnhHDeqUk[1F7(F,<*#d{*y!bw c{. -*,mO%ꂾ4̌f>ވ1 tKk 2gxM5R`D7=MNl{m @m9J<*> stream xڍQN0+|q$@ФR[Eٵ(H(f33{ǒT+r^BTIS^QhUT™-}dJf(S2й(zb55T1b3]MHGw\[vHȼ9aHUBk9N& 0)"ٗ[F˵wi̮=g$f'4YL:f9K3Y[;g!Hdݘ_%WL#6K,.I.-{G2*~]Цob!-( 0> /ExtGState << >>/ColorSpace << /sRGB 367 0 R >>>> /Length 3856 /Filter /FlateDecode >> stream x][sݶ~?tN563i='|+#iﻋ@桎Fi";o,@`]2/ݯ_;4t. |bM}n~eիR]WLo|ݛ;սݩ(i nm.{^ts.H=6yPpǔCn}&Zm@ r Upkr"<"j0  LE1^Gחŋ/Pf{co썽\,n&–o썽7=sxW>x8k'`#Б]{XdnK SW]kF;V Ij$ Yg[U0Oȿ3khEV(U]K­Pmp ynj}2#D1K0& S؍1Oqہ٪)L_]GM0;"*Fd\fiouT 4BL'nϮFl{d\``m6p}}f*Yk}C~sr3; TRqrŏoV)&8R8buWTuWn&'r-)7Wl+[ 60SrjP)kMQ Z xuyt,P}:<D}(53G:rqdI0$kkO;Zk\_ ? 6ڇa'&<o;Rޝ}}(f{aH exOgWwg^J/wF8OpP)? ,>EUW⁐JGE lW^ ׂ׺ פlcl'{]%f!jCѪf1K,8KPDǎ$:K &9*K[I|P0Ox3y}o7F}ogIY |>6Az_IXBp#!"Jx@ICRIZ :{W=KbT]ڿK@p'$ ]^ /D 0DD- 2}|Dž{TGHG>kڀO59H37IZ9*散 Nx~ם:?ήޞߝ__ݮ3!0\n`)((a0 ~8,@S쬶A[ɘ|s09AZ=bjB9ˋ6*g/>R去",KǰHϦF4'qJ l >Zت 7 r^cv6+Tܘ%F`%O [U0ON;ԈF>{:dQ{*Y[pTvG3c?C}ζ,eawkOTmFJK%]nAu%l>lz9c`1#dȊ$&ۦL`erYW=2cW:誸zMʿ6BjQ,]d$SLS^O>*6E/;@YU,e>h7*-7ޯoZ gd.as8hۑ $SN }[U0O 7.|[>o?)s˳hF}oF9JP19]Uf3ӻ3n {fňjh<7G Iq>Jp(!}`nCG L;j~=hFψVTp53\;rV$WZ˓ňr9\D3|̗:ʩlfUF= JCj"K‘K4%HHHxI$j|iܲ*b"q1&dbQQ&~"4-}t(MՓ(TPp-1$N}HXNI}*!%n$OOI>̧GMD<:ˍ%>&))!aUcY`%?Ln@~E|m!f.#X!)fd'2S}"7hyZE-Ӌ|M]9lYM4QL)ι*ji2m Z#$0l&0lʩ1me#db:6M td4OɨϘ$~; ;3LzY?SM臑5ך!P3Jv/5-(“,~A._a|+yצqJ2-ۏg`oV`́ 3b 4Ƶtl'ICN#u|K:X/ۿXS5(:ǘеJ&Ppwڿ tت3h\ vm9ehlt{9!F$F`Feeʐח)0K]6Z$[ QL~ghu|vY4q^8ʹ (L?<1ewjhV4MfFz?dd7TKc8?KMwvrLBXj2w%ӥUɍoEgP99ػe-< #NާTqY2`s: .I`:]`+I QEͦ3 } 1|Q1F\÷mLǜ4鄄y!hǒ]N]6eC/?nqcJ8_Y2qZuuΚ8Z|$R>/I&{qLr>4k:&R߃R5Ü |m9x`0A|tݧ́aitIы{s1C&^`9!QǤlzA::s˻q/Y8C͕88˖#^OE%$ВdыH-e1 &l|sZJ,KSfTg Gؒ"&,ڍ(ɒ.Y(Ȥ(_ٺRӽ q)y?|h`\.׌F,'X[X['c@vN`-oN`]fa܍`-oL-!X!ؔ7{,q˭,f\t2:5SC]MXj\. uK!?0~T/& *;_|pN$/秲\upԬ\>#W)'ؔy9ZN)M%*X%C$j/brCw%L&'w1@Kdfr փكƹgtx Ϣɀ7W|K endstream endobj 369 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 373 0 obj << /Length 1935 /Filter /FlateDecode >> stream xYo6RIԣ tcak k AȰ _yNҦyCH"݃h>{#)Brtp83FBlfx:Ib"G&RjrK^IrH-)Џ}YaIdٺ |EKHKgp$,U*G'GZQL[0hD@[DmoqCٶFO"k" #%n#*6Ds\uQJ^ Q#{=W(r}\ ~Lfd {I^ :)y2B?x$ ,) JKkGO8yPfciDd*.锧SR+sc`/!6Xm3Y`\x--a]f2ϕ8'9>B8DS|VmGE,*)Rl>Z~@:z qz'?o|+'Uokd,̱eQFx ?F~Cs"77-Pu4( E)|H0,7y1qUq Cu^N0UiTBypHr. 3&P<)L%3zOݲEcvM&ΤxF)X\i:8R(# qML3+f tIAe{[7yoή 3NRH$f*@ ֨#vf1."i6-;%ohǃ47RCVn/ƞi 7',[ӓ.PJH0%UrrKvɿ8\&šݵ}f g-/44oGFm;I 0qʪ lsN1Cv3O:>):9g)T@~zcL[ZgE׺+()uK 5S1^Yf U!TD-eB6)[OSZڪܶ R{ُd+Ih 4TLe?1pj}A K\M9jE#"O2+lQPo\{3̆ $ n4%kV+A?3߇"Ыwpnp:rrLk'{la{̔5ΒE1v=N' ]0xm| 7} e,X7g@/2F$Fu`x*N2P uUě_|#tlܰahLH_"ȘdTe M gJŚ0օu~:WTsD8p*H;q-]25;b:ppfAq_!x co-GE\0kVb}4pq?" s$ +9SxxqҔ!mT8>aBm+(\E)vl;Kɝ/Z ^[%n~îm'K'y{k%kծjp=SVp65"75(^:*/Q ]Ѧ)+W !+fp1Yy2gWv2Et[LHUzn^>A0=ŰZ(܆`?L endstream endobj 381 0 obj << /Length 2859 /Filter /FlateDecode >> stream xZY~_G%B qCq*r%%ĚJf0 +ERQ8{O6|<DYWjr{7);UMnWWSegˢH0!35a67FO;~}>t9='xSベh/tiHsV IF3n\V"4g_MWr_C˃Z3} ~J~~Flirsrt;ͬLïX'1h;W&spRKmi90(r6#"~.k[%[Y.-C^j= r xo'QQ[*D\?WJVh *U2PxB?OŻ7&њw)P y 5QY\lsW>_jKV+.XkORةZKၲb/숢(: )_@IQ|//Jb~lϪ|J$A0KbC5l渺G v7' 8})+~>JiNXP%s ڣ1MJX(!5nkVTƒDIkixaƇe*Gc93ߟ$$!-o-rGs@:1f&! U`c[| l"̣{zڰ ݆T272rЀ7l`Ӹw AvɓJx~%9 /ޞB/s#֗|5:@s)IAVNeYL~mLc|'8Ӯ Y*9^uƁ䈲gגdCl # [W\ [2]9>&w-opV_=1MD"DcH!6=H&0!P?eHIp$5%+/+=ǝfi/ዞvu'^am鋎 :܅ײt<3?/k% >x~hbh2'Mqh:Iz*G%<G'P{A`auB\y3ibS 6\-"69W{X` !d5k2 ң\ ځލo^*RVVF-^R#Ipm C )!k,Cʳ}H~,rR)ޢ#-/>Sl6I7鰊]jQ0K?T !r>< 5zöV% SGɋx;\\3NDې25X&pǂBi#Ҙ.rԱ<Oٽ1/u$x_˜miQ^-!I iI_oкu. xU1pBeR1{Pnf/Fxf>!4if]\H$0 Agwħ Q%ɾf`]NF6 ^^L,+h9/S0]#h* $  ?}pz*{kԉ;W8`|e1yIj$ veCƚp{mx_q&} )@oʪB4BC s9/`*@+a7ѾUۻ+4O.OR`?Jo#Dh%8io4f.g#ZpV4B=L˛|.@X6"EAz]pl8nƲGzֱElO,%?%;}t5 T=O|y86N7C#jco6z ݂3'¢Hd`a6ۮ6$݇{Í"T/Vئln^}OVLUNU3Qg *77_h>VyO2n w(!ll17:P NZIAɿ\vm=6 Ru.c |Lpn59G?F c}[m11,vNhDv b ncoH )h 9Iƃ]"E"[$eheDAê+ V.e endstream endobj 391 0 obj << /Length 2196 /Filter /FlateDecode >> stream xko6{~/IEQ+vmàJbԶ?ҥ{<)rvC"{߉t2:%ӣH%qTj4=RDž֣qh:;| &z̤k L"6ۢeju9~ cǯ~$X2N*@G shLGYF6qi,{Ȥz|ܩo@}@53]ۍ{Ub۴'51 [&캀(Uّ5o{%HHQCKFQj<%ILQV=lK>ޝ#~z/;P1=vدfG53 ӫm8k4_D? `,07,̜ٵdO"µ5RQ:6YEb{! :ʪ||nHͫRʞ ܥfP%3:tp&lAFiA &fբxة2\[tӖ^.At1 EJF! rۀ/'RYTWΉW ,\CЇ8![cg.[l {J8$OƉal^G6lj2MvK\%%b Yن|ЊݰZ8r9.zwv]+N_-zP;͌&WʁEG~Ev< zĒ/2/sz9#+쟐A`E/а{|}he Zpv{twL7 \r풐{) ΐnHa6LڞA꿔P ET%18yo5xk%tsf nr'H º9E`zȬl[j.q>-"I',^at3_8 f (B_Y+2E0h M孍,-9F)SL ۥ@kY6B$$;8a*.86B;is̻>86r1Ctf<\dE Vg"A ED5s~\(r1w]6Fo&L(Zds Y$+$*:l8N %Dzs`sgBs+]* )т&+%$V3wn5OND%B7dMrZ+ (0xp]GP,[.ZxKǩ+COJ&`; q!! %Mb e3-]B/:4Ջ,[[vwÛ7rL1d/E0DdmDDu@)U C /P!\f6J($=sRQNqq,U".O[j4:[2"cXk* o#FPG` R+FT/ gZ1(G \ L7$$s &{GeDdzIKDmRؐ[ȨP Bh46ȸ+6+bhh/1 q7q@}zqYe9OuhfAK뻰)k7^5VgqZK *δ@=D0qpXYC@G+tUl,p+JE ta7=$Չ^W{-<(ݷG9W.Bz'qjZp݈w #iG]&Y#7/P*\/ 9kvNVY0_ K5ngZl@[* C}>9)KF W rKV:H~`b3h4w"|xt]6:w%$+yO7Ni$E}8= SH endstream endobj 396 0 obj << /Length 1682 /Filter /FlateDecode >> stream xYY6~_aIF׌H,9h"X @ڢ5 KebE{DlMz<Ȣșpf'I8:Pa'I'iƓ@'ӟ.yW%QGFF/W.GUɩ){QsV"+8eB_s+zdNgh ؝z,1RQzS\E% .CI%QGbSiEiλW+kW?۠?uvG;jU- I(QdRb Dnr$B2~,sVBZV?#_zV<#kI4!੫B |/:K=甲zD-Ek''f@ãY4 7#DS-(:)JJxQ@߾yY>D>^[n|f9I8uvEtmjQVB(myh4kF (naFI{Lٶ=.=y 62϶GB@OuAD-9Q[Z,  0Б 4n/lyC4QюVR ;NH@G_!QfDc#."X-e1S.*E_@ݖS* #)RqKS3Y nf/axcTE hhdU[R=qGXl =?Nűú^ϩ qkz-EۃV|>5Llg0n`DU,Lx1h*^ ء"};Qc,KLzdr fD xS'8t$TJWTDGv-U-ZQ*z#2:^ EJ6;EO8eoVǻ'"5!Nnx_tp J12xG<#J%_6U98OnE-`̪0K}]oz%B.JՎ -x^F }l*ͨ@y;9H8s[O{hOΝS= d8f;HW"m>錞d[Ho8b ?rdO'^ endstream endobj 401 0 obj << /Length 3240 /Filter /FlateDecode >> stream x]Yw~ׯ#uN{4Ii{,%V#d%}/0hF@@? ۇ]Yw'ONVRgp9_hrqvq)S¿s}_kW{Y /W+݆'_*5Vmk(g_|0熀Ҩʴ+tBoN~=a.0"Zh ɏ?y[ݗ,)/O+AYEd%X)l=0Wh|@)(kuMdNǙL[ŽCFB К(s=CE/(PCe$ 3|vqŮVF4i#b."3אq>SocbOM!Ԫ1 5!ҝcm@.Ru=3u\r{E 5Y1K)kP*K'4GfPSEk.-(D[520ka#%@;x7Ee[WP0bj]Y!6'*)Ziv;߅X8^slcOJJK2ٓ',Ҧd"-LX~4N@D!-4)8LEi # 0hU8ֲ&e 6ՆH0Sց@(oEŁpt4)q/ |ꮘv"\PP'H1z#@WGytGnoYt;DKӇv* g<Wfh;2%4yhv֋fBHf^CN@KVm|CblRI@/QY2Y{h:#f > nHB2q9ҬԮ N1w~{$4΀u_#ziw֋~9H~9S=|b7nbjeI9iL=ܛF YE+Jb}W!K*Sa2p=9<cR=C esAȼq( h#(L&`86b`p%Bk5ػ'4m^FUPVM\MUSlOCY˪TYS{->nk\ Aś m۸^C8<P{8ifr<^C 򢇏ơA>0C %ڭ6n1K,m[-D&5#xv&'=a.ë:#fՙ3;y7,*•CxI@X}3"\L-7!FagۑC)?Og4tȀs9)CGyС_V4BTg@ -YwLX ɦ6^F nϓMϮrlCmbՆg[E@{# 'MwC\{ηXGHf@h6K6`M4]H>|T:|Ub7&Q"[e6-)lKl;ޙ-{ض:#Ց9v >ЭTxP' Mv:w=W~z,R[s B~Hf;=kT! LV(ѯLj IYHYuFܻ{kZ|6q`i}[a"2C6S5j TB6"cAے^1$eIŒ%sC@=Ѡd5H }]_!S%l3OZRkE '#bCZF!u1&glnW=3Y-JF[kYZmx=ߎ)3zR_cHT(k6KLfaN :FS N3'ͅ; I=S-zg 3-APm cj|jJs}?xiQ2ښ)ZIhT#tdT.c?)J1( mx-2ƐQJaj=)ܠd55TkGި2Sۨ"8J}`ҒQq" Y KԯLv:ixTYp4 enULvop>뙯]֯7w+vP 9] ߵ1]I,<9&nu +0VxC-07t}"#&5 ^>أ]FjA0tr {.p89'GU ݣ eRi2"?|49Y),|7$[de_==je[FϫJHwb u0S,aXsV)\;0N=)GOrE;DE=DN`4 Fr^i5]brv] 6WhaݩjQfA&V(^X]*]XJ#`pP)[=K[R +EiP''`=rbZp=>4LgvkΖ=R(9_}`ԴǙ 8}Q<mr0JKwڦ&v?;ߙ;Z_fh_={ƿC̽?mqtA;s{;| yu8I_x5`Ѿ_! Zk> stream xڽZ[~DEs$F(P'(Wb#R\gbAq8ss9d; '}zw&p ff|f.0_|XLͣd P0q,ʂ 6;nZ.|ݜ05G)#*j~nQϳP4M>O <Fh ,(-؟+3u=tk+Ak𺆧|1-yBJu2rḡh\;$%Hſ&rH6_j]Qۢr\AH*[wUO! _!М=$ 2Y~OS dj'Aq'by:iѼճ;L_*"bꦥ cM[g1(OĀi$btrYĖ9f_MYhq|\'$N23k+y"M,7Yîd1Zdu nJ+\(߈#&(tlZi#,uӳe*DMpfv |ᕝsZ>&zi Ӂ>RmL{p8LOi1";D@כ]q)>4003p~̶k E]LMN.Tup?|\`]"ۢM"-U $ 9oE7wbHiu3 Fi9$? ,ZE]gE[jFCw|cQCT ' >GZF .ٺ[/uOEt/|&os1DN5>OT~QLōs% PMSakP"Uѩ0=A}k[0w%t HSf :?ܔr)n&}ݩ}A'H%x&)]`($M#eNCs|Q2R" nqCQ,#p4Ii֗Lv(#40m Sk1 wlx"+.?R*(./p1EM3v:^ (ؤNn=5J㞤s3LRn;SQZ Q7rw3n&:D4eFJbAw&E  c$^U}bXe|hcuS)5 XFaC޴/Pg#' Iq_-> stream xZ[o7~ׯc"_co`mx~h{ZYJ$ȑ|dM6- p8sH~oU5]kuж_G;@5mj@'>8bϊ<V^pho܃AqK.P֐pp|Pjnݽ0ʪɼgf/^4?^}v\YGa9i+nX\IXI+yp+`iSl4W爛yj\U'Gx#Ç`#y>H׷1OE(./EC(ƅ s ()B B[ɑ=N)3nB\kY j6 镲 PN.:HmZt%:uJ) CS/Px3%z(ezN "b8nnY-sZ)%[zJD$/Ax{ٟ!E%*R|Ivtϖm<=$G*|l0t6U2|$qT/:U@}/FjhU _֪kakUr9\)檻tNL猨|جRR%À,Ҝ" & y0{CIsڋvqP6U=ſ߽߳˦~!ħOx.1}x:e!~- }a>{̵Z=`lwR ǓmV/Eb6Fn&:Q}!WxRcb|J>5C? N |("SHI,'hu1&~\QB kL,l'x/b6\!Ԟ 6Q1vqm(mD9zp'U QnI.Mfώ=JK ZEߎf/*Ys=kڭgeW$3-VӻMϗ^ Бb[y17UY ?e=g𐨇xۊtiň7xZ}|Tg}mWx6eɋguG`tZI15Yդ]gTaWEKM2h0(KHB +,1,\L(!Ѩyy9_ը57Q4(_HjY#lh*CWIQLK$'.U4GSN~%wO\=I¿얎;wNj:...T5kz.vY#0" y2 <FCan`g72yvDIH_շbR2zuWVh! |\fS{| w9]r#K^&StXK~A'j' YYU v6t_V/3 6AR=E*xW|[+yRC6AF "9;WrpOxn5P>ܟI4٨Wv'" 4y"fSq3߳B)yRJ7{b?t)pmG'D&z9|La?e.#n2:{uFo/G-*-6Fufv#dOW>ˌpy2X)֡#'fQ,ʻF3VnWȔvmU~,_?kEvq=!3B#Vڮu]6tmԧR:t Qҿ2=.mS endstream endobj 419 0 obj << /Length 3081 /Filter /FlateDecode >> stream xڵZB0B-7]ԉS;14((zԒҝ?]RD.ggf!zMٷ|b*3YMLEL$,'/Ӹ6Slo?%I|l~袃/p&+O;3׻FŻc;q{lp;r AB]+cXyVHȪM4`n[:ڲ}ph(d7kGm>,+P3 ΑE{, D"wb=i`üÐӹ8ݵ; Q` <_`_,Nֱ }Ce*]>)J.O'KoՍ? #Jtf~oQ~{/_qLE̞b%45N\<)OK?rxr쉀O+$nce`h|3?.4DI'D{{N_!d*orR?1Uy0iW%ī2̊Bkx0KM"Hi2P10Q_"{p]y^\D^}!h$.m Tr FVF#C9REiO Vnϻ W#s5Kp -p%QH;M,ijsV4"xuiɾ܅͂BD?iec=sץ?K(XrZg}!׾K 5ڄ-ngd0l [JqP2K#4趧:!Vy1Rp^sA8knLmه xHBHfOi QʲlZ+< VCmšzϒbR"7l"@GDA1Ŏɺ=;GK"3?{(pXZޏ)c0z5Agh|+Qkq.tԑ"id'^Y,2AR*c :iG )dLYH鳵'%6Vz? J^XTHr8 PpHXѡ1#f#Lvb:xn!duIK4qsu8klGO=.=vbMf*3  EYNsQp4Orid3"G~M2@ܒt(#1ye#3NԔ۝AfދZr+NS7AAxKl"6pӇV|H 9!TII 8rZ!thB]H:sU;ƄYN]c#85>{VrQ9e ICw[#"hO6jz`q +c+lB)Q_(%&7ߪ :k3 ^cAץFQ*jS;o3 G]&-x#Mh).NW_\TL$8HkF4׼j;|0{Hȥ ,]8W̏W/ /cF&=76-ڛxFy&iUU Pq*FσCts;" )\*uBqt?=ˏ=.+-ЮƊ܋u ޟUa8o/7H^& V28^pt\W8ZH F=KvqCOiC3< w#~ih4>JԷ T=躨/\ŭ 靌"Yl[(OC!PCU'Vςc.\ ׫ Pr]weJњQ/Aq{ $-ŹVKÊ#=XZݴ`֛8Z1wO,U05q#^i_/`*ݭU{C%7ѥfb0I^Fydhu)g j3Z q⊔<< Vd{wם-h4qR %ϯ؊T|߾E(3B^*~9r(X?d#GMI+fߋѾR|u^ eƄe_ƎdIK{xdr{ހmˊ`Qx^^^Ҹ;K&pWg"Tj 0)7yBY,JUEJOkGmqȔZ el ݏ6 WXrkܚ~v[-vC!HڲA,7={= )N[ ZFi_bfy 1#x*Zgȣ`+ŸہzEd,+݈8n#08L9.QX W>> stream xZ[s۸~ϯaG\ 3}*vv8vnhYQ$Uu{.HʔlL ~@rp=/~<H_ xEir<(ڽB&N5^f3`dc`?7jxy : k~Mf8~:ؼ>y!^Y5PV[hިoqȬ•W9dܚ~?H8/ "炅.2u^^G6!}{SZhR-`.WQ@ \01HتP87 ]&kxvG >uHWe߬#+(@=FjJcɼorE\B}ȍ o`X᧾/WTΤ"Q)ѝ)s9i?Zp^[QL{3|I0,Iqɨ=sl Tduo5}K9/@Y/po4>.V\ |ܪj0Ahb 쪳Rr7npSP?%wC~#2Qx&߯q b-ҙQ[n2ZCsM2%/d; Zp2cq&f d2~zx~  {*D/TsaQI&AWZ6 M\g5k}epyj~z!}w-揬.)oӢ:-_Qz eT`$Ye*z3vLٖa+QlZJ_lZņb6I[f!NqAA|mb=!34KB ev4jΫ pEo|0faA&yކ>3fJ:V4w NlFݕ=[vWh IG[5F*)V? B6` U<3_x WX J vɯ٣4 9G %PiLDf7>w镅7N_bpr toN%C0Kg3\oOxo ˾zy(¯R9-v\d\NVoEYߖwQQBC2ʱXƂVoΜpEG3hm_Јc/}KpZyHˎLzlt:%rwBY?kސ佐#-pml}6 2Ğy4G'Og}ZƜ ){Jd !-N˴)McD@3YEԣq)"ZyN3lmRu*,o7/T^?p~AS[ O85ß~.v]UKx<41EDu*k~o5nXf9AjT‡zSvPd0xGK]2,T*3Wcm蚗kNS&9N [ }ɡf l([PfFZW>Y B%ywݐcdkMXzzf>"^ R9Gzt&swʐƃI1Р//c˘}/y8!;;}r%j0jU/UOQ= O!?ϫ)#!(US,Exx^̮>N+}O#/ڧAXPG|k66HUu_,5}RsEr92־sRC-Gbt{7uFd4_jDuw?72/ pq?FuW#ɫ ~=D~ c# gF1uTl YR_Nyc4L𸮠`E2nU{#pR:3Cu9쿀4 m(zq Re|~}F\ ,4\ gw*xvLguPmG|kնzzXZOc-Өf8;zAr:HVAcqP <:;3^.xw)ʘlxe٧a-HsˎiOͨ†ۉG9Dx(K,F!zqC7/oSoRMO马A$לt2+VGQh!BL=7W endstream endobj 444 0 obj << /Length 2449 /Filter /FlateDecode >> stream xYKsI+sjEE=celm]Cx?YY}Zwe~U\Lgg~2L "79;؛Mu(.XiZc ~p?Es]o<^_|5wŷNJe1u=Niͳ]|Z:/ bB`5IJf562dwNq*A9S>9L8x9Y|x 6ʻdM;~ ~P's 䬊$/x~dZKv8Ф QP{yqo-{k[#a jc CPb<#P?҂N_o&&Wxkej*C_ŠYmCVlh΢|y|5LlӘa"cŖd0O>/p| %#2~5Y3y5) )팕'XM-{c6;.n (GCF6f&#nn*{/ Ll_B&fiʬ%<@iejHkЙ~"ƀ!Mk'?[i REj e9+oɘ  ڣ]8< 4QLǮ/,r_S2jk]( ן;c8 roLZ z:Qs }:FLǠ$ɕt ϙZ.TfAEjLB3k+.8jRJiãFLTi? Kz m#`[0VʊJX;ء " (vՀs:ϏEA]C5`M>qUG˿a IϹ0L>;SK,.qY^pN~:"y >=!93X,JUYO P]d 1* jmPbDwK*n A>+Cu;˰ iN>4|Z~y~oa5s'\:ncE+;mB2Ej|F"=c.uMAyj Uo'LQhJ{xW$5hPwǭjSܒ_a-ImTTi;HaTƚ'`Z>܇)|M5{8TLD*KR6C^LO>H!;ݘf۬RK(1d7t>%lj;:=z`? MYsa<`إUSmw\( A o6m5/ 2ua~+)~2ڌ]s Sy3}av7ml^sp4+Uտ{وJvi6bRV`6<t(!|̖ZR6\UatE]Qz7g BM endstream endobj 452 0 obj << /Length 3499 /Filter /FlateDecode >> stream xZIsW\9 4pIJspSCsr2=#y+iJJU4|Mqݫ7w~kÍ-L[n}؛:ԦunyYY_u)} PWvp}ܹr~zmÉ?x@lfgSw nFZ)7֔cWXoJDcU\Á;#;6( g|oMCD¢ǽXI*;lMvJ DFF'!6Ύ,;4+KUCCp9_pIyAxA:Ϝ7(#Qm$ؗ#R p~2>p#ĦuIy7|g #Oncwƶ퐱g=.Gbd64z, UuJ棚6h"v/NYXR7`S&[^ 7p&;?MM.Q :eHamV1,tE'J!G!~쑗E@]&#sRlP"yT! ?sCqfxm[ORL*hFR.6i828 To~Ԁ=}kеOmۖj+;[n@- iSb m@S|CqB6diܔ!oPE]ӕ*9rzvxvIE5 Q\:bq&۲L.OהwDb Tj ќU-asGq]2XR P ލ{\+zD3E D'ǖv.0,XhjC)BtK=<" ->zuZɣÇi *1L-r GX;?${@ E:2/]QS4"`j\IK=_ErݚnMF!ԱOV8n_ȿEt@@S[6]T+A7E ƓO֔@\ _̥ -vtJ4Bn2Һ* Xe#9[GFQ JJ:,~O&Cdpf,x`Y\U'Hi<,dWthn%%Dn;V&C^PUrF.2jf+K(iPݠT9Ss$`)5.Er9\!|m@ئͦ~͠0)2iSᑱ)zd 6ݖ'Ҁ0^\92.I,t褵cb>8 #Azb'/"bDPQqрhBJmLHO } ޚֶl GyKBRtSKԞOelվxIp-CFjNcc WhKŎ$TBPT~t`+ĺrQKGǷe mSSddM^]pL_vU| [V i:ɑ]hLS}dcR8am=!ԏ}UHfO_$X#|#AllW>xs>Їq9Xw mla̭mM(ԭ?*>O`]]i&ᗑ̬!ŽoʨҦ%#g(6 QpxqvgZswYPN@cTV p`XoY=:tKJ5^(L+ᔅ\!8}"sǐFGH(`9=')y2eڊ\; @jxGi vp)7?٩˕O"41ZӴڑ|c>>L<2sƩMe|Y寈߯aO0ph>9=MܒRG27sś.`|D̴)H#=0홺x='@p:zw3Ȯ0" 7 +:)-dU*bf1Ufs7X.DhRo*4ʌ&3ԕЭ w}orI|"ezErm$ !rcu$0lf /;lMIea'<}C -~0(1œlȄK'5M( }-0k򽼕'/ή߾Dj҅6=(p'%=wk F)^Tߧ434A+ c•X:]󬜪 eܺ z_{t #M;U > stream xihgx5mi@($hF}93]HQo}m^do}ًraxs0M+kUQ-o֋Jn.Lr ._o0zwQN xe/Ýj#Jv;-.MlcDvLk(xA[źYqiԺ3:IQyV%*#w4]Rd‰0xϖ8a46-\z%W{&sM$/ ~,!yZ q3 ?ldU= z+* I =[>4YE,ecm^bC<[tuvn2y aytJ= tyS kT&D, NeGO"wDPj)?gE?ټ N0v]yYD_+L+PÍ< fxsnL{5[d=,F(v\Ajހ.be[q_דp+ &DL4g&fUS^efiDP#Hf8`Ck[,,Z J"22a[ ?I>4U*&l!Й*T{L4l냺) 6pG?U%/e.|Ngi 1]|NP )h+7j˶@j"p[M_RbDXgM3%V^sTsy366ǀ)υ pcRWFau5f *o/dݩڡ@X KBeM`jx%.´>,wt{}MD`Oֻ$Jm|&^`#])!CgLLo|n='Au9")qmbIfuUu2k&5|i6$bVE%~z#'_9A;V;lgiѷ8Yu% |յBjdʫCx?zx+xGIMՕ$䱟uKԫ*&NE; ~{6 usښ ω;e]fR tBj. H,ưL,#n686處6 ,}ʽ{OGGA y }'3uҋ]p72FY=;?]QMk؍,&ݓG%g@qE!j'|H^`U,sWziJÊ -X Q5$C}Efj`2cPθSa:.6;T9zv!-/]Zp2<RTWp7|]q]p% ["Î^EOWhBaHZөqu 8ƛ&Ӧ:e90M+Sk? FɧgqN[N4^'m"oټTo솧a3N*ɒƊeu!(foe/"-:μ,KМ٢2CRHs&p˴^2|s곓mT|Qo+REV, Ĺ d K]>vNKIMS~ڄl>^@W#GeP`c,މ@ _7SDIkFqY%$6!F#p?)1rO&!gq\'2aNXAZ*]y?`WG\^7!Fbz/tdxXjOcnQV|ϦXsHD\E>K>^߭I=SڥD 5Ǖqg[B6zakbw~VaFΑ)עq-qK=fcdUrֈ H9PgaR(\ =*e:&ITwZ2-[ڪN$96Q}6QC[DyN{&־;i*(P'/$Ccܞ45ˌ\=53Dz)/@ERZw S- UH!qV4HqؚЪXe`ToDY-N bkM̒FM v56фƣEa(3InzeWyI 4ӿj=b@%IܽX)YCvD5tt -n%ߝ/^35F &j}$ii72z&KS.baR%<)o]д WC\"|g5}i!gXIHͩ„I:{,׆/7ڦ1ح,BQ:tҮy6E7T3Wz~5J_ m_!$V$)Ak~W(Þ9%DR ))o}YP'p|/1T#JU&2eX72|a!UIR?)ݤΕuVIX}+Ft(";;ҝab>8 xs$Z!( {tSm?QHzP3ը6}yp~}+qʂi ~ǮoũEoM|gS G^sc?b2VJz>;U߁:nfqݏ)߽8MO f۷ʒuUܲs4- ^O.5a"Y'?D{UNjQ?%6I2ڿ)YPL5]Tl"668C!y?~ endstream endobj 472 0 obj << /Length 2913 /Filter /FlateDecode >> stream x[[o~$fo^s|.=-Ц-іtH)C{wfgKj)K>$:3ΚO'|o~DpVBL&dI Lԗ{sʘԅ.m2˙Rrwxlukƾ\[Sx)ƖXnLI jJ?sdWcϟ/>]jYf˔d,&󇋛|0M8SE>yƦ)0⟱ADxo ZHei>ɤbBth0h3R,g!Cb@Əfު*i9:ϙ$&:V0 & HP 1i@R4kG}25Z*ZףmXZ5)(TW񢎠fhɦh\?.ibc$"ia$s~KDvH1S. +d*9:bq*i>K)r#>Юj?X@a!F茑;iMخ3S8]k5Vo-4umCN}ַ~ƟdM;x9*LdjN(%,[vi=4u2%\98+3毀4joĥӐpV]nV6'C$J@yeI~01yC I+c,;Fy42}2*"3MˮL iZM{w:RS}!r/.1G 'dUkEՏɭ-˨os y,ajNܸ,Һ+g0\+3={4N3D^'>JM"3|UѻD"P0H&i4KsB+ƮXJrd)LVnh5ԦD/վ.I2řitE>4>w(CNf ڡP< 1q 7ˡFqǺ%ݺ{4`enr陀Uɔ&doC<CKipg.V:kyub8"gJ7Z|p |u#=Mp`?\3q fG>+=tΦ7piq*tQ7]H]$ /ң?D8PG 3&δLB0)ΛS*8]+> n9iaSd6K{Ϭ< Yy`j^Q[%m"i!iѹմ%7BNw)ɓKЮ|\oʼn ^6,I(י gy:f/aRkyezW0YfYYAAItP$at!?2i.N7_`~N)l&"6Kw F8:׆U*T1ʝnS`4֪̊`]ő,*;f$7IWnk,ޑ:f붲dE4w$3P5[qP{$})!SOOn<~qYMPvolSD&]t4\8r𫴏jYnǼp ^K}*+IO\KJ} ^>ifKGi-H浿VAv#GMvwK5T+Y fKGvuhf(2r oMÿ&3c/Md^gu%-?5y'0u]5aWA }'>ǵX7 LDO'vL\l%jgͽ ,rݩOhRvc㭙 .IQ嗳dO[c78ȕM5]DcEg73Փ}s(|#ȘY` 5eMA C5FOBmoohV ׶{9&8"p7RQt?דk*sw{^]8q-,pkmu u+7>pVd(>J%\\sJg,iĔqtN>뎳r^p} d !|#ͳ .OH<P)D[HJZ."obl<4||U}Cv1Ƈ4=nPwYw ddy'HPD0;$)؈j·/k{N{\u#tsQc:-ݽ&kֽk޽(5"؊{6n`"]>34yL{epƺ~!Vb ؜Ҙ̷dP%iH0'֠Nx4ܝ(J͆Mi2ArMA? &X!1<`a3 eUVhT|/x endstream endobj 483 0 obj << /Length 1735 /Filter /FlateDecode >> stream xڭXn6}WCͫ(HѴM\((ykj!3J@apMpD>YOg|"8+y)&(JMTfr|Ϥ^tv)|~ҺoEN tm4w~W̙FM]LoWĀ*̭[B:qZ[{gZI +ܲq@L/WThq#f]aW ,IPv0DR:7dVt;]z| aXڕ qKЮ`<пt>䖞4H` *'GaXNC6mkKw>GhW|qV~^2:5紹1y" $i`3+ poC4T{UDv7UDgg Bb):IrY0[3H{b#攢&N}G \tC摙a겫1 ڸlR `%NOE#7xrɬ'نΟ@Wkzw@'V(K7p91y Dcփ+,OţD>qIVQöyRul D-}f{bNoT>^56-O_s`3:CZaˌ|=O\eӥ&b:T` o! }\Dal4b"Sq/3)B)IL۾Ox"iV1mTYY)M,.F'JW7Ȇ48ȱ{^yj+Et) f vߗnA}t?m8xS_u8ApsO41󑌟P `h&E'GWGdJCJ΋hrΥzDJ »q}MyW;Ds(!hԵQ%"p0N(I'WseiKىTX !#}Rmu`'_MzB+diJ&#j(=!`0 oen–0D)zs.g45^u7!E | GՋ+EU2Eh—IH>]DI䆾sЌ2r?_{,[9zP$.Ykp (Y>n! 16ѝX4#읏˳on endstream endobj 415 0 obj << /Type /ObjStm /N 100 /First 890 /Length 2396 /Filter /FlateDecode >> stream xZsο>&vo~xLv=m:MIT(*J{߂$JHw{ .8 (F&I+Ncou)'']ʮ5ŕbH8 {98$&G*8<2 MB('n7PHXs D7u".cp oA)pg ]d;(#I>h2Tu1:qDgGф(iA5<8%caSΘ6vȜ):h`gᄈK5%N Nᶑ9j=ӌc<]K Gi)0OEA2Eg1PyƓEp(Qr \T,G ` H6~LŢr0sP«9"f)vP\N]rxAAs):"¥xlq 0%+OIMc8Z,x"#A_Fdf\hAK䵍E#6=G!DPA J<5os2u|9j^}XΎ5w3oܼj1j{G DgD({(gvΎk^5WéݷߎoE=\C;{'n  [N R[3F9ߊax9{8j>.. e@ E|K =@Ҁ@2yPH,3jWP\0 x-&WoQ1ez݋LB/%ѵj.b!t ]@ֲzo)㚽/\fҽtt<)b2=mi{/ RGJD&}@*]YWJ?' 1 K'ou㛮 uD~[=MbY qݖݝgګoMKSG]t x"1'2|yv7;;݉QD+`~ q>iPnld;,,H;<5M,&j֩Md^$z&q}l5 VϖC[k~ O= .K[A`#LJ.5%^ zE>T*ߐ%Q]uPWl"rFb="Z5=n˵ھl)[,͘{LZVhW)n92B僖,ei^J 6XE 3;qK ,cTPWVּb,b̖S gb~)ZG&JĞky4B M'Vb! M/O )m܃3*Im}hg9I\ `Đ&>7u핚;U|37+SǍqdJ,nǕvlCs/>4ZԗdQ@bЂ|/w% |X[O?g,l\z<+1'OX_%Es?xՌ8>V> stream xڍP\ . !!>?.6f%37kkD 3{_.hܜYX<==\.VtO7k:Q0@WëTMk׿` *:pw^4*N@ǿ2`3?>#?YXm { @EZˍ`h+f]+%R`+Iڸ-^9=}%",ݝXm݁rY\,b">?`8,rEeKƿ:9էٿ?GoX,܀k ?o ` _`aX׼cq _8qˊ5o5 57| Opwqy}k z- wbLBsT:tL>K.ptr7\nRGzWhEI}|hMVk{}2ITmC638Ur$8@@Ĥ)W; dC#&SQ!~x9?髂6>*Kh%Pvb&ewEŔ2'B\G1RaKdpLA iC}|v/-6q=u^_3GtU0/FI#0=Ɵ"ikJ:)WǧE#vd3=VK/4лPa'$F<3-o׌+[Nظ5XJ1#F;[N#gx d:̛nGFٻ^팍F3 }=- 8gИ-ЃR,mJ X~@;Lx09Qaz#nFn;ᓫ'/94H=7$wԁ~ÉR,YsmGQ Dm`qWVd%>(. HK3UQ1B<6❖o5vv|vwNp)qcO )xw Vz?tdC~8VW uBkP/s~c都M?4ed*#{p}i@-TQ `p?sĚJE\v^u0L) uRB>.=kRް6}fQa,BKz$0Ej]JRw^t4oY߼m>bFEFڝHu ~Sp%ݗ9*A;G *ܽ`MmŎIf;LrWS=,zP@FΑܨDZ0`&fg|i]E{/ q}$撔/9 At͕Qgn=}C}f*oeȒ1!U~WH>ȾZM.'юif1,U0|d_ƾ}c R78c AW+ߖr/87>r!-}f#Wݜ4M/!+dB# wZdS,5>Rxi 9u9q4{n,UWV~Ye=|MTDY-+[ҧAzg&ս9 Xe#B@ ɹl% 4I/̹mE >Oqas ^YÅZn`xWXs\ʦWBRz9T5SO џN=*]=Zg``WKnhk>r ^>nDY;<9qs)솎|ڈd0' 6re%ڿp⩷O3`mgm׵BO, ĊK\%Q/.oS ;kM3 : 6g\ND0&*/C-3<,}~hTs; yxy./v=+ Rwo'DNbBNNg⛗1De&wD,Dk߿̸ΌbQ iEЋXPN?+㸲7;| w Y}L87`ݩD|S9ߓ.G|pH I54@'\wc:Ui:=)fLZX;m>4˜'ӏn]KD/.(c2/Y/ۊפx~ ɠq5#\=0v_YW  ylWJ_UfwGf/$BәگIpy҄\ $z|!8h,ELbsqʳ3ZJktiA/C$VQԵvmڳwX ׼,gN Xkí^`WD#&fЅ2o7@"hħW1^wcx^mѹj h6QU3⪒QdWkvϛڰ K8ŧ,8&Pc/ԭ}{xSѢ̮ePV^o:&jK˛t%0x|5%LCÓl%0^}Qq߄h+MJfizq G߇`ۘF}ѻ1&6@ZY:c?I 9fN *4A|7CО4N y9~=+XusLmD8o)a\WL}=>-MYjv퐗-#3-ѡw.9ֶn_tP@d i>Oӂ!eOP'0ʈ%]7T4f32j;59#ale$bO^x&6lS;"o>oRdruWʔ`u ɽ0=Fh-D]Гyى&Aӣ"L zI߸)~1Ip[:„c!Uo w(0N؁{FR{#Nae'{i'F&p)Iҗk!%-{sH:+RuL2 q(6{σwPջvgv ÷?Q@"f7*fB63eP*Uq SjexW* X3Jժ\uJԝʱ*y& OSE 'O`ڋ)o|ID[RKkF`Y@%J Jw.TG:7G1I$̴еD@ykl_zS]ܖmHN,0YЧ 0ڬd{TC67:#0",yϳO`sGr K=%PH4)F^ ӦASBm$QwDag+TCV|(2j'iW/)K;ޑ 7+d/7|atySI9!@]6`GUsvkzW[35'HY=UB/YJ_[R;cYc'p$"uuN#-0"NXoPBoa"%F _%yK(c#LLɭ~\D?Ct~J Au>}s7]4;H,>cNvUFzzTLQ4s bqI}RCt%8}4T2[{[n_[5Բf[ dc:hXߞRHehufܜ< 8'ICq o{Hv"jD"cO–&h2 9;sZ6etE'*{5QQ9Yڢ')Rsi E=1ѵh3ViOrUk3tWi/zxg(qoJ;m&E낑 X ۝6Tw%?$jLp~ENz$o6 Eu?<[Ij "9h51DqRHVt]D2 9yj+!Y8gZ}jCdOTBqybMί:ho[.#zRG? }Nr2 DVx??ԃw -~[螛}➴=mtjvr E*oxrm.??,׹7AĶ!P'.U\)>FCI٧0Ml&R'Ӝۖo[R![Af+@C5G_aBS,5Um$ \ZD0 %ADgGK- T-ܗVߌ5ݬ:N7cDx$eSn^.fvo0*;:$k'4q>Wyav?"dvۂ.&hM%p!rX# ê]gDXv9)b 5 Yh9"ϗu',JFX9(ͣwd+F5dpNgV:{>f-.WXxjv U6_ٗ,AHB|ф,Ȣs*FۢIr42qIRCwCmr02s|4g2#"wbШ9|Z-Im\12Cz e] OC` k%uYVǟJ٠Ny Ey2{fdڢРhj[į~/uqw6uM;|q-%AeJLkS:L` 7T/ .6Xv4a}nE4*#kl_drzY>2֛Sg" MJqJ1>ˎU ilȅ 䌶;]+4x4kT?1,)TUZqcfE[jܧi9lx"~v ;ސ Ӵ bjz;X+·2nf]!򡹬.d|j9~材g wEld36Ϸ‰Y:(Έ2SYj:X+EȴKM7(yOYދrZOGf-$CJPT=% dRt՚xn}|Uǹ?9GqoVNZ<>q]o)Ƃӆ ;QsgzJްlU cJAoӄnنMoeC3d sℎ?LFn:T# YYɟ˝F5) 9>Jquj4]^"EB ,KW10LߔľUw60y{%M`"(raov=qc&Ipr"|>8CzJV̲uJfEӐw:[]cr<ۭ[tu!UIw NmHSelX[^oAW7V~D 2^w¬B^C/$Ɇr&`тIsQ+y~MÊ $f2,;봝ĞUP@2vrvF [}wT Wߠx` .6)'*MA-Eva%51]X4aQ;"<p2h43"= L:U? @MbhZUAuUt )>_"j bCE$OU |1@!Uݼ:K>}W<7B}Ƕ3otet'L Awd#¡c5 cz,X4߄"׊Jcލx!ZM(p B7a?<|lz`RNՊ'O.3٥h"%Al(8Lر7÷a"aCYZ* G.WH='?.e]uP.3|ӾPVf5yܙ8Dx<A /pN]ݪßHϏ_CU{ Q=Ty00Cb'R>f)|+ƕ09_ c.$#yuPA;_~L؛_n~A, ɨ,p5`ÅihF8]C>xJ` uoӌW9Tó2]N?]@:aLr+--.hn7椃 F&B!6\Hwxu!.tn%oor~d xK~!0`~`m9beė<&YKg Bj-|ɣTM >dv=vfr5'+S//6.>`ܕqa>q/n*|F=ulhFMn5?DU)!kjN\5F9 qP\/ .q]] ; K󝮠L{ugy9^E =A}zKrS#z@INseH1dnr&4+(eZ{"o"Ax.܊UpUz Heg3~Q11Ug{h/)ٕm,o;Pn#Ԥ[qtm̭-xHW|̘i2Puqwt3rɥHk~=dO]~)e陝b2 0}8rW*\)Jv=Ntޏ"K >PDrA|`+9I$D򙲄UN/1mZj-\g+^N/ii.68~"Ms|_Q4ga{PǧaJ}E.z$&2a>7S"j&vPx;QR S c?! ]ENf,ḫUaĂ қl’̀FJ/uo47ߌ@ucE rivw27 HYs׍/n;Gש :ؒl /|΄8 dۂo/kVqU@7ْ |1/[̡O$OJ*TxPѝ&ǝuL$TY_=kVћ:#4^OGd9OԳJ6(k6=Qeղ5Ԩ}sw:0dlOMVGmYxH&zqV"׉X-\- N<.n=~="Q(wgښV7KkdEȚJ+7=17q1ϛRi@yB@'Lپ;% ]:ϯ0qiB$rKȀiPve*K9K,oT_cz \3+%"P=f:bKZroZX>sѻv|vv4V僋+J2T̵-Ǵ/ɽ&`?D7d69ŝ0Hqi}>5vÐJ6ZzW*@N]ķ&1\>f Yl@p8nIL@gkC̋ ',-׾鑥  V\W4zs/M2%g dNr6ˮ9c,աU|fnQG攊?4EzaAmSN ix[Ui?={]ƦA7dɋV]b=-*8lnҝ!i$E>[%*dSN] OY>fX.9d, ':-짻` f5DG HqYjexk>ȵGY`1mh7g_A-?63͍~mE!P.ȦnUv֯מ7 4(8NřT8gj`gH~"It^.cj0kOxl^;ڪZVv(|XBоJơ'% |6Jk#cnJ ?OM*9u:/`baϫ\ Sob2Wu'bDuhqݤ8N~](\@A6Ix ۧ Lj E.)gj֯^fWX~߸tKBzC\!x(wE듌?L,EB0voejѥ?iHl}4Y#)5zzZ+~nb]j2mxvaLwѠ8l\HƵͅkmX{H>J `FQ$.< `a!9䜽q7Dܠ4EQ*mȸu玿\=^﹆bZC\-;G\P>uqyF=!=0o{֦CtMhukue<ַ8BUX-8ASՍ nMUSJH2sKmM(NJJxv)Y8q[xS݋[h*+a;N5bo[V;Y[!azBQ(Y<;σR>#a 'oN 1=n˂Iv å|1\812$X,,Ɲu]/]xz-U|YX\{ {4\ށNѮlBS=u˲a)f0eYM}22觗cdNzWO>f=Qj4gJxs$,7j2aу*A9)(?@E:4^iZHyVjLO S!ewگCKŒyR127Wsby 76!kw\Wv:uCq!ICU,{nG;Z!(r"`T1qPzA_D!dPkYZh&_©G?$vzLHZ\WJ*YCglAs/~̢~1 圥]3CZ>V|_7~ gD m&|8ART$A78V* zW+*Xu F S ’ɥ{t>bqI*>n J_4Ս3AA<]+T11v w )8=¡kod4@./?r M>6XKy5j2k,oƠi5`u Ay݋Vl0!GϺv[I6NM%D\ߋ ^ aSLGnl~KYn@9ˏwChΆָ#++zA;ĕXJ}De endstream endobj 512 0 obj << /Length1 1578 /Length2 9640 /Length3 0 /Length 10675 /Filter /FlateDecode >> stream xڍT. (% C HwwtC0tKwH] )tz[5kf?oMK,n6ɀ,lIe ]v6'  - Vq; $>ˤgCe#@ ```cpmn6eB+ vXYC}Л3yp; 6@G2j rxhhm@P A/d : \X+& rA@ߔ*@_XPh6.*4Pw xۘ]]\-@svOc? Oqhnvp:z8Z,mA2J,P(hh~mf\Wbuaq͑w2K;ZH@P̟Ws#KG 4,\Xm]AR0f@  `Lkc zCvP+?P6Pb~9=O_?Z*%$V_QJH=<fn6;;qmDw$\5 3w ٸ̟?Kz? ?z_ } e8υ[N |qG+h"cP[9Dw9#Hb0y^=v4[=!'s7yI-@6 }v<X!(; `-X">ٿjZg;_1w@_?f\?&d0 6 n'qgIg`^|q@Lazn r%2؍%M)H}\֒z`>ӊ2?H YSlG;E3lm+j>{G]_Hn"CsVa`7<B*(3#Ι˫i_ oP|c8 9bogV59\:h ^\LyK*y^7ܛ8MDJ .a Pq7ςk^S!yZ&URd>Ri$ZEy|G(7@~%ٞpZUOY^TyjjT#WZ}%۠W˧kfa>|cfI ; .&L÷&OI?9$0e (9jLYSNbL?f/]R;9RA5dp7%}wA| ФEZ oa:l^JCjHyU )wW["u9[odud95rqVzB:$kJ}WW;Kd ]K+g OhOW;#))1DD>).S|"e(9 i'ʋφMV_H5RkފEB?Hxud ~PA{HwGDu4U"'>+*BUc68u]qr'ܞUF]Bg=Dۨ)I4n|KO{2bepě#t{ED%9h.r Oi_}ftGԴ&\/zh;LIeo}D4OAd;@NT7Ʀ|P"Ŧtp_hnulDd4][d뎫E6|{GCj̮S*jJy`(u=2n+8KlՓiDLjZ^;VE cl4w9:`:b],.4ԣ!6x%I9Z91=x-ÆRf)%؍Ot)<8Җ";hЧ\dJ= &٥c9Ua@M$z7gj pMJqi;1(Q\00}ӿ;ϺN{oT%a+g Щ18{ALW[݌ _i!NQ.MU xP:z,E*6UMrPaثl*kkekb TA( ҌLێ]>7.G3~ it}~'_0f^KDO%[mN$2N]:Sv[eɧKOɽ4$,^(NuR-M[}{1.Ha%di:\Nn)lo,bFlJfTl]l\a },ɽ4(-Q9 ޢMi܄r@QJnIgjM 96;AzI~X u$b'| (:=-Yrpaϸcɽ/1J-އރEES^˴!${*a#r=qTxz-3c(nmWNo_z.)#BG?Y<[?Wk@L#TᚙׅNGv.oW LrE5?.yq³m_2jjW{U!ߘȝGp%nnŒ=pElwޅjq%M0gf\^BK}`CZ[ '5qW.q$ Sͷ$(1Pܨ .͆4]y`YWZ{Rnik TɣhZ5.VGh:.Z7§FwX>  7zeM\Xk*q[^F*Q2n`OOo mc+Kzu9Oajۧf|͓%_+p6qlPbӣBNKrW3Q2-y w,T;Ɗ}*Zx.ElPk@*Sb8٦U2aLJH߷Ki)smv|ǐtK-A"Djwu VaViketJZ2-b6’eo湜"&FzƗc&:aV]u ʜ,ʫ,XCȀ;Zd"8psk6bAb$̰]l* z\A 켐|e<;91)H |E*9]1XSOYob Y_c2RIj EL9N98+dϖ۸Ev^/gc-x5^t?|e8W-!g*`x Ǐ䵗$>rxyއZ~;FO?`O\1M&zfDdƢz"m1s*yi?.9vn*"!5pA=8( -blCExpYϔ,yV跩ޟhDhKfa\.] |Pt3M*\: $Fi%q'zMCr ?xYϺЭۛ!*%֔7dK|pqxQ,S 9t:S| w!CwC V$hٝKR%CDD],d1hKw_M+16{epލ< &5vyhG_l)IH@ |w0 Gd2bU,{a[uqi#N(괌e(NčǞ{0O`@N:rcS, &u*%-#yprp5*!1Rޜ5Wn yA#3ګ?;gZYwc[x єfOH4~.#D$׊a;kcEGF1 IOKk}$%6Xwuu~S^pR3ƇNÞ.eOzSx]>ðوiF /ưc}XY7-@ql3u 1@~e&tK«,|~ep±Vd;*\HىC-WQ, JP7-f ق`E4i6M6i]9p<#YIږ-VPT.'/Yo jKgy[A+Zੌs4_=u"!˥`[ \pY_Vɇ}Y%L!EޟBKO:~zD{- ;]6_p;⚚h0g!_N.̡M!hmg9yE7Q^ʆyA]Q1jn>2hek>0.71NT8PanU&!ˤ9Aiul!w7%kcRD/Okz=xn۸l:E >n |1-]KDZF!$Y,l'^$ٴx5#oˉ(Y,a_zʥ(gH̻wu dSL4sʽ RwB&1zЬkGL?;L8sʇE,ÌvP9zQrQaUxx(^~`-ٙUb$\%6ӺѾ""/IS^,ζ/c0==_2d=XǯIlȚ<>:%]մSO/di`{zn+rKZÀáP. {O-d'|:ΪJDFL"-KnM`-_#.$y+KJ ;]sH'/MErf A59gEi\(]?O^SǘT%t(ʼߐHữ;bP, b63Eb_$8䂩b,E3Y)NWhW8x )t8 t2;]`BawkDzծ3˨6\8ˤqfedbԐYy,;;sUF')$b$-t^zk_^S) Є /K cpY ([%%Q րU`ۀ&"O(9޹Ȣ_& be*]=xoD di*{Ǖݡk2'.??էF@ +bdZz~bv(W 0+ btk{E[RB"DicŤސchK]ezEVze$D]wɹ-̔Nwiv e/&wx߈))l$%Uʶm@@+iP5QQR9.&9>lBX3p܀΢3R$\ľJށ' uO]a~3-i(sIvxSȥ <2;eIA|K[/||"eήr.L?2LR 8|g*v5 -`VlP__n`pZ7d?u{i6Ph oBYx2 ރz(˟>& Qm': &R-gC?"$@o )`KOK 9L*JZ@ s[,l~۱yK4@qe$1m\ ).v͍!8AwKeOWƊ[>VͨC)r%'_Z[1"++K0V!e^:I;muvcm8gSwJ%[?V0 b̋Vq Պsޫ?hKݜUIY< tSo_+y =m#럢ocF@j3qYHsܳɻZ<@q܌O: ([B$tqJ$ͪ !Hƣ#W/&mA3g|U _!H8nkL-\OIi5`ܧFk!& +Y6|**b< ' 9pp|+ZK++igW6|T׻U.NΊL4&ُٹ%J*x5seҌ؇LT=7@FqC8nkl%?F 8sTj3_rZgpi}N)䟱/#{-|=?+ׯiZ]\ZZFl"gQhLSxjpoOȨuGyMKf5_ * n3iꑆL{Kʴ9]/g{fev5}AZA3 9 G575}MŵAZYn J&m~zOƚ5BHvz1jw^Kl;p(JnQ>28·8~_û;O~RSIg |7DŽRʻ5bjyfK.bD[G@mhN@WJOJ؟BiD+|FcDp`f8f J0 ?JU@S|RTo_vv|-2U#O:J{vxY'+JH\~KVc^dO[t~Ǫ gDш"47쩎,rՓ}Z(ķ <ΒDj׃zs(oVpn2O⃷Rpʢ!sR U=0N|WzHzxTj9`y۷Ji,GŽ\%vȋoiE$VojklV|$5JKQb.L(*2hd=c "yl;|.M_F42n-(yk<) s‚Q'^zt`6 5QKcg(c݊;8X5.jvh\vS2ܗy~}WDX RLˑCoYf1)17vM ߘ}ũIh;uRޤ#A_Qȇ ٢}ч:q¬MHei}[SHtwcrJᔸ=&3?nW,-1{$ ¦j >˘ӥ Sygk"U!`g=\p9=DcK5% YՅY;>{ax gdKW mRV Vo5Slև}xVxII1GTUC&i܆PVgmmE5 z`AGkBݛ58-N'y`/jlD,֛ PӲ܌Yvt>PX`uat8_"̦ 9#"@ZI}!bӼUϼ^`#ɇXZ h(6 *=Z=!R[/8:uq"-)D:5%׍*ׁïeLPY{uK5)OjC!@?rtLSSo/ +JEF2(NºS# ,i]?G: Fo׮2?Q y8ft!yQ#Onaj3b`BIMaঢ়!'xX@Y۟ytGhs Hz0UBYևk9 (nt$i}u1ZCah= ̀nȧH_ '~m% %`k[5|!t)5?rSj#_.YĽ OlñA\dww/cGChěc_2rHJ|2(1@q`hzzD~;xEW"ի* X'~]#f{,9ͅf<ȸ\웈ӵ3>RN4D8Z{,lo#3% rԉְnk MWRMϼ"(pOKLp!5Qz-Ru=e=1 9UW{!71+ˢE}?IKޤ6jqg Է NKQL>Hzly;3[395-lb0JnT)al1)I.1bJJ r,0> -Fo8aO|&7-%قOյ2F 3ٍw֠}pyYHHeӵvw& 5٩hJipCZ0̲8v}Q4v=P=ɤc#Eu M,1uaҗ^Ja\Vzn (yrSO%vwuT]C`(x"dM)ږE_ڂ֥D'1IuQNrӂ MZmErRHXs.V}몐k *p#OlKavݱ,*̫R?(!H4gDJB}k*D^%ch1}nTbF-Z59vE8c17Av{ni Y2V09a =ɔ*yqC#x?Vru9y:Eg>C]O*W)& Cg]J.<ճ+R`@q8.>.ȼư#NEŽbl?УҊ endstream endobj 514 0 obj << /Length1 2192 /Length2 15851 /Length3 0 /Length 17153 /Filter /FlateDecode >> stream xڌpk ' &v&ضm۞hb۶m;'{~_uNuUs-_^~Idh V4 R zz&ZzzFhES $@;{Sk+X|9|> &+''==?vA='SC-@ hM#6@;S=+ #@?!ȹLl8蜝i,iy(Φ&y= h2@Zoj$ES)쀀hPe,/j`eo{og=kK=+WS+c #,I@ г2P_IBOrgo`gj`OkojG|Y𻵥%M}w[Y;[ZEцN(&o1BOO.&t%PtdK`AijvsT/f`8ƦVFogР?_>i}L󿏘NP_ZZߔvӰ0hY L6zoo鿫Q/O׆? 3,_ oW ;ZX'^RbMUZhk s~+c^h(k``!)|0Zۛuhc ?.[XM)de`m1\?𱤆@g@Gke 0DYYtXt1xEl :?@'1 fO }d/bA|G>?#G?#O| ->?N"?GIFGFF_?cE??XenhM ?jjcg`nA>1:?>l?^tPkG1B6{mVՍpa(׿|\>b:Q`bSr98[ჭ?[8$co?{ghgNfX_@ zy[YM@C?3,ɞJ]-t\"L]sFԯs'dҠPMCd|hL1HgN(>Q/=gߖU<  L`(p6Q%p ~H$*<@7dYPe.oeA&U Q%'~Uш4ђWWlA47ͩSOÃc3v$\71ݫv,ka2C8'e}32^nIБ ip"RQ߰ B  Ֆjk7܌x]7 8ė}{3:4u\YD **U/KF:1I v̲&ޢLB~n ĸ/4ݑlTi鈁Yĕښ|4lS h;(㞶ROq!b%iK&IP V:|oǝ νV7,6 N q>+ٰىT,",os9ky3{U"RJzGc9jҗB+8ӭ~ 84auvG0ިpLC 5CaϿHbꦜ<0N1Nj([2H 7^Q|4mv4R Q 0j qTx 5QfukE" rBtS֖?>M#Xdvi:YOw>8"}aݙnԒOI![D,̧֫ݠuvW@ULG.^`S~q&J65wMJ̺}o zYиE1jR$/RuH KrmvF7"/,, D;Njuh 8u^VRX줹lzpo?`T.NvzwaB]17IS,sZcWSmLh|ewD6nA3g$KF2ۿsuJ14uv;̈+GXfEs 4_5g~4ώ]T(uGMnqheNX/*R-pUFFst0 cֈc:zYkpZn~etvy''hROEh C@(+:.qB(>Y ?h*e@,Rg#&ohL*7`[ٺȒ5&1,f8ougVِh h4&\c|ȖC]=jMs O*G\jǤ E^*Sq=<4x30ƛsƤ6Zݬ(v $F ]9}%Dd{ȩWW 8F~`a{#$"ktK^jgCX 쯎cN"B ys\FFى0_`e9 o'[Vr^CT[U?Ja- U֝KRaP*eڵ–]:;dhf8a1=\?.nSv *{Y3O|gA1CWuŕj,x|VAR!а#/H#P&@!uAb0/<)M2ON :3EVj\T }jQp5=jp>q%z5LyB$J| }"XܻclF^[s\Ȁȶ({g?\iQ3jGj^8m>=Fs}!@{e `HvᜊZD8)`æ9Sr]$+o0(xϯ/ BYZ 3ʗ1zX-cF"cekPoZ4@%}Qy^̗1{{9aO: 5釸zEտޚIꮄ0_37IsUʼp bk0܁׵mY XN/qAQTJ~璃D|LPPfDe9-˽P_Y+2q>m oW$4`JYFUlstXhPJCM.إr'qrpnY9ݦDfA\ܷJ6e¸WL Lѹ}Yj85x絴cW{DP5s:5H6׺̧SjJ: UnUdi|b.t:xVsL< f>(la7lk KF[-& 1E8+vF_`,n=hŌה'~'Yzh?qY4/r/m mwB(`UlnO3~z҈K5$ N kN>̬lw?Nޮo^reqQ;#A\kn^_;iP6AS5o\XZQoIY ZɋV*}.SdIyD/}O@  (GG 8 [䧽3rɻGLCb _eF*%= MQG18'MZ(q@@_\O cyY^Z|+C(;uyu-50AB |{O{>:H֠{\GΫ;FPBeD)- .'|D:=(Z 0<7rfrPeNEg!5-f? Cl$K->tb dΟy ~SSi%TBzLFoqnkW=sJ FqiloF'c-4oքvcH$h(c.o ,RT`<:.71ZG8=FX7E~{E[Nq*ԧHq)BT kLe#E4ʩ=KJg?CHd_A+Lp6&ۍ.z_RIYAtXUf41*xk̒Lӯ9 jPx7ʳtD뫫Q;23Љ@ːyL=mT'HuY`>Pka\12+uQo0Wm \mi 9m u^TRsnBF1LJ#bSs|@[e}fiZ>&߻qǮU>q%tEp[zA #HCb-iwDc3mQxZؚH}h8yjtV9u،%"28 oTWæ ydUUYV;nAݶg܎g)ZFuλ,̎n?=Q*78"eM &W_SrMkAK1V.X/z)S乺7/8i?xM$?@?-+~Ėқh˦{Z j%~42nQb49k>C#ŵ6꒴'M[}8QC9(TI[D#mè.rޙs}hTP[*e#ۗmmg[IBV< _?Svl$Taޮp'XRf"sHu LӲX?'S^';MnoB^|rx0NָXBsyQI ѯ[R׶O=>JדeOl0~Y6)e~*~=kF r6;IfjN"ʉGAx ”$1f 20z8ȼeK[pEȴ.Eu/XKLJ$pwo}Hvl"'ElaܱX gov'sy"y茣k1Z--iEShS nu04dU_2 f&y^ S~m_cHzg߅)Q>@ܝkpR\ kc#FwY] FtdߌR[܊JݍC ka3~ KG~%V9W`c%-? ey<+\~_7 29@(D8q$=PJN>u0Iebu*Wl^*kfNB_L~or~lS@`ci^Yee›EL.3X:BZӁc|+q80\冱òH(Q2%GkZ֌FSMl+;:׹9mnsḢc$%OŽd+,t-l/WZTӧ lye>OWME6mnrohbQiH=SFIO)^bD]u֗ABB \x/PPY09bY@ghW2P8P, Wַؖ*?Cu{YmeASԢ.|];rsZ^|-み 19$\Gs pmuvL PZx`L#}fVBO yz8 ӱGz"OWJWPna KYoۨLrUt1pVXlU+}5`<6WL#:đ*}r%(oEs8pJ_ۘ/CN(%=sk+Nf*%ԛ\*%M0g8_9EHu- 6UB>GtN m OMq"[t\} |LѢlbg-`GWO[=7_aߺՊ9(ؠo(#%_'}iWYqX e#zvޱ.<äؕbf}Zg>)6]Λ1OFY(Z-CpٺzZbZ#ᢅ6NB'11ӷTK3}H_X>OƑz gۃּ{' 9ݢ6/,%ՍU '3E5qUS { jK;e{c2Kw2,U9m -0WyYBiݗ*ERD5Ή=1kR>(V^)(Znv)/}V  I2o9.0gy! nXs{he$RG=plei~޲ Rc 6"Ňϸ/[݉~h YL"ImEf*KU2MCր*UUc<_7!wmo0oe:n;DZnU>&n觥a/(iOC~#P{I<ܓ)?9}ʈ2Jh/jhCB AծEBfm@*(;Ì͏gl ve>$Gugh]72:YDa4klx{;U A((=1B?W^+*2JNhٜZ4 3Drܴ ѸƲ/~"9fd|ޥcMW499Pȯ[C\gxzR969yyKPPton;^| Y9ݴr4.hJKP>rV/?^K-Uj-Ѱy[ O9(5yKcE}2yY3K1`)٦3ʮMaAa)pѤ3Tcf1Z\fj*[DȷZIQvL05)Eږİ:ٵPC$㤈j:.Й&>&4YRK 4C2G4J𺈤@ 󁰐9jj8]['3{KiWљ'9 tW, jet8~oS-"o`VhhTp{;5{5C Hl5'ȖҐ:3xɉ67s]̜RZ*(OSɁ>ֵt<^H+^[j , *OyLޛS&U4xj%l )j -odz7~0;&$axce1) lUZB6e Yu,l{[(`KB35sB;$m0B" IyŘ  -$aҢ!OԹĆ7X-7NxtHyYY X^8>7#{~J73o$oh|7Z Ŗz8\_:BATl`"w r޴3bO`r4'}ŎEu~ߩӠʥCϤ}G?'ExHSVMK?OUIa<* Ha:J&ESw˜H6jʱ<5QhW,ʐ)bL;׾(})ٝȚ2zp4p]t;]0j1m;lQIAĔ@%XT~KˬkU7ZUyum|I-lo 5oJ&^3X9b47pJ;&w\ 2Um9zhA$CRY3.8lmUw%\m|zڳ+n9qJ)we+1aSmӸv3W,SXK&ӓ)Ku p bQOI_prɓS vfj`Ņ%CMZ>x^5pMsB} %*VEpǝ91O֒E'We|kq5eHOxt 6; vJn 4fY?dN `Igz[k[|7 FHfQ~M-. u"Vop=D4ڧzmq!~xNh_1м'R굘 }oF6*RLr1MtdEiibɳ{xG9fƎI 3Hk_~9cV${Qn:?8<Tv2& lA#ZZX(͖<"a. 8)Y%'ٍQ{5OuEr˄%ƩT,OIE7yBj:Jk Ox:mjp'h'*gf2(t4jq|]%ժ(hTfJBoY|r}Ide >M(O!H(ePj*Rr=2T֢lg) 7{c~֘`83Z.qt9ʃDkF "PVkB29\7OkR!KS;l:8o/fq3ZJhzh ۻܡ"#}_ .,q$0{N[NBTfoE`1b]A {L/(_ǎ$'bʛ4 C]DsDDCŨ'lzr -?#Ig̢MҬ]5\Igঞ/ZXuI'[VpR~!eF?Zf~؈9Y a*MSNvgg$.8C'OYΓq ?@T,H5ưwn˫GBCr9 We g?~H29Z(5p<T~*OG)4K010!SJC Ff f00+UBޓ xҖ+iaL6mtb)EQ䛺$Wf`a8ry ´dj /:;屸'RD+Mn9{ ,жme6eX:RZUaYOt`DA*o3i1|v(fS{ѣ,EMQA9.*uy7"D>'bw~44%Qx~T|tS-RDM'f"A/7+VJ 7lx7ipӑeW=BE[LY">~Ib?xx_Y vzčkRE~0WAŐsSy*m=dYyδ!9Sa*7{צ{vQV^;9_XNJB(]]p汳Ѿ<WvBz#BFC=HY-1ӽOA5 | TzƆ;uNNZ[ڑt{ m\^7m tr0oυNn?L&ߞ~v›"sCBӞ470 ڵ[ϡ$|BɊMK6ObTRt9i՛ qMAȣˆVr7kOuhooÅf^!_A{+y<'27ḲWTdE,ZU|S>RͺLqƟB }^"nQ9y\ۣlj3D)of~b"wr3i4k9!JȄǣm=&9(7{|4g'4+@SȮDoVV)JjWp{]-o kS~&AuX aZ?K&問M^R> ^O>x4Ąn`?l֗z(EgXNS(?iйia?A^fzY3LbC΍C_+q{t`bUN{S=WLBZƕDLlL+nJZ T\|vNA씏V@<9W@1.bu_BYAd ?L޻+ -H JXφ3B3fLD: ŵ-v>Sc5uחB%R,]>ϫ!ȭ8{w2P{<=W٩hAX(";@5B!z,0$y`9T@^c4$sGX`hN|s.i5["v(TZ  K1[{Q;EO0bd|KQYAC#3$%Vݗ\^TҫL͊$Ɓa Ǝ'ܝZv_pspM-#"JTͳN:|x~E'z_TS3o:5r23=p[AW8jƫi/}TpoHmI1jߩ/xX=B'CE49i nj·9Gz(Ѕ?}1%9Ζ ɻR"|}xZ! #?Sn*?ehAJURg1\4p3'K&szy iO!r[T(kUE\)+( .ޟk\E;n#074|k? #%h5I]9q)> stream xڍwuTk/! 0t ]tK030ttH ]ݩtwJ)ps?f޿ϻ^S(m 7a.@^n@VM@GA >ff=  őE@.`Pvxx@ $"!xvZԸpY艀Z۸,b i5 [?NZ\CC75S'"7-l,Q{t(fMbH▕kvtnJ*!ʞ5ɍj(K b9,T׌QOߤfkNţPx|Kt/T$ vMt邅IA졌i^2G<CFDR!4ODr %lAwknF¤&k*LHDmi{[rao蘱r-S18HujțR"#e`9-rp*?)e4,YbD J'[²9uc7ݟ56]ARɨNr:V bNړjt \ݧgb'ܜL{qSj8.5uLa DRv99Z7"fXW摤ޕS"#]Tt ׽jЃW'-}O+n> Ʉ:LcC2لSU-/oMS^FJRH3Ͷ'sGO3_X8~-MK ]Y/ vk>$USZ2AFݦ;:&IC*mEZ4cI p) +`8Nr,b 68ZN9TlldJ_Y\8IAY<7fް>|-_'sNOyC~wS(ѿv+"qZH'IҢQY {긡\e|qXI0wg,=!nXZ4,&ÏGD /QΌQH#S/r|YB34z!q@TҖ┒z#-wVhgҧ<ߙ^]^V,_až3~Z螯<;A:j=~X;?{{ )fΔ[(ΕBI-{MQX:DiQ[FFccu$?л "ZX(jD1 "p)lT6>{g"0v2Ro~GtH]ND25[w͙13dӞ+3K0ZR`hΓ\gH-ag[p B]]mLVM,8oS1X)C go&6T1螗:!a#瓨NJW>R.{UG{tj/)}4>º\ƒ%Vڃλg%=>ݽ8'-DuG-}uE~UKݿm *UۄtࡆFI\.Y'xˁ}6@@a# …px NːG||)Kexf2`{ݳ*0VU[w̦[QN;s̰|`%ܛV#J?+Dvwg6zlN" +P-5ohcYKnc(gwOh#+nhܓtva]-Yz;/~KڰY,YnqЋ۩+ *bd9R;մ*H-Yd a=@KFOPĮRX;J#)37." ppؠ%=Z&@߸ OY2Zif܁%:$>: bIc^t9Ug˒{*X텐MSG-ȣ'eKwOqW<% iSef-wp?]ᆙjy!@_iԦ*-VZ 2'(u1|.߹!YV;_*GJ@ڴ?tØL/ꨡx}‡g| jVg 76'bwKFQlP7{<I(5#%;-z{ȉ\HEa/[2,{M9^7c=dmLP5iV)J+:PXn?E_/nMg9<?{"}DZJlK9JdREz+K euuRh:4KLsj,Os,pE5Z(EIO!m~w7:͒Vb\g^EJ?C`7+7+VBΓv] ?3Viip@9 ",)}3Bd8j561aYIHd:`}`fle^r@FHk7RO-TE0sb,.un[dY)O $  _#^p~n+>;sK!;& c,}1?7®Z> IMP?{V28ǭYw㯹I6461xzuz鉜rZ;Qؤ^'8s_jlnGǺ 2!%86JVSFzӷ:?o:^v)JxMAeE Gx3hLܮ|%R5+XMbh:6^gm:HzCzEWUBw1"e7i`=).>E#ѩlZssT?~W'mI}Dg;yvl(.E|YE/(3@q>wmU& %GSz NΡ|Yd?^ڻƅW*[uԃ8ELy Ee^E6Q{*Ĕ(.N CH5A7Q}jU&r=\ܡz{ʤCu PiQVW%QnUlʥt`eܨD MF_.6;4yG#[2%uNKAVbsy3IVج7yLi;4~t)J0o&6+9C#Bs[9BqNb'LfeZc|>MIG{728㲭}: BQ)dGR|_yPoއdQ#ȝ xbp*JlK0;jH^#U2Mj#rHrĩ?xׇ-少]+N"v;N\>e칩VWP1a5;K|"uꁳE"dKk`}X<%D+{/)63Ds4N*[ސiZPO_\J)ևSֺecDYGBc/DWn9ջjNտ_5&쑋{}9?V)G0'0ˁ)`7cC^HHXwT35x.5W/9`gߟeBTe8 6;vHɲ"%!x m2z&]߀}2߶`bfճ֊u>^Ca5)35j1lZ3W (_J7}&[묥 vy/#[{d7!&I4k]̀ROշo_xh2u?{Ӎ>ƩOc9L\l24$x4q2A'A&|7~+(^hn K7h,DpNp :/,CzX=/6c0n{kKct5buCp9} w0CK [D¯!̾lmTX&< ]܅0/&Ɋo2g;L AmN}؁.7vrX׼? ޯ}@̦qJ|h 0r'rx /܄><:Ɲ'6~5~J#ډ=+YՠZrOXef{韛7|T̚xSAk?Śi$:]rBi>ܭ$yP7#Tra/5kb'4Z>#n|V! ҕ18dnDqבgx=aE<SX[VfT-KY㡳Bv`p;#:N&!_\/kb)OXwweO%N&$BŮitXSpCyϦFa2x H3 B%@UjP>hgKAM^!##RȪC5T8S;N^[]d]'ya mM#ifV pʲsUiFQ:eڸݮu{{m ~O͘gl4uWN)|ӎ5)k.K9׸mMlđDӁfۗoŪ/LX}p)^V^Ԇ8NicM). 0#JTBP:MJ*yX^!}X^5D $AaJE0" vWJ&v-S1$2|9D=\g nM̕g %X9OFDb1_oRBojp fTjш21vk5 ex:xQ#Lk?ߴ}M%66HʫXGCʍ:D}IHd_Ymu6jk >sN%9ӳ]wkC{+"9}mk @Yr?k6$N :46x}{dBML1,)wtƏǬp{RS=O-Ϥkon,'E1yι஻~@s*^@1:Y+A@SR+Yz v?ZM*c ]@5<5WmP}Qt+%I]n,MW \81 \=Y'O xXaS?m͖̩`#>6['E1O1KJΓ"kncd@$]6]Cɳ2\P&qT5OEZ+31S[ LtWGQb_Zk  7Kۂ*2fW=i}ՂeTq[rX54.K~/~4vTcjhgAlj _n~Q1gfr;"#/͝gP b nJF<®a2>/[ _pդa {t6Iޝ7b^1 }lN:^"c1kj}I > 4{rgqY'$WfZ YKH_\ ;nI6PPs% gPHδmĊ?CYH;5AL39dkyp 3IzKn%(CPySC 2_ؑC_;-x#ֱcloVKڣiĕF&~@RONzJT^Ѷ]SP#'tzori^`070Vԡ棔e#7M#^._C=*gӷߣ&+.ETQXhӗnϩ XS%8lwܒ O ];96ïZ'N?DRVt, W8vͫ >}iܸzp "!'ї'REw=KV5|iNۦu΁)Y_ڙv/ea; 3?GI(ЫvR0y }K^)!.0J_C*-ZT "_ 6|qMbN&̓|&|e6Jުi beMU7OQPD'JXRVw,i>Ǫ[&#ZWL]6ipYbELZ J;>y^ {c9B;K# 'zXEPG>;q+QqthLDL.s4m'ARL#|?lJojYrص@Pq8Nj+(ˋ /༜og,  u"r+,J>|!^/(: MfkJeYOM[aCA)<镎mڝZVOh%"UAƣN'zUߡTaһ[dDŢ{w{G؛DY'E\~ nV oe3DVx>[Z84Df:tGKHUْsegdk _fR0؏[<Þo'Lm6a]9$k:{ax`db~+9mȊVI<#֌0 `K>ӆEq-<+EYbuvk ks~MgzE8['ns9 Py endstream endobj 518 0 obj << /Length1 1485 /Length2 6481 /Length3 0 /Length 7478 /Filter /FlateDecode >> stream xڍuT]6] H)030 9tHt ҭ )!-(H}Z߷Ͼ ;1!B]5 @HHD@HHm'`7 |p0T֦ Bu0}_PJH &U +A|U^+6ߟ.07(%% A@ @txf<p0 G.YW$KZP_#GsHW8~Ipg?<`Ant^_d|? @Pog 03W@ /"~A=@[ԕ [P/F_anY > E@(0?  sr%Khܚms bBR7v$ 2jAyη2 !Pg_H?@8B\0G5CZ X ݶ חm9a.(_XJ\HHB_GV#KOkpn?3ow o)k_Qzxƹ"?8qоЅߎ쿩搿&ZoT %ǿ 8@`׿:܆ p;/vm~C۩gJ5k Hp[ەS'H [3A𫦢BAG 8#..P u{o~!@ H6[ @Fc/n}{@ 0,,^?{MyDObL܈ęRpשj7aEC w{JM &[Wfm= }% )~h6fvpN\eiMx4{c -+(d=yy BEPV)3AK&>Y2b@)ogݧ([.fIqP>3 GrQ_Ǭj3BcDoxG2%_ V:i2`pX<8jb+E"eO%D9|l7C_]qÐE/nŭ=QP2 _?c~p&V^R֘+ L710n Ȕ"KWqoR Ȋ4p3kWl:/'9wP=) ֜O? M^S[_iz޷pwJR'-Zý<PMGɚ_[,WP{=| H_4aM&89A Z%dJ.}vSXf*%-A]0uKr}Zl ]nTMfѺnecasS+ͧ\?keι-ܽ~a|I^ 2avS'QǙ= >^v=6ay1IRӏkA[]$R&sr_0vhz3A/qHWZ-ǎ IͱjkS] Yg lɼ96I fxޤ}WAeL^ŕ{P_ fyl"QLz\r`XJa NLYޞu-bM3qc׆6zsY׺$Α GnBK}GrUiq-Z^8WXw ZA.A X~R(.f8w޼9՘(9GSW߉&^r=ڞ{{v!y39cbN7akm[zZ}?,+&̩c27s$0Fհ}\C37:&G.<\۩.y~lmbpjME|~hɤG }$aLȪBQZD4م#|,vC a/~\Z"i 49^R75֢ix2{ECe$ n10wp|ɬ\><8:;D%]pm-R Y2\$ϨSBdK,~։0-򩑅`fOL4.}'":J[Iƥw_ǒ4M-a/Ђo%X;tYz|vieGԄ:4]_iQX6e$(.<~c?K5RHQő #.uxAmb]\@Lyw> TW%M]vk㢡9ctVidOϤC.=PGd&Z/^#&DClU7>#9Ti٪=,Nz8LU#Ὡ^w+gzpeo>=bUqRRçy%Ն/ZuE`[־ح9v ]'."/E$>WV:hnQN`l`2zʰoE$=gŏxQyRl*, {{m2E̖^gVK+Kn1t{1ybȅ&W.RhzTTM+h5޹Jq-ܧk:;zʍeG/"b7X(d|Jq(dQ VQ0ohQf|~u@)'>p|Κvg-y(LoT122+!{MO!)@u5:\Zm %&SriRe~&mŅh 㡚R\iø4hpbz#'h-6}L\**v3.2΁i%u"X}n!=84+ 9@֫<1B `6qa7ђaY+SxqHٹȰu54}(.؆Pͣ~H\pwF2l 0"9=zq (G @p9e b|ug̃&d=ա-L׻Zًl/ہMh (Vdt9 P tP;J٫tǧS6'~JJڴa\T]^h.}ÒH=K8 !}+:L JMAh(s+4cV| (N=/X mFtL<#!xF(m{nd*²ĄIO-2e掙דqo'kw7hbjf SCY3'<; K ȝ$F$̒LtmdL{7u]_#pMtA.S t^8tRE#D;r oj:b= -s{cPrtI`cUqQT:ьs~ZMNMikcRs hN12Gl?C)f>I0 ؜9-R(Wξ2=ߩFe2j+~7|䴶zt^7EnES](kGCee+aF?w 7< MED^X G!N+\Wt^t4R0rWWDvH g@#W}7x6)QH!--k~PH!o4 y@J=lHQ*XEvvfn՞M2SUkD5N0Ɏb/cP,{*LH˪0K``@ @+in3~8;!R][Sx4EBHLzΰewvmbf+ʴrHYu.1aUS^ύ0,$,K`˃@ÑKRrLJÁhĘѶB1QvT]8hY> LdH<[psOFf-Di4kdTpYN+ˍWvF~ffSZAgvyJ;37+[?}7"W5L2]D5{E>pNB*x_T-ӭ-I,W;4 pLN쬖Y>c.0's duYn}HP@+ϸ7mHmܴYlj7味oFhPOâg~cq ]#KNrX/#:LI2 {s_$cydyZ6XNS l \Shf'&oBXR64 }L$&%8Cr*xB(xG,qc_-4:ŝ}"M'9"nREd5iQ<|>6.kV ҷ*߸V0Mɨ +O QG*ICrW'T 8, # :g L| %əʍzo5h?[IڹW^%8v t߄E7l>`$<>6 ) h =0.!eTqi c١(t]\]cm[a׳{@fA>zZ!C,ꖡSZkG IB!@2ors("P*5q@a:3L@i9)Z?Op)b7IvAvM,ԫgv0t[DbN\fvv^d&leߕ:Uvtmn6GYFFdl:=TiêNU5|8յ&q..R:Pl 0ӕOIdʤLY\f8Sk`4y^vٞz;Ǐ^wN5M I/-F"xvj3sΰ,ך:تU+KSkKC c\As*yGXsٵbR*m-B $?Tx&6#ROEӑIFsINo1B[h~D'aK,A9W+FcOZg7j:'>u]lb}i薱Ƥ /-(4I%EUjpΌ ܕ[y尧O.F4w)V FlG`t~p1ل*׸u %RBTXn6yRĊ%Q$EHL3 ;POC LU, ׃+п4Y3 pJ~ʏᘂRy%l߇[%9,y׻(0{z~NŒP{~ʱJ~ZPx (a a33|fsduy|jgSPÖxIC i{GyiXj6͎/,5iYk;=0R {?nK{XV2̩Y;m ,^̰c U&Ǧ8T@'Цƀ(~m{ۜX}f?Tӹ? t`y' 1DchanchLAp9b+^T%f̧3Zď)[ k+p+eTt.MB]s#:׺_W<<-b4I-8}^>s#(otCWM2|7dOяO;vF, }y|12SV:)z`7/O MB|+Y:`KdDڷͫum%LzO|x; #3dd3ǝ+Q\/r z2Oq(fp'וҁSt=.=HJڗB"A3S,)W?(JcQ:cIq'hgz4R*5S(%u|(~o${\%!u}uH.Cf587dRsxqVyD|5LT-*|9S\[|;ȿ]B;d[ ܻp2Ch,d@o{CtJ5}Zi"]h=xl}B¶v«3U/jHi )fDZm"etԷXUo't(M"Ҧ B4Ap0@U1.DOykA$}HnK֣ެe̵T%A!K T)"k6(t3:J5Aٹ9JcG}TOt 4'*ϞΕY.-T>nW^58e3r?˪KO=3Mi`:H^w'Q+,]TXY[/Mc0].%/ҤM`0-+ݻRoLCw 4[R#GY욷J]1UO7Z)טf0>00LH#_o,{ endstream endobj 520 0 obj << /Length1 1769 /Length2 10020 /Length3 0 /Length 11162 /Filter /FlateDecode >> stream xڍTk6L*%-Ԁ43tw4 0P-)%-) %J))ҝxy9k}ߚfkk׽g.%wDr9 qxz0=?rDp#`ku rp#;?y :wOkww9ZZ.ՉG U#"@a!>aC -FwXʀ¬kGo$[,fei /{^߯?4dߡX\n_("ق ,yܣ5?V*KLgw?O&l٩{}Qd]Bx dFǼ&ŸyĘh_c&ynGfCߗkdj%|5aMmeysFkeIO6q7 gʆ#~m2"!c߫ o&{oy tg1ʵz :_"x8WV(iij+^F3 N59Y g3 bo ~ r._?fQt;ynIs*(FiH%D },^"|˪^|V:vɮt؁ɔ8]dsP#;z㙋4o@;FĎg+Ny[}h[>ގg%Wpya^R*ljN/w |W=ctQ/.ڴsѼAKAIyH\2z(p ^m']Nb5J|D*Qke1~VsȂX OnyU|~8\4rۆ_24Kw}i%g-0R8N0>1@&Z] 0cds X|XkgA'NdhE5Yڼ/D)?WA T1Y\4#!A4CyM!0)ѝKG7*j?O>p'Xc;H7_w"Es-u$qjA]3jx#v = sF[Kc{OWn/~l-˜]M@ Qwz\ky^o~ji2@#ROȭgg~O5"DkM$<~ǔPeF8Yɒ8Ii\$!GCwX}뛢WSQk$+A\Z\Owyjٙ/-{|MȯiTs+z*{_!^3ViHSX[QI`hR1V':bn3zMEڅF}V[4_BݗGrH噄[[! 'Ԣ?8Q?HSrMWt7`J2Y*']Y[QL> }7,STUSapq ;W5L L)]zds.Ė ?g} 1sO?tn;U;UHܴBF5TDG4Q%!X#WM'1(]w(4>@fDP+`h9ugyVr3@'Tބ_˚qMq>['G } wdϹi5^Yhax⺂Hϳ-2"rT)iز^Au !^{=d"o5hԣvXxʳp̭x3 ym4gKL%N5&ݑq)fMï@O)]*F ecDƭ6R&~(Qg \@dD9Ŭ57\$v-{R >U:DJϙ<]yI0&oY׿_h&QFA,VM1ƕt?{ %N-䔊5T~$n?57_ixuݭ~3 QbTxh&'LۊM.ddVYn,z I96-I'RYn^]:*c7 y \,S_I2-6&h4s;PmJЌQUˊz3-p2LW_" &M v {5y0(NJ.#m̞4,O&-]@n .~}zc5.7҉&CSб#{o4XABKL~:2bx\+4%/n_CvvN?c C>c&E4 ()،lH= -TR'g-KD1Mz:H_D^mUOw鋅r) ?^ IԳXmXjhě*YKÙp"s3ϰp`ĚBtUsBVZerԳ1yo6>h, y!q?ofe`"βTݨ9%s S0pAFᗗ|dUuc'{Gr،ewnmQ'$h1Ri932 k%V^j1eʐO5Rmu5rҕ[gg P-.$(v1Ooxhr̍Ϫ$xP.Y_J$NC-_{4DG/o:  ɑKS! )~+OX9/%J]ll/cf3X:+RmJJ-Jt!+!trw)A0 C.=\l0`İL8V0' Z/UGs&h*K pZ.Dw40y3uvؽ,T<>9kEڞX½Vϖ *6 Aᅦ .vͻ*v2yg*<( J6ƭNOx6-`ơ~|苠. l i1z6kuknxSl&=g B&~qnl+3k[b/|v1:Vke({f֙+!ieF^4.H|=c> W#ͤTmyqZ} ?UV/xodC5u{#!=c?\HCgb_.FmTK̺ w`5mKׄRgm$kiI8R_Ƥ?$1{G/6{'pFRqbċd#c‰m{~^sv \@ ~EpOo7< A@s@ޮBQh@L'>1;![hEz_jjzAOʄ/Fg';)eeS(@Hsʻ$TN6#U{&x%la~枲)y,LB`9q/P狍lݭ!~]>e c$dz<.m7EU{2-ZzV˙`?z39M~55)':#gɌ[vOfsus/}TMr&Kɋd&O(_TKґ֐Ǵq!LϣAS$G\q6v<ِ]=q79Mx9tb2t]XBk"NVq>E5;S?髁\[T-ѥ ÄS}njѱ;_%VLFh`Kx6wcGM=,2[떸K$HY 3_|I)aQu|NԲTT<xcOm ̞$XDR|HT*``[5Kω4˚W<`yN_#{'p P )3;?!kR-)ʱ, V=uF{=%޸c]+}#~޴I;8p0g-WHY6*EuyORU0=h˛/eah.WkqXÁ+P-" n K=s>Ǧz~Oܪh=lBg,&wpUCԉHrv`V|*4VX?G6|dۖD#;@PXܓ6Na5ݟmT:ri޲YSH 9!#@n}^u Bܠ4tGNZ*0k .pֲX?񪏥佞s&n)`,򔮹+!g^FEE!angeJ3ϭNr{nH[o-Dn e{D{pbն]Oa"[m^ Lm'>ܒX~WAR2:" C~+q]]MQ|XE8Rsl+c:WS膀 H˟{pJ{y}KXTL||0t)].7w5`Xv XZf iUdt8u~Ȗ9{kNi ֠#X؋V`+7NG&*#ձGU W.*<093ĕ'sJԗ%#iEt_œjW(Y訿 a^ئԀdY"$ v__|uxC)ܬV G$^GҽWƂrqaʚ~hOz+zrj;tE>bԙ)ͣ3ZtؔuDbeK-p 5aY9|WGN1@;SF#װjT_6tN BHJ^O71T Xtd]Z-rߴ џȞ\@C z Ayӂ9Υ[σ:O۝J/ ǔYeV΄ :ԫ0Gi4- '7 Yٟ̅pKx7>)~yubӈ>/d9wS,5%yeB#_"' oJ싲y_]w%:tgvb_̜7pGHKUO7} ~*43l^o, k o`ڠ!)9aK!"rXI omWKc0sgzyZ6 B}i#m/z[܀t2-J*·%]u0FGvS2px9dhw{D,d9b|S` <޶އȘdo*xϐ [qc4秴뛿WHT0J[jPUuW)uo^c XH^Po2O>k5$=$ɵTz٧#$# OqQ~1=qߒMyR5zb0m}6E|?׵cg[༉<Ǐ8ۀcs0c[!&7s8S"i)/ǢnUkLxe,Ft3])  C<$3ztsDS: _rȊ=T nNytk5>ϸx\+z }2#I!yZkKDWon:2E8;}]q}-NπYJ9v_WԴ`ӵIͳMĨ7׊WH7 &gvm^8;KX8&8-r&ڊ؀1f2Ћ)(%Uwۑ5wB2h[pȱ\ӏR"zi%E>x+:#ZajO#H͜վB慱RnO8 u{?~ =qBժk DxtJzrTXzK7_b={xmҾLE$mbn~g})dئUp[Cw̔˳d{pcb`/&I!N#, %gLU.x"}j)THk<Ǹ'TH*긽u2֢iT8%}s3q!tAPĭ'Ianl$ǂ}F?oU ;+z :hמl)Q#(nhg\f&K4M |t8GX|ny-!Cw!PR RQF M"ϋ ܣP,ZJ\J"ܔU|c_D ayuVixcMa{RQ{_7vl+a)P%]YpSl\0h/mWWxpܞݰ!G<#?Έ85*`fq$v,R4"["qWWkqt>;@c)'_y ' aU,RNЧ=Hsy(>Zi :T?~t+ ̲S^x;Z g-7OWTX04H/Fzp ~÷~`1+#"st6`I GM߿=s+sR.sAU2!c 'buf)]P(xlI(rZbmc 3>k 3#-ыK-c;8$Z|~F<oLi:ws8nG]i1.Gbq;j,ͪҽhceX%껒)ƵѺ(6R3֊3uf\B&q9ˌl+B iSoy~` d1}tn$oTS90m}K}5GX_$iKǔ<]'sz`ᯭ?N }%#QFK:x#@tB=8!x:;Jhx)%s=kS3=v=8L6J3B,^|B0g˅(ɮSoJ ^d6Wg8=^4tӲ[ ̜$mfkc[ ]''4  ]K9Ӟ=##igUVZ>TϽ Rd4 $EtX7qh=X=:c1(mF7Tv @$ !} RسpU'}K+@0J{: ۡjv]oY L|LJ[M exZaBO*.@O⋞Qc;=DVƥkOw/ hmfn<̗CsH۟Xo9IED_m endstream endobj 522 0 obj << /Length1 1471 /Length2 6951 /Length3 0 /Length 7949 /Filter /FlateDecode >> stream xڍw4lRTgصG=kA]{fQ{EQڊZwQh?m}}|9}w_>',Z<26H+"r"H'`aу` X `n(8!`P4F'Ecԑ, @ ?$#M y*H E"tv٣1e>ح9`QQagC0gLEk@i ]v:xnvO8C<`6_Pgd,={8^i@a"6078@WY CqV n`^+;jmtv";- TTE{P/G z@NP+ΡEm/x(k7 ŋ;+ 6rHgg"՟< fvo?uD = p/6.|;LY/ DD0WڞWz=oo#ŀma_@| [V0;85  C/$S2V3?6YY_`0 9;.oZP_́ɨE0Y~@<_;w $0?7A@֘/W!Ew'f u;y;Hv ga6pw*Aa8 Qp/mmIS i!Q_O& /f1 3?&( %0[>H_@ܠB`$[oxH4&E3~>gxŇGaƇj o6az[d`^0kIxCMhi 'ڠn?`9>KabY2řNCiԡj-C1U$ZIXyb%n]XZt1$mltY|Nd_(֤V]FN+j}YΪGo -g9>d%4*M#IUgǾ9N =p4x ^\˜odVJuu( zR^Q7g|-G @:BDrƙ"}m$u[MER.: 7gW8WZ&uqzZO)$ ['"/-=iKoи+;xǹ.} i>XQFF5B%ƪ06)^!2[[ug}Q݇m\}VȌsn$SfNOŇi7XRc*F*m'H䰑gcyioZ[-_ˑ&0pb L8>-ЀiI6Xg넊ۋ}8uYPT|`68olC 8rJrziS%C)mRkf<6~1' Xsc,w-]O+KސQyt˂PC$ƑzCťk>G~.b$]VP L~ae\ wZbuV@,S9ۡWL##^*X֞'3y]TD׻,O dy>QrMIT S|j%ۃnb-ۛ>mk[5:Gl{B8 euղ jc絭yC^|5F8yOƆv!Hvr#<^+JZp}^‘t*)M):뢷*jGa}LGsn>(_B@|3*V6D _p JD.悾*KpJnp@iRHE3Bmmꖚs<뻊{Cީς=4"m1$ MBȐp,imB#z٨M[9g¥8xLs]]:ɜ]|Мp1Mv#l+8n%:ؽ:, ^ɪgXgΈ{C&BGydX?CRգrxxfʖ_j„I'#%L cʹ9_hXDƮIAT_խoXl m_Uݙ")5|tR.qØ4\DPBfM[|l;)yY'"Kcm:үyesJo jv j'2[fQfUy|_|x1M7;/]چ/C4]Ep]\GgF+xYiQ=2u(&m*R$cu Y1'3YoyE;7zѨE̷騉7<!i FYxGo%؃` 7O_H=]yθIzzUd>xwA4}J-NU"* O2/ƄN8g8P9g) jgq~XdZ;?zU;@(.mXMZ-CNq`b;zh0;*v:Δh?+G[ѤvzBV`M0B|ջ $3ޗ&--īmu/7tfd/uCsRB&AMp'3A'Gsb ׄB+'Ms)d6l᧝G!/jL'o KZ伐)?m{Y{C=SЈ"ߘ;_ ;+ϰx[ .\TOO1YMb(]Hyy}$W"mS"܇?(3tX $jǥ좿2&n S kձG`D2賥E{%QxץCH`<OU`SAtҺǼK bLTE^ю&-?^/N`ݳPtQ)zXǩ8b.hl7M")חǵa%We!bX]R} OH49P(hi~ـTe*ʳlH`x:m-.r1ӬL>zO^u!7;י}=D7Fd$i*Bg(~fW\ ]>'%F.yNs_~/:ȱNXpGHb!yq "LƮIk/ç 4Ó)w")xgKg$i圣 :!?rr6Qn~+95cګpNjpr*+TI3`8 /;=a۵6pkIN= /YX5˓GLމw"dİ脷Ly|VDbU^7 LES\0 u*sgSϮxnt\ ߦB5l.J#-3GM<8;ˡ^P^iI oHxĻgMsxk dGqBkQ(WM ̬qK |:NI»%%Gl.nanS{Й/`ո U=–ޜ7/xAłr-I@-<N=_h8B7Xy>R/03/f< ^jWtx)TƋ$SaC,^f!0}9WX9 6aa) Ģ&l3 бm@7 /P/, oᚩ-}F%3hV_@+h~c1 EFO7 TzԨ;;.NV1[k=ۡWmқlMpbr,(eSKK׊<)aܣX9|~g92K䫥wo۬=䊹{_$ur`/(Ir1y9HGs"vE6`'pg=RI>'h^2 tdJNJ~ kH!R[kOY-?(Kpz/ :ZޔBH ^- d?X 1tzL?K'Įԭ|fW&M`C>h򺭰i֜#KìR.:Mɳݫ;&:Q+]G%iGږ,2\Y: $) / _c;c eݏk_ZO>PpɀٯJ}8R[LFb>nmUaJau0{g CȘ ] CwX,]iَXzscq4G; |=uo׎*kڭiMKI &̷s|g8)wQbG  FI7U,9סv]OQRRf؞3gjU}^e\,?{]*s_KWhU $`}.e<]ryev2(Bg)Ivk÷5a/TN8SDg|YÞǑՌ)pieLY@9.J&Ąmq S|f:ݣHgo]fx$[a,z*1b"R.H/?V$m6_wrHTʀh 3I܏6gj$\Bl52Vf>ǖ8}US-4p Vɴ듹җWHo&K2a=*t#Mv񔼖Lpz&*Bؓ ZxW+;i_z2.]bV\w> wMiV܍U'Ƅq:7>{Mz:.;;WatIQ\Šs\$i0I7χ=,ޔΤobDWUv. m+2{LIAs>HxlΦ))'WsvQvDF%=ދڃeW.:(]Is@xۏu) DYV^sdu'+eKwB_kN$V : hSJ#S8K뢥2RBh)PVŜOUVRkk'z=6یm̝:>-._R)|c:L67{BM UWZF}<xNjN#4Ɓ: ;apI~/~h$M v>9:|wMҭψ.6 YڡS߆?cX>-Nwz #$8-^i˚"u2&;Bq&n)ZG|qRX~qvN@Y.8rCe*xؾQ3ͶyQWi1.; bf\ ;bl$ċٽ:V\$+֠>!?8%{;姯D!_RbuwMyۏr{6"3?.oH=t3%r \9gz\Ywɺt0^OG`D8wء|1=e|mKq4$ ؼ,bGQ ;~eq'ukZ][d?(je;ʪ:*H%_$*;f$Ԝ%nHVV`=/\MA+^K=b?#gn<zHr1QzEU0.2٠kp`ݻC1=bڄMSvj d7bng}N=1lwY {ol`0F\MP'*?2+[~I}?HچnM@WS7{ ׸pb:<0po h},,YFtL~xi?;Qkl}< TKuaaQn:ͥ 3s op )|¾m+t!b\(r+d8ĉiQhw^H#@'Pz- _37ٷ㨲vDm*~DyXNhÒ0S}fp&w.ceaJ{!!'<Չ:Pp/{pܿ2Ccl<.Z}i%$X5BG[!qh3:0kXX,8l{kenSw.a_cQҹՈ#c;rh*l<x/( bs#kS:\٣tRHJ%^y')ECt,;,ʛ6k+]ϙ4>f.|ſZ%)^jOƏa&) =\! U FzoG=-F+IȘ+ydme endstream endobj 524 0 obj << /Length1 2840 /Length2 23996 /Length3 0 /Length 25577 /Filter /FlateDecode >> stream xڌTU J7Hs@[*Z#4* g` 2z82r%['W $278!b#S(Qv'Opv8w'i7\E2p]*,)8fw5ZY;Tđ&0F0`;Շc,xh+7V9+^; edDn&oig#ta0htz کwl#B2 s?햖}VyVb [ɖ'oFe?de5Gc\<7zC$,8߇i߉K{ k gP"KS23ΨTK*Z==7%> E H.3&VyJ:Ȗ3a{;ǧβSR! MrvoK'bQaLni_f;UDO]?ڼQ>vmOo#1n(_(Tcv#:'1=eRe~8%fȵ'=#tZbֱ-T=K ; Yyl S2~е C,–aSJ^BwH"{ݺOQm.zՐq)A?m_nFLv2Q\.BUA*%!}R36R,L+Jϑ.x-6boI`"R8mYVvaR_yM Һc"R ,U}I_%jQU(FM@*jUip6G4&VvLv)?;"l=qu0wW׊9U ?]sôv/˸f M XA4V0@X=w, .S8*czc4˘KwЪbdi B=JGa+YUUsf*6i88 OzCMyy7H6s S:T(L+3 +ֈKF XU8U u-O3lmG~pPO4<Hޕ/ xLg05_v5(fsּ$\Q`'8AŚlHcp*)8bዌ֮q|.puA]c[=LD[mNoݺ8$DjD:c_pr9Y"y㾠"mqdLu @AScs8=LXE5lXF$yოG7b&AH\b1'RL& a>Rc`r93]g(/F]son,9zZyN=l1^j145"}HذDmŤ<1Use˨C]9^~`Ar\*i'ZO?O5m5 pb*y'W/3ҁ]s |ȒKNdɟ>w<嘍d"iP̮|UPwHcѳIłL=Lh#kXе0\u/SbP }.ڲǚp͔J`-z昄ꇍ$uZ+o C8yxbaawF0j_O o:*MiTfuB5![#x5ds>%1p/v $ҫfwmyBh:A>1\5\J([8{bJ:>iVBG Də.Čbkg%Za&w n~9^ߪ=sch]-]=mIh̔icJO;5b,c *|yՔ SɉOrc,Aܱɟ#);y؃{%yNБEύZqLG!]BVnuz9 \l_6V0ߢGV 7?2Xo/{' +7r<$YP;8G)hY搌w}b!$(M'hb-;JzXZ(t{* /ЪS..,w+k}C(J8?vj,cR2s`(CD $Z*S4_dpg,:;Y3%pS w#&=hz}CJc,eRɲAIV3 0-!=k;96jp/ޕupM*V(7*)d`ij0{38dFUM'BK:x~JonfZP͐FCdJ5|^ %s܄PQ:P%S4"6(q>g6HX8b:`&-OWUNXT.[q'W9XN2ohۑ4P Oyn?؀qgk֔_Tp]`d]@'NȾb0fH8)!/IF80uz;Ktؤ 7@f16@,q!/ 34Mw50voܶTK.R{8ҥ+flig|vGSi]r"s^Ak3xۻ%Gd'Yͨ MO5L6az"|vohMJM9H ueuťoBJ:؟ lh;h:?Fp@9"ylLc! A ᘮ4jŠ`l{Sk+6t@G?9lsȱe'xgb9C`,[ب/*mSWM vcrxzךJ'! Mo^YՙuzbY%2~vOmk?^ O~;Vp&aR\!S$#ӳl^ߣ%uI~)׉G"uѓ/(߷&{IV> u-kVB[ O/ J!Дu6 -L#ewUU@~R&umッ;cUqyZ,GrM]^p~{Mr '[ ZzFl[BЫpTUDj+E{ꋰCoʃ& $3m73snpoug p!`h J8ϲ*?ORd* ro&b"R*0D=]!kr{7+zAuݿMMyvwU=$mA7 y1yIvbٱI.~eSEwroԻkxʩZ644Ŭ/)CP*AO۸z?‡i5bN _WkG}6x\Mk}]t:}ybӏy'棗A0$.2. Mtz517WI-5ӠM⹈ s΢ryW RAOa*0'T#\ V1~nsEkCR8 _'3W^gR:gGC7C{sgiV\1i:5B=JRq>Շwuӣ̋ Uj Պ - }&Eӹd&Qlه4"9=x!&)Odv&7`j;/bLl1)pC4{%O}AALӡZbt{3 Jzɼ"VؕgQxRy^cf`Isj[ә*/p*^L v-j+DĎ>GЗ{<B=wV_#=|~@;{Jz1zӃ .|sz5x$Yl Rt>.Nq#Z64G.g=mAĪP_;'-WдJ@5I<oMwŕ?71,Woʷ;un_M(ȜjV052m`o8 3g{&6RеD?a!Jҝя 9>2sןfx`sC^Kӵ3G1me%Us#~F!rz@fE=ؼef*ƆlFs˃^'U Tv闘# d__J' hdVI8w:YDSQ8A\MfG2^-t\1,Y!a<͗ ܜ{$y|[>ޤRy(z.\ދ,K#m}~aYx \6|>,{ ]hMA65/t~ @%yr1U&ңEt<困d1sᓫ`}MK:撾\ༀj%L_MۊNc^Osymޟ/g_ӠE׊`L>-JHW8C99& z+Cŗ\$LF㋎m wR1r`c*~$ka[{(o[*et eum>&եl1X\ܦkNQLײ:/?v<%UrrW]pU%cE| CCޢ/M3vB-ET|Pa=U*Kau=a =Rd{6=+d}icSh7JamR<|. i,"6}iOP'ĉcK"^ܔ@D\G-V.p(Mka*w4ˍу,;x[vKt+ C0(7\kƬY.#g!lgu4"~FikCʼZ (94f*3N'K AO ~G9:_ӄjgo6|Hr>d+˟x݀EhR31Pqw#fNO\%{?q e{Dmۢ -6֦/K= o '[>ċ{ BסYRx1lt@/Xc}1O"O1RrCOoĝp2A~C4qV4Y[woUXWmTYfX.RhVoZMωo 9=K@Uk:,M@SCKL B͗:W b״wI:4ᠸ kL]sdL/z,<{?FRV34j^O{؅7ȟ}|3E*SjMbUif{,AD1bIw/h-5E:O y=ƅ~X_U}Mgsows[xumz8+ X8+99sI.1fbm^9Ci—a .u֦PU6_;ã_vaXC \92rgm,ltZ([׆_=-4_6V*WړS 7' $ݤ`{Cd+yO, _\8af{o8]K֘b\ tz{|sAB]LLKB[JwBnCE+&u?ӛ[at&6%p?%#}-hf9C" i1 /BPtQsn~WK7? [+.>TЖɭh3R0}!Y|ia9)dBBӖ+A'@X'ZF' ByQKʾfL*P^8tF3mK 2k;˸E?,Ug?eAD *tNS@T?,M0JXc#f&ivMD Ϙ Pw'qÉG`zjr vAOA)ט դ 8lAm8{{hO~c Z,G W@/6z\1ĤEgv^8#{OFE<^x1l*gzk(d^pgVgAy ;vǍ«A\Mե7:!lteF,m{;Ayt}jid:2&_fߵSp@7m !*?.L%[=%Q|=đb'O1-u8&u vxoKNkMz]SԃZ ܕ@KbW 1chbTRU+:$҂q+\ovƁNcTnn$l/%7lwRSvuJJ~-X]Em8+e,6aA 'Qkn4u(٦œo6Rj§@ݓN~Id[ ސFktz)}ʌy+Ƽ$`hHs gkd}Yp܆6𳬖MF$jH[x?r M! %V!X!v>} *pl[h0-0"J@T8 =%{? ?ϯBq`~:1?0^a*Ou602F=m9U-Q| SlkCCBZfpJ&:D}2/ c~-7R xs];.LA0h@'[JK7떚>}>.4|@+$ wAžW"W*sVYF4!9>2?eDx hqI~ +CL<>];~nINמpg"^3W2 yqO;"y̴_w,8-a hitō L͋z(oaG?!D@Q9+uJmLd`Sț39Q7z#r&beX/Dܱ3U2HҗOKukfczhi¦uc0L"KZgyQgMfFYb'5[+⏄W|FF!?LQHbF>%g_7<̥1?[M(Q*!";px|_{Dlt2M¢J%(RABĵL|Xj?QYno#4eH)KۺR1ʍIIHxWR_tpFƹvw1ޮ`@@-$vBsDw2o ɴt:w_֚ Wi9dOc6T x Rs6YQxI"oXOovCp-T"VHm `C}\cIA0 E$N$E³BmQJFܔ^(ZɨT]`~Qf8E9fgXy$F{tP.:~4ƇW1&y Goh s+iTrsK"]cͰyɣ՗]8¡ع" IcG k[NkT% 7^8TW})CyCX'U. 펄&?Bt;1^pS}Ë!@-~N$MS֟.3vߕ[`| nS7o8_J?!Z[Ʃ'Eq3{2NC5Ulx#~D>ws%OX ]1D ` fbRp][M;#S.XXWZӘ >e]YtO`a/LJoQl\rHPK5{k\HǨ =䁩 )O=8ǭe^|`2hTl2wҧu|ˈ&O:=tLIzylփ|aUl>%}u| cS̽k"qcA|xD_\UKzbj*e3x~7؃A/6|n%ϾikilD;ڐ.Wh'?v -q􋂫OM!߾#\-h +5Bâmnj8;CdaM'h+6} h6δm*W"s]nnՖ&H-zq5'6x4EV!~ :3SI`pw0f=/iHo9Oq 2 U7cv ۣ?D62A]Yb:e8EnTib }RhלN>qIe>j0%Lnf.G/(>vs(8֎!pfKbz{SkzJirU.\ybk"-Yrt)گT#* Q JDrZW#MB&j_"w3Y?=vH/yDp /PvfQ.)öC{z?^QiYw KK\!0&X>]氾\CH6EUs_|%m zSy' ;V`:})@luhu[2|h֞* CfqGYq]Mk:][ݖsD1nءl _)2`2ȟB[E\ ~~ ;pv;d[,<` UOC%9B ؘ/]fNULY i2A00W=:rT`{'3) 5xbe?0s#>LtHq=G[vM>(oSdmʀǑsBi}2XRnzqQGnDt dgd_){*gavYlWT: #xGBe~D,UWowjM Dųhd:%ʼn-uiXlzp= Ɏqg-4I2#+DpC92C.#][<<uK}`2up3zuyZJ}ȿ)%a:XŹ ߲h7SV +C+G7\pkntR2*weZ2w$_F\ Fo H PI/(;;{ Kٟ*Ń -ʆ?< MP9vCM@ _01ŹCmQl&1vWi \\`"٢y[~SGey\Y(Q5I ;+$A'M}J߀Ci_ [:\hn=yj#@d8]Douĝ8ށ|;Oa0? tcF Ybȧt19 'T<^*& b`PhXpe.nAh5k]BT'옿"*#df|A]zԠ{3$3{Wv r rz-% 'v ,捷H֠Q0|) rO4W|n3'ȽS|I >>ž2$)rMd4F>(1f,\g2$nr &ߤmT~bFkP#)=xkd{I}*NBCWz IJ:B#|)J@'m`5L*ئ7Td6Zz7\1n5JXr'˟3ENH)m$^2H QWgѶDM(LŐڎYG1$yjq8Y-1yF][UOD c͆( à`PqS:X0/DTޑlm `X5Sqs$7G >uwo_o}u%aP gWYn [N`FD?I!/J|tQ ~|25V͠e?O(䓸_.꘵SK^+<kKǐ 6+Wum Bm,gqקLwxfKamV)y˟j6"!QA(Pr!)]@=k̀4BШf\EE3;#ʹ*پOO@K(h02&hkC<%? mNPX; Z6U q/1Nu{吢_‰fT c(%'ykM!w߂ +!*9Hzt\[p:?9,2 %_:Ksu| C imzzLxZ@z%qMHmzz>ݽ-# bkRvjN)If 2,<|z=cIi'ʉ9 =J`KFj?JdŷMi//``>J1OO12VM _6 P}ryU~\< D)"a/cJXbZ9C5faK M9gW;w0U]WW\qyޮC,'SbzrD2?[Uv3Эy*b,_k|ը`XC8kG sp7ID{s*2Z4a*ui@j ,'\PeV Z>#IJc3`l3+NHU\3KTߣhɒrZPz[r.%*tp ֍lKGL9'n:Lry{]K5p8|K;+r,8щz,%ULg!̪6CUˣ3q |+3udԆŢLE A6:ous}EZ,Jr{#ybCj/uL:O֞B/ ,emZ.4bWN|%b Pg <~v3U(X YRrAS\\[8w q2;U[nmGl>\MYC̤ZjƄ)I:n$"ƌ2H`͚)GiU$9 }i@kA2cdwř113c`C%oMܧJ^BRJԷa-m~OI&IeT)9{1S4}|5t?.Jl;V??GYywxe*\Qva|&cu!$9/EKhsۑ__ɡTUo+!݀+jq R+qyZhY،42̞<;NE(A`ۢN׿ v=D 8@_D #ܟRNR8 \-}jg$3Sn@-a_fcSڦt$ U^%@o) `miD89͌ Tԥ__gvL@Ԙ!9"3ͮi&- Yٻ60G7V8W?!VOl ]fbD=҇m~n&H cXckCPtI=U~Tm@{"("p!PS@, w̞F΍6y Nrc-޹1#=CK${+G\tb-8`+Zx$7zsj t9D!(D; 6(ica DH:s R[jw69xbg8k):$L 07#6l/Azۄg090H/@͏[Lݱ_s`j9:glJ3]k \ <-/jȌ -6X]+2,7!ŕ  ?切FZ4TJkBrDplcmP+ ez͚ ('rKZE; 1wHFne/_ȐhFQ,S*r 7 jZ]66VM3Xf)&CwO$?w:k~j .$ysB?E J.0WK$pa-x6ⓡ)[u~yAl1nuصwab"DžH#bbƎ_L7 c :]Od^s*w{^NL!I(JA]0dP_ 6jq)Z5)>ვzOI( koπ`DIЕDPjv`6RKP t.:Y PtMBWR!GOJBy(P7}ڣ\Gѝ2c&?F;gNrG#5):v'zr!*=Ƕ=>JH0 jƬOkYhI'JDY Ƶqzq -5)Z=2lR(*@@J)yfxQ2%u,d̻m^&cMέIs\f@fP S U1#C!{938Y6ԃy0qAW.s4+nuoHya:IN=2$vRA<xC)J$d/A^8#"YKH͹vxR, 9ZlN}+4gv!2 D}~#?ّ2E(8Cw9b.c;F!fy%!0<_L+YJR. ?*T{; }qdoJ3ChDVIT4K+u夻]H?C԰fW'y2%f>AX^ʩtVӮbGKM Wx-Twp,\NHBlzI>>|힏*MNzĩRL$`[~MdI "c.)|>c'5ݿi/[b%qM?yzA~<\,(V|Uв ;8hU7< Bj0q4l^ VU7L 5 ݱp8ۖC@c1 n./=aTK"@+Yj.-FN" ;q[sm4ngٶؔuC/|NwC]X-Ki>po9Zf;$m!~`!r`,I󑿋!)KK]M!q~P4'.M .U #sQ+ }^1{pf$a#X"|U!GE p>%Q]= ,fQK-MшK1[{  iJPH_,iPR~[ F~׼ `iz[՟jMstv5TktOOw2Jdj[?MT~= b=3@}WrA.XŅ 9}$-8q.4+EEQFk2br=lR~I|v`ܗ>F]aڗPSEK$sPw ÉRv0NιB;Q{nJcFN+p:SඤyA3*_7(m5lq6;$m%x 0' T^F7ukUJS:.m)ΣSg|d[מH/Ć_B`uI z>sUQi^"|Kl} ](._J%n2Vm*W1OWM+NivF G}PwZv P0MC|~ʪ58ns{yYec|>r!TG,"k [(S¶ C}&ś݈mncG{UX{ƻvBj\8m7٠HϪ&0/ 67; &/:oӡE\{ =Z,.Ȝߙ59UKn8kll+XNPr8 Ak, uE]/d$DsFAdU"2Tye :V86h9NBЖ#'.60w8'-6eRۚuo♯Hi$9ndx7QzieZ?YIEG#tDf,nZ5ߧt72sƜW (ظ:)^,r00}/w7w^b x_5TӨ& -|~o$z;hӚk ښ!6N8`O/~'3)j|;?a{EckrM26y#x݅aSS-T\ dIFf]swP`*cyD$u4POQT[ޔb!7!,t?@R4٘St:R#VM)6lʝ~4C.6YG^s-\ݵ20c InO3a1 hf0x] [ \Jb Cll)YX ֯~V:d=(TF3$qOpK6w.)`n.51JŴ]2fmz*]0#Si`c8eZf )1 -Υx X<7 <˅RՇVF1h%A}#2!C_Ƈ@ _|b#YsZSjA1B_.ƕ6 o:E1=hvYVQ6~;9wI SF2m_GU=sW$'dOa1'% Qk$5GYWx qᆲtTTTʝ.J JwNL"{P~Ǚq겖o)MQ" E=w 'hmD8GD{SvUJPQAp9D.P4xgAL :fӅw#`7#Qo^ MV.^Ydh|?ǏRʽ~a5+͎S\XMogNUS)ʨvp8aKF]@vDC?>)B ]|i*CԼg;LV5^g|'RC iM$L+gOd)o5ť0ӀRU`M g%% q,tJ:V&{x$ K&y'%j#VqZj2z8.Tay o1zr#E|4َ\\FxgO)hPL?KՋHd_u^)$2^ZDNLv$g"mn9uX6+VɁj9<8䞛o_- ]Fn Yid#>l"-G//Py+ lKR_>R̓#g\%&G "XW؈9c6SzB]3{5Ί?l4g0"%YM^_@G/,S̚|agmYh'̬e%9SA/Ŭ-')ooSrif9q ʡN̏%4J Ŭ4@zMp'πԼt0 9N:}nXb< ~_*68 Λq!h b"Yj5#.>)6vʿ7\mƷ6ʳ. y ]Ht"şz&RT5ϒRD9Z)w ;LFң9D1 1$z^ЯsQ& 0~`.#^ާ& 6i,У3\w:MCD[m=!N ٨p|J,.|-. Z{Ƶ/g4I†9) ,9fKbfDrBzjQhSu5igD4ZBQa7:XP}wglr7{[MFѷzmmW禫Jz\us AP<{l/Pto:qlk ]9 H̀&nC+Jߏ,@a"Ψts|)HEܱn`!7$)}5\@{QګTًR\$3RJxh%t'Iݳ$F$Yݘ MdZȻ):H}]Qu7e| n"!ߘ|b[4G,*Ҙj<3|" Hs56O.jQme *#b̦;f14͗F_s bas;"w;(30C ]޴T>4= δ+~Xg0wXB1Y|~"MŌ5IY⥼tOu,¤섷m1TuNZHGӌk0/͂KekR3(IR_댸tdF&y.K]ZZ" O>-~%ٮtOBvpo8t1p>MQ`VApth j-r-7ηG/֯LUPfoii^<#tSV{y7V~.A@CߩiZ(Y_ `±dSlRl#ܡCmQ74:*}Z9$-乃N"TPg˭ƁqɃM"\'ID+]{d*SDЁIO0*M2^]@Y5'' 潗,[kdgL[Zk~-~x:XPi+?^#-Jwޛ %RRp[(F ǀ# !:z0 ƋjIU @ L|Q.[rGf lq%gǤ|1rtj} ѰHZ$,:_wb`{Y}{ːJ<QvpYCR]'x˭v׌P$>CpASCy^⯑,]"rܰ^p*3Jg_my\ѵОFCQ[D,(B  |xo)FC^Ȑrt]mn+oQaz?ތ k`ԒE#i?*ecJBe~os@}5: [2 Azf2Y&5ӎ3^Y" 0xX/Ma뒸(W`J U4*/:hl7{i4qqMȀG8@(y:$O6m͠Sqqӯ"ΛXU1\K NhU$p[HGc5Q.vΤrA$Sחt܋-n4 7uh*v.~͆{ܳG$#{`,XsK lyQ׾*rj+^+ȓۘzehQڱA|;1m:ﮙ L2R0ʬ6 S -8N[voN2)?Ì!Ʉq藡' 8Y p6L>FX!mwAIwqIb#@yMem K [y ?j/v Y8 !X3͹WmUt ֋9N%fv1*xhuAy2;EB#mުbE9%g̥zOtXWN G썔gYLo8qhVI' endstream endobj 526 0 obj << /Length1 1395 /Length2 6096 /Length3 0 /Length 7041 /Filter /FlateDecode >> stream xڍWT컧SQa] JL`1`t4 !tJJ7H! !q_9O?=9+9 p_H$ P5@" 0hEB O(&*֩h7]8 K IH@aH/G8B :tZpēwE@*\!)) %7jtHg=` BJ%DK <'yn> 0xB/=70" # jy`]`wpÁNgDP`= œPW@_]GB0_`WO8: ԕ `4?y#HOO/Ҡ/Y wsDS" [=V sp]hVs b HBR @P΂C~~h@#C /H7["8@;FOv<X~}>Y{M,Lyۤ GA~a1@HHJ >;[k蟌0G8@ s]GV 1=KM!e?h{r2+ b/$z#t轀9%օ8@Ӫ7C %B=ա(i:+1{B=3~!?l]wA?%I6AЫj0{ï/zhI /^N708@ 8D)*D?VetAB^z~_M@P{iLģ>k#r5s^9a+Jq(3_o4Gpil4hvgh[.~+P-`$A!ՙ T}wPz6eiUhG`]=+.ɏIʼfd^bU) aNv 'CZt3WCSo? np!6?Js1 bSkůKq+aI=XZAi~hOJTLdYGp{e}aKMT)/&z(X81{ѕO5ygwq|%1t< ҈=ոI{׈6F2QYT^k-*$WpO CP&ɸ>J򨞄l`sAYq 7q&%bs+UBA4nB^ atSV; ߨ,mQ7RV97Ou1[Uk9Kvɕtޏ5 %'&4,E߫r/N'+:o= L_ёc6nU%{c5q>^6]_Y65%ZyP,l#l~,m[-.ôioD d>pGgܚzڠ{AAStKl>Ny7OFIqxAx^4޷VM˳ڭ^l?gU>]\Ti=&F4J`;.Ya)_IP2L?`%N֯!)c奅y@/bV~^ώ,v[tFYYY>UNVLkV} 󦳓OάI>`n{~:9΃%]zm8儊][?̀9r iPS,Z/EtEHO*bT@{grW"{|wҰXyU{:JZ^K}[[Hڣ >}$"*\"׭1ƞN3̔^B5BIڣV9;̗%QI&[4K?rNpmcMJ<0DEKJ,ԍ=SZi ϺwgS0%KGC?祵_:/h%I\ eN'p:*sL M/{BEdO=Oosޛj{ā7f櫕(+=V*uo ͡2 ņ6\g%cݴL.C/mu>Ч`֟7V[gKe;X21a^;2_=pRL^ebQ* |m|J6KCWw笌\`f\%]En>xЖS>>Sus'xKVZVR'ԚM]5xK~Dt. VŊH#"NZϺ9*56,C6v= O:պ~zTۏyϴ_DIZj?5g #5+1 Z,Υ;ϓ9B A( !ƨU0I;Ytn6mu aeL #͆~&z٪߽{dʥ݃po&C5ܽ oxfbه"(L(n ]mh"#GE&5&ksMsForIqھ$-t2˾^V%'g]ؤVRr9F7o'x;lK}pgįdW~jɨD`;YZRpLGIS?w8$o{GZ[e41 CG2¤g}o+՛}2됻  nc򌬃l=5$ԉ&bZ,]X4' S=>U?a6~x:>_eM٘ YofxM\:tRUOVͭcȱ|Ch{9}pVx$}ӃzVD0ΉoRZ87.;fO=kJvjcRysJT@0h8,7:NFQ>e^wO<߅GFȴgU4Q?8)jΕm e'dTFv  h0S0ƫzMBմ=wcՌj ^7a,x}6TU4زsbon=== 6>(p%ew  euc\2έ®Boͨf_[v9Щ~${r^c΍npWCG{]zS<]asv^Ԗ&,SXVGIub2$sejV۰]X3 bWqci!Rܚ,_l?pmu5P%%e>fgxr ΥVTau2,Ѵlé<3QQCpE 0puZP+9?i>q"tmRk]U}# aǥ#c{ٛX/J&ǫ|(=KuN%jr=VqTn!D:$2hʕG@Sk2 (߶8ΜR-8|!K)F]l ksgsGUD",BW4/Lg I oh.rt\^ !ar& 0 \8FM4_y+B߾pkӘ(=1KXrL['D5F%i *usQfr@X+\y^$6"ׅ=G&Vol8fŃGXz6~[44aOvfxOy8 ^[Ow? s>K~UG9F98{dj*DR]Uޅ_ IP 0V4ke xgV8_5ei,$g`T8Lrc%٪=]Ivo)d D'p*m$dΣ$6۵b{^&W*8kmH+J*a>e - ΄G ? {p_vyI˿u%eQ΅X|3G}U^"1HQ|i&74}{H9>Ru.C+,MEp;߀$F JD*7I͟ m͹[ tc,;ҥH4]>2H^JO0aNRWwWhyRj쨨I;iֲrB%jPQ i^AF| g7C զ%wQZ~8U^S&6c8Sx2&2,`>G9K2"k G2&x Ԏ1ܟ8ef4(y1mYZwY"YAgof\-楶aU._C @֣x- fQR775͆RTn HV@#8:嘨@fwI #PdX3E.JT\;>ˁ 83rE0Jgj?˝UzFQ[ gm[_. MU ] }&Omղ6fz]zoÓ&e]l쨵~(rzі dˏeRfJ=[xZ#Í{ FS2{ΕE-9!oIW ȑ\[lo/'eNj$&:͛\3&H_( endstream endobj 528 0 obj << /Length1 1623 /Length2 8310 /Length3 0 /Length 9357 /Filter /FlateDecode >> stream xڍT/LtH@!)%5`06FwwtH "- ) H)y_{zw33jr@0('=cf#!?x 8 /Y"h;1  Bb@a1>>?_0@ l  Gy `fEE~d@p%a9yta`?&$Hg1^^wwwK' n Ft@ d.@ ;1A>y/+x]!\_ 7ŮȻЀEXb *H˻͐A."h _=3CA0יpwk֎wqש,*ץfkp'] x6 s w*|08ޯ~x~_ c-_\ /(02_2o(pyr"% /(E Ët- ux1~i ~Wkyga!!?jdhݹ7G%7s{\/S٫Vg2?}V`;^`Tޜ Gnsjk;p(t*ֈSN>VL2r8Obua9˛02(IϡMjv/j4fXUE\T/hsljT9}'pKg:.< hHxD97>K!3 $5VDX|32FZ9wyd~/PRhQkZ+ p<hdU(]0̄h t-r1>ڇ8va2Bt6ܾD Ę{n?xDe`+Y:\n~5ߕ6S ]p%qN#\CGg.c*:# c\C4XȮ_/0oUt 0z2;o>VfQgvv](s4-s*gMƛ}fG>xW}\|ڊm5 bq zfDFnAìNg3 3-Vb=gXPlEGo9m!'I/%שBOh^>[ÌPO d]}[AWfRWp@.?.NK1մi9 +h2]| Up~rA26a33S=udo~[;0t.blsƤzԑ^TrT;՗JIVtM)X>]Ƈ9v9 39ﺶ)di.Ftլ6?Fk&LYx ])$Ft=ye9P^tЋkNyc1<}ѩ^5/h ȃߞ GU[,v @`չ% kD*jpSP_g*&JыsĆ,wG+b@x qs\2c?wZKN;0G%@C~X;^f .'ʊ:p:rGgTͩpV=}: YPyO8@fdFQf3+S$sP!g@MdeI§3].ZktU"`~gUŸZEhYUs7/OƀibPSL1TM2qRʭj2]EY[v{WS<[ja񑕞?mnLofK?Ѳ KQGhv$~GXj./ӯsPk-̙tIxq6#@Uއ}_w`\S%_gc|Yȉ ] яy$:]4)Q8.SKލL~sOCӮ4ڼ|22Xvoqlyw1^wyc%:U$ۮ֬/ h lt f1t u̍o٪zE6{UϚZWv@P?fJ\pp6̨ɵ]Ԅ]M7g'Scmz椔K,4̳^SJ3.Fsa{znm<0'T]6\:| ˎ,eor<'/(}|m]O4vqpro9躞)Ndj #Q-V̡1]mދ icĬ#jˡ4oV 恗7e&mlMt+$ hl#`@`M52O++&-TCa&Fќפ?bYy+<(uLjiR5c59%Q($T:n\GLhƲH[Ofƈ N_Մ LES5Zgg/rNPQ9Noн4rG/3,2HZ'^-ƍIR[y'f`"%ɹ ˵! LhxonH#{oN+6>dq}Y0+gX~j4E8=1"jX'ЋxP<غ{qe6(C ^)7ݣ2!}6!1iI/7o"ߒU9bJ껚Susi%OI+9h9Xj] \p:YB󭉕1XϨS[+nmpJ[߉GOYсŘ誥%得4 9Z|DN/Li:j[oNZqRPkA^GDlXh T/t98@ {Άӥ&cC?iKvwA *Otcݦʈ,OK6tӠ|zq,'_J%q#il\g`U >krPM1I1;**۶%l|(~6*[pK/0MaѲZv+OK\5\ym[K;E4ƅrc83 ^mw]6Tkr;jj7?Sob+UZ|"I=e`6>5b uS fUH8+YY)+zO}TwXQ=K5iS^P`6|I~]<5M)H|)4>qYa[M|<ޥ~eX''CغMi֓N,I/nۊ%v >Zܣϊ ʓY&~V[ɐ!򦵣o _Jzdۡ߫i G\i_dN0svHt=C2{nY8;<79NRิ[x⼼fDD?_8}xYַ݋ }ԋ+-=K=Yܽ [&x/8 wɚ_Tag$!$09o>m-=gyڹS.0V j7`aI%wKoT*cwvaZyI{,>c-I@xu?Ko^c#h8-rkrZVfcdΏ]EGA5&eqo1Eun{u=%xcMk"e\tɤtgmiRLÄ ` Vh,mr6llKSܠ_ɔ)9UTGeߌw7پʁ WCkujy>0U8*$~y0i*<hOĉ> 7SWr{V= u23O[ZHntȄuwC&@˸RLg6(=sdLĆyB_A"9tv !u)c+?k{$ܷ0c`roE{S=˨$\"#} :C}4?h$_؛GI/e3?7z;d; opwe>CNЉk w}&thcvL.J=@+=t܊vɤ]2)rt5:BmLuS yϻ2qFH6#;pM}!~ʊE|(;#6H:]M3-EoDGJeUIm üIʔLn̤R<0e1GfC3yvRzVLfuPֺ$Je }Ⓗ!VVh$+ ~Ғ%z bӗhrs&tIغ5sGYnجVԯ_`j^N}ׅtGWp1 e%gqV"N"AܡQWl1g}\EhUD4FUy7'bDiac#&g: Zo-8:y)!a([w27*9[B0>PC+6}1$N䛔Sx1Йv |ڃ@+ \´ =Ŏo~jqlUk:F;G# |shk?'Lz5V3:oi<;Ex$75VzÔ;{Q}6L,MVtfD'dJJ5mY3J?Zos ֔Ž'&|UR9dx+|f:PD7uyiI%'˚{OK嵬$,|rsPT B#gz\6/Xs7s=74,-Yo:G57 q%~R+3f4p} 3Aj٧FNNV=*!`tҐj˂%l*Тk}N`22A8; "۷xmU=\LDz_5)3o;zcfWƌs]?<jٟH*9G8ڽ: 3xs~{!^KTu[NZV]wӌ)ԼMpmBhqGPe7uk|Md揠"Gh* ~ y9')|l׸? endstream endobj 530 0 obj << /Length1 1930 /Length2 13526 /Length3 0 /Length 14719 /Filter /FlateDecode >> stream xڍPk wwܥ[qw-^ܝBޯtϜ3Ikٽ%w*2u&Qs)P WTr0#PQiX%E:Xw$L\A97;C3?@ 9]A^֖V@kF`a jt63q(ZO43̬^VՑÃޅl)Dv]@s_tJ&1#P4]%VYz8;k3˻9~6@]Vt¿ . W kM@&^ k; @YJӕ`` MRw~fblbmC¼Y\dotpuA+? kg{սXn_Q0wsdtvrJ]Gf tpN_5+rXSY[?|\L܁Wg7?fSŸbſ{睭=z`'29y1,r2r JL a0sX9<~oscQgB@s {}V.V7+|њ[y[>nz k +ͭV}3D,[Dk)kOտ?=xogTXuXY}l߯N)`2kع&&^G\4z=f W?,F<<?_ `Q/{4-M >';z?d1d i ,{@ ?/? +O6|o?S|fNd{'׻{s3;Qs|s[?U|QɿJNOrJ{=??;o= ̟{f 4CXY}x%`ڛL6&+h^4ummGNI[#ld'gDviцAbx"& }'_@[6n9<'7^iφ=nyYXy|yu,3,@`J4MM"RɆbi79ҥREns姇;]q?qSHlle}m %WH*艇JIx[fKR+lTJfZ'&Q2KBLTRe![:ۭ{d)ľ9Paߋ4 ^en$5B>J՗zo=XdӋ5=,8uΫ}zW*~%g"Q6]}VQ|(%TYM @ $l:n7\}*]"x?e/)aw?h&q|@ qX;_~c;"a_CfDt#+Kz )Y@o(LMBU^6h2)Oq)ʁBm6wld-\?1҂o#y|p06v`]<1\}\$s"1b$pNb H^E4[ (eeX/?|ۨ^HOK H2+;2NK=fKY{qtd,#C` WƭIFkeCK R/u?xYpWJ=CDbYWi?Vyus `{{"Y[ʶFfEGpP~AphX{{BA;+?n5Ɋ! C@ϠLŜb *b{_hk{͘My$WB!ԯi%&%PLC=M/#jSAbtX(1t_'U^ ZU.[i86C2)2DM48ۭ&zp1titŋ,}'#B32_3Ay䗌 '{&R@YBbXھ+C*y (27c hȅ$lF2\zmtjw+3S&pFuf ZaN00L+FF,ʑSk<IdNa'h=Lq)z0G}gi:Y&+TTaHSvWˆJ!sQݤk2b__A[/>B J=*I: njnEi&[,uHN{Tw7]*QfrB;I }3u%]ɒ1v?cS7&05'9ճe{w"Zk@6Zrs]#DFS/pczXBŤ2k 6x"'Mr:/{j%Rc2=.(LA])'{(!Drެ:Fݒ]$ύuq΍4@F#;= - K1޿FtuWv+8%P M*6,!AhZB-H,9_яNzK6:1$Ƈy"Rn cqq!h9#gK&ý%hR%[i0gm2J|gE`N#9r870:)iR}į@s^ T(SD+U|zjM.3(`+7CD$G^[ɝ,5eM1usDI]#bL #%fn;0$ >D%#Q+S0^M<X&Dxk" Qԕ~l 4ކv+Z{͑ܞmZt`xyև`Mͦvn3ڛ1U#?:{+v#ol[ItY9ˍ= ]',)>7E[u8,o]"{ wF3{E'Ֆ^ ,^Jcs@2yc҈&E0&X*8,Ⲟ2[dı;ܙ-׹jG(Z}BkX6`fAr21W- 73bW6?Exk?cEXHD +Z0 'ލ"ez%P{ 堓۔.K%0K 1V?߾'[וu;qD$g!龙/69p/U#;j`d+$.,ں o솫Q=kxC}?B$' @m[27E}- g9 je%~D6i4r)XσR bxGt`&AZo$`ufcD""ֻw K\*^CsgDB%~~6B 5ǵLP "&͞?}8fe.)GMlX~=#hyF`i#Ln*b.PSl88Gڟᄚg(GXG/P]Ǣ^1!8CƱ[A);7]3jG% B❾R+Erx9|-^} jqzP84*0rW+*JMZUH߄*h_׹g;;%u9;%;.;K]j Nnѧ.#W1r2ttC@D(nnCIeG> Lvr:B:IeȖw ✊պF%XC3n~w0J?w sVYFy桌W7`e1(chSv0˺} e7A[YJѰ$kRrX7S0JC@:J }GU$2{'*O>pĪE$_joܯQL& jHIj.m#ǤZ` /6;MzbcdM#p!!0`5aLqWͥT1f&>!hL ,XMJ2۹UhsH@]sWzAΈQb"I{3)u Dv7уfk_㿌H. v+iH,"|Wk0Αۏ9(pEes ) 7B8F ZJ2Xn A(KQ_1V[';a w~$N"qS*tP|Qlr GTߪJuz(d%d8Br }p2n.lCJt=Dps.<Ę@ݪc)ofrzX|:uўðXƋ {-?;5*TYTdgQ|=]y)~(Wm 9~. m5zQVN\e˥~:wI|P$W(EqLa؁0.a<Ts';ϠbPxM3!/ɭBû*~uņS{r ٷoO()xdlEoq^b_|A)vd({˺ⅷXsKc¯`{@3xQ݋`ک˂5Qk`xN8)m/ov3ݓ\~@zFdLp2@Wy_'$1/2T$JV`}$D rLFܥ!&r{Q/ PR[%*ЯEb"*6ǠMrɈCWvL /]QQg LQ4xp,KqMK`qk`EEYgZyjIJcz9Vn8a߹,#N^w!*Ëp*w)NCT>41"C,8<& g~$nZ֒hv>8 fxpA݉<^A > sMf˖>>q;nPK$aw_-9DY =5ݣ*p0/L3/^lȤ"R5 z^I3 h$"^}SN &.'qV yV/q Bc ֮|=;D1^0ScuXf#^a XhZJDI& W0SO ][v_1w,I&Ew2ʅCRR>2sesU@$&;['!vx% !@Е =R]Tw.:?jqQQ4:ne_WQ.T3/6 |-MĔ~aG<`x:`Kˍν9|cl`/͒`e*-ZAL]$ELє8F7sz`Q,1ʔṛ2؞}8l*UŞ)nQ٣~oTA~>Z4_ -E.OPX<י;#tO&x 2&݂o̒zsT0q F1-ӁMk0_bW-lfî%>6K*#38{g-/:rcͳeLl.EٖK {Vǵޣ τ-ua>\>ˮþX5(K¨"~c&>:Rk&B4։;ys$~p[SiNC/{T9E٬J## ^141$=x I)H2=k;ѽxu'z7=Mo4IwUKy+[=w@H"VmA|?*@a5֒Q]J ^*ԄEL!xR~)ggpn&D>4B iw5xޞ1-,2j:UD)jrv'p:432B8onU:?}&xLEqg%MhtkZԦwwL}Y~Tyǣ\k{Hd1aII}xrעe<-+ ͷxA"scNߟu…c gg'CБ5S`NAyZNQ&ネÀ.}W0 %H#qnՆ_UM[odvd `9\m n i[On- sAAKr}8q%pv\'FcBHf8-w;Bbދ_1V#?Dq$;/(bY)LlTu,W+4]Xroz7%^שV8قNSPijVF2rvU0FlYЪ\ќ q!H~gmgT/>"{юE,Ϣ䥹{]ڏCrV=:"o >H[BND~ 2C I2-z%ʙ̌a#jcq !Z{KQ 79/<>$7RIPRr΋OM`O췻~1V^5 %8٬o(s\v'l\h"'#FTI"%BhX-unCfĎ 3)5 ɲ%%e!.$q՞Gv鬿|K[W.uf6K.D4{|3UmffQ¿el-77VaMe<!y QY W \:*w}GIVPT'O#?LC };w 搭?]=Ѵ<{Ehб=4JB"!}% rcIn+ϋ=;0>Gbq*() K.=o&ztK })qNlR`z_T//6Wc0FEIz>@P-oV Q&"8x|D.8H,F?~Y -{^ۍXjKx_8W8NM1(8nfs`gH.%߂j _jܬh`i(]< =$7z8Fztt#-w,pM٤(HP, e ICbXFw ( 3ța-xVYCO#'͕ex=&TjqF$ZCg~-m?^Wiksvh a\.j&հ4c4tz2p.^R42j xˮ!JjWl x99oqa݁9=?FICgjf#gNYY" `ЗmƧs?}+Jxc|i [hm)@N!|w?8Y-o'0gS]e!gV~Pw5Pߚ^(1%lvȸ⣯{rj#;C9S w_`1 m7:_[PTUXNp٬M kfU=BWM&*>d)0:ƟRT?h%cB%z&='6ѸibȈmt| {,GKDo4w^s(NJf"VYSk> chH|h~ Jb 3{#=?Q]X3vxItLd s~:?>! @I[?XD a!E&RYA>tK[ǰ`5\5#ӡQ-+~ G'ls(řQ>$!S|SXomX!xÎJb a[P'wUAF:ޡ45LZ~ro/Yg؝{f#^b|,Si3hKڣ /AWeЙ5 ._q6\ u(^D-z8Qs>3.7ڳEiH/Yz@D^~|N㐻2zsG6l؀\^f.p&IW/)Z-u%`9"Z~f{TLjER=7Mc[/aRld5V2֚:0"<~K)A>$h#bZ(/׵]YY6Q(2'o>knIo$pQcIp,xoafXr>nX\[@X_$H+9Jh 6gb˴&˳ Rq bg*iK;]EpI3lQQ֒|~492S, ZHچv:Co?ek,SzE!PɢVs\UYpa!/@ }hjpE |$S4kxz ~2e|f#!4HN9OͻyS@0~ȴEČ`m:0͗bcðcG-VR$3:Ajy8umz,ǃ(j:&C%$s[c yԐ͕S2EY<}q2!*ɱ6Is Q㛊"(Y:I50qߨ݊hL%]۝lpL^KmxUr`~VM1i40 7W]ވvV$"/Vk dfy.Yw'f6H5sSD .winZ}#K,Arp;]pֺaG:mk^E)6EΔ whQ᾽lvpdPIWU' 'HرyTF)][2%ޒA䁵'?G%q(>ZN 2BJ7"m<6{SZ߂qs]Vi; rd5N Plv'vKÀfNAɞ y91 ¿ỞLyhG$a#w(Up"i?T)8Pw3B=AC3[mĽ7>za_\lR`['kptپw#x^fo#㽇_B J8/jimөzD9I=-kW JCY 8 0Ag{tiDvQA\@`}K`b2!cҾmlb"L]Gxh^KF9p_SehոS } ͌&p>$Xjgq%C6nؕل~.Culp IXEÉ:,.ݳya.oBh$ VUɮIfi.(ILCGh)o&}wT)9Db԰M+g2RBR`!{G뽊ΒfI, ⦠žFk,"eaEԢU#i$vRZ0ņK>gK{T m^)#Pc+1 W2AeQx2؟20MEdz4 ft}-~)1Zc+ݷ@;ߏZd=rsߵÙ8"q}͒n-ELٌZ_u 5vd cdE?Mdc`e J)=JyΆ0|q<ʭA qP}ynT_o3$`Pqt"Ht|.c뗈K,6Ǥᡳ -zzrqqgU5mѺ۝,iT/0\gu('zChҖK^fpxŀ4sDs,[&TD(-H"(ln}o{.&@!(/Z%bPzb|;&nKd$ X[Ӳ zh/Ndo S1 hw,Ҷ؛m\`,o[AS]>3Ō_g,!Wg$4 [m9]w#[w +$~h^}[(wty٬v@ :} d":s" }Sk`G-n&_|='[vH endstream endobj 532 0 obj << /Length1 1794 /Length2 11628 /Length3 0 /Length 12749 /Filter /FlateDecode >> stream xڍP S8Jw-. ݡH.݊KqH˖s>w2yzgBE(jfg;32YY,,L,,lHTT gHT@G'_@cW󫡂 b`errXXxch0vv`#54V^^n?@G1`l }hjlP3'=3- l P:]f?Z(n n rKfgf l@@ӫ xP(epL @?MMl d(I39C`? m^]A6&n UvwN {g'&'=2%fv@IZ!s6\5 6"d@g' 7/BL-HnSϞv6A$O'cW ߊ%$VV`*ůtY^ǏOffq+f#-CwUA\lF6N++; ?ƠWD&^O?=4 -3(ڽ3@p~^?]Q_V$bc/-oyvq~  _S-_ 4_뎈-^眑/1I )M-k l`dea?3~}8؟*boZI0vt4vGzWxvί.?W.N,%KfOzS/U!vz3^Cfk׍?ٿ a/|__ _Z.ka2e _9 _9 ׼.ܱ[]|\ 4EZ3 l%rcg@ Fڑ$pSbϏXqyVhbmTdkS OOF`3 ܳ&!kZ<ݹ̃*n-Pǣ"yxQE3+ĪEgf;d(.EOHG8Kހ6ӈQ3R{&3T;=4m~4&NjY2;җYu/S1! uVm%9.8눳[Aif[U9X HU>+gF/g-}x4*Y|SU(/33 .f/;jVܸګ)yI I^m”0|PA _IPӊQ1ء)M#iȺGus (_,ЁSz%u-pT̾V)D;>PIU˛V/=h@-z=:7F H Hȕ P4|7M'3W鶴GaO;<]U߯ņ(BćCdӏ۾̏Cڦi:! ]L)HuMz:z`&Z0Ycv/"$?~V%[O:7c eO]5ó|J$ocYg{?T䣞pF/`*mS~*mC%UF rL~^G"MI41-2$J|_Ĩdurf]4`U"އb7Js, LK&l_ꋭ7~HRa϶YˆE|Q0AGvw.lE$P'(I !'HDRƄX3'A>I7'Ff]fع {p%Y<ļ;Daa͌ph9OXF꧴$}z֢\`T֩2ףbl|}٨nc郶Q5gI4ҞȀz3r`a]LiX8RJ{_z'6H}62:kL2KKV/ffml>oDZ+Ґ~=v AA')eߴ|+aXԝ(!Ud AGcQ=#yh.a4w ˵7v0P?#S_Pr~' v3G,%YՊB[6Lx2o{HQ4+U#ZeMGsǠS#VZ onBb|,jԮzo#}hg޺{׵jpb&CF?mCj5S}VpsKyp2 x@|@>W) ;iIUoW-o\d~Ìuo0]\<ٲFD}"YOOhv<1RO$xNZs?L=L䝔!Mj{rvڳCt$w_Af@~o't^ɪ蔑4_)REQԩ։a>j\(RjD(po"-vgTS'.Cbof.=J́]ę(#UK0ʎa`}`tE6##~<1͉Nx>d:IoHfB9Qdz'kۓ8/QFGu<2uw6:;֫rD8lZA7ּNOÇ̌/_Ó)7ДKW3ĢuipRYPUD8*%5l1ك(/ ܢ>Kj =[1"hՊD#{yɨR^>lDT4HǭwL &zTtkۧJB(#dm,o2g연yxmثI/]hIkmxkUT5>np֣ҰmF_h8i M̟ZO ZCrBhw( NcW4!Mt6P MT.Y5S5SVwrHd+r[,-H ?%]x׈NmG UiF I?Te_jwͤmx)Q?uW2O9xrw:~nnbX&sQȅI{70/Z૜> :HrX76} $h(Z c#t/5' |U^v񙠌OO,vu_6 Wi v.O섰ė.pq^#sd_u M?ϓN"—".pud]PQ#v\򑴅ӹWڑ`La,fJ>"6Y)q58i/nѡ=Km1*;!g-p `EhEmP[y="5ݼJ.`+=WvٛWie`rاLBߪ5yKiIΛu, 2+v]'%lXxqif~mmHjmzf0T}NVELRI9RsCcl`J|ӹH"QX&jWw6Q=thY`coy|y 8˨%`o35OJtB>޹K^ǣ"/'z͉,[OSyoKm~~N}INdOq,^Thp0Q8_pFͼs˒1xR K]6`a5lMO2$+h޶!-[bѩgsz ?gm/aN.ګ@UV ؒ+3g.GTy3A+1/;<) 5 mHG%.U$A@{sJ|}PˆGXS(#޺vǰk37&OJqx?һPOow4Scf “qjx-7St3ocN4,"uMHޣA$=75!ڹ}!DrRPd|b|͎0vS^+jN9, A f43Wg>2 Vɯi}2߁;g:߼8OCq1C Iqˊ,KTOGh!f.쁶qTJ;paꛥգê/xR^p}ORCN x 2A>}|S&㼦zژZs k~Y$pOܡbz.w(Xc2Tl)x/Oc7R]>(lr׶iVI6w䣰NqPqU[.jodoeUǏe`3Z[NTը^Mc;WM+7W '1s ƌﺓa`-\BeEwtR !DЁ3}8JoI"ʽ PT06'K&#Z+F.ԸEU.$o0%o W,V[6c-챇a:^FE%TW;2O ݘp.ߏ]-s/৤KRU$iy=Ԧ\uq.IߟAubs1cZ$ U(Tgo|*7M 0Ǯ-~8ge=)?aw"!Y~{D#g?6ț_!ͅ gLg4nMVw-[P рy(CˠOr6#=/R0eAk\=|fcA\sakQx&'lo݀2C[am6]ynp^9FU[[TmqG@)c*`]ĕ".8UkMۺg )Aw0\2rIn*p4.VYb S*{BiQ4T 5f쎃݂oݑYcO?<ؚLݐTŎXٿ4tJ؋WrIGW&!Y=mT =ZBw%?$L9o&ޚzta?}^E!B& ]+b bd yfmdɅXGL@Y.ѕ=P)5mFqcP"lG$kAe  ?Sgf h[^_ [*rprx|' Z۬]L$cJ%U H!j)5k+}l?9Su32ZĦ[\uݛ}lGTnL eV.AiaQ8ăj(+W]f 56Cήf,rėSCy,KSpD*H:YR|B]V|'ܷtKD>߈ޡ~6esBa|8 쵯ݗm76ۺM ~CjbC xb+ǭ  PDͺ?BT #}_Urd:r!i(&%&yrwo2\/VjDWwy LL'۱ˆ^ \Uyw'֧+gٹgLHY?!F2}X_G~\:t{.fƏBq"twAzkCМbVk ztiP`:7]c. Aר2CgD d\#-\z^ &A<[>.M S8Vrdj!~W <8^fQn~ź%wKܕm堢]?ћfΏqh|/74 XuK5o>.0BTMv]XQj?aYo:1?w_?~ +?/QbkFwu=%{CSiPoak`Ѵ2y甕 ?VRzpŚ>DG"T?aǤf8S3 ݴiwcY_*2O[8.$1I_B 0h6Bd;m*/U&.cx~2)4`jycЬ?]KcNt*˅-Ye "OnzL>@`MZ7 R7U[X^: yQ !H9mQ%(}REow6j0~6zV9&m R*M7FwYG&,mvL֍ߤ6QO#ްHX!$z ӁUEitoszqb`?D\"%^CMn7gHpkK{ LL'_MD?eYۉI!TqGifA <8AZV=lvZ֍[y {mnCPΏT%?igP> J)r $`q˜7Z䣿xb L;] Nd®6Q$2Z)sÛwH}f&6=g;Y; 刺BFQ\BDO'Y#]4-o񗴰_#.LK(PXetȐ@ IV6ӇRS)|Ӫs *n";.kr/pGG`:0vҋ_$AΝ" }ArO_ øiE|#5 b1-D2$qN= mPf׫e+ν^OSqKJ#;$(o4?bz\?{ 2;!Za5]/\tTw QRs=t*_BS>\V@gA \$a^j[.Gb9I|x 2zMXGmwC\0,_:YxNH^x  2&sv]ý 9 w:&nL!B |Rf?$ "v2#?^H/l>O1{ ` h]>% T6G{i;h3&z5 mfaN1%6z>#"q/4yVw$z?̈́, Rh{IjV:߳yF+f1~KGq|稔*h1R.qM #/:z/e:#aVYq>2vClD%}"8-HVUt(VU94ħHIЃxv< JW< [9Sh^ D] de!MxYd/?YF9V+=9!?#cU,nSTn~Ըg*。@i~kݸow.nm>2_̳9a ghM{lI X}`o3"YjcxV7+ho//j>hJ(i(ࡣ)fU"RoKo ?[cz[1E]TF0f/C[Q];L\B?BS~MtP!$yƺS,s.a^u 1GI+$*qwϝ}?9ɏ ~2Hqړ_JY.ư\S.I<aJ_#YՓЋbڻG%y"W?"ӺO!J5 D8aaUބk-:ŶfLmR2߮Z䮚qr-j1J}m DuL4 ,9mcZ(YhO#Cg-CB@SPrX!#䓛8!}UZvIta7?d4p5ʴC=47F(2'谗8Dv+خ/vc=v {R۸ѱh|v6 <8u ¡ǜ3G^o(y7,;۬1_I2FIю@XC})YxQ9dC+?H!V!ۢzNŘqٯ <͉R$AY*:yUpզs=bRt6N?HTiLv+Ҟ3fWR%1㫫)A0@>hߍ'1s5[w9m|Ʌ_Ri~=Tk[%~;Mbd*$싉;)ɌSl FY>'PP^r-H4,\0 -C c ?W,VH\Xk3|sAVB̑ͻk%԰BXeGiCG' Ԉ \LAFSeG<ZM *iuXE3P /f*q(0_I|~֪)6C rZiG ?=zOw4"i/rpLWBQ2<VƐGYgW"dUG"DJ<Η˽x 8VZsn(H8ZH┕9 f3Ey!KI?:|9G 0Dn;}VS<ъ;lyV/΢)KqBf1Iv.>ܻ})Z̠-#7F}R[2/ Tc 3(8{J)=<&}G{O!UO|lR}zQ?z['!NLn W`rK!Ϣ,o3q8*)M]4ekP"_Y7dSWX%yb~F}90: FCi/KRg4^L)cB:L?ti843簈4( /W6v.0 ~}݈x2>Q2!%1@;`5/q$+(\\z08-^ݝYVh6Z,' w>v0z@ā/3 uۍ?~J_HYɰ!rO_4&gx5F4bPuht~ڹc!*ӓ0ycOΖJ~nr(&m> stream xڌuTJ7Hw !]C"%tww#%)s{f|;T*ꌢ 3э `aagbaaCҰq Qi]\m@|ȈM4 S7" n`errXXx+rHzXr G+8  D.6榎ES7kأ=@dntnnN|̞LL +w O7k6@orLHT kX K7OS L1:-.@ ? heoeSssPR`rrc:Z%hj z؛ % 0 ]]l\\mʒ/3BK:ZnH'a4Wޛ9<}cKG ˿RpwbtqvJG LBM8YXXx:^9vd |]M=7wEH s7u0hO@<>3ϙߍfUR7bb //#  K'? :Zd.3xg{׃<@-0`d1ޅUV/+?$noE_6xIAUqv[haneu<#/?dW)/v=8U@6@F6_x+i_ 6 `b56NN/+xe-^O9V3X\j-'Y/? ,%~#^俈,e~#vF` 7Y7{PE<`*+Y7S#oO_ c15u5w[ R`f.\Ĺ@K?Ȝ! Zclty^G\'8s=xZKG"1bӲ3a!xp/;x-Kn[6bm̷)w&Y{;YlHm1 o>!elrE 68#l1'?]`{ >%pavEpAn@ ? QOVp~[ =(''X|&|p3Y38O7O `g9b[]z3ؒ(4wwW[ |NBHK sPۆЎ:Q"Oƽqo\dH!wzʉ8oxRr$TFj!$?r{u2cbaBD25 (\ N^|#LOt$= sN^yK%$> $;8tV#",FT>NjCY>@nvK6$" Y;NL>1Tpi$ 3"rnnGNy.ȯ y4 CwK Љo]UqD{K$od?*:y M҅ͣ"Zz[.? ⚑=9m3=jBInxE #0ѶSW=)#&DݧnhHArZg@dXheySB3?ȊCyI) }6S9>iC )Vrө@R vj/oE '!f H/gql#i@@Vzw U! ?LXP/cZ=GO1`!*_føqDGpY,U }?[̄ ?}G^We6Dx%үi mHp/s 7ÅSLNi\{B;qrLX8sCc |g_6ayFӟ0H4CIX*h5 t7̆3LTLަwuersV) grg< tOL$rd~pVW ͉Xr,ݟ§Gj(Ȇ V d_:@ێg*JHN QMhvë0׬N7Q}1Ҿo-#wĄWz$4to!6).&s 2e;=HƧ@&C9o B&)>3,R8Z J XWhtLd&R ϶gJmŸ_*z8J"c\)]! ,;F?X-8>ĺnhl`@wFF$bt$\Jgytrz5u YBj f%u3x̞g3^~9DEyeHlP'YY./en̈́ҝldO^T&p0V84/y;I-#:aMaP3}–4.m1[0f'~?\'Qh*B p)mx/*48?!>>f+D1AT/^E"u_q|?yB\t$E;P40 ћYs|^4=գ/fSQǸXgփLّb6wLu.U܀>SZ} G5kG;9fJ'mӋy;։T!%<C4QLɧ6 #yS'*: 4^j쨵 ذ<ƚ-",sO(W SN^=%f=GtENf>fXh&WYLgNfYGd0@p+4q bӇ$:"{ܲ=@x)ėoӌ,8n M+G*~ ZR*akF$AG!Xzd:+N\i opUKrs˥NϔOv>$~:Y?]XWvNE򆌄` [&âd0WJ8K#bDw%Wy~,OᮂQKǒ[`$YE5BeGQ. hse}?S2/q`NApX 7!DuM\įdc aLωsdg.F}DBJC;%{q`3r[1jn٭1n`ePݍk1~cG<>bCj\I÷-A3Ub8q&<T^Wl~ Фҧ=qe4r05q7}&gAހʑNQC{@>y4`1!}1}1Xe'E|/ISF4fEݩmR?׈w&81Q]w+U2nBOr*{Zs9r1XÙm*Un?N/+!A 'Xqs#i'@X _EYJWfqD%όs!\t!R'%>h߻-0qK|ѝ9zɸ}7Ŝڢ׍DW|*gu#+Ґ)|ԍ-i:}<_*q".mJw0\%S)Z=ƹP.)zWwY!VIpb{:s:Qz#AڌY_*eH#N?`0}gXUƃQ)Iד:ݾE&{#="Q}W""p+f2Ĭ apM2vQ?Ix* {n؃jw a݅F *Y)ɋDC͙'twĘf (0L~N ;U#C'DC1оk$75.A礱3s$}BoydTI*oXfmD >M((|/n +nO=^{w~Qħ͢r mPsGu@=RakFYXH_|;i0 g{E1<-`ET(t-p6v`8dZ+2suawv'm\b]&^Sm'k[ٳ6:+縢u|KdguV&oZ ~cZk]OW5aYhfu9]꙾ =a=gn_@8ֹ!|@/ X&Žd`ӗ8!sTr4a<&qC,t]J3WbE8F5mG=e77';dKHe( )!ͽV63u yWmF7t*O>N%u }?1AC+m:FX%2 ; =5^kާ3J,Nm(K fhR,DaZ6 |3qEn֍9"hN}(ja< b&ΆiTq ʙ;IN͜phZi}Xt_Aj|G;x J_unrޥEX#!O_q%LزC1 Aq-|uzJkY%A֧LM:oroJ:"=:-,7V49p*P@!mwK;dJgFuIƼ{{١g~w9}x\SuhSj˗^$o8I8&tܛ9jA8SM8 /C$@ 3Dx``?!S0J&ۊrV|%8/7o10yLCmET[;(('[+CVܕ}>{ `q#D&d%A7)䞳q \|~\ԨT4o0q.e&:ϷnS< i,cމ @e#>KíZ@Zj`+q\xxLBعՑeF,?䝌}/wً!x:P#E%wإ$ Zȕp: uzR#x}yWָPXC8<L5Gsc9ĞA5XQ]n&^<O)9",pI(+I(#7^˩|pYƔʡ R[HN˟#%7Bb,4iA4ʭtSxU|S_.yp[Ȉyʏ٠-1"O펐+NW`8(9o <ݚI#KV]+{Y'j;DF>pDЫQVh#Rt9!;uWʧ].:OY¤,QOIcwt3-{6y[0+>Ufh",BY=V}Kt%Y?͛f)?5gգWuNJT蒈BcM[`J`#B&K Bf'Zzp"ϛsWou_IZ;f*&H m]p>қAAҘI]“. +dȧz R*oxvVdZA2{*mԘF[XG*:>T/NkZ|ϵ]Y9"OfSLO_7bu)heR,gG\_z0%pg&#\,Ab\%XyK$ &zres}] [lb?/.YzobJ6ٷ=X(^Tt, blr NRLPO .P\'B^ᱟЉh7p/S&r 6PX3UKqpD«%乣gc6>KB[cXd=V>Rx= {ev4KSNkg5#| S;7.l1㗖=!.sLX~w!G2T&Dc !5Ǘ0Qe!N®yvzLkڬ1]bp޻/`#GJ)mژO5ãTkȺkwϙiPxԨ9Ew(OGkŅƑNwBb߬3$۳Z7%J1L RmIMX}b7/.` h=|&1IR*˿pdIgu#ߢHf*I[iF@`a1 j~F5Ό5L%ȼd?4EjMUW;1Hb2UD|zwq BL]_l᫟y{ /5WQA\(ŽީR͗ٵ|vN F' ˍGX+ a:)a+ iSBB֊uN;7,CTBm$dn%6y(n\XTY]Cq􊍎ex:k\m/kse`0#(SN>744YM`N%jy(ܱQp CpK`N.7^Ӭvш@`7z47՝*ݰ3C_0Z߃Gr3n` h{uxle{lȃu !f,>%~eUk&Lr>"kIrdPNɒPwB}9͋h4-U]bǧ1Y桨^dă$U,>|sMaĉ[[Jj8G̯Ҁ=E:J/e蒹/05H~9s@PER? 9KϽWpG_R'aZN r^/]|)'\] Q`q;In[𻠨=vibEnHdo4b#}0Hw-F#(Fvt$ ښ~cHݳD̀1_-7}802 s|@IdJW!Ѧq_F6 Dr*>"k dg܆B޺F p;\$|`&.OD }tۏE VM\;>|edZw ۔gαV rd0_iE r$sDms%;0<`a9A$=֓}`76~Qm]^GK5җ^ "_5Pċ+*]peC ]iZ"Y2_G&|hi"Cμv? Ļ`F:N|ɔ(oh-e+۳U=;sm\ tNgUPA/*w09pٖMczOќy}Kͫ6F_y(^&QAud&:р}q%T(~C3 Qtp1΅Ei GɌS)#h**.p|[e)yS79-*S[5ozA@m_.9׼ ViխNZuU\s{;]ArkWS-蟓n8,`BC/T .,7DRAiBY b!q#I/gi4vQ̣/ T7b>xߝBAPZ_mPq`!u`Dhd?󾉤 ^ Tx-<{/ m4togE81R2P6]tG.,l{NqOآ{yP$)i\a!-fD q׭1jZc瘰 3miIy0F.[@ԙhtӎ}R5TԎBܥ:]%UcuŵuM-MP>->u}@Vi m'Vm)Dbdžif{KFR]Gu]-P(@U L C(y juRѬ"G> O2,r'$eؾqCԡs{jKdN bo% ߔ6y{BBH_E0n׆xř =zURIN^rD/ۀ^?aєCfy-=\) RgYG^p17뛆-B_<Jriэ}HyNjlf˧Cb%S][@"~._+ eAte8I:dN<$[%v+DO _jjWQ1/o\3ʝKC]x'JNO '<ˀ_a"cħ= )8ػԞ9 N9t7XhǛJg3ey&` 7s a= \iR떐V.50 r5;6՗i-unDzНd|p艉]RV{η'BR!lo:PT(`kZae^.`OS N%]*<׏"5#vZh=suBgE=D얅-<H?xؕ+ū}]jfBϐ=\WInzhoE0G ]r؎nkӼTA**7kdJH(ЄF 'HTiN&8Gv;,͞bG; *OK GXl.ɏVk[sow49zQELOM;w\r!I߃m0X( n42Sro>0$ z5B{^Ezu |xTzdwV XQb-,Bm'>㗰(S? TDgԵn_s9BHn)ʓ"Z1x,/MzѶ|[;!@)J8Cqܔˏ]Cz߉:cel31EIN*J1WTU?Kҏ$Kb|~cQաy֓gl;% Ո<(W=~7jW|5ַn\wSȷd2';v"BvV!ԫFI'86pXM:|SKDR=QaY?Zz[B U룸=|^t|KuB =<2}SCBbۼS0,rD0Ar#)/OJ %eB e%\FmQs'}!YB"gl Uf/+*a_*Æևy/*;G2i5 V 3vԮ5h (~_Wv~#p񉗩tMi =WL١MWa\N^!|l"ug`5ي-vw o}w*|dݻF?,ť;$~D-SC#,5xZof0j%ێ݃](?4+hV+6oaQ-CW5ygF|w7K?_d3DuA xjJۓ,G(VG< ņ 8Tcm<x c_-9z6 qY!!{(Pm&[6 )2Zs ߐH x߹<ȍO7uKC^M_};*C%u1(? 8BVn_q[*GMnC^@ XK1|zIQPB:80;(Pz1/YU4 YxgaA/Puʈ+槇[z8{l k"vdZ =I BneJE$MC~ FQ., 'L`!/J8&8Λ_|Z7~SN7O=5zVΩ7h׶G0ÕΎ2ͨPIߏ^pbC;@'#HYmZɣ?wxz"빤l`FA}*a5? 4Q;= ͽbukKjʹGkAl7VߵkM76ORH65cW?N7% zP('bn-W$!&[-Qu#zkMl,%=%=8Xp媍4hwfմT9!wQߧ=*T/Gqm <n`8tF-<l'܄%m~w6|/yʴGXNnT 3!5# ]&}=3:NV>U.S+rmO썹/bgǛh/U' JRF.OY6/uh*汖̝IW!ՒGD5H)?y9IqeSP҃U~,AQV>9E*;fx+V[: _CA$%Mk l8v#ᖇQQ㼲l0Vd~1~Ahs)Bm][5)FP{ox0q<I*vw}e㈎iqIAGyht,gk03]`$wX{6A Qpg:X BwqP"P^!o`;ֺGBF'US*P{y.GO1j}6)qTc a^e#{K0:87E_I_oz!:ʍ+4}xmvmZwEl,/3ŗ|0sQ\*Si9Fp -I1mG$C BWKCNQ| [?!Jҭl{RUFlGMȅ =#6H6 "ɔo \ݯ!۹}qtx0"؛3u( "R{r̔ݹ8/Pd&,6niBGmڨh(7 ASBN)t$guTvt^3sZ{^}jH8m+4=.C2އ}j blo! ~__|4sVL{U*a ؜3ꍎ!:tz_sd$Ѓ/BR< 6:Yt\ypkIF7RvWtNTSFd2 W>F05S͎{v¸ؚfbFennۥEK[WBzj|L%ǫyqp/@,rcp ]goXA~ /$X1%~F R%WaWü_{ \BTZւ"f@OI,᪨@_~xfk}6Ek}ϖ}w3?I.]#!)E9G2Ѭ LCy-Vf !aF Wr)w b|g-xA\|*( aw  ܢnJwMY ]8~]9 ]RT S S)nsZpd.8KGUӑuxՖ~~U`d"2CĜiNK鷪eə7_ƄWķYұVD‡I˖`JM@rE ZRWVޕb)hu憤+K-pFI0X%YHgk| dY >81@v I2 =C,8[rK;ԾF|(b3"t>P$-Ad-&[/|T&+b{o13c9i8 EG)$w`3Se#NfTt^ {ŮVyB D(mm_IG,k38oOMsхbVp%O fE* ԉ% a-cBr<.-L7ri>@Pv@nG!=rלNeAUi8enPftG@ q90/Fmٹ~. m̘g™bS~e=@,--f3Q3,.Lk"*ޠ23D<ut_0Rp4M`q ( ,v| 8b2xuj JvDiX@<HwuidF*nZU4栃,&EG[|= 77bw!5 _ G9M߹%Oi}d{i-b?Lx|{]KԢ d~'}Q!#^WK:)*OA2׊{g5ΞTP{NT`j8x:]bq-([lE\$]ĘM/iܠ]ZOEk͞0cE6vlR~^&:k9jiKjU)rVd=f+z˺Ɵ8ڑH*.f? ?s$M >Yy-0L < 4gXy `g$ժVKoLpH;S[c(81]]KRV焰 dL\x| +Wj&!!]5i ]U<罪cx3 C\#\3gO3'ܶ0F9T̂+cHn9AbIP>%8c7CBS5YxmIB7"hec(6dj&)dK$ 3)m&yvW+ujޢv- RORE!$JߒDjG؍ڗO ͟Ē\%N|ߠv#F3iؤ:F2I|vjl.j:\}պ}^OG5MQ] !oAsCqw[(38(zB[Bق/ ߉IkM1=LKCΐ%|66,M7dE2&Cpc}ӧtX$.ӅnscjR=I9 rӠ dF10Պ70PAft7q f΅)n8Ո>P҄*R?dӵ==+t*GtY:Qj Wj趧,~2 H\juN,K=3Մ"L!>]?QZ\'^#>ºD5ZnT+햸SuՂ^ v d$]|[uBk> 1? e,vrX쐣+^Zur`6scW>Ҋ)ND3le`㺭n)pơMLӲ?Qsc>aw-b/N#FRX{RW-A+m0$5],kհC|q"(hQMa\hj],gxzZqɾ4}x<=bAk06lZǸ6`ẗCOtMl1:vZHrjpxH43ː)0n l$yYڕ{vbK;@@mwmOMsV^`=]G ؒɃ (KlA.; cƷ|P!oYP|qY%>E[g@$>OώB_$'{U7xɻb WɭMf}a\E xSK.L3-wI!w(?T endstream endobj 536 0 obj << /Length1 1448 /Length2 6377 /Length3 0 /Length 7342 /Filter /FlateDecode >> stream xڍwTT 6" HNARkbf.F$TB%A.5k͜gae畳E@p4HP $jC;CB(. H(}S5p@D%$A @0[@PC(|V7f#$$x~r.P$ `" # 0(_)8hWI~~OOO> +`C6#О`$R8 P8*n EW}U @ ہ3@Ot&!+ v0g(B`OG3 qÜ6WZr |(F`?1Ls5f% GCB!Ws\'8dass*R$n +Q +A~}Q`(FC}o _@AЀ 'j[?'~~~b-k)(o< xE@ &"; /H C1\ /j8WB\ p~sr%_!?;Rvwve.0g?WtvG_&@j}ϚP[[U;=HJՁ!Y;P  @e::[u_&My|"{ヮ&(" \]-~>8}\H;~~Kߒ $#qG"nezKbB1D*Mh+9O8MQ &"h\_m({Su&JhvN[ͥ1:|;l"RMԥ#62cO2kZ-_ބZ5\cbt\v&f #"9q< ,@wX|c,7/ffgvu Ô,7v1q7pzzE7ËfED,F`DE5ͥ%ڠg}=o#~yVaɺÑHldNVkn'1nݪ]Ȍcƶ6!BM1.dꐺGgQ{GG`FY޷J0•Wo_9(ɥqs3ڭl~&2!3 /wɩ5JN[3F ]wF)jjUkN/ l$QCx-gx4ø4 gLӉ|)Rf B.Y3R]uCĎEIs쨦dz% Zs䒱*+TLᨺylaWvڲ8ERh&mXHK?&3rSؒ捚+Vіm-m C*^!'-m]]7o,l߻bS]DCuE{m`=Pҥ]t %/E}p*&' }HALW3{iՕhG4X}Ϫ^-?0ؿUr$„{nbdGiWD -GOTIQծ7CŵHVsm?$L7 %hw';K'>XB*L>b,ZSһxDޕ6lٗgO_T%[f1%pԹk/=kaǷW e{n;;*>^QwD%saϢ9 ESA9RnIiG;?Dqed;Sі__ z#o~ JpԮ[=dzS=BܣٽK2(7mzH+ jT-2:aiٶCT/{՜2y1/b .HOf=b_z3\q! ُ\g?~,CSWOO<s#{f/ÐP:3h5~R戴Э]sXFOve֝o)?$ҵbV5W:t_^ yf4(ω$6_Nbl.`!XwJa2!f8f['lD% ;Lr oР\J Ki^aRr Q.F~Gu>(NM]@8L- X#;?'!{ ?B]2_i ѾnۗgyrKcߡ4NA3 |j¥>okNvqj\dTŭaW,o>LČjr9 əd{AQ)َHNzIB}#E!ֶ3_b"+R-8>s.;m&4du;qWX*6!Lé0pZ*D|*z*^8 h) #%~1&|A.dͱ__ ߺS^1GLRmʌ-v[M>WeZIC.F(,t5B*^ 'twt Tm M x[[v<5 gY .A%ݶ̓k0S ɱVKn1#"͘o(2#ʛ]% #k]#68"@+f~TbpiYUA=}- k/s|{m{V9l',FVYKnRS#EQx#V"c*)cޗRN=toUrZWy(=Bߡ>K< )x>^&=3NXZJtR6˙94 pRv6j<ˆbZk\Qmv^ &\ފY&6{~SygʬT}8 @~å>92ncQaepts%ӝlAʗ,dԱw{mbO1¿<.s=+$60U˔6%+c@}hŖnП'Č~ ]\ۯDkH}`vs+$Q.Sj+"Ym}MzUSǘ{D[%9zc1'VbqC a6w>aCՠ81\0 :tc!H9}H6 @r1S;`*5f% #ݡ,$ ~)RKxMov}#%*%$1ܼU_MܩPu7En؉(3I>F,yF)IӉC7JQe.t?41. <'04.D iY^b)$yE]L&r%/6FuD< 'ݕ8M_SՌYµ;Rf(E BƤKt{f B.,!mlXLځs0 zOdJ!Qc[|5g`goJ^"'LzTbDU%N{SNc7{P$ts&g1GG ::^-ýwϧU'x@ |6g>۞$ 9]tE=5|[Α}W.B/>;'Yr\Kj678Rto<}:w 1$WVU8EK^J8&c'.Z4&5`iU1_沤:K\_. f$Eʐ>5j|BdS'bY> fX̯kWmpOQz-5rRy\e$8dr4Ř]VXb>V LIZ:=fk72|t\UH\,n ]|y[ {Y1\Ozz* ӕbJOY00D qr}zz6QLVc7,!]%𢱢&d,5C]񾥌} zZA$ g,L!q'7G\<aΌZ@Wq-=O{F~QYcb!-* ͪ KY&Nk -bU)R—ߍި<%'6[KG+>Xw+eIfuubչ C}:X{pʹÈapA3Գe=zrǽ?mk~?F|{PA{/,@JT韕IJjUGnΟ1˻Jb-V}l{09MWݣ|v+l!eI?GV{|ZKM$,e,Q D?!hLpvy'٦(Q.tNN]^yiD/uߙl%$}dv*Kp s⠗̱ B!%hj%!odvu/?l\}ӭ>%u0|92N+ͽK 1Z֑3^U6b0zSa" 3=Xcӄhո ;v~p_K#q@Y'}pu՘L|dGe&:{!ຟ\*7CQ!bknף{p6ua-u]'m2;n+@ |$ ĨIam>>(ḏ\B@)W:R#̞#b}rib($-R|m~V^TzLC;E'Č^dEؠ^(H$}e,$j L.RfyOVkGwG%<BG'!%c0kw̘ٖYtغ SCTC@kdx}6!*lbOC)ߑ]Pps sp{fہ e\ȓF{Z 'uk ۿoR~ 73gƞ nDo]y,+ e4*DdXA+f'2=Wg2yV)0G=<1 azLB["]yJufR=RK/S r()dit/rUl6|},gɣQ C/x;v)]F ϩShBlpUfKXbQB&f8#U=*8;c/*NcYe?VKǶ4a~N6?/'LrQ`Q2TZ3əɜ`veL#mŵb$P1=v]w <3ljzwu97cK_:г2/;l endstream endobj 538 0 obj << /Length1 1407 /Length2 5961 /Length3 0 /Length 6901 /Filter /FlateDecode >> stream xڍTuXԕ^ڥiee%AEQFRRRE[ǹ}{f{f!=Bbx| 0 @66#8`3(`0ʦ\AQHE$ P BK p{6PQ>h_@N(,..;(Cá$Pq\UB@C+*qqCex^pC{쁿hu .؀FNp?\( ^p( ~䁴WZ@]W3W"8w0 EB>p#uU0 i A!8bw}yPE^'Cw(qs#~H{E q ^uއ?Dp/*HL]Oԕ  @ 1yC1qvxc]Q@+*0ux€`0`p$Wf-@ý%A~Y]= {: ښۭbyE@^a w۪yȨt@qտxʇ :9%HzbiW N*o_>b6smԕV 5!n}ȕV䑎[ wW{$#H@Rj^]+q2Ba ubWryp ? ^:Ѐ_S2F_jutL5U^R۩x o`:Gl 24_LvUu܎~.b:eVYsd{6~y){2NZg$݉ErSޱӐԏ}"ꅊFXNSKՋL & 0op,Ć,F[F褳hJ5*zg;[4<cȕ%W䓜K&~ɘ`] ^fSePz])LqWuiaUheJ(9S*=h+qaDkxN-bԿʝ < 9" 3Ӎs,[G-~V!MFJw 4 +,ƏFdͭ}0SƔ=epz4O~UWfmm!KG>alG!BPC;g 9G76ăg:~'O^#ᒌwU[ߦ?r.|zT9tM֔?JZ<.$Eeȋ3dʳ\BeVrMM#4Ajֺ-5Gy^sK5<顊>+"pӏ8p&*N0mvӛ=vT -=w b7;CoGR?b&+_EzN T79JEtx0M,{:O@X EB ~U/[T,η1βo¹Ꮾoї^ks7M;{VJ6ni둣xZ&` AMiTr7qkm%}$̼)pAX \/%+c#2(!JlZy2 J%ylwlaP$D"ƑaU/ѯ2qkZC,V:脍L!!w=mO͊G`2T n謔' b:Ĥq !zJj$iEZ&T x~ /C>5?UR3G6Oo}kxSb5O^x!\ I\͉;sWI4oľ ("8(BGN86 VoQi*CHަãZn ןv$>mP؝xy=zM*]7v9/.}%5bK!u@`pADC 9bPع s{?.qdi{FX Ho* iCË(]y~n:kXgvL:Z_d *nFtΐK/;QR R:N v!6 ~1WY0fP"3eZ{ J iX JqFtӔ12dx"!o>ݶԴsY8I3ݰ*nlw}r7dҁc 4>~؉|^ 84? 2̘4OonVoX :>L)`Į_{;yѹ.F#6r LJ^N62b{$5/:ƞi]TP! Ԩ|sL2DNnWd 3LKۮtϚNL{Xk1cs;1=$~ʵ DF}+Us."Fn^jqӰ㾏#&(桎4qlڒzlͥNlY,3sCAEF]6w#h]<QG$WM6gE1 Ӹ `˛|T=d"v\rܺ_!3zalKd^R z'{Ӓ]m;} ?C5FK^bSsz:{(dTG&s?Id-_)/e/PF=vB$J(Wrﮦ%i]8£}2 3RgIߝc(xKH~KF]M\̝$ Wt54H_EүW%'8#R|3O/|IlLøL?P6ݶua1z\j`}%7"iknx"~2t}3Q!Ҩu]5#/Jd_plt ޷ Ԟ2Jߤẗ!KN"DĊrXYޛi:jXsXٷhwSks6pt/ݷĥc_ Sd|>3<?nm̃픢ܵBِD5֪a|e <tM[3xp"x3igFdXPMګb;šuՀu-Ӎ'6į (CX͇U10 '״;༲~HBƱDr" ի~RF 0\Qr_ӥze{=SvjX&i ),qY )|Q':Uk4݃+2gh;/,[Ef$+0gno~Xh8JȮW鳌x@/\: @-KHn<,?)7]:?>iO'5e5 %O o.a4gsmimjjčQ #G4wcKǞal(7g- ZqelWa'I)\RKm:t/3Ma4FߵKUb+(y-華xR: 3."Lr;7څNY }IK5Πh;Ojf| NYE}ӆd;lG2<>=-P֌@i$J Ʌ@ĉDu'||i[ES:7򬭙8?] E.w|)ǕT}Ml,WV꣢ɡlѼ.|܊=1˵E5UypbVƒ뚣j ۺ,3'[ ; bȩ4dsz(NMnCb_UM4e#{|tc?g6?v>٤NbLi3} &OA]5Lz%&rKfN,pOHUힺ2Kr_Be&Aw߹1?ez)m8˾"wCQKmfCW˚nfٵo^RQvw*\owCr\15 2RB*8 nK1wͳ|}cܾppޏ mL媁(h@rFy~ŌN'*]-A>Sdk"pڼ1p3^+UAj6]`jR!Xs&fȪJtǐs#>8𱣜uSOoG!)‡jO'4l 7Hnñ+~!A"qs&4|'"-t㳬Z-@Bb Sn\a|Ak+vUJWGYnfV7&V]|>;0I} /Lmשu5TxkJxRY?'xjdRx݃VB9хj1Zd[DxHZ suՁR5Lhnݤ>RRc?޾ .rUJ W'3*lΗQҵD9s8歼N:eP[1'NgkZY%&g]gL7[o?7Ӻ_ԥM-n#Tk{|D6W5.]%W3]_ZXe=bR+"K⌣nڃc5*:F4]ɕɳY3~3lIx֌L-T{e_U{cmzΜj]٥e%><.^>|i{ZfT컆k;ryr /|ݍKyZd3^D<_&2< ZᠳnmwƟJi⤒z3GrK.s~I ͡󼺪AK3`K-ígznël\eɂJu931 Mz5oٵWDDmx.K@fWpR֩diKB>x/ $]MbZ+q Gg[ɼm&qNjڴΟњ+F*Pny(;gb6 iD˷Lnql<:ѰN"!vjlJp{NsĀQvWI"Á涧N짞75*+I#,|ucg|~lz4d]*C>tm`lUlSpfFݏ_O5ʇLԟ]> stream xڍwT]6!5(9H- CCwt#)t H !->>}k֚\ 3. !xAb@Yu]]e^zP"B }rV$Rx8yBbb  wYyBm@8 `AF=Yl@^QQa@igl[!!Ȏ`+'. |UUprv熻=fzA@;bEa 7gu# ExYAH #s<`67 =PWY V swܼ3W!(w wv@av@[ƍFp`6VNpd v+6 IO`7 $ϯ2}!0;n0r}x:_G i "b£z@!]|vP @7؞W = /7E h$ B?w+O -// F!vPH79nPo)9@ЯOf!Ü|>e u5}M58{D\| /HX(,( w/ZV?ap,?OAi < 7~W]$'?'9@HjCGVHHhA`?f鯳@6p Zpw诫W )>#zqG76D'(rs i xjxq 7 @p7srD@@,> ??GKȣ%}\쑗/׿VpsC$!΀@!`$,PFڋkmHc/܈k96G~{Y n^s oSG~u>\ vIw~g4(E2tben=(Zq8R6v=,S+DxYSFF#jh[<`)XvN [è*UMio+.D3tma$P^FN`ﺠs;ZɶMige]xm->Ɗ.]# Fأ:JF j]ӖCh9&̐𝷱k=%ӹZZ#Q.w`)w2C3sF0)[-bѱ1گZ gWE 9TYgYir7-Q 0!GdoX se.db{Gu/͏؈[2B ޝwQ%7;/ҩzcVI[&4;cM>0tx q¢6EFN1:;S3+^jIP~9_=3&bݲ"yCԨτ|TKl 1Ӹž[g[ؼ_%LxUOȒ[%ޫjȖ4"ogb;>ڈ'4mp/:Qs8=ǻ^ֺ;2ؒ;Ŧj"`;%IH+Ib8 6gٻ]Djw-y9|Zm;c(Df9Yx!N{jK-H+Cpך\UlR.s0k_ܚ-``sSSrlݧ뒞[3ꆲatr`H :xѽ~eH3lLvkpy08aąz1ϝ\w"V"L?e?v<4/kc?"dg굾 }+SwaBt6äy;BuVobKDJ״GLG4Xa)xxD<P{ccvZ\E=36 l sPYMptIŸYZQ!}Rˮr=@dvI7;Wvw~NTcm W~h%(G ,}(Ř|H*]To+ʩ쩙}Z09md}99 H9݄Hi+EWPI'\Li\@rm*ȓ2FGϾsH\!W,ů} &\}y4.G8`"B]ڮu7BR>z].`aU(q$y3<>J|qSj~KGYkː&wka~Ov?KSQn?L *wFxI쥯*ŵ@DeF6Mުo<;k\-aiAx[* -twrlJ=Z;蓯H?+xSR: xct{%Y͉ʄAN;`Vpx od?G%+Zb;c+R_17CldkBn{;/i F0uYo j&)q)2+ʜmgA/-ɇƊ8F]LKh-MZ menפ;s*haJHk #uq%oY~6kf iƷb- < * E/ׇ@ u_ X@ct#(ϳD=+k5u\掛k{Φ J:U :=fWՍ!efuԏs%$HK7) +y$4dbv űL*TELؽX+{?2 QsB³J32L1c\V?$Y)YС_KhqE q[o,wB(IU',bߍrkN RŽWf?N=Ks87(N0YaJTyMeb=λtrr]Yݟ?Ko*jjy`).Rq=jRÇ5ŶR߾$vmSP4;^In QC/k7N,U`lYѸA\[^;viT7X;_Vо iX*C]F~}|Q 55Qw7 !Q3?wѹmW-}^3YbhY7,Ȧ$%|5VԈr6wҞ\Cc3މ r:. V_lOоޒT%~6S>uu#kLprgj|jFÄ4@ޔ5삋[@]L!`T{:ތ'yps)%qi`ʻD ;vwJ뮨lP@-Sx$yL~HP5Qj]KKoIFO! 3Cx3Ti5o2q'??ˡs%ͮ,uL%n#ʐbX#?s<ܯLh$^Ү%E[-uuBWUNKpRg\TFX>V'm[ʅ*ol'317vPWdX2sK9Wwe|uaل Y(hBł4jr 'K, 7A^תCPríQ*,A <06c2IHs<~#ʞ<2E\& 0 ,&aݎ&oǑ1H?!z@n O|ThϠwPNN\WJo!I#3|vߝ ћsqXz%ޗ%T SRt_pܴB]ɈeLm]J*0YIE?J:ځzC+Y+Rwh h9jAx;\eގ5 خ//閇.i-nki>.|X<Kf%Chڐy>ˏ/S?%zɕ9ew=~hָ7f7{d)ƅ$kv\nBx>GQ{&:zlRZ>2¨ ]|S(;b3>C) :BFe%s)WC&Cvq%w0!Ql'2%ɑ}hz9͟" 2_RRO2Q;81~m_ Vzdo b@V|'Pv?u%;mt$p/3uz8mS:->o`DmJ׈9mMdd"5F[৽{+/WWXt>ߪuGtńPeXd0$gqDCBx=D=iOӄƙk?ivmM]&Io$k,ɜQXS!<&zI9,RILLT+>VYb礛ƼQ͐R" ՜l%7UYj &6n:)v{Ph6H3T-G<єTn|,iP`~GYpeÙz-os&F^$0X7 V[7pز1f:0=@@SK|Wv_;`ṁ;&*pZM>{`\/= ?i\l4[$]V9?˛^=ɐHehDaf=wZؙX/bt40# }H;@qgmO@/*XUu(Sr;M}6IdXɞN*7|kRk@MϷέ@^'8zm:H6Gr[Bw6l~t4~RQFCYSZ,)a'^#,S_Zg q>Nyx*{cj ?ۨJZM]#' $g)TR45*?g@*fy ڱ_Ng`p}d%u24 n*OQ)ݶ2.Hޣ#V HKn5J7{2PJ :8\vҤN^,9Fݜ6mb1!tt+K1-M[EavqloqT %GFfќr>//@^=IL!NXKi9^D צl ~,=߫lxw0u~MNiCXh<Y*pz7t r2+P3rHabDi "G6RPV:e v:U]! m9+:8kMaPMhvw'/RJDY>ؓ ǧ}*DAas辫#es`{!fstuM,;k\v܄Chv,XHɧot:֙xPƏnؗ$;;)LwC?{r8A\<9&됺zgCz݃T]P( 1txJp>IJ.W n K)E_{k%\?4ޏ@o<#y#Q-W VlMqe `L_(C3.BRi+go?n}Dz:K_+A;Cг=K0C2qmb7 /cR=2Ϯ&Rf85;F]}qKĜҋ^&ďix4T'H9~?g\yđ>?; xe &ɜ˒UviJzlrôd阖gd"@]Fٚwokj9Y?,-yW6oz3̭@$mN:irK ̍L C(:mc0E!_D1SGBc⻑c5 |nGWwFW& > ܮ?![-=} ŷW8fL*N n~۠cQc~Û%hOڵAITtZ3[C"^g^㔣,> stream xڍx4}ۿVj gPwMՈHĦR{wkkԪ]j{?s?9{rN^s]뛜p *# jHZPD( P1@1! PCsBP0$B?, 4FBc uw8@D "!-") D@ n#xD@PĜHWo7#G "%%)qAqd#$A{#}G4UZXSB9 "Rto gmx̠7Ł`̛y ~+JHу\`p?>1lM -ZM4# E %`^{}&#Q_ /fΘoY̫#&0s`va!q`0H7_J@n@ @ s`i/?aقK񂀉f`P+]Q hgYSlF'g>_y=zR_W:,zbdpLZQ0kH*{T}|3L>2I8lWcӏs\1'VͨV kkּYlƛ} Sժ AF2۩XFQĊ'JKLuɋrj+aQɁ!4LY01Wz R`CGN׊<Vܪnmf`H7-@:՘hS{9  ^ۉξ<&̆h< hD :N:OXtCE/b%bTG!|+8~8MD=GaM9Et0Z~9~4Bκjyn#A4KDQgPwDUFgxL܊J-?HX-Ywׅ:|q!ֱoSnRLe%Uݾ7Y!/exGaai)SWK%=s9s7.a18-O)Se{o$u'u bu"/)Z5"xo\4~ihdό*㳎cL+`]s5_/Jbd8P&l_ěeu?d'Hʕͦ Ԡcwnz*^v+'*ĩ܃@Y˰vRXǷ,xm?u.DE_bFiƫx^Zt2&?UM.}@I)AcȀ9qpv氺WC{\P+㚥)~=OweL0| =o8 uuz-o#E)[K0 zR䯚q{zrh\tb5xqR]{10/XC 'S/CNq !7NZ[N((#a(ft:Ś6W^js96Yu3{-P =t^1jg ju組!y轑qʣBӵz*W̒&[}1nk&}o9#cj ~PؘKZP㱹t] =/Dd[Y`5 ӛOdt!yW}Ddhu{"{'[}"ddYɏgy!ua3hE:DooS+WfAZ~Z ߬$Gr~'%}}ˎC /O2$^:3o՗@8imISLdN.+$傜ͮ ;GkC^~f.!oRrNw6i 5G&F!Gy8mmjO#ů*YwOisϷ$ƥ5W81E^\M=S p|HW곝LL>\I5y$x>I5{kdܘqg2Jzb_nՇ#q8W4vC~ؾ#fxb/(Ec WS ̓=8;Uxbq*NnͮѴ~\}4SOExN]$z E:;yG v듽':j4@cΚfRr4fe_ә:g[SExI{iç C4юqT4HqIgw84a TyjP^yմ(7"FKo> rXt44{HO3bXl㽧fn=^!q'k3 fZaޜ:#.c vVG(G}=޳&,uMmY)Ӕ]Gس6Aaw/ L*k&zex}*aSkY"},7$cKOuB{xH$Һ?؞=kpyxGn ϓu *Z,z#< V̑݀'{1"j_wX<=jDox\m,_>ܲs}2{> stream xڍuTo6RiF#SiiԹ 6.CRADA:$DE?e8 ^#n k8jIwv+MBc60 P$)&&" 9a[_ =``,/'Ka^h+ A|w?WAA lca5v(;՞ 'KHǿW@O½?STDA@>IQQ(P\\muwGu5(W-s;!Q1 {@X aU%)[@~-b9( OQ`f \ 1k`PpA  8[lj!.(ϿsASHt۠ 7~Xӎ0Q k/[멪#ΊO{t'Bǽx6-Z%t,(neHzAzwHs4?o^)[νhDId, 븑,Od(dCu Hxb}݉ǂytʧΎ$lͶrJ:*O ޸.:5hNECXV<ox)s5 .j37NhA}nwѹaO!X;X&\4E{hF͉X3R"%"ɢW^bߠ` c-zS5:-Sս򀐴2$RN0<3x"dɮ}7ơZ2NΎ6ifh|QE Mv]/`aAIK\jQ3viy5;Pޛ;GYͪf'^&0}iK96y3.ʳ|}cȴ IoyQ]s_x׌>Uzڴ*P4r+?x>}04 j!̹_A`+!+#)[*t0=ٞޅ,l2깇?( fKÐGO,PબSl#C"$>!)xNqq?#ӧYGɮC"Yo~W6t~!Z=Lxl^ND Hk00b @rQ{@;q–u.c OSE= usEiCΧeΜ["(}9{lV3?q!HK4Rt3ŕ&z2FL(d{^P#ztAaUn| 5TAܖXE y<Aށ  SS}HeF*/)vR[pRLh;C}>fž { v_O.΅$3mpyr=4ap 'YKjڡD(hrt{dtY2۔Y(c&ՒDB.pZqk~1n6ώ3} $͚AwFZ/onok5o7mҴtHR?w~Ip͓RaO·v<ۛ4 ӢhRVjHЭq4]Mc۴nd o04MZ3=xT2faj!t\zd$-Zݜ'^!5tx s f\lE)OQ0-ocl\UW$bdMru4y\|?GM|)C;,e]u8r#vhih^d)rMv҇>Aū',S mi}^%|J +Kmvz[$ ϰH/J4g(9;[GA jGI;;߿z:q"1KO9y~4ר)40Ҿʠ'~q'W*̾ڂ9q$wez!ч3?Dڃ` ǘqMOV1OKKBT 1,gId%/tקʲ$S )m\h\TmeC*ɧbףi ϔh!̹jZ>z@i2@e!7\$Xc6s+jb36L>}qsȼX5 8s9SEB֟\Q ~9wr ^3-L.Ϊ[x^kk2bT:~~:z@a8Un$e0Iz4f9fH *0.E1-T#2];쉥 {sqo]DHYt{O,}1 .փ_& ^PQ~ m"X[^R'3hFpP#%q@ FN|_ s$s^ IJ7F+K|Lղ*悫%f i!L! :/qQVf79mu,K(R;7y%beOJڌubɑۋ:7"AJdgzV ^@7"b~D4;w^s.4K'qt&V?33rC(6.<+.nү[RBcۮ֛ṱΤ.'g5/{릥sg VcnOP}ZSviDšD*ĭ>_HDH[E|3RM5UF9|Z`9*W+֦̌'aRY4x==īCXh!$vI mMCjϹ#FtWP5T3dqhFk1|<نEQw{}2=QGEm(Tid+xMt+N#cպLG"`>6yנruzy}14'\9NcDql8ԟs9}q=|bo*8k4:!!M}4I-b"y*saUqJ6^1r3q[K_>|92ۊTl4M mh\eHluCI+FKҾ$t |b_vr#T^QeBBL XRu:r n9]K5>I@beRxx6_W";ϷQ _ sb 1渶Kp2XGp`ƣ{'~1RO6B4 wOi_=ZktOt9hNZFq Χa^~{_HC P39' Jq~?׿:yT⯀&/gqtg](Em'Աy5P{wk Umik\XT#NHs{@ ME<2Ël_rBuy;%]"={3#==q3>Z.fFGyFhև|NUdGg - XzO7j"}Rt}u$R^J  #kV=8a]Q!/+u k ݉-y7!H{cMwGF7ZuWnSԳ>T4?6֎i]WسϽ JyʆIV$8u4i%G B4\bqSԊjY^‹|&SP!V~(>˙ frd΅j锐){f%}%]hi}.6d2*-Ng rBqX{+h<{~2E!L|M Ӏe?W'-,[KFvIRI|KF.rS֏U?Ե]TJyg_Rv|IެھIO;vB^u!NMG Hʪg&sv3ds*H|ͦm/̿-A_!zzS8iUglr[-h]츂3C96wI4W-ʤ#9leod޿y3ό{h5]t< q>*ONqMG?z m$B^ |A7ݻ;uKQsu+Q~Xָ$ =$l3NQ_c(gn/oe:O@H$%g+:JӈN kzӇ'"gRO!.dz4pUr}}I`XMBv,E6_ڹ]hiHQ*]w//x=";zk+*g骄z=-@ 6u͘*9^%޽/ft4I[- ={WԮ̲Ub7ϬFrYVHcfH/ȶti'OX8dȨt 櫚+4]D|/#kw761mX+h VeEkQMd iWOalP9#u=3RB8٭m@(PGl!&`:y:ߥ:w~4 ?]LwS_r.k~1)囉¶(.e&J}VPN[" T4H;󂲨4T\2);usբ[tQ=\rnR8ff._eqD+8u=v 9JXeJs/Xm;*s64Fɨ>5_Fq  (Z/vәHIە'ؙtZ&>".lUVB(dCR3>R|U`i (&zcB&Vۤ%־hrnBqy?]2egQ d2ø؋2JgX*S#,!*OKKeK2t@ľ*ʙWqo7ҷsyҲ-x6FGu7Z N\'}WWv/DҿQ* к(cƏn$aNgѽ&V{R`y6yr:CqK'k6UjN V endstream endobj 546 0 obj << /Length1 2075 /Length2 16711 /Length3 0 /Length 17958 /Filter /FlateDecode >> stream xڌP\ր4N;@Ne# sDYA(io SPaa03123QP[#:9[B h!7r0TȺX,,\Vff;č,M Y{;3G<Mh,<<\DlN&Fv# GF#%BP[8213:3; -],@gWE#[[c[X:Kfon|l,Mv.v@'Gv<@h/c}8F_,v621u03YJ..#;ӿ l?܌,m? . )098Y:83:[#_a>YTh W}N@sdZٻy,LjՁI(#o9 :&L%PtdKу  pqrzS04q-Dd1~,>}0S{;?_1<ݿ[RT```>|7O?-U6wu(cgfWF=^fPg 2s0||^]_Q_V$jc_?z#[K[|̳n(l5kW+b#"vs/T_aciTwtgbnqU߼v& +'c>򱫦@Ghg`frrDLb$xL%.b0r$>2( %nfb0!6ȧ>i|%:#n>3/q|Lm>?v$/&Ǚ ?3?#ş Zx:Xa!~p#GGEԎ.@Sc?]? tz? ~7웸:9}=XE@niބ/ت&Jߝao*FkWm_%P-?jQsw&1k{6Oj/R]+$ӱ+oC6;Ss_734{sR*ZCS50"GGAps!dUV̶ː;_ &J>rl/҃Zn!:d tsNf(v%pcoZP; eN^I_F˨Kی%؄0/n\JRAU]V&. ߻+9u\Ø*#_=49~$AY{ev$*)ƒ^p_5$+j`-p¥ZY9,PslT23yi- w)~庿Wk$@*w;"M\;CqN~CU˖7.eR䧙L g1R0=& x)p)`hn(^ae$E(csb7M̯{ >GPl$MhQap`mPNiU%?A߂_dAj"O(ݖT#P&Zlj;KP#%NYhrqUX$BOLD @ȋg6*v_}+x*URd1e7QCim7G 8qgZ2WPXkk&>٠7&L"xF}~tY}sEMˣ`i'')+r8t!S]O^lcxk%B+Oe 8.Dr/&?44*PJX6?ڑ8Zt|q*c}ES,4aZ, KxB܂?Il ,r|h+G0뻄ägvdcv$9a UOBbb}a1'Ϙj"|6B-%5s3zRq+'Ch*sC^ݪ@ ONRm$IM9 P̃:zsҊ {܉rp=nl固K-^ű6/=ILڃ>bU3~V0WQ:\ȥىuͻ؃d&#zB~>k8t]LLTbatu; AS_" vNF.y*râ M_ӏ2 c\esSШR q/YqB۞c;ŒH0#9k}^TjVe=~-8^ŀMT> 3΁!Db DX r2ҏ<^<$;hILP/ t`~NC4||MiSᛲGӞz,0; TT Gh m.߾wnH9%cՔbhỪ@Σe݃UE쵈u|i3kQQ)Yo|q5ĘW=/U;^?mwF?PNUfū8{iqy $U]u87Ipٙ+xAd+Y-R=v !ܦXN1EUkK2+Ϛɏ!Q;vB0m=Thnqa(eC+c f໦hoP[OÁﯿXfQ y^}G$ ;~2ߛ7婮u܅;yZ zq8jLށ7*1[./yX:Zo *gw-LnV7 䓄Cܗ(N \5iNlPlғ̔wFpilL/G^ffe A gw!`JSOhTS##<¾9r))DXrn|NRc^@e#XᲐ!3rK 9COJ)++j#wa% IR@NCUm HՉxc ]X,^?ѥa]U04jL{\tn\dsC'*De|2sd_jpu29N<]QNCWq9=fيFͷwwt"ъӥi)k3LX"GWyP~= 71~dj\OAcnn#d\aA7!Ĝ98Mkg7|P0!6 ZAJJ/ȟ*$'6'K s|5xAqx[ۗLr?f%*S_𮱴pU-m< Uι%W+ምп=bWPIi~{Џza>2Y쳪R֙M#/= uŭ!9;^'dM4%) &*wשqWZ>ph!:JFLZUyP0&zڬ#ZX$"'փCT jSmfeMBe?CF{ rL[rɳKC jݒ4$d ܠ@űY$(Ŋy_跫xřE +"/1ukp[| 9^.o` -d-mzGrL re~ * >]0`J_PHOE$!lsHLNB-Vw9vbjQ BxU_}L?{-,e߳tE1, ht+jj'lY;k5uԵ]@Hrg$} NY3PEE}J79.~A_Wv.!m*7ڙcU"GֺˍN?Ix}<(.G!]z{SRm[,m ]TW`yx{`}ٕӵ!ݡ}7/yr\TuӺ;NؠpsrU'h@/FPˣ H %X)L[rK(e/ P+vXcEü}؇ArFdOp01. /T> H-ˡvמzf|HLkd4Ds.KFJ:I&-#<q 2f޹zA}*r[E@5Hi6 %'V BgP nɺ_F^>SSsQ2-MV`Zzyp$kp)+U6.K]e4:N-F*nu C0%Q⁷dEqki_kWㅤDT/V\|9|2jScV=0z!r 5Vg\x6T>FkeX2Drd~oɎuGaliUR4$m{>yoTvA VJ,ުw i%"f$g}͘ru 5gq |ir0dޮ*?zH:2 ̈́A Lts L H0ri#0 6$#bF;hQs rwf Js{f aaQ0ECw_uBA / IcKɳ5BT‡WLTXonw@e&fkR5hS%ڴ/&O=mw8\fF(L;z"-l7Qm0Lxנ]zQ횒ԧs>S\}ϣ9u][A K [ǿJ(ȫWY5#˼K󁇒A1SJ("*+' |Dǣ(B+"[Ccm;K~'?mH ;[,zED38Z'z =W܈&mVW`ꅖrcK$*vaQss9I mk{6>{)ZKڈl7" .19kDtop`P~U0 (FNP7iat,'Y<.M7WQ,67DHbDWdz o*f7W ׃k]Q8Wm{/rýk^j]u, 3~,UǼS0"ge?bpa?JNI\}y0/ JjaP񂸁򻬌Fa uxPIP_n[umZ1 ޗ4 ʉA)1hhk)*9wwҀV @s*\hc4ˏ/ueu{̗Ǿ]a_7)$IM,&`Q>}Y (֥ Xii4>e 7H?&Q]Y<Svܣ⏱8~;R]0!v2^NJY'Sd}=d<.Nwu7[< ݪ b(&x߇QCGRYCJڀfKуm5 Èmwē*&#!oEuٻ?Ž92|GAZdFS2&s5UͽT[[RXK<7BAB6ZrY-7pKt3qo_iX@n>%>Pj~Fw΋ۼ86Mz00&5`L&۲*8m0{ nâ~@)G"*׊꼝LFO7l L9'+Di.h3jؘMN`to}׼"ZF "vU%D@@H +{xql./%zrp[pf ۑ!Q=tD(͕.%%;OM?C@OfU-]d44CU=H_#w墿EpnQ!izgn*Q%!m~{좇=VSvϫa}2zY`/x}M(:2BTމ_`̉-9wzB.*9ϣ-ww/lD6CuwXF|4 L0Xִ˶uK OcgJbPvY 4H/ou0f3,ۑzhBⓒq0cNmD^v !``)t˱|dC/-:I,2[ȋqNn&NHtq vJ:d1F䂓(M}^]7>PeF8> [T)Y]`&`l2 ldH j_em23\x\)mvFڎ R51&UWAIN B]+'p=MʳDřS Y|MБȵ n%Su")x{7 l(Rhh Mµ~>xUYݽ. UR`oH*\M^Yv\vZYMhQnsʓ@h? 0U;A?E{ ȅl"2bKo]N4C#-+vp>KX%qwOL~ ڠ |!T:HpPf7] `U=SPA[at~1sП4x tMrw~(X>F?x谡EEt+o_/U^G,vXe1ݪ8f_▒HJae|Du|E@r!ϯÙP_/"i?˧y#D\eCDM9α 5O,R W8 {0!7yAvV(,x(qdZ;O/V!VȮ9:!Ce@iZQbSql#mCNOFNE m!7kꆨמ2%;w`V>OzD8XmRەϰWmmD7;֥ۑ]hӜ>._^+4lN>X1-rbu(g 11sVv4O)=,$Pi4:Dݬ,rCϽ43I: |g:h|,l[Gtz_7p祖dX>@dW81dpr7!TKAfY|h[SBRi$`LJ+=/OPտ R,$4Hdf !|ˈ= oU}1*9)mB)]vsKjBN*Fv .)W a3E1oc 'lW Ojw3c=ևu[6c8;R#1aeꧥ8 IToQɂNE֘JzǨz9:B M#`4m]pp`۞gtsx~H|l[PYEX8*!C2dLO!_ZZ 3Q$#UXf HO؅ۇ/(v~HC&/xe_{825r _31\A>Q'؋&l*J2izxM/պvF$kmTw7kϮ^V5_sV-:93- 7Tc8.-^}lvft=v E>-eI be.'M//p ̯;gIerxW3ek=3_fscOrvB6B#ݠw O-e'c3社F9hwPԑ{wt+9} N!Ւ]<A, YJdrwkb W ڑ `1xEV V(Aω+z?鏗:j)8Ɗ!6ۢ7jJ5ΠJfXG$lB(QHiiyZEe;N[)U"=? U;Sm7fnR1h\rG _s&t[|ٳ,͂!_G8%yBe,왻_?XxQ[qFޞݮ\5wA8yIh.W(sq^)Cb%Ãw ~gWuA{xB^GBc6,&0e(B axIG#MC7 fݓ1Vb.2(9kx̅ ow-gSY軒W܅,Wl]~rTvp3 F}a SܷS6vU49IBv=CLdfy͞vXWi8*p%=_e(<9^o(&b+iqZVC/[K gq1g1n(gWV9{y{FܧXbӱ9>m3)UɋͤBqjteDiNH).q*+ɫl50ᇪFA7 Ia[ MX9n!Y'rw!+dq$HM:}amNjpۥR̆]¯i~`$c{?hUH<@g?:B`Pz8n؈JP_KQ ؠ'M&.Yw7 '90?nú'O`rCX*ɮ6%Vu^xKX~>v֓z{#`OfG'ɒ1$썜[/[ _0OAtA4eQ `̒hMt=ɵ%wG83"8wl`팍ӌ2a5v7eirČUxW7jylP3'*_U>Gv28uP:'~3 -ps {P' p\zK|&zJJq)9 Bܡ"@4 JOߖ57ZUIpHJ(C*}Is1Œz%t"wms]K^Lj C)$!8_/)PGvP) -reqNtE !\~iت~. Y,ͣ3#V<:E<Ήڹ4@Ȅ3l]#6Բ@e_ޗ&Q7Icz~4$KnoXciNrŸUh7veAݣwm5D$i-%BeYß͘ǧp~ײ[k7^F`2'kYA+İ(#{"yi Kk7Mǵ SU '3u]U6J߷~<>`:49SLF 9{faG\mꇀ)G9^ oju,YQBEZIZL a hԒ&''T r;(%^&4:2GCd43-%[G-:%Q]t)ͬ:w>:k1Y]*Gȱ2U}S.XqȋutE {y1:KXJWx8~]siKh^-R2u's2᪴j{*ZQP`}$IǑꤶ}"$ZԷL  0fe컟'_;ϟ +ޣjɃ ~ kiZД&+s%j:tL OȖT9}"F yz܂y&f5VcL$MϟYF_v N01QF;6ޡFo#XF?݁k#"J= I3c>j=qkg_-+?oR׉lPOfEG;Ū0ۯsBc}ꍲ({ spTH\aK|zфxrnR+m)撺=է]Ԑu++4Є 4sz/ɵt[5~&vqgZ&[ 51qԝ%,ӕ.?TDUW\R&Jj&z4BmHIv =F1O$aU3 tI`5Qs={Cqa]LA'_a@lŽ[2jX*@0|Y|Τgjt?+T%; ans$ezboA~ɠ[4  .Xy׽Nrpؐ'r.HB]Nؕ,V n0$u"eqQAXJݑ-k)Aښ>sw-*K 3GR'k+|JC9])M~mW4}bGFePI}D]&ҽY?Q3B‰ƚ6%JAoP#B Mېܥ<\ k륰άk MqBјjdg[o =fJKirAy'wFS;c_Ul`zgkOa:?ɼ(r_Qu ,IK)-b5zor-sjk: W>ͤqR t\EnDB+UgtT^3i&Bp>?2 jtx'WmF&k9U>g1*L>$QDg׺Mb|5*Y[)ŋsNŸ)`=:xSVvhB+5ǃ>9MWk@RIG`kgg돔:6`3 kw( 9L՛$#E1*Kȋ;E4mMfY+J, ɠ-#1gx4Jxi3`#`YGPήLY"T,ICM"Т9:;0X}lD"%1\ݎI3:óvScQ4hf S.sR a֊)4 m}7# 5 k6x|G~3pջNǘP.xO ڶ_m`t7.@XK*!7n{~Gx([dО]px%dLZk`D>>b[^rS P0(a9q]%c\R/(OЈOW{&ذ=^ $|f 6FgLbШ g]Gbn፦6-BPz:O9,1+EXWLg 4)N&? =#ÿqQy_t[Jp0BFLd1K^῕5P_+޸T80*j4A&e endstream endobj 548 0 obj << /Length1 1697 /Length2 10027 /Length3 0 /Length 11122 /Filter /FlateDecode >> stream xڍP-  dp 6$@B%  =zj[ݫ{-&$ p vv.VvvNZZ-o;  !2w{I= +'dguH{ʬ(B+uvغ=`c# r[Cn 犖M%_)mܜ<==Y]Y.6O-@ rY~K;ƊB вЄZy%4JU'Oҟf_`O'C6::C5PUburcC~\`sgnP?+K ͕[#4,:: n(O|>wokzB|F`oVNl;(لagg /K[@89~5:A2@`k  lـ!(d6w{ ٟǏ' Bb65*P_㔔z|Yx,<v.;VU۱|z k2ZFWP>3[>q?/!;ud3I1y7_.υVY t3 ppsiʂ@Vj`7K?gfy j{9yx..(sxU+#`c@ݞCPߍ)6l*A6M?H9g[տs$_f/`z;>_J0mb6 s>o"_/_/_:`|I*q#@^ K9P]mXۯjW,c?b.uwd=Co.b$fbo6p9Mb -&pDn]9;; ̸ V65z^O32;f }=Eol%)M&Jc7s etz~l{َe-]Lx|ٍlRHy )1ie؎. ̭גo?QEYv,\S9 RiI mF.LiB© C|^L,<:GL@VEB7 0Z| ; API<%O,BpPj\CJzF&v?t9+\;Xf '{m6]o[MЫЧ@IZ ˣ6_ Gu",6,ڭ4m؎K_ujKq:Oƾ~!h{V׆S1>Bk;BXUJ ANEjH"~֋{]J;: XGW]04ڥ! Xz"$r,3J&ւmj,4AO.SSꏽf|Wvb+ԓiD$l$:a Y >EbpKI &BiٌXiU۲䜠vKAcXR!$TɈ&eqD.leĖ;zj12ׯ,ì1va )iAM#z ڈXwbX!x >RZؗ+mpBFC,PoIUF5aF }\P<$360ИtD^1|58|&$s3Ge]`dQΏ?4M2hԟJ(I;j G҂ "ҘJ6/,0?4vuxO>lz _h ջr?)i#7HP.9zE+ӏB G2H=UIçm/bcI%S50[I,fB7Oevu߈  s$lu**->5Hp5 蔈ʬ{'s;)#8IN7Oc15m[:m_bsz^ 8?߹^AeS| ۄ!1ol8 x ;q8edZgvUαVGvYD(/F /~ͦ~"ԅFkuy(Ȯ`+Ƙ:Sm֘;7KER}G#RNɵO(Ǯ0Q[f}K!Q*/mlm]E*$3=ֹeEڽ>rj&ʾǧ`+0]/ޞZ;(q* $xXREj`ΥON/0@ϲR…̫ʧ{zKOԊPR1dOňttn eٱNS0t^dtKQ0)Vx$|hʙuZO|n}sdFes;w|Z 46їE*C#Vdrߍ f) !DyƳ}c uOadGRD최 ֌ÈX;0봃\#cgHgwΙk/ mW&W 8,Yh$G*<)zt`e(! gZajJs#iyVy}i<2G' :_҇[h3! ՞C8<;Hݹi5Z3+] ̆ft5V" B`^Ixja(/c&zE2f{z7[glW0`Lzgs5#S)Dif(xvGkg4r9*6t;iå`+*0zǏE5>%ocR^[ulj   q<:K1r0ݜhբ9REp yhEcNМ \_ qR-Xv~o Rr8`=:[4ؿ 'δ;WRAF4Eqa띎^ܲYNn1~SI XDG[s$#F׃ڎK Rс_ʕb?j#垹#% +iw+8 ڶwH0h6 !l[Q=MV)E[c,(/zc!=K|z^ @0@ʻ%E" EBr;ޢ"1;A:[ү8E=Vj {꤁ŨE)K$]Ҥ^GfEEC\`3&®OGc.SsrMt_;]'k4u._5Z"{I"\)oTPE 0wnY>FAR ɜ*3Ǝ\QuQR3/ⲝVWvBq[mWJAgr~3>rkfE/?&5s˕+5}= Pᮞ@y|ǝRReː:2(X J рf6l.&|رhʧW2qk3ȶ8w.hvMeBeURD|g+ վZApF'V챀[f.Hك]7p="$$99v}{g#3lxd1O1~PK:`2 q' zT8v__uI3/-p-Y8w~E6ps|Q>Z ~DVIYf##2*tBAN J9y,`yqB~EL9ʨ [X޶u6j!˖mڄ,oR&Sv))Vwp)i$].`I_; iU!^G;A^EBG~gf}5;r%djI ܻa9c3v݉=.$}%HYXo5'LJάN `\[|H&+ !.x u%~vnȬ !xln8hs1NaFjMƅˋa9>)ęqcm)7rtH> .GB'STgH6`m܍N[Xa+|yLqNJZW ~Tppk|o4'HROp~\X*42s/' F0ˢRO;C7y*_-VFO^T fa.#ۑUW n{͙VvP?A jv_9Ŷ-njfåKQ#&rW&8LV#a4 wLNW@c1':?aU4%f%/QٽU' +o ML5y4!qmOB1rJ8XP2qldʹpijj27*& e[>'%9x|ܗ#5pZwx4pܭi/:K|Sob> 33Ǣf)캑"lIc^ur-N yzxȑ'x‘f$QS?،n1?O)bIGgLg_=:Ӧ+ˑmwbO6hG eubK Sw"/Yht)'sҸ WeV?6ne"F_OD8 _^g /Åix1*n"ќsE9n#PjA,|zlgw>K;Fd!5DÆꛩ`S="ˇhaNjq@_Q-&7NtA6goF|+Z"a蝯P͕L2u=_W*ф˥>l$ߔ\q65߼5㚌1j)0Dڤi)2sΥؙŵ~O}hVoQ-g #{T>ՙ(e8 ~ "Ҳ5\~cGk}g/g.6/]}cjGx78*9ZRykg\hA rz=erT꧃`3W}Nлb<:*:8-ҢGb6S,s5&iY !ibma4q*RJP BXeY%e5~i6\#~UL笈էh2P;ۮ_1+A |Ig^!R)h~f.7aLH6 s6h}+|b=[j%fRWW9EgG[`QvPal_aH/I niF. 2iL&]JkFy_2ns`m2_mWo?*krDE7l3:OTya() H͍P{,{=On1ycxoiuXI O}`p(M NmV7~m}؉)MlL6Ri*)H[L++!#~H \LQa4 ]3sV(j >.qQe^E|gGLXW] y&,+]lR([ٌ%JPnt+޴&WIgİvWQyڗIcr]LjИ`k)IwMU9j(@p=[PF)/|lHp!1v#n OqVk:~ zҜ F z:n5b(KS'ʍK+ə .ݭ,ށ^9,"ohU)#&4lg>q*c0 U^\Oﺔ73 iE)hL&}NC=7ucuF.)ţ%1g'ukEsטv9$߰) ne@֝_qPl`/yl32NV@-'XЦwGu͕XU*ZJV}AiKa5ՏsO׋)p"nyQW 1cJ\8j͝{/4;/9|O(<:OÐ.-(a::$}:xvȟܢTl@ZɆer.7NFel6UM,#+*6 buaѝJ(:,̍:-+_+3(^WK4:@'Qd]=i@U7*eFPU~- ܃\fDOJŜrL-nF+KvFa.In^hWRT*+ojt3Ѩ9_̣*VdU:[A19%< +bƠ8_a(#+Ex_3*&k[ݚJ Z DNibl,mshsv( gܙ])0*dt='p3>ϽZ^1dzFPـ3O]}KW]X|ڼ˒Q|Y߷6Xmêܰe/o^=-W0DžPn~S|M[;GXWp.XaY\()obyIQŗ$ˆpҗ/}#<|qOpG/S2DGINc qLfޡ\4D]UYj|+X'X3(3Sx7^33+K/p6D|9J^eb Z]^8K*K Bɻk&mUc (ޕO?w',L:V5ʞhl46%]03-5g.n :.Ye+yXJHtfsbqޭ|G$2srQLfظAz"^+唃 -a@X>x_+$.l̆*Yb?Iw$&V,Ҋ;ـoZû|zk6tWI6~$sFK1aoDY FZ3mA(:eA8^!z",K5͆uTY0/a"xsEdHox&|Q)*D:=4UۆNׁݑh/ ɠ{Ӹ7ݧC*ީ(~5[3f}Bi,mlha`/vZuYCMލn S T]S%Omd)۹uZGoLHz։{?lZ~dRvYr"3ՠt*Ax7+0[kuyWy|y{ endstream endobj 550 0 obj << /Length1 2707 /Length2 19240 /Length3 0 /Length 20800 /Filter /FlateDecode >> stream xڌP c 6Kpww5Hpw\܂wCgbOz_(HTL ,̼Qy55f33#33+<-rx =@cWLd(`qX8yYx<5tp[2@x QG/g+ KWPPXxx>:[]-vƶUS+tuueb`4satpxXZT.@gw/c;?)jV.Q:z; )t EJ1=XYuY}`ne (J1z24uq7v7561@BX` b?Sg+GWF+ۿ82Tfq{3Q;; _Y9MAub6>EVf0ssdRrrJcY]lijW5/GJ ~>s 9b:|T/gaYLV𿽃@`P<̠c0>hm~b&ya%)(q0Xl\NNz-U2'?Iۛ;xCTpg.YFPpM3@{9MAX?GM_^_f$fk??zc;+[,@ y~_SMYhffҮƠ V.V@3%+WS˿'my*9XuXr6;ԬU@FoDq{SV`l /V hG̀6tb0wp&DA&߈ $q~#$$#Vo`@~#P<O7Sq)Fxʿ(o~#woE7EF K 4?.VVVΦnv-Y9QZٚggK @+ˉoژ 51vW *3$@i8@MlA3oP$vv #1@4ͬ@Ѝ_)Y@wdK/hQ6}2s?Kg o _c& FZmh $2A%1'6o=t+3eZ?"8t F g-wY:OyA4Awj9ں-m7[ֲ%tp)"J-_4unf*.@`rt|yW?|lP̿_d\L _@P=fS? (T}9ӧs_*ݐaR2PP12(Fn0jy:LzitGV%_'tҹe=<lK9L[Mt 3"铸rG+dxȄdjf;$N'{ +,N> DB|3omI$TŌfZש*:,L,̋Fc?\Ckhc[M-2:v]+'h![ޠ1ϯ:WUbGw?iE ^e1ϑ@MJ1݄#,J>R%GYEkF_S1yRM1Cqs-sv 5iH{U>b=BGj,}gJU~˶3X\!j)e'1~㢒scZ7B([Gib.!l5.ugE%HF؍h1:P>ć}Am[%JBǵxΒHUKyvfSpK7S$9{Y;u]gF7f ZdDdoҮB EBC"xQIib}g/Oq+1Ě\PJ>TeesLo.:8zKA Wcq >#qTwƒ*>e@i ^@E0s'`lhZ ֞|vVn/\kdz,G4-[?=G*9%L?[w|]^4<`Ayy8d 0ɕˎj獝d_~w|U\fnqJouEHDMSP?Q ̢{i`#Y(siO80ԛvS pF_ 3+o90DZ]d'/slh8 ~Y?3L1H] Fyfj>!XX*)ڊA/sAC}h3)4C͡Eޏ]EyO3NxEdͶ[;ϪS$SP#dϝ8ls*+FOsIFM 8b9&sX zp#JNo#ƴwd\ꧦG0`T-a (3S,љ%߇*_aV4ܠxVQعТ$Qg^77z"Iv }Lu^ E? ot=n =SMHRFa{B.γq"J,Dm0VbxI :!s^͛I, U^H?%*K$WsF1| EƋc2(a`)2E(B ΩˠF{N3 fD%lLRIl|_*p: x%hIM9$bj.59E0 R+&9'9Vs&&/.: ATC+?&2]ձIfƤX4fQ~ICOu(mjV~My9LiO&xk";=5&9}B] ~hڔ5|֓Xk 3Dw k-uە [m>"8R띙  mZҤ="BZ3<*sz |l40r^Ct9 @B>=FË[m3@ DbQ=V5{wM~bDSW};;.;MA]FBF2$G* w21z"ѩFۿJۓ~ qT9kӡ%6{Tں%@"ߌN>#9WkH3R*r*à'G(d'W3,Qpo ɏ}9@1kY%:x䮾7U޴pcE;./2DjOIRXe-3>/u (O9o^N] Je<RFTֶq|ƌ6tJo(z^BBd_3~ITT#4RNfsuF~aƥ\~A#-!=gL̕xwiK/h329lA A , ^d6sӖ\Ưc.8ke?]韘 p,Hl=߮c 3]GMhl[OxGn2'Xm(ƅ5o`FD$2#uwɚRهk Ywyހ \wy44iWds003lts 8:Ef)m8]Y5ֺYߴ[dKP{恩 À܆OB!?lI ̿,7LUZ،CscB.+09BLZA=Q3l;s.h"kCtFE)bE(FhnY;]ap#2^OwtW _dt'8fIϪ;{,X^%.&t9 ]VR=샫>-:H/j [-YDn4Z&sՖQ)p{ȇSЉGGCU\o'xbMk#5!M c/.IM\؏eEg&,K:OU[r^׫RAZW+$6񲉊)c4 |3N|zl۷w\[̾;EX`br\FzWr78EYJ˥풊ܙ.5W>M0ͦe<ҮWMu]@K`τɄfR7s@8x/x/8cwA\!+HJ1<1u?*#N7 2\Gys }yē[0g &g7Dv]W5N4]P?O+x;,c6;;4N1"tִQLY%-,I" %1O) S=eL;0_k%hu?Q#?/FS?%i[\ҡZUx&BFa#BtT*#*N07MVGd9S:X]ř4B!J4,\(g2&6D&7<;n+bz1=A^RVG11?CeZ4Hzh4{s;|GgS8[a_}?,LW<ˁ"!0ͪ0 ꚫى掾idE(Q)+:&8zsڞ̷4tbLj`(?778AZÉZ*LxHH&w9>{n◽3do0Mq׺aEDiRk>EqtX_EunpjG;>5JGz)Ye}Բ ;KWnU `c@dUZ&jOrن'kmCV/5qEuz:uJm(\ĸpu$yA[Ñ IOQF=TE)ĮX秶y%ϙ8ׁ0Xr&HӇVy.ȑky.Mӯ0Nv ka)s*. ~P>-f{-'l;mշV!d.3Ȳ؟9׿[EZ#S(8(~wmdW]<dJqݟֲ0U#Zmg~UԇR跆Xʲt [hz6S5IF߈-ƪ+NOPK#TSL˧Լߌ$Iˢ+>[K2~mVG՘QR&;ǹ1O`<,|jc BTjo,d.krkHI;1(*.J~NmWQl71+lj"r[1!ev-(%u݌R(βEK7ojzeq6Gި{X׸AmLZt-Y^q^Χ}LdZhI|3ۻѐ<^oEbVmXrU4ԐK t]E=Fmo|=#p}.H>31ZNM7P{FhSߦ>_xcLzmwLj$5E\E|}#pQVnɚU ͈I֠/ @3C<5[% /1{kaKcj?.~DK,Ltm*WFvJڷM{0L*)׈X8x39 E䩆<} \cԫcpՠrX#7kk3k711~$PR+5L}+H腞ZGO;0Vc@ͲǛNv v0rÛ1]@V?&% 6/U?Q?ǖBYNpu5րq#-([B:;/$w& y,s9b=oq|T˧rÈ=N^[#"E"eأ>Mt,~F2 RGJa,fEnU AbsOhSkT.w{XW g< r-w;8G`)[ز?!EzK` q쒞I@^z$n "u hq=~=Di&.xd ύSVfWz?: LuSh 't(فs3cc;^wˌ>ױ(>2 *- MF-%tN=M8=# /K*OP%J%UDbM[[-(vdA"9vUleȐ+P3}IXAuR33^C}A$gUcRJ9]5E -nֱ%GFf]p0mJvr*BrÕ]@% Ӷ{S(c4gaE$m_x칐d WYͯiO-m+O>+ {$N5𷾻N~499kc er$K/cǧx[] wڂ!RP9J= w0$>kwm@Fk8*eiMbvuMaRlȄKNS6/.Q o?[SQ3KO|"]5' 7eR?}l wLBpdMdRS'@#kE'$/K17!3{J:NoV罓ڴUR'sIQ]9G,Wf$:导OfFRO%׀0PsGغB~OSu)G F @'8EIKvP.ۦ6ﹷ9[|uQ=^[K; F.BwfGYuݫE3<]V6g܇vg݊qm꿾oJEjQ}814H iIWyZC-С9:z;02Ȉu+ }?me[¿bChBa6λ$F0u&:j_l+|촂pJMnq! %bQ3:呷c~SsmbڤophϩUqb2+Jň#3+f2W>uMhBmS^^PH\8Q`žzO+30)-_B&a?]9kBIV5Rzab &{ZGr)EUDJ=zOLQӓxw1+^!7_ft+kcI6UD ҿec]BD*xޜn̚׾ lҡ@_TQ7n/ȉ:~:_ގitk+7J Ո2J'\8h;$1;fjG͢s1yNsm7DfrÞ`H7*Q3f(gYigQ0S%4'QtPqXGOEGdlzbsRQOJ4V-[ˉtxy p%qKlYOk4Sk6LsuۛqOvKRۏJ(3A9V ZcA G6#s \?וxd- 2 ~77O=Lܜ6h9k387 1MKwc%<, j01O|%CfN+bJ] Ue4DMd3XY>,=tt蔇RRIctziINL 搅nz~L}nHJ=Nn9G!≖L kg%.︓ʷk{^-pSjj ~+68o\g-7?8K0 h T5\Jt);Ӄ `R rys̓E|\:4MtPi:՛'+>02&_IM$i(jhO,e)x1]?Cv,B瓟{D`_oHK2M6hS%}Lr&0^{usFw:HPQB !?ȫ]CS~@[8Kx/1K]2A@{6}3*܌ŜN*`*zwrRarna(mr;yyG&|unrNىլx"k^t^0Ŝ*<}nKfP)NA1y|pkl?{|Xt{&<9 z )j|X"rVYD%]WI1 GZj[0cX6a#yKhmsm7t3I)ȯ+,\_|ݲ8Cyo*s*0' |v R.Y){fnE K6FCLۃjB8j *6ɸ%2~nYj{5-ZH9"^+캌KnLW/ \i2}ieUrI{?lsA̮`wNP^7h8W4]7cPQrɏdՇ+ A:#҉ҀMVZ׊o:7/w ^D>o&/vwmhcRЗBL;5Rv`)bdX̅q;4qFRV] i=KJR?zDE9 I?]PeNΪ9fiȒBz(ygţFf77k!"aO y0-{r89ف"E$2Bm6I! ֊xګ'"̳'#*3ZSD)r dj;[|Rco(L+h{ M;/&}롐c:ʋ)JoWxNuӺވ$H#k=tzE4ՔE[$յ/HʂzGZ :BQgl͠L$|%W1ޣJZԹd(7 V3]i#x[i'i<kĽ,Q-P kUiDI9ooY['تt/ҭ*~(B~X43=کbQJ0&2PA7^cL!apinV4TĢ^w}<ɱOΰEe]5ťlnyf ta?8;qjɽĊaV#XZ:Ϳk/U`"Ϋ&qd#P\6BOHYI#^W*DzȩX -rߩh-.763RZ0FҊqh &@7%FTā`O)9rkc#V O{E]ѹH[?̑{%"p$S>At)m}Z.KĊj5UP]ؔIiUJ.g5rF`,gRGa 3OoB)|9<ܨ&P-T6zNc Ch6ZOgh qJkTB~ܛ<@SzOe)\+Z14YVD[Hv͚Vv|1E,P5ͺ_ذVk@z.ҶYr լlt% _N7p7/߫2z& WŜ6ߕ?p1vyo3'JYi@e"W-[ĒH5 兾B$)-jBŪfʿm^R~0nZld>#, ;hDe1WCލa܊M5Ic`Bqq?ЪdŹY=NVpv3٦'M@z Og½| ZuﱐSm{39A@.k0-I`3& \^Vwp˗.eүTL̏d$S1?Wu&eyzmNB ;U|L*ެTSO0 B;E=X:ZCB:u3*w7)1݋IHՌ`/(\F|}xx^O2d0յIv F-,pCqpgDƝ6.! +!$JPŞZ,L{3ڹݕ( Gt__ypcUՒ b} a.rZv%GN]Bd(Ys<H Օj#~3? )0Lֻ*} 㤹Q SiG#J (vqljǯY y[_+nLʵ]i#{i(j$Oo%O e.sK~i,U9Juyzx=Lfd6[G uq% no.ƍeiI-хY -G^״XGIBC>H>ojd;gN5(")~6.t(Mf2'zWxs~tZ`]>Ruwޟ͐i@ Ix(TDiONv|m L7xSv ϼe@>Q +|_D<_ Ja X )=(1~,"+I}jUSa# 2,Zh~Ww;zx\ǧo7n"|^O+gngew*]hkp5yD$@D#eR8HlB2~[v鏐f!ݦhB"8+o,Ck}eUEDtggΕ`[;8>TQ*{mob^\b8Nqt1kEŝ R/xNܱet HAK\(9jm4(;|CAS~,Mۈ,*q5ً=ɻx qPGmug>^/Xn]ߠZx"^qjϳN\ݷ-ӓS*Z :zZGuXVJF9&F{ag')s~X ip$ϗf>֭"맕5Krؽ{Ȭ  KM ENk4/t**>U -۔3j/W#AyEJʑ}{5M…,DuB5t9%~dsVC!e44&.lj=eIkdIdU|N.5͡'ŌO X7v'KUOln)`ڈgYgn贋6OaRu"l!Ý?lGOGA$g*:>ΆaC6X8ӟ~Z 8Bf|a٬䋜:VtSt`-'`[G"aD}J6p-IɥџzC بX:Jp)6<ͭy`w;!ui!~Z:S.׹[;ߓ(pr3 Dp{ $9mWbe2#g"M \vz.y R2-&.W 2g=ygl`O3ȼ p{v$m'W :ѵĹ̉5PO+dM{Dnt|` !(T6E%́EfP 9ͧo"D} T}C9W, }jF=yT? pɻf{|H eP \JzLr*LL%ȊZ`T 5>pPFRia~lZoA`E߳QKk:HWW@w&bT$oFzCkKA8to$G}=U2,z?͕_(hϳ8LKK=Mz*"{C\)8=b)\&o-^]q4Xfx34;6ςZ`5|̆Hvկ=qоlM'"=ʏt~ ˨!;Pz?l*LhjXnU]W&fҪ!ʧ}=_I{҈18Y'UwdY'UDHz@v0`QYnT̨IAB` %#k]F)m-(8ߠ ˔9g(^`|(\2K)c-)!dPlսoBDxŜYP1!I}Uit?NӃ./}ya h|QN8N3 G҉ yKZ@E,AE>Ʋ56BcA0443uuPK`SR[fQ.*jvt[YI#AVyD i}^ɼYU8A5"Ոh N <*Սps_5@XB@ţs6?:y[N#uXc4 _owz6OQ=w}Z2/.@S})/O'~_H|ۻ6SS*E GJtbNLVym Z.&FH;HJ-@V&#SBDDS$C}W"$t^M˳ڗҤڃ=ר" $8Њ]Q菻5208: >PKz_hjVsSJj/3I* 1]dZ'czb|(Q*L|plmHNzj(>հg)ڟH9~]U v. jDZ06?]q9ƦT݌d:[MσbQq=DZ 1~Ze3%XFEk(#C@tkzVl_8ڇmo(yM]QsWv7C"t(?k R &ᬠB55#xe5HzuF,ELX ͐03UW{_Vۯ3q3{ c6V-P?|VzۅX2JZ܏f8TڅіW?COξ>W2oC䑐Ov6$7eG&t=29/˱tj )Jj^><<=?Bߪ_i $1eca)dCĦ:mʱ'ҤLvu`|nGrc"jX]^R=-۬T2{u |x{ r~wb QKn+Z=þ=b_h3.y4u\E+YpX*ux-9Zq&} |xR/ǭ`kcWJ^o)YeȉUۨJQfߢrj)6щ2ppyyCU3gEN)ľ\9VYtJiS49#asqT׎Ni~f!fDapF\ÖN6 }sG|mq^Z XڤEJ:EёoI sQioKH@ڻȆ¢ڸ{"47OWBe&jYGH.Ɔ^:j4ֿF/-Bi2>~R"͘ԣzy ścgzӥyTP?83dj-v#۳hHQAFvSlNgql`Vq7'ez+ıh:3q dm3UCiwu58=8ۄ z[kSMu8 ߣS2kVR?e<=pj5Z=*M}h$LATX:˷YZ/>x3a;/n4Y2_:8cMϧIR>I,y>K|P_̃yڎAImao:}] p1FfD~e@ d#Pԉɢ} RT q1BE)a6jzxC>BW:Q'> ĺbDip4&ůՉ(g&lhqTd^xÒ,&6|z|$ 4ú2dC`Yaiy[]:zwtb(LFzvaYt,~YvDSMѻC#*"}$jc:?^岜|Agp@[Q(TMV;o8TJ2b¹cY<[@0VA.i endstream endobj 552 0 obj << /Length1 725 /Length2 16161 /Length3 0 /Length 16663 /Filter /FlateDecode >> stream xlc.]-\ze۶m۶mۮe۶˶97g2XcȘ3V&)#-#@YLE@ CF&djbio'bbP75(:L 0da{O'Ks 1տ5CK[K'Mٕɕ$eSS) ,))'Sڙ:\l,2ƦvΦT3{'09?̜m*br*Qaza @Ft;gM]\_l W2_N`&.#SsK;&igf`\r&fDښ(m\]L&NvqdB m-m<O?dڙCLb& .jF?pϩxʿףQ"[N&k[??XW5tqh3D=iXlFfVF35vur2s71ƪ1wUzkXh|8**#L6尅5΃ N;\ɇbxSUR*s; z7`jضr`.A ,yyc *:v֗ĩt)P~Lhj-Bn7@ nɰ-*µ 5%0Evwݪㆷ!2Wt G!oywe syTwyY|#^fu(\f)twEa`l6W\d'9&Q+-O1ۣo΋>ym )e@l]ځmڝAK%U2=1['",ݚκpv8R [2g5 y &\5_Ү#K\TEzW<2ҷJ5< UxKʠzS!O,>8c;Oz^W/MrBFN*A81u_oݭ2̽췸ڪDP0 !e 3-GK^eGqsGx^䀍^R\D K$}u󾃬?FDsuVw(BVŏbqz6+?1w~*eM^n@wתJ.ޖD:cqtzgz -U<8#)-{íAi\y-!wY}ɖX7nkK Fvg(KI N94ġBFhvvyRC8EWW2?c}aagQxb]c~E990RFD4>:+=(s qwtUm[<8"\cX`FyCrPܪsmgSiTB'vk?q';-4^ܑ&l dr1CwDwPڋ.hutJ9Ro,eE Em\9͕Z%W OIo=2=Qg9'>cn G `1L7~&96zv3CCHl ȊFg-N"}РQDU*eԢB~Jmp!%+NIiAnWO%iwI0[9^<91N/ʏ,[<,gScjEj=Z9]= Ͳcsg呇Vz 9ۋoضUK(j0p0%$9uyV |ė֙2P)M:bswmc=N̩@^t{#2FF,8$Y;(>.A>I#ūN9_L}T(qGMhѧYu۷k^م|:u,RNoXXgQdt8|cAt${ A]c -(*n&@rwaP[O+o2\7:^uaBߘR2ͭt ܪ 5ߚ#S?j7L$IK3;SAsaɃ!fES%p3iid6aKu0U˙Yg*.MR?g&O'2sʻ!A]icԸ!Ʊ${r:\i_@torڏ&cf"쑫~5']>oF(G #C+_o&װ-9n ]LͫJ^]:$4{+]^$ +ug!guCK6I3(hցAzk~jp{G*TvJ@olR'תyN&x41q@L8 4\ڠ}C$`agY$ p{lr>֫-ҩbPL;&,^Up$cu K0JMȓig4ÚoR W?hY/[Ь&UOxOkh!=P7GeûQt.>ԕgd!P\ -@?' OP_v@HH:eY,P+{P?aM|}P+jo e[ BW3f!83Ecs^ʊ,RMr?%ˠiQw'X7zwMStBufNH6G[.(fVAng*~afɦ !ƨ;EuKoUH BCp,eZoy DODeAcCCf&T= @L>`';ͩ^7n45߹&.gt@[O ق&(DSDIP*:LB}eJܕdƯ*Hehq՚[pPe(=hejP'/ [XR@0'd}>,-BΉ{p3_tc.L[=ڣx!q :U >mx&܂EC)tk2U[-zaZ(k2nT 4^w%3K3̉{4!kjJ"nۦp2qo`k/?zH.T"*=2c4q&x2SOCb^Bq$t&ʃAZ̻N_,V/ty4~>2L+/{sRJ&/MK%/۳GBfKq)*XϪkGK8][LY/W~M>T^1gޟ!ø s$Ï22g"v|˔H 瘡܂YB$\ZXAs× pec(D g"Rmg۵J3 8+{KԒ~ O^FǓ::%*{bJw܂!.)O2~k{14f܋qy\'Zj*N:jnNelZ&VdC)tRޚh{fNLjܷ/B&a68={UXY q@F\ys\qa]sޞWihvP?9r@8K#=s?U3a3uA4<+dډB>'c8XTOPŀ14"c캱o kG@,K/t[*, W b͏KkvL-%DHqRe[]&sQr> thO&)U޸Fnsm4#GT.Ljkܑ/w%&"]#:F~$ o1 Uٓ_'`- AJl}~V|x.8슴vh/@Lq{E\V|HA[tsMf%0e65VxW P ^]g3!3źt r;NNjNFV[`Q Z,o1n0b>a?PtRձ%H坫}] ϫH.(9&o@K Sj<_$q_g!sI8nⅣRcf2+DT @*O"ѿFo!p6ST^”J:Ϙ4M88 ~M9|<1A F'h&r\S#K #޸jz^cY9ҝ,|=OB^0T!eq_"S4]ίSNdk8 !EBth㯎 ۪?0Gד-1t`,x្d;<$?65l\k<ۂ.c,L¿_?˱eӼSk/Rzs@Ҥ*H{u^2Е=m\Noµ--$R}ǒYxNHdRrlЃ]uaе!8&MQ,[ߜ3/}3)M65H"RvE$71IΟ6;7u][H} z!Mփ;H]_WQ@+OrjPU 1Re\Èe]qTдϟ*8WkaoM|DsDE8,{SPq=+:ÅmĚ~ö'ttMh,@_~ud[p *Ga3wP887;S޿FR`> LF헣正e!=.e_ yVRdxoqV}7P4P^vmt!ƥsMQL.6rYb[9^=xǪmeAqJP@CcXI`VqMv1΁;KZ52a$U[9G׆qN`F^䎥Th?:;n<9Ļ a& j$!d2jԇaZ,G)EL c kpIb(&{2":$<Ņ/ `r&_Q-l|tu{hf۪=.|pԶ*|U.# 0u臜bI>9G@'2;xˢd2z|*QabSUgM^Ò{Tp]1@AުiuXpٟ'?M-lwK!+gB1?LcJ,hƙ+B#^^.Iv]LO֟|Wa]}_H 7㖲5܏XV^P^ C{xt'ܳYb] m-Zrn7c]{Dj`O/X/~[-m'.s Gl]z(SriЮA̚Ź21\,fg~ⶤxb~6N*PY0'uU%|O QpϘ`=3h'Gj9ރ#6&H^Rݘ]t> æb`6  'nYL^55ӈQ:]ҍ֢L=r2,mf\ҷOړ,Ncyb"CHnpԛpqnaoUrsK+,-R Z-gohG=Bv!-ߔ/FZ>yo:ird,mO]Q&ri?1I bRI\Iłx5Ʒ)n.6j}%&4s6Bf'~UoCyLtR9lՠQ 12^˸,߈g SbJcv/)w 7pmA÷f&A.Ye#.'0&MBа,ƑkIne_Bˠy%W^q7 |L%*{meu RERxIfLsû块e[VxޗTOtk RtuY ATBj18O^S"9L__[)jYbM}V˹`W}X-f{aϺ\jͶbْnjϬTӚ|6o|cO%x!|ǹR$[tH*_~@e*"`;I KT>B`5IwlRz7dRDM8ږ17]fA!AĄ#NEH C#F/f`t ^>?ɓ\N"v x."r]U6vG;ԘmbaMY0(Nks9iE;^I(y)[ % q줦 e\yT]{xҊz]ن=_yB~܄e%Wj#$;"ߋs-jӽ@lLbl挵8h e?{_I |s^x/4rf;vEO_|_P]MH'3ZT@0K3';KyBNWtwC<;HXih/A)yc: gBT_&/#jxJMEw/F(h Rf#yYIrZvV^*+PivLǣIx y= ,r[Co3M#&F-}T*KM^45QjRЌE<;O'r[FpO{؄qfIHPDV&ErwQ<s#3cBuz9=s-7D~Q!V%m%s=N]4h52zxOĔ)S jK_8rFqZ_t[-%F݉dy˝>1 лUƷav$zjoĺn$"1h}95 #R]<32"%c#׵P~>4+k^-WY(gjNB%^oZ+?'鳯AB@t`cz.4;,>TT=x|;nl g$lY/1e{=xr_İ%9<}&%{lre1<7i4ʎUďs]Y.6\zD8̄ yn:'!͖EGѻX5:El.'KJ1j"Kc.a[uMk,G Yb^b7Gm8Ub f 9Ԏ|; w<~$ [V%ȑ~hnQ.A $yݱjeMkM?/xۻH~8кH,V808~>:A]R)78WNWBh4r7X }AM?:Ug-3vb@zv5XDPT'|K{kZIlGr&v1K⅞%!pVq3(xT[gu~G! <̨ys6uF2$ ȗk!3fpjUE_vTPԊ>~AW> ā;돉c[ǹr>1%lc:k dN@B8NpT@eq'x%sfw-G#P'q!ZfA  :d9w)K_s!-++,2{s3 Ԇ8lm=+}B>{ZoV`DKA#L9&%[V/5muC@-&]%%bgc1Yfc?ي+,)3(e7}.ʳqQN{kr}j.6GլҏGݟuDŽr!'S ٯqx,q͂=)ioyA<اxۂC]aU+˖}HJ&Ø\4u_w߿\v0uiwZ0zm85u\l2mَiđ58ȩ9R{ySTm+Z^9Ow򴥉2f+һb]obͦ>%] 2R5X3%z󙮴0)^\M]@S3=,Cro3tá٘ߐA3t<ȁh")gxB0~Or:,R*bD{srF͵ڍ&[I ,P\HWե֝]x/G} Zm|j r"'rQbⲄTA̜hq1OeYr^5Vط#Gd.tk׸tw">,Z,9'#d, cddGVOYJ˅Ey٣ptK 5m3}C-#Mi)EK³{ L,PӶI =D- ``Xx6>!LF]YQ23<`l ga:e`}3+o"}/FtR6vZ 8WGY:S6-07,%Ke2au?,V؞:i\K{Np&awN}sG$][8*8#yif\ji>WN/_g?ҁ3<aio?XMİDrc)@ zl}Ob؎ [؂SцͷN)=%h$]m=a,M]DK*E:! [yMKԸFd$F\ 1 0aYu6߁"W+zs &ۃUᴍ&5zٯKcuq+AuͩdDJ#A<:6'ZW 8705gnHN>4x[ yN-_d Gk&Q.|[K$l${"*5!qSNKOeKk׭1>cll!2 d398)-e-9x[Yz5(@_ɜL} 7Q`syl-wJw 6"/hGA/@Òάo=4Wt c?~;}ت뤍=3EAlq%~ ˡ2hA:S=$9d\`>\IUf}X(ŵA13eA0%Kcu5]Q}\{ث6ș1 WkXKjm__ޡ$fkD?m 7e. >`.}U8Fai!apww8h’ާK sRyXlu%fr~!.U-qIr] ro񻮊 #MX,1^  ʺg45WcFQ-JXܐ7z Fᚢ ƁzlV=x҄X/[!Skrw~N]8UDCcg\kr"z)[Ml{M]%iTxFL@r괛j5 W֫{y c[=g#m %;ۥWsF-T(t\Ae/A<s$QO IGQQ'H+Ri8aM]>):wvVE#GKڎ&&dH@V{"qù@Cw ;N"1= Dm֮{kavzY ~JDlCiK* ?ـ" }%Yto=$ ^o]7U9|2oZƒ >˚_X))ˠ h0$P}:/7w-!i/IbTV!)?@DLlrنb@G<CSU v(FbQ tmPGE^'?/fރy+?^+Q*zw]4h-~t+9ݮ[ zpn3j"5Y(S,kvmu9#X ä9À \#HYd5HDbԿԣhL`y"*iH34e)<Δ Zn(}?E;7_U{w]>[-Μ~c~)Lz>3> 6?/P}pMv\ hu,'%Be_$nJ' 'mer 5:FH@fOIhYHy)lM\-$LCi0:=s`+4ӈCz%v΀oJLMn:rpkP,}~͸eeWPv5c{D&[7硼fs刀~q~c}}*y-7-jv8⢜LyOvUKF+h>wyShQPeP}m?ҟ\AIAv[B$=#Cfׅ\gH{=:&Fӄ?X[_L8RU."`kF#'Da&[|U 4ץkdM}AM 4+"%[j;c;5 jQXlS(nfwZցgw aYL6ZU̢Upܱ/Ęc}b&Dqy{ 粖?m7?ඹe^ҿ9D(.j竼T9o6-,}H2SL((eMU+qQ6TGp4CPEp MA!YAEW#:PMg ] :OCnV:W=L ~9DnSt4hVU/& pE?˝i4#[K j=4> stream x!X2#T&E! 5"@ )qLKBbH!`03D0> 3$܅u auF $=ZJ{=,n4PgB ivZ!f27 JWHamASt7I59'ATg;5ε#%̲NhtE,@/XP }3D8Ўp `` ;BÕs(E<ܑ(IL Эz)q @g)4'o ):hU;c{BpY? r]bX` б lpr&Fxp!0ةL(d `/YW`BcXK)UiF]k.R?{'c @T8q)O;t~)P1"{ha!*+C+PmVN~2^S">ykfK%Gn Af0l'`܊g PINxЬ4zބʼBY-XL z`c2F@m2e-G[3i\/hgX T{+xYX\yAI7l>::a&hѦ-K t:WaGw Gdk@Ì[ai?TwDһ@ж}O[Gu ht:گqBp ,=l nf y[ ̋Zpiv [CbXi zz};,o@bUaO-X5EOln%OAR#&%p~ObcF#i4yfG$6 &-1ᴟBj`W6$w!ړ\b6]r3DbIN⮰A\ȎRy U)GHEa$B C{AhR h X&RVL>&aL 0ZhR`hԘe:XSG5b^i>CerAF'& ;ѯȻBBNXݱ4?bB-1j#|X_20*-%;FJX (sy>RCZ( öԬ-Gu*ҙ٣3uY2*)6Y$Ssַ%(OI4OOe<G.<@J8GLbp+"Ir 3qhCc4mն"qK;a  ֤0#r.h@; 0 ֔I-7(,6peMmI',6 ]q!)I12 Agb)~@)p܎V'-i5&x V* !_R$U, 1~k )@r6f8.H$ Xy>{EMېUKTg׆?u_%|R^k1ozډZw`N܈KB/oJ>ِ7udKD@b' D %bE@3Sx;XmYJy"<˰@ɮ`!oG6mGɧDƂk O F)71 KmZCڈ3iV #\A<(ȰQpʳNic|R`mI#I'H! 6]2MJ%GPg*ʻK(k5-' 4uGճ-'5Ƀ02^c8dt>gI^|bR^N}dSz8ZpI 1IuT^x'z6j<RQWA5nzE_B3"6!mĘ8H\+>5w&ChE  U/2l^z7_Cf .42vy_ H93@HQOͩw_mi=(rKмkC'͚K(~l5oeF/K,v1Sawÿ^=WL3ӯ٧g g) ,/euu H=x`1WqEy;` ߪ!_(?c>/Q^rz7˯M>ɧm>"̿ȫ߫&YdW(_ali!i sR2IIΫzVigggóBD6<+;x[8ker1O'leߗ\.'-cA嬚Xl Yӷ=md٫CAE-J:(X>CCp]q'>lyӫ=$5p\"jk)J̞φ帼\<ᬜys5Yt9.*Xeuov^ƣj~RԸ28AyҾ>a\WC]ᢜ oGl!n*x8݁VǾ$<Ŋ{S1ܷ6c[9Wov_]ދ=5oC/[}vM!wS,?o\7p2B{=SiǠUq5b6Q>Y9ieyy3B)'p_/uߓ 7;)rW';<#n(Gc/ۼ(T[Ņo_;=6ЈoE':ɏ+\DbҖVAd;Yo@S|&b%l =q>ebxTbΖf6Evǀ 2.2I[VĸϷNT|d!b:+7?~u5j>~ˇ8u8mO޾ i'jL⻙* Ƨ\oso?>:!qӛׄ4=zxE/q [9ߣW{LM<5K?.+EM yʵlyHgJ/$,kEEuQ.5ls]V 4e޲gR$)C;iRaWG>\rcOT T0St%HV.hs7ќG&}Aۗ$eݢĄK4IαԛM5kٿ)#)x"*:}}x_{h%` ^z43=ӊ Ej$ymքW@`uy \ )ϫBeܝ/ %yqIKd# |hN~8/Ss*D|K^u됒6!oAKެp/{ۓ_=M.u`M?^@hK>ԃޞz`C]Kdks.uw!EB9\R_E%O溴MgRiѺÃ7qu*uɯ:;rvA~$SH_l@fgS_oA}x_=ߧ?~+֧[웄#-FS;jfoW#$߭Ws(-F ; ݚCެ:jWSV,O &ʼn`) 9;,vz9~[ iDu9%^&Τ{j??KMmh+h#Bhv_]Lk_m# w/ KJ(\"2.ț5-PΣeuF4FWL7Sc"&q!w>:~,8hftov:_᪗¥6) pz=vjLfStˈl@d[uF9lS<~ 3wf+kzM*ud]GR5ru\ـFhH5RujCƹ5h"kjM6RFBf u57m艖YàimLLjͮimglL#a6Lmֈ[7jԈ׭F7Ta-nU#H^吆M[úej6M2XaMLu5:=/NLst1.ʁ ?8pZ^`pV^\O ]Űϱ{9l4.w3917Hd1!#d_O`UauS-:=箈ir{{;*[wŌ/ۋVS|q ov%?&uء|pT.teW0E#e%t;gnJ4L;7+I9x g e4- ؞S b,5,} [PM$pFHtQGlP5(dZ,Yy~̜\/? ճYv,58.@_xdzSۓ}(R; endstream endobj 583 0 obj << /Author(Achim Zeileis, Christian Kleiber, Simon Jackman)/Title(Regression Models for Count Data in R)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.12)/Keywords(GLM, Poisson model, negative binomial model, hurdle model, zero-inflated model) /CreationDate (D:20120612175459-07'00') /ModDate (D:20120612175459-07'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.3-1.40.12 (TeX Live 2011) kpathsea version 6.0.1) >> endobj 560 0 obj << /Type /ObjStm /N 23 /First 202 /Length 1278 /Filter /FlateDecode >> stream xڝXMs6WX>d2xú` E$ H"$۹b HʄP"#FDÓE#x (QHCx)ppH 8&\(/ ᒇ(ᑂ! 'R #Mgngid'>^ ( ڤժAc`:.pk]>D"Q3fv b`ȋFAiYݼOzB<ͺ(,#&0CWVFYYUA36rST[\wjD^?4аrWeCO59tkr`+% ωx[Pͦ~ S`[6r&']u*MVOFe{3,y4N`ld6Cx,GfL%Ia*.'*YҨۚ8\(~Kƍbh`RwvtM SZJEX":S?k:BL EC,{^4 a>8L! /G0H< % fj`9;Vx4,SCɒ!jJu' 9)P"ҍ*  P3!y`Ic@>&?<5"g t;fۄ=Jέcjm;9,6`qpKQ,(96jmi+V'فGi5;r{tVJ_^%}\jj7i/1M\ۧ/:m7ʮ_NɷOKGǛhill+i*JN=vk?>4M4M<+E7/R?*aLvv endstream endobj 584 0 obj << /Type /XRef /Index [0 585] /Size 585 /W [1 3 1] /Root 582 0 R /Info 583 0 R /ID [ ] /Length 1397 /Filter /FlateDecode >> stream x%KlUU:޶-<)PZ@ (ZqDL$FSb01a@I4:04ab$qjb |ksg-xVEYX7R02P  ͠6` ,D5F=`b!Y^Goʥ` R&]\V;B2w%U` \]\wrXO9 `#1zg)G@wM`qz)7-N;EtIm`|zz'('vzvC `)zG)'nzZ#{^z'~pL}zWj.fj!BZ:[* p+Ve_Fjd}ʈ/w0VnXqG A>hD#F A4hD#Y+bB˼ d%x7uR6D r8 ̄2CRB | `X>itY(Bsϰs60Ve{-@1pvl9Lz^0jOw55)뷻»̯Ƕm l6c`;)+;pv`P4%OvC |ʊ'(v` =n<)(ATA b< F.0Hj1s y$ө`n4JKʤ~@ RY=yXS^fw^~n!GX);qsFAM`lӶ `lkh4Hw7CW7X#m%A=4JZXlf=3N(AI/,&>>>:Sf>Po?ApgWtPb{M&5p\g;}_ɚ)VhW]89u0c׺0 n !C9ro_>, VNNl-=|9\B9yٿ$kan朒ήh8u3pmxCVVQlq,OZ 6 ‘‘Y{gfNbuZgM)wpN?mW,@?쎌+VQս2ȓ'#OFY';Ϩt : vFL3e:N yN+]VFפQ֨*5Zbя4YaZ-ʳ5o[nՙ4ZahUIA)~y6&vV[o4sڣui?ȝ;#@s+^V#%*:P<| Z@+h`Xiu{%Z endstream endobj startxref 429329 %%EOF pscl/inst/doc/countreg.bib0000644000175100001440000002337111026562641015270 0ustar hornikusers@Article{countreg:Andrews:1991, author = {Donald W. K. Andrews}, title = {Heteroskedasticity and Autocorrelation Consistent Covariance Matrix Estimation}, year = {1991}, pages = {817--858}, journal = {Econometrica}, volume = {59}, } @Article{countreg:Andrews+Monahan:1992, author = {Donald W. K. Andrews and J. Christopher Monahan}, title = {An Improved Heteroskedasticity and Autocorrelation Consistent Covariance Matrix Estimator}, year = {1992}, pages = {953--966}, journal = {Econometrica}, volume = {60}, number = {4}, } @Article{countreg:Cameron+Trivedi:1990, author = {A. Colin Cameron and Pravin K. Trivedi}, title = {Regression-based Tests for Overdispersion in the Poisson Model}, year = {1990}, journal = {Journal of Econometrics}, pages = {347--364}, volume = {46} } @Book{countreg:Cameron+Trivedi:1998, author = {A. Colin Cameron and Pravin K. Trivedi}, title = {Regression Analysis of Count Data}, year = {1998}, pages = {411}, publisher = {Cambridge University Press}, address = {Cambridge} } @Book{countreg:Cameron+Trivedi:2005, author = {A. Colin Cameron and Pravin K. Trivedi}, title = {Microeconometrics: Methods and Applications}, publisher = {Cambridge University Press}, address = {Cambridge}, year = {2005}, } @Book{countreg:Chambers+Hastie:1992, editor = {John M. Chambers and Trevor J. Hastie}, title = {Statistical Models in \proglang{S}}, publisher = {Chapman \& Hall}, year = {1992}, address = {London} } @Article{countreg:Deb+Trivedi:1997, author = {Partha Deb and Pravin K. Trivedi}, title = {Demand for Medical Care by the Elderly: A Finite Mixture Approach}, journal = {Journal of Applied Econometrics}, year = {1997}, volume = {12}, pages = {313--336} } @Manual{countreg:Erhardt:2008, title = {\pkg{ZIGP}: Zero-inflated Generalized {P}oisson Regression Models}, author = {Vinzenz Erhardt}, year = {2008}, note = {\proglang{R}~package version~2.1}, url = {http://CRAN.R-project.org/package=ZIGP}, } @Book{countreg:Fox:2002, author = {John Fox}, title = {An \textsf{R} and \textsf{S-PLUS} Companion to Applied Regression}, publisher = {Sage Publications}, year = {2002}, address = {Thousand Oaks, CA} } @Article{countreg:Gurmu:1997, author = {Shiferaw Gurmu}, title = {Semi-Parametric Estimation of Hurdle Regression Models with an Application to Medicaid Utilization}, journal = {Journal of Applied Econometrics}, year = {1997}, volume = {12}, pages = {225--242} } @Article{countreg:Halekoh+Hojsgaard+Yan:2006, author = {Ulrich Halekoh and S{\o}ren H{\o}jsgaard and Jun Yan}, title = {The \proglang{R} Package \pkg{geepack} for Generalized Estimating Equations}, journal = {Journal of Statistical Software}, year = {2006}, volume = {15}, number = {2}, pages = {1--11}, url = {http://www.jstatsoft.org/v15/i02/} } @Article{countreg:Gurmu+Trivedi:1996, author = {Shiferaw Gurmu and Pravin K. Trivedi}, title = {Excess Zeros in Count Models for Recreational Trips}, journal = {Journal of Business and Economic Statistics}, year = {1996}, volume = {14}, pages = {469--477} } @Manual{countreg:Jackman:2008, title = {\pkg{pscl}: Classes and Methods for \proglang{R} Developed in the Political Science Computational Laboratory, Stanford University}, author = {Simon Jackman}, organization = {Department of Political Science, Stanford University}, address = {Stanford, California}, year = {2008}, note = {\proglang{R}~package version~0.95}, url = {http://CRAN.R-project.org/package=pscl}, } @Book{countreg:Kleiber+Zeileis:2008, title = {Applied Econometrics with \proglang{R}}, author = {Christian Kleiber and Achim Zeileis}, year = {2008}, publisher = {Springer-Verlag}, address = {New York}, note = {{ISBN} 978-0-387-77316-2}, } @Article{countreg:Lambert:1992, author = {Diane Lambert}, title = {Zero-inflated Poisson Regression, With an Application to Defects in Manufacturing}, journal = {Technometrics}, year = {1992}, volume = {34}, pages = {1--14} } @Article{countreg:Leisch:2004, title = {{FlexMix}: A General Framework for Finite Mixture Models and Latent Class Regression in \proglang{R}}, author = {Friedrich Leisch}, journal = {Journal of Statistical Software}, year = {2004}, volume = {11}, number = {8}, pages = {1--18}, url = {http://www.jstatsoft.org/v11/i08/}, } @Article{countreg:Long+Ervin:2000, author = {J. Scott Long and Laurie H. Ervin}, title = {Using Heteroscedasticity Consistent Standard Errors in the Linear Regression Model}, journal = {The American Statistician}, volume = {54}, year = {2000}, pages = {217--224} } @Article{countreg:MacKinnon+White:1985, author = {James G. MacKinnon and Halbert White}, title = {Some Heteroskedasticity-Consistent Covariance Matrix Estimators with Improved Finite Sample Properties}, journal = {Journal of Econometrics}, year = {1985}, volume = {29}, pages = {305--325}, } @Book{countreg:McCullagh+Nelder:1989, author = {McCullagh, P. and Nelder, John A.}, title = {Generalized Linear Models}, edition = {2nd}, year = {1989}, publisher = {Chapman \& Hall}, address = {London} } @Article{countreg:Mullahy:1986, author = {Mullahy, J.}, title = {Specification and Testing of Some Modified Count Data Models}, year = {1986}, journal = {Journal of Econometrics}, volume = {33}, pages = {341--365} } @Manual{countreg:Mwalili:2007, title = {\pkg{zicounts}: Classical and Censored Zero-inflated Count Data Models}, author = {Samuel M. Mwalili}, year = {2007}, note = {\proglang{R}~package version~1.1.5 (orphaned)}, url = {http://CRAN.R-project.org/src/contrib/Archive/zicounts/}, } @Article{countreg:Nelder+Wedderburn:1972, author = {Nelder, J. A. and Wedderburn, R. W. M.}, title = {Generalized Linear Models}, year = {1972}, journal = {Journal of the Royal Statistical Society A}, volume = {135}, pages = {370--384} } @Article{countreg:Newey+West:1987, author = {Whitney K. Newey and Kenneth D. West}, title = {A Simple, Positive-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix}, year = {1987}, pages = {703--708}, journal = {Econometrica}, volume = {55} } @Book{countreg:Pinheiro+Bates:2000, author = {Jose C. Pinheiro and Douglas M. Bates}, title = {"Mixed-Effects Models in \proglang{S} and \proglang{S-PLUS}}, year = {2000}, publisher = {Springer-Verlag}, address = {New York} } @Manual{countreg:R:2008, title = {\proglang{R}: {A} Language and Environment for Statistical Computing}, author = {{\proglang{R} Development Core Team}}, organization = {\proglang{R} Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2008}, note = {{ISBN} 3-900051-00-3}, url = {http://www.R-project.org/} } @Article{countreg:Stasinopoulos+Rigby:2007, author = {D. Mikis Stasinopoulos and Robert A. Rigby}, title = {Generalized Additive Models for Location Scale and Shape ({GAMLSS}) in \proglang{R}}, journal = {Journal of Statistical Software}, year = {2007}, volume = {23}, number = {7}, url = {http://www.jstatsoft.org/v23/i07/} } @Book{countreg:Venables+Ripley:2002, author = {William N. Venables and Brian D. Ripley}, title = {Modern Applied Statistics with \proglang{S}}, edition = {4th}, year = {2002}, pages = {495}, publisher = {Springer-Verlag}, address = {New York} } @Article{countreg:White:1980, author = {Halbert White}, title = {A Heteroskedasticity-Consistent Covariance Matrix Estimator and a Direct Test for Heteroskedasticity}, year = {1980}, journal = {Econometrica}, volume = {48}, pages = {817--838} } @Manual{countreg:Yee:2008, title = {\pkg{VGAM}: Vector Generalized Linear and Additive Models}, author = {Thomas W. Yee}, year = {2008}, note = {\proglang{R}~package version~0.7-7}, url = {http://CRAN.R-project.org/package=VGAM}, } @Article{countreg:Zeileis+Hothorn:2002, author = {Achim Zeileis and Torsten Hothorn}, title = {Diagnostic Checking in Regression Relationships}, journal = {\proglang{R} News}, year = {2002}, volume = {2}, number = {3}, pages = {7--10}, month = {December}, url = {http://CRAN.R-project.org/doc/Rnews/} } @Article{countreg:Zeileis:2004, author = {Achim Zeileis}, title = {Econometric Computing with {HC} and {HAC} Covariance Matrix Estimators}, year = {2004}, journal = {Journal of Statistical Software}, volume = {11}, number = {10}, pages = {1--17}, url = {http://www.jstatsoft.org/v11/i10/} } @Article{countreg:Zeileis:2006, author = {Achim Zeileis}, title = {Object-oriented Computation of Sandwich Estimators}, year = {2006}, journal = {Journal of Statistical Software}, volume = {16}, number = {9}, pages = {1--16}, url = {http://www.jstatsoft.org/v16/i09/} } @Manual{countreg:Zeileis+Kleiber:2008, title = {\pkg{AER}: Applied Econometrics with \proglang{R}}, author = {Achim Zeileis and Christian Kleiber}, year = {2008}, note = {\proglang{R}~package version~0.9-0}, url = {http://CRAN.R-project.org/package=AER}, } pscl/inst/CITATION0000644000175100001440000000370511765717030013357 0ustar hornikuserscitHeader("To cite pscl/ideal in publications use") ## R >= 2.8.0 passes package metadata to citation(). if(!exists("meta") || is.null(meta)) meta <- packageDescription("pscl") year <- sub("-.*", "", meta$Date) note <- sprintf("R package version %s", meta$Version) citEntry(entry="Manual", title = "{pscl}: Classes and Methods for {R} Developed in the Political Science Computational Laboratory, Stanford University", author = person("Simon", "Jackman", email = "jackman@stanford.edu"), organization = "Department of Political Science, Stanford University", address = "Stanford, California", year = year, note = note, url = "http://pscl.stanford.edu/", textVersion = paste("Simon Jackman", sprintf("(%s).", year), "pscl: Classes and Methods for R Developed in the Political Science Computational Laboratory, Stanford University.", "Department of Political Science, Stanford University.", "Stanford, California.", paste(note, ".", sep = ""), "URL http://pscl.stanford.edu/") ) citEntry(entry="Article", title = "Regression Models for Count Data in {R}", author = personList(as.person("Achim Zeileis"), as.person("Christian Kleiber"), as.person("Simon Jackman")), journal = "Journal of Statistical Software", year = "2008", volume = "27", number = "8", url = "http://www.jstatsoft.org/v27/i08/", textVersion = paste("Achim Zeileis, Christian Kleiber, Simon Jackman (2008).", "Regression Models for Count Data in R.", "Journal of Statistical Software 27(8).", "URL http://www.jstatsoft.org/v27/i08/."), header = "If count data regression models zeroinfl()/hurdle() are used, please cite:" ) pscl/DESCRIPTION0000644000175100001440000000174011766024317012750 0ustar hornikusersPackage: pscl Version: 1.04.4 Date: 2012-06-12 Title: Political Science Computational Laboratory, Stanford University Author: Simon Jackman, with contributions from Alex Tahk, Achim Zeileis, Christina Maimone and Jim Fearon Maintainer: Simon Jackman Depends: R (>= 2.10.0), MASS, stats, mvtnorm, coda, gam, vcd Suggests: MCMCpack, car, lmtest, sandwich, zoo Enhances: stats, MASS Imports: lattice Description: Bayesian analysis of item-response theory (IRT) models, roll call analysis; computing highest density regions; maximum likelihood estimation of zero-inflated and hurdle models for count data; goodness-of-fit measures for GLMs; data sets used in writing and teaching at the Political Science Computational Laboratory; seats-votes curves. LazyLoad: true LazyData: true License: GPL-2 URL: http://pscl.stanford.edu/ Packaged: 2012-06-13 00:55:00 UTC; jackman Repository: CRAN Date/Publication: 2012-06-13 05:44:47 pscl/data/0000755000175100001440000000000011765762344012161 5ustar hornikuserspscl/data/vote92.rda0000644000175100001440000001016711360656403013773 0ustar hornikusersO]gI&EA\X$" dBR&3af+F7BEnPw k"JQDP)T x'=yM.s;Q=qnXl,6ް婍,WgWgn|bl>zsۘ|r|9y1y{6&בһKY /7cmLElOtk#".EF:#SqOuz1e~j{k8qq#Z?CDB6M};ɍxD\DU:Qĩ}Z{V~S/ZɦOŧLoϹj`Mܫl5dKNg|=3ˍwNVl>xC&׭{3WF ;v9TN[p5l&L$Cevdy"d}Ev9?]nf]^drc.";KΦHnߝm~ֱtGZѾ*vvt!;2l"u_^/z}$,0{5?蹻f' WC*H泋{d:ݧg:dVl[G^eN}m.+ڊ sHUSIڬUde^_g1G{lOf\l*+1p3Bz?ڛnZB6ue_ETV1'yֱu>g==;VdY}2DD*<[7lLu^g+FvVr1æʡLfƇ9_f>'t5[7㬳tcB\*˅hv91&µ3\뺹CdSTb_e:[2y]'A|P;#}g$Le+Q,#Nҭ'xثW#G{ωhv~Fq:@v)?;QΗ|d*~Ք$. a(Ce SSV,݂G/pjp lb3p=}Q"WX4u_{g#Um;'7F1v6M ȡN}lcE#нjSfC${dۚO!kkZ#_l~WuFڒؙ^Og6yl齖kU-Z_3 yAgy!- q~[X8ҳwJzPCv.  s_OUཝ;wh6Wש\ңwá}|K?U\?W^SE}S~+wzvvHސ#T WShD%~l>O*cR@'\쾶S]#ԽKw멏>G u(g\ݜ8oW/\Dys幓QK]u|%vV2'ysXtna>|}5ԧi΃1uj>cE;i&;}@eK͉fpv}Is枙."m_"^Tgs[o<_X}x]FMs 4S( u;OyE/: u8_!`Eo?yfExv/Wi }n1wvRA;5?[i @yqqkC~l>OAgw׹~*a_u^WW%ϻ#/S^3?oĹxzi"#.ϝW7\jOJ<4}VẈ#y?c} u zh=!:Pi΃1uj>cE;zOn>I}xvrs%?͉nV &4D}9ɞGA  s=Ջj >?[(^t1y nr\x{&st8x͝ߩG;՝`pyݶ[;nm]i>ݹ7>weÝ|p%cc7 65C]>~\qkn[!#4+v W;ȾS:կ4oxD辝j{l/歘 =g*r{.f{ƞ]j h=)o]q,S2C9n79z>(ΒF!r>x2CJy ro֋7+/4|b=Y}#w`>yWok8,e0mNfnuLݣg`P9|v_y'/@ަ=`NLqfgC#yG+g[ ~"ltxfvO'ULD+:LW/) -*E1s~AA*q4OjC?b7OVU= +ʓLڼT$XE.y7{Y~M4!.\Ө0cvQluv/OR#\gP.cXaUSSsNt0*Mp %vu}ZVb^HwQVP%w"dM;ؗ\;pF㶭%Q. rYe%pscl/data/UKHouseOfCommons.rda0000644000175100001440000004531211507177505016013 0ustar hornikusers}xTו?vL݀[Ĥ9=F,`DL>HRiV6uӳI8WB"{ަ do7g};垷e݇nYs̹rΕK_ yՕWR?xG~׎4gn3`Μ5@ ߗjs{V߼zC+^Pvמ]kyk۳peYjNA3ڢ][7/]WʶN),^܁i|宔<4K+ïmy;ۊ\;Ѳtrֶj=ϕ#n^5۾:ʲ {NDz`-`=s~_zupeev~~ӵ+aSũbm86}ˑSdmdmB{AݖZ. OdaU;\#wsg|Nl ;q߯7lr #hNL}[y.n ꆩ[e{V|IHGFZr&]j&͌<z;w[ۭ/Ju}frSM{;= ?OO&#r H]]tfﰻ\ܲH1qSWʦ;eoi0ʷ,I9dq!H:{ ^l3O|ֺ ess;rg)2vJ5s X:Xp=ggv{-/>6; ;\L>ivHdfKÿl<[^Z!dJs3|lͪe716`V9^Y~m2vVْH6I֩/m~"#,[_6WgcܛeH$XSx^ƩkEBW+ur7i6%'"-~{~ٖ S5Zx]R"yϗsWS,_`$ܶEuRJag]jWJWMfg#5$mXW|iI`d5 {V{6cnG"ƛ/YaY\L6˶ M",_]o\˩$_͓3UY,i]Clͺ~ЦKnuZX>A+ 8][VlYS`\:oC#9t[.ISX.Ec]{6|,y\J-JJr͉Melʗզ(H)ClJh2t^N6 K;%IsuWI+p62]6 Ԗi[[Ig{1 r[bp ͼ1 %?Ֆ¦(@:{~.XlѲ6ڋ/[IM7Wy=q V Ud3KaP-de峰˕(L6K\ Bp%%nS[]k-_xoqZV-ER3Z=rTv˂3 vhAFk{mQThnV^8$ˈNVtFoEYl*nU(kK&(wۊERlYHcRy}eiQ-'w,ZR+GK̳\je:TiJi svW%[rw(]:qRCYPXZ%( R9DɝH#e 󤸉UvkK)C]VLQ b<ծ8ZО ӜLWk'?hcQ{cFZ hpgfeK3l;vd۔[&fH9ֱݖ\ueh,6'NYMf'NauBq[I*-\&=yRGZIiEbV-"Ao+tJkAZ9/TvfxYl<eIL\*un qV\ΘUN9*?YA3fu)_ *S;~TX.P=NfK^"0n.Lk+E-IP%u;}6e.j(7ªt%zoAw+ Q9v mܚr[H+=uP5Io *M9HxR}ƴ4snyY{bkdR;wFQAO69IReZ\LD@9WuK;Y9o] :ˢڬKJ !2S➢ ŎN.^ Ɨj$^ՙgԔ˲E|I bZ|*nS8J)Gӥ;γxCmsZm0+>_Lveɛtamw#'&E wjl{,q rD{$ D J5ci qrYۜryzݶ].~S Ҟ@ȑ Ŕ]a]n,^jqrf+3mjX{l}\)(L@קIrσf=1:xu#:IKϳGqi=$"P-qSd I |(Rw޾;.I2h\= vNzE{-6I.E~8Kl 3iWO3G\'fV;2UϳyT$0l3۶i3=Y%,9N#)_eIBrLl,$D3,kRٳO}7۶)|.;gҩ{a<쟸ejJmrgXYr?I,H[]yi RyKaz4MJ[s[&y&2Vl6-b+8wgZgӮ +>}^l͚]֞\a-3ʳωw~|ﳡI\JNMAKUE׆V wv,e~xo_ERv_MGFJ׿tx)y_h}X.wj'G' ˾?;I' uЪxB Tr~#/N1[sх?\o}-oi48yӷR^@'ׇK͑oO_QHyٻԝJn4R?Ou$ky}e~D׻?=ş-g{܃r(k ?ACsOS2JNuo~v:w[p7yC>E؜~Ģeqϯ, z(XgD+lYevoߋ֐#tSj>IGq/cs3n'JrkC+)qG7Q{r)*IHuh_s7-xp>F6_]|]Qoߠ"ecA#)H=Hl0Օ/{E+`QБ?ļ 0Mfm3z! :(%g}w+hkFxj٩3_}.E}//辰rf{~NgƯywQ|8*~_[=Q/а^S:>}"oH& V.)y Rt[N1Ix?~BVӾ=Su9E?6%I(,oRɇԓt|ӷnrE/E/vcEkN0u\ݵwTbc8oyo}E4vYE7~wS$u9?0:cMP4OR@ քJѯ_.=Q߈^kh|׌GcH$&E@ĩauV&&J hw*NܰODQu)^%Qh P?Y|"荣15ߤ(Trx#4 ޢ 6JJ?Bztц/5Ptҟ뒃W*;P a `RoTMR8!S|W$.c_..HҧhAK##vٳcŝ86*Fz2(AUh+UU R|4kA%6"E oەEoˇ(zz/k cr O_RɿF/ *iz(+7а"/[-ϒX?/^w矤p"! j2L~=eiZ}FEԡwGꩯA ˗/խӵ|CCmjW_Šޱ ?CJ>B# CR{iLRVN%N(%DqZL^_Ȥ^ٛTU4K~Ԣ:QhZ@*IX*_ |4}7%hqZ/RúdZ:8c>^o_C].ookBF"fB5ЄL]Bط_1٭cԧ;G/<^ܠ|z?]KBUZs?8_ЗJY;6Nb\>A Ka`ԥҕ#A\PU(a髐=DŽf/PX/(EnUAu^hOKJ%\SO1 C+ꏔ>a+NõWL_Zc>9WG˨zԦK{k&OaZ9+)j쫨D]+K ~H)̯WQJGE%xo`V^ު1T@aW8ac-4~_ f[K]-nPX-( <Sb4B;v՗s(wEJ QoV k*Ch6-f>'己_#~B%?(u&eO`NS}Ka5D=з!Ӱ^VVͭwQd]Fv" nԷPk?hQ i KA kq_zlRF4<ѐQ^>;yԱV wP6Ӱ[=qt~W+Hѩ͇i5th}oj9ԯrGրzO&,>șjEGmF߉!ȥ$Q[i7}X>717hC\k0n#Gc,:ޭ&ןdBjWSTz5#а£̗>wUI_w3z.cv|#p"}|ż@Mǀ!Faό*u)ZV=xs vEm7]J!%^(+!ZC}Z-n @zh?FQ[h cTRGv:iC+.*xOmȭsޣ Q(s]4f&GKP+HZv^T%j]*38Q0+0pĠv\Oav G? w3?a)اOFK>1zǐoF59}^WRTOuӸV}ZM}FG5{Bc~ŘmHx&Ajoߌܥ{; \PODBG^]:%{J?a$βP8'@>ZH\ ~_Z9=2Kܧ{qp 3?F෋hؽF\GЏ z8p%Ə"z^uw׉~ihx؅ FE>)J/ U)̈́( "\>ء d*g7QZ18Ű{n*QTaam>!O/FmJ7~_gQDuP<3,4_. j1"w./ k 4rFGV5=j'|8*76QvqxhЅ?0!`jr\F'C;S/AdhujBW-S]g(=mQ4aM)ty䇿_Ô} )S9CYjȢ t`QgxT: -Ɵ+ ]6x>J"&b]s3;9}OeDIicNF]!8.0z]TNMƭVwBO+_?+5{naŨַI=}1WTe0§P'G A?F`G ~2gGg"j@Iy{JSm1t%{#)zx"dKL>= ;U+ERT bj6qTa4t./*.1R(3aYt.ٿS *ZUQ |ҨasoFjG3s0^'ֆ.^WQŐܕmWjwE; i~|E5q&J31lp}!*L@ @~"d`=B1b"+2vm~0S}Dđ5q4a`& iƤ3J,@|w~PoP06%؇~ðoz /RBq1,S}FaỌ?J;n~a%gAtt>qHׯOH{̳E㧹u0m C#Fz3N,(cУQເrziIrD5<@@W^0v6|F!M&"5̨ǿXq?b{ za QDܴ.G#P~6c'㰯:0>F>CzXڬ3$~#/ |F8˃ث9O! bBϓO120M?O9p\"϶jj09Q?tU'!N>Pܿ) #~;1?d5'OѩXG o{|dtL=J^Y~Z-K0vȷ2ˁ C>Ġa;2>_h8r"&[qAp-^؏Aĩ; <  WcpP+WhEqNO!I V 07潿 +Eo6~"NFQ[]qE5bp"_B?z?gCg |EAiDYi@IQ'kB<ၗz=w_#s/2T*D+R aΛ8pOZXN#r__CAK=p0"'`XZ@ Pb >_ҁxl֓qz+ZGc\n nNK?5uvׯsC< y( ;CۨAg?J|GwI?C / Cۨb6(bF9ץ7B_Wl>)UiCB^['zycŃl/ZG=ka 4]j4xkÏT pqYrVP ]/Ԋ9wՉ|[ȸS4<Czz~] ;{wAO#:B z*`ujx1Gs5> >3+zG\ҏ c3^Sߚ#tB 3xJt8@}V^48:;{nPԖB>KtjaG߆x5xY|<5D?pq7JA4j>f4B1^ĥw#2dq.㰛MԂx$jxYSp<D|q` |A{_GpÎUiuA~A7sh̏$cfK J''LyEac%7o[=p#%~b߁xAd]Aw]^{ GaOȟ@5諘?!`U|wKVvv͈N#)Xt|?Z1m (=c8Сџ`g"'a7h۩~k5FC&^!=F(c7b9:UMޤQgp8]oKgmI##F`W1|㢑o~ eb+D+Je11G!_o?V (pvVySڠc 쓐r_򁛡+ "/ |11ap q68]x ;{,G5ۼWGq?bqnK*yv'7t64v5zIӇS?4ϫF*'3 F>0pnxG=wU0((7A|guE=9W|ƾG!_E׈n/<>aՂ>3G /4ÞBp1~Qk ~:郠W X$ʌ|5Ǝ'G^8x`=ι"#QCwb?[s/^Ge / f&^W\z!XWqvE>I'C\˕3o>}=D>aNJ3<ȋ0Vt2Ffby5_ !5*o?(7Kq/DدDˈsnAl¸/B2K^NZ5Y<`{NTҨ 0~^ ͈7}ra I C_q ȫYy{|/B]Oj'_ؽ,`v2XэuDܶFXof\>#Qȳ)@qᆿ! FsFk:|SoaX*!$nG }EU@J2~(G-i5 c8s"?G~QN9UcGs 4Pu\0䵆`s\D)o:bz%spyC# !O6w>gΜ%sfi=SlK ˿bfzl$3SSڞ<;=}ߥ=UTI~Ln.3Ilv)5ܦRcԼf >gg٬w }]Nsg4鞙l_Ʀ۩y.t _cOSyi3=^_j]/w^+/g}z><OSf]t^JLrj:=tj5NvYb?Ͽս?zL&AM rclF1 4ת;Ji"g 9+EN~W8ш\fG;ܫrPGBzT9r8Q"5Zp=\V䔗#ׯ g<) w9oԎ\V6LJ3r/+L W 9NO`^mVӈr:AM$7bnĘZX./r{QN#8{Ԋd ֯5/pԀ\zkFL5QgPX"75ӪLr][Lq} 9OPk ފ}yԡ]\\Dnn^tcg:=z53=obə$7ύ39 8c׊3O5Y;jxAnd;r6P1:iDZQV{7\#N@z+໑܆5 ݮR,9=Y=7rX8cymYFWbOԌܾzrG/]"~C9LZX׋3gը ׊3nĦQ˃|'/kz 8Ҍ`?rq 5܈q[q1p/^,fIp9 Y\j}h@b3jypϋukr΋uB={#jzug~#Wč>TvQjpm9xrϫ!GY5-j#pڋZu8{冞#9͈{\ևuoW#G{p =S 88CYt֓=8 ܁3^bqV y{P9& !ԍ3V>ЅgyYJ95mE 2]gdl;_IVl{v%q񲾄>mn?vx#8\j ,K;rUvy35ȍ\i^@ q>A?7A 6C.*7ΐ{pV 9!.rL?ra^𣖁g<(^Z!o}87&qF͵;QKϋmÙ jglg}!Ə3nkyX>D3b[+׌3-K^ ,rXp֫wC .Bozp&ًDͨEõ0N78Ԇ|F6lmGmD7δ!o8یWql@f7n6l=ZJ͐;gZ'z.2>7-x}b}!'=5s8fg3+j*~G3g5kag X.#71^Yؙ>3ͦ&U5AwuMjrmu`5nٖzg3 '~3g z8 9{-d5 gܰ}8\!\;8 5 cv>n!sCzN-: lsj(4,jVl1=ZnGNv;T-j6VC5H(J]~J`Uq:3X5!vN-Ά7PˏZ Pc<P ~h&O5۳R]ڀ48ۃ31><7g8_>s6νD b6%7p,;ǙY>n=x}FMF2 ȍB>ϕx9:ijb 9\#@M I~pc}:aBj'p5Τׁ.NΨ#|&j?+sc~ַly ܰ kG-M?+2ND X*Q#:a|S⌻vb+ 2kovQ,E-r 7q&μg*_:vZ#u {4ᬱXߝg 9x ǜXR9CuX6F` 8ky48p~&%WRk?z&O|FmV7@>^Z/8Qwqi7FS>ǵڀ=ѬDM^s6"fϵ.gQ*mzRCX'Qckr}gU[t,BM*Soȋg `70_DmRU!G>?~sL8{ F@9|TzvyjKJ!op@_n= v'`V9}m™|gNJZг8;MiN/ |U҇H6C/™@.ŸW&P r Qi؋30'g]Z{^~f(<+A- J_< 9sgK{1x߲,}T\k$j#gkOC; [4Л'qf|5Ԡ; ?5Z`4Þ;; 5,u~ Rg38G|y)ȋl Z <gǕ >RolA>o1QX7VvSa?YvzJ=S{Qzk1 ji=mE-V/j- T`]GdgFk/E-<"=g[q6v מyZkA-o jz'cA2c;F;Ͼm tЄlǡ&fOjb8E&5?{ ;εCNi7:->c{aj@ Jkۀ`pzρ._7m? [@w^ݍ߿ H !?)j/ 8#3M\.:A>.Jk|;!9.ՂGiDMI^ca/^|rL~SC0O8o{N >{5b88 jU p J/iY;aJPv Г8[|3ߨMe;{rqȯAQq}OL/] ?!āaGW߬N| Zo(A-jBeOja?2·*_܋ڑ$ܼO'?|x|QW j&7pJQ ccWa^]$(CM_'.O>ZjO"NTbojIRޏZ1P{U =,`oeG̀!.Z>QOO"} 8q9kнw?-;K/_SZn#IrvQ)ȧjVDmT9vq$ $}c\Q\t 53qԮ=Qȃw΀'B~>/wؕe~9jj:Q>(>3?.;,}{d^'@aD| { !qma!A5Os@<]Ƴ/yGQsvSkV2?c/x,O! }Q9(P(XRgͨU< va9='⣌PÄkRN9ڇP13Y_r *m>| wji_ ա`l]W:fJ__rrԚseiX(@ W؞A^V5ry-⅕ <׀Zٍ5[;M[bz<(Mg:̟kMN:<1C]H-b8kۑ\TG:; <'WMf{WcbF5'6ežf pla|xz{ez6#ߒ\A>5!)?]s9s!ȹy\{rb4.t26/YWȿ,~s_pWovv~!_v˯+w}K_oItVƅYBv|nOq9DEmzOˆNpscl/data/state.info.rda0000644000175100001440000000136610555214104014707 0ustar hornikusers]=sAK0fTdR @/bp;-, ,~K KK agw}f~$mYւhM[?,k5VgBoj֕5,0 k-x#1sEp]]==tɬ]އއ@Wku:tKCM~ sj{x0ūq qJ"3P1EDz}0i"3MGi\۰% nVNK.H8%OC[ 56(jΈ).゙lef*!:VwT)[pBgY\K1LF of]@igjBzNH9b%.9%pټud0z Ϟ:fNg}JHHdWT" N3L+{6Jpz%:~5"'xQ0קElKRLXm:/V&ԴK5zNŠM.U^2ۄǞy1S[C)qٙQl;[zjbN|̍oÏg6g6a>n:3?hVoբ12DlHvXxpscl/data/sc9497.rda0000644000175100001440000000245310555214104013575 0ustar hornikusersnF`ڹM@^nœ;M.(EM$b)^KuBsf0^ԀLwf~zEUUjU71_zNח߻QU\cC9Ϭpsyg s}FW'U𧤆>׍IzK)b96.ɋ,]scjlݡ#<4:C"k3W,/eNTtIzt> 뒚C24aghUrcpdjIˍ%Y/>I_qssc>J\N?sH<ӗΘ#]\X*3Xs0Gb.CkycKHMҜG^21+7g9cx$ ̱92f_PAғt.9yJ+OU&t S=m>?v\yy3Pܕ xVid=0Θ:א]R'57IzfXsXZ[2G:1cl\7V[2?;TNnJkzr}Vy6'呬cZ:+5ҜKzI5K0f9+Ԑ1wIagf}yYmy\Uulrv>wz~u;'s;^g_^M>N'_٬9]}L E>E>E>E>E>E>E>E>E>E>M>M>M>M>M>M>M>M>M>M>C>C>C>C>C>C>C>C>C>C>K>K>K>K>K>K>K>K>K>K>G>G>G>G>G>G>G>G>G>G>O>O>O>O>O>O>O>O>O>O@@@@@@@@@@| 5kא!_C|t~(:?E燢CPt~(:?E燢CmϏ/zmtG}鲽>\Nmw~yi޴緋jMڙֿ<}|)zz:>c~,w Wn^-xzݿ{zvW&LQ-pscl/data/s109.rda0000644000175100001440000016643111033023002013321 0ustar hornikusers dQXի/!B,$]tlLNkgz]RmwLK=ݣ6a0`oۇ9 1cg@g0/s`|1EUTuΈ^U_NvzWYkj^WZ{ϗLV롗s=Ο>p+)6ki]׳;[q#<œ-\zڎFun Ǣ~\gߗ)~ĖO]Ez߲RG>suܗyZ)N\xq_ޗ \Y-}_;vs ^+^/5xgx űK]2w6xjj"_<4xiY6^E[nŵu ^_~!eQ!R= o)ekޡR_1X=K(} /SoK5xs B+糂q|e0I}_B3|4xqɯnxi4xŕG(^|猝3EtoσgƋ/?줶=e=G?\)C햶B431K>/iumMGi?_ŒC0f/U-Smڿhm"WX0:gRԿnx/`¥;OX|ВCUE>[K:^ۿnqK_NGKƋV;Zv/~j@,ŲW/:Yx g/i /\:/Zr Ņ6^E;9e!/kzC#Q[tgK!5]K+; ƝPp{|F_dK<</Ht<_\xk(Zs.%_1߭њNcA/R}_|OZ6t>R? ^xKxҧƋTK(bE{R9nx[whŋտhѦGkKtLJ/K,ű]ڇXv^1byq:r<&|(=+)]{-9eB"7_q/_BS7Ryg\m;_K||֛ /8GmS]kⱰya1)xx8;^|ůq ^dlgNYxG/P֥-/mK{I!EN6}ԅqo}E #}U,+u[n,cB|~ g,I̸_v.T/c_ʶxbE Gg/Z ^Ϊ /RHGMOƿͧnxYNj>[ŷpA;'Ry/eW/CT,ke.lѶ\;jB2|s:_[cRXqTi%c|Bt|-yvS8 ZqwTR^|./ztl|_-ZtkKז6 +<'IvHJ_XQtݖXc%T.qRսyhޅqۄgR/g-‹_jWBow\n?[ъ_\t'/TOjšg0' /r ~{ݖP/w‹ΣӯDO|ik vȗ}J~>W?Y .>YˏR6yZ[4fI=> |>ȗN[zo*P,{x9mgYJ~]$9RU6uR},擶|vfxzI??k-U1i4}o\-]GJg(Cm ~ZKKYq|ZzPкKr%CqF"\xie/ѥlW_,{p{R[9[b˭zG. 7u]KYzիkXKtLz~zoTڍXr;$^"@<oh|]Q).ܿhUj e_hفq︶TMGYr0M*U1xϧBum>H%| SC1-<:Pt}^=qMLh'r?]oʯ,}.^kgKl;#hx^T+%T?B]Yxjr:=J96^l?KOQ?[|Ӣ+_9ŲEqE*q/^,h,鋼e|cڟ3"_R櫇Ǯ+k_ny~o-RV۾2E/寵-~U}!a^+[֍_I‹׾^,~ъ|:oy = ]i_Տ/)4c>?/)l su>ۡ8Kq̗XzOq-\qlV\.k?}(ڒG-/b}+K_*"~ҥe'˺oeZϵ޻䳧]eQ=b? kBqRU<x|x㒪,~/%]{i=ŵ8R̵eohn_΅g}Uu<Kqt<[B_NyƳKpنQ ?e͗/Z2Gy%-_;Zjύ',/N,:v!-l*OO5yJ_Pڇbtx'Tc.]R~ٗ>5.IS4?m;IagjWz_S˫ax%Woql‹T/Bꔓʲ"^|m:.?UE eEߤksjBvTMGli2٭-UQU_kIyYGfc 7~Eg~(>R϶T5^hmqb tC?r_s*?_8|槝 /mѲCZ7Dz,ƽt}tnԟa}깋_"=m,kqKqDž_zu,u Z-: Z"R]66Z[^*/p=2~mK淋_+?/KpsK_u:M纏gmͷP~r$/-U^|*V~LU.j۹Ǥ%4(‹K>_9އ->vž%_5OB75c?u|ŋR_&/l|7ӢChcZ~P>5F[[+_;/TZ񘶽"W ŇV["G5ϺE/[x}B7hZ}{- tR~ۢc7Zt! ^$Gq\xM:5?_Mk'q߯d?1vz\.j:Ɗ|yVcc3Pq 潔O7]Wh4{-k!TGqbeZqi-}Ӗtz&_|_[_vWʲsֳAZzRm]Eu&%8eϪ/ZHǩ*ެ;^bbeɯ.딢֖oYgh̕sv]eϕw]'m=-K? /i!o_-?_9bVX~^IJggB|tk~>Xi%yRu/9~wGkxų:O]{%A|ˏP{R;TO}O맴즔?|wyƎ;BM\m6B,PqPֻuǘԽ \Wy*#\{ƥg\ /ߴ<-oP9ƉT_ظz?/'ږ姎]w<_5_Ƶ-:=_; ] >ݨmmo5yniӖΧtg/SZ;{Z1ٸǸ凔_uϏI\zOkRڕ)} ţ_bɭ/~̿8ugѲ_Bq۴a-l}W:ҫP}1{Ɨϡ%~/|¦/jsZ/ ϡ+KgtQj|`4PH a~̅Xq\Ե =7@~Zj{'unlzl){ܺx xh"n%IYkU瓋k+C|k|ںs<|[j<2Ƌ<`xzHO‹];^//1/ZԲGyK:V-쒔Njw\CmP<5} {>xg/e+r+PA< R=֟rUێ6-}.-Uϳ`RvRjRVWTĩ..?  EEKOCův<?x+beuǤ/gZumxeʚw|m|POΫ;ј~?T>q?籴kㆪp%.BKh|%k >f<ִjcwS߅ڙ`{/kv*h.rg'i돯ъo|}_ˮX/|.Ten}qiIƿ/ ^d/r ŋE˯jv\EY/UjRN_v1,/q' /Z8wp/qg¤W_ msxqQ*%އ8ڛyF`x`I, űEk韔O=vh 7JvGxyq/ZvJkܪ_{ X8_;MR?ҴmYkc5ԿhgZ>q[BWޡ$Sd}m1ټ|'5} ŋT"U庶\[[ܥƧN'%-/;o[ӞnNiCqO"|A}B"Ã?K]bܔ2nvj-UEkUͿlOWygi/RIWLH~ݯd&5㪢B/v/㌻ GtEKqƤ&kϺ:+ۿ5"Ԟo,|k-~m ť#<#ՏX8e/bvDG_/~ϱ*=OZW^R[/Cc_9{.-Z7Q UCs ^DbP|8R/Eq-Z|⧊+^/l-y_KK_^q)^‹ [loݿ+xھi㥮E˯ſE۾_ʖ;^QK/~WZx^"W(^\_ ^ՒW~ ۾8yzõZv?c_ܤ Zm|1/xѐE۾%خ{]'[x];4.WUߙŋ>GKp}#mgma1_x!?.ЫqNjˏ[_9=.-Rwikm?P/ /Z-+)^tsqkvv<^^0P ߡ'VҋPQl9sqV,;RXXlV_K|zY1^qGxіtCx,?Su/R<┓4~3\]y8m} Žއʓ;4N-uT_|'>bO7sjMk}].Zy-4x,;^L8UM /[߼huEKOG{⢧-e_kb_Ewh/'_z䠅PHqeKYx {~,|.׶SGBYy[`jo9ϊUu#UULIaY\vy-?Cu'|/Zq:[|㽲V6^zZd_-`?8.-|~(囖~ |7{,3P\OP*'_rVK~_|P=/pRwү>W/Cou -uËi"gC"ջXmi|p?_Uqm-u*^K96x9/í-Ue\Zzr4x}+}-O8.;S?Kjm~jJ+{"}_yq-eɳlKS\^[^Ɫl:/=e_OExLk`=^I]h-uqݡx գS GZ"Rײxі{( NjϖP;k'WKnq+Z;׹w='_]}l)[ZyvGoeB1|B?gQ<h?x)5m9-U1im_x;u%leϖ/ׯl"úP}whMsP?q.9Y隧-|G.Z~[:߯ؿhƿ /7E6nUW%[[]%_b >7E6Oo=xB4Nղ j8+KYE-|Ֆwƾ?[%\_8!?_޿/:m|I445"5ʷ/߯Բצ_o?-}s8G:~_Z~L{q/ZW__-9Jqj_c+֫XxixjܧEۿM๵3&L*p?5L,_|ϭ^Rhm7CvmoF'{!U_|}7•/~,/\~٢PKW];ZvkBeK鸾|ORkg}slƿ3kl/QKUxjhH<{e%4ާxі{^j۽PՆW|loZyUD?~/y+˿ҥ~*HkUxj*pc@6EGeqKe=Zl=ElwXvN[U+X~I/RۢP>iP9hfK뎗@^ʚY^{Nw]g*xEW]sB}_'/}y R~*sk.| - ױF)]>ꋗP=14צ3/x u[|qkƥOjx*'/|JƋKR(`s ^BqeK ;qm~Π.JT-qsĕO}YW?[b_tjϕ7^՜ǚ'{|9}_{풛sHӶ ŧM/^c#^.[&/|PEJ5 =O(oIXl9ԥu׎7t$kcu,\/آ5_zDˎ~/o<8J>]BzkR?ɺϭ䶶ԝuoUƋ6XeŸ^:ؖ0f.B{;u_rv+4o]džMM| 峯q[|g /. ;&qcimqi땳n'.W?[嫯_ <Ƌ0n_Z7}I=ρyH{%o~%Ծ_/}m:Yn6._v\/񋯾k.M ;- ˾{]?h?[|j'}֢;6[ݲ%6BGDw3-zR5uww}wTy ߕS*Zq]_~m ^>Wt=Ob}ox_>ϸe␦m ڕXn=|o?[sl P$/RƋ'/b;sFo:r~ǖ̳j:/×_<N~/tR B;ٗHq+ۿꑖjI)ęgPo۱qe|TO?+K|O|?&^qEږ)ʒX~Uiu[[c\ں}?t}k>xUg$:땢3 RrIi=VprDZ%{hԖgh‹v^l7j_|/}@KXqcBmϽ!>/TlR7ew_._>kX|׶H#}ބD/ؗ~]g)gvE8WOEnV-9TPlю|*{\,z_>-8XxWx̩'xL镒ۛHRR:;l{O ^)7_W?-kP~Ų_8|lebI{"C~nx6tƋ6CVMtk/o?@J-eKtZxq3?凵~,싳P:ynKl7_/׾{~_n굯w)%Z%~~%_Z~IkK,~HkGKó/ǒ]ӲWm CZr^|sJϧY/i|%oWC푷K^q4o_xv\jm{hP\Ymex Woc_?4. o㿾Hm-ZtI7ꩯϸEI%lѶR9%x˱VE B-B휯P[OGb;ESJƋxb8%WN‹*ᅍ_i|YEњW,{^>Wu.]E㞵yeo½_| o4i^ю|)ijKz_~!?&m^7*QxQ,U__뢚eϋ\6߫o)ι//l:־%o=ڋ)^4;Χqm]r/n);}ڬ3gK]cs2TnZxiړۺӖ.rkjZ[#ǚ|1\׹rߗp"G|%4MK'i=گj|7nkKtK[v~66uײj:޺KCP|!p7 T?/ѻό㸸CsPs_Q?[z㛏UWʩh}#kÕt]wu)gq]Eҩ.?Q+.>c۲/RteR1Jǔ\ixWccRI?B1)i.xL73cM })ʢ3=TEWU|/s{1vG-\[x,1|^_֫j:ƥ>O)ԾrzXqƢ{X~8/R5JiuZ_[g\UQW:Ϗy?F_KOoŗ MZ~,TKT]j_|ߗ'V~O~v)Ԏr/8q+/yrqR#qlܼm=g>iV_⠪yڃ1WdyJZz_]?-˟K4ײԊC-s\W._|L|Wv$TNw_\"~yҥ_\7xͷ/Ǘeq/6^Bq#6^|զX|jȸE/y-_9騙{<˿5 [Y/~}KPqB=.jzb ɧfx.9%qKC..tpx_KOCPk[|Vҭ&zi_zK= ˸yHՃ uo֓[[cXU\v8.^c\jU~iGKc'pZR<[ϖjX5Z.^އ=X%tZ}ic*Gr*ⳋe[l*nURNbi_Jo'3pͥG Ǿz;nOVVMǸYh٣c~B_xo\5&x:R5yW~S/~)ᥪ /U_|x>.t֥j:9Ӯ3?K| 7. |^ub\/].?!琏@+-y%0ӎc,=#qV賥.նszLzuzW^cÎ+J'IyZy}oP|9t>Z ]‹r8ֿx/eEc1orƿͧ _}Z77Nqli£C?An_:eڗP~%[ʲKZxP|_N_\Қ6mX\6^7YR5F?GEƎBWNKe)kZP>h9֖x]p;43j:Z^+ҹ0.:CǓP'kCKz)[ḾxQ=}Ƌ.ojb%7'^"?P6Yl‘Km;._w /MKlkkK4~]l,%}T}c*eܼ㸒?ufKMk=K紌^jÖUzϤ^bsYxPpL-oMץ}"~ry/}0jqR<nx)ލ^\zn/PyƋDS/Z"ΟL^ZLV롗C{mho@tyt߯=m~ikחޔ]{p}y}}:^_l/߿~i/>tSW]j%g[W_s+ooz…=յ7^^Zoxye˫W;I 9= ï_奵8ԅ:./m)E~^\+K;rq9vq9)Y^YZ6$WW/_Mn0ЅKKW_^YOd>V֗Jzӫ-=Vۮ^.-<^H=}uOٷtKWsKyןDvk>~y9ѝ@.-= 3Ϯ_v~j=U`篯&sz깁R^pu{yϬ\wy헗V/,_G:eKƻ ի._{S/'8}%gKkVׇ/?2Pv@O-\{pe/<gR qk]Y3XNumKk՜|ڵK_[^Ջ×?tt2 ]Zzr9)'nJ\[~2ꥁ /œK>ܖWW/" W]^~myɑ'2z%|*hBbړd5/\~%5 n%ZzX×^[Jy@zuɌ$rqdkWs&PV_kaY}uV?<Տk~tV?6&CtVGeY!O'fY}SV?)G)Y},j:NZV1O-=u9k-m K_Wٿ..ۿdK++󿞳]?{eW~+9WѮ|% _V^zKוgrJ柸sjӧsrJs s _{k=_&L~ڳ >ܨ[5Fo`wލ/ nWpncH|4>n WGp;7~HHr4>1ҶZ[Fڗ#G퓭vi}z]:n~|Ƕo,h>n?5>y4ܞo #[۵pHa#pTkt4>v|GڵLJ˭vqᶕՔ4ERR6ߎ/͋GI?iS{Ioz<дV>{z)zvO3Ϥ~i6ON''''㳳]{o־?m?iJ_#ސ\wWOv}1}c~yFdt}7g|Kr3w3:RIg󾙍_q_l0}]_7^7oG:I~`Ƨ~u1>g:KS_^?{:'dz)}A&~6,LFټ>>ߜq>k&']G?w}9Et>iyMT8°J#{Hm{Jثki[sۯk<.=EΟK︡5~ڃ#|JuAoc[wɕ͡h;Y{yfdʖו+7_W++7_W.'.3^;=vcVH{}}I־,k_,hqێٚfkFo1##G #^Nzڏn ۣh?5~Rk=n?h~fc-SZ'3&{mNn; ͮ/m/uk?ݶYdz׏g{\ܠ=:}Kk=nj Wl{trG3ZNoh}6kh}L~V=:}{Q{=>^hۣ-G{k?5 _:¬Qd>__]ۿ_1 _G~Wƫ_rGZj~kAm-Gc?d~\?b=?lO iH]W럱-h<__li5[FfK hNouzmiS-GۣZ''?9:}_Gmuz{mNn_ii /ڣ[~No?h~i9ڬkY}Y~x{f}mwzXۣۙH]Ϟy߬md\6[?oUfehևxv1IAbjgxs!MmjSթ6MPilqQ .]RdǺ~g;ȱ a㷉pQb \tƫ&n{N>|~~w6K}M\&~g}M: 1vP? *n 7.p 7p A?:VnZF~&_<埅>mOφ9PqP{Pu*"> w@}'mP@}T|d|čLy*n]7=p#Bō/zAb)N| ԿKn,|9TPM @P1yP1ynC4&:ԿP&oAfoAPo ޿ PTw@/CAn@^?}P@AeLs? =PB?bbǠ8ԟ/*f: $P)RL4TLbg b{B&~@wP=_kP7b"6TLa߃}¤(LaRACCc oۀ6 oۀ6 oۀ6 oۀ6 oۀ6 oۀ6 oۀ6 oPmmmmmmmm~* ommmm?~ oۀ6 oۀ6 oۀ6 o* oۀ6 oۀ6 oۀ6࿍ovcv!&E:9owkX/TK*էh/締\m_ɯ%R^>ZvN%YYg۠M|Y`E>gf߶T併臿(3}՞~}=Gå>}#EZQ֯(xs|){ ONk2}uYQ1{wVOo׌Tlo !~A@9{T16] t֛>6+Ɖ;b:G}Vc|39`q;jXYZc̎q>Ƭ&|ɷI}׮/*ƣbL1:[^Տԡc||cvw[?6K%88>8-K=6=380^0 3 مY3|S3]X3:W_\~snȅȅ$0Uمta_.ߠ0;|± tv읝^X0Fn.Ndns#OzYjfnv/}zuЫ\WU~Tij~np?Wɇ bt[̏uelny)mh|fGg%6_Ү/]GYҗnn,!9u.Zr>d2??:|3{;rЙ?7rhbYF^͒wWૅ*<^~~3L/'ҋ(_n+W̱KtZ\}_JBW]N_@^^Χ8\S~V*1٧u0Ĺ`|9Nm~Or|o+˽#}%reoNpm~S`M0_{ cWk\*|gpløG\aak` " ƉļƦ@~ak1#0J"J1Ak!*0wyRIlӳ'ҽ̝&|{tò=k ^o[^g,O{y{[ޏ~>OV}tg>tp/S30`u^kFZO/grEymT0B(_̧f{ED/}$>'k;\`ln]l<[I_LܳZ渨c_9^d׭~[clOҒcm>7},Y^{X]o~d p p p p p{G*lCx> v1C\]mh1>~ڏЕ=s؎{g wg{hv?:p 5\縗7W>g{ J~ ^L>^ۯon iuh1 _7[gݓwy'ܣKtENۈ+۵Q Jm"lO/뛳1=6Yׇ JL{~md ٶBqC|Cv:>z8=y8A~6>KsMGqWw/lwwnl៻OnYO{7덤ݏ~zvgcK70Wu2N6 ~)f7ʗuWuʗ|usНO {3\ur;7Նډ1ډ1ډ3\Â\&1|ч<+uJoמ։À):-0i}> p X6P2P;˰y9s]Zq ;7P9hf(e0l}&?3 \s0;7ʎ ;{{ȏ!k}nF;n9a^tEYcuօ=X<1x*k.ff==sͻ{8GYpe1OpÜs {{*xľCfXjoqQjfpy%93H=<]EG';,mgIǼs. {tϹҝqur}v. vO{1wQfs1NJc)Y'?kݝ^Ïu{~q'KH9u}<z5_9o/]m5獭 zGՇ{IAikqdӟZi޻h==~o;>wR?iEOzS_$|O'ޑ{t~eͯhӶז{[iI\"#x_wcg'1+{N׽#(¦iL?;E7f NõKV?.ڥzy'](_ta$u*I2:$b\Fx?H{}(NNҽ;Joߧϵh(N9Ic1Xgt4l~oa}֓p5j=iաƱ?F/_oB`l/N<&D;7Ә4|Aok'R<*>FN7䬫ܴk:ϔó7l,<nVrf]^d⹚o/Cų7JΙóO V{irϾs֠@o9}Td&:<Ϣ=487Cg$c*Vrgoyx.g gq&~[+9kZ9xٍVz]Lo*ex_[aـ_J63c#HwF<7Z{[|3<3ϟ3 o w5<>x~Vz%),\J<IMes ?J!s񾥕 x~hP<ssNAgyӭ?{T3x-ts)x?[YSx,[%(gDٖxn}9;/k;㙈q+x d0u q7gB\3~Li)w@>S 5;z s5VNĹ@Xx>*s0ͭ)<mڤ9x=#Ahaa1S`y< =B=slG)[<;9 t%)~f\<{M 47Y;a|mr&4 lf<+m&mƹ|>S1)hPG!N\X=TÃ;-X-TANB0#v ?yuc+'|oen઻gw; 5B{wp<ck>chk#!М]twݤoL 6p{nxзw?)~.(ĵŹ!1Ƿw3Υupy1CKhQ&` -@1H3a9߻{b֜Kuft1mf:C6j-|0ձGn}$[8;h.mݼ t+3/3[[]x}ҕ+>&ː=#5/$usgvy#;8=t0ӻ[$~džYaD0;%ݿn qt?wKYD6$VNLo'N7!0 :E,{{;$H13@{[LGg2> 퍾xF68d؇ z8G!؃$J/<K8R71@އ\C`6BN;쟞0, Al/$~Nyi'h4 hJ( 6R'߀u|.Mt%%~A?a`,乓zÛi|-a0`4ݻa}$.fΝF 8{bx 꿘I WGo'14PA;| 9iDo7#60Di$ʵB$6!XfOn!w$~HvR;En,>/o⃄ XML4Xdu?y} !;e>qV?&|S,nCDrxAt )M0*7YG9;y@ ם$+L@;vii,{(oXr#w{7[f!J3Z ~6|{+AS+N[ʂ[[ۛ G( k,}kt_.qhͦNŒdsN RLޞr _Ljk p9 ل]Mğ ~ȵ@Х u7!%D/07/lnˢ8p w1@'*aM8 o~x{wo d1ۿƘXHdnjmpt5{6S5 O-$R|ΥS!k5dՙ-4wӐakoQ\Idz[/nYĈc/I~r3P|Q@~}t~8+!ΞLLi.\ba䙹CC0u  ) m۷Z=pY>bD6Ҡ[ Nēt ݸǰ.O`¨=uN '$5:yGvo0ƥJt< QZ<> 6ҥ.^{ͭ +Vc¸hzD'9@,짌I'aOF}`Q75_%8z&0`>Lack3I@v8غGOw#x탶%+$900uUG4gEx %h{ۻ/&L&Ýd 45dwpb',w@bo6covL\&ĨZ#,L7ij 3h-"?0awҿv߽ O[F*2gshݕO4ɢXN?[Zt%b ;@}' \ސ{鞨*ygVC$qӒ'[;7;B&7w`= zEwl#csܲbiÊmFb`:@3/'C9 9Mp(*[`K3oib:EoNAj*&&6`K, J|;H{Tt߸&sV3ڈ h)3k>ޑ4熓Btd c\.I{!6r~^9'W/o!ŕdLϛ7E5BnޙlJ\d0MOhLsKR;OՙӎIv7h2A_pGE-$~dSd4sZI7bm]^& 4$H3Xd}.nߙ4BOYޝ>߻7$;z O!Ab!{9zFfUewNUe!3{{) MPC$HPr-;$a[eAa)aCf?T(D̬]dc|; _O@b:|<` m)XWwF.Y!(2q0#1 R1eGi$d MMo (N;+W۰bgn̸ oGѬ8V(hB-04V8)@ҧKC"sT*xIҝAQtxrCVJocH 7F}̿~usIaV^u[IGhrhYs3%^fsׂZɮ~t7$(w/NLK²Ky6o:ĆR~J IqAJ!h%FҪX cE̯\i Qp@eceg++%CZ'}qhd<1'e~jmn}_]^:Q…ձCPSsqj"q9v9 P4w$w hyWh(C3HˬhgֲN?*7r/|pќUmPt|D |.S 0XsL% C9*NVFQvzw s )6%Com6}fOxQ2Lcpk^߆Ssd$Ns/74ts n6eAF¨ɅE5CDD7lŌ`W9N0ٿ\qEC#;&xH-ʾedD ʼnZx'uǰԨ 85Q9ÇMhEve=rTpWa}h~Cn=D;YS h{9g~w /? +{ЌAfml}C?)ё<5GݩLDwqj("$H˻gm (7p6Q34]\awXR{Sx@ޚ̇F~-;Hy#+L61 A &ܴXs cr&kNьon1g8E?ںEF?A}[8X'Gq7 :HSqj4jR(>*,?+qg(S<%Z=oŢV׆ Cr, a᤭ǧw8 ^.sxHзw>? F ڬ+=;p<ܦ]pg= 7yЇ\M@|:@o^Ja@I*9 Ebd`)CqcMdTY}]qa&"`:1xqHtױC\#N s7U]3e֍^qXDAbX4쫔&$a %ksa-w+*.t YrgrH2I M DƏJkCSv5ᾢuaw z,kto7ldcf6 R Nd^UQQ+Xw5ofqYaFGXj4Nѹ+\,0`xf0Qeq2Yuayaq<3G[4JU[![lgSf:A0Sۏ7T5Q6ndA^;pe[{pJ}/ tщ9m?Iuabt L 칝ߋL½Y0|7>(>xVy5NVq6uk ~TiCi 2vټ˞Yܲʓʃ08Yps!8eSZ:{{!ܾ)n#'!W& F\N YH}8\#X:%~gUo[ hpf'p qHiU8,ExD^rhP_٪ G&Qmx-9 [$ ۄ'A6tNvbsN~0 cu7ْgoC:-3EGa0H_FM ΂(Z??7jx1f؜ ڝ$>-9OKX`U?Lыz: @ϳmR<z h1T԰TjɄJ]d͜|H,5Bzzw:u׊JӪ# V,n+if.|)X[_2"> l%Η]lv"4П;, 6Z0ҹ ㊭ݑfWYF6O~ ^z)yo$8C{:^Zփ ӻ;N`N%/tZK=>.vZzs; @Mp:oO\6z4.!{ >ah3VEAI,;/ !F  `5IAgY^CRC"cO #IrGtGT,䔓ƒ`ERE^x&ltL Ȃl;˧h♈§ ShƗ|q~{XZYX9 ƗBi]񸞀<+8&}ZZKz>" q6>ٰx$+};ah?kOL=HѦ׭ӟ`^, ɤuY6=/jE41ϒ=NzQ4ZB΍+u+xt.x Ëf075YT8bLX?c"-wưuڜ ΄S|41x-B_`(A+%upK/A1l~&qBE3!B#@%6;n{i<9% ("YdL5n}פ1bTem€Y)'d"")N_/QC2VA `HXLj;^<1%DKӄjwQK /Ԭ՛Nl! qK|3H7I*L mBXU6ӐXCP <1 ؐ^ rƳ~ߧ9GTyG Kd_GJj.%#Z3 4W(ڳqdvl@ۅ ٴ迿<=Ww=,'G`ԩvkf.saII%w:,Ppqnd N؂TX.0,2FuCMf%(\kR릟Э6wha W8(\\ꏰw ӎjy5k^_.LHgf .Í j`\DJ"?rhYD&[j |`rSS"i=4G HĎ^JiD1$р\MI`Md>H`ʑ(4I>S|y+n$gj \e(w 0HÔ;Ɉr^I-ظ$s9 LM sw;1JXt#&˲ݑi$Lc?V&8D@3d46 }ZQqAMѹn:z0eapo0XZ)ol4J`Z %-eϖJ)n޿dԟ?[c!>FahU<.\!tmf>X}N|8[dr Uhf|+4ܪu;xyf;i]"mH/?݄cVتV|q f'' V:vv (ule#2$X !G9I|ć/c3`![Rp`͜| LWazkib4lb44t3HZ"x`ZN.lJDrd߿%n$vd]<m67']Ba8h'R]rZN&FC%RW@;u\v?Jc8Cأ} oђm}>߈k{z&⸺ t=)7aoO+~FGW9*>GW@v@4E(ng6㷴% My6E 8 {xiPD!R~-(8rdEDlA{!!Q@ęV"wX]J$Rd}, z# ]f:7ʃE @n~&HEz q_8Qudޞ4#37N1e.QIvFwtB:W1!}ispw8*Aԙ9IΩ [B.pɪ[|S\3R *`u蘀y_t{&BKdc_SPCџ?$"ae1g;2c%dp[>V]+@ʯ_+Yr-i-9 pAKR<+:O UvsF oxlZ¨ #-mB:}6lگyGrkAi)7xD=Y \Dle/Ghu#9W~|)0UddQ5J 8M7A\ 񶱀m[ՂPfZuHVkv;mi7c/@d/y tAH0I3৙PD7Ŭ1 P12rkJq3;QOK-oU@/zT% tc4ZTGG.Pe<=V"nObeLl,8=*I1pDb>H{4&m g->@\pt@.@}t^w77z?dfb0V}9ғX5M&d3ynUњjZ#[ ]䧸nU*(m.t]3Bo5ξfNM&`ű0o jn!3:6HL1bڍ,pGUL%&̔Nq;IՋh4ǝLM! ^A;݂xfc"Ǣ?T]|Pե8Re aAi6>7쀴 3G˨` F(0u*F`KTt꽢'!3pi\@62pDf+/v4z8e4뜉D?3 FS|F.wSPxvt<17c"ʏY3x ai>F7Ĵ,햋fPf DԳixӗ h!r=15\= 8y,t,I:O &ewTySp,{,JOU8e}|jH܏ߖ|j:ρݨ+'ak&7' Ac ],8JcYS!3ahg|Y[DzGUA6*Q7{N], شL-xMQ"BHrGIg[ I)! 0B y?q;?W:wBƎI9&+80bbǴ%R<Ͻtua&MǦIbs}&k$\Tdgc~Hתg^`Ê+v3ac0$u5IOn bXӿa8,Q0]3+O >yW4`E@{)P-ʦ:ziռ^bSZ&ۻUa![d-'|3G4;fN[*),{Jw"Uekp:%Jl(CwDa ybJN<(VE`U5Hjl:ł4R"[}<{H?04z-kIK:!-_G 5z[2hJ3ܲ 8S!GW%Ӑ5a|S2mOKmF ќjI{>2Z@)0V ׃z2†,l=h #x51(OŞ*=P3+$17̋kb|U*Z UcޏNLFWFZouc(y5si ϫjp$ך{ϛ;D%WIlv.zg%|a& =Bq@dx~#`]6UΛ2l"J;=QnyҴ,tB&Ayd1legA-@zr}R7NB9yѬk lȜp=o"y,_~xSN#L7a87mu90y%1%F,|, -ff:DW93 5˸ZVP':nTDN{1SѓOr@RS'nvPL4峙QYC`R+dv{')4Ax,,'&4tpP6WmM0 kF豮YxLW 8nfb{:sD@m ѭT._'8bxثVfr6?K"8B.aқ@1PrnKvsfߣᾭ"+ h:~}Ur> :fcn͉@i1w2֍?Ukt-`0H Ӛ)oitg0i5YB:Ip[p ;0$ c{*)PC_V\[M@fx8y# tX"4]Ҵ"ɱV'$܆N,"`92ZX`F/2l{?s$2In z*&_)oOiD',^_$T6&WxK o};1yQ?(:dé0 +mm{ /cⱬ z(vVBZfCD-P4$4A:mg%rV\NY;uR2\عfц[FL3ʠ@p2 yoIELFlgTY?w? ƞ[!׍l+p"xѪ"ԏl7EAh6Om*7i{uPdUz{_$O~U;)Rr }Er<6(5I|a`$$8Yn zR*&Y6 39oc8hla[mlBŬxnf7TN|C1/c##k W6J%I)r4!]'f¹!($mu2?_+-0&m#g5j%z$;M ~9?VS.9K> XZo<3?ETK,ᓭvkBR-縸vkK̑et^G:kϰ{R_mwfh~"Kŧ`/^q3筮sdS$p/`X}t N|}%=6"eLxoRܚ=n7v#4 :ʽnuuZW/ll %0FDy| ~톰ɱ9?iu߃npֽ\m̾lpLmdyJK[eҮG쇜Ky{&)٪\;rEmڽklcҾ?R©;` 녾Mg?U1sX[E~>NH8%"Zc؄ =6;k W-+2SȩM'$;D1:eʢ0'é*g3 l,CPjj.{}GuM$>cfޡq?.ȹÚqư6bZA(|5 ]\vnMi*?}5a@qZX' G[^e_kX 6oM5X Q&'\jofl_0L\d|&̵"OpuYFmB 2\7jc)b)/7=v1@ M'DVQ{iB;}5ygU@fB5=FI-(ezrDH|ʨ hZpNcHTB0HKǠȗeO%߬}%;=@&=n1* EՊaQT T\|e.SA d3K5dZfI!F} >d0VAuqGN\ƆQHIS$MzfRK08)3(BqȦɲOx|z"+lɂaLQSErEP.[BfHB-QOĹ){1QZ9#E[ x0PJM Dǘ VTtFp9G}Tirrt 2L ! Ona$1bQ_ߘ ȿ̚T\%]f\0 9%ĮTc3/!/lCcRHv`NN{'ԙNr z'nFi^ !2SXXqF [L3f51N2g4jeoSW PB&qS+sL>"RNYջq:"V?j^y4 y$H 6ɿFu8i8הL>G>!zGx]r_‘B.(h8&}е`'$iqwP\h>:J1,i0YۃØ*TPmO;ypEeQlINȂ4UPU ei4|>B8)7ZĪy;)*'D)V<,$>>;^mbI]>30x+\ˌi/mws_z%MB QJvʯBh+ѭӥ DovziH7[ȷ)_-yH%%Z;Y7j%ۜLmX72%A3' ȸ4]nZfHlj1ofizwpD3L4ҳr/lnJr5<*Jc9~ıhOe` KNE+ޡ)-Lr,."RE%4W[n[A2!LoSr/^յ&+pg&Y䗵f"K'&Kgw~%Ǡ[/["A>a0"#̈́df82E"rGX2TA9fG"De.E36=x(Na]u/a`r7B%N`$.!@(R v [EP|ed8%W\zޚʎQFit'og`S*n9˓y{F^sܯ.ܗf ÅmP_bɢ5al3 SlGp28ov1!/eHG+i߲fi$]Hr9'_.rcerkb*N03!h夙HdSJ{PTC=RpD*=,"И#+) E,ś,Wܶgc,L/鎶qK/C<_-7o4Z.8 Xs#Ɋ!,]PFs g(Q@e5J1 A'-2$v/ټ&+7˿nt_`lL{Czg::חַw&f:/s=@U=Oz|r>Dkb'N fF|8 6P#dLp9?\WCgz3RG;B)2uk_*ʳ87h.!݇0L熃?*^b[f"ax<аEњ@YŬ dߺY })R? s-Z qz$!U \Xx2u~-~޾~kQt~RM堪I%&f! ۺ3b}VvwuWm!g ؃FQ.>G`#uw?Z?ȼ 0]7/nŗBg$#C+me>Kx~\T](;՜=rYw6}i`i5dXڰ/WcNA"-䍄VF CnQ_H׵]Q荦ƪ*J1N-vq;ˌ o;Vb(洿>(TZ︖ؿZbŧQAXbiXRtYm퀳H[Ev6YqY2iC )4tC|+ kֻ9§x!BҤ԰[_G {ȰyN+I=8 b7[i[HO7l Eﮁ|rWkNQ^RyUVÌ?iހe.A\QuvB4I3fu@aNO-9BK\n ( 8AHgnZ?{peo˧K(d\̓t]'jst.Mhn dw;0ǝշtn\'Kl9cvշHϳ(qHBPI:~C*qZ}˥s.S"z =~ϼ/EJ4v H+H38w Ĕ`8$Ri{׷?XuAu4U¦_DƋZe5(8/1k~*d.>qn-*Fjoy;rMМ* PxM9DbDa >-Aw>9}"x'cT׍@][9)527"U{Tui- m࢒x 74!s 'am @#NX|rm}oEbN/ ( = C$shC)0` 39?U#DǢ U &D*՟r[#0k!yߜQ6>ݙ( 'vB&ꪈ8M2Yc%0IYv _2$Q H>]!0۪TY4D=J΋׽[D,z3L)BDOCUp3'r %c3#J.c&1W.+t߹R58.fR@ L"d|ܶާT׿'`+ V tOJ*h1|}:%3Mr3^d'U}R"4 TR”EElƜR85 ,`ո uỈDVf ~`FZYAL<&C`8/9.k9Zx|K\iϔL^MwOWRj=kz'YaT̅$qޓZc.N(|tjIն2eFnR8JN[ u6r e|2[_)elzf0 qqjEwbO͡'ڊ/ضW/)9l£a*^fC*, Qrk|blw}QG\ uufЪQQ4SRnP, s_H΋8 X7_hƖ'l5dn\LKrT $R&--+]w{ N/1"cr%QA4žr.x^0. cpTiLt V<_5ڞ֧ڑI)0Ғ OnWJ["{I pnax.KK4=X$IYPrƄv]F*GL\[EY{c:Eo 76;jO$=ˮb | iVu'xK0[gkqbqW8ͲTv.ݓ0-B\Uzw1 G"N!ǁ+PW`HJN&Fn굂Hcf}K 9"a:竈#Guv4fϓwrM_fc_맇GV"^LvͪR1se3Sy=t4~xY!I3w"4ֺ# R(8bK\9wKM^O&1&5 H;M&1̓T^P+nqc9#-sh=}}jy#XCaEj*Z",obI3|\HF<̰&U\X zu1䉽8qg}si!'NRSZ\h@l79G"/q=-N≷:횐g2'!ioy<1J.5P>j,#vHݗ5+ڽC4^v>c]~[p>Qy{#|6Q=LreANH|3'N^q3U.sI| {a.Ԩu<ʭEȼ7JU{ݷ{ys~9ΩRC 9պ73]CH22`fѥ`$3lW$}rWfY#f'Z\G&@ƃ+2-?kKv9vov"d>wB ܃u0l,jCʞh;8O,*JA~eQy ,+(@휹֩R"\/LXhQ5ڑᴤm2{5wDK#",Oh8PPXoGؐiow c\tPz!o7:|#T`g-alQyxeRWӁe fٙ(Sϥzl0y@P@)=;,@%Lc5pK_h5$ucͮ (og蘦KTFۤbS+^yElRTj1h2 VUT-п-k:o4ڭN)j\ tAg?"WN ˧ B loc{^{1g[.PA!XM<\=u /(`*m_Xe?8 S!87KA 9ָhY0c(dz;(:Z\xd܃^[pXVl@{)VN`2paW4el y0q1WYc]ؒ:M:z Gj 0]6%QS)AƖvzm F4\Qjhu/Q H#VSk49ٜ3L`e( @q6]QQQ c4=hJeWX?eĻvu߅X+3JGUpndXL.6Ў %}\ZFG5WJNY2TiDU0}=Ȋk ^ݨ$hck0r^S[k\b~ 6GI)G~$o?WWP 2U/VW4LlpW:K[.^}Ϡ]p9`fH&&l|(#xاPэc//)jܞqǤ ;W@DqM\f7G:ʯҗmƛWxI0˒ ' g'٘fJEjNA ]fH'Ef֝_+{(*n&7͐NQe2݁< ً*Z$|1hv e/RXՂ7lc,^ G|U}UH[gr~XGq*dЮkp]Vuwd\{1 e bb _+hS\Ħ(pq"ӵxK GI}EKrrYdWȨ:M!@˜PH'Cq<ngS&L*y*"4]֡F@*'/rn$SD'g0;#vEOͦ EbT]~{![w`@rz?o%[Pw@nL0,Pp%{jޱЬusAмsqfhUJÐ%tf6ٔHr H*ـcui%(^8AR*.ĿMSk^/p;jyu7wdY.[\fI(:Mxk /$`hBeQ4.հTŔ|!B.aA}S GJNK.ܮ܍bitIR&.!]* Gq!+3Kw#\Q)hXn.mIKC7J/nv:E$]\!1y44 CP~}b'UX iba8a.pܠ/E3>\YsD' f mP azfJΦC(4sx=<߲5+kJ(cvEA{"?:MEy`aDQd:Ԥͣf[!: -wiɾV鹃!ZrJ?;B)B3޸>cI*̸)zNwjL,UG&'EƝ1|7=m]#pG b:CSΑKN%cy*Ysw2&t'>(!XV]u 3#3ց |KzV;U[b6*93Mv:އ`ٞu/W}J>BEIgA.! g'D{\A?x8Og{dKA9%jr9G3^8!Xnۓ,d/&|J3ఄ4|>:ͅc3MK0'U7ɹ3]?G$x3*{mo|ȩ!^W^w XPbŶ6Rv`)VLrBZYBL_ Tdt*&tBM:wiM)Yýi:> 0>zn}+/*.+嶾c&Q|Lf*xԫDf>VЫAI !ƞpr^N){#i(~oh.!]lޏA&O@ϕ/ɀl!zm5TA(~ijQ^r7NMa Jn}B%2cL8B)xGSձmP0Fc;GC!'4Nc4rCf娒W5 U ֍ ,S$ u).9]2rmwo<4nl[ Q)@%7fnS*8Ao'̔՘ Ɏ> 2 J P,C͒[Řq&btc7\6!\CZS  < Ӆ=obeKإ# >u붸u[2ѵТߔ.HVѾ(!qo>NH6ĸYl8]b1R&c>Z:fh~` (Z\TqŶ`/&iw Uc;+wTjðvAV(%6_̩1~tJj  ,-fCrTw}4?fx.%2*ZR oDmo ړ)+[ q G%&W^d 0I7A4X+ʽ᥉dn3Su#8N|rtJ-4(=N[8Z HۢJM{kL?0ߎ۝hT͎XB IiՅѝEJ؉!3˜9Zbp'0p.ue9Жq0)CO[:Ej艱GF^`ms.ڼxUvZ^^x[B E 6S0UѩNOaη bvig3!+L0ֲ6J-n5ֈ*(QǢlw_+PuV#o+NO`jgG,6i8mF~6p^"<q?M΅Krkp]ң[e-cwdZfݐ_IĄ@%H&RY_LU$G}F 7y5Ϧ&3#ӈ֫Fd =Wu|7km j4m.ތ)%ϱ$|f %gHI"$J\_CEP>b)~] wHPH'[ .K_eL/Xb!`Ǐs빟뽺|v#C&$Rh1̍N1@%͡CV'I!-F\8U=0'q02q<;AqHqK{B!kY5R92OUHedn8 )pEPQU*t~3$0w|y:DoDY>keBмޓbn&)Fw( Xf[ $GS;gB*Z s%.OK,mQp&ǜ }p1sSץh\m .Aec]nʾ&+a2mv\~G :FT/vxX4g D&3clȹn~8+v;96"U^f++0w ʓxUՕ\ciwD M j8*]f+-IqkkWJ^պd^7mLjLMC8gex2Q5 Yz15 EaTk5&C? 2*7Nn ([۽l~;(~U (9r%0mO}FFխNǕN[1ox ./9i0J`<~>Q&/7 n]R\9q}G'=DY\ i,ިRKE.6/f}>9Bwll+ ,qԼkQ%_/ko-y _&__Vk_}~_Ճ_u5i%]K;_s'}4M|}ަ<)ٖgه?__qp>>__?$+|VH1v&M̅y]ۡ{/ϡXHXyQV^mUy[S~r2i'?ߖq.^w}ܐ<ݑv~kڗ(sK蚌[=O9},siۓ2: +||F/ryWa(mo {zh?gk2{|Jƽ-^QY2U=y!sg#2`Xۯ|t/ݓ9'6^_?)76^Ͽ$ʿ{-;)П7eXI?ѽ:9˼^up/|='3r^enf(#_u-ksWe\!ae峪4u>(m\3>!AYς+{2F|?~}@eq̟(k]Y| Y2>?\7eͶڰ{-s϶o~+}1|@ڐsIˇ32^=igCiCAy Ei)H?oK(p!yXUiK˹9/\oX ݰwMMyTEϮq\6n֑gUWwN|2'?(9ni;(qnIݣjn^ůM哮~(k_{_p-Ү z>?auΆ=#gCocmy|_\+yU> ?auÍ ++?U;-sڕnXwst6euo7@e3+>y2=|Kg=!﮲aC;)NdV}B>}ݖ/G6냺ܰk]Gd؆+nz<~|-eM~V_ܷzTv]aű|}ǵ/_7Olŷ9m=-Y|zEލT7K$C~|lAv>نӷlF8, 8oQ{ח~wAFl';wkٸіpsq6Nqqx( dB-!7Uο Ka<2?\7S(!po_IZE(&w"H pscl/data/RockTheVote.rda0000644000175100001440000000301611057340007015024 0ustar hornikusers PUCDy!*ȢB*"C=((=IQq̔1pR1$eDh1{5|3oil;˷{7'8BP !,EWvii6nsb& ѩ@N͢4@ȴio5dbFUtLe!SOLU2(3:ZtL}e:֌Le:^dJ2 kFG 2ABuiFG THj\^gO?V}֟Fř\] P `ԆCup6ѹwhsF PΧ8ລ Pzzǡ|*R?y'3A$0NJ} ,+Ā> cx m~ҘTR'”x$U}Xo O遀ascT(Mh\"Ko죢'E!{xB zf(x^t'=+Ns `,xΕ{/6'!8^L3-p)x vPWk6d\ӆq'.;2~zJmJ(Xz[ >M/oagI%@>|Hy!Ͻ>ˇn>@Kn;}f?ߗWo2'wR]ci/Tg6hO=1t:U㲟V&j]G1mfXIn>_V*S'j@pFG Ri91jy vVRՊuTJT뒢JFHҕScbSe/V'4̔(%^gy8/D=_9sQ? כ89!J`! ދ@7yrƬ`qG4N0x2#ڶ1gbZmu=“ʙ'A>|,jiuM56w%-pscl/data/prussian.rda0000644000175100001440000000205210555214104014472 0ustar hornikusers]oE񵝆&PT>E=3;{"Z^ *Y!BS9/_ou/^f'y}~cu?dqUUjAnG~(~joۗU(?^zX֢X k~c9qXTw9sSП]T5SuS{w{Nr_ת>2kSs۷~ߞ6vߞ9>3w ֌?3OSf V]YSCər=,繾er=uor}k\\!׏~s_ϻw?y3Z\`z0s7s=fpz`z4s}8o^uxqU߮>4tSNm>k_qEd 7V]lN_l^_rv|U7e#oηҟ]^>]d0&o&ԥQiҴ JJӗZ]uEwΆlȆlȆlȆlȆlFchl46Fchm6ZFkhmFlFlFmDFmDFmt6:Fglt6:Fl$Fl$Fm6zFo英ONhkZ6-mmEjFjFj4 MhBЄ&4 AkAkAkZEkZEkZ-Z@ h-"ZDh-E:C:C:-%ZBKh -%GzGz,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,Y"Dd%"KD,u\o|uzQjpscl/data/presidentialElections.rda0000644000175100001440000001435711357753220017202 0ustar hornikusers fg]v{ۖD!UDA v[y׹lw ewYfTРF /Q H$hp(*F jЀW"D1ę>|db;3a}{ysfiOw6G>zСk]s?;x[+ثӭ ?Қ?wԚܻri o}oz>״{Z~ ɏ^ڿ`koYϚڿܞ3:+zﶖ!ǛT>ԺWꇇu?0]h;[{7[o#jv,},݋KUuy^SΎ|-֙7vԞ3_O,>M}C.;;vU<ǁi_3T{Gꇁ/պ:4#O!{jRwǑ z+і;#5^{\ϲN5\7?)or<:Y#c͇_ypzڏ,_RQӷfupqYgǕCuXո ǿSk#yreL,W4lUNM5>S,O'["'?]Df_;+꟱KRڧW4OZ'Sֳg7!>z)}x>}QqZNh<&eYPɉHWQ })NGU>#Jޡyԓs]puu>)O_.ܮ-j=C<.j}b~?Ժv\O϶~Wiu'/jvBokh_վquۖuMQgi7uڊӖ[]}QutZ#ur jI֛syLi[˧ )O<}JP{{ʯљ /h>hi۪P:?,c\wu.B7\ѺwR~hzy(?ִ^,JCOޔ<.Z[NZ?~znʁag-?}yJ5>u]#/Sr_}Pby|Hʫ+=Z}EGu܇hi_<i?ӏ^:u?zԲO)> ~=|꣟5Oǚ:hTc_Wy=G٧tʡփh}<-95ye>~y6*zy(Ǻ>tӾaMjGlqrBi*PRC߁r_:r:es\G[ʷ|Enyni˫QmeT֓ݞ|~UjɫAWʑɩAkN<{_Ou|oyPD̒{|qj>.x(o(}U_2e?P_Z{|li\ʟ2Cw=,iq9֗oc z%Zz/.qD~t}ֱvO>?z:SOή2O[ʏOk ?RҾ\GqԎ%ݏA[T; z~rTϢ_}+[^Ky9P?hޟRM+цm7u,ce,gY:ڧ n(IG/yLzsQPߢe/jZ;j1L9}GC?,^e?R{4K꯳?{e=]tnwg/~oXPKW]yKʗihϝ{é\S{$>}jO}}^-j|V7Ӳ~a>T~Ou*JS^MyUKMyUW4U-_۔W|sSMyw7,?ДpSMy7jY>)dy[Skrs4mgM[|NӖ-W15z#͝n=~][#Ϸvuś|eW}ʁ)rA(rP룅G>rB}T1L1L1L1L1L1l1l1l1l1l1\1\1\1\1\1|1|1|1|1|1B#1B#1B#1B#1B#1b#1b#1b#1b#1b#1R#1R#1R#1R#1R#1:FUǨUcTuQ1:FUb\p.ph8:=ah D[ @-mh D[ !!!!!!!!!!%%%%%%%%%%##########''''''''''Z Z Z Z Z Z Z Z Z Z Z$Z$Z$Z$Z$Z$Z$Z$Z$Z$Z"Z"Z"Z"Z"Z"Z"Z"Z"Z"ZEh*BTQ"1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1b @ 1bS K ,1Xb`%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xbb%K,X,Xb @,Xb @8q @8q @8q @8q @8q @8q @8q @8q @8q @8q @8q ͈%K8,qXa%Kx,Xc%Kޣ]v\ y9fͮ x{~>ۓ/7sɸ9*mmN7̕ yG)mi>ܝ>9ͼ杕c48KV`δ|93o3VZ{sk#a|c eo}T(mzc}%ؘnmxmY8cmM=f공93wZ,j| ̴8Id;[] ell+B^X~7W~ga|(MVB+X?m+m?}/Km,6YxY FXf~>-糼<-ؕ|Όc`OX[>ԛ4Yq!ԇЏ响GY>#|Ͳ˓Otrw/-Jimd,3,>?cm7ԁjyhŽ~/|ivJ5_,?̕ɝwu< =y ={s` W֟>sꋥp3b7يys]_{ s9l+'y_.ہ%<>yxeWnZfH'ҚY6ϖmXWg#":c'EecS1{ <(3Oop+?Ʒnb9Ob8<,bmNbwYx6>hycX$"cmj-^m9b#Vơ+oyv#Xb/^̹-/.cmg6KkYb}'14"X])?Ym$&cd0i]ˣ?FbmQcwE͓u̜EEEn/y:vp<ެ4}KEG_1[*[M^n͗o1v],EPĻ4YìhX}Icm1GCdɱX^OHGgq'̓}dіEuHfu=d7vdwdb(O?b,wY:7Vm"K&[F)W>Rr%=W6}_,M??~Y4 xݣJ/=|޷珩]8t J6/Ϛ[?珖f|/ ̫~[|o4Vos|3AhcO;jzw٘~/Ka7tAwycGc/|Q?yMcWț+W_+kQy;^ g~xM꽟E~qCrOy4}_f? ~9Ïq "O g+{G_?O~vm͇iC@{#7x_s{/5z~!G"<@ސ;z;.O=rŞ;~Jӽ^m.tȑ<-_W{Kc5; ~|G/F;s_ѣ/|r>OľЇ~||"xU }V ߃7rouG$#d9/|Č?6s!Go8yo 9"cD7#؃]o@/rEZw!|O|<|n1z<{G|gܼN[yCͫt6m{x_9p}>1=fqЮ_3'+v qv 8x}ާ粞o8QQS}<~.x/zl.7r.#;a}#=z{V1㭿>cfۍi:38%OظZ3wc>a'r%}B.3zٺ_G_|BN6G50uy cg-3w8Sï6^uz=D/|4}EnЅC)_[.<_o0GfbG^>B׃EO~>؇_3.a5y:l<^<)}=W?&|8fzסz^<ܮXg O7M#>[ zW%Guz<<ޯ 6ColP?4=@/;#?egЉݠ |F)<d z_o13|@ p*twŎO=~nc>ۺR־wYS_}{1{ymL㍜L7Yyȯl< b?}ь'}3?x_w>lL~1wݖs7Ϣȕ~O[~=¿wl[a^cc/⨭c|A?y;fN|q~ [}Q3 |߶1ߡ?v_vyl]yzb?uԣWu>\UMy,m{>?>l>wr^->ޞ+tb<a7ثsz^q_om\4<{9ںg]g+gc{㧠:OnLգ'1Ǫ#wuv`A9t?~~Ay2m=1Zݿ_{C_z!' sb=C޶`Wܔyz߬y*zuyz= ?K>Ok=TR~Yϑw>㹾+>>leᷯ G/̻1=1=?t4;K=`<9{^Q6~=Woi6?`@?v]N~#?oGz\?UJ|>o!3;ŎӜ/.u4[9X{c89P_xUIzϯ4ו Г/hO;G[Gֲc6_zy[{OTSqlKǯ4Wy{ޘ/vyom~ cLݾn>`kGC/؋GnC`h豯'}O ߚX~gY?vs͛7&o"81c54~Tvgҵ|y,f9M_cX|Wc# YtxYѴ2L,6ƫY6f4t9Ki:k߷"4caߪ܊_ʢ! ߖFvt$o<;y޳J y|/U c E" ͪ1"F1s]:OEErNEV bpՉilǧ0Ɵ 3Vwv;cշY<kϳv/VߩobYt5K_g۱,ܲp܎qKp̣)b,>$ ^VW{]ݸUdŁYey},N˯7;j[ɏN[X'A?9NU7]?^~$'o_O_f>?ٜ|G\^ܼEG^͛[c/vkܲM~9ZzG7<{=|>=ϊ=7n8m4ݼqW~ӽi?|{_^7oU _p:ɽ{ݼ}@|s|>/>?{n_oջw9:KsjN/8{+3ÿ^ۣҿk=Í]v|Y:,x'&t}N|wtd17~oݸ'O9GC^%׿[>zɧ+$pe7q)4!.O(!ѧqMyscoMizU5YO/;[zcwxer'w^uѕ\jKX~P|ó}RrtzHU<ɮz:ouJ~M=!~EW]č*;~v|/ Ѝ돤ex9/8S)ߗ}V߬W5=g{דqt2!?n\Mq5xS_HQx~\qMoa} C{&{#Ic]zzbW}n_]*N(T_m..ԅo_yJK'﯋ϊ 5Fߒ({wveuז!6Od7aeIr}Fc.ڏAnK~o9:F?":WP?+>#{HM^7Huv_@X+ˊo=%ɋz?SMgYyѷėQe_@[},9^y;#mv'hO-C4:x0uwlMq"ԑ~[W/vjNCrnI3ӊ~5nʋK9]ʧ{R~|Ϲ~8Z?pS~M~t%uv9z_>__NotpXc)޿tpν7Q}8TE`Y29->[eC_m.Zq﫲uP[yJMyVWazeM=Zk3!uxQC_XT^^W^6yGK|;/9%?D!;dԉ&{_uy@땮yS=(/Z'ȿ)>4?_XCMǑ'ZvǗӲzAs純'6Ծ u}UFg;+#okʿVﯿW,K>]Q\J>= {+>oo>߭^qI߷Ք(okSp.l-:'sZ_i%U/I=}ܗY?OqI3_+O@/kny֨'TP=rIR.CYݼO{_tcgϻ#SQ=׼޿}mުoM(O}D#_;U_W=TL(|V|SRN. uyNëuEi-u[%5?q}qa9+UZv䷇Zֵ^v$DqDP[y-|Wu@wDv"?zv]p%?Ru@~|u@ĹUu8_8,>Ԕ4aSOQ|uc@z>Dk]gֱ]ũA㎏dV$'MUa_3zmu_R!WW%d[fC8S=}e,J/FT|<}صH<=y e]umW{Ww u^'RNDsEɶMW?w|Աz(rAWKhxT^ף+1ޭ|X~~(Hk}KZj8 -~-'*ď%4/vCh7+/|˪YHyk@qcYuU§);ʎִ_;#~SǑWTO]H؞HKʫ7_ZTG DOO N@y橿+gcĿ}kzHO=T _;zzRZ]wUo~@V5+~}JiK'U8HywǪW ?1y _Uu첥}gֽSՐYQ}oӗ(^Q=zOu}JE/䵝Y'F'*=ž*ΜQ}c$:X眒>R<;T;ug9?yڢ%Q_)_=y9u~Uߺgg7Yn\:֯KZvgY䟨7FW[u ձ%gs^p*v:uhk+Z&o^aUwŏoV鄞n5B뗺y,U(/R^\:wMz1\ J;E?WiL]x:s-ɯ!hs[uz-}o?!<ui{QyEvޖ}dkҟh<`]EC_ȳk.>{CK^uU? >*& _ZU|lj5qZg{T\Ӿ yZ]eCwUPLO|?&4:_ɫ~^}e3U'_~@ze_e})kU;y,5"쨦k[u:~(ze_wZo_d/e+xù?_z>9>7RoAW9X믚>y-x⧅/y֕}yśٜ+w<^{IߚGo &Ci]¹1 *ujo>fzÓ:6Ju~W]^Q`_ʏS}-d}E? QwMr'Ob|~/ᯗT]WyGqjIޣ?PWؒ#u*oNFg= +wN>8^Uo!/l'u߬?JnE/j/?6 sOZ{ FZ?'ҟ&#S~>pM[VEn}wy]y9: P Tqtߍ8te/}h7SԽTiy3{ܪW|MqTwSK 쿲kү ]2KS쯢uG8w_YOz;X]*r4?]Uζ,;=eῧx|¶$[Qe_zP8'\^s.oW諞V|/#NE85R^Lb'9>shMvyۑW9_/}:q:]9nުC9^\zD ~zJ_/xQXS}k}en'u ORzS?UY>e]BUw=_Q\+SU]wUrfȯ_ɗ{y?S89Թ%,J˱>(^_yOsz$yWXJ_WR@OTu5YG9oD\c{ Um\w߷oZWT`8ޱ!gˎӓ+_e]>uEŻ -Ӗwkڟ;sR&s 8z m,i)G1TGe1-ӾvCtr~nK+n7ӎ쭡}PWpp0T>wRxr?GyQs[Q''nWei$#ˏ7 51]7 7ڝjwviddh/0U{aJ{s崯 Z2j/W{?*A{E8%FxY,n{2A{iwdMi'xJj+mՅހWI{jv"ܝ³W5DşZW4AK|z˫ sWd@ fpN9yY@-/Bd_ז>?r2GBi+ʄ?a if'2 }5:=qӒgϓXi?^4 qpݮ5eH[ww}~v2qڐ Liz>2}/4ݴP;6t QwB|໬G2WbSMtjµ `Jcbמ ov9]s*~[nre0 !9N${ aan@>9@nNu0=X $0Q>vJ7ڐp y,uj7OBҒx԰:msZy )5͎ !}ķRrKj#/44'Z[w-ϰӤᏒw5-'s'#[$50[i׉f$%zj,-\ɣV}CiF}>ߴiW^BX'Y$Dalg){)-#5ۅ7h덑u8 _^wm4yInĪ]XSIl=r %~01I^ v sV/?yKӿo |> S;X`}؄/5xېb}]ݵkacг{@O?#ePb-B?AS' D|!C9Ow_Og[o6]'`gb=sk8Eeuuԥݤ!$bI Ʌף2ߧq֍X@8ta9ֶI ;\7^NIJ mvglomD"^EǨb,87+vmJ6U)%Z}A[SRul d:ysUڥǩH-TRvQfrm$KqW.L$>t?#z~OHESy5Ҕ::3j@HnN}k(Ql84I>;ڋ{[5|.oYRSR"[XP6]h U5} &>y UkʟwQ}:iL3H-tZI\/ .bQ86bމb8\Q:f]MBH]IE_3"łm!. ۟"9l"`ӵS5Y mKwPO ǭ_p*aH%e8[l~W^1='<`1n))\ښ:^f5{9՛q,=Hֵ#쳼I TgoK2TGK;o=GliC~E˩N{}#Vuo~f pscl/data/nj07.rda0000644000175100001440000002553611360656403013427 0ustar hornikusers}s$YzWiz=ݻ؀t{BW#U,ޒTӪTTIccJI9]ͪZ^C`?`Yu_" <- ?  Kfܪ3q&Y|;dvw](^)r|Է$t^(.MB+[ Ef|nwiW//['˶!.d[qQUy"pZOy۾}v7_TE/8+'Yyً5͉_ڋRWm/~FOum؋T,1 Mڎ.?x嗩)~ڕL:X]m/+Y{1G8Ǧz#חRxϋ>->鶯z1ͿxS}0ũϊYY;xFb/8YEprt{Q)ިڝSdIVtE{Pѫ<_d3|N1Sm<C{1ڍ}dg>ϋ-{Qᠩ؊K_x1<~T %s1U)۾6gtirm9/njGD.sX EU?ҿ\/>o4/e񘬝TOe/8s+xԿꛪ3ǫolᇪضCĚE/`JkJS>9//-Ϣ[UUd^quURŁ"w)] lUj+z?~n,:eً*m9^> ?LqMǑoYzտY׿!o<,姈۪~v| >ɊLl Ld,/vlUgS֓u^T鐕?//Le[l]7k~ߗRh㒥}ԼR&sv;|b֕wn:[q54\̓//81'' m5{x3j/v3//Y8Ϻy,^4b^~~,up]K]_*{myUluN*e҇<<ե49kOV؋2􉗹K:ҕ]V)>ꩬ,ʟ^[{y,ZolvLp>޸ȎK9?^EyQ;eW|&]9)ڻ.қE}F;7W1Y2/‹*T3;|ߖ~^}Җ?VS7/xlwHt_W^z,?J|x6Gx7UЍc]~ nx\nEmp};kxlKl]Uztq=jPґw|5/x1{S^ڋ?o{mS˺ze^l{~VguqC_t큗y/⫶=kxu(OsENc|oAyجHWL,^t->IkɪdK~/ɳGSݸDU⍩^.k/mK&i<({՛]'K.eǥSY3Q.tL:$EWN\eb5>}]?qkqO}_│ꥩ.uR忪ߐ|UǛG?/񆩽趣Yyc~j+/?o][[U1]zL!Wo <MT.7/[ZWAYl+j{ZRv|:x*ۑf"K/.dMտ.ddx紞$^c3MPYt壋Tw<|zڗ7"?/s/d> [}>x43n|kW9T闵/^ [MUWLᶮIuܶK]Cc{1)}ޚ<Nj>Td:ohn LퟗEwQ˳E靲]7KSO6_b7rEW20>3꿮f=Nj>dާ7s ޟ|2Ŕ~yyQ媿k _>+>ϫCV^r¹{.}2/""tM.꿶H~ֺfq /|U[d-}]~I޵CQtAھlOpX%ԕUۋ?|i/G՟u^ڋ^2m{ѤE[oV>R'9̥߇6d婬xbKsRΗ"EUUQ嫮4ëǔ{7_#վeOk陷ڭ-}%oYx̋1ke?ْ^ާlۋ.^3g/3rUb7[8'}srβU=}mZȔ^U/eU}?]y[Y~!^uEUmjGxk7|=-MTo敿+qn?Ѵ] ⿩os޸^}OSVÖ5ϲd'gY>dً6+[׎3rWǦ뗶^ز Yx1Yb;>EcyYwu [[P!-o-;w{w֟t76Ǐ.j;Oxq/lOn#k>j{]_llumW퉗n6mlrɯ6ۭލZooH{qMBF|ni>[1*xs"#z? cmH[-g?y|gAKn};Ý^ILҸ}qn%ot[y|@nlov֛="X6w#xI'L@nr%aLVAc ;f:|@~(nyhӝݍh-vCNKTzczm#F^L~w?-"j$֩nEt~ ~6)[\;=|j3 ŷdgN{D'66E6伳!܉uN gBIlVcg%=mtRn~_5ڛ.t IJi7:;F;ZcnB+̈yL+V;Aƶ@-R+ZT%w7RmQT> ؋k7^gL߆D뺹&O$n&O֣3fsޛ{LěܛJ;Vw7@4{jwv۝H}aI+J{;1ڝ;DC^;n y~5;OVcڨ48vJDc!M$!h4``;)k( $&$ o[^STy\_'.#q 9|l <bb::X!r m<~v:nj2궚xwi(fPތ jGsVpV*YU8 gulU8[cgoޗ$ӊxZOki]<]OEJ"U%HUI$RU*TDJ"U%HUY,RU*TE"UeHUY"RUTUD*"UHUE"RUTUE"UUHUU*RUTUEj"U5HUM&RUTDj"U5HU].RUTE"UuHU]jUjUjUjUjUjUjUjUjUjUjMjMjMjMjMjMjMjMjMj db*wވ;Y;a~_*W}>Y7~u&~wQxƹ?vNZwFxGt\$vSo7ok_=Pq4H!u_cP}GP6?BOP`\K e FTHe ǡ~*KP7xP?ϡoCPB]CCߡנƸc[e ^KPj*m_ }.]?vPB@Po@uB_P  \Ay_@P#w3QVQַg*TE}x{VXߨI^Alǡ oz6-hIhu?}O:+}{ldsoCr#}_Tb<³p܍n)T'<ő9 q @JTjZpVY}1|mN6oa8Y+=>z+˱RpRC"8Y+%WJjrRWz7zqj;Wzj{5f[0z8j/ީ䔻nTC7:Qun@]dScTj]z>W"١)qyX98<iC"0G`M#?Tހ F Ub8l|e7 L DSB~@M O LFC@E=,P.uEhl@Mu@! dk ki {e0p&:!cY^uQL K=9 #gr9sINIΦF^}rT!`S?N}uG9ts3 @B? ^0qܣFח6KHҡ'x4ph?:g$mme! ;8ȟ=x ۝-{S9Sugƚ~8z9nt^ɘ ȋ{]7C6 |-˫axh @FQDWqD?&.2z0;cC#(vSeX󞖾%m}F8`byAszfxO;3i))hL xQF(>'$LF{1(~B7fZO5(<%h4GAVVŊ'@v܃Ctٚyѩ@Zs0sމM;N:!6Rb9P᫜!CpSj(&4=V }p6PtFV+O#"ʇQ5WB\-W⎿;G^D4"NB#U3uրOOo3 C(@((A@}g 9 GpΙW1i@@wuXŃ ъ2"BJqiQ˗SLG*8NTj):0Hv:NߍTO94A'N!wME5p> OAExG0M.` {8 _G-{M<>r)UNժR_}cSIx2F`8/88dp^G8Fd n.B@}0Փ 5C#1!?ra48nC 0$yЄDF:\.֖.~vC`ҏAУ4M`8 pXϝcZOOPTJ=SLD0(xph#&bVǞT΁7΁$rv'AȄ¦ UMD >Q3@RttBk)WQ}$Zy+m夫vuMHjܝ``尿NeXMl}jJ,t}i0tTLD+k 9V*rų0z ̊Q4WD'M:~ꓐ鈀-`#@} tb\acl%#7 KBRXOܯ|h9xBGٙϜ#wӡG!?<<{8,[jAvQ-VI>}!F`{+Έf՗k)\z (D4FMX 6pĮ bz8cAhP1"y:>P`eÑQo&^e1ũ.ۊ?[!ˢgM Fd( jE}TRqfoK<#}=g{A0qL9ޛgR|i"Aޥ B eb@~ʢ44#0AzI&dBG\DK%+Jk|%wҤMSpZWXlآ;E,1 0`<]ӐŨwˍ@u?l{1~gR"<%H /7x0Oߏe+GI Φ Ԉl"ٸ!8l <ƚAWbeE&! 7w7|0p7)zNxd 3ch[‘H3xgC]<΢0L!]8g!D. "vl 1L1`|RFFg "t/5!Sa3Md)>F[ɤy*ϋsլ1Sc?!N^c`ABxi p׉{DXPfh$`&+YV~F6I2/y8Ɖ:&%Ohf0|nHH'ʺiwϡ b鐊 piN3PV,/WsƄsf{q>yKtQ" ^(Rϧ~tBAqOslO]C'åCs& k: 8gW"ͣ}2Eь9Cspd2#H#7z:7acTrVjQc덏_0Hf:8y$f٠{a'YcZԟh5J.ɺGw*0D$=~`86G럐o${Zf\/V/'[.UdFH 脎,$7*r1i! )< 2 IB*@(@cmsw8'a6Zq_);YKd!lF=xC r\)W4&LV鄁Pb6Hdpdj8zO8 > In:@o`}tϋ$[PRfOW=6 ô4Kh8Mg>şX^XeSsvξ)yiq<G<_Ă=ˢwp3#:4_X mC`SXI'? N.(4iS!' y14dl-BdV0kdJ%/.O{W.gKbhqʷ> )+UyqQf`ҿL^=\[vn) ~iJL7#?q = 4T Ɂw2 ϙFγV<`+%0.03Qdg'c7c>@c6A}睐)]qXKboE&̌ dPi`tsCvfLeԸ+LIc4;"Eeo$5Bs NUle LflblOS%%uj2Yr;<%} ]{뒮I|F{؋V`lGf VR,GdY Ʃ &\8^b2$߯ / |P1 |Lq'G>!IO |Z3>+9/|QxR2G.-h*,uYlغ![-[]2lp6aٲe#g;lO:!཮j,.jj..-< [[rj>ZGnj!jE; G.2@U98;7cY:21>}`gߦxM |XA|C ~%V{Fqq?`_koR6{_x[M)}3yrX N6 0 /D.e1p75)Li<\x\GqUAQ-{CsɀBOG|/i6,j :;ԃCM{5\h=¼nWkM}hezxva6m2&zں3s՜4uM0Е>{;@:Hn45utBTji{2;Ơz$7tOj{P" CcJ k{]jX߰fX;,{Φna@l3myna9ٚ1ɀ4| m&S@K<۰arm)z!Duu樞Cmf'vx7:4zP7x&@]SNxewoI;cV`, 3@J.JP. Y9Pf&1=uaa=3kXsAie^ n1i3HzvjP2=l[; I>7"N眾rQ[5ɺ]2S :x3dVoMz Sun>s{c4I :5. O*+9>Ϙ*N^^ Jt |CZDn!Cbi[ASHB歞Pt=$ah:Zs m^xfb+ jK;7> ԾJ5X=ư{OP<-ʂR%}1"d"+;T W;]_6I2;z}f_s8188e}݊D%ڝI t+0OiIՈF~:'Q)S1Q:Ғ,=S3EI\_nIێdљwދҢNqLKDʲ+j/u*x<;=__qdY!%㸨SqQ4+\c4=8Ƴ$&h\_qztkn2On:eV$%/j^|aEw :`! V)?J77+([lPZ? Xt͋(?ÅzIr;Iᳰkqֿ]lut6Rί=.%yU^HپIi< ls }ng)͙F-mi7!bR^u>l=s- eK yWr;IJ$S̞΢Y|)%뚋0\&x>.av:ﲗV&KrMY!a{Ū7>M[B⪦k-T=R cʷ5PŅ/T_˷2 Wb+߼7.M z8Qƹn*wP% eR,@AAx>R΅cd +Ʃ>LCtHk08%@=1}$\%j-4ue h1zo?9*Fa bnr\udTl"#,KzaIjZY:-jOˍx|bzi,N |ACdP "Ԓ1ȻSK,rAX7Sj\n ؔp[ԃS; Ԡh/UyDC$۽:/<]_IY %,ɨ.{K ],i׉dοWwƢP[vAƪՍu)Q9b6v *FEQՋjX)PVdCsh]eāuhq&|cǾ̢ꓛz\C;*=| L*cwws yݮ#U [}@"nUoW gۦQv;dTƓ^#6Zytei0z2(e+YߵW]GPf`ݩ(<;׺z4ـ&,2י׹P>EpKa3JZ*T*}9pMw/$` z4FRpscl/data/ca2006.rda0000644000175100001440000000455310555214104013531 0ustar hornikusersX p7n6)EA- n!L" 66ȶPGvvR:SUfh2 ̃@$ɦgwlܙs=sܻE-fI$=GC}IRZ qSde͕qSH)RܒDD&wx%ȌH#R&G.#f1| ؇/4 8WރJm:7mMw#B؇@5Bәޡ[QQo/B}[`!Nw [!KX/GK\|v]uVau8qO~Jz.BcC-d k]Wׇ15<'#&ޟ׋ˠo\pk> !NK̂|~)ϥqGsGu g_ ^.OooDg^+h.a>U^B?D,iu &}_Y+C1 =k}OwxumO5>8~Q ~^k;xG$o"lg~$g\|mPtA|G1⌑ F%sF6HZUS=\6(޵Kk3ѯ"Ogφo}x7LFۅz {,r7Pe#ij{qy¿gj[^keC,#ǛˑWuY)bF2t׉u}")ߟ98JȣͥioK#x_>/6c}y>J>ܴesDzӅ8%G?Ds#7xZ7#)z7OטPgv]7Ѕ; giLiLX뉎%F: ݛD&yHr0nI^G3 w^FҘ.֩o|-z \2 n;2_}|UWZu;aM{z㘿Zx?=xi+KpB8c"Oa/ݎн{(9nKw(Ow Nh/&_\)E=7@>.5%z|Z>rKG^f[6;m@٬_vvH)ȷgCӿ??eyggdwӸgu"Tǚޅ%D0_/;vyvy .}qpo`7FmG_zF?!9/î|c3kf;w|:?{c֗{{O3w~|{]6|?`{_>|Ÿp_ڔ\fz}x?^Wɚ=f=L[ck.]]vR]u:ZG߽I:]9$?y6[}vSW]/?틝68Dxl!N49|R.Oېڎ> i62~R:7]C]vIqҧ9I=!EbsRߦߤ틫ibw/l8ɇ]}ʋ8틽!13}4? IroRL!~jI닅!1!C|0)oSwg;r'[ wK3⣝GO>n-\ Ѯ Cl$Ea{CM@]vkPI=~|wo%$XWپ_C3$Vt?/sbRLcA?ؿ/&Ff_nNæI3^Cl!bˋ!Fig>M)!un_6d-tλ:z6}t3T]wwյwvv3%1[6ӵշ4^}}۶:ھϻvu= ח{Wvt{iX} ڷǾ-]o.mm{s˴y۵spoܟʏC(g{꭫޾8]vŵ/:u{٭O}Zn ݶQ߿*͏igۜ]Wk]Pݮmu7>^C QWnǴGz۾̥y6t~^/zym[_v;3^wZnn}VWW=^ lW8tLmi?qxyd۾`]wUЭ?jϮv]TE].:U쳭z~_1PSޓ݊}Xtj^IKy\v*'ϔkgil=+b=?ɓҿݯcgC;8"[\I8᭏NC*X,[֯κOG/yE]ʋr]x/v\/ɟ[*ΥGVk^ =鼬v(~x|v}U'St*tUQҿj:/J׼2to3|>x,׳ZnQ١MUt~OC߬+mbgRiևo7+:zcS[Q/?te<{/qS8kw^gT]WEy^$gdoո+~|XV/τ7r-<Gģă55ȱmkwOo)iԣxدWd.v1̎wkqFCaQqZS=_UT^Ii/W^-~SU:yj],ۑqTGk|sϊcix^yiu^!yU]YC=PŲ([SWkԸEvf/|1K*tsp]sG:UG;bۊ3ogփ% KjL'YsϬweK)Ƀkj[UY^k~5>:G»ߎyGj-QA?gA3[2.yܗ^WUTW2~wءd~(iԫIEW z93?P߈l=_ѯʸ>%d>#*?UY'i.8ک5N'?K#;n}\__{yyGK>Oj@~>ƉUR~>y:,~EgEC=K^|k)ήh-5ju]RNw9;Qb^[}(qrH[?7Ǫ[χj(??u(/uU31ѫȼY%N$%?]$OoÈ5I\kx:OYQL?:z@wMUk?:xP|_ -[ 7?mNL=Ϳg66S޿^˭zJrTu\*maK}s4RڵT7Zn_5i?zԻzf3љ5ܓ:n϶Zsނw{/~kM)nwbM/~yzoۏM"mm9~Y-V 1!ŎMu?>iJK7eg7KZ4fl_jR|V֎ R_`ZvRvfK_*$mQl!>Cl7r~쯶_.>]l#O;G;;w;wl|iɃ87?=ӃCq=hGJڣ';GZb{^xo>x7׋}?:=[;wO|)_|\G]ãO7o<=p>xhr)ۻ~accOn{9Hjp\ӽ?)^={Tཽ7n#k>={W*Li6O>9o'v>'4f6ʉ/'>3Ң$'YNFdv^=۬gzYgzYհUV [5lհUV [5lհUV W5\pUU W5\pUU W5\UW _5|UW _5|UWP5BU#TP5BU#TP5BՈU#VX5bՈU#VX5bՈU#VT5RHU#UT5RHU#UT5RU#W\5rU#W\5rU#WQUQUQUQUQ{nrj9uzNiM6QDmM6QDmM6QY,j5E͢fQYj5C͡Ps9j5GͣQy)L8~*W/}ts+MꙞpscl/data/AustralianElections.rda0000644000175100001440000000243311360727473016617 0ustar hornikusersWolSU{VpnuSHTw׿67}N[;.԰Egbg0QQL]th |@EM!fdbb<߭(BɯΟ{^;MN(._M*Jt&K{ݙDZQ#D^Q1~xӃeL:ttF/`nE<0}t/Gf$"L?iCL'g00ӣ3Y<Țy!vRf[tb8,:3h`)6ˆns)"*1DXIezB3>BA:B`cjY_BhBv"x!w+l>Z >VMZ`W2fA <\j\]lB U"t䔫Equ]ژ>2z&"]Bz[i$"ۗj?'"{{!1NwB B?~4Dh7 },:F+?'I#2!Wg2bћX~-BcÐhӈp3x?𞰙X/6Xe&Z+87Lŗ7s@9|*DR3‡O}!4 |d><*|s}!mg}?ُYX௳&rԹz],_ՎpyOG(k-WZ#ˤۯE-s+y @Fԫ}W홱Oq%ܰW~ 㯲z,f8>m1i־h?1C{c8+q~u~*R-FXp_h\7~.6ejڟY!yJjuu,v|$֧@W׿pK=s\_| }|zyašdq-9[p}]@:>+8,,3vܟeߣKp$RةuCJY_;98Y6ƙ7~d ~??Yw5$sޟ~q |'=eLy9{7wI"XtnK`Cp*OH#X"COJ)'Ud/+x@*pj9%kIQ.J^I*DLuܯ suqpscl/data/AustralianElectionPolling.rda0000644000175100001440000001253011360663710017751 0ustar hornikusers] py^l c3ˏ+BIw{?'[1v !LSXK+w' 3a0]lؙdIiL2Ӕ[;M$.44d`&ݽ}O޽O' KGJ6ݥ/ki K o_γ,aXR2rY!gTb.- kw+ɬ53r뀽Lg  ̞Sezz}w~? ;>E"M7!DZN1Nv{ah3X}S7MS2Mf 7#)Ny||&ӴoQɎg?d|{?C:x\f|󜇄.z%?3}8=Jq'\|>?乡ߪy:.c#GK'L!9:19_@Cq|xD.QsWq}![p)/aDu0<:OWyys)h߁<ŸǕb=Akc4P3 ?m^٦1=ҟ*.lOuOSҮ\{O\nS͏r^^Ѝ:r\^Eʵ|U\*=z<+E ~'_QM 쑼_|7?7G}4?ӊ^rK{Nz66?r}*>f_o_+WѪ}B>?\.|a:O}Tr?Tȵr#UT?~qɩ1Z9 Wӊ8_}WcA<~NS积GگӊqW{\N7>n 3Z4P?]Ⱦ ,wzz1F>|:6}>`|7>}%Y;L^_ֳ>?3ZeW AEՇ̯_@ 9^SG^BsG;":݋}cr9/QgZy>$;aQZa~u舜C0ua#rvN8!gi?-ُy i^(?䓧dG1bB|r^.'#Z#IO >꧝_UQ'Z'{1χ_^i_ðcޅ:ƹqF܇.px'?&-HsB𚑝f7q5_yTLA.y ]ls$ ~[`}߸*2 ]!mۙv3RHչqPxo4lv`]x9^-r/5k[1 /"#ł\2yq bM;P쏫6jg |"%/gs[$"KekKA_J_zՠWS 1`/@oBwAw*0hBU"ہcSA? !}=c<_~ ko k[|2j?S?| K Ӿos:ճօw/^qu%+A^ D[A:]@>Ґ|ܾ>Ao&vsAp!-Y;g D[@v;@&S/נK |* [S]~:>֑u۪/D|+91bq;Xw12!0z^֥+ ujoA ǹe ? ZZρ qH2,܃; <rX<&5[t&=o6C{ oaVe z>;G*뻺;Kz@1U廜r&=ўcCNzkC<51$D Mi}];o];GFe up`<3v s4& D6jF;R<4S-AYFhDg"O&MiwD T R{CXIG=7lFaK[FhheI'iӬc3sMi޻ZX1Pp04X˛Jw=~+C-DݿUΏйYW)um/VR92X,T"\nFF.G\QKM񔞰Z5-oskA;zq|M̲>o&llJ;qng"ha}&Lߔ7Gۻ7b&W;G{) c%"H|9[ihϙXǍ Tl!2>RR$gcԵiۧ\*J{rM'5-Jycؼgl4W]Gh9nt֊ 9^uP!{NNЎD覭kw9qsN:)kBđ6Ds.>Pwj|u0dj BHuvT̜9\2FGʕbiGWtnoyz[O㑤h?xFN5.w?TU:Ǘ65QTachtǛΧ71KFnjɟ4,b:SqNo.z,4LtΠ'Ewn/JIEl2[N-"1qA Xd8;sX(w*f,;+ vd屒Y >gNS~<蓿m)Zgt̲{$*v㒆y^'vxcqt}?s=lJ'}:&+ݎzL%7yvۊ%kaW}h.Oqn|-, 6=0I[N@f8"!}F3gd[v>ΥXe xe"tS"D*M&N$[i.W Ţ˸i*\v= 2%uR=t2N6&K)}; OuODXwoF=DC&gAgMOtbw'q_&]2d Orԟ͘Tv߹;Ԫ|ͅ~co\{s;3'sWs'wzŎ9Z,UJqش/*YHqtù@|sQ P O<ƵS d,VV؛ٴSodul>Φ-C+vzC^.il/iibI/lnzzk`ボ\yLam)k;;nziM;K} 'y'Y1ސ9i3`M7.sa]EVBZK7o䳹R|趂yk 6e#?3>@.,r(UwO9)XI%3oc-*;)C/ٳgߩ8TU4o`pscl/data/admit.rda0000644000175100001440000000132210614223274013727 0ustar hornikusersV-l@;uRIE@au?h h `(MitNѠj `h`8h hhh (wd[N՞=w^k* cL0ѧC+3[;CƜǴ(r$1ix>{/F\a׎{݌7gX;ZC<爓_ ŗ\2S0ENqK3<'>*yQCo97` ܱc}o8D~t_.Pןȩ:ֵ}K࿕_Ƹ1ޘН;VH3o~B{3MԹyT=W9sZRr+s:7G><RE? 5Ρkb+w"g:-VیEt9m3}iݦoz,w?6Ek!;ǻ9moF7V^V-Vxv? (ڧJё#mhV0QKMK&} j]RZZ7-L--?PE pscl/data/absentee.rda0000644000175100001440000000123211765762344014435 0ustar hornikusersYhQ;bڀXB4MպR.h`LMiCZbQ*Qq"nX|CAZ+ h?dȫsgҼ)b> *Rpvv8wtc,jvhO:+>頣ч\SPFsn9bro'9d(c̉sre9[ z,njӞc cA4P*cm/-ci;hOTm np ļn=gg[QQ`dyxSa)36rX>ܝZJ7?uᦃcP=˴sJ)ӦMid)9喲[&\y/-kb} -[3llxe'lLa j-XPgAԂz VVI)lSMlTojk4xpscl/COPYRIGHTS0000644000175100001440000000056011172012641012643 0ustar hornikusersCOPYRIGHT STATUS ---------------- This bulk of this code is Copyright (C) 2006-2009 Simon Jackman The count data regression functionality in R/*hurdle* and R/*zeroinfl* is Copyright (C) 2006-2008 Achim Zeileis All code is subject to the GNU General Public License, Version 2. See the file COPYING for the exact conditions under which you may redistribute it.