Formula/0000755000175400001440000000000012511004346012046 5ustar zeileisusersFormula/inst/0000755000175400001440000000000012510770244013031 5ustar zeileisusersFormula/inst/CITATION0000644000175400001440000000133212127325732014167 0ustar zeileisuserscitHeader("To cite Formula in publications use") citEntry(entry = "Article", title = "Extended Model Formulas in {R}: Multiple Parts and Multiple Responses", author = personList(as.person("Achim Zeileis"), as.person("Yves Croissant")), journal = "Journal of Statistical Software", year = "2010", volume = "34", number = "1", pages = "1--13", url = "http://www.jstatsoft.org/v34/i01/", textVersion = paste("Achim Zeileis, Yves Croissant (2010).", "Extended Model Formulas in R: Multiple Parts and Multiple Responses.", "Journal of Statistical Software 34(1), 1-13.", "URL http://www.jstatsoft.org/v34/i01/.") ) Formula/inst/doc/0000755000175400001440000000000012510770244013576 5ustar zeileisusersFormula/inst/doc/Formula.pdf0000644000175400001440000034750612510770246015717 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4033 /Filter /FlateDecode /N 76 /First 618 >> stream x[[s6~_mf'q::NMgSitHF}߾H"eGrad$| Pi<3L),0Ǭ3W8ᐆfR2Fa2Hш([<=wL=VtᖑIIf,U FH2FTR9HsF92/b`^kQ|DcڲP)= ځ%# 4 tB8 J34XMaA<1E_g1,F(@8Xxl"FpjЩUY WГT*uN{-͘* (̈1`=M;_whYG HLEdfQku\XѲqC&m-ZZE\GlmZ5vo'e5 ;b?Wd<-\*?`r˒}ԟwߥ&ϦUɾy*@)j_Oӷ M=^d2]fL4'g9yw s063ql C̀8yªU^׼2XGqtp?>Bp6OH gHtlhPRD#[Dˆ/Qu&Ho5~>v$xCKKN~5WYYMw&w Sbdk[>&gC)SԎ CAO4[m 0DTAy a'I&:!C~1$ywr|v1%oĞ?G8ő8//x-l2@D)NXPtř8cx+&BLL*KqYdzլ*Go&ZDDu>/KQ+NH߇AF&32 ,p݇LGo$7"A1poz  <1͏8ʋjmPޓ'~x|pZ"XȾ؞-ErlW`+>":*rgCH? L5).&^ /2&=/I tޡrpE9 Ijw?.O@UtE;V(ߡXL/ٚ mTSx1bWo觽eVt1^Xp=UrHkuULSZ?Bz>`r%^givenJ.d%[ \:xbH.mL R8*@)tn9D\"3LJ^6c(X-1JO$[-&ªaօ.QZmt/cK#R>}fw{fm_ݲ76 r^0{{Om$ re7IMf&26w:P}8=&#x9*5Ne.^]jJ&C׊2g.a_Dg'Ǚa.5x>z?u>dzm}!ߣ%sH¸|Eg)74(hR&eewQj̸-b/vTMtt,]Q5(OHr^: *[wZNڤZ Vȼ/M~uq FOMxfk'F%]oҔTT[Ak`m} EQ&C"A3hBp<ë|]'#$ roŠ 37mYΑ@?PG*L(Pi(^1ʤ\,Th^NLebtk87**.* }Gh5 4nr'C/m[(N+c.J (CӶ*gULޖ&]g3KuB:s`s+:br+&br+&br+&br+&"zM扔D$>sݎcj']ZrjƴǾ`sr3C D^(t4D)i_(#tR2rDH7_( N]bhpi"s s@6+|ऀ#IfiCX@|Iu:4U]%F}6̝C&ky@fXZK#᫐h(Z4ࢴ< ס2K giBCPZTJU FkǴBipi7p V4-!iZBZIG#y `u x}f-^8NY.t08f6rqgQ:\\eڙA;(wa״L [Jf1~nLQp+DIϭrmiRt\?P@UpO+ӔV49=-DjO?+ dk7eGo~6vsNvuw.YFZ6oڼY *+[.sތSdF:W[~NO]iwnSǴ!+@Ř2Kdf7 ~޲0x<$ɭ:aF߆G I.r]hKIc&^=^VH;oΫ[!g1.RAʶ3 NQpp}48l`ݞ%߿/Afi#ƅwb ܧ!|)v_LfgjiL:4G8z3N)`uO[˷~J%pSǢEF_" mn< oa˃,d_T+ }eBYoMPԪm^_o X*pCjcz[{ ڹKs=;Mm‘L뺠{ڐ6׆K^v^u`R8U.ZWͻQ6ܶiy< [Ck ;us-i1MW֒_Ԛ6h-sӲ69)(@ߍ M_a[$7

KX5u*#jӊ@O7,SeXꜿ!Tfw30*l䅦!Nͯޕ ?WٔԜ'@Cݶ ?DOS~M_k/UҎµI&&DCta[Nrp6Z_Or6 3Uendstream endobj 78 0 obj << /Subtype /XML /Type /Metadata /Length 1338 >> stream 2015-04-07T16:58:44+02:00 2015-04-07T16:58:44+02:00 David M. Jones CMBX12 endstream endobj 79 0 obj << /Type /ObjStm /Length 2599 /Filter /FlateDecode /N 75 /First 647 >> stream xZks۶~5{CovqLMNLHJQs= IɶǤ"@8{ ˧,e^0a,1N +7Z<^t:& !LHL)Z,ĕ, bczL) J,bcR {&ƸU0H/Aa4jb R0eƃe:Ge=S!1JIiڭiEdZLع!4ӎ& AahR #cFJz噉E`H*S f! 1CHL.a: YCNlsʜXb\q.v_yl#1C( fQX^(L; ZAc<,H+aаHu4td a@#b%&AaK,4Xc a2+ wF'iM9yr8>,;F=&;Z${_ KL`=ŢesF=>{X ,@@D.^06yE_g~m$㏲9K' >J%).c /1/=RcKըд3sgދ?|zʲd6.RF[WuG]1qcq6ZB(v:F0J{۽r:!mvpĸ1Le6y 9Wgm䭢6JZ\u/K\`Z܅  !L,뵡뵶#(?Qd|ɫ36|>|8)b<V|+mguKbE ]UE`p킣;TgLQ]P:@r@*+'ˁ2 nGWp D"4)1;)l6Ve>'l>[Pۅw 7JH󣃎s(d:+M`09;fN"i&yd1!S $=;wp1 ˯1LQ96DX-"1*qx5DΟb>tMO $Ōic}O?5XΔBcQ 6":Iu: tPiPhBO]tB%P ۝xF"0 UDH(b㡜5>JIn+HP}Ry)ѯB x:* Q>ݛuG8φ%ҠgUQƢ~T!%DK-(?(cw߯( ؞gOibU{|p?"GBt: ̍=~_9]:^j8G{S/r$Ө43)zl;\kW-@k(mCw˃C^d٠yFmgyL.eE6 `-T77m S\bu]IS4;:5Nb"7ܵRHKMpI,"3%sA9 ݥW82Qɇ$qM:71]UG{/YYP:) Gp,j\=6>MDl,9 XإohK8[\bڐ]xT 94UIH|5"ӕ7XMxk!\->@+.&Z3IHELU*{V9<܅FWˍ).hC(%C} ׭RG:H7񔩂ZJtcG);tj\ſ|Ng﷽oq֍|GWvw5|'6WN1vx42x:0+m ۛ w Id;;hʃZc~N.&RբS5]뎭/sG=܅4k%b֟aM?IV1-'ռf*biG5&$,Ӻ}Gt[X7WG>b\L{2c~c~xc>S>ͧ/ȇ VMIU?$ϲ2/EQeq@Өǔ|+^})+_+$1*t'"PJ¢:,:cXϞ>;˿~vetKIwer⧑oGV{HsI}xj!k[y8P 䎷8JYxj_:Cن u]z/K3H4̓` йآdž3:m*mU]T*2Eg5qd$)}%YtW>^Q9 $K՜M kEA*S7> stream x]IGv?P) `c_tόm#0H2leV^GI2[@i(Smwe-P>d1짟JeZ鯕*)GiF-)+c 8hGmEb7ߟQ6֚]JnS,A"‰G<)(i4(ggɤ&Z;ĤDw*/bjԬy 覿ۺ$, :/--]L+k\m5m܍Np4{$ߜ䛟A$/m嶛oLw.ǹM`8&fX)n@~|S7"l"q909(S0 5&Epɴ':~h]مHST Z)QS,d#Z0xe vt]KſwCTpg€UF nrUJA$>H $R.0x(_w̷&5;CWҧn85!Cf`ߩPB'{KЩf+q>6@"RUcZdBf2(%TR ]<ʿ'8 8][N!9& )ӰL9A=1?"x?@V˖ VBz 9 ,B]`ZP<`_.Zu Gc`8z/o ta#i$xmb8#NGL{B:~Vi{i->l;)Gܣs?>Z8ɡzքX~qL"yg| :BA=۾&WL;AQ Jq0-8VA!ڂeؗ"ѭWV[.c5|#X.!x(ޕxV XpMC,LF87HqĔK-@LCw][7ba;.Bͮ(vPVXK8}#x,%$`0\[,;$"ȁ[*1ΑScFJW݊HnK(SW[!&}?8/BvI`2wG4@^ D%N3\\F;[oOlLz[$HRHY#SW䉧̒љPV_mAXZɕרtHO 8 bO-m#6.9kFCbn!P{1yS֥#b]O6mpK(Ƒ5Y&7įU`o W$8/T`FGlg:{k!l|v_Tq&ec|/{iP}) $ cvA)ПV8Ew @Ќ A5^pY^Z la  1W]zc53WTǖR (> 8\Vd\tؔc_^<2CaAiC#loG ˡioI_0/b3%. f%ȼTa{6`g-}yzCg s՜Vwdz@/P`!XyKq<*M׊%_+鐜F`A<ʠQv-My t?f 3`r&'O2´X[KC]u ƌ8'p!08']8; x +Jtë][ >%~rhbi Ft'^z8E q 5n H;.ghO zܢPE?E)6't2.(T 09㘞cWӯ4z7P0М]n9L%8~|E._A}"^f%mF  \eX鐤#ٽKۖx"Žjs-m鷁2<_ѣR A0c${VdYbke;->gar}=2l.eFӴeB`V"΁8[եY!ֲ4&Ks ~ A5&.6mZ3#ŰD'  <Yyx>1a>W0r]y1. i_{CaϏ@7jbm8;zmл׫}{kOO=s ܢ+܎ll~X`]WONWɬ $:LcX>DB~NGGꐗD0T X}kOO=x*QGqڮ) IK%#D5oB pX#tz:`1 4m9ԠCDˈ|/T2Y6>+ceXz [?a7JK%JBΏLM88Ph &nfmXhxn-p`d7+jzkbF-jӮRG!2eȻp-Hꀗ9ڤ X9-;cto@sp!~zw+U."z@G&lJwP;`_d{IX{eҰ!4^xn6St{k{b^s0MBD'/[6H_.(5ShrK?l-]- u`hAZF]-:ac+Wm  xc<-^1i3M˜GfyFq6&b fh( mߠցrǢFJeo^х!Z&־\l?c[,@>At oq ̧ Qv4!FA kQYJ-ȣ= E6J8F38UTb!pYKyfTM$dXE M5c>=vd@j,]QCDa[LXr_UӌkeL] ^@k ف+Z=1`Ec.ŏ:51f al# 2qmU F {IwW DKN ,O`ȵ\f.YQR8Mս9r=IUH33[s! 蔯{$.CCJµ?F0xWs#G\QhhY1ё NPtt?oXhlB^ȿ%@0lF>_H~Ep5۩W"v}UD W,&݅ȣ䄳|w'J \h-ޜG;5GIht7_W`b~FZg}} P.k7W*0]ZC$n YSZh(GF H iPo-%W}/_+FbHń8pXu9B1#BûKxLxm/n!4VU,\(> 9? ]dȔT*mkyEu׭kq]gs0CRck~(Yl8s)r^EZ'6ZUGIiݤ;JmZH(3x~18 ,LR.Ɉg_K@+ּX):Oi>o@T0G#Zm[y} 5=Ьcf],ꐏ;PވD1} b7Re3 MwJr7DV+t6)Om#MA< ' J%-l~Q9ffr­q^eý)XJ6⠰4h m Z>C쒟sӐz0U%Fk~c2fH?ںL^XcaxșF4 2;/DŽo9Y=\qWƫ0.1t᰿mg\i08}}-˥#=V5H ,?pK5yXILֿ !RՅY Hy"]\ GQ[a~Ǿʛ\Wced0)F;@&q(rU$SXWYȓ`۔ڐs{QK5 `jB=צ6`d`'/ ά;!4b.{7f38WGԳ`%rj΁bDŽLC^mz >%m`KP"zx_prIJօw9ƃxe5&e=J][2]q1F:#<Fd zR'1IGԜV8DABrT3G0a&M˕[ofoZw:$~_%[Iv.r!kpc)j" !h"D#ϗ<̬3WcbONyQz]$6'IKPuO i"xbuiRH72|WJJd'd^(3Ҿ\VO4@ Q6g S3ey@IWR|bR8nQ3ED4W Ql&%rx9VafJsc^\%W(Mӂze>bOȻv%;%[.e B J#/ >w }Ǔ9 VO74&^+8M ;1y%dqc,CZ6n+Mtb1j `W(O[uGM/ʞ)(w^BJZGDbIf&c^4uq1f ٬I 6<&`P^Mi `bs fiʁ̙/r6b=_~@Gp]Yۻ~|}Qa%g?cƚt]/+rI%ak.% T]-}N"Lod40GL|w Nk:ƍq!hxvPbX>D)cAN$K)w?_fz5Sh9_#$qӊ1p53D_cB *YW$I*FlbwFgp#m'61 "7{O(%kt:RRDPIX xc)/rytC"㱩Jxb v)u vaW8lHI¿79uLƚ@ٳ2kX{Cr/jñ1W|8*Q9nb{>yU?/ Y4S_b΃%"O=pff3i8D1YȲgK:֚o^V"7aܣ)pW"m"W+~:8`8j[&,Pe(Q4FJBBo/% DEf!e@FBzv d<q,mq 9>8J6a_fS^qږ;A4,El"?<\!P6Agz:(uԹ:Qcz記o rAxޙJؾJҨ+E%ƌ-L*F`<t,ƈUSYt: ϕ,#s%_ϲb /Lc8_9Vl95`IW\)rv7{Wv=ωTwĶ> 蹈Ug\PHUP^|bdu?ӬsX IfDBwuD麁ύPQ)=1,De9o;b Kk3E02m鸧PGOzoVo;E l1Oƴj:A&N.B "^YeI vO k\t/Kp=&o#:N5e84`&m0_:g.[b ]ͱtfpXw95^b(וwdKP( RvD5eSendstream endobj 156 0 obj << /Filter /FlateDecode /Length 6163 >> stream x\[s\7r~gm70~HĚc/8UZNJq\2yQ$-мXݭF IYrR!Nї/8?I /óda`FTEGf?'c%f6h{&]:AHΤsL4^"&3 bNM05d3M0t^3A,< ;O6mQ L?d ]^f9wszWiڞl1\O;`$ʘsRM%|LD;;6;FEqF#۞w52.6L7AFcT?/? HWU ؠ꧵FDh6`'O2*2cTddm8tځiZ̸s _`cNn+ 4+0a|ɖ %XИ&5*(/|vK㝷|\c{ފ Bݳ5&#H.釐h/"1pz}8zAK*+w>2[bpջծ}ggt / -E%i–J,$-=kدnO xW{0/g['/GÄ,PpW̔ `ځsp41X,2p{`GB%/eTnA (ҩ@,i?YqMX^Nw;bfM.TЍMm׆m}*Sy({K="Fr"-ےG r C|= $X$͐4IQM~nӊOqM`U ur`qO4dzji4p˄ ߠV¤fzIL^weQ.~&5эB do;W ^c;6&ߢQylK~pU.j$qIӆ7$@wcIn#Έ!GE@: Ӄ9Wq%U[ Oh%\ɏG%4D9QA^rXÌ.Z'Sdίmu~v.W7zwFڢѲS)MHXN1?3*1*4@P0˳:û:C6a0ՖhZ.l6UH ;aRpXZz0!w K@'u]K$3V< D1K3e鑫 tkB@SOo2R  q qW:nvJu=fΦf)+qT| HRab14qrlǧUyjצSv{ϗg݃7{ l/E e4a0m&饤?ipBYRgr_g9UeDY72bɜWcb6 ?<\0:?(x{DlIPsޒ AC#bm/Ŷ2^zJ\頗Jƀs0i;}H}:4(,jy&3!m/qrF,gk Űl3a]ɱIA mZ풓sV+:O$ {xa*J+x%w#v1(C((d$6ɧ  tϦJ3T=,h#R3ԠG?BH-W箪dhXc۱ZHd*Aw+P#fg@Fԍ\.I %zQfI< s `Z"2hrcj UݿRg6T1nVfͪ~[HDq댊pS{ot`~Q ]#B] UU:3XBv[hD) ۜLmAdvI8;jyٔ'g^RFiJ%bOkxN%ROs@a*"L};YuIR: IRkc+) ^ 5s-M@e6=ck (esRT\-E.Ex+2Wmݑ7|{gU]Xbd\O tTI`"qrd;(@dd7q+_~ 'X hY=@ocprLAP[眃rN.2B3W"#0Vwcie/2\|Lc+&ENȸ+6u-td5t@den9R}XeۇHfI0}2ܰ˽a}fg-~|LnIȘM2.ȋ @9g}]V Km7H~n RplKHo1<`H׈^KqL]52S蓡DÖbJaG*'xcpcӸ8R{#.!۬)CJQ`2k qiofT'6v-:uV2H z\fpMn2Ja| <Ͳ!e) |MsM6$b2n)!1NkVTk\6[5͐zRaYU"{`L>$wfz;)NƦE:DPj=(KB"LKYM31}y)7i|)'aTS§Ъ$h1EMM"4?Lr,$UjVX ^xEzr/Z "ɽǜGɽ`{J2 Э7oV!gzˬABld Mk޿KXe<3EMk=bJ=eVjt% d*|sMI).-t OA 0%%Y`Rj U_r^.Iw% E T'@a9YǴ p EI&ЏDLEx~yRR'c C,[Z'R3ix7ƋPw(P ^H?#Ҳ->E: %8.q(eCbDϱ̀\7e<&]|_NM,yWlq{@5PN(ʋz6q_w@Go?f^O]_GVTB*S! 渔o{߅0M UFطGOInJMj 51Yھ;\FuǺ˱B8% AX& =pʗX7k"}yTh4Wg]7v 4U;:$ς u3Ғkm\.@5{gzRv#@Ϳ~ a6IJ GQVjSzCȿu8_qK۞/I;Ȅf)KpN ; ʽ' ^.lX܁/)YRp\ԆԍZ&P!=`Bj4E3|X3Z9M198\ӪDfڧ.ʛ*`QhN}+Gk [M5MTc9\.WT;_V~i/ч(+ϼ]j4v؅[Ji}4%\o:1K<}Oe/ɦ[|k)ȗ%hC%V2)ۏ%pi>çuUNù c/,{cX֦z;|8}6a;|O gC>Ӈ6gwYK|V@[NpҲL\,4hYB+^I?+|7zTa(tSybi1%ჾ =O7_/߯;-k !0y̥ r5Ο,ra ,p@ CSv]J/g|k_氫ftR:[Ƹrll\r|\pK';SM0k ]RΞµj]zP$%W P?S7PrT`r%bn; `nf|Wk .#:uhs(Q}D큵}BBO3niFJP[MVvhn [HN$w@3,Yg9Jdd5~$S?F-1*;r.1(Hݣ㐠OM8,gཿ.[˯z0źhH{(k-I%oE"b!,ZQk'za`}M19y>t"^TOPY6dKR?G~Z:c\d~Cv{}v]kXSnշbUTQ,G9aoclW&x,ì ;Z"տ usD74ƨ?҇@{hCoGD #Ulʒ[K箯#47uq_~M%!O x= l~"N JNљ w7L.K$Wudbr]dRyJQ^Hӯ3,Y׶ H;Џ.yפ楄8. -&W}0&E)y9-sָDTIݯ -C5}0 z!r0g`.7hT~9`7d8}9`P2*V0s>2W)`Q:ù,%Sb ZoOK{t?K5endstream endobj 157 0 obj << /Filter /FlateDecode /Length 4943 >> stream x\Ms7{ u : #;<2=k-(l )J(bKUHTWHn B#e"_^.W<<{L՞X}O]?8Gx/T.\x|jyc;غ>Xr)z#Pu!-z^M:@V :Vo1@6˕X%fvR3Ceнw4yTwNuoRhU;lu I40nijyp+㕊,V6YRF8۽J{?ٔ٠?0m&DtE N]`|#<1FFtI:͖U`Vqپ!Fg}6DE$M3d0Jj>K!?/OsuYT/~ (܃uLu -q8zEx e +]XG$5Y4d~q`'Ph #EYҦVb:OK7F0aI$mChޝ.!8cC҅Ad9c[ZSu9gPY0-%T$ؠ j#v`rjo YvSA:Z  bdp؋ ǹCoi9' $?í"w숯fܦ}kt.Igڀ{秎  9xׅ[;_0*òswnY=ӴƗ{كrw4bg(k,x3΁d!Atl87|SOjlM;6_^6vSӱ,zn!c6OjqmMUavimc9|77leHc#obqG!Q h#`dW 6YQmwDtS2cwsd =):'0eq-,"TȅNH:&vDDqN`mՐ@|!EmǕ")V+ p ,ߌ,gg`>fa;3%ԽO tCaFXvxeA$`s=z3DH6e}G@3ʹ8-) {TVnoI*#;ǒn3e$?]gaəˊz/.,D t![/ K@MSܞBib$E#ȋ~h&9[)Jd`f}c:rrUl«?U޴Pz=< mꓵ3rszD ]]_OAMoc&?%1ƔyJZwLħYǴIz":q@+^>5flZX 4'xxfv@6)ϐ*<6զM=;6YԼ.ޖ ިݬ ju@[Yrof% xx@,ɫ%k6=)O%s~ r4xT`ŌS=fS/:_&ڤoAjzNyI&Y4p d ==|_V͍EҽԔ))hR4/_S Jeoy_2eL^\e/v UL o *ʷqs: 7铳w`**pju^Uypp/Q~!w}4 6(V-ܼ5+kof԰l"ʄH8&C̲LEc9o7@/byL︪K Ǫv] Z]LaX+CID Lo;ꮚozUՎ7{Z{3Ad1|<.8θAm"-PaXӰEwK$;3<,b, @DD)q|]W g{Mmώ BУvt65Kds$5%{D:\1e;HCg.P&){Rm2V70I<=dI !i> ΫVۭqI?loktuf1@6|y7'Qyq{dn?+ Le$F|)w~xZ ך%YZ7^X|litIlp%IQWFct#;oBkA01Qsz %|IE6{`L Η"}`N7um$`g$HAA&>H/9if@)?jZ5%vUMCi>@a\`TmQb'I>㏛>Ri%e|Jo685cx&4_Sw/#^MD1ti\:V%YveҦ4smrI=M),b bk &3,}R m)>ii踠S NX)otpxvm~EdH_o|: O $=H*@!`U\hpTm͎d|SOjlMMV6f^xvlmil^l 6Umٱ)j38 *"Acъ^()y^JdAr Mq{(l8,n6lœYH/h>;<<']K)&7~LJB3~@ [y;*,E!9kSȫ-8t9\vL ":0w~Q냙Mg.55}>%L uѷWZ>CzA((Jk5d gBdrVf#L 2x(LXlH|tOD2^624vR}'r椃'W42*2=Ig*Cu:i/'|:4~.CpP2F^brjek=6fvvV!|V}j֣/h7e6?c?e=`UY+?<}ЛncwxORq~3Gi]^z:Kfkj¾:i_~jBOi??>)^*L:[Sץɡ:Ĉo[o'R82#jgILǬc!IUP2ȏ̬ rz6VKH4\zq{= s&6ٱO'ϕ$iWRt1QJפmqu.qb\o zI6rECp_hj.Oљ;_nJۡ{BV_^O6g`,Aݿ ArTG*ҁF_^Gh ~=1\>_|5u{up΅}c&Gwl3;9cx/_lendstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4752 >> stream xX TS>1$爈Qh γ򪴵V)8bQqHd) cay@pzJU;zk[}O{}uׁI}$0F"ޫv,ZlwD|n8Iy.fGRp;ܱ4]D<2klEK,vuuwY_⭊  Wa.Cc]f{腅 cDF<{K|Hlhu`WdDFUx ?0̢;=[W%'<9`ְ틗הv;[ȑa01> 4f"3ef2[6fbv2.Ufx1Ef-YǸ1 7Yƌc3<3geBpf$3+,2vLs_)9;lٰ6tn]ݏu2쁼ud1\ G{_;lsGzqcQU_}k1}c}{qn1p| 1q.,{yMh D6[H4I̍́8ㆷT3YWC~/NpZ *{hcWb钑#rE{(('E2;AdyL^/K>zژiW!x-]|$iE,E؄<>YDM%{q.lW+:V h?TY[#`P7Kg'EnjE,np5Ѝ(F8iT't|[gjSC`Eg`Hd%l)vLbzS͸բYr'n@_yq+4gId6j YtD,}rz:d/uFpG@Q7o=,GZȫ"( 7͌Mv#:#On7DN8wȳ>;C+.d/>O^bBo޹CtʺatI8'~C+#-R8 \]&K<˺8Oq]9e^f*@sl bd*y&@SAkPMی$8 Н" y\MfXNV0W&_Bэ-*+骹Vi]9ny,?*[MV~qpH0$rÍʮKO:B]*'oQ hMvf3%ty˝i;pvq+}O*s\a 6T9.Ued$=ZItitIKő  ,is#+ 'sLZM٦|+wljt!7VAX64W ~ )E Q*%;PRgAЧZ ZŬWHu7[At4Uuf~AZɷc?Bj;6<"5x+cq#슽xE,5"~j0 (38()C""C'^ѳhh1+X|[9- $Abc3 aՐjh~l\f/z)32||b;^R.ڸ#5 8]d:W zMh‹ѷ_tFآB{lUN\q.=<t)YukV-g* ]3mNz cٓ=cp+qdGVJ :QHN8 jn[򞮠W]4pOɓ#E;lqx'Kr|/@fޗ]aGoȟjkψ<.ka)Y 쥂xinaIImyl- uʭ}v^hO-V4W4WrSNe ǏU6$DP$ly3ؿ;Dq8!1r@mRLw,l|YomSstװP7ʂuc0nsW_מ=妸JO>L'7o@϶տ3vnP_RMj36ay-8yd8~M-wcx{8x / ydKȏOqqRZB^B.}ݲ̼&Ey/7.9W)aL$jx2g˨a8^*0tjOrzf9$S&^(hKP/}]>)~6sr}k{ڰ|\o~-pz^X_ $>=V_aqBjp>. UʰN0o/L&zmI?PWD*"BVo&oMo_Ϲ[7عLSO.#pw+<BGOPVJ9ygXlzo{]՗R}JSuZN$JuWRc5 WZMA_\(|IQ/yT27B:ڣLR ht\/3TIPŕ:3t!]~woFNG(M7}߇ƠU充fLFJWiRL9p 7^߽g"sU)FLׯ-*!+J-:2})q^krt=}wDbrfu4Ԧ'Pk}s[2!K ΒvoSb ;st7g*BF 3~u[DL=F.XAn,ElGJq5^ɢm؃>|f-8?!p?==#(oBr=ZP&(姠y6xHȤAnş/~ 40↔gЩ ,?Cέl&6 j:f ӸcjSjKdOkGniE(wwpdendstream endobj 159 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7854 >> stream xztga XLL -@%Jpoݖr%" M616C@PmB w׻m{,kf{ :!01wyۯn(0 ~p, a!+=B(Z5/`~A(tq]]Gt[c/u;l)S >c欏#G9{\>85E VSé5j- IFQFj Km>PqVj5F-&P۩ϩEDj15ZB-P˨rjNfP@{T85A`*)IzRI?Շ @/ՏOz zQIF0HP [7PXm:+)zFLsy׶z_Orƾ+Vگl4ö?@zڝ4g3eHz5J χ1l0OfjՈ57rnKj5mlJ*#A)OnFnq٨fݚz0AF}p5XdkChq<^Aa8?^w~8nV/WCl>EVV0VR vy\(>,.eܨNsL[{:D%hӵ/l\j!c|ka>88dķ~P->x53yĺm %j4 }tW< ựHMj3Z8Onf`i"E<~kW&yIh^*٧\?D<ˣY70Waq*Ve% 7!2#? y_â>X,1ӇH`:SiСpN8R~is3R'SV`,oC! m8w&rSkHˆp0+2d 'q[yo9!؉xI[&gC6o/g|oGq-C$mM*pMgi"ؗDb8K.`Q(]uH1`pgs7IbKAzƚGIpȯ4 mC، P\ K dU}$$jk2PC]TrBDIX1Yv{ȋ_ ~etVMf#Fk:<Ms%x_Y Xx%:W_5 FnH/3cz=Q!]9/9OIiVq>ac{! M Ux( иX `zh_7ODX< !6#Ш3 ѐlW7D((O?#)$ "wĈCDd~cI(YA}VCņB,a@$j?wk~p@- Eh,1Ȣ/⃿ZE[ Y8ʩ DS! ,1skj9$֙ٞbB:`D dfw$&l$A^gw<#CnJ B̑yNfৗCHcmb {Ѱ6gשo"8e:58H`[: s4NmqR]П|ܿ:>WSIy}ΒӃʛni&1Hi%-NQA|T$$*Cgdwa`T"~\\)s,ɏQjJԣE_?(\`rɂ O7}ISAn0tf9d崸wex[:Fgk_N£l<1*<O.MS:8:|] ክ̈FQ ~Gh G+BDYc\EU^ȝ @q 1YpXȷzm-$V#->oKTqߤi{&YJjlj)"2]a'hD<)B4.x=u3-/A9Ys`"lj#Nʪ5k y,DRs;\9$.wY9}GR6 69q#)OZ N/B.p!о&dGtZwhV:bo G3X<~D+} `ާNDNHHJƗp-@4b^K ߝXb-v:rz#J?`ne!ڇ{ Z̰VI7i:`Qʌ#sBtB\|9?&mad-Wa8h:|4/1k;ھvjZYU<(CU?56SMdB5'b]DjêL7 .Cl\]qAin5F|$y]fmK,"<#Y+d+ %)lBA19VD<סߘ2aCDb}_Hp3jz՚D^ʉIJ"r1?D)i EVQ0 > jUJHBdPdR (P05mئ- VlJ4@!SQ.wl:zԩ2Κ_C:Xm~k4K=Pfk>uAUǹ*W닪/mS'x9uP ꝝJr0aY'0b~Ӕhѝ m hP1x;ae k.V5.[f?AYŗu1#q`Y[0 f#:O=1 N4_4nDO TbAʁþDsfHP=E]N]JQ#O871l fȌppAݱ MEow:\7Iy٪'P4ǘs9#75gU QLd61W ԯJTzuzR*QDhԩr~\ ۬x:|(G hyCަئpϥ;0_lȜx)(MGc&v],tPr >`nc`} K)*y1 `+U5KPO.(F恞Hex1bWb&hZ>DS#߲Aߢ|F^ _p1~Gkt"hLu-=| xEd0aUMO4l;7DwA{ptEsD7a} ~%*b!Myys]wuFۦ5&@/2>c«$3ww>` oL$)>,Ѝqg!v%T0'O<)mWVUU{I>kQciMhŶ#QeԢ2[U1;!v'jҽC 4Y0F=H0_C]>xeia.Qp%wD%UհOOQ5y=DED)"*5g#V:> R8hZN|W굳ٙ5kK3@ev4u <6ږG&% 0lm&af񰱟s=hCSއC-9q:=d>]kᠹyv7lzY& J"$D-coWw:5цߩmC#l.l˚Uٲ[嶪K]JRUr}-^k -E$u/͞Ŵj̃"Ц哶xyK5cq|nv$PCIOn4{j+R}Ȅ/W&mwS8u* էܒt8k];9eKiL#NG/?RSr=C{.Q>yhf>nOxӮ]0 ?h93rzķطoDĝ=h[h+m*,NRZDi`x'[goX)lLC?'4?)!&9i)!kı؍zxhӌO>y6@1~3{UܛrÑsW1DT􆪣Ù\ʫ x`'u:T Id5$0v,{ !?+:-K1`/Su|) O_spoᥖ [BԂfSMm,`q5NL^Fi=G'*;|}' 2X!%:Za@}݄"oD;Xk+LmwfZ/M!*ӼteZZIx%;2Jt*i&% IZ]z*Sp.qGfd2_ru u Ax\EƲ(OwiWƢ/y=M/)݅ZE旁⿡ClAgȠࢠz}~v:ZFb VǓ*4EZPOmz̒9~O`,H1}y"uw;t @Ž^`wT+@sk/n^}joH+\bM>5q&Dj#oL[?zK~FV^vУ(^¢s*#Zaݼ6Ϛ5iH/{ܟa+DX_ ߱6jvOw Z Ot_r<#/Oް-љsu s1;'45>~Ѱ.D6Q8'޼:jw9̝cp<|+Dxk|X F\*!߫7LqdqdL&Wp7_ieL`*$`#:[)l[}a#l>}iTZ8=Urzftm#BRJɆ76O)ա W0%}AdnXAn/9La .>d=P ̃}5ugajSC9OXC%<[̰'?jv > stream xET PT(_w J""2QאX"<DYBhU4iմH':j:1L{i;g ]6X(5央x] xe 8Gn xiAFt)\vb<*Ucpˤ4l7e~!zp8Ȑ Oz 2oKRGjRNH nuha0V-O~&X.(ħ\C#T%z j򫳪M N$u nT]X+P2לP{L3?PPP7^v @=uFMb&[kۏz~;|GzRL*ߟݶu/~&cZ6܏ᕏD̕BEK<!(8Ópj҆g˂lOnw߿gmkd_r^D$XZ_\D()0܁o]:vC;ޜ1{$JnOBB!˹А^Tʈ lM+} g'zCԌsQ?44dW#LGz?!:GG8:)?fendstream endobj 161 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 453 >> stream xECMSS10$u`  *`[WouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSS10.CMSS10Computer ModernRS34O7ҋ#J2PG$PDDKP ue.TTB4)(`aa^}vrzj`ITI0b17|:T}ʋlu\j/Q{mo߻jluPWb  7 Ȏ ٖ Kendstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2293 >> stream xV{Tw0afp1SI|TRkWQAԢV"#<HXA^In<!3" c-]Sm{lծZmس;gϜswwo҇R(LHAJ ѫOoƄO[~n} i!3ߘbKxNxe 4KkVe茩 qzMx9Eg?5[ :sf)fsEqEc-䦚S4u&1G 3͚ fECFfYgԄuF=EQO2Ca&sv\|~.)ysjzBEm"M\j @NEQ[TZCQkר`jNEP*jJIY[u>3|}.ItGY)85m.KSMrq(ERcE|ȇB؟ER~Zf[\,ivy[l-:YQC He<߀x_`ɰM}IQ=2dh)/L:d{F`!+ղ QM.i^ P"x-WY@ӲYg EA^iGqč$-Ǚӄ\B%s8u$Ik.Yt73VƮVأeV XpxQD&K}:wƾZY`>ב*0v}o v{s]]M#ۢwƙ^2dſpB/<ϪFYK442?V 9㮸#/ |ϐ R<A+|PWIBGޥ辊Wi!7Bu~qnaɛBA`dzz{GA8c ыGyԬ& 67T9A8Py@GANڅνջikjmnGs,w Z*R/Nra+]/%Ҹ]DL-Zƾ@\8K/r.EaXFIFA^1b{RQlHJ w%›lG{mǽc-}E6%ԃ>?p}".wΓIXwήzCh<b[Zu2KXɔhŽx')@[WCGSSڜ!=Mÿ&jt;˞M^pkDhLUw; 0vHâ6%AdG:/*PɏwV}mz`MoZ1e`W@+1e"e@ls^bqlӺ}9 P6GuZS Dmog箈 2HY&yOi|GZ/.fQ?\24hȼ{/a3:QY{d/Yʅ қpZ-9EnqCɻKKQr~$廟ROԐeejSĦ nc2۬Vy?Q|=-A?9j+*^)-,n;T@Hxs7iϓ,HVӃ A)E,4.rf5Ih9Tp._:LwQPmJVE>⎷$[SuB‰7* 2jLh7I:KS6s;_P\\Dfᄪap\ol0??]{3P//z"vzS|B S&[ e<+@wF/|q ׌ :UJ(n_tCwj[//cW kKY{7R8 ;dp:]yn~AHј*?+%e.w~Ol !\E;o;咆lq/ 񫤛7Ou|ZvA[#TN#WQ#_-SȻRExF~)jv\# YUaY1M5 YŊ0AG_EQ=endstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4156 >> stream xX tSN  -"s rQIbH:$tnLtrv4C1iҖhLbk8^߻{EO9}k?m].}wuew}>|q<>?a/.Yu.;?  <~Qs:3݃vO |inTV)INɎ0?jɊD=x5Iq)IqCZ6i$) jS)ٲ<(.=k43 $)Q$e%e&%F=/Ȏ5ݢѷtYNvRfFibRfǛ&CV.9^z acbɶi+xyy[xsx[ysyxvvyv--=[[{E'xyx3yfJmqwMpr0~V^;!y ⵉ&&{߄ {,SN:1"-͘ÇD{ Uh; >kL16{:8d 4MpjvTz5Szs_b"f|[U _+8 mtk >-ȣiW2*:HZ$ gva*DkEsqq7I@)%t1O~ՊZ)Td$2@2:w:ۅCnW^IS,$C^<=?AL vV 7ʩY1-VJ'κ".+`((zǹ)͝$Bу$DGsTɦ#@63'u3}W ‡CV6lqiLP/l7x.T E#>:pҭ^Zŭ⦾eG/ԡ%8j/{}Ï4MXPF Z0_i"mNdbnpR  tpaLv8meT,?b$4as=ɒ JͼAR"W녏_Jjʌ] .jqQC+1 VІv3H%2[%`&<*1ɭ{ .\V6;˨1sS.1E L&=Є Ra#_G?ث\=\~J V jq[pSW̤(nl5h^ Nj@鄪>33Q}-Z^77R Ql fgWȃDfk7ء)j: $"XzρwI"Ǜ\2|( D>.@џD / r|ȤccbUG f3.^9y&*E`?ҞϢln^ZyJuQk' ;D/d1)Ypl`pv:5hT yGFvk5H=9'gA8*($(OܚfAO!$+'XVn`*o #!,UIa;g+ ƿЮb9N [*,ׄkNhB%N -YjWA]ʜ1}d-nv$?/]5r݆0+Ҍ}@ohK 媶B%q@0vQ 7O?R 6|Cu@4x_ƹMMdŎcJh:ۇI1*IŶ%@C u@yWjɢê`FvfvҩsڃT<{97aTK_ 2L[/fzc.U7tuؔZ +-kVHG Q(D-#_ʺ)u. c :uy\z <\ś_~E+ E(==%I\P;s?%;Ms7w?H\fi7]a_iNY? Gk<Yj sS_bhs:rܝB0}F*S 3#<{s1gOI },?,u&'psǫ;{s)mզn\{MhbQnT;uq&`*@p_4TC2PN8v t6@UZ|u cJkGAa\}jvqu Txtt"$@5dz*TfwZ;z:>: >mWl9Bnq͎"0 (q&'GЄ vXLdʩ bݜ07/`eoJ;ܟ5)j5L8k=2bW x:ʯ`yaSV1tL}4#š9_g 8k=vN:͍ߣzQb;@谛6SAʈj@%y~SG% 0DXe6o.q7znn={5 ~_O4۵a4ZrG@;]IҩX5Mx"Q޾T B&WflcLdy#K {ےT1&V;h'`L'fWgVQXL+8leH60 b؝;qf k޶cuf/kޚ9bF->? Ѩ%$BJk&iU| '-: M+SY5Lmǫ{;;R'pA S!u4c4@Гued -ʏ8G^=0[ү t # :kuY#V*sqkl~-Suy] O1W K?Vu{ζxM>yAyDNܽ,_ܸCSOTmsZ2:4oU쥵PE ̼cb^`X^ N}qVL[+&Y4y\jʃiĄ]yJ%˹mDU #!1v&7f-=wXK\Bn6u*,;LW<'Tݹx{dqo Vq?gLx0%Eվrѽэlhj>ֻ4=4>ɢɐ=* _;u=>ToIJZ0Cv:CO/WP"Ɉ @$Ɵق6٢<"W'ͬҖV5VXuyq#: l`lpc%9=&Dv(g\tyGɁdb]V!b`P<ŠWBFsIxۍvo}׾b PP!]f*3.h̷,a3t^󍛍dtQlAkl/D&evY[5ضiP&5&B*Za%z /6qȈnaV\}n r^l`?f5V#0tb2~ZRy e: g OmXU QEB9YhZ 6(:l%{HtS~HmɎ:Y~"6!`I]f8)R𡾟m@;,C]vtbj3No-t}kuK'+c`39 y H} C|vr}zP[Zz `K9 ^kURIZjZvY^ck98z?twصe) 8τ]Ȼ/<1P2y2{ϟendstream endobj 164 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5802 >> stream xY@T־+p(zw/^AbP@D., w(A%V,ˢ)k}1 FMLDs;;so;2CD"bO9V.Fa+kdjLGp0q0` H$_z{[w}z9O1mk;_7KK0Xwt VX`;uL&4_>I2`nAnP]WY룛7 $MjMGQR;?͋,. Zb*s\p ۵mZO/ >3#ߛ5}sl̝7wN:qNSNNQ#Ք-5ZC}@Qxj@m>Qdj J-R˨ԇ=5rVP+ٔ#NI!3RC) ʒapAqO~;Tj.eJ SD ̩e*1^lD}InHclc|dI3=_0 Q_,ߩQ@ffW ttw5_b(*8dĐ!OPi財yCoYxbqVV<,~fؓ× ~_(T"@+acF ?be F 1(E !wwMW2q!jTƿKkQ}ab^T&6kM%ݹ)ik̟jaB5 CT-ådZTmΆ̤Ⱥ(wسO-ò]y{u&|d.'C)3d |BHpOc)`,i>? vX;[kׯ8LЎ _Ј@NX-`Utq 18VJO%GӶ`DHt5*U4M 1oXI +t9a-|uH THOHz{$,90W Cp F~|A;3m+>x~v">=,-1HU;j`*M)Rⅳo^XĥKypc]6 DO 坭N O^.Bv]!l^'$#l^1Bý$+.΋_$@/w;1Jb<+Q9/ٹ #q9@2n1VP рs,Ǵȡ|a}#*^vË BB7@㮧wr!y# eأ^%ȍvm]m)X'?1HZ[TMVh$/y~Ǭ;.0SG5Z%pnlu}oHt6޲m#bl`nR>-,++d;cMTr.$fx8+VU|3OW*D Ő 4 6bt漧p=+7i/C*0.qmL0b35|uN9zPbn%5G.Y7ԓt(hUȥ'jnpy3jkR3o"dT/4L5ҡfU F"^ k("| A]YAxV *GU(.=*ӂFT"D u;H6bZD֯B| 6IFjV\N@1!I#cRMpڤEqHr/taduij~H-JdRMMoF\AX*@M($.t39vp$% 4>'S"Fݥ .1q}0kf&!]#'* 茒XKɎ,ZB媨$-.Du^܊> l|C72 Xeĭ<ۀ݆`- iB,$45ȃ3rw"*N,UŗOx˚z #RPtNo{2fBFQ& Spmyv ,37sC AD}`Y:} UOзDܞ]U%Ko8 6q^t]m뱺؝?w _2 ש͡ k[HXnp9qѣg>tƵΛlz.Lͫ 3 SSZUPW%߷!zKv><ߣ|;b&/Y8{GW`*:<6w(F9(r !/۾oRx/R91K8t0((<츅G64T5%br^c\;'Q#agu}‡Uo!Њ?h^뢭 iӏ޺i4~1 /5.᥽E03zc%nkQ+CQrAȷܻW~18@Zb'|Sa(' VE3sp{ڄaޒ܆' IK JR0'Yd;XtR0Y݃N1Fa-#͇HJSJCٌ:448$o/|W8c᷷n-mӪ@l˞L%4'K= t 剷ܡI`7UwϰOWBRIy~ӦgI,Yg<3/g'f{C{*g[K1lr )]>q= ?yX.7h* spX}n1NI$ ߝ92/Hx#߈BmT]%g}=-@#k8 y46ƂuZ//q (A%v,MO!WR^PUNa7a`ջWEF#CQVѳðK3HXw`K޸;:lfVtgTƼ߾Ð%+iCg&bλZN^bW>}1/yDcx<42PE!%\d [#M)3xb=vtD>T `vZW%}a!8YswUi(1eťQɩt".Zdff:WZVEW_}Z (Y"Jy~B!h5VGG& wAדS쑟U,ڿϭK"j^"~LJpA OV{IG̻ -T0. C0> stream x=ێuoi6ЎU8vd'1`@[yrɵ,Chs.UTwgbAޞSM篟kvO퓿<1]׻} Ox we*feK! ?óE?Oz_]ModǫJ.aiJS޿PJJv7pk.D{휅g[Jq0xǍXWƙRw=i2- KÖɩ3-<sD'P%)=*Mwx?lmQ{P 27l9'ؠ1svj]F^wo43x8C[6%O@Sv|.~I6nF`J@6xo܉^jM*^K!]y+\ ON6<, (J}N$,/ mCX@@7"4BB oT3a?a1j)R?cW' Ϩps_@Wqx8_f@0D+yȫV àU8,'Iگ: /Ed?4\0J`OԷzH` +qj=. {w1n-kacQ0gt >do0ᤀ},;)%>O$P"<ކx f8ȀO1U*\{1> $:j5 ѡ5Jڻm;B * ʸvum>╺ܒWV.4,ybn`BhPZɁ)EIz݅heJ%_0HY }Ll=!1VcOY\țyG(6V]C՚[*6v [ lf|q|Өtm?\1S_ku `sR.b0Tc)J CMy KC1K!P]wd_Ⱥ}tƀhոmHCf ޚLdmF)y!H%2VE##):Y%`Dʭ2%3 SHq {;?K!Kbϧkm#󉙲ղ!LZϮZ@L@멈KfDᢰɶz21ʚ_/^"spf4јѝYKHN>,ځq=E]iQءc\;A zp\# hw>ah|SB>2PՕ8&V[QGc7# +5Kw(X3AFYSCPzOO`zZghnU6Mk-͵K"' Z 4 \RC;M-Jl'L/}jO4ktd=]]|/WU4 '+apQYz0Ѿ*@U0n9K~KKm7UA(U0^2pBFq8{C&I^(#7 GDك1fY_O;qS$Z#j*^Oj%s ѹ[=bl>`5i.kC jԊg^{1J-œKs9[la}\sCuͅxV;.YV.*UNLTH%sL{żހՉ2"#*^t`ĈQ:DV\<:uKtR%ı?ɵ]Ɯ ŐS4WX^PFUhe0a"sOE8A (`nO  Z B*H A9ZhɳgK{Z?\v{9}+5&QtqHHEY)gU`Q1r4y l2b p:KHCV!{oc'-˾+.q~ULj .`' l-xorSmڔD{2vcW{mE ߍC&HJȹՎ4gB~}< k*˹jHǒtQva/p[uuN7|1/ꔓ#M6*a7q-Zm u i!9CFq%xն2@zlSfvϳLVw/#҃FC:KBt` DنeP#R9817isɋC4Suz:٣)nd,H?(tDI8fkcC6pr *+Ty{`F@Fq('q^Ī-/\4ivZcsa`M^Y+i@R|G5ۍƴj8GI7v+I,X_Bqq˺g0k}mE+}sxrs]] \O}#Bj<~*휨 ڶlPPˡn"#ztpX D|(\4h9&Ѝa8D{a[J][0(٥'?<TQJ]ޯK6ʡ6ZnMB~+HrPw}/:k|[‹.2 KOͣ#Mz"+yhY%T,K^_1,kv ѽ^ #D d KǿLK%\!iayi st=H msZ\}|O[rJ,gW gN2 l1~Z]* [7wj/'4#-vQEspnNĸeb55_b/ڜ&=K _Ko5-RPꦌhM>AO0TY/+Spz@Os{Y5Jo빂J2>FA8 aηAC*+S&R籑ZZ l)d6 oQܵ-w:Z8GO;SyDX`G#gk$a&;!ypV{k[R\Sbc2X3FL$+d It`!ZKNK l4Ʃ wU~6)Y/藿"ɝX HPr d8B\yz_U|~e]<>{x/~nm뵄0W_K9WHN5*|E4%3_ZCڽPgD'C^@')3DZa*.=ocO0"`$g]| }|/U6Iq2쏪IVS.a u.XHNG +h(LD[]ỹިܫ /RFB>l"pݣ>(O]*4bT*DW4WRc%:%j`uP﹢"EnUn} 6>kĜFmx/a-䝬Wڡ`m!en&(/lI~MNMn|B4%t>X@5q:!j'eL$&tZ0L۟NLxKC(95#qw "([ظ0@`&F ~`2V v)E0K\P)U2!@?lC+f-B\}6>p`ywr5T,]AiW7]TtÑT*%(rBW tsZ\?xIB_vU3leO:y<+bzAT ͭh_G|L LTvmlUB?P=)+5QR/)+e̐"yqEOyv@ 7뗏2ܤPa-գxvܱuQe\\e csU+qw逓.;$=dx˧z{eGvOtrF6}Y2JxPO:<~.(UԣQ6/Z11vY0q[G90ZZLI!$JˁTT{$$̉fQtKc2S**.1x|A)R=QdԺɵ谮w|H8nvHd-c݋Fy/ntWxRt2UGbc/ZZ=@\ }ѷ:Nꎶ v>H8?M(b1}; M nBӥׯ[TIւsmrfG?mt?ЇP7TE 26[жokDS:XaSPb$um{a1̛cAٻR>[Nw&/JbT,qrp:y .o}}kܥH3.Sgq8qZB%Q uNE2dE-~^xۍ'1_arj?./ӾYg契āu33f cP+k|t׽2~MIs]'l[WP,vU_"ؽq;ok̴Vi/YUxY8ۤ0۩Wk71{B_T)j7[T7\4мwԌ%W&πNk˱sHMo>EMEo~6ACv}~ȖMx/`zUh l6skgd <|1 C٪ pO2x h'6$[jw^=f;.wMQ"6\#[X ]'7~$xkU\5$@BN' B;N$akN8PۀnA>?y&ՁkO_#v}I/.i.ܾq;{JR3O$ X«T"4xKu˷"Nhr"MTU/ /@LhDpxm"QR%#$ )1бT V_ 0cџVp3GJ,,א0 J{bϒЕs~hڬlr]ܱ1*yԗה:i/4C4 oPϲ mŶHHg}'t` +$Iģw^\GO ;lpiQ+LkY{ z |1JJiU%)%M 9HvI p7_p y\RĒapfBIy[FsH"lvzzW$@'3JXPG0xĕg5/7X?2w:c,滚Oyz#3L|F2PC/K)Y8endstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2949 >> stream xV pea2M !i(@6b8 D @B&3d~=w2IHH29HfN\EvquE]-qWVeuڭ{=7R(g.yahyBg|pwj+!>.|O;Qp8Zv;T(FL}^iAֆLCk$M2eؤ&N4=G[6#7)5Ð0%YZCiəC glxfؤ,CfbmH.i>א4?#Gԟv'/Fy &Z @._yrq`q)X~sbgWjo$oO`K$pIRhvOO ?MVZE<'fdFoQё`]&hbMbz96at745~g5;`bТWPQ'Hޓh2mb[)et x4<<2֗@\ܫIu6--+2>=v{}EwHӕP*ȓȨ=KzC"=LS5c)KFfdȠWȀ>W7~,(xg1LlzDJb:ӁcH]]Olj)|n45{s`嶪R(frmumu/M/$D."` G]VLK2kX?>vFJ~(J52)w*N6B^| kBMO%Ǖ#44^S Bo\8Y 2n!l?d9`9kLV/lD&0|w`{%EyY=ݤF:獉+q_Jdb Dol>b h aSe°N LywWPH~1 O~}^)wXmBE͞qENΚz3뀙!4y&ÝF7~وG8]k^%꯯F7MFwָ`$Ii'd,4yBjj(>-JYkCߊ)A 6ϞrNuGao K -rEa  o Vl < LLCM )N)*ڙo-֜ `PSMWnE# \{t/)1FZ:;J %Mdlj`S̶4' O0y/凯Xon:N]'|<իv8te+*jb WEJB1k~ޚuψ&*uN8$W&IBCmC g5dl)ӉDIW+"+J:XޗwГyM4׼D=l.SF Y(*/Ό6¯-ua`psK fBSYm`Uh;Jiy:]p3i|/wc?|а尊ɮ8wE,O݁(4oO ]\w[*7чԎVQ#?~Vd,; +v@^wHG\ o'*j)}&w$]PM.sm4!Q}ǂ>KV"J_-Hkr l&zBpBU1~Lb؎#S\x_)-g_7lsC֡8?;~)3C_;| eE+r. QM^:r9vu/0WZgc\sӂf>@~(Ϣru[&wǠ!;gXE>w~FX١yyBra iQ@ 0(ڜya r({I{ i&=tb(F_'z~K_;V!z"Pdza7hߕ'T 7䶔uD"< /V{eN` bh뷾s2{aTѭ؆['l#Cvg!w ?9m|꬚U0ҦWR"݇R98={Sq)ѼF V!/OvGFkKZCvnIm_` 3Qn! [:>52endstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 454 >> stream xcd`ab`ddp 44U~H3a!]3gk7s7Bߓ``fd,(os/,L(QHT04Q020TpM-LNSM,HM,rr3SK*4l2JJ s4u3K2RSRSJsSӃ%E )Ey LA & gS{='85o~Wte '~ ne׋!۹Y}} ?D+}gb[Q*ߏ~?{?> Y=˵o$̖_XKO,.pr4W]x,H.z{ݒu~λ}W6  'M}쪌.WG g/d4mn9.<'yxT;endstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5611 >> stream xX XSWھ1zQ~ԹAjuiBX '%l *U**j[;V/s' t3!<ܛ|]ѽp"߲n)oFC9n_Hh DrAdwﰿώk=} ..-I)Iɒ2gά1S'OX(N/Y/INKԘ-})is%&eggOdL"Iٜ(JLY!Jb6 c7?KELI8f(!Q,$bb(-}xE$suVv|u} '%oNٲu[@6U>-3/xnqc'8irAl$6/Qb4FH%^"KRb2I,'&+*b51XCL'f3"@&{D &nB %x_DObID_O, Rsnkt/ ٟ213~Ϭ>}~~;}_6pta37 v "jbTzMљѯG6$j!fkWL5~B:G"Td.ި RA9!l2WAe4pP 7fT>G'K(AQQQ(  8\?ЋM 0]rX o:=Y 0J,t܎.^45R=V|Pw>@* j>E탷}/;a5.k6v_ps"Q_Gǫ}`o dҫnw{e FNAb ju.\r/ >#a/5yslzN:8~Ǎ<GT: T)+d5E ?8o.xi)"L>-Y;;6X^QSN.zo?'$ދbNNđh>vbo?ըVT>ǁ`; N 4أ-oWMv)ڦ:1h e%-Qq5k-:v݌qD(;r^r,<VySS[(Fv6G k0Ik{ˏ>}MZ;U@1n:orZju a/F%@Ԕ4nO@~si4lx 1~b'NS@~>㲫ؙtb͋@>+~9_}?UtQz<솒z.}E}b(rJsj敄Kwge7kD6pm< ɻT1hT @ 09XK3e/HԲ"tj\(Kp^ h$ %}LMM \]E++x?Yj/Z:pU L #9-`=i',DƫdIjSQR˷6ZQ83ͽH='z$c7nr(D4{Pc!0⅕=h=!k%] BࣈUגh`+w(AM/y}]\jAt5au˺kzo%Gx\uKu`K)@[fErPȑ(x[z+h7I /%u`%XGaԝp!mk$(K^4V*XY}pY"A`~G)mgjPli- K}s˃:Lea͛j &Wk&Ǵ:E0P/% {~fS:a &OQAn*Q~5AޏshIuԇQp/>7E?Mkuyh?<5s k1;wyf(~m y/)u}=ScԪzyzF9?T;߈B:`R7FowzO4+q @7K%߻n>`-:r)ؽMw.~yʠC߹lNSUIb\n@qG3FQoT.H>n);~m"؉VOGGQ+T 1fEe44;B2/=Nog$|c ęC]0q]-88nva[(+(bAWyir {wj?;΋=zCǣgWAZ(+ш yaK1 rv6mKr8s o%`Ec/Չi^G9EU$DjƥӲQ$eƿd@VhUb4b;VŜLzWFr~ZCed}5DmJudԃԥoCq0d֗k,̿x$ʨ`o5~aQRo tZlWtecۂW0(|MٌZt ޱe_y ȢQ[+>/!;,ʡ~~=2m6sgp~C7<BQ %qIjg:vZEo=s{շ-ڸ-C|" e5j%[NZO_t^R(DV7z<4d2,a3+fK̴pdU,fR ]1YB.O'+adg 8k tw=p\1ى{JԊ4Og.fh6 2Ӫ~c y@^e}laSu8mdrԛn %0 ae#C/MN@̞#;r6ՁGG^-LWZv-]8΅S \~c $4j[ G3hT)==f{PV A ME6ha?;I7KSR#ǘҿR_D]W ͙ʼnrUaQrI9k.3&s%^.* MeJ]A z#{`x|5$rpi褷)3(7j/Izieroy=lm/v1HsՅ|=F9"%l -WY34aVEAFp.*]?FNsʅ:&|&_ #uSt2K.Fxh4 8pFT ѹN\wGpa#-ڰSVr Re{^?}w\z$oVK aMzCV, *L"緑<49Lc [=a]'d.# u#6@m?>T!jO<9bN`Wí*Kڟ ]}L\G}hk_1) [[SЩAaԕ[]U3O׀7׸l;Zy ?Q\U dzKFF K9Kt[㝿-\PMaYU'.&J Ϟ%ׄP!tdGя9U#ꄩ.GplWVK fGx2҃rA03Z&h;,[ABBU5FROUahwwں|o z/0[4\0)o0 Q3q˽(;aӎ4DVLAj߸b٫*ۙ B CAX`s Kg -VowB78NSUU JB5χ &ә 3<=҇x47֟k-e:۔6Ę-/ɿ*9sσCc]aSgš q-a^mW56 b;L#z6w@OLR@ 4] ]bT)(2~0~-7$endstream endobj 170 0 obj << /Filter /FlateDecode /Length 3979 >> stream xnGBfcð 8A 'p!$ QrHæ ߞٞ]?ܬ鮮j?^ o7?jx~s >Ho#*X飈AT*-z+]=Y);}v%z#{B]Z^KcB"tg_ɈȰcl+pCZ=Ǎ?#݌'NQ]!mN]4 1h'2pgX-b\2T 8utzOp(MSBõC̗}M Nɮ_M,#lKIMTX!yd"z!+[N:x_xo!*1 rɎ|A[*lDRs Y+ϮՏVAA 7^QvD @E"w!0k1]Ko\7U(RtȈW}KKC@BqɈ] i-'F-nAGks&}h#BF2]kf҅޸De*hx7P*%e+zɸ8el-g/{ 6(kP>ph&yAH?q8}Qv&@èۨ 5НB*e1l qIMg./q8<=V9L0۶/A'ܠea 8@1S:Jz}[Bb$By2y^uEAl%+;w Q(d6\M X?4^2AI ƀFB+ ),]f#;Wsa Z+0l:F#{s&UO y俰R01+ yB夿f8]IuE7€&VKbոIx ى'i7g1l?fIE;% 68 m׾b&Fkgpj3 E&) )D]7W@>ȴ1p I5L\{0%mݫWd䭚;Kّ. lS^VM_g+ }9JVʗ2RdFs4Bg4^D;@T0J&O.7H 1|t/`$[?² F /=G^7pG}]Veuhިo^chdh~M\&g95ۡMWn i ӇݢM{ U@0V~>Mdϛ-7eɧ([9x%Z=)ঀE}{QhKIM/ xCk^blL/>ӏiD?GIbtdِdٔ3,q#r%,&q[SEA*W 62m 2y߯꺬iv<p|gP  /1芶fޔ|W5`L:b7Յ{1ا U?6%eYPzsYoZR}r dRܵ^Bx[_}s f٫\kՌ僉ɐRY- 3Xp*xo . 2}U:ÝX$&_xQ$d+q5jߧq5jrGjz՘sWF,>ZKrfe$DOyA-1Pf˥sLwwA_jM×ڹRM{*pCʙ50%6Ym6rR6-SȪL7(jT|ȫ,q6?:U}Azt2߰ džU-ϥ.Gx6Lvci=eYL 6M6zعH5D5 u(oӻ8Qw5F6U{_$2 /ŰXa٩cAl/+0$F^XjЩr<*nT%, w"^R[6~ F7/!#ZQWyd`-x󅕴y&aSjvlR$&!FZOV)5vAyEpLJ7%TUm~Xj.ܦD e:5$ÀO6̊`z!$x#cûlfJNk`6OԬq_ܾl[ ^gzE-K, UU$f`MWJ:x'鄉=zwb7'q[ P3T74f{rs/YX7a> rr#T*NlfyĶȼ6w@ogFjjwݶ&5lg6vQT }*KX~|:Ʀ0s~2V&lB6L\J5! .=m'^ZKZ6S NKv5&{1lQ5É[/D=YX2Ҕ|0RzQ:O;'dD`Μ&Z)AJs/c? \ lz/2NlH`òw^.A&S%f T|WDuBh bרl:ׅBS^E4W$;4䅖w8ð: $JCm6k6nf 'x:wAQHCl #q|ژv$S:IaNgvw1En,TDŽiA`j5OWtU۞I9MX3-dgT{ѶUW;F ۜK"oo&V)&]ܙa zl?Jӯ*Zc2OuDX6͕iғz0M'4%C8n !/vwդC@OUbVΚ!yF-Do~g ShE  &|z-f+渦}0G\=_mai2G4|ldx _T-6=ɺ:ʧ_00#FdB+qG8bӊ:3r; cOyXV[.c<,tlh5Ku߲ŨI\Q~HXC+g]PK=j魓> stream xZ[o\~W"Og)wmC}S`-ɲIX@ޙ!]hBpǕa?:÷&#oWo8jJ:~{**0&VWG]sS;hǧG/j`zƐbr=RA IRz >aL "qG7hㇿR~ح7: pS8{0pׅG [fa^}B,׎V8< uXHפ Q0Yy2(goPцƸ1z? [7NՆhP*ggXܻJt^R$uքkL,["E> 7t33:ȓ7Ukc%J.+n B٦wЕn.i7&JJPXI]Tm|stWG.zᄽ9zgtg2}Cِ#JЏ8p'ѰU%[?xdr#fo1j@`?ba*AƤKZ#77cz/Op"XHvwY Ncb\Xue|׈@7La-*]Ec." h tD{XYbp*E/mT@U/ @e, ^`e0Ǘ:i%*yYɱöE%WĻL~1?(1*,IUe창 cl N:f'HjX6bE`vx$[JÜGmMb8(̰=E + zh.i%ZtΥŤQ$<*M>7QNB=VG:Zڰ#akKIX"zpsYt[Ju0Ք+#uAF) )7ybܧŠlɡ[_P@9NOAmTXg?\Jmq)`vq4ఢݡd̕R%8 }0qelX ^.aN^Zn&[OG=&4 +qC ldN[,=r(1w;IBl3ZQEWv-I+ |tOlѸUNƦL}C˂ $rDIm15 !A6oLz-n#N38 ,pgﲸ\}Ƹ qM#=~a8Z4a fL[ElUYU,wPz4-\ ! anm2G23R:&b 3iжfpR!*ۓ HtO\6 >8=$iPYEAq~1{l |CS6+&XB'~F18ntֺ`2>YR;Wsdݲ riZ%.&,{=TR@d0vut _Ulp^CX.|J#&^*ЀY b ?La;"dž.OQ]Z> MxCɌpAȔfb*wGuPۣ/2#`{[}H3ʺ)V&k3h 6P}omX,IlMXWFBeY*bN H ՠ~{JL0\%b|M )( :B# 4zg.I vY*0ۤA<6]pybiD:({.PT4~PFJes¡ÈnQy:j4 ybjReZssK%]GL7R=&m|WVIϾ԰w;YXZܗwfo оhpZD, jo&~i=kK\y-L \՝᯵#0BOz|`_8ݲ5ffej)e>eE+s¯yà6sgڰ#AZqvs y3 F/bu>M$%EyKqt<2]`~ >(<]mOutSG\D lDGyL?Ŧ%޷R N2ݻ.'d |݁NOwDd Z|Q5t؍{)⽜@u~s }xqm>?Eo4wϡf-ln- r!˯߮u9/v*|ˬ3{K3):1e=8M}GU=IeSj R0ojK3i@߿endstream endobj 172 0 obj << /Filter /FlateDecode /Length 5596 >> stream x\[o~GNWx/r]$2Q-ٲYe=*YmyYb̡Xwj ^9v:>iyo.`D23&3TF1Y~rcW5:OkhlÛZ;Zla#JM*/`|)nhOip^|Ɖ OMA~v+8|K+8bq>u `N@匋g4o4*e#Ncvs>Npxb@S)y}WFuʋ9`xJa)(冻hӰǙMzm ) : w\# pq6 Ս-'}!n7Kѽ*]PJ{+8s g.fv,􆿛^.aę@ 8?Q+N}f_ qfVyJdƫʽ,Mr1Uu6LGgי xC*|rmeN[Rlݕ=9BeڱÉA,>ܿ-7{)&޻󭶣wtF@~D7Ϥ7Nl.i5U1nC~]x@ emKnZ.IÕudT_rMujVޏʤ+K4_Miy{(ͻݱb"ty;w,B J6}H:c+ǫq`h٢o4]PZ*mW]M:IaMat&Z ]Ӟ;Yۗ_lR*kwIҫ Ṯ5^Ƅ,512!w`cuXʲs<&#L\MvRCe=Hݼ^{ 9\۶)]oZi޼2]U]}y嗂lTj|lՃ&Y92|ZE0,QeZJw85,wh-f`Ң?Q$*=@򦸬{N]k÷QfGHɔ/$\$򔀸;{w>6ty`dm#TKq-2x3nuSsrYtS1fT] l>?)!Qul ? Kl~7")c>/5JEiޔXݱҼ.q+f$4bL v_=ϥln?}"i5scrqhd]TpSLѠBo{[xJ2_J*ORX W+(O_צ=e> IlTΓse@\{VY)ٞ/ ~wU4'[ Ai:?RK=/j]hL*ԩEGty|/|qe:xE1!7`1hSQ 2G}(691Ĉ+&L]cW`q+2[a/6ޓH/XnR;u/"Kis&5n5ͦ i$* '8,j|Q?7 GP=x4pY_[8t8!5ZU~Q钗v 3GR%]lP1le4{ȋt(%iV<+t+(xo⎼/q") π bmMEM\1Hc9W`Г$ +Z1Fs;Ӣ|~OzN Sk)FJ0#Ā?h{ws).íf![yy $_n躊5aഀo . c$L|I*: c߉8'3Xj¹gϺqF۩8W=wK]@2_}2Jj &Ё (@=óe+wvqUk '&1Vl v;'sEOۚtMVxo4_+櫾|J`nV^^Iց'A\ՊXPcSjB|g<㔳?_O1~YEp칇]1•rdN'YMm!TY)i}Yڎ 2QC0g:RyŚq GeWׯDu9e@v"tXz42& ?/aʯ,':5X ˹ޖ= E__lz;$ʰ*AԯW3t{ ">d$2Ԟ'_ S%\MGX<{ѴJ2-A>Xj? ȌL4uQ"Zypb# 4 sەJS`+M(~=o-M캳q'Mi~] 4yuǯhQs* ‡a]A>oΙrU\ TjaXYbHBi2~qa rL Gp(s$8#%/5#,r2U;gr%#-󢔖^ ;}CVW9Jm0&¸PEЭ[Ѝk0HVTZUS\mtITኺQ^T;J-Gz{@EY{"@\z?s|-~-)tkI1E#bdeGuףvII-"NY&Ќ'-,q6).&f,M'P>lwmN=FT)rW;v*5)ߋs#xm7<ߺ49UjI!arrlBpĸ9Axw#ƿUF!q o7Vé5Ǡ D- Bhǰb]2]c]tug6MeXX19/J5檢UDdZ4, x5:Q7W\fewضƂdLbPFm,A2׷%5_2GtEc D =v^_(D> u>Kdc*ЧRvKȄhB<] fx/OV7nSùy}[  Jً UV3\3.ct^6Z4' v;2 =F\&fx/$-/!DT=0˄ꐲTm*dΉD^uWGЅbqiBS Tb]4؉_3s:MBw# !& Xbr-&&y/yG8\F}h쬅#p_jRb@x(,ڒ~Ac0i޷KMlWlk`V&6o8Ss!7p/c4ZF |?bocu otM)9o()+j&,12j>GdTR![%ZwUK CQVֱn!k4Fvp"F YYk"`t*j_b86OLlXQC"$Ixݮ6{.*>T^G,Jbέ}ΘYo/ho\Wre|Pc Q*u(n8rC7=V 2v  cDȦ2|# %qE^6\QNErcd=D fA%Ď'=u+vF?ꦉ&U(/S[I3$-j%\ س1&vǦHW=x=k{&,KCHAm],D3~GTn,)\ n[3oϵp xQ 9.H5<׵~u]-]J$?T<ɛw߬WXC#wixT?0rzΗ꾯_؅Htu_w3{qG1č+^; +/ s fj^mն[5 lS K/oR4qt G1(\Fx0BК2 <@#F0!b~)YmQ,E)+M& <#xm3o}^}G`V"qI[na'Qq54X۽RA}6+є+ F񜕚YXc1 g3PˢJe8WD'oцNKCjpDt `-j a /fЦ^g70EaHwqYD!KЇAt+4v^f(u,zZ}GjR1S)j3e:Q4ߔ4Jd!24 Uކ'@o>U#\~{_*z @O2pY*JG#ɃdP|uP(1 klx|hwxpmDxDO赧Gd (6r*Pֿ,wWWl,#>s*b]htGhю&̂Z ,V#~)bǡ "qa,5εqhj)4f_)/?$89@3׏:ި?(VG{ӝ1ħ7GO_t$(gq?cẘJgm 2sU)Zvßvy'l,y?uendstream endobj 173 0 obj << /Filter /FlateDecode /Length 5790 >> stream x\o\7v!L׺|E@Zl]d toq %YNV8;`=^;0Pwx8nvX?"-lC ه.-a) gM{~%JٸyC &jmϭnK&Om[ aszovb\Q8-u3men~:20/Ǹ{E$ֵXҁ3NZVxSIқ 1(rbum_ʛ`%=PymAش=a?AZ'1`>yNR 3KцebDŤa{+RmaelU S0MYۗ:oFP^sہ`ы5^vllL8+yl Η+39 6"'ېGH<+grSe5g<۬r' s| gt\ c7/2v2l^2@w\cΠ(dvGή$;HnU)){,$'G:'g}'80F t;:YG벆}'S>iRHh(d(.zcDaJ%F6.aa%bWy0,PQzO<8[\7SYb^gqvacan:eVFy,0OEXvKIFDDqYbzMi|esvMdQI 'O| =,Xhg ::B{Nh4 򒀄GÐ"ORlW՞47i|˹Xb:qHe`SQ(>cg=C/($@o'cH)]ꝵ4)`Ș RR^dj55],0ͻڼZ?Wp<y%omNjj/FbHQ 11+1c7P+c?i\H\U%}k?/'g<s6j0 >]]ۡ9[HQ[=ThClKn_WmmNC *jpa_1B9;lcVʛeߐl/͎P(:9fM߱>Glrlz J&=)8IAq!,Bi"'l K(+0yE,pu(BxeBIAlVZ\|m-1:Gg?RZh϶X` Շ>2%'PG6&` s4F5btΑ!P .l$!{3",ǡbmm~tU-Rc4Xkm䍪O[OA.4gTN-65;*%%ojS*?Ԧ=|dgpMQ _ f\v {-xe.yvãQTWh@=<ʚF:OyX4|/POiyB(T@oG dOj}G3p>'44,nT-d|3cwXnm9iv.պimVLZ+De\r׊D9;ĐaD]2P`!iŵ# a9(u,#oU7~]~7`G/֗ײ:ĹbbAu;I#DDgRyky?8=WLŊta/wᎢ`U-A7^cN>BErքqw (2X3tpFtvFwsPqtqq\kXdr$\O\,t((>KIxsx™9'8Bp,GAE&j@!ĦbDQa.Hab HKZ0孕!tMC˨$vv֐XiVs~๥Lɀ_G\E vU%o+uYW#R1Nű$DkF;M&kSTW~*-{+߉zRC\rXdL_Un|V=}XzaWyS[JXzd9,&l0SEwtEkJ'mB.88pjt8],8"V)ӧG i5њۧ"v^ >vyAIa`ZGΫqao+70rQ? ?)[P`C / d >>jPpҢ4vF:qXL Vy+UxiadE/_i'F`xoՈ0!2B4^!өn:|×aQ* 7'Vۡպ'Mq4L vר' f UY0$_O@;UVMNCqEhy<]hΉcO\3- ЏG+TW4+kʅsۣZ|p^]vE5Y V uj[Ņ º́Wu AU|TaEe ksL[AQR ftZB |K#wf:2QеtMSYX?`RG,n1삊1q~26V#e2Ե!ŇgVmXtPCAjڛ|Rn$4<֭,Wz0C\P[ K*4@}7Q6Xkr508<%@R3LӴ%:QTJȸ+kԻ}5jP7yB:_ezC˫Cf4+ :}kik_H>v6 oUfY_Iߦ3G[mRjX]0cu oO*VLWJ8>hآ쿀NZ8+}ruY7 /?a=eFMaymyW?N8&{OG}3IųBlendstream endobj 174 0 obj << /Filter /FlateDecode /Length 4791 >> stream x\[oq~W91l/`ae$1pDRlG`.=szxHraOwuu]5/ƓzR~=3 < ~UFIq֟}Ƅ1h5:lHZ;ZlJ%̀t8pM M9h[zjO).ly'$^ ۲sJ?9똆0êlH!; s>&A9ҰypF9g \r L֣K8uvb?:O֏)|A а2s+ڈR:aw=3yE?o649֌;|\@{jm` ?㹒qr^~ RZmLq4؉Bx؊+w{+‚ b{+#BilA~P}/:=tf4,âa&$rM{y_&hS a҂2+16HBX*1ĆYNǞ.YYmÂTPؕrj}]c%4م = Ȱ{AXrFsc iVAN ڐGo@qSD\\02]4MNs?GP[T(OE'NH-ڋI͆?aEQZ'ɮw0Y4 ;Iޝ{$IՆ%[>d?2A&"!P@9UN:'m .gN BrNl)el5eȿ& ɺ4<+;  ޠo[VoY F 81Zcu{Bq܋r 2[-8}ވ97WJ0D3btL>PWr&E y+Ok:( Ħ~zEOc"n.|X%ځ'_%a /7`8ph 06K0[F5J(We5+&=i FM:} IHS /JE,VoGMRFZ윆d'curϫ]ϑuqg '$H ,R:|[ux]MORBB.'(|r)^>@mv2 ̷9jPlNwzCk1h-mˀq&2 R3|wu V;9OU(DE4J-Ծ `!uّ9`8Y{cVrAo&ɥ:|[ux]:qMWr Pi{*>Qix[DIQ UPD iB6-Bzݚn:P ˚Gp@шpKڜU9++*M*wQ&!6ÐQŒ 9>A8FWXFF0ջr68S^!vYkU(|5"%qmޡ]!W!詃00/K vEn`3 uB)iD~%%puP^ Ag 8s Lpe-o y%MQ&s..o% |Nu qՏ5oSu%'uKZࡌM&?u(}^SɕPY2~k \C!\7>i/v۪ά ha lL^&`M4SSRoyCI6o;4:*7\׬׃v0*矨_s7p;hdQg̺Pb]OuFeDz'| xAS7 羅b3RaD^^ A:w%R5˜j V;016KLLn W0e p]Ǥ06N: B3du~i6i#Dyڭ/*ө{iqy/moz*Qn$K*z$cp˂ˤ&o|\*a 6acjMυnY3Cx1MV͜r {X mPWLrζIIɽ`U;tIRC5;~ wn.;D7•w;f)dQ \vi=𕎮Ws m4R:48ùANT+|u v_Eeq9ae`n[9'HBEEKaDJM>R JDlWSo :LIEǴyGpOmU.@$$aVw 2>2Ш:ҪiKG8) ?qOf!ߢd`;I1T} Ю+LM}:O5RZ3mҖ?Ty/uhݧuTO>xu }t?1Wܦ+x'+M3OmK9 :~[۵^1끈uxU*Aj:c闓,`}==^`^ bgv!BMK51ʊoPO?r>펖D/el2ͱ؍\JFP%-yjjٜxjWVl⁒rP˰%2!%E ˎB i^Hq-|Qa^4P dɂ1V/-R(|kҦ6H>_ DBM[ʃɖE*E$7͙A/(eW0' Rm+V,|e-O ?A6 Kdusv좯wzϛHE( 9*2( ;*:fD~`2(q*yhIDyb-TsOT1kMxK`z! tSy51^VEud_+Xi"-r ˴;*,$ IHXi_tAU% (WW (60JbE,@ BtsK9vYB,JW>}_!* ?xf;( X=5!wLZDb4t+'ZrLv.LV4P .jl^UMQbg:AZqU%cquE`XsBNd!2}8YN\9k4mXrK6bmmE[nQ[2캊5Q{/xNa*jx N}fZVv>E4aVH?j<[ v& _3s{:ޱ gx!'CZk%A_w@ʫC帷\K"x$JŌec[?U?ա@Mo^֡!݊QZo{H ІxjEK?=UkO d]Mu-vV_wʇ>7g/ )sendstream endobj 175 0 obj << /Filter /FlateDecode /Length 3266 >> stream x[Ko fcA1@9DfdCrAr).ſ=U3S.)Q:جGw}5w3ʙG{߾~jݞL|FHE1D\è‹,1z dcQdX u0Zk *\/o5줖16gyaT*xʵ.Sg.4%hؙl0-La Z`W2- UZg m\֊7 TBW"|!A5 s&Fr2Q܆ԭ5/:٬lM6j_p¨%ػc Sc.v&GWz]%řO|B5K"s"["ψ< cc05H|an>U X35 ^u aP=k"WDN'"5dP>E>) ފB/K3_kA*?,DJ1'ɘ0̥~Kw`Aͩu5we팸Wȁt@}޼%Q*O㪺MuC몡6U 9_kx^j<\yu0hkK"/<.n7ω =sZedvr0 ,o&$1P+K!H MږZ;=xtXG j'Ҧ/ƽacIB es`(w8q>7=swq!@٤U:2])abxAPE0bf᧔E׊.bB$ӏXfp=X_ rO?5okT ǜ*a!7]814d <\ɃՊH)YfVWP0σabg%@j{97+6~E@$jߦۡOw x GC[4vMp!TE*ǃhQC6Ao%'XgT@_pL68%rC4z T>S;s~'hREݺl޽dNQ8  ?D$ƟIwS!d-: bScu42u*br_(JQ)T5H^ (@sZ+' ?H8&&dcԊ` B0*P eHih'Wi?j % ce/[{(aIW&8/ F,TJg$s6q& EfB`oƎ"q>݀@V2`=^t3&*~G@-%}ǖ+5j7C}ϽeQŋy6 :P8PCBG[U1y >6ғ6Rp5Vkp*ڴ73GIZ Z?MAWΙ!hܒq`);GEx4pϮH c;fdpI`{HhkƒJe)C".A 9q-PxVZXܐr"`n9$]Ѿq8~vi0C0la4gZ%4tOnU8ڨNy5C\VӢ%X]5ǘ0^}e>`/DEln6=8Eka:VvPFöuR`amZQC8|%o;B@V(b]"rw:cޘL1` mW Kat696`sXn\R2f/D9=*\oPZpScd\K nѯk{laW$SIֽm~AwAXuQ0f:˦/>b~YbPF6i/W}t@`v|fT>S=#gH䬳-iT#>kr&D;yxFtֺ,+Ή >P+.SjՎ^ڿ:vN_ށ@&F4ʦ1_"P}[] ׿`e%ka0R5jzH$cXraك<}VDڪhj2.|K${r092r%Vދ z¥f*-.Mǥ_=RS|W~?N{K/\QSo۪FhS(Q&H#/xLԎ#_%o$rq -wۇ?H屪J* mYkGR Wb;UwBz7/_TU'wxPpUa202 Ȼ=XloXբr~ 2lPcK)&2ׂ:w):|lK }C0Iy֤b7f*~{pU*LDve{ϴa BԠ(yF/&ַGǔaReؿ|=+}#= j2>ʿu rAW,y+{[w ߮oe!WbZخ?DaX[dղN5y# ɨO+D0Az -8"ٛVU NܗhgXd^m{ M[d7yo=^uxL?mɁyN4י#B!p Cxm7 ]5UYf!N>|"%}<0f"N8Ǹc~(u);;Y ,MX"9m'5Q+fĄ{"eF#9Q|)_N=?;7~/endstream endobj 176 0 obj << /Filter /FlateDecode /Length 3561 >> stream x[[o~#ã˃g+Ơm^t0>@lHjmv?Vk`Dp 3+q2 ǜ.; >pCV4< o 0n) s1 aU)4lOCv8s>&A9Ұ•a<8#|/ %Hd=ARG'C^SJr9}~L!g÷,\~Z{cG GRy2y)LL6L2s&1|`K&-Ov ZΧێnn~%Oxɤe }ͣkxժܖoot6T.+LQ[Ok;zD5_ޠc22]ѯZ}mw_!t'2MݮKK uKw쪻Xr wB,YPLl}Z>| *<|2 Z .;/|(3X)NgQG(֧`SM3|L'΂Z4EqRϽFyX %?,B8؅Ŕ iԡg,~w n+e5~D_rNk9L!97<;&JwGtn ݝŅ }9T= ife ]vpz&^QpEJJX HN&G"Ai8[}t'j$X  ݉rQ78sl 8#*o0 MlNv\'C#~/ .h|),@'QJ9^9Oޯ#rh9*nfVqK:j-(e;D,FAzc\hv~q6) &tAJ6cqځ'gd`u8D$rf;P %CfQހZzO!n؜w >iY ~`*PkW(o٠7NJ'yJJ?yVR/]k`1L {|*.&@ UoTipUlѐQJ.̓Y t`g0a-)O w,+d[ !XSWw nMeoWH".;BpVd8pOgT0A!I'f&*2G4tASjI$pR8_InDvvIe׆$q uNć C TVƚ=f zIXMt@B%\` V&ӇN?fi&~3Kׄ~, }k~&+ Гr7irJH+sޔkv*sgZ҂n!KѠ\0'|etѱ<&R,a3K&Lvl+m1+)](8tX-XׂİՔlmZGS,J,x̽Zz#Z^)@'LlQI O: ͂)-WSdpfVS.-XcC97AOzs}3ڶ}g? f^ĎU|+m]-IՀafKnLߖ }Z!bܖ&O} L:2yI}2Y+?^u ' ;'^H*2!ϙ|d,61֋ ݯ.UrjYjb;\Z C `]^ͻ];%Fen_bj YՅ &G& 걨3ɪDmŷU2)qztbw*n!G+W¼G{WĨyd] 7EV=r ˕ZM|ZŪetF$׮Ӯ_sߕɧk.)f`b>}Mw_7H/ධY1ΫԜNprSB @("s +mUí(3 p_ZVfeaz4%;M!)y8wJ.]-/2I x] .YhT\ڻmr~XBZjˆf(lљ,j-- ᝬ:"6!dg,Kz~r) 9"W۸*rfyml`{Ģ *rΦVUzv)i(p-BSFX?ZX1aG6ofR ǫ\#V. ](8)(JG¢չff\u0 ܠ;cL"*s׼9cܓ^+zŌTփv?k6^2d˔k. crln]9NztFjeרwǩmAQj ;mMtmmN=%֎F?3inRIŧ#4;j.,_S%/[*# ,0Vb?0%}Id,7st4b^Ȳ.LgWѲdo''b6oD΁H5c'ߨ'}YCWLE(_}3TTtεspd&=VsH :K)aMS&ᕶWShY7LY|Mb g.E!x7_b~B|rSKg^n:{U2q `J! ~d5OzhvDM&ދ%@OGJ(p~TXs-]kޛ<:μWf}r@@gXr-^FC7Pe7dH'wLA^Kk|XeQ66 '}'hj$&QsT_J_Sou`):23loxg Q"?)ݭOj(K$ܻ e fx%^kQ?h{Q$KZ]F Ӌ.8Sć;|rRy/!_x6"`횷:gF5-׾"(-Dr<;<^ϴ-my#X'ag@m"M%#\Y0)X 7 V{ T++<`"YGtoe,=n )tlm {/1F7Ulkz-py(rc7(9俻k&EOs'&G&dپ{_ģ3&N(^ɯ?o, wEendstream endobj 177 0 obj << /Filter /FlateDecode /Length 4417 >> stream x]o]#@ߖKmHCNZSt#m~{g\rIyȘ7=C?<_o@| ?Q0A*<m.:)GP#[{;ݗ ib)!`B wAukDH =",:]ju,j腄5N 줖!t8Oju50/.[ڮSRh67Bvo0wGANFeN|{2Km{8 03&tX,=pv pUeW ( |\u}?+G'}t}AxXDJVG_I$1cSSo yY*]F*_.ޕê2gƍl,?8].].6"*!Thf!iB23o*զ, S狦sΜq!C02h SqD@/*a;hpmr Z^j< rR>x۽|T {> "M xY^pdnHX8-l'h ݸ4_5Nz`6i ۲K/+߽j\ꂐ݄& -骐u]m{SD.@=ՙQeBJuEv04]ٝaVQ/0کjrg8!c}gKDw#QRT3T^6GFp/ԃEq:mYR^ȇ <\hJaP(@q]࿆n/uԻ\v$HYFX $5׃EGe8#)9PJjZR-_Dt\CHt=do&xV>Cw. _[ߔVq#2s YrUt=*P, Abjtt8ɯȧ `Tn_yQTBhP r~P87k$mzgs6MBM$(,@+A1M^{& FTot #,CF&=ʆ=ƻrF:M+xWxDɂe*'$PÉQ$F8dt_Q*e'y| uK ꊆ"9yX_,KʲP2Bt$;HrAq[ M)Ӿ "#F1^߲mɕ9ȩ`a~:6qtipI,alIݖ-՘FZA0"V[XSi H`pP,&^xW٨0Hi1bX+< BdDΙ &^a9 Zb)BXn#q)tK*͍!r?j"lIKgôx,oVdžHЋ(` c_rbwy4enT)UUU26]MkQvvb.2OMQDsnt.Ae9UY8xcTt$Zn( <7DIPa )wv9Jrb`|׬KN+Mi~PZٻ7+ ̅?M赒y͙ꔱmywn;\ 馁0]̋0BE\wZo%fׅXոo>eN[]K.G1s!5o=`Gvg$_2%?cYw;Z/kyO~(QpV""s=&){#%((&3bXqWI Wtm|vE$atc ճwTSxkW4<dsQT uDv#@`<5z AK7W!Ac$ Tgmu{_g#Fzr͚5pBU iPpO'vBUc톈}9fٛuGL]Zh”lpD~%˪CWuEUjkJm/S'jUb:1(E /z6 A+gd@j^lWLٚ$=SiWhs|%joߕee]B\7x@zg75' 'M}Ӷ^p"n7G4n%(]*UrrĨmR VRU~d^&^]bϕ..`D`. 0&&,jJq)@ۙ,_~[/wHNC?q{m£mYS5Eײp{߻/U `I,dygޗd::~|6r= vTךXثt=پyìyM~=|ҺvHf3Sd̐N$Uu̖K0&c?ew{ic+OڧdG{\EJ,cthMȏgbG-ghhAqcw2#a s@J3`mVlD dΚi3҉V38>H'{uOj'/q !?ޗDIWlx6{I MӠ D9Oc%zp G9?K'aP֏0[% %OLslu|{3'IA_3m:T߃.v/rޜ7?T7gNfHǟoeuyՃoY endstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 360 >> stream xcd`ab`ddt v04qT~H3a!Sk7s7˚ׅ' ~O+XX_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*\c8)槤1000103012ԽK2>}wy߯jcws~7yŞ>~nSg>;3wߛgO^-ym̾^];ǂXπ| wt\eXp~|endstream endobj 179 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 321 >> stream xcd`ab`dddu 1T~H3a!#.k7s7鉶 ~(Ș[_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*\"s JKR|SR YtX޽53~OAe=rIa:Y˺v]g*{ZG\Fۖ;Q> stream xcd`ab`dddu 21T~H3a!.k7s7鉶 ~(Ș[_PYQ`hii`d``ZXX('gT*hdX뗗%i(gd(((%*\"s JKR|SR Yt޽M3~_+ۻsO/{Vw\B ۡ݇f<ʛUg+[yNƾ|Փxxe` Kq'endstream endobj 181 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4055 >> stream xX TS׺>1sD"NSp*Xւ @2 0%&1 W)*֡rmtpz}}(1@ pman 0Վ,gs'+n(?E X<&IA/)89D,jeg?o8zLMޤ(Ej EmUʇIvQQk:j=KmDm6QT ,AT4JM8QpO $\"a%ǹiz`ΏN㖌s~9H]vMqxjSO}6ͭ '  XyGkir@OMo]~|NU' 5Sp u}St(@ge>&yQZ5rF'rU2⬝b\WA؅/Q5MM!"X4i}gxLANb;u} moh=]y#6A ›= 0.VA]>"FZoKpއEh Zv=Ɩ@qjduL셝WNf1^߇?bC>*(40gi4lYښ89}7ZbmvsBLaڗIͭqZ0@ k0h&;vں#~T~2gځZW0=~@OC7͝`Dc;{+vߎȟSЁ$=+׿D[Ȯ33_y%E$tVqLL]rC]CesKTsF%g'}Op#IWiJ.ËNZQM +$`*'w+ZZ+y=(DiOGiݒi5 DcO}WZ߹˷+eaaj5.åKVd {oi_F6C `i!<G5У?9y7#+Z7T.{g'Re*S*![/"{E;6,:áhrlזZGa[X3w1qbH,ҲA"w) {vYh܇'I7hοTdF]@\-E;/{Ok_ h:(j)DTYRCa7G?47ؑP#&xLCta䪪.-aR-TnmAe~˃ZylU{7ţyv#D}' ^;e_v{:3&@JB!:Gy8O*̞Q-8&vǷq(Rݠ6!~p4x9D&B ?}q&⸖hB"1I 1o\~k}hET\\T1ytdr|&h[*^1%xRȻ &%\} 1pp "Ccv8:rz TvfGlXi[I놓pXQ)5ɽgdZBV[|O hv\>S"ߖv%2~ qD7fVA}߇^c"mZ洔lR& ^#Mw'#c2ѯ.X+hzYt;-=mZ3}]xީr2Nd@M2!-?g߉프'Ĵr^Qvh )**șC# ۾Ŀ@\m!u{X{Gb|!Cp1'IQB,yXgTo̪Srv"" ETDmT15q#8"!p>GVp~%VC/:!6).X;o0K:[k,;d+~;f@]Y4mF/g E9Y }`+kN4bЪ2` ĿDF$t/gohv$܌\}H& m&Ǡ)ߎwY&7d^c,)u p3L\;2*h!>E7BOm!es?bo*f y2>Sock."#I<ӎi,u RR ^Q="xBFA!vgM:۸a>;wp<$ӗ&}iӯ<i$=OSfW;|%G<3Nu+lo*ÂLŴ?v޹nM̩5qvy tPC:i;Va]ZX/h8aIXS@xHendstream endobj 182 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1528 >> stream xyPgwIYkݍ 1ЂJV(`! })  *GD Z[j^::-u:Vˡ>{% A$dIP8;{]ɦ@wHxJSzp|h0f("$$3FLfZP('(SL R eN(UiXhyF%d*|fAMoTEZe)qjUF3 b"'‰\C""@b(1L/d9$ISQL)'FFkk Iu*ĭAZyM˰l^]I#/+qsK\5uJLx8'J9$ -`E[lfjE q \1Tb)e!5cfR %+ם)qG1`K oaUU ha 㛌;C7wVV֜3՛yA0sr *+J;6=:֪7Vr}*Qz"tDMnM*s}i?QU`Mn g!%l\W_{p:l6oMݚ4iG+uWw$,T}!5!pEo&<ܴ v[Z5ު>S2}BV-X1fj3vbE{Ζh܊G, t蕨;;8h{46!ے%k+ 4Z Mjlj}ry 5Q6V:dsxeы#>n_duW+ń4QHAxLIeEzuqiYk=}_r"'yȅ {_~Ji%qĞ#G8-dg4 y3q+gύ}g?c{[1`-T!qLu-|0'zDo|PWc)5S.g\l0㐹.Tݾx; +Jf/9"Oex-Zd55@WhO'sK};S9:qh{7oh]_C#7c@hFi2tYrmަKgجw}˞y}֓"4D hu^djmzmjrᨭ.bsk;P{pzz<_?vendstream endobj 183 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1188 >> stream xS}Lg~S *%d') E"2+Zm{PUpXC]u nZF-j%KJdn%-Z&<TQ u>7wa i6!EIYg hHШMqx&" wKvsI s 'pIIi{V\hqz`2Z RX|(e&A(Yt:uk3?sc,3ˍ[L&pk V# 2xkC09=h!2a0YehEG}#=Z4JH>DDO*5F 1Wj="U$ FlaG2QRSg/RHS,ܦ n6-EA&Sk>:۶]0xN< \ٰ"nTrG2cq@s:m[&D[$.KaIǘ9ن7!_wBUty]K3oǪbXNpil綡@aRg]Cv0oqvlj7O~dGOʝdz#c¹LWS+o͓c?9]׭TȺ {9p'4t Ơ+eo<%%+Co dPu ٚn_wPts2!>֘<0)M HU Cy6&]yZ%L/N3#s0=H)_`ULE%q< b6Xnan# 0-^dwZNSyTQ i8endstream endobj 184 0 obj << /Type /XRef /Length 154 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 185 /ID [<9a578ca26c647d60dfc05b5c1b8062cd>] >> stream xcb&F~0 $8Ja?V {Ft(ٲx"3Ak) "9nH&y"HqV*$y(H17ɶD \`q5`A$/3B ؜RlZ0dp endstream endobj startxref 118169 %%EOF Formula/inst/doc/Formula.Rnw0000644000175400001440000006136512510770244015706 0ustar zeileisusers\documentclass[nojss]{jss} \usepackage{thumbpdf} %% need no \usepackage{Sweave} %% additional commands \newcommand{\squote}[1]{`{#1}'} \newcommand{\dquote}[1]{``{#1}''} \newcommand{\fct}[1]{{\texttt{#1()}}} \newcommand{\class}[1]{\dquote{\texttt{#1}}} %% for internal use \newcommand{\fixme}[1]{\emph{\marginpar{FIXME} (#1)}} \newcommand{\readme}[1]{\emph{\marginpar{README} (#1)}} \author{Achim Zeileis\\Universit\"at Innsbruck \And Yves Croissant\\Universit{\'e} de la R{\'e}union} \Plainauthor{Achim Zeileis, Yves Croissant} \title{Extended Model Formulas in \proglang{R}: Multiple Parts and Multiple Responses} \Plaintitle{Extended Model Formulas in R: Multiple Parts and Multiple Responses} \Shorttitle{Extended Model Formulas in \proglang{R}} \Keywords{formula processing, model frame, model matrix, \proglang{R}} \Plainkeywords{formula processing, model frame, model matrix, R} \Abstract{ This introduction to the \proglang{R} package \pkg{Formula} is a (slightly) modified version of \cite{Formula:Zeileis+Croissant:2010}, published in the \emph{Journal of Statistical Software}. Model formulas are the standard approach for specifying the variables in statistical models in the \proglang{S} language. Although being eminently useful in an extremely wide class of applications, they have certain limitations including being confined to single responses and not providing convenient support for processing formulas with multiple parts. The latter is relevant for models with two or more sets of variables, e.g., different equations for different model parameters (such as mean and dispersion), regressors and instruments in instrumental variable regressions, two-part models such as hurdle models, or alternative-specific and individual-specific variables in choice models among many others. The \proglang{R}~package \pkg{Formula} addresses these two problems by providing a new class \class{Formula} (inheriting from \class{formula}) that accepts an additional formula operator \code{|} separating multiple parts and by allowing all formula operators (including the new \code{|}) on the left-hand side to support multiple responses. } \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.ac.at/~zeileis/}\\ Yves Croissant\\ Universit{\'e} de la R{\'e}union\\ Facult{\'e} de Droit et d'Economie\\ 15, avenue Ren{\'e} Cassin\\ BP7151\\ 97715 Saint-Denis Messag Cedex 9, France\\ E-mail: \email{Yves.Croissant@univ-reunion.fr}\\ } \begin{document} \SweaveOpts{engine = R, eps = FALSE, keep.source = TRUE} %\VignetteIndexEntry{Extended Model Formulas in R: Multiple Parts and Multiple Responses} %\VignetteDepends{stats} %\VignetteKeywords{formula processing, model frame, model matrix, R} %\VignettePackage{Formula} <>= options(width = 70, prompt = "R> ", continue = "+ ") library("Formula") @ \section{Introduction} \label{sec:intro} Since publication of the seminal ``white book'' \citep{Formula:Chambers+Hastie:1992} the standard approach for fitting statistical models in the \proglang{S} language is to apply some model-fitting function (such as \fct{lm} or \fct{glm}) to a \class{formula} description of the variables involved in the model and typically stored in a \class{data.frame}. The semantics of formula processing are based on the ideas of the \cite{Formula:Wilkinson+Rogers:1973} notation which in turn was targeted at specification of analysis of variance models. Despite this emphasis on specification of terms in models with linear predictors, formula notation has always been used much more generally in \proglang{S}, e.g., for specifying variables in classification and regression trees, margins in contingency tables, or variables in graphical displays. In such applications, the precise meaning of a particular formula depends on the function that processes it. Typically, the standard formula processing approach would encompass extraction of the specified terms using \fct{terms}, preparation of a preprocessed data frame using \fct{model.frame}, and computation of a ``design'' or ``regressor'' matrix using \fct{model.matrix}. However, there are certain limitations to these standard formula processing tools in \proglang{S} that can be rather inconvenient in certain applications: \begin{enumerate} \item The formula notation can just be used on the right-hand side (RHS) of a formula (to the right of the \code{~}) while it has its original arithmetic meaning on the left-hand side (LHS). This makes it difficult to specify multiple responses, especially if these are not numeric (e.g., factors). This feature would be useful for specifying multivariate outcomes of mixed types in independence tests \citep[e.g., in the \pkg{coin} package,][]{Formula:Hothorn+Hornik+VanDeWiel:2006,Formula:Hothorn+Hornik+VanDeWiel:2008} or in models with multivariate responses \citep[e.g., supported in the \pkg{party} package][]{Formula:Zeileis+Hothorn+Hornik:2008}. \item There is no simple construct in standard formula notation that allows one to separate several groups of variables from which separate model matrices can be derived. This task occurs in many types of models, e.g., when processing separate sets of variables for mean and dispersion \citep[e.g., in the \pkg{betareg} package,][]{Formula:Cribari-Neto+Zeileis:2010}, separate equations for location, scatter, and shape \citep[e.g., in the \pkg{gamlss} package,][]{Formula:Stasinopoulos+Rigby:2007}, regressors and instruments in instrumental variable regressions (e.g., in the \pkg{plm} package, \citealp{Formula:Croissant+Millo:2008}, or the \pkg{AER} package, \citealp{Formula:Kleiber+Zeileis:2008}), variables in two-part models such as hurdle models or zero-inflated regressions \citep[e.g., in the \pkg{pscl} package,][]{Formula:Zeileis+Kleiber+Jackman:2008}, alternative-specific and individual-specific variables in choice models \citep[e.g., in the \pkg{mlogit} package,][]{Formula:Croissant:2010}, efficiency level variables in stochastic frontier analysis \citep[e.g., in the \pkg{frontier} package,][]{Formula:Coelli+Henningsen:2010}, or modeling variables and partitioning variables in model-based recursive partitioning techniques \citep[e.g., in the \pkg{party} package,][]{Formula:Zeileis+Hothorn+Hornik:2008}. \end{enumerate} In many of the aformentioned packages, standard \class{formula} objects are employed but their processing is generalized, e.g., by using multiple formulas, multiple terms, by adding new formula operators or even more elaborate solutions. However, in many situations it is not easy to reuse these generalizations outside the package/function they were designed for. Therefore, as we repeatedly needed such generalizations in our own packages and addressed this in the past by various different solutions, it seemed natural to provide a more general unified approach by means of our new \pkg{Formula} package. This has already been reused in some of our own packages (including \pkg{AER}, \pkg{betareg}, \pkg{mlogit}, and \pkg{plm}) but can also be easily employed by other package developers (e.g., as in the \pkg{frontier} package). More applications in our own and other packages will hopefully follow. In the remainder of this paper we discuss how multiple responses and multiple parts (both on the LHS and RHS) are enabled in the \pkg{Formula} package written in the \proglang{R} system for statistical computing \citep{Formula:R:2009} and available from the Comprehensive \proglang{R} Archive Network (CRAN) at \url{http://CRAN.R-project.org/package=Formula}. Built on top of basic \class{formula} objects, the \class{Formula} class just adds a thin additional layer which is based on a single additional operator, namely \code{|}, that can be used to separate different parts (or groups) of variables. \pkg{Formula} essentially just handles the different formula parts and leverages the existing methods for \class{formula} objects for all remaining operations.\footnote{Throughout the paper, no terminological distinction is made between classic \class{formula} objects as such and the way they are interpreted by standard processing tools (e.g., \fct{terms}, \fct{model.frame}, \fct{model.matrix}). The reasons for this are twofold: First, it reflects their use as described in \cite{Formula:Chambers+Hastie:1992} and, second, generalizations generally require extra effort from the user.} In Section~\ref{sec:motivation} we show two small motivating examples that convey the main ideas implemented in the package and how easily they can be employed. The details of the \class{Formula} class and its associated methods are discussed in Section~\ref{sec:implementation} and Section~\ref{sec:usage} illustrates the usage of \pkg{Formula} in developing new model-fitting functions. A short summary in Section~\ref{sec:summary} concludes the paper. \section{Motivating examples} \label{sec:motivation} To illustrate the basic ideas of the \pkg{Formula} package, we first generate a small artificial data set (with both numeric and categorical variables) and subsequently illustrate its usage with a multi-part and a multi-response \class{Formula}, respectively. <>= set.seed(1090) dat <- as.data.frame(matrix(round(runif(21), digits = 2), ncol = 7)) colnames(dat) <- c("y1", "y2", "y3", "x1", "x2", "x3", "x4") for(i in c(2, 6:7)) dat[[i]] <- factor(dat[[i]] < 0.5, labels = c("a", "b")) dat$y2[1] <- NA dat @ \subsection{Multiple parts} We start out with a simple formula \verb/log(y1) ~ x1 + x2 | I(x1^2)/ which has a single response \code{log(y1)} on the LHS and two parts on the RHS, separated by \code{|}. The first part contains \code{x1} and \code{x2}, the second contains \verb/I(x1^2)/, i.e., the squared values of \code{x1}. The initial \class{formula} can be transformed to a \class{Formula} using the constructor function \fct{Formula}: % <>= F1 <- Formula(log(y1) ~ x1 + x2 | I(x1^2)) length(F1) @ % The \fct{length} method indicates that there is one part on the LHS and two parts on the RHS. The first step of processing data using a formula is typically the construction of a so-called model frame containing only the variables required by the formula. As usual, this can be obtained with the \fct{model.frame} method. % <>= mf1 <- model.frame(F1, data = dat) mf1 @ % As this model just has a single response (as in base \class{formula} objects), the extractor function \fct{model.response} can be employed: % <>= model.response(mf1) @ % For constructing separate model matrices for the two parts on the RHS, the \fct{model.matrix} can be employed and additionally specifying the argument \code{rhs}: % <>= model.matrix(F1, data = mf1, rhs = 1) model.matrix(F1, data = mf1, rhs = 2) @ \subsection{Multiple responses} To accommodate multiple responses, all formula operators can be employed on the LHS in \class{Formula} objects (whereas they would have their original arithmetic meaning in \class{formula} objects). This also includes the new \code{|} operator for separating different parts. Thus, one could specify a two-part response via \code{y1 | y2 ~ x3} or a single part with two variables via \code{y1 + y2 ~ x3}. We do the latter in the following illustration. % <>= F2 <- Formula(y1 + y2 ~ x3) length(F2) @ % As usual, the model frame can be derived by % <>= mf2 <- model.frame(F2, data = dat) mf2 @ % However, there is an important difference to the model frame \code{mf1} derived in the previous example. As the (non-generic) \fct{model.response} function would only be able to extract a single response column from a model frame, multi-response model frames in \pkg{Formula} are implemented to have no response at all in the \fct{model.response} sense: % <>= model.response(mf2) @ % As \fct{model.response} cannot be extended (without overloading the base \proglang{R} function), \pkg{Formula} provides a new generic function \fct{model.part} which can be used to extract all variables from a model frame pertaining to specific parts. This can also be used to extract multiple responses. Its syntax is modeled after \fct{model.matrix} taking a \class{Formula} as the first argument. For further details see Section~\ref{sec:implementation}. Its application is straightforward and all LHS variables (in the first and only part of the LHS) can be extracted via % <>= model.part(F2, data = mf2, lhs = 1) @ % The same method also works for single response models as in the previous example: % <>= model.part(F1, data = mf1, lhs = 1, drop = TRUE) @ \section{Implementation} \label{sec:implementation} Below we discuss the ideas for the design of the \class{Formula} class and methods. As all tools are built on top of the \class{formula} class and its associated methods whose most important feature are briefly outlined as well. \subsection[Working with classic ``formula'' objects]{Working with classic \class{formula} objects} Classic \class{formula} objects \citep{Formula:Chambers+Hastie:1992} are constructed by using \code{~} to separate LHS and RHS, typically (but not necessarily) interpreted as ``dependent'' and ``explanatory'' variables. For describing relationships between variables on the RHS, several operators can be used: \code{+}, \code{-}, \code{*}, \code{/}, \code{:}, \verb+%in%+, \verb+^+. Thus, these do not have their original meaning in the top-level RHS while they keep their original arithmetic meaning on higher levels of the RHS (thus, within function calls such as \verb+I(x1^2)+) and on the LHS in general. A first step in using \class{formula} objects is often to compute the associated \class{terms} using the function \fct{terms}. Based on the formula or the associated terms and a suitable set of variables (typically either in a data frame or in the global environment) \fct{model.frame} can build a so-called model frame that contains all variables in the formula/terms. This might include processing of missing values (\code{NA}s), carrying out variable transformations (such as logs, squares, or other functions of one or more variables) and providing further variables like weights, offset, etc. A model frame is simply a \class{data.frame} with additional attributes (including \class{terms}) but without a specific class. From this preprocessed model frame several components can be extracted using \fct{model.extract} or \fct{model.response}, \fct{model.weights}, and \fct{model.offset}, all of which are non-generic. Last not least, \fct{model.matrix} (which is generic) can compute ``design'' or ``regressor'' matrices based on the formula/terms and the associated model frame. \subsection[Constructing ``Formula'' objects]{Constructing \class{Formula} objects} To accomplish the main objectives of the \class{Formula} class, the following design principles have been used: reuse of \class{formula} objects, introduction of a single new operator \code{|}, and support of all formula operators on the LHS. Thus, \code{|} loses its original meaning (logical ``or'') on the first level of formulas but can still be used with its original meaning on higher levels, e.g., \code{factor(x1 > 0.5 | x3 == "a")} still works as before. For assigning a new class to formulas containing \code{|}, the constructor function \fct{Formula} is used: % <>= F3 <- Formula(y1 + y2 | log(y3) ~ x1 + I(x2^2) | 0 + log(x1) | x3 / x4) F3 length(F3) @ % In this example, \code{F3} is an artificially complex formula with two parts on the LHS and three parts on the RHS, both containing multiple terms, transformations or other formula operators. Apart from assigning the new class \class{Formula} (in addition to the old \class{formula} class), \fct{Formula} also splits up the formula into LHS and RHS parts which are stored as list attributes \code{"lhs"} and \code{"rhs"}, respectively, e.g., % <>= attr(F3, "lhs") @ and analogously \code{attr(F3, "rhs")}. The user never has to compute on these attributes directly, but many methods for \class{Formula} objects take \code{lhs} and/or \code{rhs} arguments. These always refer to index vectors for the two respective lists. It would have been conceivable to generalize not only the notion of formulas but also of terms or model frames. However, there are few generics with methods for \class{terms} objects and there is no particular class for model frames at all. Hence, computing with generalized versions of these concepts would have required much more overhead for users of \pkg{Formula}. Hence, it was decided not to do so and keep the package interface as simple as possible. \subsection[Extracting ``formula'' and ``terms'' objects]{Extracting \class{formula} and \class{terms} objects} As subsequent computations typically require a \class{formula} or a \class{terms} object, \pkg{Formula} provides suitable \fct{formula} and \fct{terms} extractors for \class{Formula} objects. For the former, the idea is to be able to switch back and forth between the \class{Formula} and \class{formula} representation, e.g., \code{formula(Formula(...))} should recover the original input formula. For the latter, the objective is somewhat different: \fct{terms} should always return a \class{terms} object that can be processed by \fct{model.frame} and similar functions. Thus, the terms must not contain multiple responses and/or the new \code{|} operator. The \fct{formula} method is straightforward. When no additional arguments are supplied it recovers the original \class{formula}. Furthermore, there are two optional additional arguments \code{lhs} and \code{rhs}. With these arguments subsets of formulas can be chosen, indexing the LHS and RHS parts. The default value for both is \code{NULL}, meaning that all parts are employed. % <>= formula(F3) formula(F3, lhs = 2, rhs = -2) formula(F3, lhs = c(TRUE, FALSE), rhs = 0) @ Similarly, \fct{terms} computes a \class{terms} object, by default using all parts in the formula, but \code{lhs} and \code{rhs} can be used as above. To remove the \code{|} operator, all parts are collapsed using the \code{+} operator. Furthermore, the LHS variables can only be kept on the LHS if they contain a single term. Otherwise, to stop subsequent computations from interpreting the formula operators as arithmetic operators, all LHS components are added on the RHS as well. Thus, for \code{F3} we obtain % <>= terms(F3) @ % Instead of using all parts, subsets can again be selected. We illustrate this below but only show the associated \class{formula} to save output space: <>= formula(terms(F3)) formula(terms(F3, lhs = 2, rhs = -2)) formula(terms(F3, lhs = c(TRUE, FALSE), rhs = 0)) @ \subsection{Computing model frames, matrices, and responses} Given that suitable \class{terms} can be extracted from \class{Formula} objects, it is straightforward to set up the corresponding model frame. The \fct{model.frame} method simply first calls the \fct{terms} method and then applies the default \fct{model.frame}. Hence, all further arguments are processed as usual, e.g., % <>= mf3 <- model.frame(F3, data = dat, subset = y1 < 0.75, weights = x1) mf3 @ % All subsequent computations are then based on this preprocessed model frame (and possibly the original \class{Formula}). Thus, the model matrices for each RHS part can be easily computed, again setting the \code{rhs} argument: % <>= model.matrix(F3, data = mf3, rhs = 2) @ % Typically, just a single RHS will be selected and hence \code{rhs = 1} and not \code{rhs = NULL} is the default in this method. However, multiple RHS parts are also supported. Also, there is a \code{lhs} argument available (defaulting to \code{NULL}) which might seem unnecessary at first sight but it is important in case the selected RHS part(s) contain(s) a ``\code{.}'' that needs to be resolved (see \code{?model.matrix.Formula} for an example). The LHS parts can be extracted using the method for the new \fct{model.part} generic, employing a syntax similar to \fct{model.matrix}: % <>= model.part(F3, data = mf3, lhs = 1) model.part(F3, data = mf3, lhs = 2) @ % As argued above, introduction of a new generic is necessary for supporting multi-response formulas because \fct{model.response} is non-generic. For model frames derived from single-response formulas, \fct{model.response} can be used as usual. The remaining extractors work as usual: % <>= model.weights(mf3) @ \subsection{Further methods} To conclude the suite of methods available for the new \class{Formula} class, \pkg{Formula} provides an \fct{update} method and a new \fct{as.Formula} generic with suitable methods. The former updates the formula part by part, adding new parts if necessary: % <>= update(F1, . ~ . - x1 | . + x1) update(F1, . + y2 | y3 ~ .) @ % The \fct{as.Formula} method coerces to \class{Formula}, possibly also processing multiple arguments: % <>= as.Formula(y1 ~ x1, y2 ~ x2, ~ x3) @ \section{Usage in model fitting functions} \label{sec:usage} A typical application of \pkg{Formula} is to provide the workhorse for formula processing in model-fitting functions that require specification of multiple parts or multiple responses. To provide a very brief and simple example, we show how such a function can be set up. For illustration, we compute the coefficients in an instrumental variables regression using two-stage least squares. The \fct{ivcoef} function below takes the usual arguments \code{formula}, \code{data}, \code{subset}, and\linebreak \code{na.action} (and further arguments \code{weights} and \code{offset} could be included in the same way). The \code{formula} should be a two-part formula like \code{y ~ x1 + x2 | z1 + z2 + z3}. There is a single response on the LHS, one RHS part with the regressors and a second RHS part with the instruments. The function \fct{ivcoef} uses the typical workflow of model-fitting functions and processes its arguments in the following four steps: (1)~process the call, (2)~set up the model frame (using the \class{Formula} method), (3)~extract response and regressors from the model frame, (4)~estimate the model (by calling \fct{lm.fit} twice to compute the two-stage least squares coefficients). % <>= ivcoef <- function(formula, data, subset, na.action, ...) { mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(mf), 0) mf <- mf[c(1, m)] f <- Formula(formula) mf[[1]] <- as.name("model.frame") mf$formula <- f mf <- eval(mf, parent.frame()) y <- model.response(mf) x <- model.matrix(f, data = mf, rhs = 1) z <- model.matrix(f, data = mf, rhs = 2) xz <- as.matrix(lm.fit(z, x)$fitted.values) lm.fit(xz, y)$coefficients } @ % The resulting function can then be applied easily (albeit not very meaningfully) to the \code{dat} data frame: % <>= ivcoef(log(y1) ~ x1 | x2, data = dat) @ % The same coefficients can be derived along with all the usual inference using the \fct{ivreg} function from the \pkg{AER} package \citep{Formula:Kleiber+Zeileis:2008}, which also uses the \pkg{Formula} tools in its latest release. Apart from providing inference and many other details, \fct{ivreg} also supports \code{weights}, \code{offsets} etc. Finally, for backward compatibility, the function also allows separate formulas for regressors and instruments (i.e., \code{formula = y ~ x1 + x2} and \code{instruments = ~ z1 + z2 + z3}) which can be easily incorporated using the \pkg{Formula} tools, e.g., replacing \code{f <- Formula(formula)} by % \begin{Sinput} + f <- if(!is.null(instruments)) as.Formula(formula, instruments) + else as.Formula(formula) + stopifnot(isTRUE(all.equal(length(f), c(1, 2)))) \end{Sinput} % In summary, the usage of \pkg{Formula} should reduce the overhead for the developers of model-fitting functions in \proglang{R} with multiple responses and/or multiple parts and make the resulting programs more intelligible. Further \proglang{R} packages employing the \class{Formula} approach can be obtained from CRAN, including \pkg{betareg}, \pkg{frontier}, \pkg{mlogit}, and \pkg{plm}. \section{Summary} \label{sec:summary} The \pkg{Formula} package provides tools for processing multi-response and multi-part formulas in the \proglang{R} system for statistical computing. The new class \class{Formula} inherits from the existing \class{formula} class, only adds a single new formula operator \code{|}, and enables the usage of formula operators on the left-hand side of formulas. The methods provided for \class{Formula} objects are as similar as possible to the classic methods, facilitating their usage in model-fitting functions that require support for multiple responses and/or multiple parts of variables. \bibliography{Formula} \end{document} Formula/inst/doc/Formula.R0000644000175400001440000001241212510770244015326 0ustar zeileisusers### R code from vignette source 'Formula.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### options(width = 70, prompt = "R> ", continue = "+ ") library("Formula") ################################################### ### code chunk number 2: example-data ################################################### set.seed(1090) dat <- as.data.frame(matrix(round(runif(21), digits = 2), ncol = 7)) colnames(dat) <- c("y1", "y2", "y3", "x1", "x2", "x3", "x4") for(i in c(2, 6:7)) dat[[i]] <- factor(dat[[i]] < 0.5, labels = c("a", "b")) dat$y2[1] <- NA dat ################################################### ### code chunk number 3: multi-part1 ################################################### F1 <- Formula(log(y1) ~ x1 + x2 | I(x1^2)) length(F1) ################################################### ### code chunk number 4: multi-part2 ################################################### mf1 <- model.frame(F1, data = dat) mf1 ################################################### ### code chunk number 5: multi-part3 ################################################### model.response(mf1) ################################################### ### code chunk number 6: multi-part4 ################################################### model.matrix(F1, data = mf1, rhs = 1) model.matrix(F1, data = mf1, rhs = 2) ################################################### ### code chunk number 7: multi-response1 ################################################### F2 <- Formula(y1 + y2 ~ x3) length(F2) ################################################### ### code chunk number 8: multi-response2 ################################################### mf2 <- model.frame(F2, data = dat) mf2 ################################################### ### code chunk number 9: multi-response3 ################################################### model.response(mf2) ################################################### ### code chunk number 10: multi-response4 ################################################### model.part(F2, data = mf2, lhs = 1) ################################################### ### code chunk number 11: single-response ################################################### model.part(F1, data = mf1, lhs = 1, drop = TRUE) ################################################### ### code chunk number 12: details1 ################################################### F3 <- Formula(y1 + y2 | log(y3) ~ x1 + I(x2^2) | 0 + log(x1) | x3 / x4) F3 length(F3) ################################################### ### code chunk number 13: details2 ################################################### attr(F3, "lhs") ################################################### ### code chunk number 14: formula-method ################################################### formula(F3) formula(F3, lhs = 2, rhs = -2) formula(F3, lhs = c(TRUE, FALSE), rhs = 0) ################################################### ### code chunk number 15: terms-method1 ################################################### terms(F3) ################################################### ### code chunk number 16: terms-method ################################################### formula(terms(F3)) formula(terms(F3, lhs = 2, rhs = -2)) formula(terms(F3, lhs = c(TRUE, FALSE), rhs = 0)) ################################################### ### code chunk number 17: model.frame-method ################################################### mf3 <- model.frame(F3, data = dat, subset = y1 < 0.75, weights = x1) mf3 ################################################### ### code chunk number 18: model.matrix-method ################################################### model.matrix(F3, data = mf3, rhs = 2) ################################################### ### code chunk number 19: model.response-substitute ################################################### model.part(F3, data = mf3, lhs = 1) model.part(F3, data = mf3, lhs = 2) ################################################### ### code chunk number 20: model.foo-methods ################################################### model.weights(mf3) ################################################### ### code chunk number 21: update-method ################################################### update(F1, . ~ . - x1 | . + x1) update(F1, . + y2 | y3 ~ .) ################################################### ### code chunk number 22: as.Formula-method ################################################### as.Formula(y1 ~ x1, y2 ~ x2, ~ x3) ################################################### ### code chunk number 23: ivcoef ################################################### ivcoef <- function(formula, data, subset, na.action, ...) { mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action"), names(mf), 0) mf <- mf[c(1, m)] f <- Formula(formula) mf[[1]] <- as.name("model.frame") mf$formula <- f mf <- eval(mf, parent.frame()) y <- model.response(mf) x <- model.matrix(f, data = mf, rhs = 1) z <- model.matrix(f, data = mf, rhs = 2) xz <- as.matrix(lm.fit(z, x)$fitted.values) lm.fit(xz, y)$coefficients } ################################################### ### code chunk number 24: ivcoef-example ################################################### ivcoef(log(y1) ~ x1 | x2, data = dat) Formula/tests/0000755000175400001440000000000012213624611013212 5ustar zeileisusersFormula/tests/Examples/0000755000175400001440000000000012213624611014770 5ustar zeileisusersFormula/tests/Examples/Formula-Ex.Rout.save0000644000175400001440000002105112510735736020571 0ustar zeileisusers R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet" Copyright (C) 2014 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "Formula" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('Formula') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > cleanEx() > nameEx("Formula") > ### * Formula > > flush(stderr()); flush(stdout()) > > ### Name: Formula > ### Title: Extended Formulas: Multiple Responses and Multiple Regressor > ### Parts > ### Aliases: Formula formula.Formula as.Formula as.Formula.default > ### as.Formula.formula as.Formula.Formula is.Formula print.Formula > ### update.Formula length.Formula all.equal.Formula str.Formula > ### Keywords: classes > > ### ** Examples > > ## create a simple Formula with one response and two regressor parts > f1 <- y ~ x1 + x2 | z1 + z2 + z3 > F1 <- Formula(f1) > class(F1) [1] "Formula" "formula" > length(F1) [1] 1 2 > > ## switch back to original formula > formula(F1) y ~ x1 + x2 | z1 + z2 + z3 > > ## create formula with various transformations > formula(F1, rhs = 1) y ~ x1 + x2 > formula(F1, collapse = TRUE) y ~ x1 + x2 + (z1 + z2 + z3) > formula(F1, lhs = 0, rhs = 2) ~z1 + z2 + z3 > > ## put it together from its parts > as.Formula(y ~ x1 + x2, ~ z1 + z2 + z3) y ~ x1 + x2 | z1 + z2 + z3 > > ## update the formula > update(F1, . ~ . + I(x1^2) | . - z2 - z3) y ~ x1 + x2 + I(x1^2) | z1 > update(F1, . | y2 + y3 ~ .) y | y2 + y3 ~ x1 + x2 | z1 + z2 + z3 > > # create a multi-response multi-part formula > f2 <- y1 | y2 + y3 ~ x1 + I(x2^2) | 0 + log(x1) | x3 / x4 > F2 <- Formula(f2) > length(F2) [1] 2 3 > > ## obtain various subsets using standard indexing > ## no lhs, first/seconde rhs > formula(F2, lhs = 0, rhs = 1:2) ~x1 + I(x2^2) | 0 + log(x1) > formula(F2, lhs = 0, rhs = -3) ~x1 + I(x2^2) | 0 + log(x1) > formula(F2, lhs = 0, rhs = c(TRUE, TRUE, FALSE)) ~x1 + I(x2^2) | 0 + log(x1) > ## first lhs, third rhs > formula(F2, lhs = c(TRUE, FALSE), rhs = 3) y1 ~ x3/x4 > > > > cleanEx() > nameEx("model.frame.Formula") > ### * model.frame.Formula > > flush(stderr()); flush(stdout()) > > ### Name: model.frame.Formula > ### Title: Model Frame/Matrix/Response Construction for Extended Formulas > ### Aliases: terms.Formula model.matrix.Formula model.frame.Formula > ### model.part model.part.formula model.part.Formula > ### Keywords: models > > ### ** Examples > > ## artificial example data > set.seed(1090) > dat <- as.data.frame(matrix(round(runif(21), digits = 2), ncol = 7)) > colnames(dat) <- c("y1", "y2", "y3", "x1", "x2", "x3", "x4") > for(i in c(2, 6:7)) dat[[i]] <- factor(dat[[i]] > 0.5, labels = c("a", "b")) > dat$y2[1] <- NA > dat y1 y2 y3 x1 x2 x3 x4 1 0.82 0.27 0.09 0.22 b a 2 0.70 b 0.17 0.26 0.46 a a 3 0.65 a 0.28 0.03 0.37 b b > > ###################################### > ## single response and two-part RHS ## > ###################################### > > ## single response with two-part RHS > F1 <- Formula(log(y1) ~ x1 + x2 | I(x1^2)) > length(F1) [1] 1 2 > > ## set up model frame > mf1 <- model.frame(F1, data = dat) > mf1 log(y1) x1 x2 I(x1^2) 1 -0.1984509 0.09 0.22 0.0081 2 -0.3566749 0.26 0.46 0.0676 3 -0.4307829 0.03 0.37 9e-04 > > ## extract single response > model.part(F1, data = mf1, lhs = 1, drop = TRUE) 1 2 3 -0.1984509 -0.3566749 -0.4307829 > model.response(mf1) 1 2 3 -0.1984509 -0.3566749 -0.4307829 > ## model.response() works as usual > > ## extract model matrices > model.matrix(F1, data = mf1, rhs = 1) (Intercept) x1 x2 1 1 0.09 0.22 2 1 0.26 0.46 3 1 0.03 0.37 attr(,"assign") [1] 0 1 2 > model.matrix(F1, data = mf1, rhs = 2) (Intercept) I(x1^2) 1 1 0.0081 2 1 0.0676 3 1 0.0009 attr(,"assign") [1] 0 1 > > ######################################### > ## multiple responses and multiple RHS ## > ######################################### > > ## set up Formula > F2 <- Formula(y1 + y2 | log(y3) ~ x1 + I(x2^2) | 0 + log(x1) | x3 / x4) > length(F2) [1] 2 3 > > ## set up full model frame > mf2 <- model.frame(F2, data = dat) > mf2 y1 y2 log(y3) x1 I(x2^2) log(x1) x3 x4 2 0.70 b -1.771957 0.26 0.2116 -1.347074 a a 3 0.65 a -1.272966 0.03 0.1369 -3.506558 b b > > ## extract responses > model.part(F2, data = mf2, lhs = 1) y1 y2 2 0.70 b 3 0.65 a > model.part(F2, data = mf2, lhs = 2) log(y3) 2 -1.771957 3 -1.272966 > ## model.response(mf2) does not give correct results! > > ## extract model matrices > model.matrix(F2, data = mf2, rhs = 1) (Intercept) x1 I(x2^2) 2 1 0.26 0.2116 3 1 0.03 0.1369 attr(,"assign") [1] 0 1 2 > model.matrix(F2, data = mf2, rhs = 2) log(x1) 2 -1.347074 3 -3.506558 attr(,"assign") [1] 1 > model.matrix(F2, data = mf2, rhs = 3) (Intercept) x3b x3a:x4b x3b:x4b 2 1 0 0 0 3 1 1 0 1 attr(,"assign") [1] 0 1 2 2 attr(,"contrasts") attr(,"contrasts")$x3 [1] "contr.treatment" attr(,"contrasts")$x4 [1] "contr.treatment" > > ####################### > ## Formulas with '.' ## > ####################### > > ## set up Formula with a single '.' > F3 <- Formula(y1 | y2 ~ .) > mf3 <- model.frame(F3, data = dat) > ## without y1 or y2 > model.matrix(F3, data = mf3) (Intercept) y3 x1 x2 x3b x4b 2 1 0.17 0.26 0.46 0 0 3 1 0.28 0.03 0.37 1 1 attr(,"assign") [1] 0 1 2 3 4 5 attr(,"contrasts") attr(,"contrasts")$x3 [1] "contr.treatment" attr(,"contrasts")$x4 [1] "contr.treatment" > ## without y1 but with y2 > model.matrix(F3, data = mf3, lhs = 1) (Intercept) y2b y3 x1 x2 x3b x4b 2 1 1 0.17 0.26 0.46 0 0 3 1 0 0.28 0.03 0.37 1 1 attr(,"assign") [1] 0 1 2 3 4 5 6 attr(,"contrasts") attr(,"contrasts")$y2 [1] "contr.treatment" attr(,"contrasts")$x3 [1] "contr.treatment" attr(,"contrasts")$x4 [1] "contr.treatment" > ## without y2 but with y1 > model.matrix(F3, data = mf3, lhs = 2) (Intercept) y1 y3 x1 x2 x3b x4b 2 1 0.70 0.17 0.26 0.46 0 0 3 1 0.65 0.28 0.03 0.37 1 1 attr(,"assign") [1] 0 1 2 3 4 5 6 attr(,"contrasts") attr(,"contrasts")$x3 [1] "contr.treatment" attr(,"contrasts")$x4 [1] "contr.treatment" > > ## set up Formula with multiple '.' > F3 <- Formula(y1 | y2 | log(y3) ~ . - x3 - x4 | .) > ## process both '.' separately (default) > mf3 <- model.frame(F3, data = dat, dot = "separate") > ## only x1-x2 > model.part(F3, data = mf3, rhs = 1) x1 x2 2 0.26 0.46 3 0.03 0.37 > ## all x1-x4 > model.part(F3, data = mf3, rhs = 2) x1 x2 x3 x4 2 0.26 0.46 a a 3 0.03 0.37 b b > ## process the '.' sequentially, i.e., the second RHS conditional on the first > mf3 <- model.frame(F3, data = dat, dot = "sequential") > ## only x1-x2 > model.part(F3, data = mf3, rhs = 1) x1 x2 2 0.26 0.46 3 0.03 0.37 > ## only x3-x4 > model.part(F3, data = mf3, rhs = 2) x3 x4 2 a a 3 b b > > ############################## > ## Process multiple offsets ## > ############################## > > ## set up Formula > F4 <- Formula(y1 ~ x3 + offset(x1) | x4 + offset(log(x2))) > mf4 <- model.frame(F4, data = dat) > ## model.part can be applied as above and includes offset! > model.part(F4, data = mf4, rhs = 1) x3 offset(x1) 1 b 0.09 2 a 0.26 3 b 0.03 > ## additionally, the corresponding corresponding terms can be included > model.part(F4, data = mf4, rhs = 1, terms = TRUE) x3 offset(x1) 1 b 0.09 2 a 0.26 3 b 0.03 > ## hence model.offset() can be applied to extract offsets > model.offset(model.part(F4, data = mf4, rhs = 1, terms = TRUE)) [1] 0.09 0.26 0.03 > model.offset(model.part(F4, data = mf4, rhs = 2, terms = TRUE)) [1] -1.5141277 -0.7765288 -0.9942523 > > > > ### *