From ceff1ba5bafe0d961e46035ff387720b35bd2af1 Mon Sep 17 00:00:00 2001 From: tereom Date: Thu, 5 Dec 2024 15:41:19 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20tereom/f?= =?UTF-8?q?undamentos-2024@0340e4cdd29e55e3c3ada81fb16d2438bf9d6024=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01-exploratorio.md | 294 ++++++++--------- .../figure-html/unnamed-chunk-11-1.png | Bin 49770 -> 49742 bytes .../figure-html/unnamed-chunk-30-1.png | Bin 152363 -> 151685 bytes .../figure-html/unnamed-chunk-31-1.png | Bin 179698 -> 180053 bytes .../figure-html/unnamed-chunk-33-1.png | Bin 169812 -> 170911 bytes .../figure-html/grafica-pcr-1.png | Bin 36040 -> 36149 bytes 14-intro-bayesiana.md | 8 +- .../figure-html/unnamed-chunk-6-1.png | Bin 9788 -> 9580 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 19561 -> 19227 bytes 15-bayesiana-calibracion.md | 3 +- 16-bayes-mcmc.md | 46 +-- .../figure-html/unnamed-chunk-13-1.png | Bin 40661 -> 42056 bytes .../figure-html/unnamed-chunk-14-1.png | Bin 57231 -> 57704 bytes .../figure-html/unnamed-chunk-19-1.png | Bin 10040 -> 10179 bytes .../figure-html/unnamed-chunk-20-1.png | Bin 13613 -> 13377 bytes .../figure-html/unnamed-chunk-21-1.png | Bin 104955 -> 106383 bytes .../figure-html/unnamed-chunk-24-1.png | Bin 9916 -> 10083 bytes .../figure-html/unnamed-chunk-25-1.png | Bin 17969 -> 18202 bytes .../figure-html/unnamed-chunk-26-1.png | Bin 15940 -> 15940 bytes .../figure-html/unnamed-chunk-27-1.png | Bin 44698 -> 44703 bytes 404.html | 2 +- 89-transformaciones.md | 110 +++---- .../figure-html/unnamed-chunk-3-1.png | Bin 36406 -> 36380 bytes .../figure-html/unnamed-chunk-4-1.png | Bin 116061 -> 116640 bytes "an\303\241lisis-exploratorio.html" | 296 +++++++++--------- ...251ndice-principios-de-visualizacion.html" | 2 +- "ap\303\251ndice-transformaciones.html" | 112 +++---- "bootstrap-param\303\251trico.html" | 2 +- ...3n-bayesiana-y-regularizaci\303\263n.html" | 5 +- ...263n-por-m\303\241xima-verosimilitud.html" | 2 +- ...-y-distribuci\303\263n-de-muestreo-1.html" | 2 +- index.html | 2 +- intervalos-de-confianza-y-remuestreo.html | 2 +- ...ci\303\263n-a-inferencia-bayesiana-1.html" | 10 +- ...bas-de-hip\303\263tesis-e-intervalos.html" | 2 +- ...dos-de-cadenas-de-markov-monte-carlo.html" | 50 +-- "propiedades-te\303\263ricas-de-mle.html" | 2 +- "pruebas-de-hip\303\263tesis.html" | 2 +- reference-keys.txt | 1 - referencias.html | 2 +- search_index.json | 2 +- temario.html | 2 +- tipos-de-estudio-y-experimentos.html | 2 +- 43 files changed, 482 insertions(+), 481 deletions(-) diff --git a/01-exploratorio.md b/01-exploratorio.md index f08ea99..04562ab 100644 --- a/01-exploratorio.md +++ b/01-exploratorio.md @@ -67,23 +67,23 @@ slice_sample(propinas, n = 10) |> gt() ``` ```{=html} -
- @@ -528,66 +528,66 @@ slice_sample(propinas, n = 10) |> gt() - 9.78 -1.73 -No -Jue -Comida + 15.81 +3.16 +Si +Sab +Cena 2 - 13.42 -1.68 -No + 16.47 +3.23 +Si Jue Comida -2 - 11.02 -1.98 +3 + 38.01 +3.00 Si Sab Cena -2 - 22.49 -3.50 -No -Vie -Cena -2 - 11.59 -1.50 +4 + 3.07 +1.00 Si Sab Cena +1 + 12.46 +1.50 +No +Vie +Cena 2 - 24.71 -5.85 + 8.52 +1.48 No Jue Comida 2 - 9.60 -4.00 -Si -Dom -Cena -2 - 19.65 -3.00 + 11.61 +3.39 No Sab Cena 2 - 18.04 -3.00 + 50.81 +10.00 +Si +Sab +Cena +3 + 38.07 +4.00 No Dom Cena -2 - 30.40 -5.60 +3 + 15.06 +3.00 No -Dom +Sab Cena -4 +2 @@ -636,23 +636,23 @@ bind_rows(head(cuenta), tail(cuenta)) |> ``` ```{=html} -
- diff --git a/01-exploratorio_files/figure-html/unnamed-chunk-11-1.png b/01-exploratorio_files/figure-html/unnamed-chunk-11-1.png index 34032e0582a1046e66dfd5bd7b5b7c2751a10592..4d98c488cacb2a2b5fafe770a31a0294f9b3c919 100644 GIT binary patch literal 49742 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 z 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 Br`P}h literal 49770 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 =}H_{-Dq;xYhNOucJ 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%0AmiUu-SyxDXMsfe^Mut;F9lgguJ# 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

$`=lb@ z?r+BlYYk%-E6$wRxw#z;zl3!>BAa4FnL(FggwceG>AMUTd#DuMtv*OaAaNx(uL{g* zF1x!X*zItnuiFxZi+&flQt_nNpzr%}#b%ux(Suwm!hh+TDrd}Ro*Sw;0j#-KJRG4F z`s`WU&7mpcM|()dbQo7k2IF>VAQB!G08G{rB1cZvuuo=Y4J1aUG(8emdiD*^PglOk z-;Ad`xYC~;=rDuoQjx=(%{%>#Ow5z=f619eC9fda-)-*BuO10tbg@(=SD71w0)YHs z;F1e<>e?^%$@7q;3a;)2Ko!=bhGOqDu3vnqP5njatgr9=gt3&wJB29Mic;7tUqjs$ z{-~i)#O*hs*sW71vLo_IKHsZ4Aadz>lzB!Ye`pnmwIxxyH?4|Lc_UuOVx%jJMm=Wn zOSFzBaiXW4NjxLcRX-)5{i8&Nxx2zD58=>GlrbRz>h|&`u=Rjy!Zd^o%~*3;)mrDb z8a&*hQhYP7)qD!)Nj7P7>eP7d^7a?CjlRB;3AKrTsNLvRu{DU2TNhfbkt_|6G&&2L zfP^c3@!Cn@zZUGsnl>od*p{+}nUx)AQvZYa0nQAUb*ls{s^M>FJ<}!iCf8z}Z(h-A z@waxer1&KRRYFn4f`c6KUtJdBL2aa$0Iu_Zr9+(hjw^n5;z1Yw{dH~^5WH!mGD6$z zU#DTGJ;x0iHjaf+-qJ{E-CqKe#{0!}ek?Dnau(yVCz;H#XPw^GNK~d2jCYHSas{tnUUcUhQYoRAe${ zfJ@6%{(7(Jg)%$s5PZOdp>;ft4Eja`S@0#RqNkRRB9Zt_MB|-~)wlab16g0pa4k1QWyS zFEhZg7lj{#utqQ_EqpwGY6*s|Q`~W4DJhT-_p)XZGB8jzzc^|i1bNz{e9svi492zH ufA#;r-37}3T~Pd=r1QUup8t;?Jone7U1!~85x)-JfV_-~bcv+#^Zx<(_i~p2 diff --git a/01-exploratorio_files/figure-html/unnamed-chunk-30-1.png b/01-exploratorio_files/figure-html/unnamed-chunk-30-1.png index 55226ab6fc61d7ba6e87f855d26285bea06b550d..be3452f24a22c24c23cf6b8170b66ad684241d67 100644 GIT binary patch literal 151685 zcmce8c{rDC+pTCOqC%NUO36$pQ-eyzLgr91lgK=#QY0jqLkJ0(=ea^MC7H)4v&{3f z*H7<$hwu2lWAA_VzK`QM9*>8g`@XO9I?r{kwa&})n%tE=yASOqA|l#zRZ>EMh-lk6 zA|eu_oy7RgC7P}8@ULC>B-QQ{5ivX^{IkXP_mmzH(P5&i66cldUXOLzt7^1_h)=3` zbg^GBtr*jxexzm=_+#Z^(77&t>(L*c!&b*->4h7`?ykHYu1N`53nf%Ak zk`w(u`O#AQViKZY-k64WO~#%c^@9buxiz*zsi~l4d9!~8w9Uu3C^_FON$@VQvq$i@X`}-BqjtBquKiVtO zv*iJau+5mNiV6*-S$n2Ybs)#S%))y=KhkJBotH={Szqq_tpBH0u;<6HRhXc8ccJ}^ zOr4^JhU5C`5|3?OL4l*AM&svp5=j7x)TU%Q^SEYrltSoOxQflhGvVqC_Hc^`&r$c?j?P*&>Tbr7;cBG#l zPmf!TduwZJQ=*E7`NYHo7aQBi`1ttf=*lmD`T0Lx!V77eue$WMJF^Y9qKk`*mX?-; z)zb8DKR>@Eas#n#+qNB`rry478|8IHMSn?_&l-(kR=58Rd9PhhzI|esym~buC8fl5!^PRzSzTS- z$|`fbk}cpXmf@L1bXnPX=IQx)A5YJ!uU~JkwGMRK_3!cNpP%Sq+PCj0mFN5S?|)g^ z<0kLky^FB4wmxkV*I=lcyfWUAlcHVH-N(Z0_bxg*IwwaZreWvShX+n6o3>|G_4K&5 zM|P=WF(oA>wY9Z1G{Te*;7{X!!Ai1wpKkAQwL~H8nLeQ~l+Oq>PM}W$3C~ zs9e0T{q!BYZ{JGC<>7cm1qGP`)4Z42n(q!?-nscIY#wf9)W725vMxMP7}GK;zVyrg z(GH5U!W~v7Sy@>J4jc%fC=9B)gQbd#(?=lE37FE(yvxtemlt3AVaP9c`palbN>E^6 z==z;A#)^uKZX`S6X20E1*tKgH-q7|(Q7I`{wr6I)gg(4`H#9%qF~FflhDE%7{rV1a z`retPeXo^MS|Y`qL-i&c=f`;JyW?$-any)h*u1+`CYDKV;l~$#R(R8;+$=aAAcbf* zs(v;a7h8uY{r>$s0`>Ll*Nh@|-@bi&(=wW(RWvd>8WtLAY@uXsZmy;l^7QEyb@kAa z5?3cD5z60#gM=rH-Mp~KDTUL!Db-$mHa9hWRdvVB&8@Ai?UZuTwZtYoJO>8{eWmkk z!<8#O^daR`%hf?#23$4!7N0%a9Z0vbw4|r6zuWx+qc3Yv_2}qmtb);%D_898m$tUl z>Tth4bN@0sbw<637T34=Q)i~!LvKC)8+s~|y|nybAJ9bR3&tjOq z@@BD9h=+)X2wsxGS4%!#!X+0eCMqK0w6;9=>(?DG&YtP%X{0~~VVm57f`Ys}dq>B8 zloLG7`Za#tydmtoyp|j5YjHf|r&K|Qg(=6|vrO>MK!It=%YEAK zLL~l1%>0vs$=oK3PA=!qZ}F{c9GxpKFW)DqpCCqQ)|y)O>OSwSTemc_O^-0UU%0NK zVqkH&(n8qw55GK@+2{VL2&d_*UI&M9jk#Zl3Le?T+B-7xRSP+O{-X}}J^I1^e*b^~ zJ<7tw#8Y&o;#y>vW2QRu?&DdGMB`}&2L?hX!si1rx&3!;Zhal{!^jx>4<4*ixSgij z`RyC``RWfJIGHW6J0@fVuFA_V%+B(k=A$`u=ny@#r|Zw{_P*6*I`&qp6;qS4zxk7=W>i*TgC4Nmzn2#h0433S_)6%xKwHbB&9vvJMEGn&_ z|1Rz|(_Kp_F}Dl-h)uVMxL-IDAa#lPy0mn)U3|XPu!4pLoul){x^t{TmHwV!nH4Fy zn)!b`=v_Rh+Q9H|o^B<%GUeLz?`rLp_Ld6MitlobnieL+Zf`O&{7>^4jPOOiH)0an zV|ql8Io;0Xh@a&9#6)3XVLjfqp`mvi@x~@5{Zn>TRaHp9>dDz}-~OWOS$tyu$Vj`2 zNA~E2d+dk22aTQJx&&<6IVLKliAK%i_VrymfqopN2KK{z(%X0lJ zNyVXBDLJio`-!ca$9}Yl#XY59N~bw;Y!Jz_Flhs z?OV24$8BBR+DM7c0$cM!#c{+^ZRlxZf@PW)wDI$&4Y!i${^BNzw6wI{ZtKh{h2@)<>jA0Z!zyCCCzYsn{hROMVX^fc*E+I4Ay?_ zc7OQ0>bOJEdSAI0yJ&>fNnu;tg~CD+=I_H+rn$nky;AC$@6)NRHM0e5X z*x2ewVoGR_3UA2RcutRgitB1WQy9f>)R>Jarj1+thg6c)v&?(M8s~j{eB$DcClElX z_1SP=U*E_`?aP-h-@eUUAWg`2rSw#GsVPYQnORv0O~#`)5o-mu6Pzbc^3al<-n`;& z{)H}pYZ2caL)a?T#?4)i5>hAdh0FFd-$Y=+>};FDB4hvr1tTNl09}7yUwV2vzzIVA zDU*v~dtLt&5~%L&+j8M&FG(;tO`eyLk-2s2=hlh4TD5;-gS7f)mK2L#>T11H^O*D& z9O_v&8+*ef_O{4zcsyr#^5-tGLp3Sc*#g-_Z;iZUj{8^L!Ofv2+`7TxaY8@<(5(Qm zgjEI#h^rVNIR`xP^5x5#jXR$Nl|N`!W#6M$QBty6nKzpuQa#?&-OYI5fOT)_7RA`h zgsr3VqV$n7hekF#7uUq<(v0q(+NvtGJWD-2y;w;WBzoRM-iQ&b#b|SKn9i-4sn6x* zW)Fq>3YCd zXU?2q53j4OH8V7%Wnc)OeFTJTU|@h7l#KoU?AbHx(dLHzDZlJ!j4xBJuT9J@kM1is zt;HD`jUsLnLqj@TGL_0oN~vRA_4QnQe2ORbPuq#)X=-U}a|K8VpFR7vx*E{m zw331hZ>0Buoq(+IHdV=42T_gF-m$ea4CH%<=Q52Cw59*(Y|pwgIQOe<{3l>aU*GK( zLCb6ZndCFP=_}XP7fOO8Sr8B_^W%K-)l4FG_m*d|A#aI`mjr3Mgv>oFS)1?JL>bcs zJ!>Blj&%$T51--XO?O(doS8e?`k;W2I}O-xPiRPVV9)FI-?8Vy{8nAq!gAqurb zmrm`jAZ$3dBW^n$97J|j(GA{bI$IDH)&WqIybu>3@95z0vhDCvYpW_V zFD+SDSJ!~SAFr1EPPE5LYz6uGsOt3*q8;DA^LjDu!5`4!IZr7}6wH&c?bGq6 z>Dx#tqG+OSAJ%TdpKax?Hd42{tyVsB5W(;fw~;aj$zMnEjMgRBUZ* zzTV+&yta9-!Gtz8IPFH_SQ9Pv_H4EStrS5sY&Yz+k>TNnVJnHx`gwo?RM(Z1lyLvr z+DsiyEiG5{_w|No_hHb+WWR z7Jhd+P)sb-xnPatVFKl5fj6~y%9B<$v%bC_$1%{@YcIlBX@M9ueJgtEQKbca2U5Ju z_`x()O$CJu5=guq*=Ane-lr#Cml)`tm%!&gh~06&cZ*KN!-ro?Yg0W}7b|}a8x0!j ze0_Z32&K2+t1cbx)I)OvyPWRbOZD}optQEKN}Zb7tV6yYGL5}}PHl_!uCA{0)G`+@ zl2D!z7N()5KF-3TN|tQUHI2VOq=PP)sOE|G>O%#E<3<^G8P(;;`Jv2q?oC8Zq-t5+V}jj zuDpDGjW{JfyEOVSAygg((cH|JICG|7ptU$$Y(2Pw&60eE6M5_K;RhaHzkZc5Dd+iD zEl<_2Jv4KZonvBrT<=sx+OA15$F9c4Pw5t3yC#zawXohY-4ZD++J$z047d3Y8BCE7 z2myBTU=j+V3>KEhU#o|^Y=;F)qO!9$x{4i6qy8zWO3K;Y&OL{0_+M+bsmLmJ+Q`U= z>Uh3cN4DB?YhO>#TNyoPeD2%WkfZY-zb!gBb`CjnrZd8$ufIR>{d=aw3zcgOZxs$)IY)4@#dxf~k>_r?)qH+^|Qd2(P$zFQ})|F$;^RPfv#@Z&7(A z6olD{JbM;BIk`kmdOYaGi&V#jKQCWWfs0TiT)OSQ|NPOqb}iLm&e-cBx~dBoFCwL# zlZc9n8W=7*cX;p4tx0TJN=mQ1yu6m&koJ)Qz;jS}{`y2A&Tlq2WrvJ`8WJxT&Kyl4 zws`pX@wn8~Z{$oggjG3$#6TqM;S)DBv_wuEcbt{g;P+P)jsRvqLqo$ahWyKmi=RJ# zMxS@L@K~P;Y8sW@%&tipY!PQ?Q8n2I2GcV$sJm>ZPQ@w=Pfkvz>s3d`#Gp2)3c3K} zT)g-RY|~chMgsZ3eqN-8Z|hUE=W6v4VPRo8ISWotNk~ZxM4gUZ)Kid9_7cZuzr2&!Qwf>%2YBbqSSO#P+LHd(!B~DAcqaqa4WbqTy%#HxhywEhT8sWZza?wTsn0^m#+_jl+ms9IV~typW5cS zvEb@e-uLU*FMMllsor({6Vv)$M#ku6LD7DH6CG-Q6M0Rd_CltFg-e z*T`8WzfGVwraB}#nei?sC&+`Cn3z2~g9Dpe(Re#i>Vv`+&b2XvebyNpx1@OTwDZFD@1`$coiFo6b);IK^$;}!N!+ENMJ-lHP?}-b#(qtpn^94n z(`DCOsjrU@mEY5+Ps?rO<>i@qf4d0?kPxXJ?(A`mH0Y4u;oGxT*Ih6#V*?`Izy78%OJS+29Q83CFxI zxi^c9b){RTEe#&Ib#{&&s()B+L61%{^DTe_Wu*m(N#A31rO&idSeY4ppMtVQ;IGne zGf`Zt;)&HT+;wd7LexDSol*xfl8!!f;IaDIDA3_9x!ht!TH@T?=Oj2eITan=5=(C> z5Jfwssi`?29GLgLNzX(&S(#fzrmSrKx&BW){vq!t9)Zo{Te7bMJ{D;m-djT;nN$5{ zoWz*^;+2Sqh-?a%C&w-%D`(iZp+04}II>4oUK%q|;SAC+RXMSrzzc}S5@OQ5jN84! zp{T2GGs0KYFYI!Xkl0FzlBr>8ZfJNo8XN!QX}r)AA3vFyRShZ{z7xGjhzcTM!q3{+ z2mk@8gwaGJzKl&xt*ouPGL0Hvg>E5Y-!E*_+HSe#pq^b55k>fo2MiohTV3Wxn$Rii zcJC7`S=w{TEw0J9$6+)X(AJwykkfHBrn!P}U*)7+FA@`FIka8c>i+r5%r+9U*qM_7 zDq1J8;Sv%&Jv{b$N}LV9TmI}o&)Of`_y#f}o%0^vv61Vq)+aW?-?shfn)NoXxq6Q9 z_jPEb-|dL-xNzZu3!xoqP5boeQ-61nBe7d=LVUz>%EmI6m(;*!_?*yk^j`nTblmtw zm^8TRW;w!6y>~~1U5T8$GV}RsB$kNx54PDjE-o)~mRo;ZpWNXve)^?kab`nTxXUDo z!5sgYI%W7M(YwB}rynx{BnjKS z*iAazcWHU`{>TKYxVY5Ss1#>!V&VZ|Uc&7MgZ0=#L`^9#@33s-uspovv&jYP_k0gU zrQE!F-~4~nME>6>E&ukZ_aY|nRB>aiX}YMy5{RofU}~9f(;wYQwVkH6Q5LN)k2X4{ za1}51;ad{3uIu$17B*VndP2<1%r;BqgzLr%HeT^3H9NBH@lPqd|NQwiD%`UfQ8GIm zdbgCibrsqxGW*ro?oUlU=sjDu1AtHE+ym}o<>H)mdgZ&9<6WZ*YzH@&;6cK9s88fI zI^6qdXz08vmdLkKvn9OBz8mYjGBk4I`{;&kf12*Amlw>7F6G+e-b*bAQcPv@riLI6 z{pKM*zeJc|qc@%IMAPVSym)NnnyK7H0^SMU0u8J8-RkNpcE86E7`3BEkD_s67ZG3F za#~RS`#`PW@bcUlPeSR_iNiWSh(TN2k$0b!();=ISFc_{klF_h2BJZ6jOy+7_My+7 zRbhCflnvtzL;Mnve%Zqh@5qR_)9}M!bWjVxpT)<(D;f$rk?ux$@$i=~Zx`E2`3b!&S@RaEiwit(;78LX zN=h4Y0vG)Eo#h$8vZ zR6BGX^|r?Njg0!0V*8eUB=lbNVb@M{=34Zl+`m;At_>3e3no5%1OZU#%VcnJ>ivyG zz%fwoST*!krw_@hsU4(L8=N$#dwrcP03Z?>6`X5MPEKsBo}u9ok{YYrYrCm(8jj_k z(BG=RehuW%2=wv4UfVoDHQ@W7RRgGSYP#Tk25JswsgL*dy^M%J8Tr%K#~dI9 zy!_V0-RksZt?CtIC>=yazMf$-K6c@dJ|I7nY z&3~sW$Qs>;q7WvsQETqPCnnbYL+JGBxtx--B=3rRNID2?dbbgx=oeC=n4Q<OIGQ!W?xTY_IHr5| zCO!F5LLf||prUECQh8d)!H`Rj{a zni|)W%I2zmp%2;F&C#UJ4~s2g8tfng186c!Nl6{LuU@8f^cI*-h+$wlGiDxc4C+p3 zEf33IjSnmQJwLvm-gM&uZkkAcx9B8Ms^qWVztf~F5iGBD)a(en38)xiH=Ua8NxPk0 zT}#U6p|kOHgdNY(m{sv@5xiSx$Pf7wylH!Tdxk-Mc4nq3zoe9urM303Xi)XGJeYU)Bg-<-WPB^7<>c-f8-F*>I(F<>&tiq3KJ6~bgWi|J<*rCT zM=@zm3i%%GJk!6iCjS0?^z^i6`|5~FrhcvFHUc{5J_;D2Go=$V1Tw+Ar#L($1nJnQ zOW)3}wIUzeO^}6zi1tuod^u~U_{tVDj_oBc7fhtXOkCO`c*Jd zY{E?o;;d4Wy1TwUB|e^&pMTb|XQlg9od`E~ss3Ay7vfrOHBhX-`+Jo4p&@66bORng zto+V25{|e1{>XZHu*otqcg$Pb+U(KGH8(edZb9%AuTEEkK^z!|+?NLmgZXQHy|}~d ziAoC^PE8@Z$u~>Ue;U151O;?oKH-PAmB#4X2wVr@n|W|81#5ejtgvL`0uzJz6Gw+)bFiFBTC3*H0K;u@`Y1y8*W z|DiKJx@+GDS|_bd&~QnhEb@2LI^N&2XOG0Mu`x|m)!-K|bQ+}1*Ww^N;WDjqxO`&2 z{+&BcD;+)E83q)fd({0T?^wJtD$DEb)d|!^$bp^-k@z^dvS6$1A1+7nsd zQ{*T}iS}wVsuvampcIMOsY)h|*_-$2ZP!=rn-gFA`Q5U3qsh53+bCaq-%j9Rc+=ya zeCtGxv@}*y(5cb9g&@1_rkJI}YM*XTbszeC+X5Dk@&p;{0a?At%3pu}L<9w0L0?g~ zn($faC{K>#!rf+F?VC4imERMbH4n~|M&^?9l@foppdYogLKDPAMJ|2i=FP6&-Zw!( zLFM0vW*6sGi=CE`pJJ}~%5=yk#?9CjzIpQo+5%b~5C#cKpn}o1V(*BrFZTQRkTXL9 zkd>D=7zdf#-qF!E3PQk75_}Z$EOZ2jgQd!0(o#~q+Bb?bGhuhQj2C?AlG@|S{;5NB zbl#WyiyRkJx7a5rA^WLAv6$!@5+_RxzQFA z6BEx95RJi9h%owkK%CdrJxcle*RNoec%#P`)H_(d>|9^;^qpqh;z*b95>0^)&(jp+=7t6jhUfr2eWAnL2n;vd<~o-D zX)hAcd(ilQYc6VT$lp5Nnii9sTJQ3AfsuwHH7r;u5$ zN=cRr}seA=14Tk?+!VEed~a`rvoTjGYsVQ^^ZFyHyCz1jB+ruoj8%|@`8}X zbtoW#f3Tpp#mYfN%zneqhZ+Ky4pp%u$9%_*9Z1Kv-?f`E?%pF@->RxSy;CBj2_C8j zNtTz;*Py2k4i5U}B$GbuAe51@fA1i!E;3 z#>NH-MTsr>-8)qX3ObQ@+9^*uZ z*TjCPa4JrSxV7qcbbJ+Vk=Tq7@D>}6ttqstE#n}GrSKq&|K!9-#MmjycWj`_d+58dg>-&+P@!+S=26a`^nxi$B80? z<$a=))YOYPWv}of^H!$CByQWTumw>0Wn}PyWrE$PsIZW`h?xCd(+EM0PlxA^(JojK zIDy@ff{aY$Uhf0Qv`gK|8aXbY{(`u)n}@9i>%txJ9}Kr|k1Lf|RD94XYIksifB>-* zC`?Ch)=1>CJON#7g^x;z?SzwSf@}QKBTw` z>VnSBP8UeW88kL~Hnpj(H->@)vO<%n+tSe>u+87@DR!oYJO(t6+wnO-F*-ba>-XnC zALKx|UZ8+88yg#^Yjx7;MC~FaMay_J8i^6ECU`s)_tMf1jgCr7U>WxD>-G)}x6fcg={+0dM9H9+Pasb2pYAeuQl>7yNJ{gUZ` zl)ZjS5*GVn71WfKZQ!5Dw#)MMCBO`2W$Mvf0q}MkOOYE_C4fM(7*jZ@JYfqsFY%O| z0pNsDV88=9%FGQPKBI<>H%lAwhAg7zR&&i5cZAb>Q_^AeMjku5xuzkCJV z93rEvsF?JvLPNLAyjtUEO%ue~rz|*!b+d-g8z~v+Tv!!3hEZl<6Sq_|`rS z{I~YNV7n#JA}!bDS);(BiMEVN5y!{?QsJ4MW#>hwKJPumY(-YhLH z!T|#>hiPYSL;e;zaq*%*w)g&d%s0JS9Ui1_hE0feaPmlvg6#{vRo8zbeu z$Hls9xrE5QPF36qU{8=|t)K>h?J>~Tuc)l-P$mAVq}Ekcb@IrOTX3hMTT)2KjEXuB z39iTi#INA#)7FQs|M%v^AN7R({r_N2ba0H*tNCk9oHuFx9}NSn@BGcVY3p8}IZEx- zHdy=R3->s0Nve^N5vnw53Emso1mk2cD}Z+gMn@yGKDmfwss` zDi*>V8X2^X_$?S$;fjVHR>Q!L8Q&*EQoJh(~xMw~+TK)8;nRN=J~PCwmg zYJy_E)YXYO%)XO3zR##q(4Vok3{(w?Op_MQ8FGag(gK3xXXfGa=VYU#!mx*4 zecU@lMMZ^{89=nj*xJZw7%rJXVdgNFW5;eND~mZTUOVouR^xuFYXa>H!D8fN(Q$JB zGY=0BC|=F8-jp;nFdf1I`9_KD7}Zq}3$yJ(0Rdpi7=3eWC$tp*fX#d9?>`e%vKm`b zvH`3iEi0?nBZ>QB3wY*H3=t5)8rBV2`Cr_O*D%Z9cwgk+WmYvb5pU9BYFuRj*4F0P z!^(bV(E6@uBasxCO6Xd;x^5~f&#$jcl*~12fDg-cUdgt0RngUrkzhU&jf^01`Euw4 zOl=+MdZd)N`~3W~E0@+`=T;}9*4Z}GrcvMLNHAg0#9dF>{>ZIg2(Te3iQTK51zl|0 zWc$=@Za6dR!gbrez$OcLRJ#zWt?IQaO))=}&vP&JQ?N&Al?I5HB+cI+X(%awj*rXg z2Bhn1#N90R0gxOV)Ns;8YxSh)g$BpQE!`CYb3_L@iq&yaMeS8hVzS z`>@ON8*gEa1vkk;1z+!yM$dBK$tu?9e|S^r?mL({I4pyGgue?7${7EK06Tk4bmeo8 z)^kM6p^D>wE{uFf zUx~tot?jx{(6fh>RM%T=$15aefO6}N!ib27RPJU25u)4Z~oX?yqY zpPl^qX?@*g-atV?!QLL_`4lJThvej&S;jXY%u7ms3HA@59?x+rJ9qKoul|cC!hm{w zD0Z#BSs|6s#yD@twj*h{?+BnOn2*W#`b9-LZ*xe&l< zXo8S_sgR05$*~2zkBu$om(Y9CKR9gBvXGQxu)&JGONj)Q|w^cOtIc1aFMKk1Ub16#N^7L1n#A4$cb4p~NlKZvA zL-n}FF4-G|6lH01oX+HAhrxaa7+w=cUcY?Ft0n&m3_1oO8e*=%`i|Q0*Ti6Y=FF)m ze(&220_lndE5WUqH<)=R)(X%+1e{V4@;OSN*QltN_wOblCjR*86G$vsMJ&qE62zPLe%`!i}bo}Vi7#K6-;|-A3X6nV6?%QW?bN7x;dH>${ z?p^&|tG&I4rL7EJmUdK4PNsTu?C~9xDgXSLUd$;M&kk(?^t@E;cUXP$r2j>ec@J8> zHGlMMcY8sQgTuP5SJ}DKr(qQnSM1M)t(CMj(Doi$RX`(=H+^U4_I zM^p{)kC!E|82hXYF`D$bvNA(Sn=>e5tJaDAP;4+x^W1hnUDKI?bG9Y}(#%}vfRSbw zRk%8sslC7`c$@&3gI5V2i-Ds$XdDH*6Kwu;R*mQ&Lotauyz0*-rQxKcY&fsD$#F7KlZ2nvFcSMFO(!8t;GxN!saqO|L?Nh<`R6I9U*L+CO1_R!dU z`*y8yh(!bR6Z|NjKT9w}_Q8%t{{h7gmSZtYT~u?G)aW;}N0>kQD%GAJP_Ys*G4|G* zE+L8R40tmkW~C^U+4cMBdP1Y(Yx_cy1^B&We)~YRVZB>r-0s&#YbhXTT^JRNjD0{p zo5wAvwu)tAc=*pB{UTQoMsY8HnEn(sFc?G|^7!#qucgG!#YB=&YMxSoU z_uGXZLqKu$3pH+7Z1Qm=1HSC;7j9j?TtN^QL>=e%`Y9(K@RW$VnYpug&*jU86WtaW zwlf&?aXtz~A(aHHd)47AxH11s)P(hwlJVJf^l4*3o#@pehS}9VdHQssr$k-?vO-*_ zLK1Tk_^}Tkvc(`YM0m5GK2XHRQ_Cv&QwZ}M7RyYZA~My@z~nmO6`Qr!MHuefN<8YB z4&tWLDR^ix+qCT?c?nwFZ{PNI2qCrIQbu&c0>dyirKqc`3yKKOy9?}%vUv(*!UUys z*5{=6Rz)b&&ToM@HFomRHnjoY*C4-TfCzc3@@dy}PS`$XYI z3Pzdkq?kwD&Mn1$2aQ26y)%YRjynF5Jm|4>IqChzYbLP_q z`xCzvFn4y{H}v;1qB;o)2}x4-35IdEe|gMw)CKHekWG3qjizajww8EGX6CE8quxf0 zE6-p;iriQ=$hK=5X-cd$c%QN3AV@%d0k?+HIaH`S;vTFwzt(kiiE?rIdRUzeA6_V0 zazD)>TK?SrmMlBxk0gnmUQfX4B^>T7_oAU$-%A$wVPSs0JKwt6kl(@4F^o$$?;c^x ztuFQZiVMuW=A*9+N2+wTPj3?SFa*SwV4?PcdcrQJr(V}JdzGdtr%Zdp*rb}zVC(>) z%jwb~U;Tc+muS58JUkHx4m1=wzHPj&bJ(oyLcO@Wz5Tq)44P=DjyBfTRd>>{LXd2q zy1RpMNw25z)(S_ier;$?jZC8(FapYEynLi`ViT);1R76GPky%Yc= zyZ)iXs{ScVcY!Np6m=jh9J1oBt;8WRHn7|_H!A~ntj+i}8NgJJHXIP|ui1S*cPDU! zu7K6QTixf|Fi!#Tua?5o*B5CJ9#r71)?5qSYu8?=C%a&}0V1y^r>(U$G+?RN^w`*A z0s_taliiqFQ-@{&o)R`Wq*)o6=S%L+8*2-Vun2zoWG~VUH(y0zDu11OX!6cm4U1n@ ziWT5G_OD_TbHYrbLHHcU3G5N%7DObhVwu+}>;2U{x6I21zkW>*Z{*&cm~t~S<8b5; zLBpx8-~t^2`Q|h&*+kKT77!0W2>foZq<(`iLmN!sLth?Sn*E)kc4bYVSIF2fHOs<` z-&Xg7?$Qlq_yr>!Xp7Q0J(WO*#3UMt@!;ll^0P|qZoz2sP$ zu_C9z#^tnv(fX$)@Ef?3&Q8;Rvjon}!~Blc4+#)7#rkN_${oN2nVa8^$33%f1)1+* zh&74h{M>c}B}zj>xVsx-05nHmt`tjH5df@_bdUK-)?E2CZC8j-M;pF5W4VLLY45&$ zimIwYWd;9aA&ZyXld+2u5_nEC&V2N-kJ9J4ph}M!DlIL>743 z0hE%FNlH%E^PQ(2ShPRR&W~4VFlMi>bb*i+S3DtTtDDwhh-Rk1Mo}GI7A}3de`xD<-ok0tPfR1TE%TBj%->0*!9EVmG7Ym`< zz+Q+DMfp=(Ky!=PRY`gI9JyW?9J9@PwBTu0VngOI(=5KLoVz)-Mi@_xi@Pi#@x1Lg zJk5Y%>FEk=0qIS1e_fER6hnBY&?V6DT|MOjaupE$KP>nCq#AIHQhDNMo?njf^{uy~ zu_+`ytwBjl2{_}53e8Dbv^l(|fOiR+0?NJ(&1!l+})AB2o!T zUw z=**cSu%~fRT{9PA71G*H`M5ZiN?6{nGL7=~G;KYnrx#bE#CE_j|5i$A>8&(tGgPC0 z8bMEY$JnT*|1dtCxN7X%L2_wKCt-4aUaQ#YOuDV=*5{Y|uP`}(PG3OGVf>4$W-Q!; zn1rNl*&PFl`Bp~7pWKf1cJyRt{pPE0UoFM^CA8f`homInwgXO$?D8j3{rct2wB<9;gO27-BF^&%o%3Fc zp#sH}?sXsv7Cm;%YLUCEU?J8UurpDmu^}dod>?%Gf6oP&4M?d`RP~Yo8-Q2mdE)Tl zH(iNeuU?A+mWwE7oHKumNrIlYk1&9B!}TA0LL3gLWRgRld#PJ-FU*x2Du z-XIc#EC(>BeE8W|%sorbS0TJXQnS z6jbvIQ7WPMiCP7L4#*Neb{1}yhF9Z~?h!!{cZ@?n{TDP2?`tMnH z1QQd|MXKsyH(MnP*CH;*vM$Hiug$f15~>mgt_8EwoN1HK_(>{3T5}8*F{3*L(NqguPe^ZYwn~pttMiT;$>g#neouf%vh3- zq+G!*IhZZ{Cu7yTtMEb;cqO~}HUrsh~a4z7rPmqI4eus?St4|y9#6AL2#X}Vuf6S3p%B?{qF;W z!zD~7W}h?&2nc+=la7(6v9U1>>q902xC;!VM)F=BiaC14C%BGc@>t6U*{G?eM9E$= z6-`Z3{zHIGC3DH<5UCt@yGN&|^YZXm)I{HP65IIVceFp;_|Ba>g*Ra_W4|OgI67Lb z75wabhUWr(C5%9*Qq6^Fa|>0$WkQ=?k~R3is0|`Ust5+Dz~d~FKF=0tR~m0iuHyD^ zZ&(PV@vyUfurk@hRsn28v1bn;Ej(T;&dm38L`CO~3x6H-u0a1zAQGFJ=1eeI3<}Sj z|B%4g@paPp$wv*0%YjVqMva!8{J`p6oc}AHv9urTTB*$+66cS ze5kAQ-%z~08?prKaHlZc0{2V?<{KV@@A6>~zAORdN!)I-H`omC>ZrgoR9*u}VY=D& zFcZRy<~fAAw}*@jvb%ZF95p3Ig;hl))n@~z4R#RSJG^)+b7$=x+Hrq*F(aPm0uaTm z2TtwZjq?Jsxq9?7+U%+{(r$07?j}q)u?Y(oq^Dcz==6S%l_oeLDnAn3kS%hs<2cdh1iCK} zK_A%HH`ZiVjbdxg(#+D@YEaTXwJCFb22l{=)NlYAx=EQ!C?>>I| zG$%VdJ?#u1<-UFQ7bkzBQ-O^J^47@!sYhj{f$pa`IGjfk;`?gWSLF8AK#K*bAR&P) z!_LnBx}xfqXaCF+TsO>q9{ssM@@O2rwo`dN-ZOicIYEiQVD8e|lC%nU0W z!RAcxPP$BGIMa>?#}4pJFdPqxl!xuD+FaY#wmt3B`W6mG>i%ChH8qRpvr-tuT{<^Q z{Q9@3ix|04W!F!v1?nb<(C9>*R+oUi^pCNKMMeTU2M0?^SmuE%oB{0(t^}P341vx| zzk}M?Z1?TBzwqZ~V5yfxG@kPDsn53$ zGZX&)ir266z|;gcD#5cZIDWg)8Sn{%o5@$o>kDlybaWng;G<6 zUDpdYnFfd{{@Zo6vimV94RXhH&lx&-@^cb#3O;cno%Ge?pFVzsu`)pFH+E(6zC|3s z;H5ZaCqifNid{^4DT9PaXfMm8S0grWbOuA*L{Q1w?+PPhuiwd9^1^#fU!L&}?=KlK za@-$91Tpe#PGuh@9XI>lok_0la7afS45AQmSzSa@0&I_T{By?ZX56|w1aL=gC$SzK z?i2eVZa%|IS_f`Szp)o36%K_Z@mutjpe?Dc!(axx2F6n{AZVzYPl4rZ{dnsB1|Wrxl$?(RY>w2XjKQ#@_6$uGD2L~#@YbOd_H;VBd*#ZVG*3LPs5nKZwc>Qlv zBReqB((d&t2lI|>GEe}IN~;%Y=={e(9lU?l8$QVVn2P+zW8kbBSmDUX_{SY4H`)qj z9>o1IwdiG~TcP^MyyYX6%{A)lWz2VTl{Jm$t~RyTS;d9P890qk)MoO9w+v_c@TD{g zHl~@YkA^kWDM=?btB*XqvHzV1`$OV%$<`Kj_Fa!3cm7(aT(D=AC1!CumpM42Qn+w$ zVwbGj{gR%EB^#?3qU12Yf^EBT1LMPEBO|-X$lmI{RXBOF9T-)Oo%+nXzm^j2CeNF( z3IVTPAyI_L#3`}mX?}oMZEXC$N|a&C8%PlF0{{cZN_i04hxu^px#j zD(&qp@o{wgB=5SLtAvb`Gb5<;({UjoAr6k@++5YDYfiu=1pmte7_`5CS9lgJ26Gkg z_VUsaL;?8u0Ifn~2GAe@h7x!IGdsK71J#;1j0Q`3;@MftUy`WGIy!H_muPaPBql=e z-1-2P5vZ|LrgFR}mvCAmmByu5!qy-;$3sWo&<%5R>=i`(RYk)kui0?Y}e)#sP$~E$o0zA-BV8^r!qXi3O+@4n3&0_+O{1>=SoyFmScn|}LA2xWOCB|VtQ=iuxRp;xL0h5d}+<*3qQS@=n$BPQ^6v|OOldgID;aEEN;&X)NZHCgVPWD zB;6R2yHP{*r3xAzTBV#he)Y%4fA$hd2R-a&`uc_Xi^MWGV)L`%Kt=cQP$1i2j78;O zKY0?e9SRVr3<%?3ZSE*IfHcFbMr&*EnfvxKUu$Zf`}&r+tmUh+LpcLN(c}!O>_;Gh zC8SI8Jk56yqy}#iT7m^o2gr9}_bndx7F72RKZ4Zy{6k~cK8PR4yl8#qY@f68(34+r zRqcKY7e{)H88AK|)a(>q=*6ex@a_Wmeb?ho$lvk+56`WhGzRHao zRlhCMRAtr!Q%}rzhS*uZf`b(BYFQ}?p;*hxdPhb^f?$ERlpNo{{MeL3Sh(Xgx7)eNNVspd??8_?yP?oR zI1~oN=P;8!W;QDda-Tk}q>BqB2jVmD%5Qo-TO*@yYC5*I(1Y|pgd{gS%(KzAv!S{d ztTIj#GuqyOV_qUmMrkHt#l&$bv9a!BYQUzL)F8rGFYS+t3fSU^9#q`{y)?vx^M7RI z<#B`+nylF}fbDc2XE^w_dwoLON=3BfWM;k~UdNWZokmN96PL)26K~zNEg2gh5*%c5 zG_Tu9rw@`4F;p{|i(Z~{9X08MhJrGIX2G^D&>c*sKNHH0rG^jbud zFkNE*kC@-}{r33_uU)uYOGCr?2x>ouUR2?smoH@)nCR$Ca4OL@!r*v_r+yu=-SiNa z9w$Z6?*ERODY)~vEvRyVcOhFIl<6eFe8cSbt-i0Ly`88OTv~6sgo46%NO53c(W;OU zgWK^Y)z42P7pppn(I0hHodvCp#Z|^zj_7W$?yYh#{T3!J53nsL zAOQIg(lJJB6-qPO#;(#}8Z0LV2PN3tz57AtIL4cpIp|c`mEoX7^x{N5w9HrGBxazc zB`S&<_VgomdH8f#lQSnPE8y`k-(3aa@)}mXf4uE%vP(OU@OQkD>In^nZI0;N^&d+! zg9gG!W=juO_in+-PKt?5-%Y-e2?&r<{4d7d1fHvQ-5XzI%Ge;8GF2o~A@fiqDMQjg z3YE-d9y68XDG8~NDM^wk%$bsT%Zq(kzr2e~PV6 zaq_{=Behnu6YH<$&d+lP4_#$Z@$WiIIPh#a<2b!j-g)1)FXk7ncphIjAK%cy6mLS< zb047T(hyj0y@l3d^VnYk@KEv{mG|A_(77ad{JfzPBSYbTDEX1*vR3~bBw!JdQ2Rkj zGxqX)`BVTl6l~~@yEOF8<^3C}3pAo}TfF$pC_>k%S;>5DEJ+G|?>-oNH%oG*-Gm79 z^t@NmJ7&K^V-Tfut566xhCs;^R@J-fEQP9q!l|Q2DG58777zQ)5x04i=V4>l@;kYi z(x&on&_N=Kh8d{kRDsWi=SNd<$la1KF*1@@Qeq@5`s6=W;}$5d z%kx`95X?GU;N(Y&83>WH3yu2?NgHo5Ne5+VrPs{A9OMG z+Q7!nZq-NWfy#-nx^xNmTt*Iit=PoXZ3GdjG(k7O_-FdNDVO$R2?zrYZhM%^r-~?p zDO=GUJ0A8^uS25)zZ6m2>xAm8y3+aP-#gOD=|Mi67n$qm8Fb>;Ua}1?x|}O0uG`z` zATQ-yg`#G0(*N!8#I@lU#(MT7)RJD7+vF}VIrn&@qG1-HvVD8p#NAIs=g?4rU2_&_Z^W~0QSk=I9bMZWiZBnXv~S-iksMYG&#Bg~ zh|1F-h7lhD0twF%q9%Y}0VNQ3<+%>B4V;0(-1_4S`xEB3*Qx!w;!mxFHP7KbGejly z{d7SSJ4b4t!_JKx*zVq^IevWK(J!}>uk-AmZ_KNlo7_)UrqtfRU$8yu>#x@UhjxLc zp>5848HmNfw;lp0OlmAl^Bm6NC!an&sOkYR9ccW9QGJrGhDQ#eST`Rbn+Kl(1H6=| z$bbj#k*ZC##N|{hpIu#CWgz@Zv}zL*H6f3DW5=f{sUD%6;EXa1u|QTK&x{q z)9gykMBKiSkxWY#SYf@d`(^{20K7yvpmOw_>_bp&t;-$!`Rml&2nLU9cDj7)lmJ`O z(83M_(2OucWsDY-#xf-IVUX6vi^FIn1?lPrTtMc=z4RVRK--Gcgo_u`4<#e#?-Tk~ zOGRvlLrL9uyDP!Zq^t0#)g3P%$MW-W2^d}`^uAHr`tjZ=l`A7&K+6lN5 z0nwFQrA9%U9k+Vd>$FQLdGP$0V`?DJ1`e>{21tL)f=rlg6q-8kCM9)?WE7~GG)W)7 z{BXrWp8NCGP$iVbd*XCqOPaHc_q<+WR_%6m^(#uzzpdLkweHc5L+K|5T@<)JZcUp5 zr0?ZLxmQQ0hU%>OGGZ96jSItC+ed!Nx*Y88K3>}8k&T+6%PF6ztFL!NW#0UmnY?3G zPrB%o)Mn7CK7aLU3JoS&#-w_O{8n&6uU<)`{12%3-<$IGV?V`eXo+Jxk0ag$?Ny~Y z&abLogvY=H4Q5k!cheW`=l|qxp$S;e#dR4Z+uHjjK*In0`Lkv(Zau`x)q+-=T@>0N zdxGA!#F05D8`i}LAw9}s^x!y-3t1Z0t-dc-hQ(XWQ=py*qXeH1Sq?cw_V_^Fe79D5<^!3qT33O=T znh{!>AO#{9d-h8#NFXq}0xx&tAM3 zK@1lb1Y+)V4Z>5|c6tDAuOS}g6Mdf?zts%hzP;lsw( z2cayqszCa1ZXY>95M}rJfjq&dj`ySC%a>X2!lPjLoEgAjoqw(EP zwZw|bO6+0W%tFG#T72sq;_<$49$dr$U%pM9wVPBz(FcDRhmYzq- zCF-JC$2F}9s=S*wTh?E=IA8ZTF_H9g1LT-mzZ(6AljG!bLnzD6>Obp7=mt2dw zqfN!mCLtn{v|}eS{%#1xNBvA+-4b|Mn?5k}zm?jx>&U57^aPrdFBwThaYKVM-VJzv zAMMzX6k1}2q=6E%;|_-o(R=boR6Y;Rl}>=4o-mV)rcrK!ix^UujT<&#r~MVcMjaDf zi42D4Ro-P`_0#yV)MGXdHyMk-S{T1lF1DbBEf0d=F2A~H-SVDrH{@r^W!3)qlQ&W}zHNu~P2rMKE2-1D7 zu6A*Br0_@QT2@vj+|EgEEWh?$!Pe=P^73W)U3Ku;GAbhL=qidm5c*t_3VbDCw;S=W z{85OdU<`-7waVi^Q76*2bF~e^4n`WgroW3Bv)Wk*0?qk$LFN3_fB^iruD8jO`)(U5 z__e#S=-?fK{GWmkxR#lxH!@OhZW19L{_S+xw%ci^HIg+16veU7>{`B|?t}y@WqFoZ zy|~qK$}Q;Dr#Jce;ajqAg}-brEK~{T7VN*Gmw7TLdi;LhM(EHxI|%|k9FkzgMMdrG z?Ro8G@-#{;EYxbZWX>yE+nTc}vtJZM<{xfy$pj^NSrrXTfExm?d!j+zz_B)AUOf!o z7VCAg8}8qO@kQ7kV}$hH`z;F%HLp>0f4{Qe7Zyotk)c8!k?Xwt$s%=#IaPHN{YNhQ zg5CSrHSm%i@}n#m&oSO8CDs1LyWrisY@9pJ&KD$&kcmCuRD13vZV=XXe@#q^>L(lh zOpR!~&S^yvQheg#BRJ2{Bca!Ce-&Dt@MmHIhV1($>6w{F(oet?hn^eFI(F%aId7Sk z4=kR+S1bS2wY0=2S?(^j$i{mI;ZS9vyFsGrkUg_tL_UBI2+1gl8$W%@4`R+2VO?<_ ziF4-@q+#B2wYpl^B9Ppt&B?N+Vg#^F42L{T?Zb2b(gH|H1*KPL?qJ1PlZ(!{uy7fx z3EuZdPgl>YK9Hgpo3pk9)>+;;86Z~kp}jC-9xfYT<-qcAdZYWT*f-c$8xUB#@41JS zWIHR3)3evF8}mx9CjWZP)yH6K8=UW+AugcS`zs2OTTikrS6pAbVE*#J9&x_X5ko}SliYVcLetnh0CA!;ee4hY(YDvGHc=}z4JB4St}qGclda|rtsGyu@hay% zLM&Y0T$U(&dN$i0t;F3(S~s_45&uV>ft&f1xGmgb_L5Zxe@n@pF}mh0SsAW=ek&ea z=Wx!aLy>1QER}$&0!sfSM6n0B}gEOQXstIrrBYsm${>lDULqHkrdHo zE4c{RiDTV5vo`8V=P=+oMG!ejyqiKKObie%3V$Wq@T%SuR1pJ9_%hvXceUeXou%BC zR_Y9~T1y zh_KjLyM(zglb_HiPPtu@_R8LUWv`h=W^{C&LEZ4MqBW4WJ0?>&F2Lu#d$;9zoT~lX zAim6+KGzDe#c**CI#3! zJwX-I;A}wTIZ&`k&|D$Dr3YMWF&j8KHXSIGaP9tm>$lXar~Iq~QvnlL*4wg)roTByQGZ}S`7_-BzZz>nIL6(8%MBOq7~ef*47mM*rlMI5xH7Z z{Q;p2iATa5?G6`3b5Bx=cNGP zShx(_OtfX@_DZMFJA0P&I%ySXp!P0-)*n_-ga$}OwRhl{>;1He08Y#^!3`h zpNoSdF#&(C^K(L0rLzhTcqzf$h25yHxXxua8y2@*#YyyfT|h}@-uS(?hYVb7!50?A zaiD`EAX8dUA0ffi)Ko9w+%9$i^~T5$b)j@V^j2z{-=Z8M< zZdeLH-VrcJRt_#7SlFk+!!k0; zYOdHr+qPy&h&F3W$br&xFQ*btARru(b6>}_1sh^RgEahtf9eTv38Wd%OlVB)RvFbH3SZk2b}L`w+)tk72cuDP5GU-zy;)+IX9 zlCENFU64EnU|0oC@cHRMkc4o8lda2XnDdc&vSrJ~G4)T6I<=(u&-?-)G;pZtQT4^3 zW4CZQotJsIxQzAn_kH>SE5TCs<47b}sH?FY8sybJco1YQAbC~|5Igt`bXV~q;>?_|g{n#gM^S4rH1DGf+Tq6>UKHRaMR_7jC4UWb#0hC5)vm*ntl z1u=@a)(7Ym2CO;qyyf%qOO|?hA}T&T_&r>fkg&2vOl+)DXsnc1ciL^W-0wE)D-=L|Id2QcIcfq`*3!EV7rhL)+NgCDC&tH+xn=jyrsi9x z#d&#nW)P9s$8jANK_l1cH?9uLN}j2>J;AIJ=I*FRLBs z4B2R-phy3gjE=1y2yMg1No&+}_#LDU6Xa6hBvfPs^MfyJGD zEDEdRPAn7|r1v<f zpww$&VqKgbZ&8^c%?sA!{Q|J2a7f%@tdB4YFhCk8ISj<}Y{Ri4mfV<+F}ji1wo!je zMpu&oMH{^zg)Kcx3;1ptlu<}IFU%NBU3I_2-j5+vNir?EIik}n&v%RO%4LsHFz_M4HFioj$n9Z)&QfRHg^k5)zK5IHWx z;U*vpbLX!?3vSsS4XN04>67qpYX%Dd*-uCy%9> z)*Q8%DX(GjT`-<)MDP!>U*Jd@|2C@oVr%qjt>0=KS-1ay+W91-5|IjCFkd+AWcIaA-Yddk#)WGAH_H#HYU30weHW=l>zNVFjFSMO{;Xidpwdb>ISwC=87>G5q@nGKwk%6; zx6UY}H!|{94YI60EK$<2EaMsQCenn`+kCYSHhwQWH6!qEt-TvSkTMDYNw{Sikq9$W z^9Zr{3v@dNm@zHzmMxfKVi z!L3|BR0R;NU$V8`y240D=dn0mj+@nL1=i7kmGU!p0WYt#kr__BY&cBaiX_PA&ZfjoQ;_e`$;S13cd^)^)R z)wQ*>{`eqOKtdt|Z!j8m&~tckYGDpQaLa>31xsnEsdE^2a9}heQddXkOtwYMlznrc zMOm~|-vQt0O}|`<&6*^+9t$aOUTVK)8GoffsT3&r*hJM>8CP+cX)3uUvcwi`OK;;E zp^-t^b};#9K$ih3a)>(m`@c6fUg)C+h_i{Fny`Zn8^eWE;Pr4oum`##AcJoX=Im(V zxul80h+;2=(^yN+S>cg4@c?guLf^U%wyM$zxLKWv50qZ>1^eOrk883UbRq^ zC*N!z3B1{wfBWsfGM57ft}hE`5$#{*CecO`#fah+5SR)D@&O|wl&Uyk2FZ0WZ>n~( z`x;I^n1tFdk1F4M1YZvmz0=|DVFQ@vkfVr$V$O2^{twtIcs}IJ{Ze$Oa$Lyu*ez+6-EA$hmx^c%seUdKFOz_z>$5n?)pWPPX=pqf?Db! z66VHXEplKlM-QoJe7#ZYdqMLXRdGiWCtj8o+&bbc_N(b}cvq zMZJR0ybH!B%%wmd1z3xEQW&}Z9SzA-WbMNOrt>| z3q>|GkUdWF8v3aJ@j;yrXMC`4t<>rcu`x;3RVZZeiL$RCP&0(*;f)CMLmDXD(DIz_ zvA(m9Q%XO_IV{d@JIk<{QiU;28RZ}%-Ka=07C@~pc@{rBJ=oIR0pbs*@(Cci5BXId9#Peggcv$; z$I`9z5$+Ag!R^~qE-pNw2;u_OE3$Lv=Xm9`qpAA^^v|7plw307pm+)fH#nxo$H9%y ze=@j{D;CYTJbw~F9ouwQt>78;wkCrKD9xBbcpzW9QoZ)4m{Qi72#`0Rg4QeqP)mL>uqN z14zYn|2E2Sy4&1WQWAK4`{N`ePFv*_?UswI^1(3xAd#{6x zwJ@ltgoP0;x$1{L*$D+b`BYy&j@V{?37(M{l9RIfahAe96weoYGaes6z84JxK*7^R zS|EESO-L~@chnMi~K*S0=;M@S6>ck<{$$T6R5OFFIuk?E*%{k zjA9gga&k?14Kc~%GWy4dc88>}flEb-3#^LvU2NDGDZToB2?ETNoGRWn5%fH<6 zFMX@kFZBvLSFD2TGrY!0N$M*e@b{rUPT{fNShTo3>bI+E=RkBsT$|5IW#Gf?$#K6G z_e*v|A2uUY?k&>w-d#_C909Nk?gS>1$;o+u>BFAda8E_8!shSH7s{mTV?E6$+}v`Y zU9PHni+C1{z)D0)X{d0AQETwe@YD!5-5e@Xn&=njTQ_32ZBz&jbS<$LvA zn51}l{g&ok@q6XuAdJmBEsl^)1QXo8EyLdQa`gbGT1`~T#ZH!(c-G45pVBTwe+zEk zUX!5ecj{+K!hXul;!#S@@=_7UMz!O_lQJEeU)xqU8AfILL#DGbKbZ0Qlo)}#009rY zz?ggzdh6EI%nY2OAqN`1eVc(t{339Oh}%6|uUSMMNRmg^WV13WvE$|jQZ|b2&I>gg zwypURU^7Vm#X?OCMLhx!kBLd)xsNviBx%`yZ*Pa*+7SQ*FMsY^$Z@VxGoW{PGH{XH zC9J$qY4gfEQ4wDn8fw-)+3_3BA!KwREc=n{FEyHYpBbZwa$rrBE*H*IP*9YmG}+B~ zjDrG!@PCgKuT;QrzuPqoo*_kZ>Bg3QJ~cNIrk;Eg5m|Fn((`&pn~!C?Qf)~|x~cd2 zFF)uB2ftDG2zYx6=YNY3W-kp9K??$Nx1kUuDqdI)2$DO(>I!=|UX?6sUbPC9|4w!} zQ8We{!$7Lm)CP9J2;@v*R>uc(Nz5L?ACE2@iyw83kgr9`ksYYB?jG76RElstxTv6J z6bMHO4>J=JMq+@E!;G}r4=o4qYJ_=;igc153$61|>_X-UdnraHv?CVV?`9y^W?&y1 zDm^TDgvD=PvKr&&Hg8x6^7-Q@;Da1_EvDuLEM8T;06QSqAP}G_apnybfpB;f3J+7>0>HzE z6p&(M3%FZEW?$_n_|H@ruin9fa&V6|H5tO&ys9h+JG0w1CHP>wKJh?9;c7rOS)$PA4-=wl9>bPE>3aOmjbl z=uIO&1oyyjBU{T5<#*r$TE@{4@+Mp$quma2 z;7Z9kYuIK;PSJPkHJ%MOZWNnEweS6Go+%9NI^cPNoD`|6Hw%wbSUedEcna7Z?mtzD z&FlFDSp5-_8&Cq|a1hEj!FRr}O1ZkeCZoBx*}VRN#a&e;f;BHFXmQoz8i-vqc+fv# zi-T^~<+tQq_xozyGsGC&t^3kXAR(8Wc?J1pdb&0{(hFa7JFCIT`rgy@2~`D4UVniKnE z?l;)H2D(jiHcyL+tkn{pOLSt#ggynIiYKNxS=7tksvrxS48PyA@7fc!Yi5V

lSl1oMl+&Z6`HbcP!x%ErYicA{v{wdZ}^-RHgQ@=}F3 zZjwsSxgyn=8o)XzPlgfD)oB7@7G6o4*9y49*yiD3la{_)+n?Q>_feF*9Vw#A+uQ2u z!VndOehJ0iZ(fXiJdIus%S7hlkNtve(5zY?-pIcdP!E*hAJ0YeP!Ip|m+iQwr%Ih4 z%RTl_FvFR5oNDUB=e|zm76mq@3GrU*c+F7Oygw6i-GV5OiGo64y`b;!WNgXsPuZ~( z8D07L90W4r!7nHcT(ED=+jrI-!hl*e;tgW+W6UVLEQQsot9{s>0 zjbLQ*Amke8Bg7~t(v|?|V(6~kNzrevzd^p&*}MkU1C2RgctFDV_DCGV|Rk)3Dc>&M=i}o{p z^uP2EV%ogqJC}38h#~Azz9r8wX_>c>uKB@{9cWYcETz8nSnoFE zU$SrM{O;GU@tL6GM(H0(c+9@X& z_3<23sE3ZJi@)(hAZ0jk{c?F^}<$&%zASBe32vbPiAU-1P0CkJE#hp4t1Rmn9Uoa4XRj zEl*eXnSW}rFO9K(@3Ap6QuIpNNg*qD&Atd@X_YdI>`FW1rTkygQ2*f1K;2DQjITLh%ZUkyhh}EJ{0BW(B6^eUCVJXH7U*X>tL`JL=wtfI|;iVRKaXD z2X(v6c6CmF?|NC@`KKtT^)#Q~KiP(36e z*tRG@Rez3s;XxJr@dxslJS=rog!zDK+5JcrK_zUKPW8^y#L%$GBgMrlnDe=>EnN*( z#`o4%(R+tbs@>ZBT%T1V-dpE%am0K_eSNquYX!P?k|lKl#yudwzv0G)a_i(9WYHdN zX+%+r8|_^HR=KqmyZ2k@b?~?_Qn6b6+or89i*o<$j|duY8JlSt>y6COvyyb~e-DZA zDY2=UtEZTp`--nEby)-9I-2_Rk>s66Pa%#acEw9LkN^Bgnnd2f{*RG4vMC2r8W2bW z$@Pu>0vm2HDqQ#_Wpq;ee2O^i2;<_qs)A9Sg=N)#Vkc7YmGT>qf{@csGW2KK@@UD;i` z954(RI#rCtFt@ZM35@nMw!~(~zFYa>o}RlTDaFNes>|%O1;^&td;$?kg-HKX=>Q~T zoiq9%hM2g@THbziaQv)65Uh11Wh z{uQ-IJExiyA3uL0M5O}ZtRP-Ntkcpqq@Ze@oSdZauj)M>qkiCDS^(X}!_CN8hi3{Z zi??rMR@!*?O=YoyhYgq_8)@_HRrDSJM>m^zAdt`m(pYGgawVyBwL(+pWzCl}UJr^*J$FRdU}wer>)64-12x@j5Us?D?3F@ro<(XljA)k^w{ zBe{o{5<*XzCvb3Mmdwb z==iv!gF~l-94KwbxV;gAER^1U1NWvs{xXDQS8Dqam4;h0J2!{33~v`XZ$#V;CiMf- zoJc$Q=l1n~=qjpR+FwXIQO$8fEFO5UaZ_W zEaKBMGn9Mr79$f2$(Fqm7q03IHKfV$}4dT+Krm8AQ}V{R5LI> z!nBA7nl7amx`3?tlbq2CM2r}dJsk{ZfohJ3JjH|NL^OhCPSj7Qd{jC#Dd<=bV;DVp zL8;+OYL!BcukEiAu*>^v_cU1c?URYQC^_-^y9w9mZAc3Qi>L_5A9yi9e!S4(OAMv| zUx}5_yZ5CB1g@kTCuY`-c{ob}zX87o-{G32u+0!Hm)gvyl!=)X%px9u93G6|6jF2c z=G_T|gOOwN^cIHK&EEzt*Z_&Y`5k+uWNKh(RK8yp>jaNec zC)}6kLzQI)zKuhWj+%>xczsHzFHFz>Rv3h&Ty|^-J4fp9-e;|;)rDFI4~~tGQ}~m# zNHTZLqVAb*FQ<*w>1sHWH^|uS(tp=*=PBGAd83H;EevuF5rOve_D~q+;&USU}T4w8D3B#&`vj0q;!<9!*aYcU}!B`e} z&0!iv6^{WXM;o&ZpQ8e=Gw2n%9~ET?um>SoXU@QD?cM#v{S|y~hJ!acEFvFSW|Sg^BXpxPzJB zSpO-(sJ9)$UMtoZC2@y@a1;8v#hYGdQ21ea5*{O2^#SJcE%8-fnr zvIWynky}CsVGYVuXLUIr=e}wqRFk+p2tC4I0cw;7lXx1SEohkc3veKu9)Sl47}wF+ zUdw>;3uplj62Yb_^zi>3H9nPk+U=;+*f+RL#3X84mkxckk#lE`_xe<}mMo*$%naXM z&n_rfgkS-{J2^&16|qwAgf5Gmd=VyIgYq8bVaCcZMp1L#(LmCIG$&K@$!e$$+S+_t z^PULG`EtK74Qj_M;vmmSv%wQUF#9%WWMA=Cf*v#^X1GO+`$__0>dv{iuo67aLunsa z&@vZG_*q{XlklY|T8I?UhS5IM(oxO{Ix1pEi2d8;BIp3h- z|En&_KfU}}aTGRi)$>y9pwa9xWYwd;fTNI7O~zbHc3ss~vNUJ`;riW5T2E=5DzzQs zwU#lM_*cd)Wz5WK?iW^8Ucy9e^GnV^>LAg8HLl%nWhr5KDrMuVY!bgIQ%AL^4<{F? ztQY^aZ>G)FuYuzhS>?uGpk9RL90wcGiAjSs@YLA`WFusa8kodfy(VwHNCZ+pfz*Tb zIi&v;G58Y-y4DA*l;YyTVi;UqA0B%jE1&5iENV<6)5OQ5%>6H^I3{9H5&xf9{Eh1l z{C9hXw>#vbp5+Ru*nK*wvvHMVt)w9aK8VJ%LJk z+yf9D1WBln%R26_ePKV7%clHw!v=V4c8J6%Nea@iN#yvDZ($g=zWMm9f%v zKGbObMSbZ&oBP?`L!}A1G*Q~KqboE+Z2{=oJ_FJOkihARxtEbfT`&Tn z*@w2>xqtsYQbz$*a(OrYZwmjE@?oKOzFJz9cm-0%TdwjP3 zEzgZ*v#rS;DFUz2=*S2S5pnsDDPsEz4BvUZ9yiLmC<$bcdL$ z^JfCqc@j7jc_Qr{cvS+?J;+uMh%bx>NFE#Ojnfhf5N2*P4A!l)Nyq|7JVF#hC+ zuWkSo7*&7)CJ5S(d*v_jZ@s;JYL->~BfyLZ(2zm;)aEg$1tA-J>o)x8@(+kivYLl5 z90EaKY{C82(dYZ7;RJ^MbfrIVvwv;SyUSh6J-7YFCj(ShII^-Ww~FDbS#7AURG$h{ z?SxDvL=WgN2LXbJsjqe;c0K}c(jIw%sdWe;?R+cctJ6}%d;Pjy0#lY)`iaB(Us)xb z5I*tJkdXjbP7_>nO>0lnCFUeU13?fmIR0-y-uee*@0OxYY7||(sO}5wK@^^RMk360W2t( zpLlG@C@(+O&D$cE7@d4{-L zpMoIKJDcAu7(7fbRGBw%cD%y7NMMR7!LAPh8&hOe+%PHLNW6hJ4H9Zdys#Z}a<4#J zfwPq0lagxa*?cEDgz`%9vu*3W4z|5x7#{AU>F-rmqV_iCTI`c`nCK~bvPn+i{roiP z@_qH9HD1i-^&4Qk;JUE+!BafhW@3aR%s{xaGAbLPUch?Cjbvhm2M4i8Y@DQ9Z2mi_ zFuiU2zW>ypV@6_m@YMMDZWXx!U8g?NRq*Q<#kuAV6P(vjSSX@0ZLu!`0;$Kl@+&E{ zf+1q-7%l@=Jc87}2|vDBr=F5tbG0+*N#KV_)Au87507~FKRiTj`MLO{X$kKNo$Atn z=mnYWD1(5(;Y;9y%?r4WTp2)w9ju^+bb1dw_D?X21q+6U^~Jd=CGfuhb(3&Y{wI@m zP5$kFHRae=dtQz{ZWWDwaQ5T$Dk06ocYo6uCSmB|1XM+33J!+MBtr8^jFqb{?^adi zB}mL6lW!vdJF0=6GKj#4N^h{VDZ&@8@zAqPvtO2TlY&nq=OUN;AHkbf6P6g|xG^X) zTBqs|kZ}ZIK-eM>{uDFvET1L4PD(nDw*JTt#?=t%*s?OGZvHdPdp6pKUyz4{6xKT| z0C4Xp2aw!w^AT8Ed@^97gOU^+fSt&7#pOS;Q zeBcvTV$hXTrY&XLS$~LzMn5`I9IqTP^p25O_*44h^*SDvt@1|5c5YgJ-pyojx zVrr_Yq~tx(QwfL=U`Obm*I2aXJMSkXm?FLw==bu}0`5k1LfP}vyv;?J=hU!r7|^c! zmmEbT=1T|*^JmBcwzkheQp~^Xky&rTKU`Tu`_*O|J#&rqhTUTB`=OOmK07|~F}K6l z7)1my5@dZL=2@i>7yzo3JInp#=pKwFn@@l;5WKwmlPD22mY9F&{<-bADHV?%gpA=&f_cJslQzWn@X?e+Z* zax|9E>~lOYDn6Wi)cJkIBqcgHuV+f6!odUDHSiVKcaD>Gg&l~CD-eN`ih_u#!O*$T z@#h{9BFv)a1_zU95C2~_P4Za}oO2{`JLniyUl_jpiOOscsm;(q0sul(Bw96|h;e8t zR55S|W7Mtc6%Jf0lrZt-h`)SkA~S4VQ%=oHb5qkm15{jd+qqR3Wzw$H)OU19Y`Af7 z>znZ$Ui6v>^A>bnc)ajbXY>C6$T8}26fuAU!6D&%i5wFPdKw{4OG4S##+F;dP_M6j zu{UQuNbIsAhQIx`ymj@@>G}ZR4F6#qrTf!IJ}V+C>xu*LDAcJ`6!;g(G?&u%@6qD( zzy;rSW}VmU(pZqgPpZ@J6!f9juM`(7POzx2PhnvW z!}PhNF$;v3%Uevs%RY z?5-ZIro8nxgLP=-9e(F7XLbr&ZQaBbsb@0Ml)Uv2hBPhaq(e!x{GS z@ogQp$T7~&B_H*~9B9maxw036cnGLbt7<$8hf30m zS}vf3j*00asH@>&Wv?kKFE542Dr}$VCthS^V0cE~-PivEdM7S~4Rqc(f*sqm8)aqS>%_#)oOA;?L_jHfM^HbDRf^?+v(|YO#)s{xMMfN;kzm zrDbZ^rEDZ!*EZetmBNX4tj2@4cU%>{Dw;(@r`XKLPm|^A*P2kf3A(@cpXZh~O|~l4 zZh3G$wqNCsJep|K(a5|#v4a)5C9pvlq}zHftkN7_5Y%B?>CTJF!+7S0k##cCaqX}P zVmHANZ0Wl`zNZ$^WnbCb3^9VVJ61|=`6QO2v}?$5B6M9AYtWjLFNzmNOKExi_Z{m0 z`Ee}6Z=cO?sv5gjbF+J$vo*F_OYh=h`hn11Sf^kc0}lV=hk|+b?hUUZn1)feWtWL8 zUAcQ!YCD8^0s@o-a5oI$bzb$BBa#6hwUFpNwpjD`_kFAb5&-=eauiUWj25k!tkl8A zTVr|`Ax5XO%qy{X;}yplj`^m``bcGh`ZePBAB)dn4<2Az;kI>jzO!Alzdboa?t{i* zV{?P1oRD)H!q~p3RAr-_gcabZh%w_XnX5mxFR305NCtZPYP*2Zp`mTBd5~M?NT{B- zmd1p;^ANkbZC4`OK;|_b*90kOX=evbyLuzLzHEm!Kb3WH(X3fA&vcXLgNlkwX@5Ok z8le>Zf~=#dcDA-j^z}^5=RzvY;d>6dFoSn(iL)=F4ple=lQ@(-mEu$EvPB5>v$-|<3QhekCa#PdiI24zQAE5$zT$sC;ZXAzJ+`F5LZoFhet;2WE8RP z6cm2kv0sGT4QeJldt}dvM`A83)IOgRR1rP)Tc_-sf z+HyWnxB;T!klh2P64|2rYU{oZht>*Y1x@$x&=6@Z_9}{a8Z820_9WCrG$&z%HG-}H z#7k!hVUpGuui*L{Pgs4~7y3>7{EHPo<>($LKjRY;>|0qQum>PV^6N9Vlm-kUp(1Dk zcK>V%w&FxW8px&Y`>8=sAn4k6lRorg%lV@cyZNs@xp$$;tl>$QZGCMFZLN}2mI$Pb zWZKPjnk#$jnw#Z&qIO^WqOu*bpPz9O(jnoZ^SHU-Z@P*2ueoaotP*p{+rlV-@*TP; z3B;3-V)Bj-)6`>l{SbGfwe1ecsi4@UiB`mU4Pzl>4`O09wY7SQM*#Yu!?u0>gH%lZ zcwM#FuZN==(rHEl7mT(UiL}rh0W8DRv7(iwjPY531smR7_V9p!;bpTOX9$K`VXXKy zwX>j7O-$k)P3Li!wYF_w4vL769~m4>JF)}d3;qO%b09guMDz>3?hvFUI$ozxQnTXr znPeLCIC8?m$v=TNR%z|G=eIFeIxEqqNpSe_y0&V@AL}3J=ba|sv6Ckw4{rNn${w`P zJ1EC}8@<7JR<`B6HNm+TTMqQzhhzpeSQAJ=@B=vi#Kd$~QXs*E!yNv~eT^4x z{qv8UpB$+$G`NO3QEGktCu`H78x4@x9Yh%iQ1tx}f*#jV~lPe~8_@!^Rw(?1^ zKtRd7g|a(#=AKAbF~!&<*NpVBh#7?PW+l9Dx+ZO{NvA^tjsTe18@yW>Y=hj~$1VvJ*liI|v#SzLaeNVy zY+*+nQ{CgM6iN?R!TOQ0?{{i|D1(2{l?tddDFNCmdOFX+Jdzxv6RNsQN06cF+cJ*J zFy-eJmjpmJQ`}YRFeyk!RcujO;F)=WA!=mKTr0wjvn})g>^v0p|7O zWM0_*RsA>L*uQOOj*LG>gHsU@yZOrTwGLHg{JwBYwqRM$HbYTTpbWkjYoCcKK^YsG;mBQQhsIaPC=J zm%U#=Ece52o`#};Y(c^E@2Z<<(C!l)#x-mMi~jK=My3@(5D1#Or!u^^*7o(Otm8qa zB6GrCcTa~C?O)#=G_Yi&qk`WA;mB})Rn+R8FT1e@NT6W0K0_yL$Li{(nNabZNasu! zd1S3F9*MDk6nimJ5>zToq!_A)Rz%3lWYtLntcl&*XlO7Xqws2yX4l(Mvr-x0K{}Rl~VVWV9WCS=09OCa30+{9UmP0=Cr+p)z z)J;34&X@-ecyQ*RI?|73dJs(}(~#kQnwt0{B0lBfglrHd?c=Wi*XBM^{PDH8zm!3O zQR+bY_2HJpLKB+3-bTH0RIOclM*?!u{eZN8aVWt@-7I@HB_4IB9YJRpG=2VuksD9vcr2)XTv-D zAFtpAh+oUh%p;l3z;A#c6f$~`4}r(+?J7!2ttBOAp-O-D?02{(&&wIx6WGeJ4spQK z2LjZ^fnQp>6&`v)!LqN42I7$&PznLb$jGP#rwaQo&P&wQ>Mv&wJO4`yVDe*PvIxEE zp=2ij(?}%|5(=vAhxHx1PL~7J@u(Y#y~#)0@JC_EAX%RqSwX%~7F)f0H9oeyuxpoD zUtV?NJzn+-28Qm@=B>NNnKr~=ot0gUi#r2>8R{PJ@bEl>ZZ=F%)q^$xSR*FOVA3W; zx`VtJSOdZsqc1>mx%4p+1d{V{PKH;S!v&6SGarQg-;r98jO{}mR#yL3HwAN!c|Ya@ zN`0_5hh_|g7?Fv&NGLAOO7{g=#9}~c*2{A^YY8+TsDh!xKqvxltipiVbMP9qOrAKk<&1z)%mcj)u#7yMCB2R{I7mYs#J>l#}mx?VNH7Qzu6gn7hfCOC3Mn(?&{ZmXl&2t&2^B*2l%e8kX>VfLE}kN^h;2L_#EUL${{EQ5WE6DeiOY0h$ILI5l1eG%Kj*b0*KPJbM<3)qEZ?+Hy|X) zR(5-omB7uqOe)HKND3hhbNZg0aC7ve9l(Sf6bPc#EJD++&2}>oVoqV=RdVuh+uM`d zHh=);(9B2n2QVA-7(F{lqkDnJI8;d3gD|B4B1SEf;(uy08f_xQj1MT2esesD`*e0du_k$LNtT=O^{f(f(<02OT2v@4j(>pc|kOq zahEb#{$N*wIs*2c%Ab=J6a6>fIHn139BGw@&jecgC3WCDzCb25l{eaew?^_Ul8sh% z)sbE*5WvxQrheIpt_Z&Ys0Zbhy{f`@4kRU~q+swB0{Pepd{@L9-H(e?eq%r;R$j9E zp#URWrQ{EwNt#%Y7KuNK3>+m1XrG=w-BD*NAuIZ&yS%1GY|oy?haz&TWe_z;)N_jg zkVqVx(uLjPNJlBuKsMcT=v_8F+W7UmCMuEFf`U+^sPlwfFO@OzQu4SQFwi1`g>nJ9 zjs{b|cN6aepT2oxG%~{e4*L}EaYKkJn1g7>v zj{}*)?VC3b>FGfXicWnhqWgxJnsJBVi<2mc5Uz#tP*!`@|e-JlS@S^A+mYb-yM;F*o5~ zViv{8LXeMps$MfFt{V7-&K86;(DcjtX+ReSRRz0}7NrMT$|Vy=VjYs6M*O*qNy&O+ znpo^(Aj;9gfA?m#mo3?rdLTHAjGDo|lZu_DrY8Mpwg+p03GEkHuavi_`^&N(`Glup zBA@=JqRTwsXPCC@GX_RRQIfN|vHvIBU_U3Z_i`zzUo4V-(P~loS-VO?SvTJM%NJs~ zQmEWb5bG)grd|wC;~*Gq`Y8N$Q??%e6|$m4Ue63pT43EX;6Y$;NCW8-jaC^QB;Ir! zP}+e4@Cn}!Ik~@q=ANn_><&O~ndB{isAF{2SFfuSfF^PBefa`SAtJuFtDf5#QHPRJ z31#?K*~jZ+I~ddGg+oS?H5&}{O8OH@12#m5C`RB=Gfk+J#Nob>VCy{?A+)v(AC^hnre_~6&~$0RowgD zy(6R>q>$AoXLt9|+qW^e6wm7!8LFO-O%xy{pla`W%<_A(GXM6{iaG74}Dru*aMEqDU+gtnF78%#~oC z;{mDMLlIQ^vUf2jrueY&PHBt~;8WxhHQ#KH`P8%er}Ttxj-d}R#|B|I8< z#BMJ01GB&(Vce8VjYiGooGl?C)uKtyZ-6?kA^=_Evo!@*z+2!(Vtl))slAGRWV8J524k8yRqr zD%(=sW~W^nebNth4jmz&vV*^V@r9atbWy_*G}%o~Du(}b!UGJ6di$)pl>+o?5FnPL zLq%pMJU`lk(1F7vBq&?R^yxdf;`qlJcy$PHo6j=jff8N27R6cC>x5dFc!&q;P3T?P z22z46C=Vy|{%&=s%@1m6?Kb>?&HS;{xq}DkQWIo-`XjI_T~yfnGH4tOIFM@viDo+XuQWy~Q5;Gx1N;nxlF z*@~9!oI{XdXnl0OG#n`h=Mx4?3g3)@M>l@7~4Py@_52oVOiXW5f&#+E8NUuT%T*G`$!Yz~Vy3N}*%-0o1gH zqTk>#h|^7LEL@%+EShi35Vh_Nv0#4YjV$Zf=(AW_IBNj8f|bPF7*w`T4jj6HJ~ zCPu73xBl1ZH|b0=cK%A`Io1n7)kI{%g~vGNB%OnPqnQ4C$F9dvo)4$(=Qdq*2USAc%XJHM+L#GOii zk(x?D=HG+gnhXHbKKB!0zSe^NaGPoC=-?vZh*Dh~TQjW`a^NtAnlmscde816xE0+< z{Q`gx?&zB76BR2xAlqWEgI29z zPQh_y;PdR+Cv7(6$^?w}B^JE+EhMvXufxp@LQHc1(onO7!9U!axN7Q77R z%3QJ;gWk*+dh3p9_Li1^{K(Y85NBSGnN{HWFw5P_>z*7meUg%h`bT^6sn-c!bcA?9 zxfdahn>K(9V}O!H<8RR<0GELh1*nR%bM|R*#LYlL2q9sVqWg>CeqOO06R+>$&h?6p zzgfMfH^G_x!&%dcU78bfU@*O_xLRfwCf#R)(}q-Iz><^dn_5~}7H&u@zxY3VeRn*T z{onqjfnHgl& z^Zdr^cm45weeaU%y3X@+em?K_@jiwhF}zCgv*<1B04;M*I2?)43w#9K)SLS@C8@%R z!NCFrAlOzhve(PLeS4jd@X2-8{(GYFda1CMBP&MJ2mx`z3yH!>XL`0RVcSyaC_P~t zl}V}H$t}uKz!V+hJ$!o8X7?Km{6c19}$or8o`PxRVuQ1-aQKB~j{FF0BN^~%7*JX}_Tf1wU6qxgEJw#lbuHutwue!X1S6YfdeN1n z|JHF=;jznK0XaDnI%PQJNUMss?K>bC6$V{!5%Q}@K`6r!2TgnSDZJ!20JlLlDw;)A z)d!QL5GA|SRXcc;63yBT4P_$DEdfml?ww_2h+vr#_9YOl4!z%v5dtihC^zAkK_0V} zhKB3rZ#a&@ZV7E zHTZQ!GYu!myOimb&Az?*cD}j!2>HZg=q?B^sn$BDspvk0l=werA9wHFi-kJ4eY48(AfSK9;->wFF48By}wTX_MKp)2K&t5w0&^;yBot5nUo)=!gf#DRWG@c2RIhn;`m^mAdolPBp@E+2NE zUaF9=m>PiEABNu~QA8;0*e<$bho|*Ykh%blB&mhN|A4D?uEB44#8~`lY7G+WE%VNS zf6&yV>osblArxxu~7Cdd8s0WVlkOtAQECc)&&;(?B4RoRtu^RP8UxF1e|NWD9O z=Jj6n9@~S}n>spZEH*kjc(nrdsdz<(aWX2kCUH0H7C8Z9*MbWuerA+fk;iCtp-?3R zM1)s&qQxpt*2G(W#s6Li<=igRqz`MWE-Nke_LHFN6L7Zcd}>9oSKOa3+Sr0ke_OY-m1ZPNyzCGKmzr~ z&%D8tAat7FV?(}El9kuw#n~X{akZzrk{bu%JQ7!n)R6drGA9>8e9|H47*#8=1DFhfSDA&xdU`wup6qo)swjn&Fq*x-o?=Ld{y zN=#rYw0miA7&=lce%?T1_r*&gl!uUOHQ(id0mGNFGElwRLL$+%gJbFFV+vo|3?cdRY5*6kpY?_c_ zLlTvu3(Vx-(cV;0)okgUZnQNlUr^BCTjOX=5wa=$U0b?B>eO%%2CjmsL+@kf73l__ zEt~GbdIA3(td4gVU1UgoeemuyAWkHJj?txOXymOs7&Uf4eO8f5pO`WMnht~o;Hz!nCnZG}sEsj}8p(OBszV&Me( zTc;f7b*`MV=-HiJP|yV@2QXzmUqpoASyc7M0uaoy0KP3@w15;So7O9+RS4AP$6rmd zW-Ivr4@@s&55i6^v2$7KZmbp4BLOwccksLflRji*1nQ>e>|?&G8!K_9q>}}K0|3GV z)^uP#pOLW_TGg2uxQHMDSy1qg(DXmct>0hSHyNW(5U9b6V6_)s7rr5J$y}jXXd_f_n4^MS;=ocdbejZ;ztb*~+bZLW}|A9;*`8?c`nVz$_2B9294zXCWVMDap6#9qYCF&o5h6JwtLR$%t4RrlD6M&@k)n%p}6Br^VK|~M5 zu~f8XEMf+~)zrLq=s#{}XLsewE`zdyq8IEjS_R9}Qi^y2QT}5ZQJEmTCI*&5&Dv(u zoHkr2fzqGO(sxu7c@GS!DG;s@6c`i-$Hdq?W!COLuJPkP7cD!_C*}h#4uD5(?Zjv1Y{fes1JUEaTypaxNJHuR~vO$`JA`y~_ zl9ijRVL8vQMCN5sk|H#ILrhPC>mAljGzPD5MwE*|QicFDC#`J+8TlZ{f`uU0OQRb^{ZEZS&jf|VesZuC@5jF;*SIs(uwSM~d#85hyAzDg!qu5X z;%tNiO57Ae~VdPCmMU{PXmEU_L7U0Tm?T zy?##N7e2p#L!puxIIy?>9H<~@kQ!Fl@8P>y9EhP^os(AAynp&dx4YIR(xDSumq+cy zFVjAL640H7BDc>ChUg@gKA_<-F#7xeWPa6W8jVF~H_s3Da4 z`ZbcvI7^O}FD(-tW7I>{%XA@Mu;e0+Dw>JGf$uYQkHxv>?7Y$q(P3wB?}ApwUv3oK2xcW zs&F4Ll&?7kZz?^oP}AnhIAC2U6iC3ArTDr!I(jk9-@fe;5=zd^eGJ)`zK0^%nixid z!U??!=1X`r#S_2x(j~Z?mcP2f`povvGFtS_o=`%F8Wj<3?tue&kkIa+Uk0ktWb!Yw zN%i;^?tk0u_8)$aX8$==n0u)3mG5EXS+Qpr6$lGcbX?_}*@>Vc$2W0wU7ek;fe{`T zZ0pCRq6YIFyG$RvW`*@XlEsRDODM>^(ne{-aK8`b!l4~?c84#o3g~X%w>9Hx=bstf z-8(%CI@vA!RW`I2c+JXo>RuuPoKtmuH#De462TyibGYvYvMNu)m@|6Lj1SocpPa^|o8gW+W?f##jw8hwq2f(?vVWQd#H?SIFD@+wj?;mBK1?dJCY~;}ccT~4ONG`;z_&}l6Vc#(^u9rr3k<9V zjoA!Edpi2P|DozXqKbD3v5dQm6R=h2T?eo z#qXO2l`c7(12g7o0Y!*uQQ^`m?esPhb4PXcg@* z_H8HHG?mL5q5)j6-fvEG)!v41=qNgE5RO zEUGs@f@neR72nkqkX9VZZVhFRQa%q^L+%L7@54}q%`xj#PGjiJ&+jEa2(Sif7*uYk zG=Vwq1=X*b8J`jD`)!mksDJ_F5TnASrB}MI5Iz;MJU%cG9u;+*JT%q{{@%O_&BSIv zeh)KuEc4K==m3T0?vgeA(uqm7#dUxFdv#u_VuXSYKMvP2RXDgna1QAYGARRS%FKm__3JKxlk~aubEASy0{{E6@IM#}uX(K1Cj|vNo zQEo-@Rbnku@+u@UosE;bVTIC|{Gc*M+h{h|R>nQny4F^@h)nQTnv%*De6EVi%M!Wy z8%Ucrmkc$VR7w4=N2E#-GJsIa(cO|nelno|ggz7z0LPdCfZ@ydF zmhk12zkY1XCW~d1j{NY z&~K+u?h!8qGfnZY^#vhwBH#pQA*r~4Vt>mzsHfILyFKcrdI|%%*Bv`LbA-FXi7rAr z@rXnag0(JrmH!$wy~^+opNZH%2?`!jcB5j3zAY9UI}9-}vc)a|0tIi%NyLv3V@m%| zk3s2!?6pZ(#{N_0XucLj`J=wwz5}7E{Y?^e9Q8%aqoeDE(%*o z3uzUtwN7fYhR`%-#7I5}K~c1-g9fQ-uMSEHJb(%EesO&J$iPVe3mT!Gs#FoGjVUl_N277e0@JFuQ>xZokr6=37C^0OX3<$ zH3PdFH97j8_I%A5g0qZ_sZHn4c8jImQG3v4Bu*F4*7qV#lq;pNr0}|#>_3j4_v${Q zPlsNf0>W{-C>~YvO~0skmBVtZF1uWx*4Nzl&jTbW+sa-H+5{sB9(WuQ`&>;;d%hcc z(2#cPrDft$!OHITR^lDu#}$)Kwu}I)UkFo_k%9BjlD5*y2nkpb!s z14$7@eMm4N{=m~>UBsy@Q8CmU_9&^|r1@3WQ>uSHjpeU4_Tr7j5Wd3)e-_wqA@)EN zxyZA6_Uw?yA&kXb#@`oU$7|2HUq{WzKo%K!ZEj?OU)uIwcXw7CkzDiS$+bW9Ki`mb zbaW3<+1pRFnq|5x)LAkqND!Ngrgm=qD{3$!F_w6TvH)EvxVI#X=ke0dG$C>V*!*?g zoc5##e1FWs8ygwCv{bY&i#C5ha*q9{wiz3HG|d+*E;*y?Q6m-YUSBRk;;ub&p{}o? zt4n+CR=}tBBk`VHE3|Xt6zMG!Cmr^4%5B=WPb!8d;2j3z5c&cUsb@MI`sg3d@P9vR z)!=j_2;UXjeqWgvt&xdnCwC%CaiACC0X!i1LO-1a*nE_<)gW{6B7AHw`Bq#uqHHFNar8u-=?h2kLbJ7ZBC!eTz3=$wSm3|gN-!y4Wvbv`( zsUP33_-SBze!Pp01l0+|_dkP_+@NzJXrU2G9;^6B4>+e$w1ZlXj3aF&E(}3eu11i+ z5*U9!&rLGNm@O$uW5$u%loY5@LgJ3RLnhDO5J5h1`id!mM35hy+Nm5rfe{v{v>Qk) zemEG3myyvbCg?*H&WQ)9<0mKTj$9jN8ToNQWzWh38bY(6->RaqHJ)wc{`P8OFz}s% zL+a2O<~N0GoRjnOSQKYdbO|Dqmls58WlA-@lNDaT@OZVA#Ki&Q6ZE{L#YL15gg3F} z!|Xh&l?6h%wz~2cV7UfOD;NdP!C(-NKOwklfP43YotT{+lAFPiXi6CnTA^N1d1vYN zLLcVff(xZQ-HqDu@nl*tpZ;*gPwMFbvN*V$nJ)#dZ10Of$J=N{Nsv0v&E4!J193$t zG`JjmC#RPq(fFefh3(t6nO~MZu=;2naMRT<*r0th69x4>hzVCESeEd_*fcLd(-n*O z*OZhin4UI8V6(+R4M-Q&XehG-Mnrg!R|*GW-{G7C9T}&OsvE0vuNdEkn`2M^9NWP! z$MyK}A$LVbr;UD_?d>yNWlcmnB&XUF-26 z?`r%<55DC4W%^D9%wF%_`p5CNBh?nsL*1`)^-^t!6qU?O@obse-bv~*uq8rVfbuBu za&%+Ndq$+WHO4rxe&>^~yL3(AkV4O{-6BRGEccW+1uMN)k4?}(G`W!k8wZ+L;o6hY z)M`!}*YLyHUr( zr5fy2B686gOdGJ_F3SfH+DkayynDAc=JYYKLwgY86PSr~PdekOl8|)94h~gF$S;T< zCwe{LOZ4P;KR_PD7ovCr!%^!6lC{^<<$Rk$@ucD3zC_~P=%}DKph=*}Gqs6&sa=Hs zK}B_SQ--p3jFPD62p)G#!0}9?8>+DYQx0~7Cyixi@(K#D{NXN-$sn4ph=>Td4+E`2 zMMf&#y0^$=+36?ag7oG{Vl$-rARR-xU$ZB)#2UC9qCH1B`a|MI#jcLr%|902I@qcLEjZr=1Q+&exzVTsavB zj7gwhk&jPVlqFOcgeFvxFS}Zg{yT&O^TdnWu8$7$4JCNBok|hV7J2d&-xJRdPCg;n zfub{nHt+}_fIZ=uhbqR!g@vicc)R*<^t`ZV`{2sCibeG9;Cx+e;0UA!`Fq11a6%lw z`6N%D0ud1iZr;2fgU^>=IPK6pVeaW8-`L)Mby1qvEg^o@g?AGPaV}llmg-R4gqj{@ z($qqrmrD3=gJv6BIqQ0XLRWL`4~k&)lAdiS!n0LI6Ih=3VGf!Pa711Cx5Q8O;l!=U zrmUOv+bixFXYts;fcEk?{r#u%F5dt4na50|dTe9_lKrM>frdG7O&bS6^+X>8*G6!J z)tXR5lM83%!qq2}|a@Y@TNFO*UiSz_`>I%+_y_IvbbZgLVoh*YmvDJhtC zfn*A}3$jb{>&SR(vdTkQkN?82$5R6qJlrLq-@&Z><3}YB#bDE4X%5yflAzD0HiuyX z`sIs(bK)8nKAhk>IusNYJ7HCdh8bKnxb5PfV?h&sPALbufaHG9Fs2~EBof*uh?LMq zLCqYj?g(<@iPuD5rfJx+dBWpB+9+uYjV`{F>`bQF`=YuzHl=|o7a4a{*X}C4Pyl5XQHKMZ7p#>m$4xk%} zo|97}mU_z;2FgwAO7$=#W0{&$dzI|4SG=`-=x>Xaa5WUQ( zp5F2g(xtPz9ejisfPa`?bs|x3i%9P!bCa*1`&Wj*-10=^N3msI%iEs zO%0MF`X3M~_<~t4%L5E%TeHAANB@K(FXb#dH}@(41`NK=?g@wJID|2yaS&=dGIZi@ z@GpYe&KwWh6gDM1J(Wso6SCl}g6CY4s!9od^#M|yr6j>WfWzynj6}-^nRC0n&)D$} zuNJ)rT&WizEyY46A6%ccd-db!8{$IpTn8fCf!twsea$8FatlWXRXCg$tfujwB zfT{B$O(H>fH%OpZHCZ)f)|1DFfBjM(x)-pe>Z++_UfKu6Ub#L?Wqi@lB>VGS+-iZJ zetj`f9k^g>GXSG(0V4i1#2MBU zGuMN0lwzI2!g#^e-N9l1Y!Q-4j}1bB-uD#fhd{6*Kff8svP-8OoSed|`e9IoT^tLt zDO+jrH*^dT9Wt!gv4ZX^;0YNw%KSQ|#~~rgpRD29>ed;ulad6M>5S67%Ec>^KM*BJ zeY1P7er7lB<(@g4&U)$RP*5f*Iitx$p}B97>rwah4TZOi5fTzV++wzO^mDu2GNG6Lh6KkKWaOhv;dX`1#mEi3b~Oq4PsWA{&4agn*X zwYIjBgX6`i8Bt0UgQORYgD)){lB#?|LzxUjD2Tu_hr~Npo(-LyT8!_g<%&bik%SIY zi8)R(s8|Gvbs?gM86XMgf=Oom%IfYDJ3KyAio2n0CLi9|G~|RMHRVXyi}*#%iuXQM z?x1+_?Fb{)1C1$gv(dz7PGGEkuWs8VL(*Q>uQ+QejcxaY{{;;34g!{+4iHDldaN#E z07m9n-iy(*8Ne7ezwd{}O2VH!VUssDGNL8H&&q5cbwD6$I3oBHdsCB^&Z&V)P;hOP zMf^;JlLkjhZYW*1l-y08xXXO<;>*_$l$Lw$hj# zox+<47^P0!;B1v?PvJbZ1%`x&o(E&ttB3&ehc7Efuh4p%xeml!2-f}bLZm^*zaabc zw4|0aM+xnHUcWMqIPYpA!L7pj$V$j6@%?hmhqby9wS)N~Ej9Hr;YSWYx<^9Lgto^l$PHjBJ*???!~az$L1LR6CLnhYl16CP_6 zv$J*0o5#lJxoKJKhIl)=&xkO$2?~T(5{!?ax$(!~{+)`||B6eHi3g4rwo-A1w;FtCOCR44@nmKW|y?D6Mc zD=MC`(5O1GvQuC#W4<|hQ!^Gwp9Vw)uV{02VO#<4E2v$YYK0CY>!pITp`1YYX$-54 zgWCl6OA1;}V4t|CFb~CG7!3futMmZ{({cL->$$(-8z-TMqVNEFfp%t zo2pQhgJg;>mQ;uFMzdAr)Irw%TRO~x6(q)DicOnX&sw5LAm&FWVFafrdyJgPs|0pc zd9D}xYLf*)MkhpK3&YC4?I)!20-f9>sM%Q4v3gK*88bC7?7z6$N*#4@! zp91s^Q5QfRt)S2W`y426pFBb9i{Hg0tTpl@&u=*npn=ECA02pn+1bSf1s%Himg@c| zkelG|56V99>h0U5vn%yo9Lx_G8#@nh!L`NoLHfDPW~Uc6YSIy-y73cEPSU=$ZPxjR zQ*<$3#!Z2WrnQw7ZQfFR#MeaLxF9rA>FHvy{TY!0^4qXCuGAt2c?9ZQb-bEWclTn# z|Ngz9RYIT{6#6o?gjGBHWk{k>F_5~Ef8)-YvipQp&!f%w>p;b&KNCHrSX!uIpk{!b zF}C`BFP}?ebC2Mw2_?Y{_|aR1ZR zbR!C+G^6)F-o&0p77r=2Z3Nu8KOQTZ{~Mv}f5>lFwqw>zO`cd(^faj=L_`yuJoC$| zd)+6uW?QOOM@x?bqJTpQD7{Pj^3Q~3&GlIdAfd|A=Dx>jW1r{dt=$#DrqarZk^T=$ zv5r${Cdx`bm6l@20tDfu>R9py=OLyk9E_j?-utz*I8AhTQ2)V49uoXLU$jFWm@raI zaMHfO1>3o8$WgAhNNN8q0%KU`&|JUHM7aqaFRFMc3IE*CeVrSvp8&0il>KUv1E!Je z$T8w+J!rnjH8xPoL`}|*T`)WQRQ$=@ygVJ_%QQd`FjJ54?F4;^@N9QVz+jPeJP2q% zY=-_LW0~K$E@Kfqe=49>Be5Q_fhm7tz|s>sO8@2JzAfFA@3%nU;1yMgo~J(HD0qV& z-Y?c4OUpjR1=6Y0a5a4p7Df^4tFDID)&)!=y{Ypj9V~x?s(~u>@CH{x ztb#~26A=RJoQI{;4U2V0Z8+4!?imBS-hKZ{e-CBrYa0Ft(Na&k5DM3HF|h;s%hE>8 z1vmHW#c;NnPg}I+ZgIE{>h+&7a+a;XtMBAp?I{tpy!SvQzXTS+4virD(iG-u4K-kz zzrPwTInEp9?;}`u-MS5M|CBZyc$7@Q4M+XIo$5X|29RjJ+dW6I=uSkT!cZYD*CPWq zAJ7oVq4$I075NQAHh(u!Kw18cxnB^yR28!2e3RqxzTUmTlY=5_!ILi*IRXAke$aHAZPv%N)xW1wW-x@Ux5_&b7KM6NTX7Kxzq{4nygCgWhc8K;ML_#NK4%^AI>VMv_beAmT>bX-6tz1Eg3N#v6i&*=mA!SM}n4w6Bufyk`i7~QEIz8i41TK-a!W} z?LqafGpWt^3xV4p*$p@p>czwjrGZ5-f{%(T53!iO{u@|gTT$;~ul-l_ZIcnI5+#06 zM&@MOh_zI7jfJp~5HW^Rbh~}+S`d2AF0Sl5F$us6=j%Qhh#ZfyTb*+`OW?Fo z${3V`taocP?>qPHKfEZ9AP4#YddZLPMlR`DS@yZF?kO<0cZal^UA1WDh|atv;avj0%tl|2~OkCfiNw;qPGL0^)?%5m3N| z=w7bgYSAit70SOA>=}5iga|Iddk!tn-AeOEwa-y(5U#f$>3qVfGS40ti!!cs*{&8SWxOH}7eW~3gMrrZ6dHRV)qQYp-a&u^3{&wYmN7UB>m~vvKm34D0((Yo zV*`05PR_PA1EEl|hXp_W5gb+V=C7UW`;PgRQ&UmaV-wTULJ&Mx;QU%wzQUGS-^YmA9X>lMd+(kety&#fj@ zR8=wc!McxEe~c3e)l06hBZRc8)b`GpXDNke3pz{0E-e-9`Jg_uyNEI4IAl;6J4 z|3Hfle8yt9s}TD$)*}t!we?@hqL&{I07eJ4Fxzw*)9yvg(_ztV@H6s3^|PrS2;wzv zC?#O{7c_SQ$2_`*u+HBAjORm>7~*g6g!etPjo3=iK(A94py&mmP5Uc9 zWYz07Q?D2bE}Z-Sx>a@epFhZ!s`aRvD85Whc}bAPfl1arrNsexHlSFHcNe-g2cRwt zf!igbjbVA3n`U?!oJ<67nF(s)zDdy6gt--wkR(!zyvD#U7tyln2$olTKRHy5;#yG= z)cW5jftC=PW)m&04E9ip@^I@`8jMfq5ae!izmPYz4t75woQ9xb!3VKH<6QRf=TLFJ zb(w$tXD!RA%U;Lu)>`q$QtBh#rj~qMWXyaUj_Zi(`vkOJWIP*Cc~!cGHMCs5()O!u zNX_p_d+Ey8yKH}yv4;9w`O0o4nziHjmJJOmhu-eE^dO#E!}RNT;Iz4Wj)eGK3CYEx zHTH3Z`A!LEw%;zb^R9vV)v*yo8k~RttJ-Op-JTM80>gGt6On?T3%fJrcnASus)cDP zXpBwF?(i9kIJ{vqgBa2sQBI;Bz)+MgfymaXT}XfZTJc&pi9unpFO;0i(#B?`Kis%= zsLNHc3&=FgC$SGLDZRe)s&4m_ub5S4Lup&ugA8@|GJiIRXX89pWf@R1edtn&0K=&H z`*&oRUXHzG(G+(QadCPdCZ%lY-t-=OerhiI;18}l`_u#&85jb~OGnAd(A*>@@}HV6 z_S6tE+Z|0?K59Bf>1tsi#GrsfR*34s^x`t)A0tRQIPjWnD@mN-Rc8M||D%ZAT_^z> zgD|KiK?NDg&s1*1!UGY;xX3wcl2_!3)!OPxnu!bp#yyy6;Dt&C-SMW)n+=va=oxS= z20;va`y5lYGpI!I0?!)oAwW?LPULB#q%fGl`7y*MVL`8R=#c08_ih-?!4u7%gdL}? zuI`YEghe&$>>n-?iPTMNVoNdxY@h-S`~D99^r9LT%grR#zbJp&K4Ci29q-M(KX|yl zz5SiXn!DbY>&WSWXb_(r>@nmE17C%i{tmug)>VA0b%S*=M3}X=pBD;6gxB-jT-|g% z9z|DYZ2#yHV5Nf`vP&SJLyd)s82F$|Lv*5~E_P8QCkyepxcsfCP)8vQWwDWwk&X^; zusWepc@cZt>e*r`Xw}0RA1!zm@QV;UXwi8vw=V-FiZrQq=h*b&PV-|&OjOQH)!DSVV@djk^g?o zt(&5Y{fCzi)~}bUSPU;Nqtb7cyn`_dx;-2$y=KT4bLw&{4-FlHf%Z>UaJ;e!9V3OIcSItclxk4944Mv^}RnD+pzAjh@- z76NySc)O37+u+vu0;Kw8GI|7)aF?+{@6w)^%~ma{Jl>@S1bNND@vU_-hU|Vt+hc%A z}Ocpmo?odX7BOhfBuvvzB=tR)1QL|_IZ{)jZ;|N&^n0mf{v1^ImGilfOt#W~>Jzwi>eV;%iWyMW`ljp`-*-<_(t=1~gAI z96uR#K!!M%E|h?7fOUKpmUUB83C1}=Gcdo+G+e^$x^=5Wl^?s=)jg0{qRwO;`Lzz$ z1N+OG+yhHeAVE?=z&8~kW9XGQZ(yJqBlpAyy70EZyQXUPGMv5aF2pjp=2A`5jamba zYbR8ofgC5MD6Oq8KN58@^v_V2xUFx(d!viDki^5Tfu)}U&5XpV?e-DRQG>DyeT^TwfOO_)7CaN z{SJ%hA(J&Cl~wT0SmF0z_=K0=ey2^bJ~(*^17ovt+BvsyF?JOd;EAHQF}SI!u7;7N z@8b6jBvxB&@J+^9*AcRA-5`^iXImE`HYLltG}zCtfo%Hcy>Bjz1=03hlK~9^X+0D3 z^TG+geqGe_>4d!V(usfz$SV_EgG7%BJ8!h2+uOwz3gRP_{bX=1Yiyh*gxzSpz`;V( zdyEckRd*i=tsjO!1SVyT9sV*Tm@<5Kwc3P9f=IOh77A zaCrDxcs${51Cqn;54tGLH<0?lOagvrV8G^G3I)Y~Zr2Hp!o814q~7oF&C^dqsu%)h z4|L37kud4l*=3aQS@|o+J5Se0gD5kLF$K-(a({|u5Cf`AzL&oWMS>>?tZX9%P2t`=|%vfVSo%X_mdKc=PmKgocfm)WpCqU}kZ&-E=f8Hqdzd-9~Y zr6v1Hn2`KL@kW+HK2ovzMc)}BJq4I1HU`jV-@jL2z(%^bwA2ZfI9i;{ygV9O+7_;a zddo-L3fQ7gr~uEmxLMrYh~Do`fHN+>pn$-ifn01gIU5|7&|0IFy@W~@g)wO01|Opg zVYrIHAfKLx?G7BHnD$}fgefmlTz`Q1c-RY%DUJ$Xm5}i8@>SWUUGq*-h+RhqhpqhV zSz%nt{gDug!;S0Ep<+B5cwQ;wt^rj+@r4DuYu8}d+2E>vkoANT0B~UFdj9oad~Td7e%O|=9<34};W(%|#DrcfRLiZ2m6uu8|Z2Szcx8o}4wTO_Ij!+D$fA{yJ z2nxrP|MTZRO6fZiAg;sVhp|0QRpr%Xk5?HP1nZ*Ycq%qBys#GV%;PwO2zq*Qk}aJZ zx4rlc>WMYngR$1EQa(d65^FEK){&*Si_sS@M>yi$zZ*I+1f$#q9jmdS0iJW9sm?Zj z$M@0DsD_DGb>Yi`0%;clIAbJ^9x!y&RB*Ks%cO(ZIpA@4Sj^BJgUDLz2d*ecI{1o& z`J(e=!s;GS4NxIcTNGbF$AXq=h7Qj(Qf)5{nHn{)f#NzU<)5&O- zTHD%?NtKUcbO_*+wLr$lN8(O^S`o;z6F4s^WU`(;jzkETG#*aKQj~60& z27hK8oF8p}(QJi054c!YB;QA{89e$%@!3(ar@2R;+&P1R3cM90uY^Qy#~6Sp;vfS; zp9s1Gk_}sL!l(fijtFAK&`1L+Ptj#$h^r-dc5umAin*Z#nFLNG^d7p&g*=a0{U(TIYO0K@U<$*4@Nbp}qrzP?aB0Gw#GmoKCnI^Km3cqo}5$3=FSoPjHBz|kE55e5on`zme9G@-Yu&X1T`GaKuqLaR%VGZ|( zgR-)lDJYQf`0LJAEIem47K9F9@O#5?+=}{&euw+Y^$iUUQ0wp^*@m(^5-tfjpKhRm zkdBz|+zZAwiYa!QKl*6fT)-&k_>u3cC2IfJ>YJnM+Gk6Lqo@m}d|zA6`F2 zKuuEQ< zN1E*~Kqo4o#U8l+TSL!&4qzva0+A;}XeY3wou{y?h|i(K#DpeJ!9@yA`f&CFKMfXb z_GoW>t;+C;q^BR^$E0c^_VLTg-pX~^r6-vMVLUjgMbUQnoE8jdA`)scAq2pQIe zZRJl=tPe2hP%wlU{go3rBo33Zl86PS| zH`{C$dAv_{pJf-N#Zh)fS64*^y^{*b7zA4=PE~L}zaJg<$2JM@moL^ zToGN#@P6XcR*&Ug9g*#)dcWzhn^*hOlIe?)lDTUA%vP z374k8VOl6%|FEy`OrS?yq{QQJwerBm)QnRqn{2wY92PC->3n<~b85hkptx0mxqh1; z=q_G{rEe>?o`^Y}qFd^;1;09zGG~MHljC1LoZ2x?J9dqo=74l#07sJUqnl?6eA4%9y+*Orzy0l+yMsNiogH-HYHDx)+8#f_F=|_) z@?5te>VRYKgA}RA$XuIt^&6Druz|-A*7qeiR~X(GSbHGxE>c5P1so69TC|k3z`VGA|RO5W|l#w;)rK@jo)G(2Oa8iKXGbs z&1PgcvGK)~4!PsU;=g^<8RgMXk8@T2@}s=cLM9B=L;WPm$RO$8!H4CsZ< zq3}il!GKk62uSPFyPkmoH5GIen01x8KwE)n)e#j`5@GN6;Opx@Ej&7cyG_hq&Z5f( zbOSJ_7~u&1-wW&KkqP;wdiMtZAT^%nwTc|q#sifavM)KV%D4S^WD;lc>F-SA;RB6U zSGp7*`f>d3EEdBFo_3*d3T6=4H?W=H>Cx8EkYqLd2c1C8h4K}3G$GGuXqfb3U}L+5 zsUygU==*^+czAepyaq0c-I5{r(2j@$SHmu4VE-ktT(%{}g@h!yAY%C2!-i;25_g$* z#)tjP?Y~i>CC`I+viobpp0ZZ+`fips(ZiwK-qlqJjlXd``A<&_; zn;k^)j-HQL_P(WWFE{`}I*g~4@ziG+n8Fa2s)3Zw-pgFH( zV)?7L7o2ykr!w_Ff2N(>i4qJinje58q1r@U?Gmvhju2AJ%n4Ctx*h>SIJ%XA=O-xG z|N7k+d-4h57}$*c7n6wdNjxO8ivB8HLxq=NRGYaJjw7S8nrp)jK0XTX9xLinQE~AJ zI1PZ8ip~;0mPtzQ;PsA;ocqBVPd?qLEt(zt=25W;qh07?S3-DpqdGVMP z6NoQtOhrUmUK_d~DmhPm@SeTtlH)_)_~qsE1&;P?%Eu)118pn#PKrxc#+f zwMsAg`WVJrRGJ$BfS=Z+xstby{?M^weIxQe-0+xW<+_c_CZcp|Y zB|SgkTeY&*K00Dq#UipN*=3yT{Wnd4(b1V|iM}zdUAuD4C=^yC(+!Tq#^%~^xdPy^lK~oYIB9B&&xFbi)IMbJGN&naFlAZ z+X8P*Eb{0RnUB|Ebby@akgi zsxagA!kLjA$3OH2rd$-PXSlg@O~}&Et6d)mdB0*gZ}G|UY9jOQmv3(ulhe@TUfj$( zNR4+8t@$~DqL@QP5@schHE48GuTqQKTDPk{c``FqwT(;j(IfM#CrnLq-3}TSD%*Y3 z)IU#Va`E<{;H%VkN28;q2S2X4sNBXgMPl+PWbn!F5;?w6lEd80bKmFo=uT%Z_>kuQ zB_o*~InOcLrSvk)*hBN3)9FLS6LSRCBE)!It=rAj)d#LwRgMxZ#kIAy_)^%2lEJol z&aQhRJ?s$=&+ktBZ1HDQi{Pv{z!x1iARmStcNhnuCm=Ev`3Rn2WcWtXn_fWMnB;>lj?>?4zv|yznv1ZM0f+Yl!8T4_$D|z}~M?@^y zroFOiT_Q>`rr<*U2_pRp!h7X-eHd0?h`V>K_I8m&p(|t$FxCkKQ7=Eg6X@gmC&)1b z-iN;-O29pc+4}-WE=3pZABZ_CSj^)^(^{bTS01Hd32hkB z93q5AfN>O~Ds3?4Fn|MD%NLpt*uteHCVJ(;g+v-&bL;pg7g6{E`eYAy-~)GJFli6% zK=>aRa7Yd03r0hgkgwuPx17f$Q+{!sM|~p)5uL@rIC4@6>(7eNET5;7S9T zBPl7#b@I!09Qxq)d_>|l13+24P^u5W{ix5hM2zHl2m36MY?D|&;ao(x)`l;eCyt@b zfJZUhCBet!0mOO&;2tL@@($M_u-bRInm0_ee{YoCu83O>VAFB}m`?m{f)uAz| z=CW^(I^CR-j^}d=T?mmLWz`@jaBZM^xmw_wL(Q?^uP&2_i=M zUZti=>=bPPwH^rq@Yq-=1 zpi@7_zm6aB}Qgh1O;egA1Yp-CTsPSXsTj)&u9DBd)GRCwDgWuc5Qf z`2+RF0U;sPo!cB_o}!@v`2e2cKuHjIvvNEXNSm3F5jR8Ik00M6_LY{GtBE|plZNaU zMAUzFe$&Zk*Cr})8CcEZ7)_-Wl>-M_i4E%pe88 zAp?V>eE7 zF*RX^?Vdh9t%hnU*eD9@-+)~LX9osAFbcp%t$Bq^6Yc)x0%-GLzJ-^TrY3^GWHBCB zQMtG3Q}A3XBsdu5H6iQ87O*mE{r)!mG?D&_uQ-$sS5U;4tKlI^PFCGs41)sb6zGEy zz648s$B#)Mp8$lzP1Hs0?@<*N9CYaR>GcW3gJ#d*+8rJEe&9+QUB5mJ+yO~q0moFE(z36ac;D$XuE_nXt!T&-aGM58M-AaQY z#qjpG;WWB%p?d!W=I|L?FR_6J1wkA`unM0kL-rSKpu`9)HKl)_+H8fxWMqUBxvM?tgz5-`vhQo4wE2#ntf>;stniY{S^dfJ!&WLN+g3UTuXAXO;K zqxPAp!k8Vo50Gh=NK3_p8@snv@BZX0-K1jBt8yVgwGkphAn7pced<$%)ESt(0FeXL z0mwQMXfW!7Gm4dD6u;V|5iqBwuRa?7BmC>rz4D7^`F{P>8@hp6Btu(k>&!uEMZgev zN`cK{XI_yKpB4Z`Csastzh!N|13`kV%bU5JE&(^QypWE*WvuXVJ zsF#Y{4HR8~5vKecNmq9f?!UHtQ?s+9^AiZ9IWfzE4{35iLfUg+QZzqAUSm@-)1|9c zRzT@fx;j<(USr&d8Gs7k;QT>3OenF{mx#2X1+o@5<_pdwt%mu&0perk`-ZjLt0ys4 zzV=tc`M0=5s)_#~yUkpe_*RT|(8IbTQgP8H4l=b%&yHY0!5{JhfP5A|K;9b0QRMC{ z-N5M}%7_~?=o2HhQvZX$A9M+Q2qk0Xuu4c9RJjnTAyu~r;2DTdUIA~_j}&w=nMoDZL{xp7ViY*Z+#sjglI;k0ez!9C%_qoZQm zr~s0~rykQt1B-wXHu9*$#XZ+BSaTsi=jgWcJ$4on>vwT?TK)kk#!EDrDi`2B32hZ{ zcLM|2lU42~YB;BK)d-G`KlC>@ z&i_3TZx$T-2P7gqtPg#lt_>G8*njEkwiTH!lYU?`XKB3?o2@9=#m9$-B_gEk+WuKU z+gWJ4^Um3TJB3~zTmfXs;fDAMelSTW3{Ww!2=aZiq>(hs?zF}Cjrb7E+6dn*bU(4N zA5gF`iQRb8j3cegi1Pj?s6OY~O))I2Gs1xH7GD8%ca4&-7APpbngBkqk2Eun znmNnIVzL51Fak_hI1d-%Jy$JcZWCR%xRJi-+f{%9V9^eCcN3r~4ywK9^Feg2z)+*) z?q&ejVQ;DYuX<@bKF}Hw8CluleAU*r#ZnR{It~^9wEuYjv;R3)aJHtM6*tlRGb}5g zv_dXNL;iBs5TnIWU`fqqY)qI=ZKL`EJU)O90v@Upiaa}~zuXnBH!YMx?5E6au-`x! zBIjsxf%a=m`oTxX!G_Ga^;KPzd5DA&SRVR#^VX2=W zN^>ElN=7G4@RyY&JBT=4i25abH!&so00#+BSpE8(z)I#*=G)^hhhhf1l!FXsfa>)> zb@9-Idzo7CiHM5I!-3i*200z?*7*7P4Rp%DlF7`bmBVKvsC9fmm#?;nGI3>A9CK{7 z3&Y+RT=eMpb2ihnAuMR@5G;7n{lnoE6FWRKYDbU4QxcFU z2FA$I$XpJFX;g%fqT4cy&;~i5V3+W2{f!j&bB$ z*ec@cp)EogR#YV4u?O)|sMg<&y&VoaTTpQ<0-FNtE>SBI&Y#Z(VP=dA392VDQhfh_ zC5`YRWNz(dfCMcY*QcoHf>0rV`v>1Ow6+YhT0q65X{6WVI_-uHY(Myp^x<(Kj2N)T>ty1%C~- zd==sYMaI5c8`DF_-=@NI%^?UJmVTdjh2$c zgneubH52eka2{5;S%JYZG7`B*aGq{%MyNPyWr(&g)YJ^mD_A%daVAyo{(}d<`}$DZ zt&hLFG3UpVGZ)Us%Nvi{J0nB;e-ZZPaW(hvzW=HyLqteKl4K@I85&4YL?lV5kP49@ zsiY!PDyfV`ndb~eDVjt{B}L{6%^Hy;s^9a&-e;eE9{Zf%`s03lzqebh^;z%Xx?b07 z*k+{|^fSEp&qZ1=fdz2ISTz){5vFm1?PdOXs911HB2%P>`;phopN!BmLi+DdV_S@I|L(c^p8e4c^lAaANd=!BPf-X=nfmCBfhW z%piLQ2b^KKD`L(za!KpWc{KDahYdm0bWfnBzGD&j34=WYfwjp7iM`ENK5^m^VK$fS zcTZra1oTti`#YoK(X(b(I4?oQ11bzsIxvyOFtg{UCebR!H5bf2<;lqR@-r}a^uGT4jjW&CdvtA%_{4Zj?B)9AMl~y-owM!Dfiq)S_|I+L-8~1 zCXWV=RQW7a6T$@7LUePKy!Fzh>k@{p^YME$ZHDRLiSr(H>(uEu6buw6oH(2Q?Rw!a zhyr$$Uwlp$CnOpjpgwi=EvG$_*WUGjvqxnMIiqoE{exA{%0!i~2dok1g?W+kGSiF* zq#nFS(PUZ|9qA4u8g0eRD$m%Yh3PxjO?W4Gi}WljFW>M!HZW(V=4rDl2tG1vYMgdX zW12ATxclV4znF$R6R=JQ;2|;!URaxul1xY3{==rd4~QZ7*C*Uw*P>^m4O+-2a&W*p z>`P5ewxVGrfxz0)e?K!g&d@CqZWgEB|3zq-gA17{t(w?u!i-WYO5(%^y9|FTAR@ec zrbaN`FgErx{0l$`|4Q|^LP|2Kh4KLh6B>no!OM5W1`$|+tAC?VYX~nBwYV-i|Nf^a zK-A$caL4~G5s`oT_vN!m#0cr{D`gUB^S}RTJ75|vHGf}f-IW9|UwFw&^+@@T9~>Y7 z#o*t+O&5!}FwcDX@*TtnMOmy%c*{tA^j5=vf9T_vCN2h3u^eU#&qeY@^Ufn49u`VLwk6xa613pEfJG&$hYis`fmS5p>fztT3s8J zBCDcBfmtRm1Yk&82pA+Tsl22_-AYGjzWvp-eBhY8hMvf^N0NaC7III!eE-5bpJ`-m zU4&`<Q7-8KDD4@rCL~y0Fym{fXVizkBvZ(9g*N=idpoFoLCy{C za03H66v?*o!+cV?F8|Pc?BAbN1}66`Tq_9c1g-yZ;C=4p5`K`{u_foqtfFE$+V(3# zH0b(6c*v55qvhZ=2kdv#E`t0V&c{|@NNfkWoC^Y)!L2{{grh@f>z^;?FWl-7Bi_vU z1o>S!T;#q8-y@2|2#e8k5SNB18t)k3F zE*R981=T&qtP*Px@B*w%P{{lH$CyX*<5KPbrswCIDGLK_NSI^ZkF&aS8H)9p`COfN zYQ6z=ST8(iXofU>jQ$al5EoqZ?p+wDz@bB@r;<*G?lBG)`)E00b9YWdwHSWr&`0P1 z^>_O#D4b&IMiM{tdJ=I@2b{TGXN`fn}(wrfmM z&jrwE5Wrxlic`}I=L{flkVkI3txF$)f{cEam9_MaW1gUMmSN8D`)9rL+O;d&>5VC2 zdC}e?*6iG+OG23`Tg~?5gt+~Mf}I=JG(ZDVOb@^}epj4PoT$zg(>@`3h{f_?^&TXrF(t`(o*m?#~AB52_7di+CpOA4JCYZ18&7s#unyjKsy#>by(u&oR zB|@qo`h*K+LI4Lt`g@z(_%lpaP%G){?_$TXF0pOKvw76ZI1)`q@8`2`8_CwEBzPbg z##6n*yR*+eKA!fJ+ZV);;?3)QI{}R28O4_@hlS=}Z-MT*G0x`R#_6h|{4jPGIh(fv;VSPB3Tg*?;7%psqj$f4 znP#7{1%vtGXEeMw%D_cRJ#ICD4GY%K40XGWy_)AZFH(1|0fmN)cEdEBrrs+89}gTz zefJLNj(tdgJ&2a~X#-{Kv5FtK$DsUskILt1$yYiA&M<^C4QIOi$LBtLxOXA0mZvy) zf`eC_)e(2|fjZ{v{rSGCNV-qfWUc*ib4&hXw*RH#nmTf>#|QdII*?`bBqwL+Sy;cz z8=nCV;1{a{cY$zgI%@6~rL!EASj;QWo;UB6VZFhlitl7U7NOE#ZmlD@ZT;WL0Ma1= z2(7Lzy5^EMRUIp46bs6@DQD~(DH46S0^fCf{XknIc-9>B`-j8J09D%@|KR+2JAypo zHjSjw_)GJ-wQ(HmH2LAh>y<{weNZ~2s!TOj*!)1qnEy|5ZY1S&ZdTSc-ZVV=^($7@ zfag-OPIMgIqZ6el`>IhZS^{QT%c&07#&6}i5JI``6Zj=HE zU@jQT08@28=U7w0npu3dmbCK$3w!v*nC+(vfcH!m1 zERVLq?p78D&%H#;(W=TE8?B#QcHoaglgu$t6A7hC*nUOzymiw@e?kdQ&S2!CWm^0+e+&SzPb?Z&M78< zEYTsaUmrLwM|AEX&G?x!sK;lkgm|SnuSzg_PodN7lwP~Uhe%SJ?X?qoU7}&(;7d>6 zdsj>M*R*4{wNf5aQe1i8x9wYIwo3HiG`Yi7EbSulgH4%`zx# zo%vApsH4Rdb7$PNs}`L}CS3BG(&~qJ)Xq|@Z*TuB^YdF4Ms3Cn(_uQJ(zG^zXg2SOxD^4^)zEXYnA^oQIRD;Do zdhuLF%cYP@0F*#pHK+iu%(8E^A#8R^UmE$Q-#H@Nvm9(ILe(LeO$R-9rc{8C$ZZIY z1>sfo;6O(|`z_Md-?IJ}sNB9$E>jT9{S8g_l{|7m%(j6Agr&H}wVWqU_8&NqP-fNu zS4dqwbpM+dX{pN|78D$r+u#nUDfPk{zW`LI77>^;>0G!%~OYt`*?*TD`LTleHJXZ+PNFo-Zm%TH8+>8KT2) zAe(OOx^+Y^q1M>jP$D7H5#On#t^I(JQdwT*xb&i%od3~f9|$nSSwLz_XSvC9RAi$p z-a8+_-*>fXpSR|o+Hp;BXW6m0Ulw9WcsoNe2K%>DgU61o zgAEO7ieE|9nN2i~xwZ8Tvn$BzCB(%|0fWYxAolCIB3_4<2|juxbf>drZt%9b+ccUm%IVnhJdr1cUgjPektxwA)8{ zSLZe({80L<>-pOV3uGb@v46MzC&ImUFf0UiMYZ6~@QtI26M-kSBKMhK__O@on3N9Z zm$scM%f(iC-00B(jYp4FFHWALA+y)wS}R<`p|YKiWhGL>Z@qBIIi3#WcGv{dI2%C)!?AzV2jV@VINi9Gp zg5Sz1aLVXtD@+bP>KRjvSvLG(vIX&>x*ke7g#XpOHo~TVn|}H7@TT8wC=;rOj%}99gAOfW9;~hH;3es#6`UT#;GJAmEida2R!n~kv_7rpR20Yki8U| ziKH9HNK13DYpTJl2>I@^pt=ZMP;VnR6aaQEUoh64(;$yUL`LQ+iX#fE)a?Z}%H;>j zGBwz!kydUL%0Jq6W*Icj@$qlTalCyy_{Z+ManaG-mrO>EWZEI*a%YGc8Hu_@Fn306 zacy~=U8d~eJl4wde%}T?X1_RUgpmZduk|~lN`ppd6|cbcsCu3aVN{>%-4=SGM%-i? zlx8Qx)vcel&D8VvB9W){)mDYl{tF~II>%Z+crq3B!b|14LCXXtQxF&q;CHSN{K5w%~w5L)_reUP7DUdM)(7lr=^NThwVBKKB?*tWv0ujl`UB(PCR z!AjI#8fxl=B@b%W8zkYtKlj@o<+oaUYmPu}6}*R|(?z`wjrA556JTIvT;Q^?Fm=9c z^SoX>G;A(V0zeO|98Win2g&WT?0=O(oEJt5+*-}{IvpxX%L=aHHS3|+JfW9_sXS^#=4CSFW9SKrGvaPmfVgfhEbO4SvPz-s#$Z2 zEf+ak;Y*z?_GiAj5eE;vas19vok_@Ot35gJq9q$(Q(gT#XNY}_HA|e*cm8m~hj6tS z1&MxWohXGQu6ahn>&bi>PneM#-a?LYrGf&7?^il`*xax?EIQx7>&mADuA&sHUm-l( zTcFJ5PrDCmnQGwf^d{lDKiPkCmsY-tu3fs&6wv4SJz+&hM^6|vY8}ip)q^ZE<+D3q zC5hjQq1TP^m#;ZB71pKo-ob zMiObB)OJIt04<+q=W5Zncdlz1bw4_K5o8YiwQH{$C@+D`A;iYQ9IDJ+ADSg7C8{t$ zalrovMGxwut}gC>aGFTDzVp-R-&f$2-%jp*V&=IO9WQXH5%MJYW#hDIqIE}sUA6Ux zhGquHyex}@Hu|NB5%BH1$4I~v2s_Wq-rRbie+J?2^D$x}$9rbZ#4BaV`BQjOOz=~WF4bRB2wl((Zy zzO)vLBj;O2F`diD=6q)0iw>T{gFHTNhCfxN-eH>S`!BUf_{%vlId<+hPGQ~G{0N&W zip-rQ(i?yykNz1Yq4V?dzZ^7z%CqLD=IGJcr(HsmsN!f^*?iOnvcajpNuW!wKRkEg z>tYN|Hhq57Im%*Gk4_dht=E6{RpN^U7fMVN<^WiukbId}o4`tPb=B+{fA1bhhJ3a~ zZQQVg@t%r78BO?bX>KCg=XFx&DHm2h$ERPR4ynre?RR8%Gm}+}ZIkUuvv=v{O=tQx)ua9M77Xw06!o07 zO6jno_Radr>grWNiRtCFD@L4rXH}HkzJ8I}!>Y>X3Gr7}t-=&wosRa*@-NVUaybE5 zw9zp!Z-@CEoTh}=?kT^Z)I4?@nz;0~;@(P&Qwn1Nn>fR9o|BaBqTdJPI6Y(*BbR(0F;- zSd0ppco6#5dRUsU&6sh|(cR493d|})xwSPpYaGq7xwqUXh1++S64d!|lGk_cX=q>o zdB!lxf)ws;Y|Vzo#>1I*2>L+HsQH}U5|JjD4y}HAI8|@c0BP6lZ|HxP%(k6mLMQU> z9r<3SDzeP(yozz3N~|+X)(TiQ)?tq9x4+sM>1|3++lqfDN(5H5{i&?m9h^re^!Du< zU~zn~&YmzIx%y|*n+H0hr;WVe5P4z8@5$^}{2H3rtgQ2MKx>t$#vhyUXkY|g z4e|sEBp?hX$c&6o`&fwCjrPu1%|2-l7atPTu>tOez}qxYCHbRYOpxk|J5TH;$fd}j z!9JmPfi{=}Ul`UjQS z3iqGSXt~8uY6LG3P|nzwoyF=z)csEK+7MfhZrK3w>`jByqD4n|Ot_ua)per4ayuH+hG_cdg9_y8NJW*#u@oSsV zyoBo3j~gq$t^VRXeva*k#$L6-%F>e8CjU3FP;U=4thgY zs-?MPMIE4#Nc!BF3(sT9KKMCuhmTHP9Jl(A*U$UK-LB}M4>8c{W`(sPvh$DxC$G=H;cqZ*2z~{DZ-NyKM6J_Ar8-txmdVKRkByg7 ztEC#8&T)TG=r5f+?OFlJSyfUEt@DIj7wT5S_Q~xh48I}MVpzd$Kkap=`1$jVAjGYU zjM-wmsBGX5o(c)cca9@l`&dN8hK+6X>tr{o4Il2P=Dh5JS#5E0GSaTrg|HW@!GM7I zAAeMVoCay?)tGbdXjo31SYmGOf|HVTxz!YQ9lxCJHen3+01DZEE+Rr{bE0)Xudwi{ z*AquWznu2;-kP;9Xz$it2G#JByf zk;>DY92$!Rn(q1Y=R+o&9*Oc2G9adm0FA)NtUc_qxG)(Uz>vge#vS0sz@0L05LPIGtv1<3FBgz|y8BG@073xgXj8p% zx^ngfILzq!aY;WJ<@^ghk^Xf3*-4Z>ZqKf^=2;%~I{7xcyxP55>f0|~ioBTor(>!_ z>y&P!SDN+>>=mqk#`auwLVhD_FrMmV#tdIlnEPyXSPvlcV_zBPy8tKa;!NAJ#|$De zjm41Lmdh3{JlFLjHSXJrCg3=-*eaUw1^-37e%Acz3cvSt) ziVkr$RY_weOXsOQzyd_U!(;g56L=8lo!vI`%xSG+$oZXv{&<~|G&Nv$a_rsm#fvlY zAODbWQwGNnDqDa3GboLRD&twOJR8RW#G5fOTb!J(Pd~9xH!}BI;!s(?4P2z^0^4)X z9|xt1&!0oU(fakP0*CnEKtIFS!T0ee>VP+0Tfc|Hm%=Y(^~Mm4wQu)jMb#McH|Nah z+7olS>ers--+uu>`VMM^#l2zOx*-CeRUx|;2gD_J9D7!~PoJL3DIlJDJo zM#yr;FabI7<@GOo;`g^+5tnygHCm>JDE($}Ta(<8J4g_U+g#6ks9(J8hC1p?`JI?P ztohol=kAY=Kh-F=&)Lbzu20^NVFINURskZs7{*iMlMc0ga8A$53*L{-y_Z)~>J150t@SS{$(wth_6DU<>vFuyF0 z2npFt>+en1hJ%N4UvZ!DUuu@Ll!q_X`rWh?N5oI{IhL0cdSJcoB<=~nacr_5@_qXR zk@f3022pN6lB9Ye9gB=?$6i5L;HRfkB}L{AI}1a22b@oQu0S2HE+QRy!O4DN73dxt{0iah{*M_ifgN{jAVtkvTpRV3D_VP~ zxwkDpyngNQIiEKO-$>iF#*!fePJGwyJ}cXdtv_eIE+9qh!~J4~%`ubTd~6?cI|Yb8 zzBtjhzVp-|FWDq9eC7nLqpaQ&uY;3sCeJG@Y^=NAT3@!gsy1#-^{e38UVKkyfq!#c zAPQ~XxRI2r!$v9;LYl+tB!)agNI-w-Uqn;bEqxEVoUC0<*zn#!RuHGuL-b*dq~48# zJ>3%5H1Jmt4s=WI6`U%&+Nr;G>lEEwaX0WY#d^JnM5dbp=tDIR+Sxxa{r!6irw!_wFGF}iy_a~!9ymuIkkxG?l>wXW?|uk z-?kraMW5YPMDdw<`iAbl8OFvgRkAwYvxonXW{8K-TvZt2AsfTlIku;7gWAaKfjirg zFf3_o%bzo@6{tzG+3FW|2FVn*?cep)o3$uM8o=<;3FM?HNU_w&100I_*{4UA+)MnvV!*6{6+_O- z&6?ixaO$q7?>de=b74EM@rxaE^M@LT+qbuVeNdFCvL;NUaQFAtQ7WeOJ2o2+uF$PG zDRsusVWqg!x>b@QwJBY?bo^t~cd~=b+iuWfFy#(uKAB@5u5qYqr%nw`O<4Xj>A`Q} z{OQ6{-8DE8ajb|bVLQjc2KT?YctvPLtp=&I1alle-bn;gfhjmi5@?+~J%xcRgXCd5 zTXzw-&Mt;b@%h>+%_b`;{y&`r6a9tVlrq1|U6b&76zjaN_Wg7vpRoS&3KHJlPoD1D zzkg2znOm*4I|nfwyGo%TG@=j%x1u{{DXd(1_Sf9C zNLNd~8Yt&AG~9xVc-s=?9X*-FfvNx~W`g<2wQK%oFAD&FR@pN*RmZOzHGK4-35uw8 zfVix0Px2wLo3D*Ied%e;Tg(?vQ9vzPw3VU)BWzheW-|jl zws*(i4$|xqBNa*CRL`==m;K-D%CYBjg@%bc!~~JnG-O{wfw-IU_@1)8`g+KA8tmfl z=;)|4(8O4jZ8rhq=-HZPwe|IJtw-amZ|d!6aaq3n)YniIFS#yz_$CD<$=7EWxpQF> zFC2NKQC*n+%OT5;vb??Wz03UrfNFSLhE}$MdTSmmsy)@&%6vd#eE!Rq9YoN$l7Fng z#OSotklh<5K6}=q-@l1u`FYcW8+VlyvomCS+dC} zc-QO;SFc~!@Vbq=p8*9dRJ~ zc=uU9FASsOd}uQA$Qvh3Q9wYzA)|&%&wYZ|tr!7VZHKz(FxZg=6>fy_D7(xv`JYt~%JwBE!>lIU_V60i)N8xCTEd!m>B z4HyS3XxZ~l!7hr3IlC;M4Pg&4CMlKhYYAz`NqR;9~t7ZZNuik%&+L zrauBGM2$O5Y50f{B%ib!C-o_-s0jbiV>(8d0ePps1T1`h!bJ5~J8?zyiSITKAV}qP zHRqKO7+<&W1++t>zDr9^&COgc0TwS9m!*Qt10$d!R<8=5p)N0NH<5nOGV;&2V=tt)|5(&~ zCT7ZngXv?+b9*scvy0KX)jK64BZH}G^x3mS0VxbiU)cLdXegr+s6Ub-<|~+1(P#l) z&~cGJTTtaf{QPW049%tltzK{H|yDxrDg1^#L zWXap!uwkrdGB$^}A|hHl6Bxrf5SrpP$s?EXBcZ|9G!#ktC-Sb5(AT7H%S7q?ORwaw1iYyJL5rq3rxJ+%)R#%6-lh}AM_;aMHhI3X#8K3qt)AOk zPL8|?rw{i8TbpOOxmx|^TU#fA=n`=U5ep*5v(y)Zcgx+Zi15u@K<<~?>^E&%2X+;= zZfNP$?y6reDPynjq@RCa;Lr<>(voQ_Q=9P5DJdy&*N!ky?l)-A&xVHmetwzHo~f=_ z&u9$u57NE289>`GH8zIVM~}kQ1BHTy?`;ix6j!@v6$dw2Y>fYa*(&|cjT>VFXZAuH zf^RB5GvM-~)5D*-QI7kqPk7Z$Pm zXR*9Qr|G#y9(m|JHo2FIKX+``4&tZgIXGu&`KF$pKOB2d*hWSw6LR+v5OkhA$f%8Jkgbhvn66^{wVb?-g$*Hob%ToLK@%nzzb0 zk%2t7Bv+!@N->e(=L$`&>|=ZnaS;*L+w!eba&8=2-FMu>RNscQac%8O;$^W9&EC+E z)A8Ha1`N}kwGVC(gFi%A6JAEQqdnC6?9rdz^8HhW#EFH&dzae3(l_leW{Rv|2Xfw3 zy|gz7mY|44B3<9$9BVvNr}lAQn-1p!)WR%BBLPK}p%Q-n_<)S}@87#6F8r%`>Lw%e zB3Dg5fEfd$Sn_-7RV769$10z?i-sRK8zX@knt5V+ZCK~%V?y zlUr+@fg!!&8Umg){PO&Ma6h}syE$!;n#ZilSTY+4@r;U^zoc_oT8e$zfj$k9WlK9P z8Qh~2A{c3rj85Yr<9+77sng`-0)C4N8Gl~FH1dcfO5TizyUsPmmW){sH#>0O}f5QcM z)Gkf(jK_h8%&D6{%$dO=NIO|sS?XSXxfP+YQySZJSYyuz&@?J9UjRoO zmZ`mNimlp7ZFjSCd1QJ8&RnGvca4b!;}=nnzX7y^6cpB-lrHAN_<9LnUuLc=S1OAb zL_*fa03D(SrwJfgU2$@;O5d&EVdt0Dvc)hq)Zu>MP!ar7C#8AY^IKYM@F>gCuh0N~7IX=4TILT|NfbfCx&3PZ2Iuh>c(5p9 zcr&+PohE4pckeD@gY40-);b1QBS!5&rF=+oYkKz2v*)r5tIXX6!|E7yb#=z-pd#nY zt{5mUz&`VP9I1Q77TjFQ4l83WZLI$JrF+x;GZ>vp~kx=o_w3=9nu0jjrb z60G&(0=SND^3;KCpB@=ym*yIVQ^U&2&>#XqUtN4%Z9G*AEav+dTgOeCHrZt+V8rbq z8b`#Y&*PORGP23Lb-K0k`mI|VU0gJ1ywPT>j?3HD%V^cHD<9k|PT_C^6}4|)JRo6O z<~pf5-ac`uei~$esXJO4(Pr!EUBZpIv7`(%3h^?E!((Zmh~Aa-{Zv(z`Dr6bNYT#4 zy2-JcZhtoIKOpYlU>V(k5Qezqj(;BR#L&2j@Q2`T1zht{A0|=?tDgAIMq>E)RE!Gq zZw1nP;y)`8O$99>ct_HQxdNwc=nQmfp;8NLKh3=tAHV+1EioY&EAvF;TTW~BuA>^J zoFbR12pm+-&tPFUCi#*glv5d|`*=D>XDu-2$s5}%T{dqh4Q=?euf6E%{A(R`2Q_=T zRgY=LpCWTuh4)p~=LQ{@-wE6pqtZAq_NA>sowW8YJsKs>!ax%vBW736t6cCQ`-*Y} zjVMu^FVqSlCrW4uN?R2Jyicup3_a^X`l-*?A)Co3FWNS}8nluWrCsSt#T>oq2!QqU+BO z62&_leiit2cKb3yUUBcB*olU`bNiW4*E)!c7!?H^I1sHnY5e%$(Tg-SG%Pz~3RFUQ zumoFHIe)lvhI*z8%;(MPzAtU??-UGAcBOrSgN(ZeJ|aK|i~a`wF|z4DXbcW0>ANPB zY;XmC>g}6)Yn$qe2=N^CSrW}~_H9%=f({W=FBn?)M{<8SZ)&ZKx6jl%pS$ZSR_O{)e1VIu=j_>C3>Ul-9JC+}tkVc% z6ozT%1D*SRaMsc@GRUy-Gr&8!?$alXzCur(n%gv!nFxu51&$h{<@^KwpEu^bspFL~ zdKxvV8gVS~Lj03@C@j_F`C0wRmY;5+42I_wVj`X2{}TvdyU+r&*%0z{#i=|^Jy-iX zHtnt6Z57@q$A7#%F)<+#(RG6QrOfhvoq~h*p;Y=&xa@gQfTeU^p4#~Ftxsy4NL~6o zs>_~TjlWZaq$Uu1_T*T}o`_CXE-JFjEKZpGaZ}m?)PcVY9Jn*XcFFa;$r6!zOSSx4iBt8dY~ zxQjEOiQf|0)*&;qp*&ovM@p&6Wpkz858pdW9P66gu2cD=tB#?|)Xf?`-oP?qr!QO> z%4(tLQ#Iv|5l?Z3fGAvPi2Xe=VG^_D_x|TED%>_uM}O@|m0`K*<~;MlqNe(NeXT`- z=?~{vjd}2`i*{S{gWS%8_enH^EVegZ((5Qf5JPQ$Li-nF^YQWl%+w%5z}h5uCR!Y@ z%uDLuxiwL@d$D(Y<#g*ETmR!zxYoRB{CQZf*l%-NTTj23?6TYDk9e$eViQFB_ne{_GA&0#F(whF5##k zXjz4@)h}gbcb~tQ?%(y78->B7sZ+-_E<1E;%GAMAJof5k*{0Nc%e2?Gr^>{Iy)Ya?EK>Oz#SeMwO9T4Nsuvvs2#t)?^Ut8J zbs5#Qv)Hz6$B*Ayb1U>k`&OBiF)Mz%HW%Df8oK&u#fyCL-#>j9%&-vow71$A&D*=J zXy?@WlVz0kJ*-qlj&vGSZN8+le9Ad@jjkgad4A7FZ``!=eqHp|hC%I}cI;3(vdg^7 zo;@*x5^e5FPM&-*Z))C~PTLAQa$lPJkFoquEF zBJc!eTNq*#;|SUM2lf@kIy=5OCbBhPXXkzV!t1{aZhma6s@nIfIVIF|S91HZx##XH z)Ft+vIrHLx(*+L~nu_g{I4YY1?F##i86rf1UU>eEQT!+f|B+buP}eg3TRPx7iy$Ot znIg9r7~t>X^po6W`??Rr)15ClxuxLdag%j6Dy5r$DL6k^p(g+20$_(Hk`yspN_T1LjF__E<&z8pTZee7cvTqtQge zEklBh3=}CFmJ9%+86oE{mh$-VPz{Zj;@b2Q+^?MXTrT?8*HFcFWvwP3*iRd_dnCy_*KTyS-|bxp{BV zGH6SbH3gv_hQf6<()ocHmQQ8Zq$MG7YyWA$y49|O?(gi2!E@)%U*^=NL0;Sb{UTAK zwex11@E(F6%}H&{YtN6mE;0@RN`)SC&%v&urG?1C&u0Sr8m zkp9?HUr%*gQRkgIW2H5kn=5Zs^bNB)=rwE-x?#T}8Aa_$8X9*P)|D*wW)clV*GgPo z2OqW@jM=GfQ+TIwlT>?k>H6t~>0r%QjTg9DLu4mywB0al{xa$Qfl(UJGCSpZ^E@7*q7pd#e z)gor|0r%s>^c@#$*|f8-^{v$(AC2=8Q&ildGjMkRPc?GVCUFrJpm6Y5j^0f>0vqfh zywJ1nKUYvF~GK`|ej3_guSi6@Op2v`c*LKohA3xzK#$ zN60egX+FGj+|YDZTb_E6mGiUty^n;2bs@wz;lhR0S65JxseC_Z?R9DRQ!Y?J8{+DI z^2oyMH0_@H{)I10({}uvt8SkqSGLeJC(Efvix#k0$iQukSe6bF+^^MUUl5W-E>2%? zYh}kjH4Y6~HV-3o{P&D1;f;@B@K^yE$lvgxX;2% zqWdoA+$$XWdVFiYCX@^-?1IlECl?D40-asfjj0_MN~^AJz*>6qW;5mB4jno?ANQlN z@z68Z0o`Y*hQj)ySf+tQe(Hfo+MMV3AmG*Qlr`A8XY6FC|WQnmNy}aPmFS-R>z!Y~>{Zwkc;$lo3 z0N@bpFwLDXEy^M^dlzR0s9prfwV?DozIB^-)rDh?9<8*}I3i+^WNe%XMGCtWG;WpS z!K8}4+jlrPAVMPpSnvtX$w81INFqcvG;F+{jRc-Wb@;3wzXCwpZEs_`wtl&lx(0&X5YsYdhsc6gweh!r%VYu{}fHJf>cAPF(@osJu}nzz*%X@8Gsv`M0$(F{&2+IUPaNG zUg@roiZ?9 zm60Aecl({p?jDJ4jNPD*q??8qp}2sWE96(+TQgQaF6_gyCpjH`#rEz^vGqBvbo%n1 zh+YX%Y}<;83ZdY^cnT0xV@<-k8}yWv?BYK7Mos#Ax;So#k5Bb(*TP7rame@YE8a$5 zvDTD;-W zq9PM$yK7boGV_RXU1MkW2va0%3RP4Lu9&0V0H`5{59|Q3>&uoPycA9u)U)1T?yZV> z+uM+>L>`clN(enHea>CG1>KozoEe^S#OTf>5NN&c+3Gw|xK!@`qHIu$W=_96=#W_Ku$?5>^LBBWg5%NOR8izIW#C(7^4xd9 zZ51Z>$X=mu9mRc5Z;hJ#Uu23X&C{oSo~7qzW=`Jp*?>5OK&fF|cO-5=4IS(e3oHYR zEjHHT%zV(A&<(#9azH7mzrDZhCRFQIPrRG}5YWa0wT<_oO4GPBV9YD%^X)IF(nV1E zsfkRfD4@!52{vaS-z4oQ=jl^ODU0UL?Ise^%kB;A$}=1!W@DSen2iJ*^rL$2*m|yOCmVv%-Xx=I;=Z#G#4H^`Q zdBnor7hY67kr$CwD-vSR0nkHJ|Dor&^4|TVZ{mAC15sgu&A>dO^CnO3>{^~%{iB5f zOM$}k`OB9YlO}Z%DQG&Krntf4@@?#Tq(>FK4IzpYG+RrEM%yHv)Ml!C_gf4pT{mAd z#TKkqCwUADvq6H&V#VUceMLlGloN|}XTmq=>eP@TQT~K48D*FV4H!6(Zuu=ESMA7_SN9$Y znOQU=Vjrt6MaI6_9^i`cBZ4JzM+mri_PRz+dW|}CS*xY5)YuooOyc<2oHwKQ2kic~ z*{yb>+wa=;$_0n|GdQ!B9I2?N_4G<2 zCTVjHqy%>T$oPETB?+I%Kc&OUhaF(k<18vKuarDcgp9ef$Rjc7>eZ*EE!m%CH?3X! zg%NHyNr}i@t)y9cz64ox;_&OQmq=&koFO3mNU za9%_{(en}2CaR&*ObjncDfCStELb>gG_3b%&aCSIsv{CYOV<~`C?FGb8B4#gFsfkf z`t235SR9-kX1Xm4G@g=1)T2)y!@41Fo~$%WX=qRrK|fl$%t@=RyJJ@~8{3CRcX@A- z^aUEkdll6El(xIz;w~vAjD~6^f`N4yv1!<%I;$v)C=05++*heRTk`U%Tmb3ye!tDN zZz||9x9d%{uwiqKrlben+EgO#_42$loW{`m^RVgdsi1&60NV!a6QOzMkHji&64Ulu zMFh!@09iuup5|eU!~?_lT7z)3*RN-_+))27XnbAB72Q?Dzhi`d=|$%byRx%QM3tbu zWj|fZa?^S*%@5JiT{O7$&iyxGx2pH2-f<7h>qP zdxHbxd1l$A3S+{$y6tgx_*ao?yWe`g<%Ddaf+sl`);EV`)r+Qmxv=K8o|Ec0S-+#> zZ03nKQ>m1+8)sy;rD-aiXc9q4f=e;1cNaijNSS4uS&!Ga5hLDG{WJgeb?zYo znFJNR_M)oUQ}@?ul^+d^WSDKZ4t)AqOR9SMH|_fST*Y3@Kl2|mYe!Le>#dWwcRQs4 zH+h1Xn6TKksb$Y}Y@&|AHfWFjCO93;Y*uPMy`DBIVEBQ}o)fn!9-82G*Ggy7BqMP* z&G7XhqZE7e_{Y$LLW8Evc;eknZQ3GIx4=I4?%AXB^--_b$Wy7dIF$1eXKiexs+y(* z$_Z_hc!$!q*54Qg5AgJb9K+EozH^$2>|7HQYLHOzW>5u?8!4IYB9869YK0}9Tb-P; zzb<@p`M;sl(FF${Z;*qwc3+1F~}(M>;xD{TVYduhiy5MjnWav|&*gDBo^QuZZb6bN%`;AZ^*Z zc8Pxv>b2yk@VUyvc8F=O374KZVtu1}r@_K%Cke3E|#eW*%*RU~9 zVILxDX!dNYtQ_vn-0!{J{b;HYIET-O;%;wirBH2bKs=;$lq}4D&A^%ecQX*{DYEan zT+(LIBCMQJ*NXK156VSyx!@W!cW!x9;i8cRu=?Ws{5pF$3+X(J7QviQ10I*YIBc4$ z$ChQ-9Wbl0iW15=;}4mcexrX+9ZQ>x!QI$n1cQeUScr#E!LFj|r8f!SJ29(X()SF3 zeMR;H66k7gBTA;<_~uh2cEn3^u-!_OPJ;Z7U>k&|Lio?BRr{fkL!9eZv4;>6UQ8bV z$EigRYM%%Tn=S4ZUAlU652lm})6lYqRxZE!Iue_m8#kW0$@{hL)?eY`(uiKvq<+%e zbRi>-ByTT!JgZs7{5PLB$0cS&_SxdGhv_ae0gG#xMUL-2v1)z7lT{`24|GTu*+zeF zx*qF&idZSXp_HsM8X} za?)XmNJ^=q^`aYh5s*G~BM^&y%_?>4P!j zeDtt9yOXQ5yOU-(pw1We#2l3nv^(#je}2QQ9Ai5_S2*NM6Dey6r)OPGoIH7nl~os! zN(w~=rQX1P{d#ulfWMh)1`63Bo2($exR*0JP$}Y1m&ZEw3(vVYd@X`=EIXBhU0htS zA?}yk04W$YLI)A+aO^P!h{yAXvm9t3F`QbR^mJ|gSBJ+ZtyfIx#Pt(7(g!F(qx;9H zQ>Hxejqm=^!Syb+;Mv#JXxT6X(bm@f$AG_MH6|zn_r;J*JIZ<#E4bIOeQ^xC`I@k| zF*Zpb&YO5RIn^*36ru4Wsm2Up2!k`-NW4fW%!D3)mZJOa0Q2F!5#PrDRU|xn@E87=dWKc zwzB&2=@an*9MV-rTgg2Ka#S9b`$|s~v;S~vXa?W4+>oV6GZEh8k5bJ3Rw3qd_A>a} z4!TYlFKjk0*v>LC4!14g<5AV9glZ2Pwy&rZAx|0C*rgX3zN#=qMFN+WHe>8DI0 z2-sZ0*M%+5h&0@?Z4cK9h1q$t5d)9*Qt<(^h&+D0l6B?f_h&q2O-)fzG|68FifxhG z9+X?NmTrZ+AwL&Su>1G!d7>~AA*c}=ZI2&oznR(DsraTsKcaHvUQiX&9&rX{$%okW z3Vva%NpcDWn=L5mWDx?-zS_4(fAHIRH4vPbkDd-Xbo6KwT?ps~r0DNP5K3km8rBvi zhIik|el{}RPpLfnf?V7;%>@<~ay@(A<|q!$$wygA&hGj@eZt42=iPfuJUN`r+4yJS z3khimaxcvJYjpQFZ(g!FJA5q$Sqgzo3I0ejv$F1c{J1*r(lrc(Am8blBm3o^46J{Y zcdZcwx}%5yQC$+znttN^z@B=Nam3|WOsm5sFvYcM@=WK4ATeF2j-Gp_R6|Vui_`=r z7#xZg=H^&A;Fyw^`#*D;w&)BJ0N7!_ubMGe-Ab@w$;%hG^C{|hxWqc_c|K-Ws;v`t zXlI9$Q3kTJqk;Rlb2eqK$ysFS|EuAwJawRQyxj}c{-^XJPoAv#jH%my>kW$}L}WCD zglbQips#0qbgh^zjL7uC;|&*}CO>98rB3>wo_~2`m(V?p$Xyev_vxR(?^iUf%T*NE zRizsd5rjn6z6-kszx~O`@2c>Y?C{i+aHnb7`DMFo%%( zR@yIGS4LF2YtrP&C(f(zL=c3G95W{8e7~vF7rf+QnaHVCEt6HyGxA6j2HC24_px|% zbQJkuQt{@S*zqyvr6aUs&BUiUt7h1$nRNNM2J1iu$rw*qL$ZT=dhOaeMB1bqBj(>S z!Mh}t^Hv}P5;689I@#ZU4q<5|UjaWf)fKJ_>C|J;Ae=2dxD;*GFmtL|uT&2=+9qG< z(oHW4!Gx=VbdIw6S)LdQ_wVn4;^zYjkkX@Kh6`f6X8NNy7Zjfi5Ae%T4Xr9E2@MXu z4WEHS38g#o)X__#cW2r~TV8iRE-j4QLwAg7fCzUPdnNbp<@mBaQ5V`Nkt-z{O(=3k~yhmEnNg|yk;zLwIDntC55Rl!`l|YOrHY`po7$%S<6(si!w4Cu8u9Hr#>^EaswY8c-e2> zIR3dxxs`MDl9hzOq-b%yG+8$aCkW!NpgCt{`Dc|~WZ<}Oz2=0ZhZYu-Y7-x_u1!?o z!{O~BFV%qC6dUQh)bv@iq<(3deygC7#r$=BAn0IIDV{1%m%PU0Ix?I%Kbr6Co8)$vGDZcDV?^r zXWYIQYidys#qZM9O=|6ZW^|pW)Z@@WKY=`!X>&5wR%v-<&I<}(sIW(Ni2b2Lfa3d} zAnsa#-U(xSmTr#MR7|~RFLUPoZZPZRoG3V#@i4KQ5R9+n_667FV2ac-5f z&v<4^JzzuaT+rqzP;0V>$oW$%Krp;uHsVw--2x5U13fy4*rVXX?)@GFW?UlWBRXv4 zF(_fe%XilDc0KieDDmd)vdN?&21f z+MPNJh_tnPS)WmQ>;8<|E4Pfa_V^2Cs6oD6gNmD3eC1b?hk!vuJxv-H*8V%WJ*(s^ zh$fatMw^CAzuKjz{=!T)`jso#q47`t_pN*T*WX@#!qBB*0Q8w2J*H`vDT`roPn~Xi zSkLtEKW<*B8xRTQk7hVTcRX8&^l@6&I42`=VaKiKKfJVyjU5z8gt3rahUvx>ZN&it zv}vj_Eo9HKTq#qHx+RaP9EBA>}05itTi!zh9m);zQfjzI}qn2S@f#L# ztMwLQFfcs!2t5nuwu-kd;L;?S`2U7Y2u#2MMQG&1Onhr*%^mkR{JEos>Yi7w1B)%O zO2c=8y9d$Ql`Dfk-L}5z3@Hy^n~@_4a5S1ThcY4Vf>A^g9$=5<{LLLU?lHCjvou|B z*!reTw4E_#6Mvo$qnHjoX7ps%&%xnSxgcX4U0hy%R$SHSkltJ}%OfN-w)B70jKpbu zTA7Xp8M-~IT9~f8J6avI&*Itgn{_o zx2L}Jla>9(Ud!`V5&I)h?ZQL#D=kVH)sY#yY#9V6M(FmsK998744grqmCv)UCs(8w zTNsOOzOG(sWyN^J$Z&XJbogZ^{;(yM%%4B4#I6)XUp&8~iY;LJ3fnLU&Et&H%n`1>(?aSQl|j5pv}bUucKpqFU3?+fWC2x{h?JoN$O_Pb-W#7EWem)Hj0Zj4>Xe6{(psX>@LKV z)F}6B<5pX^^%wLR@S){0gR848YG^yJQ~9lU;~7L}L|Ra4stpBktDcR-%;`n7A7 z-&Qg4&%i^O|wLKg)hb4zsUbJM}X^ zg{g|_f*Tn5+_)j>!whnB6vHxr1hliLN>^>};4!t4*4O>G+VqxuCbaN(!{aub_#)vW zCvo5`2WLgCwT$o}9499{*+}>cDwy1-<~encefyna~43D`SwvjrKAFL=Mo+Nr)3uz(DL2`WERYQ$6qr)DL zGI{uoLpl0>#HM!fZ};Njjy=fuHNq#d@S2V~cz_U$Ze2^WGRgg$%7`e;wg$R~bjYUd zIX~TJ{I?|?MgB|sJnPwg-;9ecKAt!?rOWxP8plVgQS6>yRJfGe1oZ?*#^D#a0|1`NOE54Tg3 zXTFIEh`Mf4;A=G7f!E`a-iKI?3pRQ(2a1~DbBskrj(;g1oP#c>enNJ0mo1Y9n6=(` zT`fTE{q>fV4qJc~*GX63#3kcrEq*^1AQdcOz<>cJCMGDt08fCTN{eRW*$rhm^A;cG zFGqhH>0m&lln?CH_+?{zbb8`25qn0@xTg3S3(N^cB3!$swU5AgfYnsf^&?UbiEp-O zZS4GlywYa|=`un01Qviwf{>moebV2I{BXjQ&9?k9Wo~LQUj_x(dmgfof=Q#ifxUHq87$P@I;3!oX?wo;|?_MX-d@ zJH~M`K3*9-8}?D-+@^;D_^p||{=KGb%KP`;iV|+SX&aI0Y()R& ze>45jBkdnA7sAN|*0u9rr5Qf3ckjb2vDHx%u;cI0z*!_W? z7eX43MeW=v7GmdE|N3V9jckKB2|?}=7ZKO(@^fW_gkXp+VK3De_Qv2bA~-m;Z1ehJ zW5v1EIH6+tF5$zxu1$X2b!?J!zH{wvRG4h1e`fw61(U8iJr}Z&PHiiSC*fk0FH$0# z_Ljv{=605F8|5VP(fEg4Xy&rrgJkY}gh}#`G$;r}#*)V*sP)P}m#ir6qP^T_w(}7K z*X^u?U$gpVhI%%06=D^A zvsWmxl99;BNcKobl8j15vQk-k;`{vo};D+BOlEj~t|>;+Lk*m}cf&R=kPIO{D7;Ess~LJvGbs{yqj zl$^c8?AWp1D!Vl;X zqT?8$jd;UP=Fc6Xz=?<-@H|kl-KMV6wIL)hR1E+nz=@1~?d)jH@I6gyL1y6IOE{(+ z6zhRH%pDiuV-z?LRwZj7&@jdo^lb+;{EtVr@kk^HT*1Rvg|*(^e$s>_FgRFot{uWd zISrDUf6Nh|w2}|tkUXyo7p$*cNcAcPijJnMM?++U*q2ul5&#||=k-7`Cfcjm;}R0? z%3mCWO&<{AR{7yAs3$6g3xtz(G+0{f|<8ixp-%5LR`ar zU60AA$fnirP4)?m@$8EU!41XFzKJIzX$(J+8Cz7I7J#_~>Wt@HZGH3*hlko z;hx#m4Mdv()@D`I;ysgPfJgTis^q|nFLR;y99iJoYZDECW?(}FfRB6}e*)3fO~g$A zhX<@El&!-Ij5Osc@p`>Hcuv7CXJy%f&&6)u{Hoq>$qwh+uMUu*fIi^e1Z(*~=d3O2 z=Ya3ctp@NXRbn22AR&pwVc>mx`zH)lvUlJLJBtr{tJuKHnCyJD>wIC|yBnDTBD&r9 zB#1xWupD6@hc45Yxiv5E;@5Z1G68u=N;s+x*V?j#Pek{Zc!wVN7h*}|=G-X>cyEn; z9#?}%i@6Eh7AB}>$Flubh@(nD0iuBM%MiJWl~!`S0N)@aKJ@enAmIKU{1a1C#5zD= zZ3yFoU8;1yy{al1^(xlrRbPp+_5W`<(|5!%aUS*vv3`n9dZHSb1ocGm?bD!_A;!)! zcr!e_K5+chp%I;I99JbJq69dsBmGzOj%jLMj*Ek^2r-{1a4)MEIqPowyx6KGr2B)z zDMEs-?sk=@5X$U>n`FY{{(AAK$Y3fWAlOUJEq$ZoBMv!6M7?yY()aMV1_sI{wIV78d23+J1O%uE zFYHiMEm_GAQtZC)5Q4ac5OI&}n!dRQ`tDhaesTmGu`~#NN)@g{sr!%;!wEvln}y-+ z0fBVoD6gk*12CYb33M0tZVJB~eIAjvQw(r7UOAA+s8Jknu@E!^FO+NoW$V(=Mh1GWOVpFteMd_rsNoppDug#gzj9S159 ziE-%Ia9g({9srv)ErF==0yKL5yy$wzt*#dzPN=q=$Dzi&qX-12#ucIKTzH=Ft``;U z`4zNE5q`O8`}xB&Qtlt6B+ecV9yKj~vbda-wD|ky;M5@F%4AA5}m?t6o+^ZM`( zVSEE>UiIq?yB@Se$cRDMcDC}4fADZ~&k+I+0>G<~*L2$6St1VFA z%1D(@QES*ThB55!BsPA20Ge>;@NkU7_Fx-W7M`6CPfk&7?VS#0E zo{MbYjD2`ubi%rl(Kw$+~x^cv~xj-hb22P)s0^t1^Ymp|l&7#(+{_c~5Qx z^UtT3ckf=u5c#egnfJO^9D2r{oexK1M6@lw4i6882Na6{TtT`S*ShTfoc13LR4;Bg zNUN~9LpmgT=c@HM&#^=%wX{bkUVjMGynL<$ZOw9-TUWI>6r!6-QX_+2armNPtZjpK z*U>X)_W3g~Fo=}xfhm3Wkqfj0jHFmAiTK9t+r;#FS7_Y60F=WB)8YQ;jdiNc!Vh4A zIAC*)s0kqLrUvz)_%t;gz>JN~0RqdbMSNmNs73g`?|1xKY$Jbzq2BfOB8!q3*Xsq{ zfeybHh7;5?;O4{+YM*{0-g_Hiu6v4iLCd-vL%zcisDxg%Hx|xG-E6{W}6(jc5Xx0)%^Sn=RP0RWdP~k*gF>xP~8Y zr6Vw@0nQm#*bxEqF-eVH-o;PFPZ5wm$7{4qf=49etqgZW5EBdSeZ3Su20m)?q=yd! z_U-e{^=xbWaZ0i(7s`Uf*E87uK7MI)LOoYb4jBR3nnPv{*~3Juz}#GcfdGV~bG&bz zmuH;+OTOjuK;nmpitxEx_^f=qyl&mT%|u1c7lN^fZ*HvbW7iQet`lr=Np=FMvb1a8 zzS)Ve#6G6Y(37_*F&F=_1RC|*@oOn58X5~nv1(v^hX`6iOw7p2%I*3^cYE8g+DTv| zT6y89RZBW?5!gBkW&U71@R7ArQ+tW1HImHI((CV@zd<8JYds&%Y24d4+KC~b;#6fb zUt6d;72yD=wI+4|qv5*wW+T=_??w2bBxasBH4d{%un|0r3+}UaOmw`u!C=YFx2p=| zda>El@^YPus!;^7w`sdCPk;AUDxC$Y2!R;&IE3Gt`@fZw1R_NZaBb@t43bpT)V5{A zfC3QPPBbZWi%FXriH0`^@k%z9-j<;3 zSQ@Jg`Lf-gVe2P&KqF<&em61kJO)|3d-!KbBvQ=$Z;n9TeZ87balKW)V`c~bOH51> zA|lR5dHCLc}C6*6^y@tSx z;D?lcOvvSyZWujub>pGpfb`iLAV=5p8{1W!^eU^HMk-L^svC}Yz{z3m@`h(8g@(0m zp?P8FT_6zOY?#UX;1^R+IJb1L0^1ZiZVqtR=pBmEEyH_<4-D9-7PGuX5JJAFw{5HV zW(<%AUVO?B&@)JX2OT%rQd3dk<0y^>QX~e0o5J5KP=SlU$jGRZ-rM;$&Z(Mz|M(^voMsN7s~Us`zV7hGaZC-MI50Al-bBk1h|uPlWxNcn$H2xJ zzc&yWb2tbkbNh69H0u-h^wXzL9lZFc(g(u@fEnN(e6bl!4OlrX>hqL5Z>8xtDl3Ps zyKN7c7!ra@9EveGYLJ|mEx^b;lB%e*7J0;(YyYqwL z)PE&+n27M3=kAtX59+cjfnm3k{@lWcviQl?7$%x6>prPh{_;csuK;z4_zX11&8=?8 z$cm|Kecm&#>lwQOrA1zKGGaBh6Yv*O|E+1*kBDE?qTqkdx-sI3Gkp7O``YKUpf~L9 z4La;w_N?rA4!5aNPS3TgQv3+k)LJdonq0!Jf_Ql18U%I%m>L!%v~(jI9W@)TfQ{wJ z4&nMInwTJjS>6DG76_mWi0K9XEm&p?Kl5$!N^>#=!#pPD=~ba4|RT zx@H#Vs~=TQlsW1mGv{xB)CyEG@jq`a`N>ty+LtUXFC!O(71R-cj;^k!qit75y{?YV zBy>6^#K$KNIL2z;d{N`(2Q&*;JH%RRFLvm^5z8p=kQfyWGJ}V;>qBC)*~SR3gfNWM zT8t@6;#emM+)Om_clrK|0paK&y0^OjoLP_~yY;NJE?E8gA$DmCp>bY8>B>n`sq9q8 z4m%NYDnZG6ZknZ!e?~;y=u~i*;-S8k5goCOTFac9`Vh%(5t2AE7W?q?kDl4K*J^nh zpEvYZe0SO`-=g$TrAP4Hsk9^FXC9hNaRbFYW5*<(ZgRY~A;+Z#{LpS`@pd|~zn=UgVIRP4pK+Ma`A3*D1fm*$EJW|Yu zEK#M!yMoCT^()gD-wBzhmqAoMvP+e!kyxphYXq!&%F`cw+8o!sbLmbN7L;Jhz>xo$ z|3vdz1snBQsf!4%hqE5C8yltHa&q|>aQi}{asthtSVBw=xVgFlx?-e>6xdM*^6$Ze z4%7%NK2gR?$jrm+o33Pu0qcAl^Dlt%C zuom|Et`v|S7#ka78i%I^qL2G$fMO~HY-eG)Yz@sX;8ni4NBbE=#WWh?=;W#l{@T#` zH<&SSIi*otvQE`;1VsGsPdhvx5R=Y%ZxFf32YYk;98L5R8sm8O_>4pTgvY{gi5*E% z@7vl6(biUBM0Y6g$?RNiT%(Q$J`*6lfD=%WX)cHWUcf%6%7pm{&E`e7<4T;&Oz>nA zwQhuKsj2z*1@PR|FPdDejo;JDfTGJ`xsIr5NZ3K$tq*lCUnBiN$ z0FVH>u;}r-rldAUlZi$Rnpv|24q^<>T=pI);S$N9oVjP_!pX*#e)DEj9FH`5#E%mI3y1Am`VX?Jtw3)Yk_CR7UsY^*r{ zQ!}wUQ5V+nN3OKcE|!#PBtr-U0TuLhs8CH#RyzkPAaOV=Dq??17YKe49eIL+wA9o+ zCb}Bn%X4JSaJPNy?64~Vt@rciPjF2Vkz+`tGwAOGeixo{bHm_Xw@Mb5&IU+l<1!H zFOG7s|G|Hkc5b)n$C?I-tA zG{HwmG*qxTnj{?(S9%zSN?Dd!Dab@UA*;cG46ULBTW4b<4-zEt%0UT)(0O2D2!vP9 zVSO8V`z#ysZyilqLt;MjWc4@!`5S$9eh+rSii%vL0(_w;Yx4sMVzMi%ncZ9V5;ib$ z#Qa==ZgRBl(h1{Uq|Oj!t+PHrQ`SH3E3+h)fUilNb8%6L6rrWCM|3cM{Wbyt`Cd*X z<2bCblNMIP4h#E^p>PPI^2^V|PUrONE8-$tUN7U7TMtwq8XO9(UNW?*=Da>@Zy)|a z2n&dd-EO>6PTLI*?qNFh!iLu2-u55pl-n)qoevcZKmSLpk;|ukf7?Y!RSXV7G9OVY z4onY$E06?Zx+hUmQfd%Ljcbe(hn@t(XU|iq@J3=2xCo2pPTXt-Fr56wrV%Zi`ek2P zT^;8ZW)&3`py4L2e?<6ze&#!sm6w|Y57|v+6TY60_m3zkD}(b7?-ZW56z$wuLrCL! zEskJLGTkp`e^Ddxu&nHSNh1W0Zd>PsT&^5*UFGW>bZ})F&dM2xgk(|Zv^!*(R@H}h z(_Oz~a3?V3KU#o32h8>YG}_+=Pq?$%@l>im*cTjR^4T9%NIrMQpzs*li@f>rpe9ID zA!Ht?(mVVFBsS3c-23-Y`~*xMERM%v#0F{Q8evDqV5-IHkCMEq3#cReFgdAz`!G+k zHWZ0$=nJwdp$c>Qdlzbq_+S7WNqVhAP-eh0^9R8vfJ+d8$HK@M7GR22a1`85QF~RM z^z^}T8UP~;!os0)Q}muSKsz&Rj7ZQ2gw^)V!`Bx%FlM!l}LpZgiwmV^@O|5ME(SsA_6k<_+>M1T`IMv{8Spsn~%0@%I3GV|MJrF{X$h z=cxvw7>wvY1JZS?b8Ts`%vkT_+2lr4+dmjUS5;$2biv4oxmA` zbC*~NfNVh2$FaPGsb>XHPUfz{x2>ebP!hx^-QQoO!=VcB=vtvJ2Dm{_#DcHsvOee06V3BQ1TJ&IK@^$X3hg z0pWCiKWSX{R~#J3^!wM&iWF@&H8QHO?hSLTAQnk7Gy6y(<5vt}+`tbY-X`+u2M_wF z4Pg`P4!lnG-=8glZm~Qkj#7G#C*F`A9*BF9KWbPQoPJ0of2+9ka5}jJP7`VAaM5o* zEM(Xnr#%kCtqNBIrcI=iWEq&BI04xi;+YYbHMbE1?&k@pdc+sOPJ$~Q(>k+6IILzIJ34vwll^wJ47Jd;!FmynHQ80O(1jr6q)5ih@WKPoo5fpFQ!>elDTLhGD=o#q$cEE_~&n7-ir z&f7mOHvwq_wv(b0m(!o&cctzt_BH_!*xu1W9)gM7icW6W&531wIpDslN$O>OeD)*{iG7wFTp)#t-?I9M$^eKwr`j_8@ zQlEl>pFmqt=7-4fnPogMC;|d}W2m3QQ_TQ5E*3O;6NhHRvHO1+k@O^t96@Ucm>^Gk zfX-mrp#bZi565bnkU($rz~IOqNQh7#1;qiXpz!ViO#}Ig3k)G#A-E?X%Y_fL_0=mZ z$GPwqK|4n*P}Tu$fi0l5-WXWIV>UaI> zi-gRm3ch^Eg-i}0&zGK-_BJ{MbojApbrEa;C+GK@4ejM`ylu}ffr|yQeVWJ*_>)2A z*0N);qeb$G?~P#=cN`trMOzCCl?0=l`$C#Rmwt%~0y9DWP>Uj-lgQ;uB1tTG$V=Jx zQiy+yJO7Z4Li{{J`IQp_aD=D^6?fqo?F%;&U;;3UTeOfpQ5BE(OUJUiejlhStY7RQ z7FHqsX|9f!9Igs()SFt>_??HcV=xDk7WhFZyW1T~(NLAir0usz{;sFT5D|e;K!C6N zwHDXPm(R$|d;tn5EZtx_h~RE5Uc&s!5<|7{s{5Z{utcQi-mSZVYya!+1+@}a>Yv>u z&F-Pu)PZM|84 zHGt%hWPvBX@|Y{}owjd|!aX-ceu-l z(Qwv?OLlgKQ}qY5J1lIE$U?M4XHsLJngvX!|?+LlH9MAzFD7t8l)^4 zM_7+>jADn`L?#~&ayNqC%pG4G(;30P*SDv~HpX#jCb;^Mj+-3t!J1gLRydfSz&v{< z1fFlRNirp*SzvnPW7I+~)(8Q5x#D>1mfG~Myp`p76=ySEY$jzULrMXieXfxO>Qd$# z==TJ3dh6`EQi3vpE#&0+U%+2LF@-lz-OBFo`3CtBHi+(~Y=n-Dh+RAI_vx{`br#AE z3~dAVHYRM3N*DN!NzTT}$apOA=2Io&cih>WQFXwW6bHei6RpxZ;mi|LV@d%SWc0|{bp5YjY;Rz_qm zoqh9I*_4MhJgxiMY2^Ie(JXQ16G+yEuVHw&b!HhBLiFjVpUsp-*B{g&#;zO$P}eZp z;0kkGF%6C<80j9j_lsq7OeHUdC;-$Zo{^v57l5EM$-#N*_lNq;fZz45s;${g;#Ci8I*bxhJbGHys6h>w>TFnMx2n!mrr^3tye`BQ~2H{Vn z#x%w$YEJu4-P%SyU+aLaabZFK9H_mP)>hCBs&4T*cC%#H?gTLYMv@pliH~1qAKhT} z|HSR37bXOiC)iK`P0)`p4k90SSIkixhu?CusX`J(Rob@E57dn8Jv(G5mNkt{w|G`& z!DX2LD0(B{$1mSEPwDA6!X#aFoOe@*lWeDIU=W@hJajma<-%u?TIC!qV54Y0y-D$k zJI-qy!UZDL$DT}E59={8{Qk+4HKhBzqLXv%RdTd^f&oLuoR1N~4~!gYvWt-MVx1M( ziNU3+vJ$vGQel{5O$`l0Z!~vM)6ls#XR2qvBP+@CYs_I4df zGrT{5S92@&TWIC5+NYx(SMYCbzFm2S-x6`T`H*c!g@9_&r?@c!h*UJ;OD4oKg%NWClR<3QY z>w0313Q%FPN8e=k49iRdMsGq0&V-T_~HW_hW^7bZ-^CFQtV4 zkM=97)qE{{w$Sas=4n*W|G-vN+?}&|;C8|eyzIcfM^WU2$Ki+Adv}$$XqfE zVFe~_2#daR2P&=NqOJFNQXUo;Bll8(@Bjlra~x~>KIJcDc)+lrI`R&aPQqZCkvH+{ zn%0!33?W}KrP+pG7Q#KvMdCfLKU<2tj4wXk-hB09$U7!Mo`;jHAz1H%0_XnX(hCY7#UPQ?=nS$1Zk|B-4y+{9sXbIZ$36cU_XDEU z;dkE7p;`U@Z;mXs?+r^V;&By1(T4V&7SnPygr@yo`12b}s;eC5BLMq<%MB*6g21Mu zrKiWamRnm>W55$WnEVS%38L7E`H@n0W;4&z$yo*&{9IroZL5_&<3JxSO7?$ZgW@3; z=H`CjkXK|8F#F(wItMHGz(iFw-lSFpMa69j{QA`pcN*W0X6+`fE|*g;u$4nGNeMBn zC@Po?Yx09S6sZFMpDIm%#UC+0pNbH8>5@j#8$n)PQlGcly1J%5Ti_PN=+nvio%6Vt z!pF>+EO?LWMwJ8@XSjAIBjV%p%lW7JCxgQux{_=3n(ZPiV(DkpQ8YNC3(ynKJ zMGN3+Q^$k{l67F6K|UR`pgH1M4&Lib z2bl6*3U`V1Q)=q!dbgx>xfviot+V!|+v``%@G-|6?L}J^W~+U%oW-Sx zALDUuN>pNaaqm&5_!bN;a1f}RGRCHd=m$>MSaq^9XAXN&+!W@j%d|T2HlHn`QOALi zar}c?xVrk$hRfA|((l5VyK~nrUvKYsRXzs=1<$rTo(1&_FQPI7g2eXSJ%ck7HG;pu z+Tv(|xIMG`D%fc}R7%|3?>)&q$Mba3h_yVs{Z{h82bH*atG7E2AKAhyVafzq2NIf3Jh{C<<1=x0m3Ce2+=Y#vy|nKScGUAxjf9>*RK2IJiLy%6K$9YC(O-Z zD!!MS3sd_6NlEN(u#;RdIV!HruREFyWRhZJJS%Kz2WEjaZKcuOKT7J7l4 zB$_NP6dB@^&f3QVI0e(TUWQ}K@<(NL3a6rM398x;1z6@^?$B>A@VxhDVmd|l>=iA< zvO(fPuH51vR?IqH2pM8lh8Vb3mmVrg%4pLfv+d-_Pj9Ug7q|vOT{G&28t-;SVb#?s zC_r)NewklbaCdXtLKvuP+4IW$mexPYtMEG=p+$uzGW+HpI6XwLv$Kjj0<5R|*^7H@ z*3-peg*22Pd2+~-UGWObE*JQW`%bvm60I1|w+cf@!`d6ah_f@_=XP1yGTJF5uwh+JTSWBzlIYE!6;+|p%i?&cvSLFjg6Y) znfx*{6U`@&%j1T2F0e%e8UO=V|E@wI#*cZ2CK3V|&+lKY2hoL!+&G{5RD{lv{9eDR2ijdR%zOFIC!j>oT0n>lubYzAs-hn1a~7?sa|B&{-h z?uLn!XliRnt$g76-m{~$8z~BZ7AfCU4V;vU7lWh}Cl1{Ic+_yX1ZbB)<8L7O15dfc zcX;vfNCREGt_3?;9n5o(pJru|%!OxL0hho~0;CNoVvqp~+^{-zDna{?x^(a;o&sXn z1JX|ghIO+HrlzM0Rs&Hn*h3|Z{}mPDKkt&B|7SG7OhJUDlrIQQ{a#0!)=xx4ER3eQ%(xOaQGi|5OwE=l)Gi`)Zu7twFptlYN+yge2#;lbb2rOmQbE5 zme9~Qp|5N>?IzWo&PB;z^bQKMv!9sK%4A6ik$ZSKApuwUHBCNTQcK^z59RiUhk?0& zQZ@L2s0RTV^!9DfUAz^*j`@=y*D$3F0t4o^;rtY#vQ}E0K?kK>MDNQJyI(A-NbM;d}{oHsiZlv zRzx-g<_Ub4S6+TVp2I8-Z@^^uFCuyce-I{`X&l=i_>c)F0|OasCmJQG7>>)o@c{4BQ70SCAOSWPkjKm?hBM=xD;7jbVluNI|ij_>L|> z0qCE~Tp*rFETGs{1oG?|e=Gw0&3C1URPjeQU*6TD-`uhrCK?8dp@~#Ycvn5NGH4^R zBmR9g4=<^85GxH0=g2vC`bV`CkLqY{-n4fZo)tlJI9M<|3tE4Jk>=-Z z35+-?w6L%ML3a!LBiO0i$F(Rq2_W$x8n&QFXy(2feB+$!VX34O<%1KzJaNhGM|RTR zl9`<3^9Pb;aRp(B0z^D;a5M8IKy zLl~I0E;Ci+7{tpbt*lxbp0VW%Ty1su`ldv+f{ORQF-Qv8MLb@>{>CsUtUE!Hub zU}91VkS%`_c84P(qMJRxP| zE86zjr&|i4uOP~64>}~?0`%q5CRko1(=+6dD^wsoVV&97|8N| zjH=!unZ@+?Ls4gzuW>8e-P00eqJae+L^L?d7j{cXxhq9d(UBw7wx=-YJ;O%>pthtW z@ugi>oj0OeXam%nx&i^&;N6E!@dz?oA(I&H?#5e>#L2RUfv_ZZMpg!ky# z@A>Qz^`87cT7Y4)JpDcI*=Rzx5jGe8Jpb@=5wXjG{xdy9%o8U#7WYbGr`M+;Q(qV= zM}~(%(4Iks7l?fO(-V8Pwq@6YYk&{FkW83?3R|SoBQjjrI7^CMk%}nV#t68xQ}Dd! z_S;OkTu*wtj%EQ?223r`KZ$G#BGJN}#z9Zt(h<=VJ@M%gkK!Li_Brp%vEkCAA<-#m zL=GnEZ#VE~j2{?6q3f5R~?lkf+S12F$H#9k8il`dyys`i?uJzn`0@ zVZv&ptBYQ8tk!pdQ<=f3WR!M&S%i@?BLb|zoyVS6S!f;YlJ3$UG*fadx@k4^sOh$h z#|QEU)@~Qd%8?%C`}vI_UJY||0VW!};y5aB{Xo|R(wk_3CgeYO@PckL6$Y0;fW>fC zWf^EH+`z>H9a7UYHAXVz0DS(89u2V20abm@YOc-IADdo0P7dNHhaVd~%*IHSCg^|x zZ;IL$C0C@Y;w15=gzUm+LMS0Uz2Q0Oo6lNFWO3kuTR@{=wE!T3)kISK2hbZ5CEmn$ z)xP>(+YsIn46uwb2K;_u+aQQp-k6I(>--D|2?htlrH=-WPAeZ*EN6PC4ZCJQ)`3U` zxm!Nxp=X6o7z{FOpaox44qPH2mQDKlu|6jW912E8o`7ih+A$f+R~4^%i>8l|;XJiB zvpm5gYFPdK>NQQ9KK^GuTR9~xi6cFde}+E)#BvsIcEP8$)lMfK{4qW=O+L`~x1eVj zISk-a3!e?BVc?|TDbiV;xGA(B(4Uw)6Uf8RFwx{O$GGUnof4k1OYqb~zxe`j>2sNR z@_29Xmp-BA@v^|Mp_Q6efC~vu2}}}fheSn}ux^T_J*cX(bQ6wlT3T5_Jm^1aYv)`k zX^2V|LPq7TgckXbe_vj1@9J^~p10j^U_L-t_z`x~-X*CQx_59vC^G<7!UBfXXo~(e zNY3_lG6MLJfz_pn;RiGG_~tQP;v#h^T3n~^Md#Zfl`#0clgQc|9!^66*l&r)a~)KT zbaD`YJ>IPULn-V1@^`EWP4xxh?$RE^w(r{f{%1oU%|lCP@j~P4NhBM?r)Baf%6l9- z2M7{-=8vG;*~`mbEDf8VAahZ6Ht&h!tjkm^c;60x82b~Iaw_WK!$0Q=9z`Rz$#=m_ z{U{+MGVy~j~>IFDzaqYYS2Zga5?$We`AL1UgMtgBif83!^+H{2T-*veXiG}w&>D}AxUi6v0O3pN#m&dU zh_C^=D|-0w<-xC=Ns9DIt)Y*KijDxt!RQ2d!GJykLEQ=IC}6mB39*rr7`L$50MOaP z%Zr`!QKh-vI3#1@j@}oZ_vBE-*IZ)%IvP1#rhB$~aeK_s*_TtF&&w<0y1|EslT6uS zMPT#m_;`reCvQWLKgT4c$0j@%@PQIY z7O};mb2at77>?RBP59g&0LpP~Kaau?=+D6V`}q0-i`WzIO|HyFp|V>>*G%WnlraE4nI8eNnXF+V+gL$p%EcLbE2w1RkGc7er}e+K#W1i*(uOz2?Hzg;I#Jnn{9)V~ zN=}XOS7exov1!5-ce*Es^aoN!iUXwh1XhTe9bn3pzr&t?%XvL};8*IcgU82%{~Y)7 zO1^ult@QNlYUzy|4Vm0jv=Wa_6UVJaeEBg635vnLYX)mE8VlF`u=^W*vGck)o@*dm zcvKt~Ew&-KcdEg4Bl~Y0Jc0ILh(@84e400U;PIykC&e?Pvw* zT4Y3ogQFv|vb=qL+a1L45j%+C`M}L65iB3=JBL5|R6}%Rn~2 z`>cS>>_2#LYb|&XpZ*`$)AnMsX2DgY_-_t5oX$EKBA)}iWb@6z02Dmrvr+0 z=9$97jIMrkU!Z!`e%#-LhrN>Z@`P0V>fnhDO5#m}dEovt3F@@pHct?W&Jygp-0b!F zjcDb`I;3+$OO)+Imed-E-I5s6jIy-0#hds>cJ0C&T8BbG&AFlX?|*@v%Qh+i7OOG6 zEsDMg3q#ELlLY$1q>AU1UVC5$Lmn{1Q)Oj)cAoPN<@*HUIdPx<{{VJ(`{hQ}%c@*^ zM@KmM%p(ixC!Zma8$lh~)|@wPIGqzp7qxHbWh4Z;x|nUQu@jW6INm+8wVrI=swyQ6 zDU*OIxw!J&*RQCX&^WKx?IAr> zKOrVAPGW=4q|kX0&)_y18bGt)bwpi=U#-1F`u(^On=)0|Mf??>AeoylKfG=}y5lY- zfi9YifWr-S93U!j{K;_&BV-dy=o^yKN^|w4!q^)0oJMbSoh{O8> zge{cxoKR(KvB%%<%9Eg%1O_9^`8UIJRwt?_R-9=pd^7DA?@|7uTt)bQ#K>n`egWVZ z#EBa|m-vy$Mw@1KOrrw+ZMP?UQ_1(Qz&KZ3&0b#7r8Z5|QcD?vrIReg@wyh~6l9@} zxc(p>kj;V?q&IJhh}d+GN09G0Ax2N4Htb8*)|^+;*n5=_<_tg(kb8Ab z&LoJasS9D;&rUuBhJ-{Q60}D3{WHsP9WvH1oO|_P)=76^aAZUARA5$}X^zk0y=e6u zh^v66E8KmwZlW5dvf}iZwHOZr3oSwE)G01y2Hcu(Y!l$Uc}(WM8wU);Z}6$ZzvWVS zH9zs}+wgsaa;5C`*vn6@C10VS6OS;|zx9IKWFNEsx188o`K1o=#nmCzgt&Oq*S8BS zE*uHs-m~~uKz9g{cEnsCvMwT(&r#4)xBU7DfnnD!4JjEeD@;It>#QJcm`1Y!t(*(S zBm7~YZ0;DnpRsTa>eK$agU!uRFYTN;w6tIFm_0C`n3?efR)*{h=2+nIh^j(}ngJQ- ze=xTe8xa$FlOr)g7gtWEbUG4??r}M~cpd>br~YYZa_JLF9WJ{tQ&KLEJ%6JIVm$UJ zFP>AO{rfHOm_M`?2p;X~A}+Gt^(mZNIszARd=3rJS4>okOtNnNVe_S>ZO~WTUjLiM z)Rdbs^cK6Ibb>LDQ^ z#LfF-rf-eM^_gFxk1t>(j5AU4^pxT21BEOSfvG$w<=OO?+E08~Q?Eo6jQ^TWi&=MXB%T?ei_*m`2<{X5w^cGf0WplRZi&$}=3G zFt_ZA>-MoCU|7V@P{7>z%hM}!YZUZfSHI0m|BR0t=+82*Iw^FfY#2x$UO1TGEj4i3 zXZrHTzEq*BG32V!A`7S!n|T_o!_Qvq$}?~fI&^;(d3=b>iJA`m`r^&~<_@Qaf3J6$ zm{v?iQ9Qet@?*t#uB_|ISkT1?ngWM+TL_T#L4}+_{{YSljz?Ru+kqM;+m=d8w+RMt z)Ne8#I+O0Xl^;L+@Or=x6Aas)rpMLKAH<0T9fN~|F3~wxG``LCHP~W_=zw&{hfDG6 zW9J>yp#f!V+9%$QF4U*QH@g(g83-`V#;Ps5YAAy4R%MpCRh&ajVNVraQld=}K0D9m zd9Sz4#b(Y(JoO$&T3p-Yb}K7wN=lhqZhE3fGx-DlFI1^}c$gR*D3e)L#YQw+mw(;s z4E=loE6@mV2!O_bzyZ&|b(`L~1^P#b>_FauEk_2-KP}{$j#NMcS^kbW6zs0l1S;|{ z@J(Rs@R32%0GerLW)~x4_Q-Y1_^7BT5FYrAFacrhfjS-MqNC-(3Xz4}PG=2f`prxljEzxzS!s&yj6ry1HADuBzTB3QPS9$Sj^d9eVjv zZI$et6fSfw;B=_hCe{|>h(flnI=i#P$iFNGB_T)XP9PyqwEV*-kgpf@Zrg50D(CSl(|KH*Utae2k&8Dop1%z!ox39A0D&B%&{@#}V29a7Mn`r6t?U)0elO-|Yf%>aB3(4QY; zqh;eRTKUWtCC^fZd0sQusN(lek&n^6-8Mfrmp8Ut7kqT;>CeTcx~F5DYo=&nf1_Hk z2mK&79G%ABHswF#eqOF7O3umfvre_DqyE#k;d z-!J5}b-l=DTtt;yIG)wYK@7bKy9iL#vsBy*OS^seFb>VeGj|)^>q!#wSXi!!q?ski zt516Hzql2CQV1Cc_+jysYoj0~-~&}{F0#XY{h22!hiyTOVZ}==uTS?(@&PoK$^T}1 zW)>z&9sHC1T@7_X!A5gOhVIzYgmWHZ6Zz-inIe{5QiN}3WV{X`zOixH*V+4XV+Ten4`o(+f3nQ%+=t0U0pxH zmoFG48^Qn!BPDgM&(Id?h0*Plj#;a8so!ApF*5W2NNDoUM}toRArQq}Q*P)0D?hMQ`~0! z=wwOI{Qhh06$>{tZQ7Y1mq%2%>beoR19$=u)~Cd6aB*Jg_hYTj3z=bwhlh%2EsrNSR0m0(H0>#fnf+Ja`bdLi_jS6ifRIg_g$T zQ@6Lx4q`oP*mLgZ=33PU)fN>U#MTTW;Hu*m(oo3o!Hgl+YXo*~Ut~POdW@uQ_^CBI zPSLygw#_V)gsA5rLCdMO53~fLOTxIZFzcVA-@5e{oGVCt=^q_M92!Kvw7_9MkT}J; zbm(>o*`MJI_dlAbIj$_U#<23esla$~#FbyF#YBgKvJTqM1Ia`#{tJ&7HW5P0!UoP; zG+6+ge$m`qNC&Q*oPdWSCklO^9gBtsCdQRfDD33ED>}Lz|D&@GpQ96iabG6N2lK; z3t&PU7JCE|A|SM)Vs&Y0!n4w{FMKK>5GE35C7MJp37~uyXb>`50MkdsIU@ z)1_FR$UVOFY9dKrhwY3A+ldp0FEYQr6W*l|{`Tn~<4qL?5m)BTu0IVQJ8gdd@jRX~ zaFs*0);B_hL|<`RNr{Ny-EN|t;@p`tLvP=nFf+TqCJ@HfGFNa%*@qW@RtSS!M7eOZ z;PVc=yo7dT368pCj%!>PrY zkoU1+2YCrF_}+^MaX!klb0>)s46BQ~{c^sR7Zq(iWQzQoeE%MBP6!y14gB%=q)^xE z*Mm2zBqHU3tsVa%w$}=`p(?g*b8tT7V6Tk0?0Il zl?Mf7FfMF9)Sx!RJMB=>?Bx9U@dA^1 z{4<{~1E24O^K#Kd@(K&Cx6T#g?kM|H_Ge9hhO1*HEvJR zxz6>3F454}($qBafYnS#T8{q#=2$?|{h0XzOqI_XkAyeMRh2(w7kySS;BX=JcI$Wp z8blU}qINL0@VsJdNY=&`GYt-$U<2FTRF1WilM}3kh#Mi6+TuVpF6hSqMX&G!2Z9Hj zK@MAPgf?Mqa!ma^TAco2Z_r|~ovPU==Mf6yyyqHRX(QKgW+MiMj1Z}U!i(>aR~QJy z$H!wv7PvEjM+_n<7Y#U_#%lcgnwuSQMu0iYJwE&ix^E;m6NuozzaDwU7|=nOXz_65 zvFg=B-~Vm2g1Hm6`;`^%&4xlf)1412$O7)YUk@~|Wh*Uvb$mDH#4J_w<@VGo;%DMm zob5p9fv8*|&k{r`8wTOj1og)AsRK+z$G9Crq;5CmC&{CMB= zN-yzM2ul~ipUrt^YJY`eR>kA_s8*Kx=kdj-3JV-PJtU9nT%692=R_G%(;v+JlvBz`LDA6L zdxHY!|E}I_fDZpx5M8PBybq$?pgp;dFeQYsy?YloKaY0+!!ZJvG0B@KepKHk)y4<| zbGdW;K$%41?_5LQD<(+@1bZ8xRt!AO#U*dt@k_r4KhfQD)l^sM)|KRw-$@oL*F9`$_)5e#v6!DwWyPVFF>+A1emmrz@)Hmie z%X33}_KT#?6UDY{9G60e4yn-v`ua+HzWraQyGFwQTLhi>OGz^61rq*2#(}hiZXI?d zAU%+d;EBX61D_3?&V})PxX7RFb%@ol-|C<9f#?BdTK|AUSZrrNtJxRuG}&{QKM{d-qms6Q|kgT2p(; z)n#{oSU%exja??!wDS5SC1(iep8SC6jxpw5U7fXCNQQ}#Bvw5_!>d;suIazk{d@NaA((GYp1cj_-Q^}0s*1s!d=nR-M>aOx1o(TA7>~Oe=KK=#O$>-w z{*P7I7lnq$m%hLw_g7y+Irk=wwKOGtB3x1|C3%V)YiG*kRQB*V)^p7 zwYLmhiYt$Ek10pDbw${GJG@AQl1I14D5(k@y!SxxXwGgXLT05!@bO9jo46in-!k7= zo5KTNaELWkJqLN*pkkfXYdE$QnSWha&=}CkkX5O(RvoaXw~&Y>A>J}^c1O)*B&EO7JpAHz^;RP7F5vXc-&eY%o;zRd& zxgh-jMK5u29qsK$f`4N-4+by?<5dYR6-2SDt*me-E9k;`3sIF$ULP?_TK=h`oWb_$ z1L?l=K;oySB-}^kI*+K$sbO!&koGAUf^lA%T3hKJ5tommsT%3I$85i!`?2YD$^O1x zWK(qK>1$dIL_(=Cjy8?9w~yxtDzG0vjm{S^uVE=?mSsB_BX^Sew5k$ajnKf}@*;GY z<(GW0vFX|GpD7eQh9*7jT$hhG*sSYfMcIt&a`>eXQ;|>RPD*KnZEUZAfBwo@o>pmM>60YC}zxE|Gg`NuDQoB(-$@R_vG6Ea*271Mi1bX0^kLu~Tf~bQ3pkX>B zZ{P02nbRpvuU}uDLP3=A*3)y8TVf@AzR~u}^GDCourQKmna$D>0M7w_?PzO5ZHlP? z6GlfK9v)&d#S=GV9G9P$Uc78`<8h6(MTADW;%`HRi)-CYj-902=-a%x-O+d;16HoU z1YG%?`v!raSz1?Cwqw1E4|6-1wH7xsw}(+}wh~+R6A1eaND2OiL~NxMub`pdIx(!^ z9N^#ogcZ!!U$TN4EYk$7$GjD4P37eh_b9Tj82Yxs-k8w?+bB$^CX@%6u7JSK`F0n% z2NlN7_jzVVPTwGocXW}Y`0KN>KK7he?O{4~3N4~pnFLa@SFfM-kZ6pHl9e`3{6`Cb zIl^2ZdGSN+VyCp_g{Aeyl=_C%PaYp4s&-^tBPjlI=w6RzFA`<=A0CMlwY&Frxqj(& zpu)R}@P=gVP8J0_4-bRl2bcV&s}p3S>h-Cf_q!KT(<-n0S`7C&xjQ#Yd4`3a9>Ur< z6ASkLBf^D%NghVa%9BB#-;_Wo4Z(+YZZFPFJZo772t|@X;@ICw`s1fh$MX7!iVkaZ ziMFF`xf*|SK!fb;x3DkZh`|C&Sp4>lS5i2R2xwpo!xu=5!Mu3!Co(v&Tfcwzj)IaB z=dR&;91yR^$Cs$WY|4gVu>x8T=|h^dJ11f&smQS~<0PNGrR`HQatAsLn7@zZ_QH|h zd1Nn@9RxdIeQHe({K6EWs-gm|3zC)$1n|DA7Lh?1U2#g@l9S`VLJHRCM@~7vKTRA+ zkhAyy(DvT(Scm=l@FfySL=l;hhP{(5J48uFW>y-C$R43mlo28$DJo<|$tEi+WXs4( z$W}@`$EEN6{f+1OJk)A_4%Bi^L)RL_c5fLIi#4B_rFLd4X2Qi;fcJ( z>pBE`KwHD&#rv+a38T|S-T5a>HP*9ygGOp^H(RHk8qV@%eHr9oDH4mb?2z^srIa>Y zgp`S9OX)edax^!;21zd`M{mjx+=Beuw&(BJ3KIzH>)B4v6_u8zx=yCn#^|X{j(0we z`;L38pm{g?3*uSv#F&v3>LJDnQ5)l9W63A)a#D|CfC$bq2G2Nd^;Py$-W+l&1ioMU zfPI@EP&7#3FAbJ{!AL+tVg(+HPKAh4!%J=X(!WV0H}Bg})=Li$5X#4#fVaUR3sJYw zPV1kPLv;*Z$-Z>GEKTGsNe+4;&jkz?okW?J?|JbaW5d4hdlOzIXwK-6lp|ONgDgmm zAvgU{d?1Rfo#$TsNrf(8&N`;Ej!)kI9z`aJ=eyS;9!6G4W{+wEY6)? zt2TeNhtzgLqTkenK{P@+QPbS-9YDV4=Y1M6WC@&bK}KHc zavLlnBDd_f&Q9-O_q`+#z;i_N?AdotTVI<7&>tN7VM@EbqIK8P6w47+!-7j%TH7fp z>xtX}EMOFy`<&`PS_0snmzxWLjUit_PR{(wN}{Z%#KI0F5CVH08sd2Ay9)z0U`MgB zJ!mGsd;!lI2Oy3cSPD~6=-yl1C*Ey%f`A<+FzhwK3GwPPAOLPBAlgK2{p z4hIBZ0w2QQ=J*d0;t@qz)0&d)Df!~=cyvrvM>^D*UcV1x3fXNWp`+KrTxn4wFA^J~ zZ(Xf@TFBwa+uJ~=ZS~#7R;SE|8w9DDSAUJnH3-sNMvIwgGCYyw!nW{%es0!x>f>kd z^I(_5xA&#e2CO%#s;;pi;~lQT@JR>g1pY_*Z*m;CaE+i1Rt60P1(P+~pMOGq%tK*C z^~}}h9|4&}!OCiXk1L{#)?mT|VLPgKl;4)GGE(epY)n0#FsV97LoXwYn0L+RrAuum zUa?<>O9cvZY*2*kygW|~f_D^O6j$EAtIb_xwXbRo-RZ@y?@Pl83BzmdpA1tgUhJm} z4m&N@dCQ_v5$Roqe6Fw=;ePet$lL`nW*<)rvEjv4?09hz0(+0IPRI{8NiI{v5*%qZ zjW$g$;Hsj>@nN?k4GUAp`gxkf-mRpj`|>lIEx3BWJT_N#D6V>qQC|M2FPnn{%35r)HwhB^=;%TsUlOn1 zjvARmQQ3AapI#|w9w=Veo?&RIL*069CvgXEBwh(rY{h!FLFBjuFCm`XTCEVx`CSP+ zc@4_%?n$}&YFGqPd=R04U19?OwuVR;SVN4A1n9@9`S>u07J$f%7{pZS#;z1lWkm{E~z;k}DNl-f*@) zG=8Ko#OxL#aFtp{mF69}&o4Z82z&W9yRj%Pu^R(Q<5hr+6qZMQ!-w zo)=l$Zi4osuI@L}2XG>TU-Z$q?NQequg!wSZJ)H3cQMk@TTU4~8fv}_gTfwjW&*q) z9qxdApQU>Umi8DnpmfTiA@1vYMWJwiRT0TLU5;ZmWS)$?aw@Cp&n%7bbgZ34#g@Fi zVmp8Rkak<{xP2@(Dyri732aK!gES@uAqh6OlJzTV*{h^y{gf95Lk}F7o64G7>6@E* z8x|(yS`&&o$~-e75HLN?BRH;t-UUSK9D3f>%fvBuV~YCK?3d&xU9Val#0}kXuf%hB zGHsdKFn@dL?~ms?L&P1+s9R*yN@%2#XiVN#9!z@lg@?->-v57>Zx`Q)Naev#-e(mp z(&nk{=y3T1r@!Wr-giG#{5MqT{_t=!ocAZmVLETHFO0F+ve@eO`ztf=3;vk>2z~tg zZRQ`RzT(opV!1)jKlPW*2esvzF2}vOHp5-xYIX2)%@wP;8e4kT03+7GZbtrTC63Sm z_OwKuH=IHoBxSSa3yrOfu~mD=Z;ZzeO1Zaz1xWzrgIj#rl*^jx%NN}pFG54g9et_Ty$Gi!2MgTX$}0lq%GMc`)%xDpQY71ye_=KA-s7{{ zFnMDASM9wE0t0JR1U61Dnpyl`Ryrbhf(SSavVVoW4>yAL(T0A+*L z`e*@q0m%Ny{LuA5otztjz4Ki>$4iPvNC}d{2;9Zn)^>d9?84gO)wQGjMcbY~2QN~A5F8v9p3|MC)#9gP*KzE%81=@8uY!xX z?&q8O7kO0Gh8fEql|E7>mH)$pXvMX&_Q{#Z-Q?haEn`|?p;1aJJT7v68n<^zWa4mo z|NhuQQtP?5z0hmm5OJ3oxR_N^GxGQEs&caK+K(G$TuIQtpK-N^bE)s&DRYFsVp0s* zSmU?rA5cHp#~~EDn-~fRaRh30T$zxN9Z*)k<+r$TkADIj~R2 zyHKeSEUbQQHqxVDR4;(O1(v@J-8CSFp&=nqX4%@<=$$-Yi6M2ww}h67ER(mW0d#ji z*FS<42@yU(L=;@W3e|^EW1#jgH>wx@df)-!iK9{`Y<%8TbX_aV}gC?cP{ z4)>So;e!S%`9=!u*AZ)v^SXPVwre^dTST=u4hX z93zF{8o1-4W+p#-Ov>3hx~lH83dvmZ$TFak|Gn$m@>~i#|D}9drG^l2+sk&U-7n8H zNu_$0R#nSR`nv6>%ieOXKn7!&^%`fU9{LV3gjOI6%F(zuq7NJH5hnl0JOyPt_ag8u z?0cxvP)>Oc2QeOHfe9s-(GM`Az~F3RDTGFd7{s_f%)VYxRTa>a7!k4Xqi7bmFCK5Q zIqaC|DhP9#j^4Z?A`ypK7#V+}e8W(;qpQngPr0CTv~)A|Zie3T1joMzzAfwOlVwPj zoT$0GhqrE2p6xw7b4eSNQBl5w ziH|7c*M(W+OV8PIHItFgQ6z5_$I!ZR8johcTsP7>pyq)BxMT7<$`Q{b9=>bWughE= zD!_I8+e;NhR=IEdQ{uFn~_uQ?SfWy#O{Syr(C!Zghf11=a*EN|a{xB@iyQ zf;Cnp^INo|`^|+&XktHzpUB7|>%3;VC1$P>{@<%Y&6*>U?WGctbsIPQ6|R2&e0arI zYvhVJCP>M;FLVz*%8utCDMpyxuV3%9c+Su6-+(r0+2fdO+wb-qAo;J)6@t(fIa&9p ziXmGX{vYDv?TqaX!{!@%1We;LwsQtXOYYoupZ)eoZF1JE<6$YK;}wI0ogKO6-Ov4L zjdgL~jwS3QKyYkPEP3cq-QXa5>3TCY0oWaAkAxxA)j(Wh8pg0UVS8h#j?--#b2^zM z_qU3DU8q7oF6Uax^jB*he(mjMw@tGa*S}#^ zK_pD5d$xoOxYS#)7rS1iqO9EbMKMXL&=jG?e3WJ7@n_W(dn3Cw_wTAj} z$-^6Qh_Q>%l*H{S)$;yK07D1 z2VV_z7DCAV`|E9AD>;uPG;{1LfXWoZEp%>Vg#F?65PR^H5nVepH9?2N;q@lLk0|g+QaJ8@>3Rx8xv)0tS=S$LBXtA0#yXso-T|D9T?F0d?n5eBdO+Ja` zDbfgiounl2hlhLkmC-CxY~RwE5&B#izS=a6Cf|&H<{JrJerpVM>x0^MhkRf!(*&Q6 zS7*R129k3m3ij5aWOLSQ#Q_0TVC&f4ICiUkpnTPyq)2FH`bI%Tg?suoq-OP$6AywX zkd9~YX$*MhEXyXO%OH3`Ow4*s-xR4ANl7QoK3*&AM{FXP4I?A;yLaP0TFbPZ;bSO+ z(h^G>ed5VP8BBq(4}+I+Bx<0{SDu&m9#h=CMmmb2q;*Q4#m6}07v%#U_u-HnudEs_ z8VsV5x0cW)@OpUm1>CGLJ*Ph~u*LS%@>G^!$E9Oh(JnB2TCnW&zFY%kE4F8l;Sr14 zpQ-wE9`KAUvkZMXsRDebG@o0gRz!+$k0*VZ+-sIvdoT6ZmhAtbKZ932wzlB zF_X_qUeK#gjU}r*AZ(vC7v86AYC5B+NcePs?k~Sz%g37&NpH_=oiLegAN6X~3~g!a zs*z~Fl8;zMU~b^eqmoOt0?CX32FfWAhQR!D1xPuXSANS=w zKc-1RoiNeM5qN15=C99^t|PYtkosHQ1sFM)`>Y-y82)HKX93YI$hqVMEI!}gX}-B@ zjbIJ0PnE5oNbhhu8jopdE5K)+@1Hh}^r#6$<{2a~@ht5k#4IT)%|pAl_yJm+TAtp0 zeMgDe$!M$bY%`bd*Wbe~2BVIz7%l z;yC!jjwnWuocuY2g>!Oq7cgOA4o!t}9f8m~0$zumulbj)?4fJk;-%gNb_C-`Jl+N$_``RT zHuogf1(_clJi+)IDPayBmn>UtLIGEI`e+K=Gt$zKzeLQ?#=5hXnZadOWNVZw_-Sg{^yG+e4XWG$P{U!7%6v9Jt8}X$Wn=lJ1Lo%MJQ>%2soe?v+q?2X`Pba> zckc9!jr$9@Dk^l1w{NT_(e5H4JWZ3->iXUh7D>t|SlQMT{He87(MbVu%Ob}sdb}_5 zls)g7x)3MvgZcdV_Z`3vnfB}vzl>u6+K9+KESNRdc_yPwYwJ-X~{_-=F`F2 z<>?DdaN(0{kWP%m5UH+nUK<*EQc-?3)8NnQL{cOn@o!8p-!Hx>&3c7%1%R*@IKfot z5p*vcavEme*u^G$^R>Vsfm;!D-)4e7Y996RYAt@}>U5KRV{hE!a&KJX-(M2F^ z+AE5PQiD(;-V5jdPpgl{Rv-7fzd+jHp4}=l2$6YuDBt*Rs~S5o3KIPfn4YM?k&x63 zY64M>_DjAg{=<$$#_d7GY4<*4bHM?CjPQV6p69qPi63`r=j3%_b{?C&Pd|jc*fx!g ze4v#0Oeesbb^#~+ZNZ4RixXu57q5z_dJ_* z>*@aPch@YZ0%>!ZunyX0V`F0MEUUGP@-3^#MYxHc^p*PeA0Vf3p@0XmZpa*>GA%2- zpesPe6O0jx(;Lq*sKswI(XhkM}u$ktbGzE6J9-0 z2r)V8G)iHYQ+!NyQGuHdH;kYFF0a+>#|xJ)+q7&;zCa9Th5GVHRK%_!U~{;-cD_MN z`6V0cf1YLWgCvCD(3T0_DD+>NZ7(Z+TogSlB9aRRP+B|DmL8uK83_okM|%tg4z}Ue zRzQyt*NHujaF+51E8*C`sA(S5o=+XCYL}d|rsKkYuU*NL+q}jr4OOJj4r9$XC*A&P z^=)RWpx~Wgf2c>l=?O)3&~U!d$5or@&Kbc$htQC>SKy=nG1n#37ETG!0D_IJTafun~NE^g%ZEMRzm>w)M=VOp}n6Cu1$ zTs(@5fGK=xs;z^=T_axsG<-Zfn4AY@oIvFU>v#nY1oxmH6p1}g)5H~bE0In2NJZ^7 zgN$tV6+V%h%mmEP>)b-C({qWhw*CPGw_;miOwm{u{eDq2c+voJAB%~{#MQd;{@uGf z%1_ZV5&(ZsCrWQR-D;43L|Tl<>^##+yNbNGekGCW3j1?h4$vwUFz(xDVrr@_LIx)+ z44byzh1(n61^a)Hk|Nu4@RX?Osu5WB5-Q}{k&>0(i_?SO!CAXe_J?(K?R$Dw?uaEG zcHrm6SzTa_u?tIDeS3*QF`WAY?geDQU*0;h=cPlf{!9zDHUZEP{xN}*2!?DBeOmLM z!4NOU5bU-~@n3&{?=7ayF73*P^@9Njs#J_bP@mB)mMNvBrXt7%i804FlU%H*BgkYo zcVuTrP%PSCi+r7)jt2^mn0O_*5q+c2{5|tWeV8vfctvA80tgRO$$*2NgzilnC(n?R zmQr?yjVVk`|M``E8r*oxpKefbqm)$s?_s{WyL>$G$w|w9+|xg)QUQ4iA{W3j7ZA8F zTi@>&<$aj}H(VYU?zGITB~VO<}QANuO)(dHGz zt`=gBV#GEemC{}UW9m^-PYo*4&bI`d6lPoeEf6h$hcdij3~OQBhcYh|p{mk1bTSP{ z6(HL~$_`AZ5G@Ld9FA5Hpb24n6Dcbp<0vGU@kHj3y5;s#7_ydQP6b*C@4OLtJ9Z(WLNV#1#2`kB$FIye*;n0eZFt`|q9##2=7~l+n zW1a$sP|SBjY+O*tJljXiKy^+$vK4hWo|VNOySW+1fWn}6qfXs<+kW)toRQ-XR~G|F z(0(0tcLn!O{Fr@k&zlRUFJGPk6bi{FDBDKb?eN#%l5ec7_j$PLHq=6OHJI_E8^MTr z>E}<(^lGcCS3za<^rQ+>3R0>F93!I~0;wIhwtiv%j)jvV8EqebALQmnU<9BJsHp(S z;latheh&QhqKkg1lQ7aJT)lQp3VV5bGJ-(xasy8uwLY>W5GIWnjg@({m*9HcXOnf1 znGEsfa9*wY4;Nq#m0#HBG%SwA@Nc^}zpq5wAkD^1S#0P4WhnW57XNYE$9z=+bis8W z@ywX+El;s|4R$TUtc2diJUxUP<*xwRc{aRcF#8DDQueze3*{z%Namxn2tXP~;RAaB zsjnkO@Te)Cuh~bSWnyy2;J=48FvP3}B_m4yiR>#aR_n$)dPD_c9>>PIL%Ee{0PVt` zl3DK-rD3!caLph<;b8gnM&%XS#leh#onk2ok%s|TMT}l)^b-<6S zs@fT+rUQQtJl^Pil>H{Hf=lf7lE>dqpTZDHa`-UOorjNGTbZIK4`3w_145W4F=>%O zv*67eu(%1`*e>S>P|J!?B`|TrN{gHTJc)1D$7x`w`~6>=W!cT{zxT{g$|rFc{0IZ& zyRz|^5}@4_*{iA0JOu=bHi;giH0}jEn%RTM9t@g3=uxtcrUj!Y0xb$>-$}=L>dgm# zb(H?%3A4g2^1oZX465H?(BpKJB`#IiPmQO}dahON>MYy!8v(bsDJz#tmXfr{ZZl_h zDqO-uK789XiCkrKn2!8|T%qAHczrI|eVx`g1RE4_P+nV0j99=XOxMKBCD?+Ae$(@< z%ZrNuKW2R65+%gM9@dT^X$pk79K#(axkhn*z=+1((=%QF75>kN4}l>`@I1>7v+amS zK?&M?gzH13SEi+)Dj_B%Y1_UqV3V0gTI{^l}6>diR zPdQUHgu_leR!jA6j!|OhAQA%g^zrmS*rS?qSU_L^pF)e*k(x#60j*LUgW-v0Ek`%E zxR(oy4}CFf+RC00(dO}|`U-^zqQL*$b z9fjgi9+*u3pu6PRS=FVp#uVyEO;9DqI32B7OUF;iV# zp(!~EDj~nk?{NQqwvX(?D5Epo`Zwc){2hl{yRN%bIQocs3kPj!j`zPY5DPe&i$_JY zR;$beWCS>Pp>;UO!}H5)9m5aQr49>5?hq70fP)x9dwU83=IzJ|c5=#vfonY%f*>D8 zMTK+Wx9(M21uI*<79wcDhA}EiTucl{c&0(a#3GDE_-@`~in&`hfb9L_H7pSSC^ zvR|E>pVv5X0vBTdM;LO6u8}PG8X&i2*(36=vPX#-GSR2b`j?fJfrpFz7Upk8$^3^7 z-SLWvC2uL7LtDq=*lTx?mg3o|mrBVN3&VMn*N;V{_@t7^v^T)@De2K8Lp?qCxWM(M z00O9k9k#@HccnU2o%n1Czqensj3N35)`Ox8m8^5iA$z7mw_Tqd(lu@EsvbMujBJ-V zTgMju*#LwM9%pl+G6bb!qr8T_@!7LCzJ4I4AGy}!*%zUT@wN_9!ZDl!GunU;`eNFM zZ;W~PP{`yT6^vch16SN8H}StlcNvp1s5tQgn-^yxe6Jt%*!Y^_DRy-&h;w-hMmSzr zHW}t+a-yQny;?@8?Da{`52o_{rJJN!JS-(ONl^m z5TSecW$rN?Z)n142b~#+%a~SNt8K>uA+hlCg5{il$;V@0mJWDKWzNrE3#g{3s;tDx zgV-*nvF2tyJ0WVH)YXYhm>=llDz@6AlM6ll4X9&e4+%K*d2%Z7aX^9{HX?j+WOCs) ziFW*&`nQa^(sU}on`wWTX?uBK$KbD;oBDNRJ8#2L`z{pP`NqgQ8K1mNFc#ZRmB}w9 zv!kOUEbdrRevTTtb2cU>5<)Ir6bao9~Dq8=fsJ7 z|Dr8IYPTRI5e4CWvTjV_An*nHg~g1g0gD;baDvd(UZ3mNm%y>an5?1#S03m|T}6eW zKuk9lSlhHmY2MGYkZ=%}5?YMQc|7re;4br_AMuRH`!0tz#fUk_{ z4#E9_ephRZu?>F^y<}JrdbL0fR^BQ@7{sx ziIJkNF2sY~3B=+Gj~?vClQ#IK%F)^qZC&N%eVv>ZK)6GBpBUgFAM~$Wzvgr^o~65( zDTJxkVTQwYd8Nltd^d|gg$+N z`wr;tls}{+M%?9gCV<=lba{GsfJy=Urkj?0Zik$u9EcBq!e-jM;As{9=2sfp`|PuxNN10x4wrjw-P+2_FC&t$@_mGEPr?qCoS{T zZqy6{5aox_`Ch#m7FY|K6}kT#NC*8%w>2lqBEt&c32@Mhrs-bP^_fk>S9jD9Jl);l zz^Cz2Uq?F8Ag#SsY-Vy2!PSlT2T00WTZP5M5RtT3@Dw%Tp=Som2A>2GyU{H|&rfMQ zeHmM@*SHy$A%N#HB*Z-r{qHzehPZis)=fk-?DGQ8Q-zx@d}$gf*{s~~4n;VqQv;k_ z8U_4|qtL(Nb9qj6@+at=)zec{O`*k=2X`B#nD zlXDtYYZ!O;J449uq+;r*1%GCS?|Z(jOp6GPRQ~ErO01V$We<}RFs37LFx*2^71Ds@ z?^X+_`>5QjF3J4eLqN}`ejs+FWp{na$#yZLs+(wuFT*Onx6nClj0;5=c9f0LgYv>g z$6d_`r2E6`;usPy+)Ey71aid1Rn-r#m`^cg9)}?!slK}h^F_S=apMLz)_=l1)I#Li zj`o~twjv!NR@X&IlEm=1xZjYCA?Y3bKM);2UWNt(^&6o2YdTMF5NNjtS+kU$6Y%{t zHyqDGKet)?_l;Z~>KnY}=-b!1EJUoG!9l`FR8}_F>7rQR`i*w2%h%|Pi1?mF*S~zi zI8$maO1Fy19zBYO86LBcSYsyjGhx=N_E*mrYXiFxE6wK-yKNbqZAbo7lNaAa*Ja&V zQW$c&hV+_7oGf~7xg^I0USMaaPV&|T%WRwCFjdBp5BU|AAc!3pqWk&z89k`$m|DgF z1Lo2KF%Ssjta;3P!KtxKk*eis^`}$Iz_3kD^I;($K3v~#hQTl%M2OUQPrk>tKGMUk zjPogeR2L>M=O^lf)DG?bfhQ=Av=orUxGO-5^@W%+vA2@4vfgn2=!~!QAQB^Jm7;Zb z=OZNpA8M-`r{DCK`>fgSqPzEKo42jC4_M*&eHam8<p9USD76h{E`p zY#VMrNk-F1Q?w(yPs?dP9iExFoSS|7_BNPfo&3&Yj`XYixo&Fob8zD~JZ(v;lspHA zGL*4!hc7C6JQ_IRR0#d%U39Rap*9A+d6%#hkrs}T#PaKm)w@M|@?>mVttdGE{A+5& zLh+S>%|DKBzZabVI`gU1{5ED}elcb@jhYh7rde27F%6%ez`qbc?+PXTRcL%Cd{o^o z!qiCasEQt*Bx}<{H~;qJ8g0w5%J~&_)(rIz+#@^|MqvPcM<*>3N|cvNsI%aP*>2kn zx03pnmV=@lU?(dm_$hFpYNXu09qNQ5c}~9%M zf7nt$LPTT%NA2SEXi(psp_|wrj+y7SXd@~vYti6fT@$LZb#YMJyuE$<>V_4Jnb#W1 z%CE21M@yjm{8tSFz&2u6=AZ@hRpd(lQTlwHG%l&{8U&bEp_90E`?hq`^_NR4DC-3L+f~9bl(w&B+!sbs%aSLI zp@zl_vsyT1g6Cm^f~B~Vg!3`H9$GZmx{%P&)6&wSRF9aoEVO>Dt;FTHs?_l#_R+Lg z1sl^JFmkedwr;FAe(I)>l^y!JB|KaxUA!vh6?O$9U+_;}JbkK^(hBFVeQB0iuV3?| z6vdVmqwGV?0_hGcLdDjd(KcSn4$7dGl9R&*nhj-f0CAEDCn{!kcDvuIcHcq5L)#CV z6WmP6?&^%KmkR>|xMRVBMn7wo<-4*+*tU1`(Q2qmt|pELCnoxeZ=+`WjvL1Az0_Kq z_#8MCXyF>)BLQ89hv&e39|vp14lxw6l2`gI1g(Mr1rA(0nr%xB##K$|-jaQ8(F8fb z$JVC>4;>ORY(R$W6a>fwcz4$S)*@uPOc^Y^f|{cCNm>zFyPTZXpSZ?227j@e)S!n0U6hAi=28ZOtu9AHvJ=X^`a=VCz5=1w*0blCyTpq zk27$38yfL@hS2o8xGZOElnO9l>0-AL(}ub3%$FibPEP-lnAA!18DMc?nPCmT2G82M zmWmM-XbE_Ge(k{%)CEFHb>q0g0QQ=ivI@v=S7CE_=QjV;I8zQ{Hv|;HFIhzox;0cE z+&4^N<0{I3?$B-?K$ivv;CT|A`{1mHv2&(@y!!&&--8;)e*gNlBpk^~ICQrc*!-W_ zvMhsiM02K~)I{3^*C@1#yu9_lywDOCKY1U8GPtX|`$hZY`cj(w0Un;a%KIfH-{M-~ z(Z|e&m@dJiSSp4814ON32|s{QcIVpMLyv8o2~z-2KakLD9Z?Ah5f&_tFFv2)mN(V3 zN-LzKZf_2`dw8Isz!V&p0?|t7tW3J>OYQS}vD37PHI2;QXP3XyZ`m?@6(3|`c=+1< zR~3{b2&q{5ruSICgL$`#QC=l=ocN{T>IUlxs+GDY)puGZXi$ZQgn+7nho^^?8;VY7 zqX7!EOuRyBqvmk7V$X9#4V zKJuWQ9#~3ymFjfRm@^!}?h~x+1ZoDZ31;E=UH<0mZ%E%ON0vt%?GR*2iH4RH`WQsEh?!st3-%bdY=)+DP+4OC_RAgJA!^G-YU4AEyxCKD)ppTx(N0i`#Pom<)mhMFlytw)O${^#gPo+S*N@KR>*7+VBDc z|1H|wZNR~+K?y*l3lh-49RXzD^5TK-e^8#N4>dq#t#YvO_8dLf`5!W@A-wRUmEVX_4s0%9bCXY`em5;tu1B@nuQbl!$)8Jz` z!A&cCzWMIxvn_N(KbiUFz*=Y#dkbct&3z&J@l2EgR8=AndzkE%Ji| z5OUx+j|$o?Ver}bA&+Np9j?fs?34C!n5nrhecR>9_3}8%eRcIZgbBkCZ@#tBbavXf zMH6p}BL*nf`p>M`GWpdqVWT?W^50B_Fl}&@qLTb?7_c3Zj3Gxy#;+_U;l5M zYoWf(=`Nw3RjWcZ+bgYN+UwFp1r3-8Ha3X3X_;cec!E>xG}f(3NXrB&o-tTFK(PMe zMP1yUF3ei$-w6M|;x;==H}o~00edRth~<}ac&0$ z172UYPgxrv3F459eX^}^M%rR znO^wDT98`%68dXYkwg-2G=?V{bPm))_%GxIOu(37AH(&W9-igVy zL&uR7hEP?mm(}pi)be(dN8eS{aOG62DoNpRiK~67T++^ zb|J2rs00Lw9h7+?nlT)|ctK%;4@(U8M5IFnmkZcny1Ji$-S)KPem*^##4~aTCZ+I{ zhAF4*DdgY$LYB{OG!etYmY{E*zt+PkqRL9BGrpFmYhXYQ7Q@izm#1;YG_D{r=fP@@%Q9F z-hvg(uEwMCNf?Yr59WNGNX9oF`q=Tw;9qbkP!kr50V}<^;G7P)^xUF$`qVr?~oET z{qEcqkStX6j58%9CA*v~>AsUH7#lPH31)%1nH0z6P6DPWMk!H>?Mq-K+0FCZefk2s z3zN(x;i>ZQ!&3}GTpe~XPgVbC_~Io2@I`otuY}RI$S&!r&OA01J*;3!djZ>6b6b`D z4P7eVB`){%#z!$i)nyu&O2Pqp=ofhvz0bJg>PJ#8H2v0j6q$4v7=F$oFV zHU0>D5cdCovE+kuSW64mh8HCq2fRSvZYw_Z^5H}7ybAw4(e&JY2YJo+F42ekf_dxV z?jFvsRaWyREsq@=|KQrVq{f41tOkx!Tujv1OlG`%u!xe~gD`k_%E-bJ9~P#2=FEX8 zO~9&%U~h`zJ~;q@fM-zp05>=GA3L=0B_&^;_^ETpnJV?7kQxbeXsr7CM)bSJD7h-v zV&;cUruOA4f}U(eB>%pDqB?hOY9XI_jB#e-mmbDPQH&_lNeEUs-J{H8@ENui6tr&6 z>!)m4r_Z^%W>=xZZ+QSSnXV~(Kwv(0xhaaty4ljqh_wZ>P2^~Q-c1>c$8FE{tpucB zA!Yys^_LwEZ5>EwCT60+r{bnm!k77>UY^SOWjmHrW6znCMMn>)UKRzH>CGG){<8hG=<7DS%#O1au;j`*lK!`z*0bQkW<$vbfL|1Re zyA^U&YB7pDs;=AyMmwKSs{WA<2l1p9M2w>VvAIQ|@w^TCf6{UsiCU=>N1;l@wv>d? z&I2FoT-H)dK5>!~%8_WJwNA%#`sty&zmW>t*nf8MO@Gz7OksaCCwdSq@o&Y@60U6f zN50G~{f7(C(+ZAgqUR5($ZB;82g{?!l3MWCHkMo5s;~9F*!cS%S)}{GJ53(2Q`*F4 zhK9=4$KA7GZa>Euv5A4?J29{E z88;^S?k7ebj73o)@J5!$w^XAYd+x1U3vM!*27R5KH9Ln;OG36YHZy~{1h!3e!pWKz z1Ox81zLmFreFZl&a#e(=i&_@MBZM@v*nSpbs2*PC2-A*^E;wJibL6;DSy+Wu1CqO} z?d4qWSvpB-b<%AGhDOu-pA&O$zC9}M;uLNgF_L-f^9SAX>7vBpB2QhEpTrKDww zHaiybdgU#cD77=Nv9gw2pQKx5pfAS=3e5dTMmP^j;sE2I#ah8=8D(!c<@*}j8ztk$ zj&g?YUW11fk>^cm;X^xqh5PPP3`(?hRwRUqq$@lYz1O6k=^sG_0;PWHj6FxI8=6E> z>O@L7#&B~hKR+ehKBNKaR31(4Ue7pCT{JAFCnjq9J+bV7QgHPFQ$yhnH89-M(O_Xv z39Oz_e)QH`AI<=#sDrU97-0njz~ca2T^O#^IRUr}?PFsT5ELXfGr_^bSC3*egYE_7 zLd$VQApqWWVqrMdoV7XWg4IuIpFf{6U&#P*Sd?lCiGgk8s@abUZqMeZJ6M0smUx=) zH#Roj7;snHg%9Har-8x<`;ZS@+x67-pdQ=H^M@cS%LD(yI%# zcVQ-pvY1fb(jth#5FcL%t1-|BYt^Wnq|Q7qQ&fD5rv6(;{tHWzlzeT8Xxg~&ZfDPf zd~5R)*giYZRAtQC!)DeI_`&z@aq;nF1d)b>B^ub^qr2FgcjIrD#}Q8QJ@ug`e6kk< zld8BlUPGmxn~%)z|C`stq*au?c|9FB1Dv+{IeJf-Sd)=K%KtwkP?4Iijq*}K(1L0b zWu0+}hxng!M3P1}oZcFaOTkbRUae?YMx6>PI%Iv;_7Z^T;Re=66EEqr>RfU%91c;w)Opan@GAzh#$=diwT(l4+z9=#{Xluxm;8wvz)MSXlqb<&D_H%bd%l8`Mn zHpx8egwTcXpce6(&*ly7d5$MWO{Xo7ue_gTdQiJKH@BCK?FTRxqbKMsdiC!JZSWTu z`s@diFe(Wa#VqQ`%t?C+Dk@Tf2zBDqLvg8CTiA_B{IuSr68Y-%OzQ5H&40v^2G5_> zj|)&+Y{KpqGa&7(W;Bx#psk9&B37)l7kM_Gs(BT`RzXC25JJa}Ul^A2w z$dRXGa?Vb^mG$d>XE40b#?S%~qfO&js0rE*tmW#iz%8;=pX= zIqw$9dZuQ4MaS^hNXwpu(uWOWY+yDXIr7mWqp1EqIT}*B?FG=S%`ZZvX00z3OHM-o zUL2By0s8dA^V2@myeI7r!qY6t^GBhh*T_D65uh7w$8$g@9$COIaaVF{f3O`>A{XU9 z`2*JExMtMb;lVS5kZYVg+#91;kD{j~z%%?qGlQa8+3DT+t~16XyjD~c6db+=JLs(C z+!w&Dv5S`Dyg=o<5SjGo(sMg=EGVO--8gXfW6WrL3Zt)j(`OwHp;e}~Zgv<~R|MFi z;YPDW;@2{frxt2_VLh=Lu}C0})}@yrbU--8w+Bct#-^tiq`0^OV)-?!D5Er0zVhBO zNdHTO0}XAO{+NL2<(SH6-bF_>1RO-u=Ls4#a_>_(Nny6s$zpwFHZVwj{T!#a7LG~L z@Ae#m9l&`#x5y~IKWi<*6kBdJC((`dL@d8s>Tnj8Zv351lJh<$EF7NT?$4Jv0p7@! z{WMHLSK>3zr&2K)8YQ|>{C#gJ1Nc6XiL82nm3iES#9i+X-^mQk=$ugj}jmB^_W*c`GID}xwOAZH1XecI{vNo6g>(DcJ`A4-b~2L z1Zx!)yncGeL`%}amk$ozMZyabmiE*5LfIjzIjnj!9WV@PMnqHMYa1;dJ<5f9g?~g- zhz=6`&_e(VLqc{_kOAig8?vx4Hh7Agj?!KK06-QDMXw+GvW?v<+opj5bcuZ9FI`<{ zk$0(o1VbsJBa5mk#;4#8>`--#D{hl=Ea{2uo62=oN*3beOh!(HK+Fbe0!&5dgOxGO z1nL9&0-VolYtyo_S{4+?i>etKP6m=CL2U}cE_u2$9*x*3;${hpO;B=p+>3iCMQ|6oIicK%1`nMR)1HFB0&qXZ-}`i&2z5~)zsf7E1Bf_7vG zqTB;^i^)m4{t>WVG~Tj8vXt*|2DKcBlT7cF(Sb=xOP|!zLSY^8;}JxDB4c*F^NY%$ zL187DWx*3yOGAUC^B0jn8KCZ28sjN+L3msfjf0ppn%o2Sn8V{Fm>vt-i|dOrz64RM zI%(-IURb2@qE&5fY>an3`rIEnu?28l8~5u3o<>Dz#s$`61uwl{fw=&iXKE-d<+0tNz4D6b1!vSe7tzswswISFbg*; zCR-;{SIlU=@ize~Ipn_wzS7e?=0uE_imXqi9-3IwF&x5{kzSX8-oCNeJFbpccJW|#3tSV>=*Nc`VthdfYb5ZV&lVV@hBO9O(q|MWAB@K zr??xDsM1}3^uxMIPDJD@YJ~CemBtRq%g{dnqP6Dnf-j13CeP{{99&>SfnZ;M8Xxq3 z=2io$4!U&X$g>@O|Hk+-eiaG1A+H+}=iQ2Dy(Xkl;f=~> z8)v$@xZuBjfldOP@JAin_#Q7xTlzncKZtii1`x2Xa{_NmQ!4(Ao>|BMhRW7#n#6kL ziX8_rU(uTAiE31}sunv>EKs)-{&j#;GIY zv1E@eBQH-B{HPEgNb|(%e%mUdB?M;)_yc6S@bHyV0y$awavCmiuls9dfCbJw0Yujk zgX@elJ1ebhl|cZ&btx=SO1_G<(;5F`xywAMpb@86=-~T}wF!C2vt}H$hHSSS5IK7u zhdYKZA*Fi&4Vu{oUq);(cn_A2IpZFgjSqw{V&SznZ#fpo{M-3^*TBp~DrVmeV} z*$6PYDYXl3)x(;thbQI*CU@bWe&iD%4i;$q2aww%N) zYyxb( zhmBrcYwGJ)tFXLs5hx3MQACxNqF8TZEFYQQVemOmqgP3~<-f{Y1`i_qV?@Wqq+xKU z_FyRQzr8g{9Rz{>-a7>@8ketJFNt+w^^aXBoF@!nT&{H1B-35HSV+Ue>FjdaY zjj+BRqt0D(FSaET<0?G(&_BxmojeJ!3FL#OCYY=|17H04^Q}bVR*kThJ9q9t%JL{K zZofvaotRJJo#0^5wC@|FA4n5YH{T|qY4Yx&(}DeXV{)Qger%#akf;`D<${1^kp0xD zAqaFto0&Mt2K4j1Z(kfn|!2pKd2&0?s+^xNRO+M~b;r-%uVyU64gp8ZeM!q5iKib#VsFWU^`F#v4wa$n5Oc}Ec_zw0)*tIm<$d{Lyq?8$S#XQq6imItNP~Jdb^y z+pso0R5z9OJC;^%E>lVu6;0$Fq2TPh6B^o7SC{R=PlUGYZW0}38vN3yc5FY7hbHDW#2n~t%Ak#Lf>G|{kw5Q`7i^;gIX#|%A9|HNGjm?H~b+& z4Ar)sh9*aOFK&wdiI;#6Jtw}JnJ2ZIL5S4CV%2lJBmN=GyOJm;mr+)$D%_AW^{l6dS-24OaYhM}RT`@UX zKDO?ik|)X{3&(}4qjzQ;ZsD)s1BeMx$tu~$_PpD*uxM#P_&%kWOz`zpS1*4)viSpH ze~DN24d3eT%FfJ!*J$d9?=R{{{6haeO0o)JlT5bxzwCDruLtoH;y;YZHYuL}{ucuY zQLXy_|F0xw^7_##-3v9N85={kRaMo{EX`wyijPqRum4>cUqBfnlv{GG6*#1eoxKy*y*0##>JIwwe{I^MOz*>x9;~&|K2co^HH}w zB*U`4nsnKe^54~(9-`em)iyuVt|v<#C7Dy%)~GS#QZJj{J8-A)!r^$wkdUxG(phTj z9lkCcR7)PR1AFVZ*Ya-im7BBHJ&TodB6@D1^>M$-q9p$SJc?{zYq?KinXUE&#F>D; z*8BcgU1?Zf6)^hq@eVur9g%%#oXG%7LWLUCg7$F*>#LOf><;+H0>FAln@kx)qj2iV_`!56%4mSINTHOU&w z0GoY1$J=e|+KM&m1ds!WpArBXA|T+VnaO)|`W}j0k~Ob>HX^?)>;g(`G=2b=rbE#~ z;e{YH@LRa)AZ0y&A#i^4^4G0zE-D_3!q1g@#TI9~T)hf+?d6|8Z(O^^v~M4LXMw$e zi#h%M`}?cIl?d;f0VAsKed)iuH@SKDcH|@1{9D4)L&3_qXcr+kbM?om50nV~P^*|X zYF11o$+m6ldsWa3kL|bR->t2BeP9g{-?@o*Q`zFH)_z?@1!+uDQqM8mGw}fv0Z%^B1d=VB39}PfZa?ZvT4W^| z7f0hg@4x+t?h>S6RNQEk0Ij||2K6J%Ed;=B%F2Scj}-%O#BdJu_ZLIkz2CUlEhiv= zbQetf)l^jUsPaC66AX$g+AC;8Vzq1`B5-tMr==Bw@HpcGIe|d<)D#BzE9SzbXIyIE zMm3J`ai2cDF!!WB@~}+2$JMVlz;c9qa6iCah-@$9l@fXG>FJ%?7)4__*t|S?8dEDw z#^d6S!4m_+?N=QwA3p*>KCfo?Pd1Lw2p+9RLZF~!s=*QuqQg7zPvI?t-7fS7(0puU zAl3Q$BuL9OaGdXzIjowji%>=zYwH&bxmt44(tQXABytS9a-ZW96FzCE50N~%$Rek8 zB3f6mB56A)bn^1Qf0i9S+O1%jpFH%y4-blTUJ^#>u;t0=2)Mn2=_@9k7cQ)VC;=>A zQcMilmiO=IJO2W$4c!%8I952;0KQsqum+x9pxkH?F%rSUt{Sp8+4Uhr2#8TOf}tUs ztT8ton#`O9qFS=HmOdN^6n+`HdfXmcTU!l{dKeyLj2u2!=oDl#i!=|EwCELUN5CEc ziz&GJE28Z&lfm{;Dw;_~{8BSF$=C?*%cJ?U)f8A$u#xb71!jec=9Fj{2 zYutNe5Vz0oer;Cr(G@Mp1xw3{sBPP}f#U;`08(2x5w1fZeAB@VQ5e)oyd>;t$INWs z%<|qN>ei0Qn(XV9O{8gYxv#De186!W?SnC{8S-H$)9s`hXe)D*IfQV{M>}47ZY;9 z+X<=~0*+jscF#`zu9bg(;K|DH`*#@XA1jXB^qbaEK3@~k+7BS2Gwme%{`bBca=ey; z0CdM$oRmjrXB};9o*O5PeEr(?*3mp)sk2sqmI4UFX9|^hL_VZVG^gQ={f4|@Byw2;q&a3OWM&o9!-UWSHdho#!r4dZL zX#VtL#~okuD`zu>BUF!wjt>OHwL{)^vUaTRWJ}n8u!)+ zaR50EOi*WHWaRGw-rpLwIyuFyEulJ+mzNL`p_`al%J`Q=?b1*JMd8|aaC}$=-&|PG z@7BVwZlecQuRs$u$_RHM;wwkME~_y0OIr*t9a|QDIc59Z8D~8zSG}Xxq;Pp$G>_%} zsF#h9MA33hQ}@Qj#&#n9GM{tOLJ3BVjPaV^(h}`bqZKReMMteyD2`fJ09TUKu%y=9 zY?ZMwdj2Hz?ew8OAFx>XKv9~mn7GJ$jm7KWrwbNXN-gT+ayWt!wOC7k`XZGb>_VGb z<=bNYj+qJR&2(lZxvHor`ad+!x#@15+KG=do3(ED4gx&%8MaomV^&vtP;+lRq9goz zw}}&)L=h(b=U2oId?kNCWh!q&?Mq3Jy9pn}Fr~s;&VZp;6;CYMK%YFCo_FuQJRa>_ zn>fJheckqx(=4bJu0VvjdP0=N1VaO}=XCRRepAE-~d%L4`q-wNJ zXbGQOBO#yAQ9)~Y3#UTdjwG}*dj`SOXfDk_O2(?}n$y0_HM zIQ-9NNlSW(a%1dY24udBx_oG$;kn|!^4#>$RMvXYV4bn;?YyOnXG_qmjE2!LG1WT5 zPmh*xPxDeAKMpJmld2GbJiT)}kaYgg3G2HahKWcJMvV?>j4u7dzpjP?BawSesS(U# z<=f}OnH0iC-XeW8 zp1uB20R8qz9XSpe1kv1B9v;IoaRUj+A|*n5lP~87lY<16j^qjQ@~yQ+$i{?0g?}F% zukLZ4RYMaM3a-{Mb5RA-fwQ#2{JVWmVU^qwlk{p6-#gERnT1r0&KNu%Hd9TFGCi># z{#Dzz{n@!WFWJkXJz>jv&6qwtFQFshA!Ry*`O}jE(=lMD}Aiet^G3 z=uB+?w;HS%K3KOgqujDbQYa05IAsWg@u@5j7uy~-z5zOF^LpwxdHKrgMyLNx3m^|Z zgA>A35b-xm2`2B1(L%6^ugSnX~0T-5QwH$ZwWu6(lTFAuZsG)I|EKJV1{)Z1+>P{aW$6{Kh zzLz>@pd)2?xJwoP$wI6g*|BkJMfW^4H~Jl5^4NY?fB8*P^4-Ue%*?QoeU;%aG~>RO zxg|B0yLHccn55TOS*DvVKOG^-4f(Y%c-^7&x#IimxS zJSEm)gt|yi4;QT%CuU&4=p%@QIcFAYZE12m^LH-H+d2e^396>&RwHHvUzk5xZm)L7 z!Ss$`qy48e=HzKK=0dY+ZR^^B1(g%bK3=#i%_&o-UW<+8k>d`}?Sd!eHMNh_uf4bj zg>^CnaA8(8Scf#JMD>g8(X04JvKCoE1)8tnlKKoBb)4)FgAPtDqbWRdupr;7^r_@$ z#gW=Rx4FcUL_10b<@x#VYidRe9XfRI;B9zE$a3SQwp#u!*l_RIAvbX%kQo^orG7?7 zLCq6HWHI7jynH!^#GiB>xp$)6>G~DB0|Lxn?7&6ep+rOC%<0nyr8R_^6pD(m=)rY# z${#+wSZZ50g|ZU$YRpwQ^ANJk2wi3{tkxYZF*}A)&?r!avqb;u9qKA)6N5+YOVf(A zULNkd@W~US6}p!%t8N~AXv|_Qd-=UHspDW7)p%=Dmfet|EjO-Tr;N_)<>zfcS)|lA zl+@TbZ#IQ7EzH5sxWvbcF7MaMgZN~}8NCf-&vm?HdLL#KwUSeWtElNOtbi$#Cy$dw zJW)}RyDE&VEwOL%Z=@F{ODbp=EPh&iap9pC&&uYoD-mwem2jKIM5#-rBbnY2qbc>( z*UV`mulgbk7yoY4Pdog)SL7D)9{wI+R=U@QF3g=Ylv7$6Wk{x73z>Ex z?KX~hio_O;(e{}=`d4JC5rv9p!o&TcRufFgnUIE2q)JQk)z!U+mzJSH*GBpPw<9iQbAY&-yK+gPBH+{CuMc zk_px8mmZDD>r9RKPy>dwx1TIQzH@N&tYz*)LUVo(KnXE$$Qa=Uxe+YJ%6{VHr~G6z zC2iYVvE;F5MsbQx4EI@8dzl0VV)@n#snr}*R#tfF&RF-LSJKdVjnB``xu|Y9JPS2p z>i4G#@i*tJV%YCl!@k-i00l`mZjMrOI9~n05im`+^!V}flaBm#BrL4Hp`nX+Zw_nF zkdvz-nw{lYWRuy8wjxL; zdj)r`U%$%K^z`}jWVwPWlHth`;}^P(jb@`7oY$NqwDL`U^5DUGhzY$%m7j~fdQ_w2 zrZ500j#wJvg_J47ud^Nf&(MB?GW?{nby@ph7mq@{{I^w~X#jh0!-CN-$R3aC^BWkT z1=~T*&(E*x`_~U@Ceg}DO4^W1 zj6`=?ql&YHb?eprx}B1ebW)(IU zn?_aV)6FvO8d5F31->e00~@#pl+-rmoZo71|74hlz3mJ<%KU$JDW^3{7U64c#leCW z0f2~J`}NcJ(i+M&FA2bvzIx z7teA$IAVGvU0#ji0!q%uS(Iam*O4O(bXUH*tibPQm#^%*uiwp9F99`j93nWUcO)Z7 z(hE6y+{@Dsvr}Wg|B*5ZLnkXY#~B`2z{Tw%l{S{mMza++>8 z;c2lmFh#H|GLLbO-ti{Ug_>vUJlUhn|A`N|Kk39%>idCu4_?(n*C`g{tFO-(J!*BW z*B>)Omwx*yCVcd+xIMjO%qq#esJM+8BX}v&C5*3BiiO{gw$HQ5y!NcInPaC=nFFq8 zkH-`a%Riaor0i6^LwbBFb-{TTY6@Z?5r&(X{=XSw;i-3(n+M(I90eqpwgB|)5s_o(bIxu#P}mP-r_Hq8Hwpn}%31+qs;l1W$C#U)1D&Z^H0GBufX zIht+T{n>8P#3ynI4c~TEiGd@gMVuH^&mzTcDA6c`^joe83<5+4XkGG5_*`bz=gyXB zS{R(0!txniz+uHd(g#JFk)(Y>I=Onxw>IzpKZQK=ozVSi*g?P1i7L%It^T>};immY zbaiOX4E0YR=D18_)ebj{36c^km(IUd!0gOkiaeoNF@qbb?2wzBwA zoOF|@;X??+51u$N%v{HyTe*{X z)8qZ$N5S2%M;jU#AY&)dtgWr3VT_Z96Vpr6ilmAr=TIk-&4Z)&&<^MM>nZuYOCs9T^a$l591W7_L9b?w1UU|$p zn;=QAGv$AdT$dpkC>d~BadoDjH{H7>+Cu3kPNnC)-t}eP5@Kf(OB(x`tOz(cV_*!l zf)?kv<%ShL-0W=YA>DcYpY>kTTYwv!jQ$@lu@@^@P551a(V>_&g~7osJFB`l_H}0F zL}o_fLCV-2s9-s{y`>x0t((r&u5}OhMHPmtyE`xp&uEHoQ$>%^{IDT3zf><gU3W8i`rUxCoc`U9QC+;R=8rz%IsVmW z?07$E;)#%u)sQ(?a3Ourla?^m=qD`4ZU2BX!h z$DddNtH%-M?z43Jb`|q2hjKpj@AZ4!!9fSbJG_cZO33}PaualOU}j2lb9MFFymkq# zM6hW;CiOjAEOv(|z~9Lym^!j*S*A6*5q42f%OT4>|H|yC)nsEMwp+A#cK4ms4W$y@ z{gY^yguvZ(zifK3iU0X=L=PCZe_jhkeY+tZG2%aY>$RTZkN0O{_n_JOfUkJ?p|7SW zzap_m?7hsMX1~Xe$?fMeO*clVQ)llLgnpZg{`HF^lwq3w`T2kP$^VTn`5(S@nu?o9 zBz-D8JOiaQK5&S(MyN}PYVv^Em={q4U|_hGrY2BHiwev9KD|X+wASX4hoP~ej04?K zTUn_>N&t&KKa+oc&Vj|Oc3~EjkgYjw-Mm@w9K}*EIwppMv8J(6XM42)a3EN^e_zcJ z3TF&%vBfT5mY?58Or&*|o&GLJnbDU9dSbgH($j^;LzWJ@+JXK1tGKy|a_8g7`jK&} z@asHt?B#ipN==^pk;;*by4%$Y7klnHFNe;P6seX4k&3$pkz5unAwn-+_{95TgVS4V zZlB=2F? zRAd?!9qd2a%^QjnF4`{A6BA$fk?TeK!&EU9x3Qw!izt<3w7h{os`O0fM$8pTyp^;9 zZza*=qlo@9gwGj5aS#YL5Rl2U19ZyDl2IYk;Mk=+Lk=@iT~{kGg)7+}zt;XI^pbc^vBU1pPp3SA2Of_sa+Z}LzJ z3k!eg-8)Jvq!p_9NBPgra`5HAVIxG%8$if<@cfs}HVb{YpO)x>7xwk-FY-PH*o3UZ z|76P+`ju`LuCwe-Cca8qv7FY$ar5_q*0AGrtGMm;i_F0s0GpiT6B>C*T`$=7*d@at zj57h8e)&&9I{Fi4=;?`UdbKxyoUey92i7YcR*-1LtFM_&j1t@RQ?0+$RMYD=J$80N z&jC!g6rwvG7fE82^aax@?);6|`n|nm4jM3Mf*V5>X5pbxd*8;3a@7l0GGOO4*)yOM z{)50l+DncqX??#(gk0t0LmED9_{f)CHVkEfRn^p(k|qxsGXAJOmk5AfS0n0iZ#FYt zha9c`H0;_R16%EtCp6g@P)me}d<#KOOY2Cs+cdGd4^8mAf)q8>^MGMw!sfilzC+|k zsH%%gmIB1LWAmt-I|XB|9mVU6h~-5f;`-N`QOoXyH-@ zUAyRbZ&we*#t>b^2arCz^MHW^De08m^^Ctjx77JblPBBbf6MNL-3ty3EFrWAQPb!9 z7h*f5#vkOn`vwgb9qidrACJ;9_FPMvt+ZF0Le`Tf!l-iMkhRy_-t#lXL< z>|DOv_uWXZX@h`AkOvA1TZB>Zq4dg!@2DOr`--w1_iccLw5WLnEFQ@G?AHRae~Fbi zj(-~ZQY6w7YAj}EOK|F)>ktax4`zbg-mfDqis( z*uXAhBIe_4Thg+0m&$!9DLa_V)u%PkuA+yiLU{}2r1|>> zJju=$HeksyS0X(8;FV=zv35bovo#?iX6-{h!*qv z{3?394xSiWHp##ZU#qhnS1hN+<&JwTg?a%N;yB5rY7w-XOm1y>a!g>t`NABJuG_ZJ z@6LYk(e}p^*tflTx)4Q%2xS-{4|1!?HK9i<-oG=8BI8skOaur{Py`+A?W2S1@? zQCcLjD@)x0ClDAEq`*vR1%>UHku)`Vb$u7Ohyl{0L?edKGRi6IO<;fl;=9qCa9FFg zm|p*qRZY_OC{wi$l=v5VXdaaFKLRWNArAO&LLi%Fl*_}FENbAh=zs(wXlap+@HeNA zAKy@u8?nGO<(vSBQU{KnIYRy9`FGIzRiC|h>@OOf@atZ?y0JK6kAiAsD{YDBv48Vx zTPLpBz`L@~x?uO^5PI4+>?_acG!+XIR3D$vr@{#IeC`HZ#nc5sDX<6Iq!<2tw3a-w)_C4(+AYs-WZfPdko& zC46J+lgn9+i5F}?N;Xm*N-p=iiv=cCESgV+XwmeW08MRtC`MK1gy-D&h7=yU&scG1 zH@ik1VCKCfO#K1n`vQjQPPF##RFj}%BwoRTT!v^2A@m!hUR?3dpJOkrDq*Y8W5j)C zF~k7})Lq^^LWqJdgb+0Tb)h~~r3DWJ;n2>}{A!?}R?Zj|ZmDD*sS_FIoyqA=Cg$b} zr?T!g55}~Cm9SL&!f+TWf>>Djaw0V5z^kI_e#E^p!jPsWcO3Caz@t{Ht?l}R!GwYa zrtzruxEXquX3yrQ_R1nT(JmP=F#fKixUoCV*b03J4!*fo2fzhk4}xGe>dV*OTo!l= z`xMa%*TTDWtS@r7_Ju2??$d2V3 zDwLX`Wf<14mzd09Pb4-_9aMD+@k4m=V%6BeG~Xg=2r7t*i}M2)`}+7m!c$-*YHkzC zvtipiqGDrxQT_?q3|?f$9GgYf{#rUZ)?4m{r5-n+X$gT5Po9+5{6Msd-NX}1)a))e zhcPRhqd)WD$d}MZ45Rw+AsKiB+;ND#mgRdP2&U8E%#2IiQz2ULrdq|4xUnr> z7HJl4Z=6GBIzNuPYYOFj?Zk-!qza`wJwzf){k|g6!YaO>f!}6h#dUaVY}SiPo@lE>Ct2&&bHwv{5_UpEKsUs=Y$7 z1SitYY(wukcflgYw@Eb$OT+1Mr~9?w^~A%O=In5@jna)lg{*RWrH2dkz*Mk5Zriqv zjl}uWeYU=qjLEm4vQ_<)zbP-Ton>oceT_9ZBo9>T=C}%8b00dadw=_Uc`~tX^alzV z=*Vb*NazHy`GckKWK@TjCX%ww)_wz3o!$VJa31Nr8 zODc2VVrE)z$Ce74qm(sLxbFmAp`?Mp4Ve~)wYTG{PWdL3u6n9=&(E<+EJ*t(jMWvy z3}0$%8Var-tF7Gyp+;`Fv0i@gubfu-t(6}?F4hBbd@suAa;Jhq0lur=+26Jg!M4UA zkwuxvhQcH1&J@J2ys z!f2(!osDUW^j2S4R&YtHhv-fZG%lj?58YiTy}NJH>G{imv5|0_q$V*ZP1dYQP|CJD zzhj@m`^Pd2Jh*C%+s?Z3H*`_Po5iW^hNB_Bo2Fn=`&=lS)fRqjX<1Y2|MJgQ65n_X zv((gFLJ>493?B1jCiPy=w%b$frm3hSfCY4NtWa1U;`A3@3s3Ywx@ZDQlGNisE|tJvk;< z_ky_%Q6~}2(R?`g=%q_?MP1yYn|F46y-eqg1b<6)bUTw=&-H$IRsKbNzg5+!#ZK+g_Fa*=|^omX=mVj5V2Zys~&O~`wI7v0oW@#K5zZ9u=$>0Xs94%^%)6Ru8^!33gIID_2rVAsV z5k`y6g}FO7jri~528+>D}E59-qlk1LiRe6u}) zros|Gk`A?GF_D{&!TLTTn+?T9Yh@u$YMYjk2U4e|f*tXy;PGSyh1CilOOur)7>9vp zPs~=c#7)_tgPa+yg$ZXOaU*71#-*q+Z*=39J2_oRSdGs-ZieQg=xdJ7a(~VBxo0Zr z=Jcq^y`cWf%QE?bcznZK6MOF;Jz|WM)a99LW`BEjz50)J0MHSqQd~?=O_rGa^Yn46 z!>5kLUa6?5DPAJ&8)g~GuaE~AZ7#X7@vJ%YGgbu)rhK?`s^cAzvzrwKg~SLN5R%Kr z4M*D5^p3>~M5KMxbb5_7bPvg={}?#gC(Hp)mqf|%C2zD9CU*WVM3 zO0dR&e*IpUJ%65@o_^kaGuxtWcT=!^;^LMV#1;;6j&7<^f0myORdvZ3muzLt6p)|mEZChq3grbk1TyUoz|l{RVorkwO) zW?t&ZyC2q53nGKoRI6=i1|X6nzrGs`~N-eg{u_vF$)GnYQ`+wY*Y+j)WA z3wOi1R89*s>#|fB;Ix__zW0Om6@QxLli@7;C91sgQ&psAMfdg8ucz21DBlI4@_t=$ z0W6`9*{IA2x~NL?n{lF_e5JPU-?t)N($YfphmXy3jDG-#c-6$GwVvJ7iS&&!fXwV| zHek=G*`$rMF|W)KJrhi;8Jhj7vCd2 z>;82G30B^*m4gtg{nowIR9xTd&x~wisx4*Qt%d$g6>|jw;Vp2H)X_4_ zhUTYqJb3vslj|FogPSrfp($t}cM$tnRh49O|99KW z;H@P$_69JGY*vToQd6;Q%m|D1bwl|EtCs)3w%ClpADa~chvk8PQw<*2v#`S@$-z0~ z*0Qh1B=R_GH6$XmKPD{RX(X0YD3g_)UGS<)P{B~xo26y-p;6HD+&b>du!q8aSnGxj z;QTAdT2NHE^@Y~(rHmKTq9pn+9R7K2s@L?6FKM75h|Z+u&JzKs&OVbJ+MgUQB_(+j zPO7@u2C`2}I@$pql#(CKq0!ZG@`h(0SzY&wHol%xg)T0o_n9@FNVec6cwLqT&vnawI<(nA6zM1&b|Q9Taw?y!YRti z&IIS^MI-<_sCYq-1k_MEtdFd8DBzTTN;^^PUrBa3G6m)G$Cp%LAAj@tMw`LjjxPk* zxDv4k(x+plrIlyw&aYcKI+dYkC<~)Q>DOlNIhD4Dm7j&2u%Cv9_0{h+7Y`T95`nWT zjiv1bZkScZ*%2?C9ko?6*WLNBK0yWKm3yv0Ty$@&P<7e0vY)tkIb0?{{1tAJM~+m~ z*K3gw!r?P#9APzP&g?9FCSbZYP}jrrF)wmKv~xKAHt;%_T~6cepkIvhnCFKo!>6;Q z2tWWIjY~7U8)pu2>$L9JfP)9o#BO6C#MPA-i)9VS%n2ug&x+rV*+F*bFS*buhk|K5zA1mb5tbW`yfA8JjG`tKbe9O7~`KANyJa4ld+e{FER59ucM(*$`pkCd-981 zT3qv5TtnTiNvnG#pdFew#S%BHeMQyJenSvwOIY%Q@KEgBD@>3uFd!n6i|P%Pl#FaI zBL%elDojCS85&7PYx%aj8UK9aS-#a?>=WfsW+E1Z#SC=l#2DkYP_%f_KFoT8q_n!5 z{;9+=gxou`Sasma>NqRE?;DZHx5jx$pDH+b;J}M|b+*N}KQ_L%QCz%^~07hkZPCBvVWPb^PG%(82@Sl7J>C50e zbii>bi#qq4S{A=9&d&#QZb~~8(l3kb?Q_GWa&`Z z%3iqHk|fbT73( zCi}+NB4?+jAr(}jvr}IzzOMPwhSs{0`HBV;osRUfiZWtJG6%&K){4t!GB9=^M0Xli z@<;jKZ3r?J(kP^Y9kPCO|?or9e|@|%Fu7|(UkmBQyGtX%KUX#{37`fge(<; zJ7h^o-AMag=PO|Og=+RmC?~9vggQafZ>Jv-{UbiO!n=O`+R@*xQE!8jQ#xG*vaiy1 zCR1E$i^o3zp6Ysd{~jXmU%Q!78yh$T?5InUwwyAMS8Gl^pggQe0sR2$daKAxH1q>vu|QqtpkBcIhDG1`6&Iysy}o^t55q$s60O zzY*OmQ(UV6=brBFYJ85!U+AC`9Xts7{}b$Fcy9xix(`@i<@Wj`~LwX Ct3Rm# literal 152363 zcmcG$cR1F4|39uth>TQ7B_R=+*(FJ`QrVmAkyTby60$DIO1Mf!$=ku|iZ$D+lOM6M_Nr{Mv_Fk5iRv{wV zb&iN=hdIf1{GW>lb|&Lrdv3{UI1mvX_96VUEqHMDCK1t5qRZ0fuRA}V`0l3tbT~?A z#`0hzGx>+h1LWJ8?NyIfUbwDIliZ-mKtnTXBBT&t(iLniXKXw)`FiXG(ZrJmvvP2x@3 z^UG%&7rTGm{Vo<-BaLrHc=418H#q(Ik%(xJ@2siQdY}n`s~JuXulFN=r*qRCGSKM~_cL#DeFb zFG(J;I>X_^0`!44HZ~52N$N%E10VT1i!s?yW+XP7X=`gQyKia}Z=d(qO>ZAxlr|3T z+EJ!oK6{XScbHs)%Il7;*F-}dlNEFPL=Kv%;dh<-mWV7hQ&m${o1AEQj$}^n?PlU( z4U-cP5fN#>T3(Egtt}Oquygz0S%b4pPDFj>6h|bwJ3B8+GYHvqzcX*y$<-7m={erU z#q2tsnrFf$=rCP8AEcP%Hdn(I=RQ|6`aCHyaj3h%!HCKJ&K*o&h-p;Uyw0?EUCb z&C>zP5=0DrtVCK4Fxyt?{|)w)P`!qb9j*+o`quGp~f|Bx%latf!+w_4|RaG)k@~Z0U zXKfvpHHwsfzaNj+U*#X_M@B}HQ&O&6xe`5o&g6o;eEnE!O6o7X;>6u@^YZf2)2HW~ zBzto#+b61b|NcF){f|2;99LFXU0qzLng{D5F3HFYi99c$J$O)EUH#y}gR;_rfq~2+ zW@*O>2a@QX_l`Yc@)6O|UAfj>zGlY8uk!Pq1$)04^S-|RrqjK;8jHxy&aU5e$&;_s(xxiBh;bb!PoBJb^=fXJ>g(&_5fT24izg-~UcP)eHfGT#AK#pz`KzFyV7x6g z`>dZV%Ns1_u*{{i%UxG-o4xM<%?>X_UOREGO>k7%v49FQA|vX7?bUAW6b5tm%EQ?rM==h zVDXIV&r-x3z3&qh5*N2sL40InakWWu%e}YsZeye1cTFxXF4Lx1fg{e`p*6<5os(U8 zLe}5jd2Fnn(Yt}0{Nw$u&>H^Eqv<+Dswyh)H$n!JvC3}0reeNc@Tq1=gzvGI};rSu_a2A za+;AI4}UMazNBoQfeDHC`@IZ;?z5E#R9?R;F76KB-(HZ=81wu&_PErA3;3b1sAznA ze9?8IHAU^NyZe*SP%hopt}ZQ2&9NUpLY_SNIXryez=2EBD=RBXk{ga#h|8D#ii*}4 zY>UrJ)18=Qpr<$H)i`(VoQcWM++ba+g_DAU!nJFm_|^_X^|;@r84owJZq{`?a@nqT z^=gH^k)B@f!h+)q$h)m(p`DBdf6s{E62Lh2R>pFMNwg4*0%NjN`2la z#W;z((>>zMwG9mo*qM?dgQv_5{_$Rl$g7WC&Hnh-zw{DHi#uFlfNhUw6u0>@Dm zD=W@Arqr52d*-?M`F@d<24PWA;+;Dk9Uay0pfas0a%G(HS!n7jzC-9T)&W8)_qgsQ zDYL&)c`eIgVPQc(eLdo|j)l3oK^G;Hm@-G0RU46Mt(v`I?j@4n`z9MTtDZ+msVP+} zFYED01h?L1TVAPv319eadxy%@Jv$!+1yQusGq#&bXk7F7L7U;-?fdEHinlZ~p<<1U z{8eKdA0MCl{7piFcXj^>R#rhlL5rMkKY#wT^<3*3+MDQpqMF~Eq$1Od|Jj}1yAi(l zlckAHzV;u4k1uB-)QN~^&otH4+IxC*)zt7aJr&g%@6e1@3)hk!!?HlKuNv9cOxGfr zB-}pLrv$J2kI3_NBSH-_4@Xm=;1um)I*ByCSwy)weDJiMM`pgBd3gzq9-`Vy`jPI6u zaSJbfef?s-jAOkt5m|A0c-PSs#>h!3|4O{1QU3F9)`dq#9-L>RvbMJFkFh|(KXmAj z^wYRF&yml^aO5`ESMIJY*;THXj>#zs|ML^s4T*36n4T{4*l=ZjBFlm%oMCg6mekLz z*zVhIulqMt?|j@@nv#-|m-l;_@?ZXX`zkIw+rhxVz}>yL^6d7uQE}GX&*D_OcI`^l zDGK*xp}u_c=81Ow#I%8@$9EF0>t5&molFxqzZW`jnsah-<;31QOh+dpt(lrzSom!< z2kqsp^mZ-Eaz#bOrC-0;UViza;=jMq)zvjkr$|P6 z`~7=?OmRL?_{G+j5B%;m%`+??X`voBOrBsZ7)zkdCik-@_h-2VN$j+Ry(N1AnK)=iZY zTZzQiQAx1RGvBY4BJ*;+a z&OSu;qpFJfe>DCbJ9ZQZdal&zP4$*dPfV;2McY2>RpX7CDEZZ6)Frt&8{FVypWHg; zxt8b27bTCvRCH&0XbI5ff9T~kQ(zRp=swsnmcR*U%s9EL%I@y#*ObI>Xlq;X9JE2# zUR$!B`m3nO?fm%)U?#RjUG2*JvdzVG>8H`rMK<3H%|A+{J^THd4Ps?wrK6>Fc6N@O z4hRg?DY|Wa<3^Y?^U6YtQo)886E~JZL}Yb&wqJSy7*qPvr2}+yiZfF~trNO#lL8WP zlAWi7hrFNNC+YQw#+p=7tp2$0EyusdEtrBavM;`(n^4Ng&e^*e^8&>e;kzX&M62H* zV}9)CSKzr-s+&GNH5C*PFhCzoNi;e!p^YlLa-?%6aQ`XQ3~`zGSv0acQ{87M@7ji-hGBY#7!opNu zJ7Q_@2>^H+8XBB2jg5_I>FGxfAHF+5Oi4;wTVMY+Ir%TSg#G*XiXE<}2Rf3jTQb() zANu^cyvgN!bxtPk`_m&MJW73CU0t2Ke|>xWm^8d(ZFMyq5SY;5aF}A>=;G7A&gF6ncwm3lD~rlxCm=gzR^m}4POhDMybO!9RO!IfR0ZP#93cP;TCZ3;4|2$f5a z9+;R2=-To2a)JssH~0M3Cn8_jRMl+WFH8C2JT?1>5>wySCr-rpzDargqN1_6{FMMd zf5zZ$ls((n5}K=KW+T{PzOpZrzqYky#k@UUQdAVJRjiz#0%XHn+t|qZ@=`F99gXQb z&B+fwlz!}jg5i^A{vC2`r4#^jj0KZ=zn6&Hk5w(df9yW-J@ZpsIci3c`>hs=z!;th zSiTKTOiV=OeA0Pz1s33!M*Ed``^J$WPOf>^yw<@LW0_iE(GXEK8PRpC3CfugVMMjN+Km z+JS=SaRj!Pl7f?O%zH?P_6Xs-vJz;2BG<7B-9Q5m{gf<#Y?~$=HfiRoN=m_sNynK5 z>%;-Se3_3Qx3sjxZs~YYS}MUCP1Mv~>@r^)cFM|3Jg$k7f`X3JdvkLWJrXeP#_cpm z0*mHEK!oMUSg*O7tN|XT=j8x)7r|4om+iU#k{jv zeDlbU9~Cm+vU#0l;zJH&?X}%xIOzcHX|C$)_l0w585$baiw<{LarzQIAY)mdLX1dW zOaEw8>LJ09BU_PT;**Sf<)10Dv%H*rl*K^4TQ$B%>^=@PY6k1erKQ_~9ul0K0oDCf zR6=`8DymQ*7Sp0PkKiQ-E zoHcGJ@%--UEnB~(88T|Qog<)t9! zXJl+_tYv!|Rmi!cpFVx!k^J~&4lpg(kP-JGV=^|DDLhb1{+?;cEUEW{n{$jMx}LK? zFD_Ao!Fe4afLeWnaz=d8v5Jc8sxn9JN|&wd&3U&zz1f;FdP(x-dnx<(G#^}QYidq% zb5DQtqp`?Y?GKhzR8Y9t{{zhzH(q11kV`99J-{hAD99wcH&7-XOLglO&mG^z^6Ud5 zqN35mOVYIeKl*Y2P8+B8Zym~qum??o{K*cVJx5IOm%6-;&d2_%#w_064NmGa&a<<# zO5%&x?d&ou^z+ea(8&ufpnd^;0m9@uqo`eym6g47M~KS%;ls$JU)%4W0~31VjIMI} z^ywk)|K|?)?MFYM0i9)GnIY0AzIv5*zd-x>@&V(UH&fL!UuI>guu$*ayB7@)AO$)G zSl(>7uU@9%t}A^FY~_6TJODdmfo-uhO-;dpfvIobK9x%V(7O`O>G$|?ZEdaL_vOyc z&c($=AP^c(1;YNyAerT9+Q%5An{F!Z294`V#OavvTlyXbc|O6x!57oH@5v>6G2@qh zh}!x3I!B3au&Io`0!J7%_9`DlFlbjL;LP8@4~y)J)C18vMPwD+^&!NyuWb3JfA7ZB zowAh%TO1t0K@({S~ZcqN4U%6)aM`R@Uw3!+sh$$_=Z*5WgSAx{~P#)QA!7mi`Zk*=ie4Cj$8|=B>Py6g20%ZNOm7X1*gSBBle;Q`0 zziqWh>YUizSi>p<0>`Z+#N^Lf}H#aT`{EK<#NdZa=&aY~Q}!%62yqkJ9&o3;Xx8 zggwaB~Lk-}h=u%hJ;czWFkJr->gG74l9C|8cpz8AZM`nJ8*Fp?mbU}tAPcC5mf z_r~?>@^20il^0*rmOpv&=@Y5+Qn{@Kr3K2Za|}W%&Sy6^e?4?fAY5aRZRxM_vh}$- z?y_~>E)QrGK93$Hc27V%kbW8)Ym+G{E?$zE8FDzM1n;*#Hy_v1$HaK3n`1+FOAeSvCYUQ+36!)ANgm(7jr zgTEIGFEA@Iu=?Ze=yfVNi+5K&z~e2W_u|p8l6b8t1mOp zZZrp1#Tb5E=|4hDMk>>u8twhpP{BnfxAIpR`^&by9bI(&BYZ+!8WJImOtLB#XU)-G zXCAu`7<7V}l9JMY14T#r08Mn{NjN$?(Y2IN=$r@Ut&$BNi6t5O$SCU=1`gz20O>uuu3~ukgz4#`O zOQ){(`QF|34%wDs^Wl&X=>w(TC1X>E;O8iLcg{{CRX`r9S!c0sCVhqU_WogZ_2>zu zpv&K-{MqkA?F1NaGdkG81i9w2K(=>qaMRZh-m{~NtM~73W45=mi~4$ezdCuxO-m@$>j1l)1DW_g#DfpAXNkNVuGO)Fh6X}hC;Pz8g6 zgVoq+2`62B4}Yra+Emdr0J2R-hCz**q=mH=ww7M;9BDz}x36=H?URiE{5%fBOVW~% zMtYt51GBQSAPIqP`Aaj$DCW7Z%th$Bnv*sV5e<1q9$Xz&8r|CLt>$+dJGr`)XL{l& z;qx>6FMi#jBwbNaL0}?zHs7JgHMg~~?jwnH8H(CkZ`yj7Y;0r1M|5xHr>SIo*+!Qi zy|HP_Z2!ZY7Q*i{9-<@*^ZM{3JjB7l;ls848Ra&VM~=i*<|}qgdt8!SJ9L>vuWNKl zQF3`($s!%s>P4IUn*(&CliO(C^V;(;nVJ9S^9~|T)^7 zG(*ksjEADP)e~0ZzTmc1PH|leI z-a$ze^rpC2n>nN&_R4gWJm}@q=<&g6Zh5&m|3CjVLf(XP$-yY!VUOZqP z4h3tdIpN&Nb0joGoBy&YbPZcr-TLmb%yZ&IbI~;Q6alZ^V#IZo-*<9!{My>ufRE7I zySF)1>C57{(UI2i(Im+P&&^?ty?Y4nO;3353v=kUb92lu>ms;=0|M%u&hl_?^btG$ znlk!UJWruhBzUSBf0;=B0Fc-%Su|jXNXK8Il|vvapfF`-4FzMtC;2N~Av-L-x@^Kq zv(X~iDM^oCx_5{t-JfFzk^Fya9NczveD~(f7}_Q{a(X-2&Ig}Ae}*+sUS2+{%L_(| z)dz2dtpIrI>A5v9Fd$&rHsdTdZ(>`vk=tz6oo%Y5t=+w`_UnqA-0Ire{M=ktc6Nc_ zFKzzu>FS) znb)zkjyhHc9Uh;U7?^byy)z{*C&w!(@>-U$UT;fICSHN-6i0G)==%?ojD)sR?nv1C z#Nq$hJ`hY>0J(|puMP(6w|B!g!wVP@T&>Jy-ef#t0dCG&JE_;#vn0nBSHXJl!j-}u z0I$+48vulB6Icq6>F>-oo$f9$Dh(ZM`j-kYzta5zzks*L*S86V5+ut4;Gvamq5$dR zW8C%hcD(z8o71AVCwQ8A*ckl!GfU1ssF8MZ`n~D(HwpZULY|!#_3wv2cPWTG%D;);QpZ)#2wx7rH zUc1(UQmm!b)f|6G@9yFae~;y!o}MpXzCdXJHr(U=9>P{`*~^y?2J1^pOGigXrC$71 z-48FQuu$an^>0Axs;X6YNyFrv<_0e3Xion8`2_MR9o^8+pUh!$DR16@Ie?hOzkEqe zLsPx>YPZ*qftpYP?t2x2k%QXjm9qTHOl_OIvxNO>LQdGPR!}E^m8kt*6&H)0 zJXup+ZTfQwz5?1*bw6}=|2mJ*Cr?n=H`j+H;j#7R+a3SSD|**&Kum*J3QfdH-^Jd3 zuFz>*F;=XzwRI6F4#K$qi&3}{pmR;)zn-HhtZcq{!@*2V>YZLZ_qeD?G*6O`Z~pU( z3)tJ7bPnbYmX@cY#kOLm-Pul`4zdI^Uf*1s23Zgk5D1JYX9%nUgU!j!rEbQ}ZwCr% z)>jER`zn2FuY}CGd*6Q&t|{^ig+wJ45uNydHXn$0?^gf$EGo)8WOa3U*?m5`7uy#~ zZO)nD@$tHw(*Y3?K!!yfN9V^?$-)i=Rwc!{)-t;Z{Tuxs66T{K@PFZT(rk}@pi*kU zk`@qMPN{~Pn#+()7Z(rD8$FXxBp542cY=NG9UK~xdX>1SeV#^{TV7#f%W^Fzpf?`M z7ibQQy3*3p5caLDQ`I?39flQ`mqVkpw6yl_-a#ck`;n&Y5_Iqf4<0Z{C>WPQ68@6~ zaPR2sG`C|H740fajt&l1l9Q8DPzaP~Z875?in=8$`w1Qt=eIw)LePQeMMGz+7;s|s zYuAjLy(P}~=GPdD+?mogGCEF`3gZIua+@_P!=6h}TAZCb)GhUcCcj;j+&D?#+ELM0 z&YuU@##h!aBot<{^SZiBDJ*veYxmDTv896sKm~;j&cYdn42}gT_jGI6^;K3)3O0Eo z=}hUi-Op=`RXD;RSU`G6QjEdnW|?JJv~sAasWC(6T^)%J2B|45EL?Ei_?T1zpTydl ztIK1iZ=0I4tw;zD4AHIGBU`gSe2zfTtd4b<^7d&NPnRr>%H}JX588+)tY_r5pwIr> ziDu3MZNm8yhm8n|+Yl`TeNfnhk070(&ZXw{JnOUC?R7q-wXmST&aLXoa)GqY=?G$C zVuv-h$j99Ok~TU)&2}0rudImw>UKb1u`eiw_(}lV%kCb~{iLL%R8*c+?z;;Q?!WO$ zS^^##Z2M%Kh4T$7w>me@ZEJe#>W%$jVG3V|)XH841ay-AUQ|tjFt9!3pQee&*5(GZ z8c0Utf&hGiv4Mf_JUMN&OZ@%)S2kyNNA>>EOQ35IzR0ax8OrP^l$2y-u$gjW-3aPq zU-|vEwl1#Am*I$;`#o;Hh%s=g`BHQ-D99HPu0Zc3-=qJ=U~bXDc-*$q3uxG2sf{ zUsYC~!5yL}e?)fRbn((R%eKAlckjBnx?-V9f0axtjMW2XTgepeT2ZSDM!^tYVu2Tz zpC9SFeaDVGt4l|jg7D0xB;7Wez*z3w8YZ! zCUGSt_!efp5~~~23TkOHOcMMB`O5BMw$&7?KAz`hU2r|OI3o$$+^4L}Q&EwE>T<#t z*z4*-`sTS(FCe=Z#e(r23Y2N%whjtp%4=(BxgZU{q(3lINKH>qNg6lL+uIvz16|2N zo2>{B;iWH;pvO*&jUv9aK97ELlsQ%P6ty3xZY9^*1GKd7Zcl0wEF|>X7QcttXnv}e z=UAw}mw9ew9&suCRP*BarAO1f5fbj~<6~dcZZvn<9(N{NG`I!)>BwnMB(^u%gc&bxQ~{s(FY z=kUvs!!uSpMN{@P4ZfqHA@wGB!JHf)#ur!p4{&F_>vT6G((+a0r2DnFsPX)93SU!L z#gS0-j1-#$*BBJukNI3P7%@Z6+$({Eb0iEP2*z;ME9> zT(p9B`QiokOHNKs=Jq+{5()}d;90-JC3m0rKKfk zbO00ku1ZUPL_6=}zc zBx-7EAZmrKoqB#;Bqm7w7G(9jn;&;_a)`tR&HjrogiFY{J+rOXO)+Qq(qphP; zouW6gUi5i49Cml{$`oLFIk*>J`rGXfYXphyD7p9rNnuud=2>tpi~Y z0N>$|7aVmrGcz+V_yP2W@{1Cr{-tilxfp(dbyu!Nu`ztT6xCFYlP5><@nd7WlC(55 z^Ywg99S3h%Sxq490K~&W?YC0y%oH3E69dt@VY3$KEEI(ss%l3^$KrT9?l%MZqu*~} zF`vDQn0UIUB>I$>+vz1s^w1HkSm@Zu$;d$JUjH_4xK5w;z@D`(-ah{k45#4y zUSbMH66bE?Wo+477kA#C=m?38ZOj#*Zz!5By&??((MUp(p!h{ zP_@l4z6{nO{!%c40yJ1b{89Dhn^-&GCcIEMte!4fL778}ia7-3Dpj{cL{ieT{zU1p zpK!6Vpk|iwWnJAK=in>I0>M?wK{0xlo6A8XGcKb_pMSTS!R6E|y5DDl03Sn3!C==zX0dH91+|X_J+~&l~*>If_7; z7I?F5ZMjI5T-NbfiGTgt9Mpt{pHMSZ<%vu-JsGe@oGit&Cc@i0nvlTK@V;8)9@YXtwyNnJb}&C(qASV6b50tRijK@op#}F8`~X{gli-+6$IUV= zqoRbfo{@>Sb9T;$-=3Wv+K>fX07Bt&MGD(?rsdhwU)_Hz0!RG4I}NG`5?(_JB?(D} zdZLX72$0oMLsFba?P56)BJ5bt2Wkk;Y$5544jMfWI&~p$fp%=%3f3&88>bO;>){Ptc zyO0^mySSuCXjee|Zy%~FDN&x{$aUVidp8{&-R|AHsjnIt#V=C#63zPn)&gR8E@8d7 zNWV3CZrip^LPA0sjQ9JVXPL9}MvYW`v(C7Bybewg5E!y2>o33dD5jSw8W;?WUiR=9 zm{RP@Ye|ax^0q$7d0~W#3Mg?;VR61oCEczMbUTp#d+=a;ZiDy)QDodpNZHiX1S>?h z#MLS7Llh%ZaPz0bpqZ486;{siKrGD@6r~|(XECLpruIWLKu&t?*EA(LIVT6lPdRtw9dnBf zZEU7cnBVHDBh}Q^mC|gsb9)66VaR}-9n#)7NrvM`K`}KxZfS1bY>`73?|@B!&;TKV z#{u#T-Uo(<$mJ=uw08+d3lx(83e-(a*@COP3LKJL_5!wP=;}6xGai3=hWqXBB;Es~ zPMG&_3LQmYBdwZ_+E5Ji8VB{rVGg@>^QpKhXJZ7 za2{y=r0ol|;jmsx1}<##Kg_!ULr7irFg(6|7%1%Ga{ewo#|D_QiN5?<@; z>$u37nOiO{1x~K@`9($0gq-Rx{7DMl^v~iYnEj#OOYgcNl7i!$cjdEQ0dBzM%X@xZ zT1t7BnQ4bA4O5+OSq3-?*+8U6)6;|3ysi1^VMMzPHy)l3=X?Z=i$()GK~Y;4%E-U7 zdDDUSijq>d&SJ~{Vq>6Ix;AK=zq@A*|ae9lh;Nus>GUtr_l?C@=Qj>2c;Y!ath}XRMz+8(C~09l5%8F(f>^ zt-1NUv|5_B%S_*SXd2qu&jU~VonJeK1BwgBtpJ(%{{1^324XcxYv6Lw->>;{NJ?&v zCdC2Km$lJR5 z>G=4R`c83hbfg>n&-ui^6-z7h&$`ULQs*>@6XN0u6gBoRxc1K^WmRzojb5_33<(7X z8c%7d?h9pt0MgcGVr*RRB%Ny*KXU5SscQK?jk}_MvT?hLsta8g-@xmipRa3dM159G zX+>d!(<5+@JV_}|!g=QJ%20}~F6e8F!uAhO3?TD@O@Kfvb^uxsePH6dcTauu8Fdp> zV#HijQdNuc^Is(ZMT75ZA%cvGO%sB=1BxMN zZ3nMCPAy(+iq8)+F_mK1qG8gyIyvhZcrs>_UHy-ErCWE#e~MQs@T7QV<>y$`i&k_z zb$+3|Tze`#GF>(#D#`^hGaLyz|LV2#|97%d=*X0%hXK~8L7e;G{Ch?B7l|~-&YnJS zAOZouSTUC;zG>P8PyYI=Z*)|+{d}iI>zf-O5tK(Hp4J%CIT)z_DvFEK)7L-Re#S=B zTZ)Q_Y4bf9_pRQ82(W;sU|%5>%p9_F*Di(ByXNMvHB*OXoe5^1{WS2~+qZ8ew^o|a zdQjJ76%|c-Wg)L|ggy2xosXIRSXpUj8}aV~jUC&c{Vq1lv*WNq;p*C`Kev^IIsX^7 zxDM`pOu@f|Jm-ZV7XoapjqMFY5rf8b#B+TXFv@LVq#1vt{_73`8?r3a%y5x$|IbJw z+*Szs!K}hg3lP2Jzm9#Mdyuo7bSOJ7w&It)lhaLx?qoHu3VnY1l9Cb#IF^~QuToM@ zG3biwlCy@6E{wKtGSvJd6k4l80EJrezA<0DV-z3ujZjllgAn@>G9*71f|wzvj($nt zS3N13Yg#)9}t*jSWc$d(l~I>_eWW7sMXT$?0rf6>U`l0!!rHzU=72!on{4 z`sdd7=k5*z+#-~m5j2t}i8aoM0h+652~mn`o35h=0?ifaf(|9Zr6{S zta-=SKg{5P6{^EY2fBqLgOsuj{U@<%ndV+JHiUbIvWsr=9@649s@>xbMd?-P87r&a zZ{KR=?n@AKDO>1{h=wi9{J5|*{md5-&=(B6?dwGgG_6m;_Tv{e*BGD3WcAQ|0Pd2PHA$T&}CxiNQA zPrd8-L+^^FCT@s~DAVAe>nrofB|VARbgIw4k)n#mG!Be!U+_HTSEJ0^<<-@o0=h?B zRnM>SRS0BemdLXnXGYG*=4GHa7$WpO#3HjL(=>D5ynQR5)PlYXp2h+V7(xUwaj>w4 zxq%16L2`b6>7Jg4&!8ssEu&G=hiVRU9xb=A3#jWQyr6krJ00N(l7WneK96?(tsic^ zYfP5q9vVTvqQef4jf`Y4MT%U@Ps`9K-ye}1d4==ebg7S5X6?}Zu{RN70bWy00b|)* z$}6+((Kq3qpk;oz%Lu?5g05Twg#PTz%x3o}uN6*a=J$1VR}xfEO6@LOPZaiuEgf5p zon4yHdnuP-SeF}EtN2L%IL5 z_4;A3+P7o1PA@qvC_v`t{7HeZSkKs{X}0WOI5K_egsV0;ADECAq*KXl+ULkThOT-e z1~PKhxF3iMpObIF)6gXt7c{&3N4NCWNaG1599vfZh72mz%d#OU6 zZHwD-rRc!pCU8grhHgeSP7EhC8B8V>>r3DXtFHrOItTL#y!6xjU9aSD2eFpl&U+rt9Wj`Y-9FOXay>(Rbc} zEN6hQ$9<& zPkHBWp0Mtb@4s7f$MN%{z1KA#GeQtzq(zKRe&P8bzNb z&sbpclNGsebhJp1vbQ!f=wBw=X-{_P zzeJ@^PdvpDe^}jb-CG*7*y6D=7%_3Cd;I_vRRt4m*4G$?drGphkv=WUon_MAQfG93 z$Rl{iPha3^2b_%8P%x*rl!2z^H%tqa8C6p-f3e764)GP04%)Ql;gu@79T;5_o!4wO zaS%@Ly}L*6>&dHJ8&xZFm5&Y}M?57Mx9t!74t<}X(N-rzikg!MZaF+6>5sMQupwKQEAa|Ac>IwDf^;?_La|JZOy~*hB3*!k<5{f5Q*`1@c`~*{h_aVMsR8 zEc;0EZ-z#2YP=^siNTZVnZ*+eurJglzeEmYq^om;ZH_8=8v3h22KnZmDB||l3uX5F z%sm0R>1EEd%xmY@I}#?4Qi6x+E1T3}S2kThhVh+RF7e6$7Xx9s0~RvO54{cQ!nv#_ z>cN#d-2Yk$P8bI;z?1>9Ac#c?=vCQo`uh7Dt<0Oo-K|=D&i6-}oTv*;ojNaVB`%q% zZZ(^8S-RVPs+&!Rq<6RHihnAXQtZ1cSPi13hr%=dO+6*=oK9^F2{|rt=H!GZUfQ

RHv4f&{RG&Kd6eGwiN*Zi60PlN-5~Tykr>6-*I~R>e*7q}EX;Z0#2`TMTUlo? z6?oDs-W$vP!3f90p>h`MaXt`URiMnb9~%?jKU&Dv#OU&A-D0ydyIegU2L${{0l!X8 z{(D6Pjpx~`nQF<+tEs9-L~nBR z!vhL=a^lKUxj{JDSVTW|b-w-sa+UEgaT^P3~J4cipC< zl`dP}wejv*w`vCuy>)c$NG$1a2MV27B-n$Ew4 zNz{^aM~@4kqK9Eo8> zFzw4M)bq_5{}17LTMq-uhUo9_HfyZ)+zppi3x zotWp-z};Y)Y-pODm;X=NYCYS|*?(%Qc5Z+TP|@^sb!~VK!ZGHmszUD}D5EES1Q>ZT zkW+js>>#Bw=jZ2@%1yP0w8^7{%C|7|^7z+=25VUVXtmIMF@toFkrC-`J13{b*;(vK z)FjKcx3i3ogujeIPcySm#=Hu*462I=`*wYh+Y>Vf5>zEC zL($L|jdGFu2F=soRRTvHLr(pMSHfyL-#gLLT*Xyk7G!Z(IZ|;>J3Z}s^7L_FXM7o zd9^7uS)!}+QG&VS!&k*_c+W*Ky*>Lzkop(PHL@_dK^)_A=ZNwi&~u7SEFnrBrPeuN zEG~Foh&~V_zI!ZbsHkSKyE7hB&NoEynW~?k1IQJJiQ&Ky0FZZ0jd5e?o}aO4XeS2) zjYe6l+?4`JNK#8?A9U~E|6rJ6epXbpAEV7GufJk$t@zSphS}>@3)Q7oraWSd&oXC0 z+=sJv%#HYxDQ^@cg%4SfQ9i?Mt#3l=9+Ns9TUyu|xAis{?)k=g_OyjJiJLYNvIY~| z5t6!h9OFos#xQD$CFC)G`g1o9KfVVE5d}!U3$txm>Xh5{he}pCqEdU$q;;sfuH0NB zgw=UI@DO_h5#*ND#c}C{JD$Jp&?ps%xi8-W6@pgT+Qt2`boph$ykeIvb`Pf3U0JdyK@!Q$eevVHVwjJw1-A z{0;4Pr|`vT&QTT{F)%VBb2BkD6+3>8sFYVk4nrL8JSFeWN53;7#>}+ikL@pdogM)# zC1hniAvl_3WMo|79FY=U6@Rykn&b+S#x;4O-TqNj>2?!Gx|o|IMcv$NbR^I}oXje-2;{ zu@w^~gBCfONB1qSt(o4uc~M3t=z#pSYcyJhIw`HCTbpa}6O4BAd57)@;1URf!bR!% zHw{~I;-jw?b2EPnSei94trnGC=oLjM`ZPk(JQqB++*~JfGDRVZn$Mev+zz-s`D`(R z&KG?{7nsZUq12B%WotUz-05ec5yZ$gZR!D7aA&I&Sn34{C8a0g(fJRS{)~Hlj ziH$TAS9pBgr%%c0>1<%RjnvEkk>o*=2-zTLH=hRW(XsYCz(saKB&Z2x^YaZ16{0jz zVIw&2>d(P&<*!8(Uy+97bn4{EOy|o+M*T?X#an4;9H2|$E{&A#Pf-gg?@CKfMxVjd zwHWHK=kkXmw4@hr-Xx?OsyWB1hUd{m&-T2A6#0#BIQ zL7p#CD0iy$2wx;vIA-7ApK5TENMirut8gmH_8q?A;j!7GB&ma0cNLYNaL1|`Z1+(G zR~ubQ5~R$1@!~vd=&qeRjZI8&wjt-YfBniYAb^tvX3Qw&{FkU?dHcdbN6PF=ly#V= zy3Rj#VcBf&j%z`n%S2uXgdJ#1=ZM5=i(%W-D9&V_jk&-& zXS$vXJ3QLUQd3*&I`%rL%4#0Z8$h^)rWwa&*Y^AWm`6+g`|t9f8ebmdMM{bi-HR`$ zJbtNijdU%(@~`FB4PIfthtKeJf5?1EQ_uW~GlmGzA$s~JHO5ApwZwm?2e-x6RQdNn zX48Nf2Koj$4~PJ45DjQ`NT^JB=n7_WAx>YqQtqe+d@g2M!f`jHiS4OKI>&5(lRIJI9# z6^Kcdm>>46EQ|C2Mi#^gxmW$t^V`da6ik^Wa38H_8Q28`!kmUq(URf;9Jw9pZUVXs z&}D?@JuAWDQNQd9)&a+@&K6!=BUH@-d+$YCC^fKBUnq}EPamP9Ys14Im?jl2;Ykzs zcMv1D09@7e?Hh(kD)jgHS0a4#>eWD$X{?{X+S+06Nc8m>VF#I{79?iy%GL747<9Kk|RrJ9@Vkdgw)LEk|humppLR$)bcUYKDw5r2uB_}JgS zKbGN}vpo?jFYlAZOyElmwi&vTDdrG%aq;gj6)@$~MY4DAO$OM?gjw6pN8*ODO?307 z#6-7fojZzWAjc=DpkM=0JB)pOy=SN*NW+3@zURm6`}ZT22dpg$(EJx=NfKF^nVCa=#gzK3taB6c;r=YZhgyhw4IcY}NC9>QA1OMRP*%zsV+)di}@o;^6#C6l0n zEvT?GKt!(A5K{M{A(H`5NO&s#>yQKOT{X1>T_j{=Mhswjc%A@Wm|Ukg)@13wlD&iI zEa^fyxB9h6;&HEf(!_~~vR6;2$3`NP6%3gX!{)5a{u?9G2{}18SVJNCzzWUSv|u)j z_r`%*e11E$<}2Ui+jaDiL&EJRQ;n? z`fvFejBVcmmzIP5@7XHzq*tE{93IX#@!jA13hB5_+t3dS`&RyhiHiL`e*s+C%4@vp-HC&cjsZ zQ1EIuO;`I!Ym&vV< zucQWDPo0!EEewchTz;2snwWi8G^WjNXmlaUT(rs2PUKru^OrY9T)A{9zRI+nJ9lZY zOhk9y+bJbwGq=`1Kd<;~r|kCoW=(79&eJs|!$bS;J4_EdNT3M7Zs7=fQ&uL48ygfN zmtg$a2Td+hT{D%A2>MJ)dMW9UNM=gw80ODW8n74~`+Yvl{`%E~S-qmS$B7W2B8VuU zE(oq;b3#c5cgBXEn78(px~i)S!y0{rs2n;kJMC$NKX`aPv(NQac)>gS`|oq?v>1Ve zI&%ST2l9Xs4Aj(FNG+X?uw0-cnW_|X!6v;8sitQfvn`yMcHx@z$?7~m9d>Jxj z;*_fT`Sb5WdXHbC&clZf9$IO-Eh)J?8w{jS{{8NcCq=y^J0IXFAvmOP*n!vxffph$ zO~iEAAFpC?*umZ&xcCM~D~#8hHxr<(w`NJbFte~gyT~#KvV^YS;J|nBDw?q(i+B!lxBN#^RoxH(&(hsNq)dBpuE1q}2)!T3 z)Vk4~BRr1k*u%dz^tY9jk6ax`1B69?%^UCVMX2YUSK7%BuagqJ)J!EQ>0X>%SuTHZ zVW#%ftwj#U+uK9;NFC$UqsV`nclfPFc4BI(!fy+jm4$^<^Bp@Ys|i9;5N!-ImjM?Y zS-dJ>^wN@ggOTsJ7c9A{&Q3ekmDlu*uj=DRV^dRzZ`WvV5YhrV*7*^CqTEyc)&^+7 zkF0D#e`{;;Afb!_tl^01Csg=H;$yPg2#GSoOffMrJe>oA^tY}q+_;g0uG`nI2Y)t) zr;w3>d1)9|35khwEADJ;Yu;hz- z8^qLiRb}NNg%6oLhfGa}XJ_s3?SKB9L!?s6`PM^{59TuqGC7(Gv1u)PX%Xo{U%U`}XidF>{)bhYu{}Erl7C}E)MsCS9h%@1k(87a z5gs1?^eJZW+uPcJ?ih(2MGl`_#K_`pq_}(KWU=g5u84Z9FL!jPgCVM@V5E{){_^Pv zjFN!3e~zG`q4{8vjVs$vifdu5t5pwMS>O~Sl!Bu7CwQvI2jLHGclJn?gIOCdZGwqT=a?I@%J9`F8K-2J6+19VE06{{M80$c=v9_H<(!}0AYmoR733+10m4q)? z#4nUDQ&RlbP53$c(Egl6bfENTYcmohw~k?%h=}5vgx&-yU~q9eQD_Y!ErQ)scw|CY z*on{@Om2<_wzjq!Gp%6)E|Aq{cwpeK-eu&`2M(+TG6;P%JVS)T!mxKIdaM@0M^~?g zXrD$JlkeGIP5L~7*58cz53q`h#{|5GcQDYjCxtgI_8;3#y_~xkvL3h|0uAs6%jO$J z0Vom6L&V3p!`;nIG>W#`n3wQqqXp#{ay3NsF?55N8*m~13SmF)lX8H!g`12sBd@54 z6mx9-@TE`o#`MJqc}-595DNJ8*ba&m9!T{lNJ&u<&+`i1UW!0WcU`XWcCnQ~2)}rS zQXuJQcei%DzCG%)Wc;&3LS8|% zl=em-IXquP`Y#sww28w85-yO(+>d%y`tL+DXovCnOky#kV$V()q=iY z@-AkobsdlWASy>sf>C7t`}XtawWaI9C>A+$rn#ddGCbTwbLlAm-Vd#Pm$xZ-1fre0 z4(*C=2=etcv$Tv?^GXu!XgIr#i3r+QU2QEty#gX1DEA1BOH1zre~Gr70nylYuev`f z=9j_OX&KhgZTI5hj(q>xwlBJYf`nvbY>fHtEpmt+(N)p0&2Q?HOn)4rk|OEcPd7tR z(c0<+#R%7so|YC4@)0F}Is$yrp+FmhmgZG|qfoxZvv&fj9gs$wnK{}uDNadu?BUQ~ zNlB(i4oB@-AB@mLPi;K=>d>)g&HT>1M;OSfnrQxfOLT?P5wQ55Y>#a)VOUCtdyKdR zZa#L9JnQ)MG+RuE250!Wqu>YX#m<@0(F}fHM;)<*`ZH#(uCMOJ4Yi-~`G9;Yv%w?z zuI_r?`9m7cG7tAj-S*y9yyM5Mvj_p^Eb08Q;Sxrd3Z4>zwmz&`)*?BiS(rlzc3ha#oUAxpHg{4SdxNWDK zAvyMtuCebZat|}Xo*7kDOw^>3?h|K-*jFa9UwzX|Pm0^^P7%y`A+f@e{~5yOD&<&g z$QBGM5q(GDIq6iYQ5@q>?EjWF8}m%#~0iQz}uWh>(P2 zN|R)YOqpky{-5o4&RNfS-{-vVyZ+zxto3_Vll|TM-uHc7pXu`TCD2mir{HzDaf9~L z+4oW7lTxf9n|a6&6Cn}%4DwA!C$#r9 zfY^%N{~6s!yT@n=l)M~kuqVOo(`*|2sM?8$r*nNOp-RiwGneg)|Ku{q#djqIb;c{# zzjy4rzg>vpq1d+6f)^X!Om4kbS$%G5_)uCo)j>FZl#+a{=;lxxpxz@)b6V2c&eiRM z7y>#mp^7)zQh$$NXYQd%Y*_0H-01mpv1HQ{6Tm;s9Ua=?twJP{1c&cbCn?P5M}Z^GEf0j2US(8%F2A3p2K=JaZQjQm=wl{0eY92A%kSUDZK2cPff-7 z4#>&HI=PTe|NUaV{eS)d2caMsgQDSNS5L_K$c3$>yF!j!GQDRE*l*v7ZOeICT+Fvk zxxR~j%=N03l?LP1YZeI<#!uGQ1!(#UWkE`Vx6|qtRQ};r0uR2I$E_PfgNYK5MVX}1 zpdrMDRZ(#`>9`cA{k%MigRZW!JMU1Gp-6=I3DELuC|>ZKa4Np<9^Wn`gc2h@E{@<8 z6eJbpg7<37o*Na6AhQUV8<;QP@1BZ@<)(m(zJB=<*^WcaP5Rki^TYpgCwtpsB~K1t z`DFbK7EA9wd1CC#kGyfalHVq0nKCja?{O6gvFml4SFLUf(kx>r%2Azz*<(=#)Wyl* z(zmLr;vfEX^W#TN>3A=c#(>rk3RThh@ZrO)^3H5CkHbSkT3=ncaOKJ# z1OqjtatN!zy}ltya*cJat}&_6%N+^k7H>0+nhNYX!os*+9Cy{#wSE5)OrsFDp@c)> zo(Qi6GPFSD(G&V2cTa7q1!Ec&6$Nzd-TCqA>Kn)kvzIj%lfjRH(e9jtni+IYo{DfE zJ_7A-WAm}1LV%Z-S6bQ`zn(_ph%FE)btsC|1RZpFPao?pYxcNSJ`o=;8dTsJe2(B?3oYua6 zoo1zTZO(yooeaUcqOm`Inmg|t)oBrP;;-(C$fvQ9<}Br|zI}v$915kYSI_hxiMRlj zZVFAt{x{sRmh17(7t^ha_4e^S5_Q609kFjsx8rrn(Y*rLL}@Ahc@N6s_DTjmD{`vQ zNFsbknwnrsT<9ZzpRcF?KW=CKrL*QCupsQoj)$oh$xJ*VD*1x6r}ITlVq!T5jK`r_cR9${k){RcMx5dtMEm`Pd!;3fbN z>jKZd+D+PJ0^wz)D-7GVHFhx7*E4g{#mgMNEXHR146-1VWGjfxt*mZ_gcx<+U;SaM zw76j{XFxuHJ9_3`3#x_3wUa{rw?C^fwjD^w($?V_!=E2l;K_O~X3J3P+J%{8n>KQC zdQA2nBV=JJME@QiT3Srr-6`9E!~GkSEZ@|<+F=N#DXb8Sf{xmNmw_6rAqtI6PMmnr zIKWHZWKnw08-5XOMR-a>?44&i5*Eofm z*EOJ$PVq&-|BA<4LZFtKni_Bogr|`EYDoqs+)4z62xv(9N2RH_!v6ik@u?N!#rl2+ zBkte-3FQVvd&`USFd~cDT*gDf^I-~V6bNWsJSWZu)uR0@`)dQhi4KKGM&7ikZ?~lC zqi=r@Bs@UM>7%c#MG1)hbuwWK`G^}SD}=^q+k$okKiUD+k%Q zAZ%U9A&9W}SW_eCv#dbeN8t_h@Z1Z1^BiUJE)?y?I}p(wcmMvgCr^Nx-$k=Vc11!W zA|jHK&5z9}eSv&hOT|I;pLAT`*cc=eL!MzBfJo!ZVE3`UUKx+r{K~9bJ7lbBc;_a= zxbtS%n}>(@@7wp|^XJ>q(HA%lzHcyEm@9#t1Q|5YqPFw10yG?l92QFcxWq&|M{xrF zm;^;HcTdmz?J!2e0SS8&)YDk>nMbb*W6OiY7nx#l_W)PmfP(~pH3TSygrsC&&*#K&y8?Yl#~~~)?@<@GH_Z;496+uo>%rv#ooL7PTDidSy`p&w4Pp^Xs5c5JfWtkDK%^=vl;q+ef`He8Q|@8PM)0i ze1q-|A)HU1V0X=gR_N9(nCf5hu@Qi6!?((>AvCv3ZripEuwsoF%BTOOO>UUD07*K| z;g<+8f)o*a-Q>J^g}%tw!%X{+aCgVtzAdb?mp8S4Cy1Tpa9r*T=zVCt9-o01vCZ?2tt%3jmO%ZNC+L4MgJ>&l&MfS40sDc9D?9&|7D_CO#!;rHe zsbB^#E2yodJ%*c~H4jurT*di*=CyOv1%9|S@CoBNpeQY^vVOoI%pB5z?#X$G!SIeY zt0IaGXaNL)d4^u&zbdg5>U)d-d5p}fUlSb+;+N^y00G+Sv@_3j{1;SFK1+Yj;-St1 z{=vNu?Nvi%?RPNSqJi7p?*;6)((z>a-tisp&R>DT&~{w!_l45)pQ1FOh}#H+vb$R{ zUi(u!HKiX4)KwHqg2P8^dzq2EH%z(A#63-Oh-A8)A+CG&Oe9v56yz9<{Y$%9XZgRh zoAJNTuiy9JGKg16z0r5*+~65OSBNY>cyl4LF?X~kcgiFW8s{X{>Mk_=DEcYNa0W44 zI!!eua3WF#b_ve4oFUpHR#1{l^Uz&1$dQJ4BnW<@6{>Q$P5ZL1a zAen$3xlJPCRw4vtzsFs_a>Jg2U~Cp>a1j*)4epU6NWGA5{mA6@^jeJ<7nU7Bg60w% zX?b4Whd>XWdB|`Ex>$?6fVCL;Qy>puo+|QL@lf~L@8smGN0*e8eHpkLRj=6E)x$a= z(5Hj9$38`8CjrrugDh7L1v+h{ef`ws72ueJks#Ht<^?{tbU4?8f`Iyu9+mhga4;+~GQ7 za3lDd+u4f*`M|5SR<8^ya1i>4w_h&X!_EEUZutISbqxvZ_h{Txa^jM`qEyI7te}9O zU%kU!f{E!g3{ic4{N(z4>O9hr<5UdEbLjN5Vb>0?NIE;|xqp8?& z@Mu-~Qg;MTJub-h6^iEQeXp_GPm`6%E`B-jA$T(i*`I+7+FbjsZ}Tknt2QT#ATQKxs%p=#i$JKvMoT&{Q#z3EeN*T}mxu zzc;(*KcI9O;I@hpu*H&tWj5-9W8+ml7cX07r0c9B9&Fek(X8cq?AUR`eKJC+)6?ZK zXW!ODAJ<#M8a{E5T$6G8$&FanjCy)*PS#EE(veKPl?LQG?aC_FF*Y8$H~&5BUanv? z$^-AE>2LWL6<5>>+dDcCqW+JHK&{+H^d(^g(y7fa5m||4ao? zUqeHkIz{JCIsF%ubDrO`DV&FV?{m@8`c`rK*VoI*)2vo#pY3T&wuaui)j9ZX=Ah3L zJiTVkx~uk6Q$v6zlb=F5iL(&}A52zQCdf%{Pi-E+@g}3F$VdS2nBuIlkl3^5++V*P zcaHwOMQ+C7iHRLhbE>LTPSl`mn1UI(H=#ds!|{?0tfJ_Mpo_pb@8{`U2k<5#MT?<@)p*1$Js~S;t-o!uGjOS)M=75137y4VRBSU`p6)>RVuONpdpcw)>Ic z0-9ucX6A0~Z}i|0MwgpLj3%J*GmNPpDrg$2r1aGQt$aw|({XaQiHGeIZIkA9MMVXA zV(K{E#PmJkc7v1UFS@|5`lxvTsUIZ^@-!{+ zP1<$=mMBT4qSpk_{?%s0#n*hR03S2tUSfWZ!cG;v7TsDpl z9FU7xvdl9?mHbv~SATr2p=d@Iv@qMwGCfV$)v3)dk6{A({VXGpqU$9i#45fn-?>Yw zs>{8A655wNCBbkgqXu|@f*RE=h_gU}GIsj+km91%WLS9`{S8K)w4g_J6j)!MJTgNI zgcDK9!CGfxqIE(S-aRj`lCE)tC!(iNkCwaSFIr;;G635NmUBvXTwY?zQbaKHI~-oU zKx0w_5sU|Ywxo#20G-TYR3lSr=o>k>-ZeEeo<4pI{tkZ=s;X z%tk=pNg^Dp@y?hIVv+?q32Cw*6Vf!^A-G|=U-bZf7n)Ov*jtNsVChXty}hihg?Dyh zjfE<%&FOfbA;!9K<44bTC+&m7T_&ceiBui+k)@`yOd5A$Dva#vn3J1c?VqHVlBrmH zu6m<47&=MoyxEaa7PA9A1F-{Gz=SDwP~Zn&;#xoSw;oK@i7Y)gG(K(GDRADYfzS3m zMHzlGJ9@q(6}}9lqptAxH-};r3XSTcX8_G0T@qc>)Xj0Q;K&+4B|)0o zaxVdQ2$g9kd`StGlfTrZZuCn8$|KP%rp)yTikl{;Q48*Q*7)oLSDh$457N@C7~B%W zv_n^zmY&-G%0hFY_f{Pp;$Vhu)PZ-QZ@48r`uW6-&Ad5$7C1deJ@mNP<>+t;DuSHPn(Xd{tGzO2>*`3eQ^0Iz~72udoDuir3e^}cyiVh9*ru!!LT{_}eX+se{au~{NE(KY~?|}?X!?qVFvUIN{@>oi- z(%7}rTh!~joAs#SKt5Sc$$gB9&eiPh89LV?rO|^>M5QqShcJ(~LeE`Lud%!QSEb}T z`@*rA)|~w(EYefI$fF0WpK)5PLr+#vw)>HdJx}AeZ!*@-k%9q@Ug}A{FC}E%HXc3N zS^waA{rhrPccl|ePJ2C%GvD7&cj83O{-(KCo6BE`D3Axh(7O2Va@5lC5D=glM*eYi zRIPcW>XhJj%b1XmTHrNmCg1mdv8xzh9ZPXcMQMwgUqr+PK7`5UB!;>dz2G|jhJc`oC#S@N&Mst&-?-_QFCB92bXG#nBtO}O#AZMDU1{xDUPIvhQhB=k z$N((|pbu#9Y^|;1p7>%b<7Ggs%cf&=uG9nw=Q?wvH^n)5<6&9o-9KlX?D3!^Kt}>c zq>JD9@<)2&+wSm+w#vm@1Jh$q&-y*xRXq1=G41zvV`I~{ee&EZH9}n$2jb;!)ddPA zWMAMQAMM|-Ik*bsiZBrvb;QUz<_Jgh0FFoW?I%MY33d13P^%jO2$A*XukgJ~vCs9M z)(qBx1WMJpBFhCM8Tvpl5zXEDY(uo^mnGsJ^A1Zat-5uqELvO3prqNveci+) zg%4vxd|zS^lj6O?Lv51{hmC(03$8YDc00M0Mt4AM2Zj=L08nadVVYFcb8g933oT$6 zaUA--2O>K=jH&?R|6iJg0=e%Sv{d2mp2wtxsRKy-MhYW7=oFnt+lNO+6l-0pWROq? z;SvCgi3VR^UsY~5>eI5NLM4-oYN?VzR(WF!9TgobmsbK1(f6vbJXSK>eJ?$|Ci`UL zVf+3@h2DRzP(Y+}D-F9czNl5cuh7yk!3$b1*S}2{a}my+OFEj0D@OJh&<2#V$d7yS z#2Q^MFcm~gAxJLJR8@BC9;Aos=ui?6!{I*D4qA%BYqb zXAj|z<7~OIZp!1!K=WM{?-};~X6?4U*fy*VWxFVESO*TweC3WBUH}YnrYwg(-Lf0Ps`59C~1h z@<3Odk#SQjDs#PaK=THacSHn8^~A)6^DnA5z*jNfq{;*23-8&DBm7CnEgg#m;^BNA ze42#=rRD&R4`8AkK?1I$R(G@b#qM0wr}y)l`MAdGq&}PH{5Io4N+GSXOe5Zy!}j9O zjMu$(KBWI$NhpZy=Iv;3i*Fp{9h;bd#Tl?9m;+ojwdr$D0C4W;W}9-vojb`IeUbwGecc8AvYA#PPpB^^)ecwc}Qx5EKYkdNn7~7cG<=&dmmNn_CrJI|>(_#L zm;r`*Zr*eGt@-s{&CAbIX*^ZdeE;jnwt6*f$u>JXVRv$$>Oaw1A4Ib__5Y)92S93D z9%jFfBdB7}>$Y#-Vv5CAp8ywnW<{^RQUhBF0(B;^7zdOa-=8%ayHBWVc+~o=EI4b? z{Bu{hs`$_L)xfuIY7C}D8Nb)`cmbg@<7V`Vjf z>Jsgm4IS3(v2c^m52T*QPtMJ!e6hwHIPKY|jxg0=EFAWTEz-NBW?#NEoxLpUY!jG$ zv6iq46uS@N5wjL3$kG&**}yOvNllPs_?snbXMv@e#YNBLbw?&6COs2a$SZZMze~A{ z0Pf3(Bf6h{?FJqYgycv_mIzKz@SYtX$M*kX*jI#g7Yc7hMQ#GKvLMI9*`uLR3;WZ} zO+uuA6?W=Yayb#=;9T?F;voauearB#5oc*9s3|m}>a7O|Kw};~k*fXUl>Oe5?H;@v z%fCE5x#oz<+l-T@pQ0E#*wj0#GLhWm1GO)K-CIC?ZVk9>TFK0c)fdBxk>zkO5Xag!dO*%n=X zc4fUq{Xrwn$GXfLDc#)0mPRWkeiIMB{XxIh@IYR54NZjiRj8n*OevgrCdPcDHbOJ) zI=a8nI&}7O2jl1)y5(iMNOtn%W;QgH4QTHYkNpVwHq7?W2;II7LY_PO>f$04u<(px zH-tsuQf`RJPTSQM92@5_PBJJLWS&@UUat&k6@i=v_PUJ)((PgE>AGSqOkL*=7#-nf zzS%i;4nmC=-_9PG{2c?p#*8Vb0%0+)Ta1|cy}Jk3`^?iV_6QxDIpQ(dRc4{Q^ehUX;uLQ!xCC$a8TzhG*~n>)pCcJvstju-J>mCB-X>3QJP`)8@_t z(~mS_mY4qi34UF$5!E`jc~QHeppmtE_Kek@6?58XIRe+!%dlQAA02YbsFTC)h#0g0 zOko4Y3qqv)>-Z!AlXv@n_PThafFXg#Kvoa=ph1ub$b3Yjt)4vy<;+M+Ge-^`0<0>! z=;`S(Zo<*bjGCaPJcLkOk?!F~Z@6bhWsFKrYML8pX<2E7C6p5cnlp4|=?zmqPi1{` z!I74m3-%GrBs7sI3J`{djTZ#xh7IRt&OnU4D!@Z(Q+w1+DsvAfgFma9%k8jB%gB7| z_2+f!NG9nW^lq)*%Op41|3)f{rr0p^eYwY73@-z+Wp>N~%Rzy_YxO@!_q^BJp2`-u zAC`~(8k6Hd1K`7P86LEsU|WW|hktD;B^*meg1kJ})2&}K(q2f*$@YDDaq?$M$^g^X zwzef`Sw1<=0q23M7J0is9Qc`Oxjo0q8yg!7kMi)DNg^>2r`k33!>$f?Pyc7hXpTz@ zZZ`sc)CBom_+ayZVFwN?$U8;lc9Np3edFBJz2(Z#*!Jhh<_VsP7h*8 zUwD)OdILZ%r7yx(Y|{4k{r-(#K(an$zDP67)T`~X2TcT90a9|B{I@p%a=`A~cMY|*=0A^y-^ zpo@S=6&Y=Wy|Z%|hUn1J+B-UOqPXVZfRPBsY^*sDiQi#NM18PdjFwO8G-SGXU#ka` zh=V6?BQz$Y^1q0mlymmD2z(pVV*{f9T`%hKz8U2Mm%K9y&nBbl0kCO#aMGdklPeNg zUFQsc*3V(!4AntBy}R4WS(MMfpPHRL29@U&<(cYgOmMpB>;Z0-{ke^>px`^FE%9{; z!iuu8t{7y&+I!(#cK7|TF^Ctl&yhMi5rwR6IIeca-@CU%RJ6o>T3Go6vRZL!Z4a3N4c&a5 zZcC3tAwX<%^X=hP7|H|HiJgs&;L3F-F4==j#~!7ZVSmH628q%3=oU;>1bgzu8p_&E zP$f(I<^LZTuQ)4eyz>x?L|>&@Bn^BQ;QPjTv0FrB5r#f6a2H;M;6gAQZDWnDhaQ-i z)*pkC5^vMKF)j4^@E=CN;^W7(#CIEKh_LY1THQkIJ)R*OE2}dylOJf!B0VNBAi&kb zqhV$vv(gM-Of3y%IU=R{*)5>ju#tYfnq`DFhmmsxkS0Vst|k71iK=MBUh`i}lpfMw zF_f{+u6;FSbsh0<<(h!v@q8ICik*&r{_NQz24U=0OiYZ9o{TA7y#Bns#byStZoAiP z8~O}6g{?}n!i*Mi54?4Dw%SjRW_Z+M9o&4zv{FXJbT6~r3jLDVHB9ml-o3j(y2B&R zFf&2w+hu~U>fJv&#m~C~FJDk+vVa3MP+w$?@6eDn=M;0TF2qc^dsJsnpPog<3t$Xn1p8$d2M0rh0)=gr&qp$UU!Tmv zCO)S`HFb(L6^oP(=Kgg6-O-Lx6L?Y@?r$-!DsJi>Y{iJ$4#oYKD#yT(#Fa%0m@fRw zzr&%0lEgy68|v8Aq(RWHnA3nh5Lba@C2WPwQUb^wLn}Fq%<+5o0O_WjjA`N7!s<>A{WIs@A$$9kc;VW_szE#>pk6%`MVkIke*3gn10?o zfPt2n-C+7E^7d=+Fc_#6zJKOk%b{Xyi^xqZpydd%FNpvbCX@dZ5E}_E@|A0exk}@S z1QHY+3Is;-q!%l;@OdB^7k{O<^y*n}bdKfKH@foY($ePAwwsEZTGE<$ zFtFy|YN+*3T%z}$eLZmgS9e#PO!^OXJu@=;_O(>5LAgszOyXeDeWVOxfG+#V9GnqW zD(xJo-YE&_S3jTBW)J%a&+j~fxOUw+iV9Ejsd0ub2LjGKW-q%xx5INl@-hbphl;9d zs?JU~Mk~j3u?JenuX~+0%3VgKa47@yg@X!&(P=gp|BElCu{8QR6Z%D>Id=_cF#6U{LW3GUp$C-wcy7-h6hXkyWW3IOycki68O{R?+xLF=w4$w} z5{qeVYJ&0_CF?PvXD3*cM?8<6EsOq(A?w%QY=%3w(D*V!IY1B(@bkeFm}Z%J6N@=% z-r@{J18%fyF{FeDk%ImTvJ1pZW*O#v;OpHi;55W`d+x^TOZdrY{R<3c~5So?65w6o|4e4s`W&+4@&Kxs~#S&m6Eb;HA79Z zP7B|`g@Bhj!k?_g9{BO=X2M;! zB=T#oG`Z^k-h#n86}6=&XboA3a0Q?e0eFM~>Ig9&hhnqD1ae`|IWS{EOhEww zEG#TT$jvZ$%9?cj%HQ17$jVA_MaGelnUC+!lh}t|Nkvr^Od6`mO}J-t->ebx&**mO zfPEUK7)Y?)g3A&w`jan%h=Kw}_in-rdJ|kGEPrm?mgko52GpsiiwWp47-e^TVvbvj zeF(ZzM8QJ#0R)7k8e!@?P2y`@jCq^W$Ny6cVDb0t2dIWYStCIWh+DDUGVP=E)UkO_ z`4k8WY56z}PM4v7)U0h%`yMWzUfulF^p1-(pa<+7( zt+`neY51z&lIJC*&6TrttO^u{#P;orD>ud1a|jB-H?hAy@mTi>HXg#>!67&}SmMV* zr$1Aa&{cpu?iiPe6eu);%LuCe_^R3sNDW9df_lxG-rv7bt+2DwPl-~+Un%?vn~2=N z=Zm5qXE~H|F!HVdNiOgL2R}lKQ@!N$_RE*O2M#2T)XUxh0f*=bti9kzsH*T`n4NGf zhBnG;m$!dG!Qsxc|vSejLP`Z^qwqI$l)?_^6+^UWDsA*JhgLd>02#7!ZJ= z;PA)p1x#tGa9<`SvMD?OkQINWZ2}ksCh#Js9n83>VQ#h4+hV?#?^s~eoSKsQk^1cq z{2(I5cQZcXy>0!z@Tsw+_RE($+?UL&--g;qx7zeHAelF#z8`w98BwCMuWz>TFw?Q= z_w3s1$w)8E&Pp7oo#nhqoo^TPQlfi!>(;U8#In+58VnR^mT?2r-ImqsZTS=XSUbW& zP&9+w7=#ZerS%e+dc+qmkKRvYOtJ$cwDYu{%tYJh54p{+5em!e^9tTN?8ay+YNqx8 zVLfu?$~a&-h&rNcJmWi{J`RfG__zMqyaEa7*=APt@0_2yH@ z&_tUO9vm0N(9{_^I+_mK}LOcd>eLP`BO5l@uK79g1-~RI{=T=4qKO}n? zy*J8j9hx{=r&G1NH&*>BB0rG?>F(^)=Cm@Q<%7^RHaE097MoJP<} zC8CZ#yqa;Ab*2{B2mCvh>JwTXdiWmUry!)`LkliN?!0;A7g~hD!J@{Syj72MGOBy7 zczEu&aii>LZk~juFM8(0frXX^db&9rLg?0_zC5{s!Vo(<*1%TejJ@BRx*<;E#0e0h zqD~uW+caR|Gw~c(o;aTr<{RN<@Fh$&BiD$V{Q9EL#5xh7QQ|pIR%S&S$xRAa@+t1n zxTBvqjED|(^_xmbu8>zjOpy43ogRdY_!|FnMKp4)&N`yQD z)`^!5rL$7swUH|w_h)5d{_9^(JmB-DsEC8`#{4C60JQWE(nw7J1RX71QQR*nhpcuq zv*>qOlp)bw`Ma6XO2tyx%j>u@_Pd^s3lb)G}e!{}tl za)n{!3yd!BWQ>%w9I1)^p&`8DX^7;7=_T|%Rz36sI2r&YL#(30t>Ahb@>3QT+Usvo zy+NS@p&t;z-wp_hM#Lum&#?onwc+7!N}{6A4d^_6o**Zo$gTG*+vlGJ`|K$LRC)pg zGc7flN!uhAs^U05agnITun{#i@t?q7^3kfHC4k(!LCh#%-~XYKE0(vfCS9W)xdc}a9-bsOCXhhcQ-mQU_5vBX(4HX9 zg4<(gPqX4q!^{~}#(2s-i7d*Ili2PY5fK+yyG!4}^HLT^TS2=k)z@cxmfbD|)C8<7 zoh@tMkJZC<3*9V9R^Z0mn;9)}_`QC<^)gV(G&?BT5hG)RJh)6Zey5eek-)2e9_D@d z_`J2?+#fyH=~Hv_4SoAXdmcjbUbAuP|EzfLVuw8J|4u<${q;94alfPc4d*20=XN<1 z(yuwZJsLq`XZR!0Am6=n=XY-}N68;VM&O`ZjS7yg>c$8dAPLy4by(ms&%h?q*ziSE z?oIO5N>#e;@|^9Sn`TCXGFX3|6Yq2>^=IJhl@Uc7XKDU*^B9V4!qoZL0Gj-$EhMMi zrg8V!drEG;3&NXi+HKyr3r)FW4m7U<*UV6CRc?g;r~d_J{Pu5P#-OL(s9Hfl5Z?g(1;b! zf3tftVt(o3oPJsI3be4DW@2yXr_;(_xQuE$ua8 zP6)D6QR(hmCmqi~Kz@IhYeP{uCTn^+HfFi4Wi0D|yp(guSqki!xcEc8rxuP8csp)X zo+p>KbetzQ7BEoZJe)cTI2r$q2S4z2Oy2Fp^Md&uI)~?LmluilRm#)nY@pcI9>{i7n$*Y)>@{Z&@vHEgbA840jT;tj$h!gYppJ#MjYS#Obc?+P8o04>n z3lC>5Y72{p49NNgzBsg9kZ;PN5u@YM3k%2{oSjy48N>V{G}@f?kqSoReGn0Lj~qYJhK z7-o(XJuNLgi_o7DNClF11l#`kMcEUZlbDzYyUc)zbo^Fk=0@})1={ft^ZYxDcFsIW z5$a?hG!(pv;70gsj%|h=#jfbe`&OR2JUk@8(cgZ)E%7YsauPJ z)i$~3MR^uSp0P1Kf!8ik`3Y^COVR60+BbHFYMy_04zgyy=K`ea0nAc#l(J~K51Ll#)|l0xUNNG*YC27}0VuuQlr#H-dD zg*jdPrd6tVcN&Bn^0=^J1BAKU@h0>5jvc|s4aW!kO&dm|X=;9)QpF^MIq-SanGE=< z-Q%x}pQCV3Y``nPmz--}(f-djbD+kyrNBL^df;yp&+=Fh%n?9?02ogQiL{XT0LL24 zKf$Uip8BK#ESeZA8TGPjdZg@lM@DIu%8_oLruq)lA(P4(0bUE{`X1~ABbP69|BoNL z)zs`mWC)s8l#A)uD$=S&u`o&3!B%I|KgWSI<1dVTh^(cnE+VP`cvcAf6}$zq7*kcI*<2Txm@Rd9imnUw`f74i>D~yDY<)?Flms;#GFDuR?8y z0&idf1^X}@0Z#OJ*}lk3y&Dj@fcI5w>bTp#7cYF!RYio|T9lh5kef807&o`z(yzor zoxKl<0g^wDZGv8bgdFYWNe;uYa*zxvSixe&p*W4&>KlfNW$JNauolU$Av(sU7*S*R!Z;nB zjq#Y0yP1|c<#OVct$BrS{|}(sEoZ3d*=#XE3l#2 z3tgf#1Zd#iVHVHN;dNSBXrJwzyYkA(s)&u1uH9?Po5G^${TYQVpRmyjZoJoVUFf%i zoZBamP>NsJt^(f$LC#EzTByJBWA90b+(31snL%-l(J=>kAG!edh;$Z2;)}^nK+_cn z3QKO1l9EEe-b?y@JE7gyx@z}U4dEuM8h?1{iSR1PpUS&s4=nKu7>gB@lwj&4!6I>BxE{i{>q`!(>F&Ff=GqA&c(EgJSq?}W2ZB8Rl~VKmO$M{za|+i z9(;+n`2p2T(c7=_M}gjim=7r_r=IFa$XywOFc=F{+^`?9(Fbn3Xp1$5Ev-1tmaj3LPMdYggh)Aigc2v5H}FOF3WBJi z1d#MGlcIrr7Jek;1H>f;2>t03;OBore_7;{W$qOdN!evGc4(@T<0-+-XSS1x>6HUb zy9X0$kg2;)V*13&vP?>fW@EKVd^nSowBhF{6{;MHt{YZ)hJFVR>X0c(VC&fOlbQ$6 z5S!UzBHrWVmX_zMLWN@BTzmS6-ZHDx() zn2bIvDLgkr0E5tK6P?IK0BM{iZPwDh0!0HVT4cUh*sk&0GHn0it}f~E6=;Ry91-ez>JEN zC>AjOu-0O4k(CAIj4Z1H5Jqj9(Y+1OqdKES0DFp*sKG&wO`CE|%PFI@*a%W8SK@*Q z9eu>QA>vCZ3D^&otGz5R9!M43WqznVSp*jfN(@vaBFm5z3+7yZ`G2Kj2PfvGs1&LbE52Oo-(P%4j<9Gpkk`gAvlNr`@+ZyT4v_JbKpeB5Q$UvX@?ywkO|3hT&DMFaGc;e)PH!f)v+h|@ zk7Fg_&)7hcK;4G08nDJtE-NN>V7ju@?jn?xu*#mAu;oy>g4^WUN_WiGY_k_C4a8ua zBeW-4DacLzqp8Jvz&SsRy@LgbQ>cW&)R5DSMhg2LPi?|z-B>k2K=n}&7XUqtGx z{**%yGypzQkOzqi>K71iM;=v6GJ>kQv2DUYgGi{hn^#`Nys5_-2z`55Qq1eZF0h~ z6rvCuM41TW@>D-`h{B4T)6upr5nK$W2n8Q`gc_!TFj*aAW!qjH%Yo6W2u~Cd6-5** zrJw2hTkNdMcgQ`7syITKHdNsB>FWBxjumc3Zt999`P!I@<)zL(i#JTym2jZ_@Cw^D0v$1M205CyY=(s3!%Z(i#}1*VfjC zPzi&#V54)VPzY5)mRO$2ISdt}me3Z9RQpIhhRkAY9+bW?*Z+C`)BJ@#l4r?$-S#5) zJj2W;OGIvA#M;!|OE2}GA&e(d?TF6oKvI(>a8h@Fz$e0@qBO({{aX}pr5qDxD@(39 zj}ij{C*JaVa8(DEW8Y7O8f5CK`5jn$bDy5*Adi>@EkC=tEA=4V!fTPSi zg^{M3ynxg~U>NBc?YH!P@-8kdsVb;ptLkRzW|cDdS>h2BcN95v*yLTmt&~fO6IZYD zvRo^WIilpJPh)JqZ?-+7c+6Je$D1!vhL+K;!} zouZgKQx905P^4Ob5?^A2&>zNI5=HBYT{U=XQm#`d#EBqWV|w`}#iD=8%ZF1=@LnUaq(QcwjXB~cKlTLGbA?IJ2qwOD~Wv|#re=%y&9#8^E%x}IhM z&Yv5R*Dt95_!PGcLP)h5nUiv<0GA(s9>*PE%M}RtDDbqOZvA=$2B{Gpt*shw&OKx3 zteJ5jvYoBMMLTqRE9{b+CxGx^tYS(aW^_VbjTaoH0(w35V0m05Q_%_9PUwKJH7h;J zI@e_`Y^JNMOjFp4I5cplSj>0S1kp}{2i~+Fd68ZVz|th$bhrCg@dWYs1pKZY^)XaI zl_VoWM@^Z$`wPPlI7U=mKGP=c1c8is#4uz;oSHKG+Xi#0-7C#lckrZmhagd@xgetm zxhRYSy25+iKido9bcEK8=o}u#fca0T%G;*IRC2xo7jkEA;V45TCSvf?3^O5gRs7R3 zp&lZT%!+c@+1Xie-qy`+UUz*b!dUv9{_5^hX#YtM#zvF#&Uyp~{V-%F*8M<)N0V7K zQPyRT+J*e*-_^pCk_n6h0}|mqc^RBw;~O3ty0!eBY)mc63PFm5B%EZ}{$I2Von0C{ zozM7}8&sP^Y9$u9UdMUg743wApxAN&D7_+vn%!TqdQoFQF%bY zc7MM|eqo`((=RXeMR4s+F$C6oYdd4_8 zu`c^K|7&qnRDWDXNA_HysliRVJ_Cn`QT{FdfC#aD54brwjZm=~7_h_D{OJ?r*Q`V# zh>M}=gU<;@DMXWAWwOfq0g5*1I2${=+`ev%e8KjF;|(e>XzY>T(FQ%}XL0`rn%k)e zlx7wEm{vf}%=+~mhruykBdWRLVg*9K)O!gfu<8W`%YD#Q3VG}@uZyE0^HyN;Ma{7~ zwA)}*r-mNz{NU%EI%i{)-nQYOh=_A?$!f=eXMrNZ=IX$ILSn>h0|b(b35$hmDOXGu5A}$D+yt9&Rjl z04FJU$*XpIQBH+;hC&4y{^Jz|(%7FPycUvS48%Y-hH(4?%--{udDeAnUrcRgR#prd zj|e*Kx;qAJo_S^OM?Ll`6lsuYL_DQyrk;jyGH@oZ+wc9;1fqP}Yif2Pj7FiNdt5Es z5QAjg2-LV5CY4?Gy&q#Memhu6#UWyN=gtl5uj4#~Jk#B84}rO!N47@;FU5@k9)y+> z$vBut4af};yTZ~`^Jj&{>c6E9zk^kh5lj`2{G+MZbzghTKGzj~fZS3T zzM=C)d#a@srjlHPuJ-8BPbHL`Eg4nD+Drhw_v!O+FRwguA&OMGF%$`&Fx&zbmH_1+ z8;Iw98yB|7Pa0X>TSIYSpQQxTcdI7)zCCd)c_ zcq||`2rN1>l}Hi^f2^uXRd6HNZO9g|?ML6cUv!ldQx1+F2lfqhG~5a!!^5I6wXchc zQ2ZfpG^7$UREUTpXJrzac@Ax9nlY?{_17siSvDwFZ>02ln3J=K0JHS?YA2fQ z9_!?nFCE~nVtvjew9^^=0tC5E-4*|>4BCNPDue4p?Ed|W(CyH%ipV<=4rWg8J_Bq+{>LBuZD|tfMI0FbnL^A-{vXjb~WY zlbi4^L7~OCbssf>3Xp-04ochBe#Xr>hhM$0>JSO3b95FozlXfo0Bo;p)t;T;e(#(dO!75 znt`saL#Kqco7dl0=Z=W0kWO&_=;q-+;IS)=ipq$I+tZ=rO=^so^5-uv3XN~IV-LP5CB?9#^9 z=q<^iPPcEvkTwHDANG)~cg`hQJpynhxUqbxc{E@|_%DFtOEKFqHU$GmAR}j4Kkup7 zl5BZ9yGB=l*& zB4j!|o8O}V3otz3Lk=kVmc?l+DJ!dg_N<-t(L><}d3V4Jj)53Ak6^Qlin(W~S>0t{ zP4z-w^Ne8VLm$a!A5x`?(z*A-+M4LKW;VS_=KQoZ!uXBXpo}`{hZG!W=gIhYi>{?z z_wZ1w^LHBMPm#sTK@=~T9;g%k#TpG6KKZdTY-Iw$dQVd+T_>?)imoGTFpOeT3;rX{ zMvsP4Eane}ZX)gf%$Z{oWd>n}KebY6Iog&pCH&I410QU?zmI0JFJ4`hNrBsQwoNt+ ziV<#CY>KFcP?F-6`C=)B?gweH{E?r(evP6Ng+xQxc0HcmK*d*rd$uHb!==lY?;cGh zm^W=ACyZ3A!5fdr&GpwGJ$Z68Ls!Qy_r(8RkUj7N&Yxxiw)(=<1$b*}sL)y%{Viyt zPWZu}gpgXIHNX6K?cX3vDYDS6-Cb^)LnuK?gp3n;w?*(2?rv_eb}LveXip=nNL%aQ zRKG^umtfHmcncpF<};CVB#MG$x#~%stw_@~u(rZ4_WH)eW(r)7UMi0S;aP1b?>sKz0|YwVJ|+i0Zi0#AtEx|R0i!-o$D^o+H7h%ABj68X#BP0i?> zQDLVyhkBppl~Va`GlQKSW|xzOhQh2N7bRjrZDCt4{F52;1_?loQhpuFmgg;{IHJ7Z zZ`+BJOji;$!HE+T1ip7Km8-+<8juX)?*PdOa>xjyewLFnu;V@qPV3hV04Rb!?Kc(* z+IA!sWirIY`_%<@nvRXJWgem=M9!?&hzTf&w3i zaD}YtE!`hASz`adXVZRWvLUI|7kvZM(}mBHaUAFd)R%Bc7UmmF;aM_}Lujoe!11)h zI{v3I;5c(Vg!niegibuaY%3kCFR~05v?be&TJFW4lNSow2q;A>(^m8PUaDN{NZ=>nIk3;j_^j&+B~E)l>J zid+DLp(-epaO_>mDw%=mc1y#gPh`$#tQAm`E$r-Q4l;Bypsz%!Yx{)Uad8eA zW|E^|-QA0DtQw1r4i4gd+7wcm!jGErDY8|Wm@INyin2rzIXN_R>*mcXj*hUQVaS|- zqn84AxZ$2l8Y|Kq*H0GYzb(3Y+}N`tnuFnI@wz`>%aO8h)(1go$+G4FA^m~1vfE6Lxd5j>yswR>+r9CE=ys2!33{8j08?x*6NxVxS{=NGixWGCM=+Q3pLt!J! zL+Fc6y+U}ay?yrld;E0GHz-Ns*L6Zr1yJGtg7xBH6;K86ib;+LTO+YxLqjKde8ID& z-X)<+;p>gGMI*~Tr5-H zTNr3$IhYxQJY3G14|kqDf`$QX3&a`aQ%9~qo`cuY#3bSPj-k;}IFm2}n?&C-ekI(! zt7mBVL|6DKT`59^@BxR3*}o7}q5YDMA4VR0M1=UIuOh7rJfhMM-21c~o8+$yvUpB! zM$W>ZfU2cF@(G~+1onVM)!f{iO;LEg4?4}M9m?CI+g@GqZ|DQ$OX(XDqJicF=3y)g zliJx1AJ9cMKXOqJi|pEkbzx&^iJ&C=LNa3C6RyB(R%J;L`ibgi z`wl`|`l7hlcn1mbURUbE66>;uTK~fN^HVcxOAsf|ns7Si_Y$^xCCd-VEw3&WJb4ma z)s5Z`VyAbag@6aZA6@SO&t=>Hjen(R7)2?R9VH>NvPu#q$_kYcq0CBV zp=2eyjD$oaWJUH!8A&KxR`$pqk@37w-S_kS{;%i%d|$uc^}4U?>iUlJJdfk}eBSGW z=)|INw&&JyPhKFE3TquW)!}DnF{L#KNzN^|Yonw9J|kKY2OhTD{d*2^URs}vb1+Ez z)b2=S7f46JHEbrKP{&@?*MOO@|FGGZv#l2)1B22R9$i4WQL>vRfp)^cK}6^+Q9vmL zPubZFeL61J4}ArXvQ{`R&(6&O=TFZe_hGT&Iz@?+$DdM&Yv)$rvGC>aII@}E4y^7c zN+v-DR@%!Z-T1Z$X2HONZ_zSVBB41z!k{n!dyGuaRY?BsL-QtvTzez;V4lN|JIP*V z?V6rpKU_0e2`?IwL@I-e&;l!q<%bX{V=JpQSOhnXcf?V+BG#Yo z>Ybx6j@=o+L&fBaM3-}C&pwhhfRNJGb{@t28Ef6kON2_HZl|#s3I0NI67nd;|TNU`cjgLG~=+O^7-8wW&V? z1p+DH=~JU3ZJZ&b2CDoWyV*tZ##1H5pY)8FBLEjryWhpEf+_Wj7Y&L^KWXlZhG6Mo zrR|=Kj;p&J%D>Jh0mgZ70<-aU^Ec!_+Y3au>4^eY5X$t?!T|YLNOOmFS-y1s2Cc#3 z5o}nPlRGl`GhBTHvdrU1Y{k*;Fr2ucrly$po$4Ne| z-@>ecC{viB;{BM$%RkH)aE`A_Y}CS1geM`YC0PSIpQ*Wh=MGuPS0SfIbzyZ?&!niB zs0V7r@4P7MLFYqW0v9dI&+gLdY9G0?13W#6Z+m-1lATONoi!wd9QKEPCpW zM5}4mhh;qh54Xt&&V!@`88CSuxQZ)6nu;gMx3iRS%GWqW^H6XV77})HoZrSdPfN;Y zbUI}Sm1Ddh7AULJSUU9n(08ulneIo^=bN32vkUYNnLavNu_zjLqsYdj(rSz(>AB3W zz2U(FW53MSF>p(JWt{J!OGnT+3hP+0%3C6gZ~Zu90RUk?0D6g~n8;yK_Ac7fiL4-e ztPXW5FaeKqzpAJYGH==VkZ}0Ka|bFQ4D+yqx5nVUlWT;S=lMr->TbB7TUDeNc#Jb41hq1b-Q&1AP?+zh ztDK@P%P5ws_ZFHM5_K0 zhoyH9$~A-;qN%BsoOxmyW+4wY7wof5@O2xYb?^=q-FG5rj1WF{74Y&%N5Qes)TG(5 zPuwV2cuq_F1)2qx?lY-PPHxHy!;A&o6?xmfWY6O)LUdSH6$h6Y}ck&G`+CcnE z=MA6Fn^!}@+x;sbAj84S_Cc~Tawq;MfHdLMU$=7sOyiu5X9}3x>FC1I4vT@&_3LD= zA3iMLDuEokyJq($DJi0F{U9GYX*9}WPh>$ODBE#$ajpa7}%?TgLH3XhyT|ToPsQcfA37&LIWVs+T zgjjFzCcuOb88@0yHARs(Y%iXEcsWEdiN%rU2?foZt^}XZk8S02QDrL{6&5aMNZa@B zeGwG2fdo1hLb8`p#fW}Z;xZDwd-&=PtHQL$4^CXUtiI+1t@Y!`ZwKk zbyB#GjhvBk6(A@s?%-Tt-a|vCg%R2fDIrLNA@&j$x$JKx^w8+w22KH)CC2FjhsEXz zlm`hGxGw;paeiJ~b$G;0=S$(TatL!gx}359BgjQCd^-b$SyM^K;qE>o4HFDR<#Er) z2<;A%O=zpUKJX-g4?%$^j%| z5+TMQ3b^vD#i{<#t_*qGt69i-+Y~G}xL-UF$fE2l!u&X8EA*87{M?=%SD(kJCc@6L zk#vRM4mBW`?j~1!YvRzy>|l^kIXPiUy_a=&MwaSpt?p)KwK*;&CYBAy5)Lyc&wtXe z*sfql)CVUFiV&VX*i+-|-s3%ri&;q*74#(p$&ZkUH=mguNlzXNE*?t z0upm~w;AaK2BrhHA(cQY%KKjWnqzQhU$MI!2YaB{>DQ`}7`U{trL5_duwnAw^%}~} zRD|3fefAElh=2eR36+RZOzJ^YbvLt^NK^^(WNd7UiHxsGW0f(ue3P6fGU=MUX0NJ4K!l|gOtIN`=#vNRR(-n72-uip`zZ!$~RlT;X z|MusWAp&~3SFcJ53Qpo^f{^SuQ-?n73GP}P%I7r}r|0K^9fKF)UZcX4O`&kiJxotO z!pBE7?*1H1I>5)hG#KN6RK}ndkL2hNnVH}kGi;Y7Sp;BuRNt2npLIC#xaDt&R|H>$ z3y;XopVL}J_j27Gq^cOvXZU(#I4&^p9emu`&|svsv*V`D;esg&xKLh-Z~57rt56?nR2zRB>2XlkfMQjwH?D3lu8%O@Rlt%&z3-22n1DY02+2_qa zGK0)C8Bz%%Z5a5pwqvGUP>||{3vAmrBZXdBG``*xAS!5Cm<%_#Vj_@-yF2!)nzmrS zyX)13<8}j*|8}M=n4$wy@1wZm*h_%`j6MXDW((8=OfL z?NKMu5+QkX-jCWSRN4ZZCHK( z{yh?v;ez@__T)dmwp*Y0wJ`{{LZlP=ZTuDg8+(137?(@f{>nTX5}ae*Gm9X5!EcZ% z`R%?tVBiBx!+6Xq*@GH7+NdW#c_sPzBkiej=^kN;!HF93=_)cUc*!k$9BP;&Uk&Bv zP7Xwry$@8-AJwd^*+g&FjXuI)b`gtEP5cZh%&$Miu{#r8lwj-zlB>)bhE&?x%G2h; za3u8^q}v;2sXXG2EB%ZEu1-LKcca&VYWDEssT%+3ve$Jnw;|1dRvqV(G&H}$wUUM{ zu4O&&V1T`X&#L32^xY4o#56Z~%qr>b@83k?Ius!v%kHW0NU6=gr1CBCTXtYk0Xe2b z{v}*|-(DQcL_uPpciqI~%-g2XrWfLdFCM=tp7L1z;t)GM(^J99&RG_JXC3y5aT4_2 zCu`aV@^!tn-teFsq@D-0!pj4J3QDi5o3Iu6%8M5-JYf_DeM|Nd9@XS%$h5iIi>t)! z(cItU7#&0`)+}A-WlJNCiZhdbB*-75kKa9ukSEYo+P|RlMr8K6a>Y(IQK!^FoY#ae z6VOspyS=&3tA*K;&pshy(zmYl@et=Pl(xjBF$xBG8DKgIoZCYpsmgpF;?^zxb6Dtw zYpZ{)3Z~?dVKhEtq*{ov({|*NC%JpT*j6gro6XdYa%fbLy@a`sJ6K!m?meT411QpB zW8IV!;KdL_oOeMiE_!&Mg1CRf#Ze@s2p#wy-+0sK@nejkOyncQ9Xa^evZZlo=jqgx zO@?-qPx57I*K33A8Ji$DWRE}w5n>8SfIWaEJD!Ps^-3Yx9{a6ybgGjAbYw^|*4HNy zc?b~kq`_Gdxv?=Xf3&KX(34O)88LSsDN# zN+(1+GuZ~fS_q_#(Ogp)7U}NO{jlCClUggbtm45xu8qqaA3fON=D=Ay4 z3CRlJ0r_nof0(|C&guT8FkDhb@i`NQdnAT zUm5p-)_n9!IqJV!fd41O`FZUh#YtRZ=RcDMsyn6F*&mpnFtxBKy#H5hF~3!7=f3eZ ze^Dyd=)map$6<4aRl^2*Ox-{n0&0J_)bN5F0U#YHIE1tin_|4rX{crvDmneZR3ZbR z>=b@3;6{nNBkBMbfV+a_zw0F*i{sJc^W$BP0=IyXEi9md*hE4v)*-Ncy&bR%iaSg| z-Tb$<`6iF#XskavnVH0~c{N{i!51P#{BC$Ba7Q*#QUXzrIA*A$!xUU4iG2=|2H+Mp zv^8Nzkd@8aTys&T>2y6iH-)6+39gJcQ_G8Dk?Vt;HV^NK%vmB5Mr?n7Z{N`dVhjY` z+VY^x+TUX6$ekv_dFg$(XDHkeUS1Y{|DJ?YzS1wx^sB`N>IeGzAikack)XmXg|L(* zge8t+(c<{x+6In2@`#~4;2(c)#x{h`(v>i4Za^jt`*4?eD@lb>yYbdG;&wV?n{f2m zRN3T)p(vWX&oHbp(EOAj=en6n5MmN6^rssarl--9oK;rle%52-d*h;wzL3F;@t;4v zJ(q>{q&Z}!B%J!UV(XOlt7iZ7WOdHDGpIb>(%O0q6eEOPRYt^s?uG`1iQgfT4%2;D z%@&foWl02#ypb=W22nTRLp@IlJt*vl_aAkbF8X*?glYNL?#b1^`nSFwJ0IZhiSSF` z;F-!7Hz=_m+lps46-B0f8h}R$3!C6jWZT`hMKUFVY{N&Z)#rFT+w9 zaNz)vPE-7Z=KQJKxi8|VS$zCGQxwM#NwbPeO->4}UTH2~#ZbbFSFYTHJP?O01N1(& zw$8vBxlYX?5Umk{+O4PLO?7f_k*lh9f7-H=(XMlNuhiD6s(=WIlbol1gnbZSo+Lkd zG|Vj1ntl0iSFh;$tf`nArA?$&^!8vOAQuJ`O~7M-J;pBr-Xg|NbkT&)b>q`0Os58`T$CVTq)Xusxy4kk;BOy&mQkllT?y zkG_vI30K88@yNuX7)-T7jsd9~>Or6#F~i7QEPa`gC;fng-+POZT6W=_vd8po$g=Eb zFM9a`giuiS*sTXUi@}6$$=sv$n;Bcv#AVA>-9QA=6k*!SjP&0z;qQCcjdn=0D)l}3 zVK=tt{reK@O<#8~-B;p9>vK6Ycw(R|Qse_Wg~ zJhqdd82}xA$`o~7SXiKR1t}eFCC{|+7Ztl~NajrwC&OMXYV!4CiCyGa3sZ@J9>&ZT zEeXNk&s%8*Ay}yEIRU@Rqb_` z*tB^E^w`N`nD_`qDZSK-boI;I5)-Yh7=3PC;or$1YdU1_dn1FBl@|B{jz@2nZO^X| zmMrPii+}7Z`{7_NDZ2l%eu(w#*@teF?A+z?tMxe;-wQV!juG&2BEy^AWeG?1pQ#fb zk7Q%;Xcrc)$kA>*&wo3&fM^rTfAt=@Nw$162ip}A+o!N4B42Y43r-73`$>IV5_Mi= zdSdvBJyHh{_a7#9ivAkYrb&`@|5o!BeIbv*+dT~jwQ{WQRfr^_*i~Z8BI)vbUaw~3 zsW2iJ7tguJIPmp|S z5$^)!LLzeduqomN-3X}q)8Zw}9mbm>fMWGnzSolbqf%$-?r3+{nnzli_Z|k>A1#@+ z&waoLeAwNT;`Vr}_1#8^U+^tLGOErCc@jDw;ITbP5EVFF0G0n9;1RSbBs8qmwY63o zC)S6?&>py)S?BK$y#XZg5ZHy?Ohadl2Og(6{t2S}>~Mikqhp8u=AfRqe9d+yp1?rs zdA^3Gk37*OJ^~-3S2sG%pSTL*-MwBywl^hiW6_H3ALEo10Bas9!h4<|wt_(5Q9gT6 zBd`gPx&H352L9=d;`m2Kb623*iCooR_FHF()V0LPRZgctT>S_aa$J~U>9>`OnZ{rE zk&Ulk2Qr09E&QgMh6emD1F*Q8HS-Idf+=C4%`8=F=BqID7}#4fLqnV2h@UboI4xIl zr}q3TTL4)K!{f(nJd}9+YpBtW4y%^Dwoz;O(8bicVEMLRX4N39jvpt>*K`>59x?uO z`w?*$IOH9wkY69Nvx6v0Y1QY?ibbq^KPM1KNiW5KU1#Xz^{b>cx%ek(6t>?J8ED>q&3k~S=Vf=mxIGNASVF+FhWkmejf>;R#vGXa8pyo zsk-6no6U1%!_|f0-kXJ(_cE&=F?Mbu3LCcDLRg!N^1vY~fm@Zr4d&%TVy8Brx3enT z#K^c*k6~_Hlg-5+M;hyz#dnm+8YU-IKQ51q^r#KAm?YJG|NhGEk`7#9qM~FcFi|A@ z1ull81ra*oghx!Aote;+K0VvtGMB2Egd`2}rv|&Rk1(k;o!=fP`GTNHs@#ect=&_3OD-t;aNOM($Oln>xV6?Z^8un_cQuB49L52Bk>Bqm6_Sh z!a_nDHjmsZGz(%x2n3#EDDy}qvHsG8cfZVlV4*>2VWV-uyg<{1klAXZ3>1IUi_0+B zkgRXr+OloiIb~%yS(}^|(SfPB%ccX(hB_358SqszVirk%PtOtPLV{Fu6V)N4$wahL zLW1XB_#%9Le17~!$Xp>No|6Is17jlGqef&9{fFg_jvdMVR1|L2{Y#6B0L#=u_vQfs z1l55K13@)ONoKIU!cC{a+Xz<_SvNKp(dB&~Hm=6A2~YMuP%5pZ_7hiGTOUAKW z;m>&_RL`d-7?E<8rf9XyXm;G60+0sT9r64mK%I%$~T;Z5*pC%?Ad;hUC`Z|j_>EhNEV!TFqvSCq@Y7Q zT)xwX*spRJt`%RM9!6pHa=~gYE;8QyHJNYQeyX>;Qf!(Ilv>OKpiJhv zbyEHVBa=9W@#c*|><%Nyq&%H$ulM~)wwjF1bv-k+M_i+??FY7%gb;c;tBypJ;4UP_yubgKY!&jicAWW!fFSX*zb` zRzW6j^1}hKqE~{)ML7WyPRt(zE(FdMA)T}@-@OLN>F&O|%KDr(lG+`EM zZr%+S@~&MN(EwN-&;WcKID(+t&^_4MO(a z5b1|ShI|B)D~2vXfE^lo34IY_CKb4jyQ~)MA0(f(v zugQLH>)pWC+c){|+eBzTtTOsVRRD*{$m}Y*!Sk|?m?!A4Wj}@6Nh$qnw&{uIk{V&4 zqi{Qtu_%5nP2g%q+Uu()A6#`QX1H`ui3W($*VeY_sS8#uFISt3_lSy?y^sCjxjMaD zO-~ffp%S;+YgLHMR4tJGjDR}QMoP+H9#HsrEO2I`RZZ85W4uvjB&7I4CF;rJ$8SM! zC#vI!!qv|k%Y?F zD7V`}nb7d77McB^n!ruK9v;wE2^cD*OEt#$0k9hI2^FR#rXN9PAp;)5+#nuvC9SA! zr($o7{ucdu%8y%4Pmfhw#B#Kvw{nM88tH4Qm($GoQ1@*$dug|B{WY^_RB=?h2hnb) zoX2{9{i?Lvxz0=B3!6%g^v6Ukvj>y=+K+L`<0dw>P_Kg{L%hk4b^T(q0^-g(TD*L@*}!>;@kKF3R^>^ z8C=}6xo8mF0452o9%nn%$628-h~1eAZar*&)w^Y4Z^-h820xp@{Lt9dskCw1z=SOg zE4R1i?v43WUT)cju?F$yv;CU)Oy56i@jEtP#lB(xHyqBrzzm?D?U~FiGV1*ZwV2g~<@ zjq|`M&J9q$X`KKuqvpw{=Yfn}mBL$F@3Oua@#H%om{-|_I1mnwj~{;!%@pl{(GB(w zj-XoHU;GpC3&dfGpo850I`9I%%T)8Ye26SVpG;j7g{F<(o?7Fw zwk(J#ktJ(A+E0~K8vNcCU{iyR1P-3(7s(_WThca2E_y%^9~Tl>R!EXYQTO;w)$bdS zgOo{3^gZD^B>gPV?^@2YNT!6I+nGDYE(kss=}co4az;lLn?!wAZHcHv)q+wa9>7Hc z@(h9ee~^Caf+VTD;w)?f2nhR6;OyTohf>YkvwbUihmA)W4}(ua?l`i3_cAeE%WUma zOjOs=)GWW24spH+LrvXL!c%f7392b9DeNoeVi87Sz(K?uAN+wU2Kxq2lsyN`-f!QI zKxlxqhL1{^w_t+eo|2Zu+|m;0JvM+aQL~V7i~=u5t|H9-JGY{{OiDWBS%wKRQ1aF1 z-@6Ba-OjC_RFt|uBL5b%0Z-kT&_o>-H$IBaA4Fkj-4r`zWUM+H%Pj2E-rQf0KRQi)rZ z*bk#loC!`p1Pk2Tk7}UIdPjM#@*6?y4|n~5oQy>Ch^W6349mIv#S1SsMfm5e=v$d ze2-(zTaGZ(2ETSgeTCNRoob?zib?`EHE|?U;+Z$1h}hVu#2uU*j=4JOEXHa$;r#X< z`(9rklmEN{5zEJ6fbs4GiJ8P)2rDf;kMdYoaWPm++$aD*F&7Y$g-Q)D4$D#N64P27 z!v&9a^07S&fXP}0#t#nA}_fTOv)n^}e_R{I0eWX29@{o&=0My?QVG>%Qp%^WA^TZ~O zY)dy}98|*ZkL-E!=FI^T1eP3KFN`+P2Uj6eBrXV;WUB~=N;L=uPz z;_FEyv?c>CqR_t*(}mGRwb>t6LkinxNLd76Y(c6gmv8{u(3zRPHCE2Twl#HHoIWz( zOx_$k$l`B@GJymMF$}-Lb04v}0-#0GM@^&z29g9N8Jz+Hhny|0ci$>2p$KS@f{^Ci zxBs_~24A3QbOz`Wo%bgozlRUkz@@?;3Z@-pA0{slm;PsN@N)EbnEjEghBP=6lhA;G z6SjFsYQpGkEGV=iz$anK$|%)pKbG-4RiI!+4AH29HJA^SuDJXl-UIN;^xyAz;C|iV z4^0Z?ZG@Mwu~CEf8Bkv2-Uc`xh;OP7uu=$DYHDj^LV}J0NwWK{QCzqzh2Ojg%r4MyB9)n;S5zz}n+A%e%ZDvK=zGywGCoFW7K*dCQ@y_aG~fvNmgWR;GbUBnAe+D z=LCYOSsXXhu(H^4!bSe(XaO>9+elU|m_)J+H6=<~-aboS*MuT=)FVjdQ#kN0AC4pV z6EP@KfeQvOkHkM!uh_#rkrhB92-D()1E_2~MprAlK_U=xIKmC8!L}W2J<{fDl!R54 z%dKhCG-y~PO$QEyR^Nxg+~c>AO+-xksras*&Ls!bg23RR0Iu$zhG=Hwwx+*)tajGT zXW@hmF6!v5hw3~!ILv!!9R8>E_@)dpqOrea>~BmnVe$)V?#Y@|6cNsH18JgCi{A+Z$>)UUd$0FcgJBWt34*?u1YufewKR*gz{~7^yrg z-C8qE5R-iBz)plxcVOo2ho_GJN3U@I`>HMv7Z>7s?t&G;_JcaS;kUwTRfqX8ZE8&m zq>qR+!U96*RPgihJOfp&f%pn!ZBjFvjLaHfbWug-zd)j~Z;70L|KWp=97m4JQsm1f zFRbN=vll9kFiWrCbZ+1~k5Qe-e_`aG+nIR!zxL)~QWA9enA^I-^RzdK*W-T{jX z2AwG#*y#)(JA|k3-9R>4P*9MW`J=0=I3U>BQi|&!>1joy3k(2~JD`D; zH;sg@0>dLbiu>PP2DgJLDdsGK&l%p#&7drW2Q;r<42K^&M0p?f@Ki2!RM*JtR$9ek zK!7O*Ef~Ll{a+&w$KTV38FSsA1z^;Wm_?fn?nS!RPy9aq8br3jLI)id++I}8YnP?N zcG&oBf4)7hKBs1N#o92cUK!q3agac6Gh z7J`Gg(b2v~4;me=ZHaNJ!w@#T865l?ernUCNBdu5Ur03AX_;QU(CGvxU4&H;rfA5k z)c`KkL$DJ_>-3c?rpN1UW~q~`bbLx&=SP5g9+ zxk;5(Rk`+49NGa@`hqY`&U+pTfYny7@2Rs*TaKYrUGOAkB1GEi9NY;DLM z2=#|SG-xkL!7DPUL|Q$5Wr$40tF!gBa1Rc+C5{cBmRDje8UzSP?qGaID7Vn4oft!5_k=#}9Wlo+wo|~V~ zOz{=NfydI{f5s*#g9zN-3V&vnSL51LG&FwZ#MaG+J{3hKC0!vB64s_ei}ywk6~f5@ z=SNo7-M!!3S!@VY{X@ax@B(G%y7vwQ^aA9Mvoyf>10Fta>TDz|Ei7!Y3?)d+C|nvz z0`!#@8oJx9l&u-MjDf~WdT>;;rewZ6m|9d6)o>c)sBQA9YE7Wp(q=~t2JBEGzkWcW zxlX0++`36SUO7Pf40_gwCXZ20yR1rjhbKO_<~;HCCxIH-*bME<0}bzRqOmq}{RHB} zpg)x;NyYdf6t?h;Zej2dl}>=8VIKdFy5OjE!YSHUxc5*VKp%+;hKR*^VZAZj^S@ev zw`2wR`4X*9?eP3z2}3On1OUJV>ZTV*Z*3q!9>L>4CrvzU46&JyR--|KW1ms{ogZtO z)dro&-$=Vo$Y+`_TNR4(4$7)Ai^gIqnn^rka1}21yVO+Jr||@5UwK6x5kOCoeLg?Yz&}LuUw{c=MH^{&O zdN|o@imeSpvhZ*K8ieyyc5AcRKQmy>&*k;IY7@J?q!`8ja1 zwp$e+4z40nd)rY}2x2&^@li`AEPaX7R%8dyVk|*nhuLeZ;54$HfsT z!5cSpWDSWh`R+W+CGiM@C!xTCmr%^C7WoCa(1)!D2#=uG1iIJ}i@e&r=9f)0bt-*}X$6j0bX)D~{p+?HGD%N$pk&bOHMJJ_s*hPnwzivBv6T$I?6-{+o9B(W5jg z1Nzp$(=i+`Pwd>iGv(DAQ;X3zS@-AKFfb>z@JBemu!U8EK&o9^c)Cxd?Qxy_CvE2w z8=GG9yJqYpYn3};dotuv+Qy84{)LJ=JjF^IHglU#JFM+0c9>pa5j^p2!6E8S)W>fk zdmdU!-IJ61q~GCh1NExb-`7CA!T_?u_>qIjN21 zcsyf>st3znuCJ#j{r+EDway#ls_=niwSE6iwoGr=3XrNL z@+}@WC{~>pr`ul0An-R3Zn?{r_TR?%G6)!8)p~Vk*%>p=+&1l$BSa`Lc))86zn!NS zDiouF-VgEd1JG*nyfTS$C}(rUF%B@m{qEYp%pz)eoYSCZ8rN*8HQm9<044}UgS3~% z1TGAj3RhPnQ^-V5R)G2vfph*n=`2RT6I2HqVqw? zBThPRFRzN;p5J8UU?m`s4;gqs7Oqr&Ji@QMy{v)p4~|t1LKfk1U=I|K#3*1GFiLZb z`A8*?kc;v;!|uU}NqF070t>+)vPj>{K`^V`qg`M4`S`B9H?4;}^NAjE)p5dn+Uh|c zsFPv|%8ge25RbT&QZZQ+bD`Gp7anWsdBn1B0cSS_{1_mtAMq$)}SMyu-x14AE z(#Gy1^$@?5n*)V9>Tj$+AVa+yivVCjapPqS6Wn;K1c^i{kt%7}Sd^U|;)P@riCMuW zhX_&AO{B0tASJa7H-JWji_yj_iv=PW2t==GNJ2}#3uYeV<{<|g9eD1QDD+iw<;PI$ z4DP4%#z$N@Fgrbs_7eyS;*Zsm8c{>E7dm}#cmE8!MKe`55(FU3cor5bNVg1`oj>5K zj^PccalI;=nviz+9f5{`s(}F@QG+W8iWVXzmDzkPO($g)^-+t!GJtkO31;>(FfgD; z_)=S246hbq-b&xw-nen_^5f4L_wn;cf`N%!B%^C5Fy1%Xj_JawQ{>^3x%4D`KE!yP zzw{%bx*tFe&5@&=oCwmsb@T-q@8LWiLU1N6O&k#>|GF3C55kf+s|SvW*p4kb-X1b# zrK9`UJB8Km|t_xig@&lAxvLO`yW=S6hi6VOY{|wgF;VIUCR{ zF`h^O++M%EdW?+3?FA?g7>Q|?PPU06A46t?-3jdA&^^mx2#ZPG-#V;JD88UiPSMOf zvV;|n8$i`oKddQy7pWrsX7#z4j+p-gW9E{JQzE?>1a!YP?QUpnWGsdd98F4cLBR_z z=%bO^M@^Boi&E}W`49#Q!gWSpU)UC~7vD~QEc|(i48}Ie*ib|{-zSzZE!~Daqq##6`R?6oK8evJipt8m==G=6(CZ><&71?e(0jNr#DYQ}kPs5Q2ZpSBkiTITG>Qlb8&Yj9}^=QuwZTq^=={YBdvYf}lxav=1I0{M+`D zEqG{Szqg4ylJQD>;IaRkm2LCk1CN`f<2Un0JIO^os!f#HEHteM5K>c?zf zMgQ$Hv$8avD2Or;fe!x>2OMYy?nBhDhBn>oL#l!K6lOha*)e5bK(tycGQ>9!jQ>_5 z44=V7;X)_6V!}Fu@(HCs&H;?`g@7G^q#d@vH)zU(H|6h6G`w*m*Lh_LIl$@EJwz+y z>^Sl3*Y}2ozTdxBKGCZ@afoxfCiU9}G!pnv$Ymy4j(jSCqFVcEA$A&KS_ul_3RV|L z0uy|#Ha_z7M7sh$8N+I;o0~r*CqMCm_+YO167l`?IcB&fmGt$y38i&8JqCVZPVp)Z zb}-8Ty4Mk6YGxZ1D7onZF);FG7I|kPFfw!1wx`_IoS$tAM(Hwo9rG;8SSu$biYuP|(Nh9KyWo{6Dh+0v5@_*~cA zFcS)0-e<@xXl`sww+K0957fTq_Gyx9`X`3(#682(L)Qun2)9jcClk|1Z|@y&ZUD_o zk;Qx9fWiVDQmUYrL?8+W(x$|Yklec7p-M6@&(F!xID<%{^ z2C*v?e~qcep^=e?i8H$~n)wMlk(e+9y91P9IQsJOthte4l|sBl=gkF^#>$upx5VQH|Y1EX!zzUpKj_)`hEe$u8 z?T`ZYs9<>I0S-Z8j26}9!$U7wSy?OwNbB+1GCH_+_0%aMrjzP8(vFCih`2b&UPPRy zAn>NW-Kl_MBW}84X~V|Ve|lq~a|f_T{X|)VwJFDOQCqteC=wj#(j3zW&?&m_q@$yQ z=|`C4vO0a2#uI`3nYa7Ts_~EX_kU&~lsW$`{njrp*4|IZpj%q(i9;q7(?&nq*B4zl z&^KidUm7B*Ff1lxRSjhYhVw9edz9-envYFjr1;bK?}S9Sg9hf2Ywn{DybvO(5_$Y{ z(}l^!Wh6P}4mKG7~g^gx@ zYKpO1_B@Ve@56C2_LIoQS^?*T9la%c68JqnSr-mCq#HC^VJYKVA#(ssFSo7;7nc!0 zLJ%-u+tZ<@&csMT>^ac@S)lgEHjj)&Fllo4q+vjq@PGW6$+~$34;MfzD2pJ6K+H7` z3NUp*_=usiU-dfh{=kB&W4YPcPp-9MyG-BcjN;l<`XffDuD}E&_h~&Xn1TO_ zY2CmH{!mCuaK@r*MF7~;;xcY;=UhKX0b-g>8YQUt4V!L-AjS}D3?;ddJH*Os3OvjX3Otb6M1=Misr^70AvqaY_ zH;V~rD0H4&+T(_JRDecadUTaJL=;~`!yTsm)MpdizVGJN%co*ejF6?Ar zfD6gIgn1soKJE)dW*}EvTOF2Whv5M>pr*mZ7b5MXo=s!O$X_ggL!r2((;AUx+fi^_msLR9CJPxU8+B=I!~UrmemBp?KvmiU#CR!5aST zY`WG9%rt{K`MR;O-Vz`@QHZckt}Z*^Y5wVeb1dwS()n&I6L6S_DojItgC&Yf z{I#pg#p`A{QQCQ5+DLNszJVv6h!CAPz`a$|EVy5v??Mm)12m3i^Je`D%*(|K^(?W=fip$1G?fxV zJQ{XJH#exrq0>`5cW&Db3^>AzMrzL%Nm5B6q7%x?%3_m}z%*{VoJiERI|6-uYbN#3 zGhkeVYNAnUBc|)38M3I`3!MBd>@r?lbXD88+`~x?#pn+3^9rGb!XO85+)6o2$H{RZ zltrXdj253w|2Wa9nh*w~=0M-TBq)R3B_k`Vk(#*C-e1wgB3Oz(@b&9{WD8~EkhHRzU~j6$ zzg60SbMabwi#`AS&2X{ZeQRfJEogtXxS`;i-~*ZyWUjr`1V=)MOc?Ko) zJQOOvH-mR)+bF}`(YYUQUBahywp)XD*I$JPckQhGf0({`?QYq@@%nbbsRsvBvqOIU z8k!v@i&9M-Dx*bQf_#QKv%DfM%3pdg?1_8JQ)$ALu!)_P0|yJ4n4lq7GL>}FV;Q#j zGxtg~mhcIJF=0pxvoWMrkX(4}(YM(;ibC5^ND zQ}k3mSW=5}AM&vs-<#yBe*xD56^vX1et4+&Nz%EA-sCbHef;>Fhz{bah!R zC+nmbi;e`A5clz3Jj08>Kp_yh4?m&Hcxxs)!-)Odu3Ju~#CPN?9*DClVo#i1qnTg$ zk$dO80r~5=3zwR6$|=>p^F&`ztcvu!KecIPx_amgxm`e5SY_{&7x4L{ygWy*Kqy*~ z10o0gW^h=TX(vIucq_zQ0NvO4rxhy}17YX_QQtVEVrwHAo7~)ykKH{K4+lboTtJ1v z4>1Ex0`o#{{X&JzYW=4}8=eI6M7>mz**Dv&mSEa{mKY$PQX$A4Hchj4Pm^Fu2n|bI zPR>O?igDPX?*sWo01Z@npx|`hn_fg!R63S-g&$!waAv?{hy@C@%$|#*e|nIVUx121 zf$K|UCD@SpnVBC_jSUSp$P?wbZEG7PVfXHTf6ookh*5DuaCzzD@3drFB$a4@9bagb z2#z=hmk@G|!ZvO^(a;Duu591E;qM3JHDN9#26}_YS7L|d<^6)*udD|hMp9Z@K;t{4+sS9UXbWoLq;7U#@{b-O#8= z-e0mgcg{yP2Db|@;XOz_&$8?|E+CM4@i9BXo-lz6<^RpB<0yv@H=CdVg!3BZTG7Qk z5qxMEfRuYGD*o%A`A+xs^XCS>>Ia5CZE>8g`uCAzWAbK#Pcl#@Cqy~EMZb$Z25@~s z!WsThZ1OPULgx%`{2@U>>-UCU=(TBRzSY#EBqk1zkK^Xxh{r+%AbRROu}!#caYxQs zg#?9bAgoQvtU)Mz0ZlIoO!~Xj(W_9|O$yi6t*#9ClZ_(?`Y7y{AN&>`y;Kd1Xtz${ z;pYDS*(Y{y9T(eGfjtDDSLErV#At#i8@L*%Hmn@Jf2~*(80AC`1n(L1peA&Ca z_W6GBOw<^{a&)sh$8zFK#hcG$lN0um-w#RLrc6wXW!#FZL3%=-sgZm!sS&eYV7)!N zZjZ^j!Ve1^5(%Kb0zh)+#@;ZcpFiaVTgnU@evt&Hr>kvd4|JrPB!uq%-ExGRjA+kF zT8^mbMuvpULpX-nf1|9>bSbN-tbyTPC5DTtVAw6(Y&EwJyI$PQD)X>(s9}>Kwz5t~ zA6;jMH%BB{?$0yM6HA-))9GtK$pk(aqTI3c!ovGVrao~3ss2f5-;d zoR{r+Lu@|A37Ro{{&eAFY2=yX$9(k_g&wFhIC4?6uE7A0VbSSY1$Gm<^a7NE@SDX+cPh{trqn`ubjfnJ8qkwS)l&ooGpS^8%o1@~fXz{%yiVh1L1!r2IAhP+j{6 zek}X9&E9go)jzK6v-^h!^?QA?);2#o5jA-yiTylk=WAY)Gcg}L7M?alh4=qj(=gi$ zGqaos?65JOXmn4A@6rF>k{kT??NH;TgU6qb{jO?zE_-UY)nvF$bZI7fOW`h3eEcQd zn589&CpZgNM~ln3P`8r8WR+@8yeHSZ$Yj(aNJ*~5rmH*KbQ%BGyN{BjMD_c(%}`yM zyz|_y-yP>xS7VupIzwqcuoe{7^cRuMRae$RLgXecAWp9+fL3k<>{w*oBm1LPi~_===GNAOJGWj+(GmR?LzO<)p>=l-D-)lp z7MLhJNu&-Tu}L-t!5Y`ZO^j2KdSAbM*^P=Gnsu)ik&zIgm{5SB23i&72w|^ZdIv>jgEJBTSL2- zr4tz*o{I+W)|R_(w{3l;k%S6L!XE`a2j>|XHhfl??AMS>I1&+Gg|TET!p&RANb!ES zf7o7k)T0OXFm2fZoM>?HlAfN+%)oj0#$W>TIMNxenFN3mk)Es*C*)i8R%I`}yP#5g z!O+}%sBod2cm2(IQP5$;91(gUhZX~Zdm%LiJU+_MjS%=EQXXQ?e2bF0%n`W#BD6y% z4Fb``LU7yM(2(XthAtP!6BM8T9?SfV{_r>eqCmg!FAmV^XAb^!XH!%5wa;4-L(i-R zXakX_NXg|0L?AU@w{Afi6LsuPy!&U8hB_X9JZ)$rk%Ec6`oaaci1%_hXWpyg6fls}MC3W5Au4b5@wJ(4v+>0&6Qdkc51RQ`fKeLp|q}KkwDYSr9S*Qtq2ghX{>KZs`SDAy{QCz~pKOmh24v#;)RH0q$ z2o@5>1ypIHeiffT-v_ddtcL7t&Cn8*LAx0k=mL|HM)6SF*tH^J9-kBX?AdG0q?*Zd6?h@ z7833J@}DW)SgF@bGxq3kF;=XboK{j0aRwnHX%3RTN!VZ@odEWps+~Ci#Z3!XPkZ~L zJ78CW>}51{?)r>9SV-J){8DTRSD|ymzU3ep1vmj}!BWIJW&Y@pMDS(b|*>1&o8)_;!p^0R(?R}}lv4kIaVaLNX2vAB4RxX{=0P}d@BQ1i+a zpn8WHd_Xmt%GUIj?kvB3iR0JL#_yy5ZP~4@FfX+MbU2nXM9&m^^?xZsA(3!C!dNh> zx_`X0&?(JqIMvnw?k#Vxl|@08VsJ+g!GGhcCs28%o4_)WKlObL8pHwDA2G)jx)X9@ z23w&$A>3Xv&R!0ZXdl7Ec+0(#@lSC12t5+BNGoX0Yd?nJ$k{(>_o70=VVWzV;uI4p zwxX#iL@Gdm3otY5a5cJFuSyhp7=9*G-8+R}11C4-vf_~yt}^X;C`TcKN9pY?2ULur zIt$J#xZQUw{`o`ohj>QroF*DW!9?(hGxo-#T(oMX3WKd4Q5C^eMs8C5n4dX3e8U=? zrngkx;g||Z7Nw1OUuO6O3S;s3Awn8+WTEu#Nb=Bfp1|xBJw2J(s);48Jk~>oI2{1F zLdFCk0wADMde13}cjNSeFLf?-@c-P{^TnQjlqmGO`3G95@KgpWG=OQr+%gRf(UwZG zb2ZGVDu^Ri+6dNS>?FA1eUzZsUQ?Kx0vpraMOdzIu3H<_o!m z>}=E+nS>MsY@&!^In|0}*UOnVK0ez#%Ro1|t-PFDSYS5C5rNDP5-Hdn9S=1qPIM21 zlLh}R_QAX_N+gjn2QfD{{1TVH?OkAPFYD+)^@C>_FfMeVh=BrILXqFpv5Q>T!$EQn zGnSHEoMzIT6Dy6vCGGp57RE3Ef$dePr4{1TG>3ZpwiFEW)E|U06th2w$!lq8f^OQ5 zZZgz}dA8ulL8y?ciP?=C^%Hvy=1qx1k9%9@{>kFy>1r@MK)&NuqKi!HUmva$l^9RKVv5WIul3pSHLlvpH2B4^TfMBcCvbES6LZOeV zdKIImM?XPkU?g}lWdeU-OdG7;)z;IR7iIs0TkOX^W9U;$*`9Z;Ja{OrMhLJA&VqG9 z3{jkJZewN;;WG+)A~yER8~OF;S38XT0g@|~;s5pbUqc~G_4x6@XJ3HsfBN(ZY~r2; z>W7H~c*5jG{OxuN`cu+FAfkaxJ=_~p5tvG9Fj(5z2@*4mCwL;In|{rGoI(>C+tIi1 z5SNY!jlhO|6-g>Yu?TEjLXKp7%$w$K6-q_E;AV8oU_^|!6s*$z4cdRMB{VoB#Ms(R zKwNwQKQWeR{Xqk;%wq2=k4NdFPQ|Uyn%HLCs1RP#wtu#WCFn<*T z0*TX|kI#tt1O&4lmQ2?|f`=Y?cntLSL$8a*?j8_X6lB2sv$7z_`+)eRbruwr8>}g{ zVMofKyTkChe*-hQ=>7v?cXoE-b5O|QM8Cq{3={%t$)~RfbR~>WX~p`^P#t?nAxfwT zd?UyX^Aa@QU0K8zE5dMG0Q=Bvt^D#47{{58SfFtG(_sxEeA>vVds}Y`g*NnhALEC^ z$Oc>CCWYcSqT)vuhS38G>i@DUq=XrvS_(J}&=H;HxQNOGC-1vGM~Q`A24^@L2!b93 zeFAsOg$w$Et`)t9@u8&;H&IkzT4YdgFi6ZK&7_(2*IgCu%a;@4;(ijD9|d{Z${$h5 z!dZxGgo1c7gWZ` z5@=TGu3`SqgM!8y=SW_pt7Sr>Td^8(2Ezu zjB0GgpmbIo3IfaB93;a`2`C8+V>W%!>(@vihoK3!DBQ7^FJA((L^KGQ-X2UTMM_~r z#ARgOcXS{J8`YBA!-uFtJowG5=7SM<{{OF-8xwHq zmksx|!iyg9)!^~8OdLX5|L%G|Eh0cHLDgO=dmnVUZ=PKGHR zjF*%JzGYY*f;eQ<9rH(IxfDmJM_vWA5YQwmAmPB+_>P;XcshO|+eBC0-OFDB3fp5z zj>EL%s!QOu*d%HTs z8}P(>C}EY2#UN06Aab0wJ?(3%ddLz>6n(UApeOM??3S5HQ83bghL{8aCHISL z9BbQWdI=8M(u3sAZ;`8qf=+5&T)wKPgh`x=F|e3kiJk(#@bqYOfLu~Y6!Kk?jpyL; zm)ZUg$wTb)TUBO$eJ20g{mMT-5WR>|!fb#w>loNd7;CxH!V!w(311aVrl@PCo`YNe z01f236PJlFKJ^$?KJFm|MNc6Lzo{TLYd z)XXvfE=kIsfBn!8f`Dt#t+9q-^{OL$!N$fNPRTUfu!qEB6%q=_VF^v8a2fey@p7z{ zk_i9>Pv#Iwbs}Hl)c6gMte2WGlHgC0`s@NF4F+|C`bC z2ap&7UXQ8o{=w_;zdDp!UH|$6!W2T|e|{UMF#*EBpO?Qjfo;;CSCNoEHSgd5HDlRJ zNn$g2iLV{6a(PCsBjp^x^o+YfZsSd`2>bJTtN=vN+R_pw3d9Ci`M|Nq-9QS9w7}-T z3q9T9q9+!A;T50}z%2*)g(xrJt(Gb7CI4|Md{X>5Xe@!eWU7-OqhM2A9T|#+vu`;N zlsCMv+r&JFh6vO|1Pk-Np~FYQ`s8pI7$t`v=3_LTKsyf?w5+tE0#6{j68BKLO7w550Yxd(0jGWY;MALWoRQj@sG|q1IX7 zA+M6z2Yd{Y0WSa-VW6+D$Nf3Aut@dO38}T7h|_}Sq3Z}oY;7zI=jGRs2Xunu`S&Kt zO$H}VvevWeDV;0b z6$Kt96mPKcxR0^e)O0t<);v65`GUNyhSfBz&9B`gV|xRCui!fdgDVv{{m_uP>Cr!m zpp=P)xqm0|8qKm@$~FnuD-LA^tj>{9%%;w{H-S+OakkcL_+qJ*^}75=w3`W`22c9-sHZ1=#5R zi!n=I1`aq}Tz0&0Y~wkBL088_F5b4dc7*ZAQPNurMFoTbyzMN%)fJM2wpG;M>#@l$ zKM?dF`e!Cln7Qwl-F#yHI~9mifY5PA6FpM=Z%c9h0EdegA&yPU%nS|xM9*P>vp8!Uj5g8PRA8DmZ+Bq zj9R{Y`!+N|j^@%1OI|;GuK%Rmk|NkZ zpe%RLFTo$v=slHygPA-4cm+p7>*IJmQ#)` z7y`+qq%Pl_K!Jv+d&5dl?Gr-$m|b=Dz5-=w-q7;?DFC!9o-P{k^+F;dTv4wxGo^O# z4!sFJfpe>356lyh2>^})?k{{-;Kg8#up34wTc5#0V<5v#0L~ZqS)ee+Ts*CeRa*lT zcj_cwVLA3MyaIxl?O|HzqBpQ}f|`uU0e{a5+I(n})xXr&2bjLX0rf^wCZN2)&7T>_ z531)@5|#x64yt(E(J<1^mB-?&$pJ>|vqe=$DT{<8T0FCg)86&c1W7Y{czF%?^}7J- z10R!_Y~APeaYv$i2Brhf{0Lp-Ijs7@s+Hov3KKLJ6GRL7-OaE2{MokX@LtH9Vdx4y zBo0z>4&;&AM?HfcJe_viL6pNeaXk8P10q)T7USY3rnc8 zKsw%cWxjpuJij*Y4}#1y_vQ3!GVTYz<84F3u?ZpSFp@s_;+Q}f{bOIQM$2!2i^{B} zcxzeglJpm0(m;R77<#`W+rXP@aqkIdbX_a!o0dy8l7zEWR;TmBDkV;1j@`JA%5*`e zM;W}Rq%BKO!}d?CtTL|H zWSOSI)Xd)__0yzuNI;5SD9GtHV&Cgml#((oQim!)7I@_jA!-Y|n zlbEmIkP0C4=03~w1V;gu;0!mg*TusHCERGsx--Jz`1s7sxnA;7hwv|^ZBT*P+egPT z@OH4%z}H9-+cYNhh70P!($9m8H^pKQy2n$~gc_YdIrXy%c3)s89fZHsN->g~Kusi7 zKv zXh0XB0`ykJxBKo95xL=W9=j74#N$XPlcR+T97aAediu}W zuC(kgV;Z84D!97)iT@TibELt^x3uI9>iNvji5|5%5^cFKkLa%JoZ@JIlpQR%8VqZ9 z_#hd=9aCA57C+MxXe(&)UH9!PMlcdNkE6cgX#$dz?$wWs$vUyzHIJ`2|LSaA^tfK$ zbM5-|duP0|DK@k`^N@dQ{0p5U#NZ!HMqxbqe5bNc`D~^7$8Wp2q8!s^D@OuSoA3Xh zsPOxSjt?2q#O<58xxWEI1z{@VK}s$#<+9v5@Z>R26fV!63eh+R76tqKidj}n z0iH*GTm0&MK-8ChP`CNB0{&-!mqB{$95#(cep|@L5p8FP*H<`~XLwF>a&qRJan`{A z3?@v_Cn&w8jY}~K?+n8kH_lr9Oy~0wW^nXsFOq&ccAV4v3@Fl?$@KD z>|^b@bKu8I?f*iAGac%JJ*&vaMdAid)V}c#iH+8?)Vr2 z6HLMk-17Y46$R)Wu#Cb?kFtlV39XPTE6izzd`0lr0a%a{7}(PCt4|8j_WkhUCc7FhNb|6(QJWXJhLf9KP+1z^|K4Jg**Ywqt#}^HBzAHx zpO^-wz?qiXChn!qxo!9ELhl91TpR3(R*s+h?u#&J)P7W3mLOYOTTp^kp6#Y4t~0>^ zZE%nzb0X=ax#?L-N|hO`&b|T;#m%VU>BPqui@KTk;srWDc*~_}JjNCQN`E6%*p+#_ zKU`4QRy>1ZRayD8o071w#-pNP2RBAQX1cmCX$NNudphgkB~DkxE_BUY=c{lN%%z2G z9fy3Os&i#F3sQO5`1!$BQ~jf-Ij6&EsWf2yxa00_puzn=+>i4EFB)!S@nCMIjp8G} z@;Xql;oFQdH$82Vbuqd)^IW4ZHjvA>uW?|eXf=(S(h-6zOibgjvOIxC(ZB!>S}3cq zyT&RJ%yb07p$#5%yUCICZ&c^@FaJq(E_$#J?Hrh&m{*R0rwnaPZmt)mayUEvCV7wa z@0&iBm*Zx_KnK<}LULfG2tz-hK{$A}_-dlO>l_w5)HOHO2|w~?_#m0Dt}KJ)42YV~ z>iACCsyv=FK*Kn#4|Ux@Se}9zrD_A)^L5vL4AjTt-1_!y5fn~dtJ3p630bB!pFfj8 zWNRwiWrorBGSQ)L06}f%jvaWjc`pMqP!$E9j_Zog}Cao)7{Nii z-nqKmiLbGt!3l?g6`jWF z5K_DS!NJx*;I6ZxZAxQZU3FkjiemtQvqDzft3&523T`wiI7OqlFErk2mINf1+U0_Wnn8jab|S2dCF#caX?B&*yY9h2OXFT zJNMXu5h9a7;p+Y3?_`4CycsJFq?NO4;b#dV^Du9yE}aG1lJeRae~Yxx3>gKpMETjM z%p9Q-8%pgfjkVV`wSDB&N5y_L_6Vv}ORYU%#eIXqK49NrJunQ#M{=^DK;WC;%HGX> zFYF?7Rx;5GVMzei9rhW3e7SyX+6T-MAP$~EOnt~3?7=wUHH4W9^mTP?=V3N+F71>{ zk(Tr2d2DKwcQVnnlu-c7P^EfvED4f7e2i9A&7Q*0d}Sy{TsrxPgu=qu_Su}QPTr^- zg^sz-Q}-V_DJZ^6O&w}6oXK%9cAHDjUWBh1^y6qskP}tn8$JLIfI~~#*_)<;J;^Zc zjIY;OD%>tU+roE=;YMH5;((JuW!iIQ9~AV*?izmO^> zm%5(+Kezy=F>JulaiVhs8XipOXeyuhzOE?6jG4FpgB;+mhuAhM0f3%h=x1>LosYis z`W?8zkS_9nqh2H>kF9Q3iFH^qZl}+~G=+-?RO!->t0uep9p&*ffj}^lYf*$VwIB)VGqzqdwYOs zzXk@(?5Ca|JMZJO3?<%mzw%4+&{*RNeLO}PkMEQO#?+mnGL-KfD1+=e8(*NAi#ya)uEX}d) z`Qwy4N?NOnVL}2Ok4zgXcQ-ot?)RIg3R%(A!6m{^#K7?ZdAi`lCnlDIzgtogc!G%d z6nm+)?c9&m!vX2#Ebi;quP3RMI>KO#JW0zEKAQ)J%ZEjwK&O@b4x%Fkp>`5W1q(~d z_B@YpOVJeWQD{KKO>${Iqm0NVbumCbY zfO*l&+Ce>~7I#-8d)WzOM;tFO<3pr9TD(NXnr=tvt$@OJgD^4xn-Yd~>o(_5_vL?t zjHsa@1IaV5UmuP;Lhs)HEFs~#^2^jz-fL!HMiWBvNz`hsYQ zxS-OvcARXR7{~QZ`SKTpd;1!KSfv+_--M2fl+q)b3I3x^h~DJVSEUIo_01!6yLtR z;%VKS4M#nTCyt-be8xsbA-!{}_)8_)U8ofZ&3d->_v{BRQ=bDGK3{2zy6c*frH@D* zGCMSo_(kjh2f_{2Fa0%itx7zbKy$^?E<0aVrh$&4FkKCY3yl|sXBaM^fRKEJb8s<6SIUgl zjBdwRp3jWBZ#5e?`}KS%3z7b{j4_x7-} zY5?tzM_lB}L-`6)AN8!xM-yARLm106c*f%tg-HkmmdnC^=IM`{_JffwH6VWsr^x?8 zBbzYrfN6p)AEr`VAmE@_romMs&UyxS2bL&*xn7>!5t_-aNE}GqNNOW{Nsu;=>WZLwp?rxXv6h35M zJgIj}k;`WA53Q1Y8v`TJ*Zf`Q{Q3KjG^3+`j_6GF)nDHreLgX`dKW*xzt{r@JG(D> zU9I~7%YcB|%m8sZ;QL{b@tkXOi-$MhS-=u{qHvS=xd?BxT6^~v35F^?i~S`hD+{NE z$L(}xn2hm)8V8cONB8bYnzj7pTFJ@#oj*T_Kh46yAs@Bd1e2YD^ULh)h~?vu%nzex zljaItLTK7>mLel*B=+Bc=9+iTKwkfYU=7Uy=WSfKxI8wvJf~f_W;t&EwCU;rc$_Uyglh3>IgEMY zuJ#R4cvu7#=H+Y?RAATww4>94-~yZP90{t6{{LTGwj35`SZaZ&^w$s&l>`VMJ{Pot zApifJXt5lH@{L9UtSMM;k-wF+mX!IIs2*2&+fa>j6sxS7^R6dw(phRU+AX;3K(00}0ns<}k!V z@9Ni2Zi0}rzFtCBw)v^v+E~oB`EUvuH6wL%5Y~C)=*Qu^D{mZ;USJG|NWcDebUuE3C|B0x}+5ZL9OJbLIZQqWIC4!|AJLkwR zB*WqW+#Z|Frnu!aV~}$g^;yrL9|gVcn?U*yV5hTDI~UVRj|QF#w=bO-aGRb>9__>G+5NLlrQaT)e&+mCNI1 zZvW-|{zLTilM0kSz z$9B;h*6Msc9yE|W&iWs4(L@JSvS;nTWAI8NY+Zon)zLh?FxAx)flvs}5OO2C@ZtKZ z;vSh6Or_0risWbD%M{nah7y}@^^M%zRTm!#2Hco1zfN6{nmP(h!3$@H<3B2)=4P-vd zLf{~R|4@K<0~84^dSq;4jj8TD`Lm)BewCON@zlIhY!a92P(9#zs`|$HBFot_k+a9Y z!=;Bx_kAv-;;KdeB^MV<(>D}Ys_0tgd7C}Hq$>|!E&zYgC z$;(uPmBf;VOH~nL>lui@h^G*nD5&D?nQ{Y$85PvfC%+-32*r}-fln&rdMusY= zusU&133;!Fwf&9<#)%&l|h^D`77f4G4 zso#TjCFMN6$>7!VC~x4~Y8fDFR{=38>4w;wV}~aYcJuxRDL90Hdv+e*5K9n_c<^Y8 z&20WIf&cm&b)Ox3^JCp#r9Ui1}!;kSJhr72X>#OW4Mke9|g~X z#A{4yS?O_cTP8*1Wn`LQU#_Ck(b#xAz8-#NQx_!}Y|%K{*zmU-qPHt7^n+a_u!VyM zZ_RYd<5@K_!a5F?(U4P0M&M0itM2MFQ3Wyuc?_T+X~ehttuCWaZj4!LEN`-*3m5A$ z(E{PZg*W+Dmx*XyKY-Xk2f!_#0m06k2(9D!)Xww$dsptm_Tx|Mi`so2ia2xew|BiW zwnw(0docO&B_++L>d(?fzMz0nE~YHZ zB^5Mxe|kjbQeE`gzWwe!$O4I?k0niF>tAXPwCk>0MxsSc6!IZIh z2r@m5XQt_fb{*kO1*mu7)?f?Z)_q)R4&Ek`(odcgc~prm^Uaz3gYSIMCXzN|@O1(7 ziF~;2_B#Q@zIp}K!>i;8G6&$0dDFLjlv2F|*-CIROtiMU^TOX3#%KSWb{C*@$ z#fv1MQJYK|w!GbIk05I;yZsx8PWwPw|0hp2KRCE1oOYZLmym$B###dQoj3`+36EXj z6>sl!92O3D@red&q7Y;*sAAK6#cU~|H){0MlR|hZC4pO`HP-SX4&3bQ*5aPKXM7+9 z%E|e*SdRrD@@ELWZKgmi_tj=>-NVoEb?WrRK~1ek=X( z$?;G+gU1s)8F1Y`HCeDYu;O<3XvC;IT?dLgHvh+uA4e9`0>Vy)i{EY9LrRk(o?a_!B4VnosQjznX!d;~hRc+24}2`}VR)VF<&K=NOx4IXqG>~n zw;230W#=-Fx(rsNfhG{VVO*4bJ%NRnwvb-^@C=AY8`gGJE5=^Caf1qh$&oW`CteA9 zPUl^W0Ny3cvLMd>oWCn6QRL zM4V6mbqD^Zx-hq7i3O4w85=wHL#Ixy$9A0$@~%OQaYx`J6tlJ&W8Pre@cB$L6Di=y zl|I@}CwAo0rSZk#@nqA(5+g{(&Hcyjrd^;&R;!)t`9l|rk+)NA6>dCXmKaO>_Jojykw9J+YB7X&j%oQN`(y{2R*{>_o2Yy7Jw@I;0u;@ z*M1)J0VjIxWIqHHC!ui!gAwZ42n!g+s>Q*|8k_#$+qZ>IZmpW@3){;4+5jjZSRr`d zU>QNS0G15t;R>Sb&re|(AW^vT&%m3y^UD`?+pn-lFg9T#ZPTm52&8`22{d$1xc}S| zcjWPtCknln2AmfQD!z(qMQ~jfO0Thz#$v!wG_FniqFjUy0G2JRg26+nwbWwLslJ!U z1U3+qzr&gX3pdzz=BB09neRPtptMm>6|7c({4-;;*NpV**QDTtppVDZSeukVDLFvTF|81Y#Vk11!1P zbKM{;290?V*d0w^9G(^dzgyK-P)_)CT&P7@Q1}~uK|w)mm%l8-0W5*ieailq&?b5U z26pQS!(3Ofh0ph*qVh1rfrrCIe;u^FCxz76I(K7YRA?P&;R0;`3WDjlBSmwMI@jJi zfG(@T@{;wTf(V@ioQd!ihlg#LR?1X2CQhVp!`2J!GO8>5arbaDL{`7|YhM5%=F6E( z92E}^%2sV+qYZAhJoM-vzEwJdP4lBp`f~1Rw*1z+V2_8{pV*t&Xn(P#15{R! zThWl3?Be6%nwpphf)Q9{rQlgmGF4)0zYaRuzFU$pG68Y+@`A2t4q8Mt)eK;hn!uO*KH&7D9JaRKD!T zF$~_{bK2VR@w5sHu*Si-KK|SK3d;Pm(q_VjUbNW(d3}Br;d&ekaP_VniIF1P2ja0q9NEy0j?4H_wc68 zZr;K+ad8oLsSoxHf*+2?p7Q)%8!_aE&lRrbN9%968uje!aMHnVQ!OLwS{oZEo0^{L zQwFa&^ss0y%b|M5oRr|3etdv9|IfsX{^8cgB5h+0+UyC<;w5}dhWZK#k#EWBC+W?Bt z5(1-K5xz1&Da0OT$lA5+y_I>fHKUi@f^QBn^_giR*`6`os`)r+&XwJoyDK*O^H|84 zH=setu9qZJY+PaNhS+HWOPXbzYSnz0@t^OyXl(p#NrwSX=V?-k{j&_FR>C_^uySz$ zNPgC2i?poe!o%Jwd1bGfZEJ39VmOH`` z17`>2Wh^8{8{AVQLAFFrQF za2;U~=+R8(KzRZN0R_Lb^v2*?e2OP0G~&bVU&d3I-rE1*sb}8N++LCWEM2G}E>(88 z_&x@g;gI1w{5q?uvhmo<yz~cW{I)YRw!Ly`!2y%Y;|mPWeg0Gr*Geag9=5?MZLo=ZJD&@=Zf2T*u}0)JI}X| z5rvL$vwyM&{IutB=o6kq_lY7E#-auk`wP;W6=_ii2yuCNn}P>C1R6wm(e3}oYU-QC z^A{H|QiJ$a8iz@vBBa98ofQ~AHda)`YlA~heTj0cZ|kb|uFJ>C2QN{BW5?8Fq~G&m zeMS_)^kxQ!DDJ~481-dZ>-qR7$JU_owF!7u|lL~tp=1S|O~ z-iq+cxY&``ii%uUmj(@IhV$5nPLzt9&BN@?MO-0eppKDA+jrh9mO8MZ`DZ zuN7py(|dE{nSi`o%`9tKd3S}#zND*&O|ZI-3OK6onSW;6MoNE3&+P0{mWx3@;Y%)~H zIN-XCIGGv-q9=cMmQ41hSyh`k$-_Y6Ezqb~F z$_5_#h8W8pRbmqbV|kD-A*$B8@Bo}5grqkPzJwR#wQEYeZ=O9<6Anj?TDZX@QTClc z0Qc)sU*j`3g7 z?II%C$ks3h9S8|>-~m`JBuzH0tU^XFw$Spn2KaQ1=}2-q%8RS0%zVmI`rzB%C-|@5 zsJBRCRLa=D>rt&nyn}OYWRuExDto%%Yf3)9rAsXNR7Hq#AfCc>bqO&YJo1kImA%Lq zGW$Gvo4iV^gCkenIs%ko{j@^$-ob5~C$0bIgEscjy%A*fqN`@aIgfo60jAdTQSHNr z*Z5$z5;-|n z1fKZaY2u)X2{&SBHtaQBfm5Dshc-!t;Np zCTnWx-FW*p;_*6s=G?Z9{P7>bPa9j^wcgzLdM2=(FLr9rmY+^UAvX9RH*0!|SC~SyFEAH)p28}-+ws%7B^+0$y~*P0mXa7wXD)8UXep@CK%jmg}&dmiAJ4Fo1lC@p>5_~4!Zic#&qir>($ zHG#!11eJb^+O;eEz1~@p9A>M&nlzpe(mbuNnssK9)Rc$mHtt)$e!-oZni^El+BuWE;m?nCIVLQa zDDVJq0zTB0d#K`1H?zjFUxnAj1xdkg-};|n3=2!U$dh73<-91}AH@C&(dhYSYAq!D zy##EEVVFT?Y>f9@+O%Eln#=`m?quYrD>;U-_{18&7LNV~-VXG%RVuB0R1 z%-}8?(WU2i<*l@PKhKB$7*1dEyI8M&;z7^3_E*UiRPNF@tR($4@%$y!mQXdnxzU)& zvv~=*)#pM368r6BLU!)H@%q$R$GWopAt7nL%6Y$cEsa<=GrBrEb1OL05&x8w#3Iok zvRuVwXk%#!=! z+GCe~ir}UTT3E&sliYMppat7(^1b;cd3cNun<`3+@)I%clr1Bzw>lIRyERoac=B02 zm6aBROmZxip;8p8sO96}sME=i00;Um7mjdQTC~SlIg+>`)Gdxqv$|ZoyrVGW9~ye% zB!tfF&><=UcP4xAFGlut*DNA=9m>K5Vc>7DhDJf9`Dc~cRTDWX3UBzzczP}(Da#Yn zA_&}5H?Slroc|F_8tp;}fe6f*uLulv7CBYG9phm&bk?D8LveAYd`N#RZG_z|2^uP; zDf)pKcDKgCY2dPi_~sCHKUSp4CLBxpWDg4Y4o|~@(NWpmq2Z`&U5?t<88pQF4*NPcE!cxA7#l5P4B<~i7I+eutErVkAXadGdsEQCD? zh!20D8KcC;!v+jTUK>CoO0`#AojSObl7Im)c3cc8JNl}g{^uQ#+s{k4;aWhzcG@Qh zhr4#oP-av0){`ZJ5Fy+f@WI$eMMVVynw;M>j&|%#mVxOK1eOCx5_JAsMY}oZ<-Ivn zmN)+B5#uv1;68ZhY-d4h^j__?1I~9C-fz2veeIWbc9GhHLhs=nC~#QX&Z-_Mv&P)E z-5AhN6Nslxwoti?aAA9YTSM@%SRp_{%nms1TZfq>1b0i&PN~z0IrH+OX5OLa_M0^t zpNRN1$Zt{8M65t#OzRI;N+B3{vcau&gVSW5yQbIkf%5>dN*qyN(p! z$%;J@8`M^DODMN?!*A=qaLS`?-Q>}?9niYP+A1GT$HeB-_8WxTy0)@ZeEbNC5In)+ zc+v9+Jop9H@uyF8=s}a40GR;K{lbC4#UPo2AIUo_%h#tAqLFX$Dk(`D5yuI=Sk(f9 zKv&t^h&WVC3UHIbtkq;I9L@=y?4w841+S1qhE43@i-0fkrW+0sX*hJiv{iI?Qf&o# zWo55Zx?xI_Etc=1G_Z-kXT-$DcHmu2^Y9E5o;wUrxcTA2qUvL12r)PqGuVcM)rn&p zonVp#OsJ8J@*2iz$xUDaqjiKR$uoZi^c!k_u&DsKwRr@=)dD$eqcFXy?2Q4}7DE!e zjC2z-4O37cuMhwlWw}sYWr<^nIMD{}?8M^ImzG(}x?o&j} zcR1ki^6)52NFa3!I}ptJ9)xNu%{<;W92yuH8IRA=|9O3BZYDt-sBmTYNK;lg3OjA_ zhX*qzv81H)sH~`#x_O$XK%d1QeAYM!(~5WeFk?JlKj=*Cz4wd98QUN%n})AVz!`WJ zqHUoqd;r`n@fR^V;`2v8$vpE$)qCC%4i^iF#b*5d&*S3G0s!n&6^^`(Q?@Y?-Wb(m zLScD^q9_TZM51)frmJ)TA;O-QFVX}%uy0%=k`ugfbS3hkh+pXAtgu=w%eQs}UJ%1+t4)r*k8Jrc` z%gaSz$Ae-5!8=BlFC39vT`&kGrDK$n0Lrn-#@-ZGjR4K zI5rS_`I!u9$A!A@U__0%ddz3~K|xL{1_tbr)do8r zKz#8w`_g#VM{tjD!(kbTd$ZNS8zATpd|q3 zsxx1Xe~CS{{(pk9xWY7u|y@Q4Z4XJ?CgYS<9u$=J1VVJ+O}<*q+|xTrY~NUdQTE&;v8DR^Ed*r z38ZCo$LbuXG2A0Wjo;qPX+&IHfj1{%DB28gBFPTyf+g(n5bRi59LNgq8R%O`A0e5x zj~~@(0*m{RIR8K`j_z$+RW=-~t1RF)fT8=#GDamY2-aZR0&XwOI9+?Xjdalit+(PI za!iLKtYZ*O4sIH`adjTNH{%b*B5nw*iab3$mJv<$_mGJ*nrrL4()220t1xSak6Q+9 z(#3IXaJ{{wz5~b6=KbJ7FcP>soK46c0x{YIfr(gOWfpN=LA+?wt&XyS6l4Yr0CS<4 z_+1I2?(0`t0=PS1K=wfR&yldZ>M<84?a;5oGy3@o&tAW_H#et@s*07{90Dr0WM~J) zQ`mMC7V;5zR5cHb5nbKgNA>l8j>KHv9P-|>l0CT35e%oFWp#CTqx(10)5O;gAdClO z_Njqr9pPQO7|3Nq^bg%Rk!DlPkZEVt%`QW8#p4`FTl>YTLC}ru} zN@N2MeI$GJ+E{?-Fxgug`z<}$Pr;AUrlj=!hi*pMD6%MZ@9crQ_1(K>iJ{TekJ36m zYqCwGo8FJnO&p8N^V{MQLPO$8_Sn-AO=r;W0Uv8VY)MH)1&Up#YS3x+ zy3<`~uYM{{105a%q@*ZVh(s~?^AN=L-`-vx0G;5kj^`IFa{2PzKGsp)V5RiosU=9k zL2C-1E*Z!JCxRO{%2$A4*t$+#zrW5j(<(%8UmpxqxE%5*!tbw(rI3&~a+JbvNic7D zcFuOA1V`FA+PoD7os0{&%{w;4P>)+sA=3QCv1U$snj0m|!KFa1UtNh_pmD#ZMnQlA z)t6k?huy{R#l=qz$^yc)-f?nZpN!5}VnH~-H{R(CP=v()RvLAYJEdLB2CnvH6J|OalpIDNcPe?KkAtc9z}_a6ip(t9eaYnCX_`5RSAD2l!>hW}-R4vp2qlsY6V zhN1@BHsbjPyGzL5TAZVgt4o_3wcB>p_C8Lewt7@jSaKdUF-g(ifmU3r-9;f9vbAtf zNW;R;h9#-kW0?(K1#G^yZS4E`lh~`NN!#i>roW=3(@=9gZ=yoBL9dmf{L1l78|^?Z zgDwuh7kU@T-{kSk9hn|HVG*p@+MD`y7%O#9k92sr8(m7 zHg`mgskvlU#rB=qVzP^V~o(z47v$LXYVZ7J>VayYoBWN15 z*{BqvYpgQ=8-D&wmY#$yGHr!32UmQK(44cHnr6!3!3Y2pYw`tqHH}h;eHPVwg9`kGuQ16wD7?Wb%@f!ws+e`WFk#WTmo4kg96bsAboytcO=Zx z4ROZchsg5r@bbDYZ{-l*ltkD5*`Y!eGb%KUXu5Di4CN_l$k88xIqvXPw|BI8Gte>ys&k!_$ zkq%LI+K;*Z3pz(LC}yzz<=@?aY=3h_(qa}QryKAC_T0KPGn9{4W;R7+D&{&rS44U8FYM=h>y zcm}IUFe_D6JM&ByU{wF9Hx0`CySwMuv0pYaH3fbf<1=gY>dSHThR8G{^DcWKXYA}$ z6&Du=sch@kQY(64_F&KuK#_oe6;KL@Or_GI@?PF2t7bV@pfQBm2Pb_QSU#twnq;r3 zO^~oyTdne3)It{Gm6u6@zJ=tAgar7zw)bYquPLvUO&Tpgh6Kc0Kwz=Z39o?j81u%B z_d)YH_yLC(LTTU(AuX-Wi%7vtn?1gWUL)rZd3kq`N})T$4$LW=n+$2hZ3N*O?x7UF zIxrFdrGuzSW~$<5LoI`Crzm@b7?>O+1EZD~k>@vW8s>Y-7=>=d<^VL;bp|H}$S{@o z`VVL%(L==@F@!t}Y0ThT0~ofwEy(B3xz9dOB%~E=#cH?1Lk*ES!jhuM9WxJ*!y^c@ zD0m>k{Qz-Jl7;Kcq&Gufy?^q^%U?nu$>0s5Bw~`WlWki%f?MdP#@iEY%Y$NqXvg5g zI=QekJL`JvGFGI%3Aef|5LkZyK3ZwAAr%m~^2#dl5AC4esXemP9HApnxxdoiG4+}j zV--0__-A$A#JY#+33JVwap*Ys_P?Z^f`Sfjj-cg_<`Oqb zAiK~6`D*5Fy-gnW4)CXQsfAS&*2DnXs(UY5hpGx%&Cp{^z`%@sKGe^=&PTOte!gFD z+P3yK1wZ2I-?_v-xIihg%2S4?{HWsXAP0FK0vFjFAvU91r5pd~6qYZoGxJjrIey6_!1<^Q&Ub zSa@UT2NMYIJkPf26)ycdV=_D&Rtx$&v>C1(d|_*6hw^Ru$%T^yyGNtecfl`GwpW>M z%au~|*T(OLz;uLxFK7vO-o6Ki6oaRDkSj<5pcx?=uLQPYgKgj)@p3{ep2z?}F8l1sJlm0CFi6N z^cNbM#acwQ7a%U?D;U@UZ1Ki;f}e1d5qovC6%OLb;pDCjt6JcO*chV2hje;se|qZ( zh}@B@?8lR*0d=h*QcmZ-fBLj&Vh(a!>kye4mq_XliM54IRsM>IBK>4MB7ajfz z8sLgvCnv@O{7i)ZjT^L06+v(1K`ua0cbudRVb+>qNjjT=Gj!oXyqXFqWRrGevpM=* z`>A8v}9lu zyr#myz|6&!dl`1~oKm2`*{wxaj4q5l)-@6woXtEu`RB?Rg0J`EpvL{duyU)K&X!Bb zQ0A`GCO$qtI2#a88wc6By0(Mp52~mI2=<1eyxiQ>1bZ+zQ4eEd9SWj!q12jm&qH=$ zgpRC|l8);-a56!m!q68S%>O@#FE#9U-7a5-%?YL`!vE@3>Z#hFxABG1tzC=rYj9wo zZqOM`CnWpT6%|`Hnb=5wyIuI~FyI+&csQh_+^_6KZwdMg-VyjSKPNT+gQue-e3?Nw z5Zi&&UK4^e(#Pmo=_!FxXK%$waPyQ`6sINB*Q@gy0k z%fRmgcRo_d?iQOtW=!TRd2cGB@(1P2bXWXjKbTAS&d837BSZtVR)9Lj-ij6X&utm{%@y76JJsns_%y=WZ##L_u1@KP;~ z@CTv+qwcx6Ias%_2tXT`5zv}6`>k*1Erutvt-@>9_swCz1LmblYb=33U?t80z)y|R-AN5Cr06jgn4y8k7l(BDzVm=>fK8tg+5)Xr z`13%Ju{57uK$n4_oZtZ;p!IQa6a;J_e|(}f(*SmjN6+{3S#E}YDDR#)JqDxh?AbV% zhLFQ(BH;H@C@4sQj;Sc=gxmVRUfr3?5;z6=yu85@PE_&*>2BtsvXe(;XJ_m;6{*%k zBb|kQ8G<17g(re4G&JL>NK4_5250Kf(LRtUwRX_`8B{)J6Dx_T%Y(Qd@P0{|)93_K9};X(RwSuY#Fp`dGT z#c^7(`3ty?mz|urTd&<@qV$I%9qugPNTG$?DlDvP5E~)-3#QAu4+A(iZ~g|eQ*rUV z?Ik@E&?KOfM&thSX7JBi7*OdL^tM?@hTu{%FnsQH3Q})qX|Y*(sS&?rL%48d4;Yy5 ze!C{hs~iwzUmZ4GrSu0A5XBm03FzzKFH0HK64#9T(aI%wH0f#fzxfK>GLm*2B@GYO zbDDjKhFaUDy@IfFFD$isr2LRMJaSS6A$0ujWWEX0*2)qH_dLEDa;kr+ZIw?2U2Weo z9%5WOtT~WSBqW4X$6tVFkambG3@1MsnFl4^X{~m@dui-P1082~>%w(>CR#`W3{$TR zWrpTLa~oe!X~X$6{~IsrC#`M!Nk(!f9=K;y5yBv+v8G(;!NwcMaD<2i4k~$f>Zu$> zy7sN;>!JEZ9L^vvDM({W<2O{_?z!!3hT{1yR{MfD2OSE zY~ibGE?4`N)-9o#1glXX?B(<4A8n)&%>bt@X;;mTG9Y?3KD~G_f_-s7uc)} z>iNA&NkKz4GCV98$+b2knQ4o31RhkdZOC;;jsnY5`p_pP)FhLjHm$U1(2-vqE&W6&5eB0RtWkIj!q;R{fcLVdv-vO{s?(==w98yyJ>+n?jsk#w+`i1AQN9F_DxA7|DOth6 z)3UqcAG>8{)-En?e6pMLy@Eg+lfoO+-EVwH040ij9wY%$H>G~c`Kl_NfW3~O6r)Dj z=6l2Jgct|Ix%Tr2ZaXs85ceC{k+8dhYt+@5|H4#amq)Dc@WBce_A6R18vep1>3SI! z|G@>gr^?61W*Kwi`~LxwFggG)5>5ECMPhxo(P3X=qmkWP*P;17tnx8wkPaP~@Kj{{^G>0{SsDY(e6T3T;Sv-R<%Jjo-F?J7~x;kykg7kWaVc;%>gk>XqKze%j07)Z=6# zfsXFFIK`vTQKBt}Su-XrG$%6z%M<{fCpyBB!FS10IWB2>Nq{1+-Ue>EeG~4_U$Hi= zL_;M{9^$TJ9fyZ*MF_6X-iSR6uw+lqHg7@f0obp7j8Z6o$)en!eV?5DH&7oDeWxz4 zg%PR?yfIiMY()0TPbiC1fl7vf-doQMJA(h%Q66lwr06XB47(y)|vEhX4^j}}LX0|>7 z0Rh4cXe#XLazw$(T0qrSP*I6N*Vd7;4b>FDJ2-#%?LSD6BnN%)!I9_Nct{z>oQ^On zoAXh)(_)fV7XY6o113s7GsUevdS#WB!QO}YkP-vCj-;e5J99uO$I=0E3{a<6uAGAU z9DnOrlIZT;u}M~1yAw0PhVeW-G8$MkGnSk9t zG~QhToB~fTw7D7bl-t+Q5ok>>i=Vyn?JY6XYS=wNJpXAes0j`yx!i{rnEUa_I zYy-o3>(CRi{66|G2B(_JluQMdzu_$-kf5^%O#^5Hie*k&!;26p;Y@_ypbKAsVg#hU zmsuE3C6IXW~LO@t!Y<-I{WHdH@#S;R4YhEY=VeX?dF?B4H)+6pL4XAtO+)6hwJoLOo% z0Y%m4=&F-&0^*ptx5hr;{|X9##YnN&*SEkW*p4^U4VXp#8Pwk5SKd5?(EptU>f(i@ z)Rq=_Tf;Jn6POtMR*xTtClkr4#i@^b9MgV7g8+Lli02?}qa}VDIyOIe3#;>+H~CNh znD_R@Rc^Hfh>k}TZj|uefUyQFSCUGQ-VMIpa58BT(_mCqg--Z;ftfC*rO*t37U zbL-YO&;_vdh7`r2J;$=cHB2L3>`b0Jl9ZZjAtE);Y_$k$#P_HWrYIqC3DjteQ!r^q z#Cu&yD>=FH*%396m^~h09rY1g?K8QqSVW@r#VeB0Dzo*n zsTxKcaKx5K-a8Or?o~E&InQLwk6ts$b_$q~kiXme6(wv@5r2_#Dr*$>M6!HvUGhT6 zDxUvRbBQ2*Y#|H{4RPB=zdOhqs`=+QjAX8dqKbu;70Mo1&$YBX4h_`<3FOQfUL!qt zhC#!r5PfH84DX0U;pHH7Y;H#H0^=Fj5#e^nJHmHxJhvdxXK4_YsCaR4bCZC+wssPX zf;eZu7v^VzBoZDXxVd&cBA32+N}K!kC0x4B%EF@c-1c;KNJ;mXrlw*Odw-F>KD#z% zR@NzC1*W;Kud}l~fKdSCMr~A7Br{Xl1<|rVA_gr#SnIsJV4vXfmYTy)4qrsAR=K=2 zt_V(S)m)^LA1^egs}2TjiR`%A^i-Fn&j*|>2gl^_X{UTx2&edM?JqsFJD-{WmLj%o z8&)n$u~{9S@F1mIe}@0+MNR3%_Xm%ezDK{VbuTW{w9v}SS~!PmU-Gf^^6)z*XS z0id*JY5^GMb56yr^7619!mBN(f$Pb8Y%9GH;6kMNt@<8I7@d_=P&jDYhu{Mo!GlR074?5 z+z5Oc3wnC(z-t3Ay(o(8yp^I(1&FL(D|S0^pYRv;!_MqGBm&P@zeCWEXVGJIPqv9K zE+9s%%koj^E-)jsNpz{xZMn6VKaH;l)$n+|BA!CU2bU?72A|nMsc79t&hL%g;BhY2 zg7Q4Iu!M!jz4)`zn<2W#=^ObI)dN6%-&T7rkQzgZ%|OZy2%yL|0Vbi;ng$TecAUG0 zp?Vi8FcTeI`LNu=eO7M+&=5?0;B9EoOD;6Z9tP=XqKu39f9QG-aIXJ-Rg?eeV1Jcb)58 z=bT^X`_{wRtOG63B#>t78V-VoHJ~n61 z`V-IR3VNmB^}(bx(G-chS2Xa(4Zxdd$LzDX0sedgfoLRNl4+aDMi(s(?ZR(ky@ZR5 z@R2P{m41Fq+W6F$WO$>}M9!L; zUen%EY^Sephw5I|opIBx%1XtXHDtcBKURb2(H($gYKeM;ND#{X0YaE>@dfNZ zAXiPk`JI)&YopsshUeX3S^yf007mHFP#1^e|6#i|2#3&G+;IeVW0c%*|AY{vZ^*d- z|2>1|52rG)?!eW5UM!)9HV?c7T$!lR0%kWFfiwwhA=o29s}OH0MsPfo^O9W~>)*eh zFB?ndkskFFrf$Io;WpPaNJ|)bogLx%_&Z*eVZwmht#vHwp&-}{06qQvuh1w1(GuP; zAL$S__8Z}BLvJ^;-JF;Ttm6n^lOE(;_my{@tuw>@tD({8)w&_=CG;ZE|7KJ?AAlVn zQQcWt!at+oHV7l2z(`eh^yUw~kCXf##bSS|j^erdyw#N}2fB_3K;wz+`rlkB=gSEJ z?c^i{UJJTE?SB?V)4L}KNtV&5G&3DxppKH1keKW(K{wmGmEV}0k;9t$14sn4f;j~R zpHa1!6uh4T3=*zO!0XkP#2nzFC<=6Z?X1lm*OCksX-@@pH+)a$(YA3mJxT#wx zHPh6oKOON82ZEav~NlN*~h}nkJEfHWMLVxA=g_d1^IR&4_fG0g8 z`JZ2{?Va0HTo2qm0e2LV)@3hjV>UN8n>nE2@b zWlbWGm8`&j27X_jkhzH`h#siFGPR`;EpXPph-&~q@AKC8q`^>HIq?b8342>Zi z#O#Zm2!VzV==e>&w_@Pgy!oMV)_!C)laWGedy6hcxEp){f(o~qCpzBq^IPOBD?Ao$ z5sixPjOcei6ovV1oKON8hd#QGca?;^jTAAh>mKuvgN6kMyZ;`#nPVw=-~hgV)Sbp? zAm07;>(?YDz9`H9cby9XVUJ(UN6!v;MgRsGf{p%0|GeYp0LuSV2V`^ShFFeaLUi=` zwL2OQUtF6?z=hGh0r)E3U6=y$eI(vF=)?_NqfF9<_z(R7!0Zc(8om~m0aa+Icw%ApcEUi-1YAMPta~Tgh^e=16-IZ3N zlh@CnLYj!mX*f^2b*s;pVE$42yRI>a=tM2r-(em+j>i1WdP+C>rFmQc))LUI17hl& z_#-I;@&|V-6Ya)e^8FyMp!7$|0SQ^krKldjqz^ilqY5k_Fci|0GHGwM(ZlKOuri%} z+KJ|yrm=Z4C3we3Ygov?CQKp>p;_b_B$Qb5h?T}&SQA9YR}lnmVs0x^bc0w`sxJdu zHhL31AXIn(^RNI@2mvTNw;tS)!ufi3isn5tu1+69=DODpL<@eh^YhISREUSo?h0Hw zb6^T0Il0~QLFM5Gpe8QLvJQ2tpSQ!>?#HJyd4PdOd;~5rV$gCpy>0gm_Oa<{3%rPk z*n9uJrXbf=K!kJtCnYKWW?f5dXu!xEr`MnSsf)>q5o8K4cp#iDY(qN|rU`^qCsiZ1 zk5_x%?NwRApo&D^^^BuCR*`awjx={trmg@!&uRyfPS*QhQ+?7s>7!?o1A%5Er#n<0 zHz?Lk_#UCIsJ2WscCDY24_7NX{q%nI63X9BA@8V6`BEqUpBV@nT2|&U?qX_xy+$_{ z3CFKAGKMl;Z-7rE*fC#J4dMF4L5}~y#AGL&$`gx-?xKa#xT5~c@1GPG>mcOhJmhsE z-GsLv21Hh5URQ|f1NGI!!j-V2kXQsWG8TV* z{(SdNRcoWIwzd?Rs^;Chw4@nxQ_mYe6mZU+-}&_KNEpTB@O*;&ch3(Vw2rAT?)4`zTl2#X9o?0N(9H%GauOv{*FwN8zRB|h`XCTg+@gzRe_rCl4;DxnU`{u7?6hGI`;g#mwLh2hXff%vw+Qa!~vBIv;n zeHr^NN*2R7ZDQM=k=Pom-ii5$(C5 zaDil@r*~!c%aOS#utN4yP_k^Kq5|_Cim2?frinsHaoSl>8+CPeBcTi|6u2||7Ll_* zqa;t=kKoCc)wx%L0ADCupv%f!Whe^iO+Hx8K8fj;1T?d_O!^RtYM^Ssqlia!2RVCx z^5CQ!P~gWgD}z*uPm*;o6=FGtv!u@TyFG+;Bzk}=kgy(z1CrBQd`vi2r{GBc?!&n4Z0oG2^%=?tJPJnh$AD~&Ws|)3w-jHQ(RhX%w(`3P?6jLe< zkJ?UQ840)dnWo8`RptqO$JLG<)D%&*V>rV4JSQ(WW$W zVBTgxFt9Z=Jm7Dd#y*71wQI?^i2pyDyohF`NM=e$A#4#}URT%lUAy+vQ3+*iBoiJb91Z`$qI-I*6sIvoHG~6g`=e-_SpO2yrgKO?@P?`r`ZT1|Pq6ykw%3V! z`(LeV)E*|}1pQoG+)PIo7jdzuN6Ml%QZuTdc_4CI!a2x#(a*E{KS);OejVZyfTbMz z)C#OWSZ6f3Z8D3(t+VM_5zXX$MzV&!7M`1s_h(|FWFqAKn0q_JjCvbdx+dy70IzZx%x#1Bv zCZ7K#A4{C{_iy=WhEqkZ>hde|dr7yA-z7W$IeYFL^b&ZQj_x?vLrO_Vuw75s&|nKj z_oeIfvkD=V{Y!FtAXNGb(n4y2S&xBUE>2OAZ9WYQ0EQY0mJciAQWa5eeMgP>3k;=kuOKo`8}Q_$uo zcHNyd173`oC-*R?^?}EvBw~}7&pu9_1s=z z0T`+S)D4%EEFwps(tSR2bT8VSksua_EH#j-kg=oHXlx!PTl=vv~!hXV4?{*YUZG!&wyK;zfHE3JoKQ_fv|mYJTujcR7`N60;SVZ_QA)gR0^Z zd@xZ8yD)9XQ6E1pv`k(3O9a;&bY$qon>{&opgn3b_~!KXsEirlC7{rxLMtPP~9#b;|n z)H$y+P0juM2|Fn&Pq4d!2wm8^7||`~K9`}&9Y5o?{~W)W7A1)FOPA2=jBX}!%FfoB za$|Mib`a0tAJAD_dqgk>Q0CXMu}u^k3~5A|Xz|cO9lkk*1#_3Rl@-44pj=V9?vxZh z&!ebe!zT&dq`SfZ62t@fywNa>We>S;5A~Do--p^D?BJsYh-Hugg8>e|7#5`G$uWrT z_@)eg-vi4q4DFFmDl-i!ayiKuEL(OWaIKy|gL1?FbW1Ey4mWMrPB5`3|8H^Nx4#UZHAFmXh8vM4Xl?rv6%rPY3X zA}|P{80XqGFx!DDLnu_X6b1B+e6|wX2If#JgAtg7p=+cg0jRKbDnt<}lD3*gG)jzV#?LJue(=&5Y?*hgMoMew5YYWDVj*Uh2J>!s*F4(F%hX- zU>C7{OBlW1232czOjmWapVx6ucXw>wSW_YQvZbwzy?5`yn?&R#OPuzlJ$h4zI}!-5 zb%hBygP+r%BODCT(Yl#HGENDX{&RcP)v3E6sz^vs5I7#?HQVe1PkHRDCb!dWOepiM zZf1%Kr%(6&3{G87o{@yVCnQGTJnRG+bdM$)8kAB7xQimli_pKh<8g)D>`;m#zA<1$ zNJ50pJU+h6XML?f^G!UMxD`k`V9*0Uz|O{2Q*t_?eq@eNuz`y9S({I(v)P!@eq(la zdNbXmk>L6fdU}>%rre)DJ{`9;){-@FqGkLT?0ys|g?f(of}Qq*67PXKIeM2JKgI~+ zt2xi|gb(zut<5E|vFVA4JiAz1mS=0TW;o9TuBCQ~roXj|Cn2H`cSdU8EBIQWLtFau z2LXHV6eH#x7PlmMS19ljK=}69<5*%1x0;;1;$(eFRrQA6esY{wxC2o6M%;*|LLUHS zq4^JHFm&&R#w!F%{8tMgQjyJiBOwWI!6S>xWG>wJS0Givt6@j`2fz*fEn5ykKgg%J z;rylJ*RDP5O)N`KCoidi$ZO-K9h!eGAn`l2R;Ah>q&7y2oF5>MA#qeCP0g z{3hJ{;Bs-%Kwm;c0{9SnBLQ6zmmyR%Z)$7HolNtm)&dnL)kwE@xr%aJblb;6a|~#dmgR@;)ELy=qH3 zci|Q3rr*>+dYZhvwD;*4CY*K`FAy^3S&%fgFE3U=yAMs)cez1(E)0ecIU-UJmleQc z42ghPndt;$7g>mQ7K@F(QeM53|u#0lnv6T9iDf#pZ?H(M1oFvp`n51$znDjk4q;R68_guN7o zTFmT*6GQMF@7$T?QBD$-lf%qEf^!8*zutH0A$sb3)cy_UQ6PfsW^BYlkdJC-fdK*J z0#T1dmhRN=pp*X9ns*z#J)qk!!`~6vmsk?K(EwfV=Q9#xLVW2)hK3lzF{6T;F+5ue zBxbKDOF+C97_qZ?$e$0oc24ggP(Hnr+>VS)L?{f7z)EvLiyKg*UXbh{+EDoT?A- zX_Rb~V7&x{5wC}F9|zVnNZunOcgHqCcHbtl3neee>@}Jam;VIaH*DlQz>qIreuB`R zlC}F>x4=D1REOMXvBDM!@&B#bFW4n>emJ?fd@8ny%GC(ObLlaIa@HERBDQcjWNnRu z@deU^7F00KMmq_%_x$Cd z?)8<=yxvr#@G-cWIaHHR9$ic-X#m6V;&ykEshPUsABwLC{fbbSU~bS%Bco8ZE-&I$ z3`>yBi&u%w5r-grYexo}XSxM{1^`Ay;6DjhsNVhn8vktuP9dhu64lM-xTk;_-gtB9 z4tYeztA-paUNx<7{ndg7eg7Atvu^oRzL;Ww#*3;|Y&pjSibH5e9{352VrXwhh!qnp zPCWe0@KoRfGOwJ&%n0DB9=DaPErOZ#1!GXP2%(%nl>L`H5(yCu$p71e*QI7Cm3t?| zI^*MwRz)RJ?}Sc0C#+@AxHpa99>+Tlg)5Y0sDdr=j<2e!0>_O*0-y&1!LK-a(kT`q z)gM}S=p~`Cq1aH3aCcH%Vq$?=i69=s_kPkJ80f5CYgR`*jF0a@ogp$v9n+SwZxP@j zdTgQ9fPx8rencYXdvDjGvl2#kdPr|}+qB=~3qm^(q6%a45rZ1{caYxVq%byN*SahT zcuniV_piIDxp843`x|d`Ma5~8Yvqq0Z`r6?zmbnxO|xOI)tNR5ao4BC#b7JZ$8*Wn z_U=($h|sdd0vpcfe#&B%mux&ACVzU<^^`=-B+no4!D`aKfe+5ZLk?zjiODJ*PM~*? zU*;YerbLG{;_6us8?*K$i$1+ZiD@5-+nPNtP|TsH$Fjb0&+&WNBQK!tN~YziiLk$L zp~SXJaNz_7%i6Q}9HSrdM?@ryxtQWDr!rufGIl;5wj6y{)Oj1P{qgj66p=0zz`~@o zdkkG-CHEACV^PiB0BN_v0A?601OWkuK|DaB^*rDfmJ%d}QVVwcz?wi%EIU)n2^vgG zYmYRz1-uqeCZ@eKLTDPW>WmX<*H)mgvq;m0oEmAZI9IGLT!6VBF>*K~NguJ{;}*sE z3xFSvV0g<2B`YD^1E+~_(;VCB^2{8AMQ+U?K#&N%CqdEOF;W%97{ITqSinDUU{7;d zDvgykBRp>>Pv+?gfCR;(9?Ad6G}LagQy}WV54Zh=#|EN}S0nt$1}`fK1uf0{)oyrS zA)}^u`t%yYIwRN3pI_d6d;3`qH`Gu!#78qXH;dJb*fKZwUjU;YTyP^WF#Jza1)fH& z0;4ot2)ScoWAhwTwS{ihoDqu$G!fP-^QFN6JJ7v*L8=zpkp0ymUIESd*cj0}&6t5nRLgMo`8kP5M~wDSfx8!zF}@%i2Hw<&zUa z5~(k-;03O?DTtR`c&i;Q#)9*a<;bf}G zM@K38ZQBsCtnl6#0{P~{Z!*|_uzx>dK2Hft;{b#wLv0sCR#!k7K;nj^MoM4T0e2{R zB9A@6MJ917RwYgK$Px5r>kCAK4Tc{C-~lpOFmc%#tKcxPx_Ghg<3}P?0MdTRO)D$& zt(YiqOkrAXY0(k{;(X88$Ova6c$%r6BK1mXnO!3OdVo~XO?D1|DgYLAQ(kgBe7FXh zDC^_m=U7FzILi^AWn6qb1OiB+K)-bKBP^t)&z>2d z49Zk1L88Mew{|FgTU#UgAG+8^H^ABS%4K2)-1qO^{hXQ6O{)0N-X58lxXD1`bki+a zecFwn$I)Rj-skBt7^O2fQLuae=CFdKWCx6y=tzXC9|XgbYkwEbI2ySbjDNsVdVuhw zj0OWx*H4T(`1G-J{T_xeW+#R!z zf9~;O`n~}@6BAd$g%T(2c=|8bk*LIl_ZVcma!5&#cy|C_T-kAaN1$R=(v%kG&HiYF zC9z%*(-b}3^i5VD32G_VGo2kT^7Hc7O!cL@Y6g9W$M&lTHKjOPWYcbbDkrDZmu!=h zT)Y$?9&Z$K^mEsZt1sxp)obB4w2?`f)AieN#L9ppUqdD9cTWC*>Soz`!G&O&7f{Hf z-RR;)bc1G%Ki}XBg1(?Y1UwA8x&jN1qqcl!B)s>Q$NsC7!G;d|15|LGjrqVJ{xW&RAVeAA!OuRnU?fwXet3p+`I`);AZBV)W2wnQDwj6RE)r4tQPpWkhN7|1sV`CT3oeQ`+ipU+SRfX3WbNLRpy6s096hvdz zYO`UlpUdi-nl8U`eKW{4`H{?Zdc%jZDoZ-v{hJ5e$XVH@`>fB9y>zYlGaaDT-u7q& zHcbMiegX;`q|}7z628Vy<(@kYGZw96anK`^lhPNr$s_deX12t8GJpE!21zDRf9~!* zf`S?o*1rH7;U*(0Z6*&8s;n)$EP(Ue#Az^bTV%nP{lphMRx+RkYBfZTw3 znFa7soBd5nUl19Fw4wKMz98q_rEyc4$$N9&!=7e+qsKJYxve+G)M3KcFW3S`1-C1m z+J{!Va91p&SS?6OPELikZ|d-$Kuz{B+1Xr~aY4yBq(pF-Qj28yf_Q!aAMGys0hHU; zako)hXEq*WNIgzsr9uy4S=kYF^-9DO5ycvGjlv*{zWp;+6RqU<&H?VEr=L4@svqA4 zb{IbQ%M$7#+F1rUhM2alj2^u{YsN|L#hMVv066#cbGlcm+{)=Z;GilHK!Fd@)?AHV^&ejuDpKJFbSCz+hYhee z$N_yIx-;5%Pc%+;bI(%G=g$$UiF^V2Ik4d4d_#OBzza0)bWr9VrWLZ&C?P{KiSxB< z4p0nS9a#89%>{P_-!)eU|DDSFFsK2QgOe1Yny4=6KjgRU-nMO8N%k5pWv#6k|6vjV zN6qFEa*R^z>Xf7@F|I(+6z*4)Lzlw3h(w6-p1g}zF^{hjA5F4m^oLn9OTSfO}( zfkjR|r1fT^be%rWKm@OX=G9-rsOE10PC=O|LYtntLCh zxx{Uaem$by4C-$wDIibL3dmgrFi0949zNG8X&dgEYSPuvaLld{`9wVeRBL3^36`Q; z<=MB?j|2(d(?~1XZgz5LEalASLr5h1P>`ZMj4y{eWowWdOQ}P3d-@aSu?04X80c-_ z1wLzYneMd=6^Bi+SbQ_S)rOgiQ~hQ0Q96fg930T+lJb;1!rhWf_XBrVGN;2%8qX5VnR=d+JL&o0YZHI&4l^HH6|;#+xA&+XO*b z`_}UamqG#v&%~Ir`YUqTnHQ|z>$WrM4gcqF!QD=g^0AvrM}f@Z`o>m8#fOwa^cQIM*OVM+gcA z{qUkK0r9mmfNA>rU?f5N73j6^v4uPr-$mATVQ#@gM*^aCH#+(&3LnS$+45|ysDVO5 zQLOZgajoS~K7#k^j%DZ`JXGt1Rc62LXu~OxR%k)GlPmg?cJ-q z^=P{lZ-;hzJJjoGOGnPVVLlUZMwA&Jh`?|zOTgixH`T>kUJ-w7gaE)FkK+>v%`sjE ze2<+ZL{8R4rip>O0Y-K}LL$ROMD}hQMRRg$!zAL}Js>jl*n#wc1@Ee6p?_jz9N{3R z`<`7Azx3`a_2!NI{DZT6zZcr|-2Pm8?%|?w>9ysk*riKqLJl_Z`?e?$bTXb$K)jfZ zQ2e~R%#@skjcuQR063eW`6aRVFzqa8PYQeNaR)lJ;L^lz28JBPkog|RtH$OLh`4Ft zcewO`Zn;jB#zW+tk#YH4glfuNSQHk8QL z)u0Zr0|MAn;=(%)(^Nx)4U}*%D9^AujbqQjCQM!h$qr;Cl3V@XQhn^}Bl7GM&Tk4k z{wGx;a%edED3L*)y*c)+<)|FiqHK#7h_Q+oGdOuN^d~TvI~FV|Y4jkfUStj<$pG9- zX1|%l9WOW{pFGiZcC@kC%er~Q=5>n1`$}pLrQviSw$R-|Zy{(T`poFc$Cgi5GBYNx9`N$ zn424%-%Kg~>p-JHf}QPUs0NNyc0aVKwfUD8fAXuDp-8DD~Z^Zq(kk>!|ZNM-nxG#SU2RB zOJA_s8gPIN%QRtYrG~rb{-Nv37=IJiAcX5dq(|E@48MgZShdb0a7tZUC>Zr>@Vw8N zFE$0U9Y-7|gCa&-<3HTU+kAdyn34piuM=xLjVPuasvV($3riUN+G54vk(C_nJ<)c5 zLz?cb8?%Pc3W{k|JKSx~O>GDZ_;C|~2<{$?X-E4UHEf?D9cF+C79DUq>@q<1mL9jL z(dpA$&=Jz5#In-!PJUYR*`2j_NjXK70rA7%>T|TKznGE&s@=er6OM3Tb4_=$Ak`w4 zD~3uKp(O1-D9pZL1mN?mxEMj#IOH=7G~|ZxUgoOnmYeXNRNi(<*kr2Az<)?8uLB`` z-#hkz;>yU#0OZM_wFRd%r2I*+fQyTR4C%w)6(BB>0(CiF;Hlbw&GC0m!)POjkrv7Z zxJ$1N+jf$8&K>x1?K}Vm5b}z!qFJmjo7AK{)D=MA2Q?8R_SW=fb+ZS~TL4ffCAlEh z1Ahu~9)MH@RHGab4tGGU8QJoX7OslIMTfoX|HkAvJI^Dw7U3f1=2JLvrDi?P0&a)$ z1?UjMfe3_2T^(@$Hi~v=z4Z0{H@rY_d*-B&B=J>&@50A~;axa3bj=nr8-s^CP!4|` zVoOXAxRoI7F1&4nh+i20qum{GLVf&r%b)L=U`;l5PTU%r>=N-;?k6Q7XA-0v^cl&5 z9!zaC)YM9i)KPw1x2P(l9pwmPkz+C>j#rHo-yOJre{j+ig4-|t*A5;uu%)LIk3DwG z?|3Yo8OyHCQORp|9)Ke-wcx?VBY;}x0}f^q^725N7$}~iwBpGV(PCtnoW=QpRLDzs znH(I1HKri)!^JeWR!OKxl9|Ew{&AxAFDu=5^S z`5L8zdBe#QXguChyibIj#ems!9IhUS2C(%4?JUvUs_&Jk=u?5pzg+vIEn!Vnun%6k zGzDD4@psV{4uxBHf94tIi;Z7pZoY4c-4+3FDoGvq4W2)j5f`5aod?;nvNsnLuRvz- zzZ#|dBYdbxAfz!aA9R};L?w~1MMeMT&#hKPaH`$7hops3WUV9$8o+Ue&kw}GDPg$Y zVZV_F&Z(^I2M1GeaX;Mcf;`eJ;&a^J{2o0}-}oZ;^JLVUzkud;5-=PhA{>4K4ARJ3 zm_Tqdo-c48*6}pUVQsCFp2zxdG5+)3Qj`$Ax|N`V`gv&*y1 z;-bmy-+kPtN^GPqnBf7(4}~(ad-Jys<^mt%I@SyMQb{5U=#)AR&oC}(gyuGWc%X{o zK|Wr8N3iPAS9FU}0Iwk+D7M3i{_-Uo$#9HYhvVEOK4c&Oh|k3o&b0|y8fM|X<>lA^ zmH3UfS)9|ELR*Y>mhlm2{@bfu^2=upZe7WF2F&yo;;At(;;-wZq~yE%JvEvUZ>!Zo z=6>*3zcXVILqPlpvQmmp2zAmR3v7Rk25PLZiDNti^$i%ocy}@009@yw-ax0IlL;E^ ziHVnxSYqNNSr+vmPzb!y^5RtZ1w5_TOOAG&v$j5(W7yl%17-OhUS7?qV7l{arzy;T zFD> zXzvvc4v-swYLMuRm$z##Ife_Es347(+B%R4}{7Xb-;;g|R-T+Hz6*O`edmrTRi7{wsaP8mxE-4^^)%ud8N{>T`s+?#X z6`8y|CJEG{E!;fhGrP%c*~Xwpq88?9;7Ld*k^nFq6Z74s_RD3NY_^q1b&mFal<16% zk0a_+Yexh2Zp7j=jm+U{1Ge}))*HrjgaE%lc)os)y`9}*SzjoV4P|9Y7U$pgYGTb) ze&@!mT z4txa_m)IepMj)EuUpO#f?j?dbA=`X#;vHt^nyr;KUPD*NYa*`cW8WQr7k~Wj@TQ9Mch~;5ezKx(5K;j_J zTwEl_MGeVoyB9M)|5Zt_+P3m3CoB99ROwf;9p5#amS4T(CDLu3zB6v&J@TT6TRolH|?!+BzD>Hao3iT)ry#@163+n8wW`>ENa5zEni_$W1V zhcP32*e*A^(L+*>LGQHPhBqgrq`py=xz0K|*L@Vy5Oeb+Rqir~%Hi*Stfm;PkRt7v z{5ZvF=gwFNsBudz5J}Cf;SgXwKlM1590{g4KPUpQ$8hDHGbK$}WzPFo#qBQ=$ zXKJ>Nt-RSuM>$WArig?q>1;3jw=ECvx*FV* z2HRP`&g-;a(0XI#6#C(i7a(gKw;5Skc$+{aF|lN!0D52mZVreMbNBpWlqrFA873=8 zt3mcT4Pp~%(@p#SIOQgd46;5uj*CFoNsLk;j~Rjy)6V0u17YiU3mrZ_IrCr#L`u!~ zvz|TMaqRLz{3+W?3G|5Nw53zXyj{SaiQ^e_4CMHdrd-k9t`PoQxw4ya*fup&<{v_8 zv{n4jp*47hybe{u_^d=#QCa!9ukQ~aRX#^8gaOz{5Y@uE0tiNMF6TEpbl_o1*%6{m zPktS7p*EMe-9&pTIp^k;*Dr^RrQGCCk%&>ouXGm4WPANO^y?e^emFcS349`YqKx6k zbY${N;23e_^%cqs3|Mbxf{7JSVAF2(`{lH->pt{Q7j%5 zD>xtPowoBFrDPQdoM`9;g~%cnY`;N@=W6XX+~43`YlkjFBZ&w2hDzEgVRd8NL;27Y zyt+YiKLMc7iAP|5v5jCprl&x@w_liYuiX1a3UYoZ@JBAoz~Z|4B~(Nri+i`i!Gjif zIUpa`$v?E4uo(ap5w-}*gqXNkO;(rZB_Sv8T9f(SBjMDN}S3kz%SSA>=S$HWBu2JN4_>Hi_9y;XsbGZ2x_ zzDit5TUMSs$>aAq;v|n-o-*0vnVx}x^ZcmRf*Z6iTW?Li@{^INTAX-thTPg(ay1r- z)zd!G`C81)r+DO8Ir_hwVAw#mJTyuOpe4Yi(G9rqpzsAFja>Kks&fw{#B2l9$?xVP zHX$jAjC7rR9}{iyCfTRwKRp+Qltx!J4wp;O6H}9?GWie{)kPe*_-!DFH>*_kv_>P~KS0RiO29)}yfOPdC zi*@WQ>kh?Fd^30nq(QOyMztk}6gX&Dfr$&MyE`^9F|Ujy+YHE3Xwao7q8dd zO)^D1+R<%6O(Wc&c1YMWlj^113PT{Ny3(I3pdV{8pLM7IL2iT;S>mGaTN?B+-+4Iq z*Vl;qmucrti|3cmVDQVyp`jtup6tXZWj%OBOKY<-y}$`a|7G{MFmjzQXxm%3ALIPS zQq(!|F2ji;$`>z7CSP13=WwUcPV#q|&~&)B0}(|8o{e7y12OoZ!!EJq+INk=Ju4B<@rdU^=B zE-EULw2KB&Nv8BqarHL!pW+H3ryuQ~<&K8~8@T&iUHpQPZB15Ek?4VOuT9aSs~u~i`JA?C@Z2pQ|-xeb8L< z;ZG8wUyT0Ya8#@7M>!8K!^gsn4xju#o?uLPxC^`jghuz!s2&r8a+@?=Yg~F?zA(U( z>$A4<*RHa?LOx|TdXBIO^D_ivT>@0-FLnE*qE5$uVcFMX^CiZVtkkTY;=;t|V?MKV zc|qV*1>Gs(`jNq5@;sA>sgJXt;HQ{eK^@wxW#c=xz;qtwwnHI!o&@1@gL(o{NJwo2 z7t(urM=0Ljo`C_lkdJ`Q>bS6x1a%bhVx!4T5~(@p>2>w>vAze3&E$SsgqjPdWXABN zTZwX5lKi=lh>sRYo(Kh%wW`^r6-Yry(Ek~PN9Z(L9lQuX3c8ekjF0PwzK-qRXNRLP z;cE_ZD}Z-m+$6*yKAYL)#E(58hl+Gm2vtjdTg;!X?~Zx>;}fyz*gnvtQ>Mo;nhKT9mbwn>*++Y+fNCNUUqC=L9lOuNv|xG1HragO{oTS38^zfJ1Qd zSW~td=p20LE)9NX1qBWmV=h`-*CQNOPR;|?+JtHb^4K$?aV+VToVPiptw*N%F8>l1 zGLvYb)MD@8tl6?c#{dm6WRhK7fw|xGmOl*)a2S2~{-CT(mWPL&1bh~-3M5`eBbOzM zxD8%k6~+glPrTb3RWUem^vaMgl2? zhzs|kM8`G?Wh8;Eec4&5>luRO@8(S^)`9OJua=$FKsa2LvlYUveBS4!Hxk;ahi4%q zKfP`l(ZEL8 zl^I|&LUv_P#G+!Q%fteiqkx4Fq_E)Vz-~k7tK)NLJmval^W+Xt#3CRwT?LFR*2U zTlBpYr%dDTb)BcmX>rRWB<3AH?09Hdz~j}=FGsA7QY#oX&J#j%gj`7Bc7dX>?L{}F zWHBbEacN;%IC>W5{pT-U06Z33dZY&Ho714=bv?c)Q!_K#Ajv8oUxB8P~6M#3FjwDjPpbzIc(h;dCQhe6j{{gG(IwNWr1lB$A`GF{!D5(5_24*bX zNCh)8Hs+9Z`ijq2@)`?f;A3I>A4i?Cn!<9F^4RyieFOXqpcsB1yqU;{#HJ~l>P>Xl zp*p*JVE~5K9$}dh&HRptV|s!^;nIW2_YWQWwX!rOZLf4)__)KTkp03zr33!qY}HSA zTgj_HVaQKQQb6?^%H-2g`~M~}-ff8A%2))X8-LS(0&x4xOVyT{fk^EexN`wtoJR$j z(Ej~E9O+ERyXND~h<>=miOmYP1;27hlOO0GB^Jqbe`4vtWhSSsrE*U(?vXbK$;!fh zzzy~V05wnup^(Ka`V!^}qQwEqX=P=yy)~c$PwMF%z`czaeFuAcGbXypNM>e(1MI(VhF`h4 z6AXvpZvXgn2=y^nJy6IRdWol5h{9-3bBdyck)F>BcY1a=-Xp0ygbqkc>u6{|TL!hF z@<}{5Bun6}xff<|tz(MPcsK{_Lv4SJrKotA-bhK&%N;vo+gcgoH2Ff(QVW)^Odx)@ z_AHt2DPhGcU!XPtM!z+-sin1beXdD_pqO|${z9tgCKofh#$C3{pX*NlJ6O8$pTYEr z%<1bhgVh*wMb*C7WmqSg(2<6=Z{M=IO1613TWbn`z1z*(wObXwiDYBaybX=}d**=n zE%0dH<~X>FLyx&+6VwM%#AH7kz4!g}3@N$|RSFW0YR+E5wkAqH4wB%9*x+jwc?{Gs zQe}GWeuEzpuX%KWY;;sq&bIAKbhOPgD}75U?|VvVx-iZI-O+p3e}~KoIr~_Ep{@Cc zEAA;}q^Pzkg7**U+%zQQCLwL54@je7yj-A$BHxiZYmbO`?>=8&D_b@WZ?E2}fQDMW zD9E$s+!R_~vNA+JP!H9zCZs5qBoZofY5XBnKdPfcMMAsIF1KOa0#BbkyLXfqVbr!I zw{e7itt9zw;7zE!Wxc5<$9hogaNJzsF*=pSz*>>Hn$Vvuq9dIWdac+ zF=L9Z3tZrU+W3A-EqdL=w)bGE7$+43JZ2_$8Lr&Ijsqa2zuYsnZaDa_tPm1Jz>N~V zH(RVQc6%{_8NsMPmD2XD}XKDCVdOa=sQ#`fkx~mfBLEHWQ^9Q~N zxY%Do4f^#ha*`x^FS@xgUs5iuPY|0s>VAtUQtWd4Zp7rQxF;J!HkbKCaJ%?e>Z@fz z#EU*CHPN*>CyppYu|uEF8*7mkN`PV1N>^z|9zFj%a^nWS@s;C5(6ySn1|Er>i6+Iee#6MHRoUxSjr>mjpX^Jkj$~PE1fLn zI6w9-$t)tQ&E+%+8JL99&12m3R#|CjQgvwHp+h`;m3QJjzUvC3tw%h*8GmW~5p4VU z`%rw*CjY*vX_M@X+VyW7%x$YNdn*ruTQE%8lye$jXbbsxPhfn>EmiJx?}P*I!%e-{ zURkUsjE{5WYQ96=a6RlXeqr{A4V(5FKd{*yqy_&uUI54!b8crC6WSjK z?dj@dg9uDHf)Q@?z0b<5I_cvJm%Q=GGv^8n5rAoEh>kjVH-X#(vV^G%6HeDTe85F> z$+w3=6#zFQ4Fa<@ePZdCY|dCj72qy&pz>M^e8t73CmKhLZ*Db^y`L7vul&oT@i~4a zSwyV`sz9IGwe@*}8$J7PT)epY)_%_p<~!QtJlrh^U#5kdMBDHMCU z8lqqNHPKZ!H`84l%p!-3>h5+>x{@z%xibfcF@1VvQ|4NL-r&pY&6iA_3K!BNqJ=&P zr5rvIG*_!(qM&MEnnAtIOpYzj3t!?&gK z0o2&o`(#WtbY-W}b*7Hen0t@r0u>h|_Ueg5a^dIID=*}j zB^=m98>oNcM7E%4*zMM#%S0ycHRExQ{LY^V@$r$K;V<+_gR^c(1Ic|a@S9MnLRb`x zTz51B*oa#DKI$m4+wjv;^DRbrSb>+vYT`IFPWHWuJ>4O4=e+lD&=h|P-Sj8Y3WVJ%D~Fi&ECs2&rj8U%f3gEPVHiBTUZEieK?MeC+;8l41y>oHFO&cU2Yv4hQy zhJ+5TG1T1nmXt_p2*E`Njsg~T=xvbTIyF$9c=efHeL&67%+f#eEzwAvV`%m_*d+Wc z6+j*3rg~97>}8{+n{znikWW`^GNplCC0vaSVLjQ|Z5|H+qe8>2RF-n*4n5HJeftn8 z@EE3C(7tG=_@^!;5k0^k3M`P%jGqfOHrOv6AK2}tR%sPJXW<^UcWBm)_~>^kp396i zu?YN=^}@FH%b;?oiN!|Fl<(rIf-!eD-!)kK>88Z)Mzj@IE_W3emV&$@kxWf*I0(0k zqzGomhCT8T{d>}yKY#IB#D|7N8*lGsS@oKC%g}jPZrP;Y1O|Tdk-C0eRLZLH?5Bow zLZx%yE_HP?Z9?MExRLdxjs7G@$D_x{9H---efPGOfH5=KowB2&SOj=$#h)#j-qM=o z9$n*QV@kr^6(_mIUL8qikS{*&yrU~uQ}D+O+d_0;L5oaZ%Iq!{09$r zy?hIT3YGK#4@O6=Ixe9pPe5@NgUEyUTeooTK@J@j9*%(EsN^)g(C`u%SXZG+wqAv% z0?$Kl1#mc=x&WNOb^^>ozF^*Ip_JBNv$H)2O$rR$*vmjqe;LwgjIx*((HgDZY_ZkW z1Y7{gS1rA^uFkH!V{+0S&Jg-HnOceUQ$Wt)v{*(f3Q}va5 z*GCS--DC=;_|bJXqNbkO>({PVOQRBO66OljTL8%4#6t}_yI1Qx5{yW9J}&}~hwUAZ zW^izDZWEzjt-_L*jSYZO{7STjj2r!c=T;BT+D$u@Yz0XtIOQpQmKnWf$g;m(Ng$=^ zy1_t?QD5Tjdq|tW7y{fa^7;icjEMjfR7z;o!{Z2(C|+6YkoHn1`J%2PCx~<>At5(M z1*a6Eh)}ix6mqO35e#1)EFt%(ctC_;_(h`5tQ$16*(+kw$jfXP5A) z=Z-wes7bH7n4)EuTx~tt65u>GxZ;i)_Q9W1>r$2U6hfz{EC1}W|3sU)zHckti68wr z?>*H8m}Z(RRL*j1*7HlSLqUK|=Ny^u`AvMP!Z7a)(j~A~)T1RB%u7e(i!m&Gs#VT!K(a<+N(clVV zz(AhlxYy>+Qd30fc`Z3fj`?Naj)(SxK74DS3L5R;+E#Z^wkgJQiYy>IbHeN3P;u-I zKfb~^%~A1Ig@725;yW=LQKPk5xI`jp>{*#1?|((JQ)ENpLB@OEeYq@$)jmGow)`ip zeAic}nK^%!M_2xQ*`$&_r@bj4VCGk4jXI}R-hK*YWJq9YCqU~(@p=#h=T9Bnq7b9; z2^m$7%M+rm>W&^x)5Xh_7dT)T+QIwivgh-Z& z_95PrM~~=YioiDm63#uCS5zd9V92*`t)L@7wCeGK!fyO(n4(Elka=)(BNX~DF9U+H zG3+AC-7fR}G>jOpT=TVx{u(c+K0nE=8LC=dOjYkqsta(LNKLi8HZrtr%NEP9=gn8I z{Cu=+UsjJFl`q%}Fd5feU11X!+okn0>Lo}fH+J|f8G;drg#1hc14fO(yd(j*Ij&ws zhIlz7F1)-q8qU8cE3=7tAYuFT>Alq5ngF=WHuAaD3Sk}7KK(#{N(0Fl0R2W=Qwm%T z6nbGCdT~_=w-#Ur&v2*x3%%z$_eE4Is4^Rci1B;ucbVbxn#0=q%<(f}Vy}c>;^vlJ z*!hocgm(Sm*9?m{b_L}>aV4P>4k6sgHbCtrH0Pi?>!L&RUJ@C^bH&IDxVmD=~H1Q@O$VpX0RS%C-=C2GwN!ztV@qa_@PJM4(2GP$2VO_g=1k&Tm$^i1hp@{DeW>+R211MS? z!NRd`$-=vjB47cg#*sN_Q1OFH8pm4R7Hw(Ur$hJd@Nk4*x)WdFeka$&%)$au%P!_Q zCnSI7?rga;@@A6dS4^EHhkk#*)-G0hFbC zDDK=zPxUs7Up$q#BdNieje zs@7H=yZBXn2dx7ZrS|skg(yjbgpOG-=JH~0@E(RSN@HWoi&VCpO6GBiHLDDE?^Ur$ z0yc%RHTQw~cUQ~@7!VJ(+B!JAtFI@KAhUpX5EZRmf)fxf=C|TVgH{wjBy1VrI|0-J z<9c&;7ImyoJbyWK1?N)=OEofJFqfBqiSZ=k+{LqPzooV6_rcZ$C^tL8d|m_7FVMMizF07vMF!%-O8oOP%;CA8Rz1pOt z<*Y`~(}zF+yndEisDmZg`BH5a5TTx)GB_~Bho>x0)Xkw-X54D7GjeW`rGV43KhuJiqwZK**9+|?%iKSa7lODnY)dDE)QlFg$qw=Is`|WR(Q1ZW2p)sB zXs^Sj4o12|FEDqR8UQ0?rc;Br5x_D0Re(@Hxnq3}Gq-=V2e3EHe>n>_gh3A}1(=I3 zrd&5}9nqodeDgSDGzRB0k@CXJYkhjJpvd_2G`<(JbvaO;4d1ogZUyNTC{WJp7CG&K z&cbK?WrgJ9$CnqfbLbLw{AH6wqYm>0+-DaMAo-EtT$0*xPlPHz{PtUo_Y(H*|J4F; z>lmu^(BC01IPO9-Wou)z&03Y6&R%X$N_Nu_fB@7qCP+REDxE$XW+nGo&pGj8ie#r> z3MG|3Xly9VAb);>2Oo4%S5eqW#fS%1X!Co25#D)>y0&aYg_o!(Jw5#s#B!CGL#6$# z8n$g>6A6Y>J+=wGRai^)LVxUyX?*a2n&}=53Dm)=sQF4? zqGDxX>8bRoROLQX)B{s}a$JvEPe8T8q}NZDxcF*|wFj&G5w-rDJ{0B4FN-)8baxVC zNp-hHKnf?IO~T{lwE=Ca85zD={OmHRBe69fKHU0p()HK(9gQ7ZHFnsHe`U$`)D(Un zBg#vylHb0Igh>SQOCq@kx45nVvag5(6lGLUu;F4F79QMPEpW!YypVdUq|U)T7RA;p z7dGwm52BL1&gJ+7*D8)|=<#}c$2pftq@#t9esC_e@#|<6Vz~de2B~+>7Q| z-3=sn{d9aV4R{^(JeJ_bw{^gXU+S*FK|pmAm0spRY*O{pG2@k_opykk<HGjC+WMsHqamJbKESqrs^z7 z`5Nmr6&2Ohyx8xTx`*#Mh`}Psu4M(Rpu#Z@rLFTybe1fu5H7Yd5n@sWGEq1GDVqE zNfMD{PLe4iRHhJ0LdY#sXdp>4Pn9_&M23n?WtNax#JinZ&wAGT{=Vn^zJI>!w|;B2 z?ryH@I?wYsj(y+uZ3yeM#*AE$t9s}E&Bb8$M9M3(pBnI00Kk>3YYT165J4D*ne5J^ zcj2xMFHHeJCatZJS_BaZQ()HZz>S~JjOoCY!4=tM@6iF_;hE@J6v=oU;xUN5id4Qc zOvPjW?ZeG2%C0E`&AUp=0kCD-mD9DU)^m0e4{tBAkkD!Uh}akF>z zY7W~N;c2vQ-xJ9zQlVO&fRQE+2#%M-GXxkG;V3+RHG=__O8cd_P=~l`5{Z(!vNNBW z?xSPpEN^$Iro6_!edny6{&DoC;NUR2nrT3G)@OqU)xc9Ov>#ktD4Rl*cHd$QM@C*q za4>`%IBZXC3F4>qYqVNkT1rrGXCVPW>mMF21RehWVF39AsxF6~H?iYgvRAWp?vqII zjUWtQo`O*!5j>$-g!D^{58xkr6$&%q?@L7K5Bc( zN&-#jKL@9ej3Tu+9)|Ja9`9ca`8yxd^!ltRk{~I($Hn&SN;I)6N(qim2KLu}d%p$! zdkV{&H@v&360cv)dHe|E^U=$fUzIZ{plaT#eO+<<>%P^T%u+vO&j$poIRu3To?Y7p z53b9Ji=7vL2bODd<7~&44Rj2*kErY&2)RdGX!3Et4;y1Nt$?qr&!ibML0&a0yG_H?H|`ycG5x;E*jLSkat$W9Z#uj=_} zDGMNK2JlQKVS&4OdU8(x^FL942RL#%2v|Qmd#~==4v>~aMUkC>dePCz>7+m;h7HvI zo3Ql~0+Sik8QJ$q<#56UB!sODRjJ1vY)Zk^Mnz8F__yof#0B~eI0(=y9i<qF(9A|9I@cCuM@?;hCjL?j^+;7xvOTQ%%(-EdAuyc#yuV&Ve zZ6iO=!PPDHbfSj$vN71a{`yM4D8Y)oZd_B-H=6owdGdEDPr{w{??_bh z=i{Z#td z6R`=eV3rG11d)#SG*aM7fn9WddU^-#V|0ONGHgGC&cY#Nn7Rem2>=3iE^q)azJ@a& zV1I0F|6$Cfm#W6`Rr&x`W+g>c&V`dFNtq?o?0b3&6NtWhaa>CDY+%JR80iFWCc)vr zWl3`7S6KfG_esUup)eVj3OeXQ0rwS&m}56?HE)~y2jw^sj}bS%mr7$-Uct6k2K;`d zN=}!H3E1VODL#Kilky>*O|uIW{$#&?W!cB>jvD@}Rlw+Uz}X!gEdmdV>({jiGKi$S zmudi&DSXz`)4^sHx_K9R06Ya3QDR)_6KuxHG{_HOjN(%8|#zsJxcqiBR;zN z=*yQ`p8Ljo6qy5aKrhfoIf8EHh)x*DM>h>tQEp_q;KmJVqqrNG(kqu(8Xrvoz-PS{733{>$uC22mF?_|L5{kb|tgEHeH4Y*DlGD`}= zb7QTGsJZzDiomPEYlAE>C*&APO5PKubnQTDu#tY6l&=u|8 zZ3}4&Xx;OPtO$tM;-7u%lGXL=46~rP?Xbe zX_I2|goJX7gNG@{JE@L_`Gtj*SX<>MaxeB#fKi*s-RH!+f7|rTx6#ydK{SPcyj*>3 zNe_kYNWX=FeX`JVctAZm$))JQdLD108vORF=OgMp*9afu=J5=(4ajFMTWVyi0!l3F zVDt~2yl>g+mesklWuNO_q|w1KQR{*4zTSXCf#dt6evHgbE%#Ps`fS*|*#}`;v}e8P zuv?y8C4YUj1H2qKr8?yBe}i=kU;?zbXwQMnz&EXI(FJiUc`O-*xhMUj4-oeM^LrH) zO$`k@y1HJR6nfW!=(Cd%>a68LUz8LT{{YK{UmKP-fF#Zr#=uXMd{z}mgonO}NN`V2 zcQ;B}2LLhA^$2(du@-U8^1?uw9v{Y&Cz>)LCBPkM!(pgGE}rslo!+o8_0Irrq6H*Y-S6psRm5 zdmVZX%mlR)733u(nvuPcm?+Ll|5I^y-iU|C!!jP6**nPf)!b9sfg)0yRIh@vzXsQxE$r-w1~i8c8KjDsEShuKDC0iL0%p!38$GF_0hwJG4c0W=)OkC+rWG% zxm%c=Z0YI>6UP)BZPgYLp{U4hiFvVj^y^FA`;p4yw+6vmu?hIJNLMbnP|qgmhVl!v zY`c7DjpRXDMeWq)^?-J(5`$!`IcKCu2nyYSYwJmM^>=@k7oaJ{+z?d~1nVniWPztlH&9VEx6hS? zK6x_r@u<_P!pb-1sirmi)L6a%{gAa^%6(&}h4vImtMTWIt&K!cV#jH=5D^nQo!$=h z^xEnl*8r3d52B*xKnufQ8{#+-gww;vWxTWWx+icDprPp1h&X#7NC*&q-UYH&H(1U} zlJ4Fk{rxjfc>dh(u)xrA25xbXq9HGjsqbrN=R21I!9=$m7_M_axOZoHt@+t zE`-nqGr*|hz}1G)$D*c#gP*RprDxJ)Z*6I1cT>$hqetmne0t|`4Valw`cWl@Z+}}` zixUI}#F#n`{f>Z26M1rs%*?IExEgrDVoXbm>H3pK@;i@#Q2hAuBbM`+P4}lyY#bc! zh((c&-$1BNp=C{Pzk21$-eDx5)~$GKIKK<2@PebaI5%&W`Wh{D5;G26U5hT`YZGV6 zH_6CU6gWsoT6kpYGbk@}U=Peq5}U}|s45Z?%wY0{mWD~?a`q@$aq-lzT3^%OrOc;B zHmL?9MDBJ#2gU@{-?GEPntDn+4Mp!`aXy`XRa7+I{hFPG_O9&DyfKmvK;E9_UShS@UhLk6*tYcjT{=U=^qBrbhv!a0oE--U+?cACmu+ov zma(!^gjuJ?%8PrEhix>{gB-$=kAV6@7j6N8LVoz%++O7z3KbOe5HFoL(FlJP+|~i- z;^1HgLvHObU@3%f0Upa1Y^pvseuhR|Kq_{KAJM_GrfwV?O`Wx|s(%>vLsIUhe7|$? z0K<^ud;7=>nmhLOL;MM@SIo6fAu|>*vc;4WK5|vgek(End7%4~pzW(u#*u!VTRbdp zbub2#KS+td7ary0m~o@x`Y@by$h5nmD$i)K&b_!$yzR$7tugRnB2SO)=J8O>RenutSB zM<+rzZ5$B(=qMRUHhw$YU;*Dhcrae-O#iX5T5_b{PFh4UcrKb}&Fyym_2gIkdmr-L zIG##~p4_hxgOW#ldu4nGFcFF9e?@l|UhYl>tsi%a8XNBkDJ4zo|&vj^reRtH( z4MwG8Dr;4G!vKpwGwZirBz)IB=7g6tAw~ws>#l&T$+KvJ5sCB5A8t=DPTo_1sV?Nl zudl%cPcO9?xRXon*xrO_cKhDasm*aEe&lX*rymM=P*hul zdU#T(#8+_giZX7!zLnTo42B)vCQGeaH8nwCe` zziSk_@N3r!Re0UzJFKneLh;}yS8)Yb1M+?4_Un7Z&Z99Dz>bJMe`;w3n*$I;E5YZU zR>CQ{9pg~xXCi5xgpwOsNa_eM7K5ad5DaSj{63Xwm~uN)MS**zRT&c><(YRrf6h$J znk>>anrSkk&O$20EVb;BC1$31DrzQA&oECnw-)V7K64@xTF=k2jR^k$JT|}(A9*1J z+%Cev%o6?y=j8X?I@}LbYgW>2zb}n1j5M$-?(r8quioJJwf>`*=9R69wIY26}VR& z{YhK#95g+ci{k7Ju2=rks%+>zg1N`)kFwR{>FxXF*CpS{BQ0I<8BLUTp(d>^C9TC4 z3dzjuMUN-;94r|UJ{^Q2X6N%B7$7qOTo`1TV$ufY<1Ae22u_foU@A&E!IdHUjnz8`t|D(4_^x^96W**H4sfBkFNUdTP`K9FXrrZ-BiBEMEfi^T)Vb7 zCbC$;+;BC>b5=+08WZ>ZV=jjkxV>gJD9mp)O*l|gc;-PIy(`IQiuZv+u?bHZg$jK6 z6++zV*zoYgjJ%2Q_4UQG3#fo&#sX|3GG9@D>udwoBgL;@L(xJ(vSrfNVeL3lX(ib+ z6rF2M><;^#DSJE^LiYE>bK8!|im2Kw?FKNep|QiqJ~|wuco1MP+=G@5RDC#UcUAV? zyT_vY<1jx<lS%Am|l<$$G#T2^9rr}ZfT4L)f^|0DxDDz z(bZNYz*uDCjOnm1Fv?g(@Y2Y+ftSP0&EXX;QW^Tou)>NYnKdmoX#75cEyb$;qN*rc zbNyZo+8CTh{*q?-FMWfBKFK3cfsgz6_%4StQojAI_GicafpjCam65Ps;RAQieaZ90VD$% zhSUu0K_UZ~6cP5@a~QcvmXaKGNf6I9)NYr3^MGo`nTktCjhahAZYHZ-CGbPsLE1(U zq)~ybJJFP|^K1UaXux=oM1MAZCM+CTr@o67ARy#=dwN#bNPiDXn49ACSm^Q8&d~P( z8wS)HAj2>uNz?n()&?3pxvx4uy;srHJ*`B%Gb|-`a8i(y=j7%>NC7Y{9=Cvphna-$ z1b){3gbC#1!3qLIg)E~C977nvLbV2v9!nea84Mp#24dz3xCOfx{(Yp8Tmsq)|w*>W8J;fha)`LGU8D+Z7?SruR8CB?=bb1W1ytRd9}e{(K&eahHqX~qc9Q;aPb{j2Sz z+7~+3S&WGSnZSdDbeWw z4#YPm6=7X#drxof-x7zYIY>JM&MIRVaXif~X!rUqZwv_^`c|ZU;yeK34X+VXQ8p3u z*r@YU3ZX59{{_;Su~_#er6Q(f6gIMOLc~A^n+_UpP})&P;G#k-o0S#ru8AxkR{A>n z6c94usmiVB0eZeHmiwDGCaJCKBAnBE1%bwR^_7#Q4#rEC_^PV%^1tngjETQZJA9kA z?DaLkw6LHt$}oGWNCj8pbLaR*C&N+ARvS!d-n#&QAK1f;3=OGeijd9JN!Fln!@hi4 zxE&6lF1C;L)5Ui0-uoe#4?Q#re&`kA8*c?N^ualq7I`#*->Dh;96Z689i*2N+OtPU z>?Y9inc)-TrX|}j&QZI$DWG|J=*JJj5du>cbd@|jj&E2$R$%a2`ts!^H06M(U%l!q zY9%z-#|n|82E9T~E!Xg7gjw<(0Ik~tCT56Dgnui}WfB~BP`tvFdFYVies=&E2}^w3 zB!oyn2s5K5@88~$_AbK=+l!J zNMHq^>=3viq3|y^Y&f7a30xe16onMG7*|?!H^D~VQ{G_k8cVfZ=*~7I8jp~CwMN6KSS@_k@Sv&g(?PVV2R}L-m%3w zQxp3V|Hl2}i4Us}=`??3(Ac%Obns+&ce*t`M}$l}?(K0!U&1FaEp2b%K1|${m3!st z&GqXf1yCBJii3+N$IRCgL)GCWIA%dAAq@B^$;qVVAk1|xHfd4aAt~9?_qnS8=K}h` zk3oldSvovfX!(|pYiYgA$k-+3{pqFYf%LUG+%(`)fLCDp@6HBIp4~|y^i?j%@~Zmw zX1?=cL)jSCR2as&OTQr&J6BU>m;W0HB?)Gk+Un|ZPJO~XwH$A+uRkutig>`S(M1O?f2Ta6140lC(y^H#XpRe~ zN`3w2*tO036&0^T4uk`lEqD$l9)g^#ba50!NkrRWd~M&#d?A`v35lt-!hpc4Q`!|x zK1{(a5!K1zfed6LY!~Z;z@>%(A3zw8`CKB3$wVSAhxZcdu}1J znvd+wuP$UYqkgKeAzLvq``}l6mJAWgEc4?XGpWjdj-|K5=57?hT2dWnTX8$rVx_Fr zNtz&n;sq0N;177BB0~S8Lys^K_A|WtGB-EU&?z}Lm-Oke_kVE#B1JtUmp=CxpoK#6 zM@$S9rbdOAwjT>a;Z00w!Gm>t^$*KOfI$WZ>THLw?m$9BC^Xis3^GRs((z~GQ$NE@ z)L2R;p@-mpa;==i%@+`!fG1;RD$u;y<#q1n)qdr^k_A}Pn%A?vZV64eNirV!JL#?x7|jK`^Jfp{eBI!*XYj;TL8TXUcwWS@Kgz z+FSQq#CN0WarUsMV>MiyDXN!WM&qY0I(nAjWu(D&~VV=?5hWz_W*a7Mqb zTSU|RCR(Fn{nGsL`bDL%#2<6)Jjfrx_lWF=mGDQfq~@s_^;oa z$oO#UrC~FM$_}dy#xBHqJ>fSv# zy$-KiAz(dizrUH^cVWFje|R8d<3N(7X>!zz_K6daZ~Pn?L2xwaEg&x@Uoim%Z{`!} zh)%Ly3935)XCs{Sz{BxEbGn^}2ZBKl3yU3TDH>R0y4mxWgBG4}2oh?7{+P+wns-DYoFL_W3h6`~<53 zg%Sc;K|KXG5zV%FIZk6G8JP=wg%$@(kjV@cHN(dlM`!10B3_t;XJtF0;|l!4$D=@- zAQX$-!?NrQ*Q&#Jp3fy5k?MveU`of89zlR_s#z^(>1XmJ; zmZ4!W+Djrf9;n;jUO(Bdj%fC^_4!%g*pmUR{-x!|A8p?Kmhr!|QwrgxO-XAj*7#Wy z6V3OdupS?}=SJe)x0}Q(C>R*aL?WU3f=E|PSQx9xBKyn3hl)pZ;0lwovE;|xZ$!So z0Tq(inaa@h7@p|S_`(OkCp-ZkRYFp7ChMiR+d}uvq)^ieSZ$u<~few2c$ zgZSqb7T-afK>;*lM`IV-a<8H1ZrcK@el09uHyEJR z1Z9%VYyt0ywK4Dm#vZ!rR|+Bvsfns3VEmjHSF-L!8mZ1}VgmSjw)?lQWUf)I4X^pC z%`Aj&*)sJlF#I1%9xoC@*2u@pkR)BOvWn}<2WO&5Y54_&F$0-Kt?A5s12%xU)n$rs zvJ)K;w`aqE1Pe7-W`+}7=%}T)g{G&A1l6GH8ND#&N@6B~j369!$BbILCOpQcVCLG@ zs~9AU3k#F`f?>$Huth+su=#F4{U9ucBtz<^?N(r0#TJZwR}c)IeYC-zKzxV}t)6W$ zs>HqG-YRBoB`YaerMq+!Ssz-L3gLoe=6y9a8o zAFg0=Wf@4E5^P^<>g9Pb?otcwnL&!K4r_aFuj9*ej7El-M(ruhk~a6^nx723MeP<- zk^Q*n_3N1>FWnG39Ix%qPotiqPa%}`;4^>+k+WdZeD9y6q&1Akez?BEtaLch^Mjl3 ze<3IZ-13c=Nng)mX+?(OB_rk-Lw5@E_ew9hOeV1kJ_B#I4>n z@1b+_R1f6H9Lq|kHaj174YCrHTIfba3d%KhK^$AK6g#A`IS7tA41?jz zL;?&-ce64iBm`Ay``Kt`I(|$`yd(wc)kOE!WtcIhIgo1X*8a0OpSP=Ps#6m9%22VoYT=a z{Rg@ByG;=-`lyTrE}k{TIR?X#S>q3>U* z$9e>TJagdX&ECg`4rmXi0stf@w6KabCU&geU;h2BIJ8>Y%{+IesKqc2 z#$2Vzwx&0bOaW-;0r{(pKy$e7+sj-8>m$&|;2*kJ6{UwH>Z#j8BDq%w-qE&wQq}*Y z`k`i1cZnw)u~f4DLcnb;63Md}+E z$ioqc=`}WJ01BX&0=9v!9VijpZ<>#mx{m7NG$LW>vP)19Y`b-hxGaJkpjg>DOb&ho z0tW6-exbuV>FA&p!ScfUfsK!)NHTX}RF;(`5=!%pevXenh>P3C#s=Fv7+<4^Ap{Z6 zpJO9n{B6bg+GUt2sE3$@x3;<~Aif;}0f5rbMB;+JcwrCrJaz9JJ{s~wl#=$a1OeD= zx4Q!CPSC2Z?C&PjrWh`_Mq3bTL4}J6T*fs}+>A2jF}mqWl}!5?)9g8pqwlS%vca z7^8%ooDf?unQzlD&wkh2T3(Gf%MkH&eOcD@P%uJfpX;Y1+6;z>qXqy|K^MfYZ4AmIQvyX9_ZC`?CC?BE8YHcgf(+<-f$iN^?|5SfmRiKwz+ zyN*!tQ|awUlsyN;#Ks1j<7we2JYxI|ru-}sgn*Yo4+G_b$q6wYoUu^h$bN~6i__qiN!Jr*k-#w!uDynfOC1Cf{(ly# zi;!HC`Qo`c#Y#m263}oV9pi0;1?r}?@%md4Guc{VCVM0A?@Shij|P< z!z#9zq4%UKM_m^5)XKBESp$|bcd;esr?nr#M}%z~#0^~B+?P-+n$LRe@}VaVUVldf z)Uwl3CM&#F;WekO!}_Qnyw~ZBim6~rc%iPB*9zPQ(br$uZ;DN%PK^&>Hqc_2pbV`F z8yDCkc2?nt4x(ec0Z4^@e)EO8_54Qk_NVPd^-fnT%}n|8sJKcm{#G^N!rTR}Q=eaU zD002^u)Nq_XHhZM&LF>qW)OSm=&0?43&z&ZD*ENj^YlL{+aEvpidgUW7Q2Y3 zbwg9_TV&<_G|VIwA=bDT(#7YhsQtxIvk%ba{+d2RqGe#%8JQfWY@9r=^miWn8cpyt zPzQo2Fum!E{X9_FmEN^wpMCO&tV~H1sLJC+6uyew(wBrYIE*G-JmIdI=(DLkYED`i5Jb$HjA7T^((LL6Q^66=s|B!4hL~2(?YIk~aKmADN1!KwU)_&uY zziPjgt=2z}Ff`24oRLA5AL@BPhgC*enm^h!=(PE34!$eoXn?$qbw!5 z8)Ad1zJc}*%ZzDSqbDE3PcIA!YjFsEzbEO5vj4ktu|V0bzlFcKdHFyO2Z&Hlu_a@# zgK_|BQFIO<3F4$33Na}$!;b%74sJOiE9ezLsYRT;Bk;D_Z7mE_Zlj` zPj3R|)_2$dQ95R3A`y>=r}mQuZGnS-DCeU$UPBQ>%0I=f;N-=c5x53$<|p>Ddv%uR zFVL6NT;}~F^hJ`TJU;kkoj52Vw|4WeeVm$`lac>YUmx6PCB=Rv(h=tRxl`GkBvi3# zPqM8lsTaLg!B2vw3T9*|7SiZ2RYm8snS}*Z>QODv`~RN#wM@Q`b2PkAEzHdMa;xgQ z%jP7M|FnkRhlb{H%L(4cmeG%Q=2w@)qb{UP?;t6xDSXMh>XGJh`7%+;Akvtbgn3~N z*_%2qBhK(`qpsN^^)#6OU|&t%!&M~5<={6=4gbyC7* zNjA0z#x+*C#OxKOu_TN%kO;LS0-+lrVPQT%F_iy|YL_%b%VRDJD2jxcH+E^L&>A(% z_FWp05kVyu5Z(`%OH2{wwF1>=h+f;I>)t4A31IKOon-JK!k9O+Z1s0r+dnt2D9OUj z{@P@Z1Nc9qqZ~XusY36;_^Is&{~AC<X%yc$_6XZ98)-Zj#36Z&Qdc^$>KpixZE_-s z3ik_RafI>>$YEI=|ALWebYddLM~=O=c-rtfATJ*)LM?R`Ly~Jt(--`g2MH4BpFglk zCO~}zw_zExxiaDOBawDEZ}m_p|I^sZ$;PH{YKn+@ z6mTK+S;+RhH-71NSvNHFDAFuKmeS?#1(wu3bRnP8Av^~G&P$G zk6QnLG!xho0B*z;$$mMq;8)<~@6Q?w@=MLf*JhcM6B7mJ^fhx!ENJ;^Z#WDzvpj7b zg;;jnJJLXuElI(B8aCG^&4f27VKQR+SrB^ZJ$oEMU4T1&GHoMDACNd>u8VFmvMPo3 zGko-Ul)b%bTAC+ImnYy%c-H67Ty^Z1E(BcMI|X7|&YMm0Y=VODoOE`<5fRd}p<$OV zB$a&aZK$R;cobhjlwFzkc3dCv(I!d~yx#=E-UE-@aLENjLv?-@|9)6VM?9N@ObEBB z!SrvL$seAYlF}i&hJ%45(QyJ}tjIl@^NvrD%ttzzrpJFT6?y7-bmJ(eT$Wa(aI9cO zV!Ib}kc@p%Q1EGJ%_8~^kOwHY?mRXzHN}ySn&N%eah-n*L{Y-w@x`3n`Q*v)@*AG) z#jjqKPQMo!VDN0ZP+V~_c%w5VDpt%fhCZD!hPNnY!jo|F1CEap85a+m0W2od(~sk0 zbzZ>$XEw)4DJdx~&gj&sozeA#3>W+X}I*aV96J1L%cS>s? zgV0a{_flFKY(e3u_bB)85v6(v=W}CQq&g5;Ijw&XKzic%@y)c95R;uU#`$n-B&x#JQ5=a7o!LaE z8TnUR7`6^jcaSp0RNrlafj;Qh81|>>ZQHWt!qm3P>=by) z8h)X|%{T6tQ=zK^;v_`DYtbp@(w^rkQY@$>UL;%SQ`SxKqXCPEj@5&>N(z$cPTasq!3 zu{lC3z^#KsQ$fk!bYNx|4mzz=q){biCLX$Ld+fo`y_f-AYe`S?Q^L(Gph$~F){**P z4C6i5e#Svb>wndU|beBf%$o=fw!eHbsQo z1It7&zVpIQh|&R1sPpHnxOHv&_ZX2IdC}b5p9lyAn|I37r2OpC4&!9ZRRiI91A{mmT_?-uRiUl#<-P2O1gZ5VSvNzzKv)1v2;Fwhhw#C1i!My$@n?th*lX}p#Ae*G#=l7m@eQDWS-lx0fOWQhkavu1wjL**`x>5cp*zB&qVRsO zzQpfh^KS?!zEM^wu6QQ@=a?ZzeTn<8JWovxT#1~e-^RrSJX67IQDVl~P%e|G;$>uD z?$I{jF7IcUFodQLU;2b2B5`0noR*ncsPyA)!9w|)6;aW$+VFme8CG@>8Iz|^Lvx9% z{KZoj2kb`405S!mPC%N_=Algzh=!|dea2`J0#7vb@1i}#6DkYDu&yo*8}rMTTIub? z=s`(IiSWU|4UtXIZ@FQD)s9)`fwSbmjAOdtV~1le^Z2q=BDa5 zIF-c4afK#knc^F}rwKak4iV64QJ-^%)mmhu$aQeY zFcF^wc|k-(s`QdT)90ad>k?=%)lzhSEqOup0RKGv%8M6qE?`Gh!g`KA>mBQT|Kh}( zw-(u|k1*sCXsSPG;1lO+O@^RrBof_FkpOk`(NuyNCm|$56lFo=R`8!RC+1A)KB+Wc-;#+Fo;d??rHv- zp{Xemt9VX6#bVuxw5lrB7>GU=nmYfsP<-O+Nan*}a7TCLHrxVLCUOe5ynzeW*67JW z)4@gnc-;8I@zno>Qb1ihR)E7BuLN9TbhY68Vt=J(W(2PlWG0*-?^X`id)!`WwUkC@ zjiU@niia~TLW6>qpaB8Z0ZFL~(!+ZJgR_IOAMULNm0Q3-7J!qdn!Q{To6Bq^LkE+r<*3pZ;@f z>~ZffsodVW9jtPDo^J3@TTTOV8HslJ@-_f?apW~hU?d-sl-K$y{PAfB9j>yn&#&QI znw5UEc%*4fqHo_`%q0UcMo+fhm z;!Jxk0K#?TV({^SKP@MMM3dM@Cl2)I=kFBJp26*5Jwm1eYt)$!(EW90pQlMXFTFFq zmttl*H_K_I8j*Y_9$yoO!+HGjTi{qr1CiLd1owSZe@fywM)M8ae|JhNlHDaT%AXAK;^xc9oEBv} zp3(v;5a#1?oX3=WfJ4N2{r)E|&I1}oJUbr_KMAn@FD}3bEq^kA2?cR^s19mEEipxV z$1e5qncy$Ztrv!jgBq>Mpqm+*m;9W~De?EgfTQ7JND@dH7zwbH$#cUPjU#ho5H+jcUm2x>(?aH{cz&Z z$>wwN2hG~5s?J+jRPy=?u3=1^y62i3Uw z|Ag;t#eg-WIWRZ~0x{rVq>b*v+BPwEoBk5sH2k`#XzL_kJ`6e$rnq?HQ6tB=z^UIE zYhG$ew>46Lqh~uXN&j!4fhW@CiX;ARG>VZ7^j2?78fISk08?FFa7Zlwo;4&bv#k*u z5-B`@{Cq+C*4$M^iG`$_gZ)iZxx&d&s9?-831Ka?ICYw2H&rXVe$>2uiv(>nQ)o=5 z8(i$|H6NWMft2?OcDg`Mj4}iag#pfIW-=3|AEVK^4`R%xoSAMuU_GJ(+!ROD>^yki zD8_*J-&8&5VF7w%oc(PH$b4j_mC%tTzmCDMIlbLP{4;E`P=#nQfy{(9mD-n}Sz4aE z8!4y_Cn|&lB>fq;7U=x~iS`m^VPt)PN(I(d?p2=@W&4p5ZT8r)OZ4RHz@@RhH#Vx; zq*bAC*$m7PI|Xn1M}*bFE^2RNl{&2*-}Z#{vEzQl7&RZcc(M4hh=)m=w`te$2OU<` z`3FF<^5PjmR9msPi_4pKjx>c0(1GZ(CxY-NR*JePu0p?*`%-D15 zVt#`+o4xEZJ{NF&frV|>^#4g%r@g7_wz$|`TWgJH8U8D+KjxUZ6?nHN!uRV~4r79{ zWAxhq_eY<9)M;=)17MY?`j;#-@|=q#vHs#^3r5yEFb*p(p&y(a4OdrC;6UVF)sWA( z6N{3^ePC0LtMZN=eghhqjd0RTp`J%dy1aZxmqQvVe3o)xK={W-8TVhjLr62fj|BUx zZvSIvbLW)VQ`6<6bD)Q4jjkDa;0y>)BMrW^}y1)88;uFlrt( zc5bcU7)UZq#4}&K;Nsv&d;T0+?BYaSU(-b1*Jq~1Y3YKYl#xCFTtd#aPLZ8O3M>aR zOek@G(8dqlRk;VgU(Q)gFQr~QALw{M0N=Oov-9o)9y;PBUZ%oPZ0zh5$d^(<`vk^| zlw=w9rWXSJa%Y+<-EH%Yj^4fdf?&_ABT2;}x3FF>au0l%^fdn!rd)<{1cp3VuyCt* zuv_KvFVM+6I25**Q>Xw-(MWmh)BkQO%ZwEB_r)MO=}@&NC={PRAKCGbYlSKa>E-{{ zi(w14JP&cJzW%49JlCZqB%HvdCAdTv*gx%)jA>tlaW!=RB)9KDg6}r4V*WFjQP>lg zn0U#~Zbzg^uGNVvSHL%##dQLl)##N$&@yQ0>2tgUh4${vhJhzM0?-UR=myk6Rt|So zKE50Fh9g&*1;jq;GGN=ZzeQY3JYM(|h_BcS&f||yV*O-D`GVUbb8Ah$*RhEma=Kt3 zfWeA4X&-e3IZnDz+V`Qddn?arSo@HC|AqbRjC&bwy{op^<9^e{nik*VP)d5dWb@1!sVYWEpkf*w3Jl5FD5o;aQ$> zblfAsR=znnDaO16m_xnd0obsO(A48LTNVINb)D4$wgM^G!a!Z*{)Cq~InLM%8cK$? zafB~~=%z{2p2*J0=tv1T+;;{<*OqSMr;`tz)y_4OF)77fKCKQY;M1bYxwLNU-Ac5xr zI@m>N*a$x-=osU`c6ZScNsb*5)l(m{%K)aKsVNN#I>?0swyB5%zy3X$ep__C496hM z(VFZ8?z+s0CY`|^rK)Xy84kRkK7U3#2+arty>@s8fHj7R zRt>DT@7|>*dHp-Xi@DDT@8$Vlijb6P7jYh6=dk1s7OvRCicJZM&N(-8_;_;H7Q^J zou{8Jv-%Iji@IiJn9u;lLLiDug&lZzxMXC$^@EZwM>F!Aw6~d>nljMSqcJMvBG~`nqJrk zdGgnVL6AjDa>d&-l@miCH|F~FjA@zTNmcbuJi%7z2`s1Xd}mPiie{|AniOhW7! zSkU%On6qTs#ppNQj_-6rb4Pd)T9ZUVZ2etpZKaOFLOKUx@1p@e2?tF835p)fc7P{tQL zh-gGfV4$a$tS1cMM?GKlKlE~%oqe0YbHOb{bpetw;2zEbRoTQ=a71I7^+7ykt7_x0DTI9g0> zs~nNS8wkSB9wnr0kiI|^D%I*-N^CLpg9LU3!52O|T6t;;$eB@#z`3EkYb!!yBO-JR z4MBKX#MI*BSLj}W>C)eXjWwC?zf}XSHMR}Q?YW^hXWoNlK}*Z~!!tv9PhdXK0emFb z{^c8)>gXJFw9f57GaFfFDMdXsv&wBSuzr1kN=PaxeHg!IBY%olKtN5D4b!V|!KsEG zHjMZ!vSXO4H?WoOiF!+U(V%tIH!COYTNlViNV&?!{)P}1FdDG>fYjlrxXFS^@oboX zqZMFh*b5)$zlSpiVV5nB{i?n-R}YI~r$IF@s5quh>izUd&5oyeX(qt*Ik%j18WkRE z1~L@z3ho{rFp~fwqGF&2?s?Ei;XwzG9}%&s#BB2CPcc?{)DvRS?)!Fw(Sa`ou>?K? zb~hkjE{UbKKtl1b0(Qg54jnIM_Le%ZFGxBmqzS?FQVVzpK`_#M_AI=95Emamg=GmR z*@04jb$&oN@rj8At8a%F#yT3h+?SS@nKx_zg%1cw!`K_H&42*L(o*B%DF#GCapGm;ryq0t@#W67(@Ux^i@}~u z5N?9cuYwt>W{996yGIZO0$~5RDL_Qmwb%C2C77lp3%`z9U+}x{*f}_y(A2bdaG+9K zzE&xInwjfO8#&a;H+=~b)T1ru@U-D_;=-f&!1dL)qDKl(IH{*-%oyB$aH+P6`3l}Y zY~d$^J)Q)23SeL(+3A+KuU&$=uS|Oyw_q@g*Z4Vr7;g4B=2*U zdr(wV1aJe*9ZM_Byf{VOvl@_O1Z#f;8se9AG4wgfQE#6c*PSb`Sihe}wCm$iqirvI zVtmHG?2Y`2V*@WV?~L3r#&V08rZL7ve#Ar@FHy~^-)|`+J2tcF3bUQUkOM>tkOLsE z15`S~%R%}pu(LgbC$2zlhK`;d9~Au~O0k9`8%SuF>e%tTHT;Cs1S!sXX?n@_wQ({R zNA5f8qpAlXuFPjmshDab4^NY56wTG=9$61G)*m~Tb%NeTNu-ke-`F(Ck6)|vOJ1@n zRe|IZ77wobyU!v;DlZS({uek5nyZ0A1 zYqVo;0uC}kH}_Ca)tuMTs!Q@g%8{!JD;VT!Oci-<8WxNz$4l`trhqZgCMHF~MqU@{lDQNhbI#$9oCEODqVQr;d%R~FJHEA?kyrM?qmTw+*Da{G3Z9XXOAG;scl;3NxHk{K8o zaF!<_{o2cu_dI4G;M{&HOgStPV3dJz6pimqH&0QuT6XL`${B2U29HdVrhXQhKV9Td zwK=x)4>@Kqnrf5iMVfVQV5QkyaGO+omXYB8B~}Xm9)mJxK=b!e)U~6dWbyAmuj8du zg!9IGIIn!VtKja;H+*BG5kI~)pcAZ}F(rX{pzm9%lvQeOt=*)mMa5@H10oaZ=J`Y_ z@F1nntoyEzySX)3Na#O0YGa7p8fIGBt=!z;Gt_im!Ed=wLkNRJkXp6)+fU;{d*9+B zRpJI!o4rnQ4^XdoHj(2S#Ay>GY$LKS_FrCq?yR7q0(}TaAkmKjjwdd`PnkZ02p86k zz8M4)8pZVaN=Pd5B>DNv9lfQhw#ss9C6MpQJQBP9QyW!t{fVEeUR-MW_Lj~(TXS-5 z$~R2O&-68z68Ld~@d1D=pjl%YKIQK614HETe-=V7U2>Y@ZELT%K`|fCLA(uk7v;jU z*zByTsEa(dP}4k0qhqC~WejN3v)>-L{$5->xU!G7)b;YnIua;ODp>l~ zhtzME4FBunDia^~ot=l`n>8iSuq8Ws_vIL5ou`4YD?HAw4CXKR#E%BoElJ+(kBpoe zh@5)DbA68o4XK3tr3qOCtyWS&Ys322YQD36S{M#@SbuBPZk%YhfkAX%OUjW4|N7R3 z>)%?$I^yJGlXBMtc0}sE*F{Lld=aZYoB`(Xbv0xT%%ZP$YT6jE@8jpp&vQDaPZ?84tm|< zEBT_)EqNh%ZAn(2?_Vsi87kC0{`2WRnPZW8dhfSXY}u!KSkFX7mWnmz+!rH9k>aFJHF&<^B+nQX4+?AT#hbopD3~%_upuu9;r-Xvbm*^Qb|KG zTj?Xx%(ya2DluA)s)C;?=<`J`jE^Q^_`qBi=1Q5O+tJ*tau_f!PP?{mDxWKrxB;1) zbf*pVO=iH3Ogwt?CME8N>G&ha0jq!LR+Z56-M(G*t*@W#75<2rH!-mY-HIgms{$6< zAvx8Lqx;O}8KKJMg{#1|>I1r3@bcl@tW^Hf(rHypXUAlYLKj z_ajG-uF14uq(CB#{0=XtAdN&sM&_ba{dDdkf<#f^fBSas;zdXpcCpl<-$1}8e3#K5 zErQ!N`}6DPwqNA<+48eIxOF54?Bt@J!%lLbh9V_209}mLO%R1Z{epV}{D=|Nb)hDN zL(y|y`gGpUxBb6*05Q&2wq+9^K*dEOn3+_bgkTw%kl!x>?R6M=Ptd!X8UbNp zyO!i*TuevBqf?WUWBB!+pjN}NfR~#n40cElgAb82lcofL!Qf&XW<_bm#nq+R2yXBE zXlvl@iQY0;f*;sjD)3D2IaD>RHN?A;w$mRPAtS9GP1A!ycJrpN+Tfrd+iY(=y?-Jj zH*Z4w1HPt>12Tx-U`P$H7Q;>xanNCLOYt>vZh9;b4ja&qf^LF{xgFnUmT+&;;k}wu zMpK%iD}Vj>EG!-{drDHe{_4dGf(;@mscV{ARI~^uQIth^1P~Mjc{^c{hB*u&Nwz^| z1fYb&{L%FoAsjo=pnCS?NvHmr4WNgx1i?WR?FleoIJ{sMpUuLFuc9JIT!HORAKhT$ zPCj4z?AdKm(RZJtYwo6eF&L{1f?#(6B$dO5@!4?I#6AID#_Q8-q+YoK)f3%fjmZaI z=v&o7wnG1(aatKJEf7F%Pk_y=MYbH2x^2&NcB+Lmd;SAl6nOq~J>iULWV`VT3gRi5 zZ$di>-;T4duR2r)(1|6oBK-xmd?w<^4c|!;lv%I>8)No9IbDCBcyd$@@FB$D?&Us` zn1Ra8n?AxOWr?b)Bg$)!_zr2Z>NC)<(SB)a%2Zr-M+J#_amQE%2mmv4b3prvOg}gf zBf=A8nL~%;~Hv5$O_b{nG^rD5DE;X2Yx5Pn|3pt0Bmb8bujFX+^qoh3JQbaraR zN~YlLUU=h%q~Y;OJu32bP^oY6l_*1hpRU?s#-k&SgmRhD!N+ z^eYSF9WDzKrWD%WAOW-&L<^6HaBQ0I&@KC(H-@5Y5VP*QL4yxJqN(0TR{rJg_KT99 z)?+_xJEZ{$V$}LJi}7(Hjh57f_O9Q9(Pzi519Ue*o}8ztpMsX=-(g^ygdSl z8er^0t=tzALHGaWjkYRdG1^`oQDc~ zJdRK9wo!Vvel{ggD^8Kj^??2UxPMTFndj-_9d;Jfa;J0_td6JXb{`uD{R30Be0nfQ z0IsGQR^I=|#mT98ob-8MVq$gbTNSJ~iKRoo!};=Mq%(fXu>W7hoq1G_d)V(EZ0${< zj2UVZGDV1@QZ|n%Wh!Z+3{6TInlvbE6dT)|icCeCG?P+wOrIcuG>*1Ohu{@B~vyWG!x-@o7WyRPr|dwnlk+Yi;%hKvO(d)rW7A7L8YkVQ{) zlTr(S8X&v-)vXeyS63*U@D*Pn?jQw8bm{&sxqF27cY{&9@u514CalPPab9k?UU-;3 zvZ75zE2Ey`;_I9J$%B?PlRlcuF9Qb%ZX8y}P&5!R@eB%oZIGCwI%Me3*sTG@eO*k9 zW@GT5dN=Re*-(0y%Pd7|I1ElaD_sDIr=T z@TyCAwL#_GC9KP-Ch58h>sznZv)6>j!}=aTvdcBxleR`JfBhE-A}tUyCm3l0sg1N{ zwztxB&&eLbm8UD{Zu(WU*s^$(ZPyU#+>JZpWzIdf-2aXN?l^56X*(`I?`GMI?3vsA z#8?x3y2q<#{$ZPaGg=tmfDxflt0oqYYLifGjtE#fF3-a$A{my5~3)lUte;-YeY~i1M9#+a4Dr_ez(}!BUYmZcZnd+q5q!P`Ftq5Ap13=(p_)!^gYJCx_?^c{)ym&B z1kXC4rFd01m63Dyuh-M-Cxg~!~6mFZ7km3Sv8S4et7Sg|`bTsF9fzM+jVSIcwt^j<2Ut}kel6&aLP8L| z;l%Xd$%(OyP*$IHFwNJwuBN_ZsNxMt$*Ua|brC)$S&T*DI)G+S{v1I}D+AVKeBHSV z7wE%r=K7pxB!V({Rx$6M#yR8GhEe_Bf4Cl8k?d@@etkK+jE*e8r`|pPShVO7XKC^1 zc8cgWr4HIyIUvT2xs1Y_RfIq-GxJbJC3AZ$w`{pJ<}31F_v;b)@U$wNtmJiz#tqz7 z5<4Er9WD7k$MDcs`RU`wO&?ra(=svHV)p8?%d7AmA0Xt0>^Q(xz9jG=CLQc&UB&RQ zuset<*@h@Y0|SN&kJRMXKAPWOq2SJeuM!g`Sa-nasG~eT)vP9p!E=fg@P+7XyxX+F zyVJSX?+<66MNvz}$yD`W|8AcH*Ryh7+i9y#I#_3HemqLU1yRbi>(}G% zc^w@8j=NFQ{LE$wH@FGk9+{jhNVRJ}GHlhkr=z81;R|^@oLK}+$S~Nj0Xly})*H@q znu+P?TqFi=XFhOX$)lp4zwop^hcDe`fljpsa@^ghuVzZ(GR82cc`cvo_2CyB1P8Iu3u=^1RKfa-optZpXIG0Xhqlz z`#e$j_*SLU?NeVIlUy#ejUZwK;x@w$HE=N#yWQQ~AZA_aiu5|R^Hv)2udifv@C}@u z6Ldn@;-6YuM{0SxsVsk}W|{8OgHr~qH<@R$dGl3lc~D(4l##SbDAS7Lo%-NU{2oE% z*|Uns&)0;p(xaoBn2Z1@?>CX;Lq#PHe6wFnch*)$)~2A)b~0N(RQDxC2U%qQ-?cbg zzZ0K0HP~Z(o2~|$Jwo*GJe%55Aagvf$xDx%YM9n(2;0XRpf=pt0TveQ3oihuTLXD5C+Z^Wp zU}`dA%`VJRrWSoDiVSSDK9hCmeND}cACK*mg%+ z7n!c|)Hq2{-wvi!l+*Ixmw9!<#hT)U>A~f67~%3O{=^wW->9tv;oW|yd(jchI4JRZ z_tBJ=nKZbsLf&18gn)DBUP1aU*7Iz`;b^W$yFF7kmmkE@6kkeGIG6{k1d4CE?N0hC zuDlrWP1kY5h6;KM=8N%#K8QY)s<$wFD`Z!=wHXbt1zvAK(ve1y@e{H5&NSjlc^Ya@ zoqE)la-80h3eT(_y(Dh!&84U^DL=_8gRYVG6SL73Pl0X=GYbzKXlp1t_q;QI)6rnh zkA7>yg0#HcvCc*mMEB@=)X}7$yVpplhHe0Dt$KFmnu=s6)H6elNwC>?@RBYRAv`eX zeMSZb9GSW(>QQs+zNo8g7($ZR3CWbq*u^#un_7*fSJSLvyRR1y$j4>A@OIcCYz$Hc z1kkm;pT=`U2--wmN3iRO2;k^}_$< zzf1QrwMBKj8|iXjs>csv&D=!Es|WTGoQ03xU)*_4(<`uE|Y5i?!Nm4+}3J z#gLrbX~UW|4}LI|0S1W=-YzY9%av_a*9GQC>aG|q{fmS|1>ykiSSMuW#EDO`vq?5N zY_Ele4iwU*@X&|dw=}J%@X~qQB#Z-BlNfcUer^!hd#^r(N-Xg#;4B$8?qOM3Al}lP zA68aOn4v)jZoc2BIk)<)=AIk~35e*lkTD!Rnnj7?#}2;L((?szl)4kMp1;Q|6gK+0 zb*{V-avz`|mNcWGZ+{u{Z+(Q{jjZQy*QdChu)IU}3^A7^ETa+w2D-J^jvI(1n=f7) zWq@V!PFw>J<6mBQ2(zWO+|FZmy44IYMiGU62RE(!{J5y7M)o{OOy2{WsID1iY}gT= z)R1!Nh+ss@!~20YmW(0R@?Bxjg$vhp&+qHOkW{w7Z{1Jh&p)vtuqMG<4HCe_&U4S( z=uid}=flLutv$B#rhaIk3$_jahszn;TBq|l`|3x~eI-8X}Mi)Eb^cDlGYY;%(e>{>Z-FgJ#?@rx?192oJNaDDrw>c4ST17Ufda;ddEqOpjP#>CG>r?hfTID?gL2ad`&w zW29`O_$tEHMNXr}HDA)B#GFxvMW-K&g#>Ud)t|v+RQ!xo)FOW36=rzn%9VY-5Q`C! zkwYtNZkBY`y?S@Au_<2P5)tXe#(wPRST_t|{ePB+YH5Rm11fHDIn#tv&ym@Z z-4|2uKhW(GrjRF=ip9Moq-<`gFpYWz`<_gIVcVo+lZ6>=BV%`|wgwS5Hl+uYs(xA@ zNo#t2Z&S6qy9u1o^n*OksqfYH{^3an@yNrD8#h*B4K}zh2__W zGiE0=q;y~U(p%2=WX^3|>V0oeMP)hJm>L_CnBFpA{`$W0)NTK>T6B$Rsc`=_xemR8 z-L~e2chm>(-eJM-%-2LRQGGpDKYH%&16eK#_eP-#%I* z|9IZdM?Af+Qg5j)5Bb0>?blMO*X3+A)fvp-cOz^}QQrgm^uir1vT@DrCt2bT>*~Ao z@+wZG1V9c~4#92ONBt22-xWQtvUhhcTjLP+8{Q+CH0Oio365LmE&s;cVQtP7z}naq~@8Fvyt z8zLZ3c*C4^o$}t_ckG?N9iJd3oST|@R6QFK*_SMt3gq~_c7LnOX=&bK@k4rbNjr#9 z;nRMy1ssw*H-#%O1E0Tq$qJeq_h`CFnZMk_n*Ug34TpY_|8XSq?Y!0(DqIVREJb+a z&70(}Cx{7<(?4BtF$L0J|N8$_JZzS$H#s9GC-*)lIGENbOd~lEE+*5qwTF%&WGBvp z+)#*OMk~ZIIuOYv(yQu9FL8pQ?5kh)nH&?DBsh<$sVU1`TRV+4lX^&=Lxx*3F#+n? z6khk`>sMNXPIoraRK%%CT3`JAdwYOMp}$<_f8NnG>xVPv3vloWoe+{HN?VD0iy({= ziU8q)bDEyiq<_D4{1CT>v2EDqy-^{YyZ7#0^lfett>>P1-WjE>vu|3WPgF?Ac&Mu7 z;|3yU<5K?W(lsUmvivSzuBB!E08M|{;G87`yK{6=uELA|BGd%Nr~BjIV_fskKZ&eF zz)#&DpW&pdKmTYU@xTAky7c{DDv>7iKa@J%St+;bhPJ%Oq`Ab$3X)9k{<{7)5?ZpC z)*bp0`~VhBF5d1xt}%V6)MWu|<}IHRj*ig=aUHLO<;pJ{aGcw&%3pc}2A6>R=9(*?*tSw&xqzq-1p=8DjkMY4t! z5Qx&=`Kw59sosDLj%$6L$jdKy*<=2zlR-gd=H}6^NTE$)HZ3Cm6pjJDvhcC8x`%_c zr&e0O%m>o$)7K$D+6Oda_FLW($p>p(f#KS!A`A{zrUxPgGfIQ*b*2KpP?>Rv zPQD;*?}~yRJ?F1Geg6Cx@J|kg6@jW*&z>FjC45z9U#M$roHo!8xX`Xv)Fb^9&>?e1 zzv3Q6k)^u!J!}&Brz=7q0M3$LbD%ecT~E5k`9w)nw%u%8v&9}>FHRG7^fG#Vb<)r5 zDOz93@H?TASwSKG;xZ3f7U|&q;h1~rkI=qSqU2a`c7=~EEiaXr2m(nc<{fPbxW$8; z1OPH=5)PzreVh-Daz$&WGjJm7?IN3JzA|I`bD{?ar;(#h(htQnjCoP0vyi0X2n)j&!0Vqr0Q6UU z?XG+8DI52DnMn50^yk1k34!Xqdv_|P1);}!i(ZJn%@v3@I_nK{G#)9w^e3>x4(X1N z6FIF0b7Ig)CohbNP(Uh^oWJn@D%{>44SoEqr^tr5DZZvrma>0;FPV8lkNmfXD$N$E zgZq*xI&ez}D+`!fI^1H}H&BIK>Pu1|z{PLC!Ibd!AkVa@H;*#3a z7a6FB%#jSAML2TEkn!i93(id}!b?-s;exp+Xa&g_@~t$htN=*A9eiERcI=)@sCf0{ zMvMG^Z7*Zg_yxncbsm}O&CTo1(#4215l!pDMZ2$f@aWNgGDqb!gpTRB@8Cd+3K6|~ zi`*NEWA^)!vq}t*kC--U_SOQLx(D}t1Z{7VoGVHXx;1N^Tyh4-jKg5lZBVd6hu6)QKP~VmBNbq zfl2iDRu`p9^YU*KB6zz(DQTQ-m5;yAwhXNk>HBxfYP#L3o~~NWXf34pjjy6#3z2@{ z5Ruaku-myV^+s#fkSPZ>E3Y0Qx>utDSV<^VYpK&a{sNs5Sp2OA0MbVG8 zYm27mf<+7*G)UR}o?y{<@lU!wh510_W2iZ{6;HUxf#s7HL7~`D_lknA>4@?@i{;N| ztEwuF8#hXOPf+GtJpxsC?3!iyY_LKpA(W~F=L?yqRUZY97Fw$@;s;?+b@mZi$bao< zf`o)H#R(@zqKya}u^}}%CZ@%2!o^!jNsbv>FMDxPds|8lRdRcO!IdrLiW?u&Q#eIB zBj2`E=L9z)<>(IJ?(i;bgS#X((M;WZ-Sva2F>dKNYHE@YaEAVU`_2@ut6Je+7fG(h z95=KP9W^iUTv@4j%9-|aWNX*u*Wn~ny*@%+0+4jGR zE~%ns-I#HZ_I&<&YDC6^K-~%*0<-Gi=thCuY|(+3SaJu)P&Ajtfec|ccT3->EhhW3Xj z*;K%oJLJfth%my;&1ti)wgb<<-9CqDcz+DjYz%a~_cUO~ z)05*(0$6lWi0j5b1mLsN9_Gm*_a*l;$)!K5DMQ86999 z1RlGne^#tGjD>2-&MF-i9$PqDbDDoN*$b8kk*Gim_WJy>Wu~#2S&&YM$t{cf7_{ih z9Xmm;3|Qrb=fSW2NBK|RxGyZDhv@U~LOyE6!}hamV%4A}@M=o!`0RPls<)pwmY_*b z_R}q~1gi^LUh2%sGkDo^7TMM=3Vd7}J^}I{y|)W+_VEIoi${39_crD6;o=xKZ%$hhZMBj%U%;jkd^+8FTbzHp{#T_;q-7=(-lHKGe_C9tn zsL-lGrP9*c$rmuqqt(&7xI z-GAPntFfG8Vo8#>Hbx`R(V+1Suh(K)c9?ONO>f>z-|_FmYP%72^_MPy%aIURWe3@w zjQX(R?r{2CmU(|q{)I5t{S8zEAR-i{LCU5_hlkch)88!&2dI8QbJ?qMcPeqxLFnCB z5N=N`?THg@koS-mVLV$9$(~Q(*SIHl4-e{U7-H>?f7lck@*`9nD>VBbiephQs8?)1 zVr!&hI?ND(s^(R6Fh@6)4ncWeZ%L}(e)fA&@*m8oL=EHPiy05&Q+Vf;ys$gaKcsAJ z60dK*H8D2E2a+B!g;FpVDs(_&IJAC!qSxx(42h3Fols2lbxy(wD%##|AUH<}zqQ~7e4kx|S!ysO#j6b-g4-AA z97;5LhM49%b>hU_k=r$t$Hzfg-Z9hK@voS;7J6lCP6e&XH-DK9St*stywIO$HGY<9((6Dwyh33i|bFh>@&KdQkeU`0Cu}oUm507%a z#dGhX%QL*q;F#*N;HOWXG^0){pKvI{7{6sh%U(@KsyRe!r)4Y_fOB5kE@$WQSNQ3K zxl6~&ziK{GVIY~*uDr5UZSxZI2$ti(mjoFp`!yn;V+ScH(_eUU^wp1i&(TyGCuDulrAt3E=}7xqy$WZ#;TLe?01fj* z`{6RUaBY?Q#Q9~}MqWeH=sgCDP&Cr0MG6u3kw=;&JNKKsBMHpGCSt1Fqr*d}fsEp9 zPF%k}p)7~Gv22&wSrt!)3K8stLL^~pAx19*?!St!J=S{zKIChIHxC+4O=35bQYFB8QFH%_JyDeY7)2tBL35p`K8V}|lolV~6DQ+#q!>-Sn+Qolhy<3)l zO>bkyEZ-XBR>`JEce+ICyaA;um|JmrlD-hZiJ{&92EW@OpWgdg9hs zP9?~>#iV#JV#OKCyoZQovj=_XUZ{z+SJVn0L?-JQWL5liVS7x4SI2sV5!!oF#x(R1 z<@V`5#fBrtLVf1Zp3i^|g<3?Bkh@m9am}gA6H?BC1GO=kGzA2lp#itVwSyRJceYON z4I_96#Kw0FT^spN#z`As)eO4=r)3?xz0TY#0hw-U809%tm_3F$CV|JF@03`+{5fbX zg2w8%tL@gF8lkp#!WBdgTMdgmQ#Mg>1q4z|^fP35d0JhgHRq>E3$HiMUZ3GE>TXxf zbSQkSbL15U{`L#?m23Fw?5MSUz7wj7LojkKP|C^486YJ!P5~^)`CC%^z1%v=Dmtiq zd-m#u^FcusLA7^=jbdJ8-#nwtZ4HYYZyqpp4!jYNI$Wa?R_j>Kd%GVOdWfcv=|1fi z&wDv6aI@}m{hY~zR&UvIE!l+hm=QE|dl`Prxb-xhMH)SAqxor8nR8qO>z+O}JJyoP zforGI!+$p^8j+F}L09#*@|ev_TBlxG@y6p*&6rb9;}fl{t>gNaQRBsbxvgaVX6GGf zQ5!AUgd)|j9fLmm_=qCyzpxr2cCs^z)@tCfR~FBmM|L7L++t~IE4OZ*q$@*+rpzb` zLC|CWTL(T*QNk0+ZvI6}TRXUF=kl{kFZ&5ZTK!Zyiqedh*)>U~!t1_p5k`kb>UGnI zzT4JL$cyav^J%;)dk~qbXQ21`uM4|k$QO$DK*&2M^%Oa23Cb%AtKwJ23IahL==$Jo z3+bh6*AK6(DAk0IA9qHcr1+FMp{rOHYk8z7bjTD#PhySIW=HwJNjjsYQ@+-QC!4Yr zjS{Us*PD~(Y+4vLn|4EOvd&MLVcm);}o|Y8vADz?KrygWtnGS4clW^OtDz>Df8DMqV#t^ zcShSVoz&+KI4kV)W-zg&x+82&7`D2|mA)}sSPwZgyVzt1*0Z}+7rH?Lfus^=-3jO* zFNTZuAn+7+RCGnvZEP)yhc*85k6ABQSs9tjNkJDJkpk7_I<)R6=~cNcf77WE=a{x- z*k`1i-iQxLjf(4Q-~SyL?f7u{)2I^_yI&Ukytyg4ZzB$vCKe9f! zAx)V!Vks-{CZp<4ANEBpN>45Ny2qUGg!i7ZUch6=c&38Np+ zrQUY>aMHm#Z2$fY=8iX;Ca!9Qd1(crodUp?7mw8oz$LnbPwHUYc zpqlM<+qDaxyH7IR!oBS|v{h@b<6@6I=k@g|JljC?iWIn?RGTiZ`^T2*b(s`EPr69h z{v#Z^NtNCA)3AwGqUqKw;G#}4H9{4jA}p6j$TOrok5mkKBP=QocY&L?vYI^jFlJ8R zB1-1>G$&2^z$m4ck=iU{a4;&u?10%vLUu#OklVs0fuy|#ZekUlcPy*_;DcJ;rBP>I z)P~kc`&CE1LROc))W1m8c36Suv@LFy8Or19vMo1X)?3kZW9WK>?Eb7bdj_k_r0rXgRn3bVI7 zRJ7b}aOC%k+4m17NsUyEcr^FV0{zvizBNjM6`mcaR=8vRh7D1(%NCXGv+ol2&QZ5O zr)= zWy9?$O2Vf=cQg&@?_Zo3N*BD8q|w!{$@x(}_^gOl{pF6oL;tLIaZ#P!BAd7YQy}-} z+_0-cEMP^3&(S?*sU~IDvhq{6h@HrDU4F6AU2LB>?M!-HLMEZ?Q=+yYgaN0!C?DO~ zaR8vk^qJPwsd|nFC_@svcg)0L<-SSF-kT};i668Jcz5z|!ZA>7O;%L@yo1J4BJ!(( zj&%y9WHHo{p{5%Q48&qe&gA_4VFr`ioo<8zg?7{y)}hEQDlY^CEs-o*StzBNB-m@Z z|6!%q^(Dufx9GRjbwz!sCk^q*uRr5i4q#inr?^+%V(q96k=xcRY!6+gcq(Rm{@tEq zRVR6bGX1&u$(Y2am;TuAdm}#HplSWsfqn=bs6>FRvUUF2X@2X_CIr~y)z)Th(R^#vXd;U}{3bP!vCCJ+YR_vc&`(N1{N0_d35VRMOTQ~CdvAypo?+ClJkx28u$95Xt}SRCDbEBK z;dHkznVGt4xc{FrfleI%VkQlaKck~DuBgb3RHQghB0A;cGgKF|)u=VsZP<+|CB?~$ zi}M19BsSd3{aAVE_t-@rsYXLKI0p$HaEO^phhK|1W_S9C!|Ad=c@~edsnFKB8fuF~ zr_z-^2}LctlqG}iX(zgLxJUF~6op8lh<2)^rI+6gy% z7_!VGf=y#i0v;Y1bKgb=Na~5K+?t-)Gdk43AiAG8xJU(IYw0843y?PYPkn%H(a_9H z*!D!hzWBTM=6~MS7M3a&-W`NR&X6I_ zHMy7h5l{%Ahr67RAR)M)5E?Q2-FvApUJA_(6`~G|&No`m4&Ml5i7St=ddI%xi|o%FY3C0%;axu223RgG4V6$PUI4 zK*f_LZu#T1JGf#6r26ZBEZZtoTT_krhE0NkXjU@)K)TV7&hyGHJ?CHo^svzPuB0%4 zLZGBaA=Zt<-|L_ZEcB8*_Z-`lu7=qCUZql^1aEEagIqC=(xzfCAwf);!CTn(0 z07W1j&M(WZU7dxft@dj~=AM#ROOyKrMMbgC&`%YVUb}dxo@`+24sGTbRV@%ZkvL_2 zY&X}jqOKHw!sX(F!^~$TVN)DSVi&EC3~R^RMc7>X4U0p}*fWMzhULTbFrgetplpc%Nxd+H>fEeO-qY_L1LiCu+0UR z-6(re>7w|inkj4phWH3~4eHhBz=B_YJ%qMTH(=HW(jfO<-w*|$etr731wI>Z;;=g( zfCq%)1nn70&(u^em~CKR@DM3YOXr^Er0J}Fi~Bt}T;z{W7~B{6AWYQDf|32S9m)o} zt+fk?KmW@brJ>5kv4S$FqT*uVj&6sZVSeKJ;PvD7u1ol~W+sZ&Yl@+R)Ry&(UK55D zEu@k<8cUiaXcdu{*JADQLTZktt?gK(vIjIiofJsV~X8}LJdK>=&AlLn*aXa8vz%;f_h$({EC$}2<}QTv~TU;j%fD% zQl+84q7oRE)K!P!EWEkr=jM$FX+0K?xHRQ6gX##7ZxtC`M9&8{7AGHkvU%1z*8Rc9s8?0o_U{6c6L;$Q;@+eUD#HA=U+ zZPv)ih#w73r?$05Z<_FeaRoaiol@zBOQ%cD<1&0;um}9#liB|dy!U_KkM8Xnu-~xR Vd{4)uwZb=EwrGVoYJtVR{{hKz_H_UN diff --git a/01-exploratorio_files/figure-html/unnamed-chunk-31-1.png b/01-exploratorio_files/figure-html/unnamed-chunk-31-1.png index 233485f7a35560fce8d6039ebfa2ab6101d7d36f..7fe56708cd45757d495131db4065f64e6b80210c 100644 GIT binary patch delta 163144 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

ral-A-DGk?k)ohko#Z-#=j5REfL`N2x304ejOS* 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

JP7M_>9B#r>>KZHz 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 z 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�xx9neI>K}>Zo`Rh{A?^C7OTHZ(8=-MnmZ2}1Eu zWi18eJ?B}^R74zhH_TMbRXKY$7Ph$2Q3!;qZt?u5C9CcFrzImx$ymQ*T!&N+A@0rS zou@cJg&n4e-92%`7rjk%bu!TGoj8Hx*2tU}4W&w&I6)P51u91j1^KI<9Cy9{-0(DK z{|5zFm}^XTi9Li0$LBqH$ORS)^r}rtHj<_o)^w=`fOs)Huxemx}=yKvqaNsIiYIM%!tn2VVjFV-Ec;R3; zaGjysH}M~Z2n3Cq4tP8TbFKZTUg}pS=?&vR7r|) zEmD#?<9;S1{!C_KUGV%0!#gZEOXM{t!)jj7o%c%I%?IxuJ84~1+_bM*z3;>o&e~%w z*T~`qd8T_MTL3!!4@^LdiRZQi&br{ENo2zkH7Wcsy;c~?R°e!a|s$U=vBDpLxr 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 A%K!iX delta 151851 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%0AgXS@n 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
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/89-transformaciones.md b/89-transformaciones.md index 9a3d778..2b7f713 100644 --- a/89-transformaciones.md +++ b/89-transformaciones.md @@ -106,23 +106,23 @@ animals_tbl |> ``` ```{=html} -
    - diff --git a/89-transformaciones_files/figure-html/unnamed-chunk-3-1.png b/89-transformaciones_files/figure-html/unnamed-chunk-3-1.png index 15220eef7ff937f0a7c1a10125aeee8697ed159b..66b87155d7a5787cdf4dd4c74034c097b1daa11d 100644 GIT binary patch literal 36380 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 SoCpr^r>Ul=T7LWf^ZyS{Q%j2g literal 36406 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 diff --git a/89-transformaciones_files/figure-html/unnamed-chunk-4-1.png b/89-transformaciones_files/figure-html/unnamed-chunk-4-1.png index 70642ac77cd2135c115ea3cd22b32918434e1489..da0485d28f3e76c0b79637bed2a190b9d6805854 100644 GIT binary patch literal 116640 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 diff --git "a/an\303\241lisis-exploratorio.html" "b/an\303\241lisis-exploratorio.html" index 5450b5f..dfd1b3b 100644 --- "a/an\303\241lisis-exploratorio.html" +++ "b/an\303\241lisis-exploratorio.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto @@ -527,23 +527,23 @@

    Algunos conceptos básicospropinas <- read_csv("./data/propinas.csv")

  • i3G2sa((tV#lwCySdm0 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≫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

    Y vemos una muestra

    slice_sample(propinas, n = 10) |> gt()
    -
    - @@ -988,66 +988,66 @@

    Algunos conceptos básicos - 9.78 -1.73 -No -Jue -Comida + 15.81 +3.16 +Si +Sab +Cena 2 - 13.42 -1.68 -No + 16.47 +3.23 +Si Jue Comida -2 - 11.02 -1.98 +3 + 38.01 +3.00 Si Sab Cena -2 - 22.49 -3.50 -No -Vie -Cena -2 - 11.59 -1.50 +4 + 3.07 +1.00 Si Sab Cena +1 + 12.46 +1.50 +No +Vie +Cena 2 - 24.71 -5.85 + 8.52 +1.48 No Jue Comida 2 - 9.60 -4.00 -Si -Dom -Cena -2 - 19.65 -3.00 + 11.61 +3.39 No Sab Cena 2 - 18.04 -3.00 + 50.81 +10.00 +Si +Sab +Cena +3 + 38.07 +4.00 No Dom Cena -2 - 30.40 -5.60 +3 + 15.06 +3.00 No -Dom +Sab Cena -4 +2 @@ -1086,23 +1086,23 @@

    Algunos conceptos básicos arrange(f) bind_rows(head(cuenta), tail(cuenta)) |> gt() |> fmt_number(columns = f, decimals = 3)

    -
    - diff --git "a/ap\303\251ndice-principios-de-visualizacion.html" "b/ap\303\251ndice-principios-de-visualizacion.html" index d6ab5c8..a9e02a3 100644 --- "a/ap\303\251ndice-principios-de-visualizacion.html" +++ "b/ap\303\251ndice-principios-de-visualizacion.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/ap\303\251ndice-transformaciones.html" "b/ap\303\251ndice-transformaciones.html" index 75cc578..968d952 100644 --- "a/ap\303\251ndice-transformaciones.html" +++ "b/ap\303\251ndice-transformaciones.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto @@ -553,23 +553,23 @@

    Apéndice: Transformaciones arrange(body) |> gt::gt() |> gt::fmt_number()

  • -
    - diff --git "a/bootstrap-param\303\251trico.html" "b/bootstrap-param\303\251trico.html" index d2a5a6a..c8950f3 100644 --- "a/bootstrap-param\303\251trico.html" +++ "b/bootstrap-param\303\251trico.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/calibraci\303\263n-bayesiana-y-regularizaci\303\263n.html" "b/calibraci\303\263n-bayesiana-y-regularizaci\303\263n.html" index b206869..c2985cc 100644 --- "a/calibraci\303\263n-bayesiana-y-regularizaci\303\263n.html" +++ "b/calibraci\303\263n-bayesiana-y-regularizaci\303\263n.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto @@ -966,7 +966,8 @@

    Ejemplo: modelo normal y estaturas

    Ejemplo: estimación de proporciones

    -

    Ahora repetimos el ejercicio

    +

    Ahora repetimos el ejercicio de la estimación de la proporción de hogares con ingresos +superiores a 150 mil.

    # inicial
     a <- 2
     b <- 100
    diff --git "a/estimaci\303\263n-por-m\303\241xima-verosimilitud.html" "b/estimaci\303\263n-por-m\303\241xima-verosimilitud.html"
    index 55af588..5a24cff 100644
    --- "a/estimaci\303\263n-por-m\303\241xima-verosimilitud.html"
    +++ "b/estimaci\303\263n-por-m\303\241xima-verosimilitud.html"
    @@ -412,7 +412,7 @@
     
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/estimaci\303\263n-y-distribuci\303\263n-de-muestreo-1.html" "b/estimaci\303\263n-y-distribuci\303\263n-de-muestreo-1.html" index b050cba..815d6ff 100644 --- "a/estimaci\303\263n-y-distribuci\303\263n-de-muestreo-1.html" +++ "b/estimaci\303\263n-y-distribuci\303\263n-de-muestreo-1.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/index.html b/index.html index 4190bc7..552cf9c 100644 --- a/index.html +++ b/index.html @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/intervalos-de-confianza-y-remuestreo.html b/intervalos-de-confianza-y-remuestreo.html index 9a12855..92956e3 100644 --- a/intervalos-de-confianza-y-remuestreo.html +++ b/intervalos-de-confianza-y-remuestreo.html @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/introducci\303\263n-a-inferencia-bayesiana-1.html" "b/introducci\303\263n-a-inferencia-bayesiana-1.html" index d623e98..a200d1d 100644 --- "a/introducci\303\263n-a-inferencia-bayesiana-1.html" +++ "b/introducci\303\263n-a-inferencia-bayesiana-1.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto @@ -780,7 +780,7 @@

    Ejemplo: estimando una proporción\(\theta\) está en el intervalo

    quantile(sim_inicial$theta, c(0.025, 0.975)) |> round(2)
    ##  2.5% 97.5% 
    -##  0.14  0.85
    +## 0.15 0.85

    Es difícil justificar en abstracto por qué escogeriamos una inicial con esta forma. Aunque esto los detallaremos más adelante, puedes pensar, por el momento, que alguien observó algunos casos de esta población, y quizá vio tres éxitos y tres fracasos. Esto sugeriría que es poco probable que la probablidad @@ -815,8 +815,8 @@

    Ejemplo: estimando una proporción\(\hat{p} = 19/30 = 0.63\), que es ligeramente diferente de la media posterior. ¿Por qué?

    Y podemos construir intervalos de percentiles, que en esta situación @@ -829,7 +829,7 @@

    Ejemplo: estimando una proporción\(\theta\) de credibilidad 95%. En inferencia bayesiana esto sustituye a los intervalos de confianza.

    diff --git "a/m\303\241s-de-pruebas-de-hip\303\263tesis-e-intervalos.html" "b/m\303\241s-de-pruebas-de-hip\303\263tesis-e-intervalos.html" index 8885c71..f295f36 100644 --- "a/m\303\241s-de-pruebas-de-hip\303\263tesis-e-intervalos.html" +++ "b/m\303\241s-de-pruebas-de-hip\303\263tesis-e-intervalos.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/m\303\251todos-de-cadenas-de-markov-monte-carlo.html" "b/m\303\251todos-de-cadenas-de-markov-monte-carlo.html" index ed1a165..49423ff 100644 --- "a/m\303\251todos-de-cadenas-de-markov-monte-carlo.html" +++ "b/m\303\251todos-de-cadenas-de-markov-monte-carlo.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto @@ -620,12 +620,12 @@

    Ejemplomedia_post <- mean(theta) momento_2_post <- mean(theta^2) c(media_post, momento_2_post)

  • -
    ## [1] 0.7155559 0.5372170
    +
    ## [1] 0.7147007 0.5364443

    Y podemos aproximar de esta manera cualquier cantidad de interés que esté basada en integrales, como probabilidades asociadas a \(\theta\) o cuantiles asociados. Por ejemplo, podemos aproximar fácilmente \(P(e^{\theta}> 2|x)\) haciendo

    mean(exp(theta) > 2)
    -
    ## [1] 0.5958
    +
    ## [1] 0.5959

    y así sucesivamente.

    Este enfoque, sin embargo, es mucho más flexible y poderoso.

    @@ -682,10 +682,10 @@

    Ejemplo: varias pruebas independientes
    # esta no es una manera muy rápida, podríamos calcular todas las
     # simulaciones de cada parámetro de manera vectorizada
     sims_posterior <- tibble(rep = 1:5000) %>% 
    @@ -695,16 +695,16 @@ 

    Ejemplo: varias pruebas independientes
    sims_posterior %>% 
    @@ -718,9 +718,9 @@ 

    Ejemplo: varias pruebas independientes\(p(\theta) = K f(\theta)\), donde sólo conocemos la función \(f(\theta)\).

    -
    -

    12.1 Ejemplo de islas

    +
    +

    Ejemplo de islas

    Comenzamos revisando el ejemplo de las islas en Kruschke (2015) (7.2) para tener más intuición de cómo funciona este algoritmo.

    diff --git "a/propiedades-te\303\263ricas-de-mle.html" "b/propiedades-te\303\263ricas-de-mle.html" index f2359d8..9e17e2e 100644 --- "a/propiedades-te\303\263ricas-de-mle.html" +++ "b/propiedades-te\303\263ricas-de-mle.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git "a/pruebas-de-hip\303\263tesis.html" "b/pruebas-de-hip\303\263tesis.html" index 3c26fb3..e49045c 100644 --- "a/pruebas-de-hip\303\263tesis.html" +++ "b/pruebas-de-hip\303\263tesis.html" @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/reference-keys.txt b/reference-keys.txt index b19eb9d..e813064 100644 --- a/reference-keys.txt +++ b/reference-keys.txt @@ -15,4 +15,3 @@ más-de-pruebas-de-hipótesis-e-intervalos introducción-a-inferencia-bayesiana-1 calibración-bayesiana-y-regularización métodos-de-cadenas-de-markov-monte-carlo -ejemplo-de-islas diff --git a/referencias.html b/referencias.html index d97290a..5ab2a48 100644 --- a/referencias.html +++ b/referencias.html @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/search_index.json b/search_index.json index d3f2b92..6640986 100644 --- a/search_index.json +++ b/search_index.json @@ -1 +1 @@ -[["index.html", "Fundamentos de Estadística con Remuestreo Información del curso", " Fundamentos de Estadística con Remuestreo Teresa Ortiz, Felipe González, Alfredo Garbuno Información del curso Notas del curso Fundamentos de Estadística con Remuestreo, este curso busca explicar los principios básicos de la estadística y su papel en el análisis de datos. Nuestro punto de vista es uno de fundamentos, con menos énfasis en recetas o técnicas particulares. Ligas Notas: https://tereom.github.io/fundamentos-2024/ Repositorio con material: https://github.com/tereom/fundamentos-2024 Correo: teresa.ortiz.mancera@gmail.com Zoom clase (miércoles 4:00-7:00 pm): https://itam.zoom.us/j/92745909276 Zoom sesiones de dudas (lunes de 5:30-6:30 pm): https://itam.zoom.us/j/92518922348 Canvas: https://itam.instructure.com/courses/13328 x Este trabajo está bajo una Licencia Creative Commons Atribución 4.0 Internacional. "],["temario.html", "Temario Plan semanal Evaluación", " Temario Plan semanal Datos y análisis exploratorio Referencias: (W. S. Cleveland 1994), (Chihara and Hesterberg 2018) Visualización1 Análisis exploratorio Tipos de datos o estudios Muestras diseñadas y muestras naturales Experimentos y datos observacionales Introducción a Pruebas de Hipótesis Referencias: (Chihara and Hesterberg 2018) Introducción a pruebas de hipótesis. Pruebas de permutaciones Muestras pareadas y otros ejemplos Estimación y distribución de muestreo Referencias: (Chihara and Hesterberg 2018), (Tim C. Hesterberg 2015b) Estimadores y su distribución de muestreo Repaso de probabilidad y Teorema del límite central Introducción a estimación por intervalos Referencias: (Chihara and Hesterberg 2018), (Efron and Tibshirani 1993), (Tim C. Hesterberg 2015b) El método plugin y el boostrap Bootstrap e Intervalos de confianza. Ejemplos. Estimación Referencias: (Chihara and Hesterberg 2018), (Wasserman 2013) Estimación por máxima verosimilitud Ejemplos de estimación por máxima verosimilitud y Bootstrap paramétrico Propiedades de estimadores de máxima verosimilitud Más de pruebas de hipótesis Referencias: (Chihara and Hesterberg 2018), (Wasserman 2013) Pruebas de hipótesis para medias y proporciones: una y dos poblaciones. Introducción a inferencia bayesiana Referencias: (Kruschke 2015) Introducción a inferencia bayesiana Ejemplos de distribuciones conjugadas Introducción a métodos computacionales básicos: Muestreadores Metrópolis y Gibbs Ejemplos de inferencia bayesiana en Stan Evaluación Se evaluará mediante tareas semanales y dos exámenes: Tareas semanales (20%) Examen parcial en clase y a casa (40%) Examen final a casa (40%) Referencias "],["análisis-exploratorio.html", "Sección 1 Análisis exploratorio El papel de la exploración en el análisis de datos Preguntas y datos Algunos conceptos básicos Ejemplos Suavizamiento loess Caso de estudio: nacimientos en México", " Sección 1 Análisis exploratorio “Exploratory data analysis can never be the whole story, but nothing else can serve as the foundation stone –as the first step.” — John Tukey El papel de la exploración en el análisis de datos El estándar científico para contestar preguntas o tomar decisiones es uno que se basa en el análisis de datos. Es decir, en primer lugar se deben reunir todos los datos que puedan contener o sugerir alguna guía para entender mejor la pregunta o la decisión a la que nos enfrentamos. Esta recopilación de datos —que pueden ser cualitativos, cuantitativos, o una mezcla de los dos— debe entonces ser analizada para extraer información relevante para nuestro problema. En análisis de datos existen dos distintos tipos de trabajo: El trabajo exploratorio o de detective: ¿cuáles son los aspectos importantes de estos datos? ¿qué indicaciones generales muestran los datos? ¿qué tareas de análisis debemos empezar haciendo? ¿cuáles son los caminos generales para formular con precisión y contestar algunas preguntas que nos interesen? El trabajo inferencial, confirmatorio, o de juez: ¿cómo evaluar el peso de la evidencia de los descubrimientos del paso anterior? ¿qué tan bien soportadas están las respuestas y conclusiones por nuestro conjunto de datos? Preguntas y datos Cuando observamos un conjunto de datos, independientemente de su tamaño, el paso inicial más importante es entender bajo qué proceso se generan los datos. A grandes rasgos, cuanto más sepamos de este proceso, mejor podemos contestar preguntas de interés. En muchos casos, tendremos que hacer algunos supuestos de cómo se generan estos datos para dar respuestas (condicionales a esos supuestos). Algunos conceptos básicos Empezamos explicando algunas ideas que no serán útiles más adelante. El primer concepto se refiere a entender cómo se distribuyen los datos a los largo de su escala de medición. Comenzamos con un ejemplo: los siguientes datos fueron registrados en un restaurante durante cuatro días consecutivos. library(tidyverse) library(patchwork) # organizar gráficas library(gt) # formatear tablas source("R/funciones_auxiliares.R") # usamos los datos tips del paquete reshape2 propinas <- read_csv("./data/propinas.csv") Y vemos una muestra slice_sample(propinas, n = 10) |> gt() #xddpgkkgug table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #xddpgkkgug thead, #xddpgkkgug tbody, #xddpgkkgug tfoot, #xddpgkkgug tr, #xddpgkkgug td, #xddpgkkgug th { border-style: none; } #xddpgkkgug p { margin: 0; padding: 0; } #xddpgkkgug .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #xddpgkkgug .gt_caption { padding-top: 4px; padding-bottom: 4px; } #xddpgkkgug .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #xddpgkkgug .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #xddpgkkgug .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #xddpgkkgug .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #xddpgkkgug .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #xddpgkkgug .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #xddpgkkgug .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #xddpgkkgug .gt_column_spanner_outer:first-child { padding-left: 0; } #xddpgkkgug .gt_column_spanner_outer:last-child { padding-right: 0; } #xddpgkkgug .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #xddpgkkgug .gt_spanner_row { border-bottom-style: hidden; } #xddpgkkgug .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #xddpgkkgug .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #xddpgkkgug .gt_from_md > :first-child { margin-top: 0; } #xddpgkkgug .gt_from_md > :last-child { margin-bottom: 0; } #xddpgkkgug .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #xddpgkkgug .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #xddpgkkgug .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #xddpgkkgug .gt_row_group_first td { border-top-width: 2px; } #xddpgkkgug .gt_row_group_first th { border-top-width: 2px; } #xddpgkkgug .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #xddpgkkgug .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #xddpgkkgug .gt_first_summary_row.thick { border-top-width: 2px; } #xddpgkkgug .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #xddpgkkgug .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #xddpgkkgug .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #xddpgkkgug .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #xddpgkkgug .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #xddpgkkgug .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #xddpgkkgug .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #xddpgkkgug .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #xddpgkkgug .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #xddpgkkgug .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #xddpgkkgug .gt_left { text-align: left; } #xddpgkkgug .gt_center { text-align: center; } #xddpgkkgug .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #xddpgkkgug .gt_font_normal { font-weight: normal; } #xddpgkkgug .gt_font_bold { font-weight: bold; } #xddpgkkgug .gt_font_italic { font-style: italic; } #xddpgkkgug .gt_super { font-size: 65%; } #xddpgkkgug .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #xddpgkkgug .gt_asterisk { font-size: 100%; vertical-align: 0; } #xddpgkkgug .gt_indent_1 { text-indent: 5px; } #xddpgkkgug .gt_indent_2 { text-indent: 10px; } #xddpgkkgug .gt_indent_3 { text-indent: 15px; } #xddpgkkgug .gt_indent_4 { text-indent: 20px; } #xddpgkkgug .gt_indent_5 { text-indent: 25px; } #xddpgkkgug .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #xddpgkkgug div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } cuenta_total propina fumador dia momento num_personas 9.78 1.73 No Jue Comida 2 13.42 1.68 No Jue Comida 2 11.02 1.98 Si Sab Cena 2 22.49 3.50 No Vie Cena 2 11.59 1.50 Si Sab Cena 2 24.71 5.85 No Jue Comida 2 9.60 4.00 Si Dom Cena 2 19.65 3.00 No Sab Cena 2 18.04 3.00 No Dom Cena 2 30.40 5.60 No Dom Cena 4 Aquí la unidad de observación es una cuenta particular. Tenemos tres mediciones numéricas de cada cuenta: cúanto fue la cuenta total, la propina, y el número de personas asociadas a la cuenta. Los datos están separados según se fumó o no en la mesa, y temporalmente en dos partes: el día (Jueves, Viernes, Sábado o Domingo), cada uno separado por Cena y Comida. Denotamos por \\(x\\) el valor de medición de una unidad de observación. Usualmente utilizamos sub-índices para identificar entre diferentes puntos de datos (observaciones), por ejemplo, \\(x_n\\) para la \\(n-\\)ésima observación. De tal forma que una colección de \\(N\\) observaciones la escribimos como \\[\\begin{align} \\{x_1, \\ldots, x_N\\}. \\end{align}\\] El primer tipo de comparaciones que nos interesa hacer es para una medición: ¿Varían mucho o poco los datos de un tipo de medición? ¿Cuáles son valores típicos o centrales? ¿Existen valores atípicos? Supongamos entonces que consideramos simplemente la variable de cuenta_total. Podemos comenzar por ordenar los datos, y ver cuáles datos están en los extremos y cuáles están en los lugares centrales: propinas <- propinas |> mutate(orden_cuenta = rank(cuenta_total, ties.method = "first"), f = (orden_cuenta - 0.5) / n()) cuenta <- propinas |> select(orden_cuenta, f, cuenta_total) |> arrange(f) bind_rows(head(cuenta), tail(cuenta)) |> gt() |> fmt_number(columns = f, decimals = 3) #zwocxfeiud table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #zwocxfeiud thead, #zwocxfeiud tbody, #zwocxfeiud tfoot, #zwocxfeiud tr, #zwocxfeiud td, #zwocxfeiud th { border-style: none; } #zwocxfeiud p { margin: 0; padding: 0; } #zwocxfeiud .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #zwocxfeiud .gt_caption { padding-top: 4px; padding-bottom: 4px; } #zwocxfeiud .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #zwocxfeiud .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #zwocxfeiud .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #zwocxfeiud .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #zwocxfeiud .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #zwocxfeiud .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #zwocxfeiud .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #zwocxfeiud .gt_column_spanner_outer:first-child { padding-left: 0; } #zwocxfeiud .gt_column_spanner_outer:last-child { padding-right: 0; } #zwocxfeiud .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #zwocxfeiud .gt_spanner_row { border-bottom-style: hidden; } #zwocxfeiud .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #zwocxfeiud .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #zwocxfeiud .gt_from_md > :first-child { margin-top: 0; } #zwocxfeiud .gt_from_md > :last-child { margin-bottom: 0; } #zwocxfeiud .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #zwocxfeiud .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #zwocxfeiud .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #zwocxfeiud .gt_row_group_first td { border-top-width: 2px; } #zwocxfeiud .gt_row_group_first th { border-top-width: 2px; } #zwocxfeiud .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #zwocxfeiud .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #zwocxfeiud .gt_first_summary_row.thick { border-top-width: 2px; } #zwocxfeiud .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #zwocxfeiud .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #zwocxfeiud .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #zwocxfeiud .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #zwocxfeiud .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #zwocxfeiud .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #zwocxfeiud .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #zwocxfeiud .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #zwocxfeiud .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #zwocxfeiud .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #zwocxfeiud .gt_left { text-align: left; } #zwocxfeiud .gt_center { text-align: center; } #zwocxfeiud .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #zwocxfeiud .gt_font_normal { font-weight: normal; } #zwocxfeiud .gt_font_bold { font-weight: bold; } #zwocxfeiud .gt_font_italic { font-style: italic; } #zwocxfeiud .gt_super { font-size: 65%; } #zwocxfeiud .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #zwocxfeiud .gt_asterisk { font-size: 100%; vertical-align: 0; } #zwocxfeiud .gt_indent_1 { text-indent: 5px; } #zwocxfeiud .gt_indent_2 { text-indent: 10px; } #zwocxfeiud .gt_indent_3 { text-indent: 15px; } #zwocxfeiud .gt_indent_4 { text-indent: 20px; } #zwocxfeiud .gt_indent_5 { text-indent: 25px; } #zwocxfeiud .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #zwocxfeiud div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } orden_cuenta f cuenta_total 1 0.002 3.07 2 0.006 5.75 3 0.010 7.25 4 0.014 7.25 5 0.018 7.51 6 0.023 7.56 239 0.977 44.30 240 0.982 45.35 241 0.986 48.17 242 0.990 48.27 243 0.994 48.33 244 0.998 50.81 También podemos graficar los datos en orden, interpolando valores consecutivos. A esta función le llamamos la función de cuantiles para la variable cuenta_total. Nos sirve para comparar directamente los distintos valores que observamos los datos según el orden que ocupan. En particular, podemos estudiar la dispersión y valores centrales de los datos observados: El rango de datos va de unos 3 dólares hasta 50 dólares Los valores centrales, por ejemplo el 50% de los valores más centrales, están entre unos 13 y 25 dólares. El valor que divide en dos mitades iguales a los datos es de alrededor de 18 dólares. El cuantil \\(f\\), que denotamos por \\(q(f)\\) es valor a lo largo de la escala de medición de los datos tal que aproximadamente una fracción \\(f\\) de los datos son menores o iguales a \\(q(f)\\). Al cuantil \\(f=0.5\\) le llamamos la mediana. A los cuantiles \\(f=0.25\\) y \\(f=0.75\\) les llamamos cuartiles inferior y superior. En nuestro ejemplo: Los valores centrales —del cuantil 0.25 al 0.75, por decir un ejemplo— están entre unos 13 y 25 dólares. Estos dos cuantiles se llaman cuartil inferior y cuartil superior respectivamente El cuantil 0.5 (o también conocido como mediana) está alrededor de 18 dólares. Éste último puede ser utilizado para dar un valor central de la distribución de valores para cuenta_total. Asimismo podemos dar resúmenes más refinados si es necesario. Por ejemplo, podemos reportar que: El cuantil 0.95 es de unos 35 dólares — sólo 5% de las cuentas son de más de 35 dólares El cuantil 0.05 es de unos 8 dólares — sólo 5% de las cuentas son de 8 dólares o menos. Finalmente, la forma de la gráfica se interpreta usando su pendiente (tasa de cambio) haciendo comparaciones en diferentes partes de la gráfica: La distribución de valores tiene asimetría: el 10% de las cuentas más altas tiene considerablemente más dispersión que el 10% de las cuentas más bajas. Entre los cuantiles 0.2 y 0.7 es donde existe mayor densidad de datos: la pendiente (tasa de cambio) es baja, lo que significa que al avanzar en los valores observados, los cuantiles (el porcentaje de casos) aumenta rápidamente. Cuando la pendiente alta, quiere decir que los datos tienen más dispersión local o están más separados. Observación: Hay varias maneras de definir los cuantiles (ver (William S. Cleveland 1993)): Supongamos que queremos definir \\(q(f)\\), y denotamos los datos ordenados como \\(x_{(1)}, x_{(2)}, \\ldots, x_{(N)}\\), de forma que \\(x_{(1)}\\) es el dato más chico y \\(x_{(N)}\\) es el dato más grande. Para cada \\(x_{(i)}\\) definimos \\[f_i = i / N\\] entonces definimos el cuantil \\(q(f_i)=x_{(i)}\\). Para cualquier \\(f\\) entre 0 y 1, podemos definir \\(q(f)\\) como sigue: si \\(f\\) está entre \\(f_i\\) y \\(f_{i+1}\\) interpolamos linealmente los valores correspondientes \\(x_{(i)}\\) y \\(x_{(i+1)}\\). En la práctica, es más conveniente usar \\(f_i= \\frac{i - 0.5}{N}\\). La gráfica de cuantiles no cambia mucho comparado con la difinición anterior, y esto nos permitirá comparar de mejor manera con distribuciones teóricas que no tienen definido su cuantil 0 y el 1, pues tienen soporte en los números reales (como la distribución normal, por ejemplo). Asociada a la función de cuantiles \\(q\\) tenemos la distribución acumulada empírica de los datos, que es aproximadamente inversa de la función de cuantiles, y se define como: \\[\\hat{F}(x) = i/N\\] si \\(x_{(i)} \\leq x < x_{(i+1)}\\). Nótese que \\(\\hat{F}(q(f_i)) = i/N = f_i\\) (demuéstralo). acum_cuenta <- ecdf(cuenta$cuenta_total) cuenta <- cuenta |> mutate(dea_cuenta_total = acum_cuenta(cuenta_total)) g_acum <- ggplot(cuenta, aes(x = cuenta_total, y = dea_cuenta_total)) + geom_point() + labs(subtitle = "Distribución acum empírica de cuenta total", x = "") g_cuantiles + g_acum La función de distribución acumulada empírica es otra forma de graficar la dispersión de los datos. En su gráfica vemos que proporción de los datos que son iguales o están por debajo de cada valor en el eje horizontal. Nota: En análisis de datos, es más frecuente utilizar la función de cuantiles pues existen versiones más generales que son útiles, por ejemplo, para evaluar ajuste de modelos probabilísticos En la teoría, generalmente es más común utilizar la fda empírica, que tiene una única definición que veremos coincide con definiciones teóricas. Histogramas En algunos casos, es más natural hacer un histograma, donde dividimos el rango de la variable en cubetas o intervalos (en este caso de igual longitud), y graficamos por medio de barras cuántos datos caen en cada cubeta: Es una gráfica más popular, pero perdemos cierto nivel de detalle, y distintas particiones resaltan distintos aspectos de los datos. ¿Cómo se ve la gráfica de cuantiles de las propinas? ¿Cómo crees que esta gráfica se compara con distintos histogramas? g_1 <- ggplot(propinas, aes(sample = propina)) + geom_qq(distribution = stats::qunif) + labs(x = "f", y = "propina") g_1 Finalmente, una gráfica más compacta que resume la gráfica de cuantiles o el histograma es el diagrama de caja y brazos. Mostramos dos versiones, la clásica de Tukey (T) y otra versión menos común de Spear/Tufte (ST): library(ggthemes) cuartiles <- quantile(cuenta$cuenta_total) cuartiles |> round(2) ## 0% 25% 50% 75% 100% ## 3.07 13.35 17.80 24.13 50.81 g_1 <- ggplot(cuenta, aes(x = f, y = cuenta_total)) + labs(subtitle = "Gráfica de cuantiles: Cuenta total") + geom_hline(yintercept = cuartiles[2:4], colour = "gray") + geom_point(alpha = 0.5) + geom_line() g_2 <- ggplot(cuenta, aes(x = factor("ST", levels = "ST"), y = cuenta_total)) + geom_tufteboxplot() + labs(subtitle = "", x = "", y = "") g_3 <- ggplot(cuenta, aes(x = factor("T"), y = cuenta_total)) + geom_boxplot() + labs(subtitle = "", x = "", y = "") g_4 <- ggplot(cuenta, aes(x = factor("P"), y = cuenta_total)) + geom_jitter(height = 0, width =0.2, alpha = 0.5) + labs(subtitle = "", x = "", y = "") g_5 <- ggplot(cuenta, aes(x = factor("V"), y = cuenta_total)) + geom_violin() + labs(subtitle = "", x = "", y = "") g_1 + g_2 + g_3 + g_4 + plot_layout(widths = c(8, 2, 2, 2)) El diagrama de abajo explica los elementos de la versión típica del diagrama de caja y brazos (boxplot). RIC se refiere al Rango Intercuantílico, definido por la diferencia entre los cuantiles 25% y 75%. Figura: Jumanbar / CC BY-SA Ventajas en el análisis inicial En un principio del análisis, estos resúmenes (cuantiles) pueden ser más útiles que utilizar medias y varianzas, por ejemplo. La razón es que los cuantiles: Son cantidades más fácilmente interpretables Los cuantiles centrales son más resistentes a valores atípicos que medias o varianzas Permiten identificar valores extremos Es fácil comparar cuantiles de distintos bonches de datos en la misma escala Nota: Existen diferentes definiciones para calcular cuantiles de una muestra de datos, puedes leer más en este artículo. Media y desviación estándar Las medidas más comunes de localización y dispersión para un conjunto de datos son la media muestral y la desviación estándar muestral. En general, no son muy apropiadas para iniciar el análisis exploratorio, pues: Son medidas más difíciles de interpretar y explicar que los cuantiles. En este sentido, son medidas especializadas. Por ejemplo, compara una explicación intuitiva de la mediana contra una explicación intuitiva de la media. No son resistentes a valores atípicos. Su falta de resistencia los vuelve poco útiles en las primeras etapas de limpieza y descripción y en resúmenes deficientes para distribuciones irregulares (con colas largas por ejemplo). La media, o promedio, se denota por \\(\\bar x\\) y se define como \\[\\begin{align} \\bar x = \\frac1N \\sum_{n = 1}^N x_n. \\end{align}\\] La desviación estándar muestral se define como \\[\\begin{align} \\text{std}(x) = \\sqrt{\\frac1{N-1} \\sum_{n = 1}^N (x_n - \\bar x)^2}. \\end{align}\\] Observación: Si \\(N\\) no es muy chica, no importa mucho si dividimos por \\(N\\) o por \\(N-1\\) en la fórmula de la desviación estándar. La razón de que típicamente se usa \\(N-1\\) la veremos más adelante, en la parte de estimación. Por otro lado, ventajas de estas medidas de centralidad y dispersión son: La media y desviación estándar son computacionalmente convenientes. Por lo tanto regresaremos a estas medidas una vez que estudiemos modelos de probabilidad básicos. En muchas ocasiones conviene usar estas medidas pues permite hacer comparaciones históricas o tradicionales —pues análisis anteriores pudieran estar basados en éstas. Considera el caso de tener \\(N\\) observaciones y asume que ya tienes calculado el promedio para dichas observaciones. Este promedio lo denotaremos por \\(\\bar x_N\\). Ahora, considera que has obtenido \\(M\\) observaciones más. Escribe una fórmula recursiva para la media del conjunto total de datos \\(\\bar x_{N+M}\\) en función de lo que ya tenías precalculado \\(\\bar x_N.\\) ¿En qué situaciones esta propiedad puede ser conveniente? Ejemplos Precios de casas En este ejemplo consideremos los datos de precios de ventas de la ciudad de Ames, Iowa. En particular nos interesa entender la variación del precio de las casas. Por este motivo calculamos los cuantiles que corresponden al 25%, 50% y 75% (cuartiles), así como el mínimo y máximo de los precios de las casas: quantile(casas |> pull(precio_miles)) ## 0% 25% 50% 75% 100% ## 37.9 132.0 165.0 215.0 755.0 Comprueba que el mínimo y máximo están asociados a los cuantiles 0% y 100%, respectivamente. Una posible comparación es considerar los precios y sus variación en función de zona de la ciudad en que se encuentra una vivienda. Podemos usar diagramas de caja y brazos para hacer una comparación burda de los precios en distintas zonas de la ciudad: ggplot(casas, aes(x = nombre_zona, y = precio_miles)) + geom_boxplot() + coord_flip() La primera pregunta que nos hacemos es cómo pueden variar las características de las casas dentro de cada zona. Para esto, podemos considerar el área de las casas. En lugar de graficar el precio, graficamos el precio por metro cuadrado, por ejemplo: ggplot(casas, aes(x = nombre_zona, y = precio_m2)) + geom_boxplot() + coord_flip() Podemos cuantificar la variación que observamos de zona a zona y la variación que hay dentro de cada una de las zonas. Una primera aproximación es observar las variación del precio al calcular la mediana dentro de cada zona, y después cuantificar por medio de cuantiles cómo varía la mediana entre zonas: casas |> group_by(nombre_zona) |> summarise(mediana_zona = median(precio_m2), .groups = "drop") |> arrange(mediana_zona) |> pull(mediana_zona) |> quantile() |> round() ## 0% 25% 50% 75% 100% ## 963 1219 1298 1420 1725 Por otro lado, las variaciones con respecto a las medianas dentro de cada zona, por grupo, se resume como: quantile(casas |> group_by(nombre_zona) |> mutate(residual = precio_m2 - median(precio_m2)) |> pull(residual)) |> round() ## 0% 25% 50% 75% 100% ## -765 -166 0 172 1314 Nótese que este último paso tiene sentido pues la variación dentro de las zonas, en términos de precio por metro cuadrado, es similar. Esto no lo podríamos haber hecho de manera efectiva si se hubiera utilizado el precio de las casas sin ajustar por su tamaño. Podemos resumir este primer análisis con un par de gráficas de cuantiles (William S. Cleveland (1993)): mediana <- median(casas$precio_m2) resumen <- casas |> select(nombre_zona, precio_m2) |> group_by(nombre_zona) |> mutate(mediana_zona = median(precio_m2)) |> mutate(residual = precio_m2 - mediana_zona) |> ungroup() |> mutate(mediana_zona = mediana_zona - mediana) |> select(nombre_zona, mediana_zona, residual) |> pivot_longer(mediana_zona:residual, names_to = "tipo", values_to = "valor") ggplot(resumen, aes(sample = valor)) + geom_qq(distribution = stats::qunif) + facet_wrap(~ tipo) + ylab("Precio por m2") + xlab("f") + labs(subtitle = "Precio por m2 por zona", caption = paste0("Mediana total de ", round(mediana))) Vemos que la mayor parte de la variación del precio por metro cuadrado ocurre dentro de cada zona, una vez que controlamos por el tamaño de las casas. La variación dentro de cada zona es aproximadamente simétrica, aunque la cola derecha es ligeramente más larga con algunos valores extremos. Podemos seguir con otro indicador importante: la calificación de calidad de los terminados de las casas. Como primer intento podríamos hacer: Lo que indica que las calificaciones de calidad están distribuidas de manera muy distinta a lo largo de las zonas, y que probablemente no va ser simple desentrañar qué variación del precio se debe a la zona y cuál se debe a la calidad. Prueba Enlace Consideremos la prueba Enlace (2011) de matemáticas para primarias. Una primera pregunta que alguien podría hacerse es: ¿cuáles escuelas son mejores en este rubro, las privadas o las públicas? enlace_tbl <- enlace |> group_by(tipo) |> summarise(n_escuelas = n(), cuantiles = list(cuantil(mate_6, c(0.05, 0.25, 0.5, 0.75, 0.95)))) |> unnest(cols = cuantiles) |> mutate(valor = round(valor)) enlace_tbl |> spread(cuantil, valor) |> gt() #sykxxonvyi table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #sykxxonvyi thead, #sykxxonvyi tbody, #sykxxonvyi tfoot, #sykxxonvyi tr, #sykxxonvyi td, #sykxxonvyi th { border-style: none; } #sykxxonvyi p { margin: 0; padding: 0; } #sykxxonvyi .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #sykxxonvyi .gt_caption { padding-top: 4px; padding-bottom: 4px; } #sykxxonvyi .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #sykxxonvyi .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #sykxxonvyi .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #sykxxonvyi .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #sykxxonvyi .gt_column_spanner_outer:first-child { padding-left: 0; } #sykxxonvyi .gt_column_spanner_outer:last-child { padding-right: 0; } #sykxxonvyi .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #sykxxonvyi .gt_spanner_row { border-bottom-style: hidden; } #sykxxonvyi .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #sykxxonvyi .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #sykxxonvyi .gt_from_md > :first-child { margin-top: 0; } #sykxxonvyi .gt_from_md > :last-child { margin-bottom: 0; } #sykxxonvyi .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #sykxxonvyi .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #sykxxonvyi .gt_row_group_first td { border-top-width: 2px; } #sykxxonvyi .gt_row_group_first th { border-top-width: 2px; } #sykxxonvyi .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #sykxxonvyi .gt_first_summary_row.thick { border-top-width: 2px; } #sykxxonvyi .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #sykxxonvyi .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #sykxxonvyi .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_left { text-align: left; } #sykxxonvyi .gt_center { text-align: center; } #sykxxonvyi .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #sykxxonvyi .gt_font_normal { font-weight: normal; } #sykxxonvyi .gt_font_bold { font-weight: bold; } #sykxxonvyi .gt_font_italic { font-style: italic; } #sykxxonvyi .gt_super { font-size: 65%; } #sykxxonvyi .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #sykxxonvyi .gt_asterisk { font-size: 100%; vertical-align: 0; } #sykxxonvyi .gt_indent_1 { text-indent: 5px; } #sykxxonvyi .gt_indent_2 { text-indent: 10px; } #sykxxonvyi .gt_indent_3 { text-indent: 15px; } #sykxxonvyi .gt_indent_4 { text-indent: 20px; } #sykxxonvyi .gt_indent_5 { text-indent: 25px; } #sykxxonvyi .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #sykxxonvyi div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } tipo n_escuelas 0.05 0.25 0.5 0.75 0.95 Indígena/Conafe 13599 304 358 412 478 588 General 60166 380 454 502 548 631 Particular 6816 479 551 593 634 703 Para un análisis exploratorio podemos utilizar distintas gráficas. Por ejemplo, podemos utilizar nuevamente las gráficas de caja y brazos, así como graficar los percentiles. Nótese que en la gráfica 1 se utilizan los cuantiles 0.05, 0.25, 0.5, 0.75 y 0.95: ## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. ## ℹ Please use `linewidth` instead. ## This warning is displayed once every 8 hours. ## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was ## generated. Se puede discutir qué tan apropiada es cada gráfica con el objetivo de realizar comparaciones. Sin duda, graficar más cuantiles es más útil para hacer comparaciones. Por ejemplo, en la Gráfica 1 podemos ver que la mediana de las escuelas generales está cercana al cuantil 5% de las escuelas particulares. Por otro lado, el diagrama de caja y brazos muestra también valores “atípicos”. Antes de contestar prematuramente la pregunta: ¿cuáles son las mejores escuelas? busquemos mejorar la interpretabilidad de nuestras comparaciones. Podemos comenzar por agregar, por ejemplo, el nivel del marginación del municipio donde se encuentra la escuela. Para este objetivo, podemos usar páneles (pequeños múltiplos útiles para hacer comparaciones) y graficar: Esta gráfica pone en contexto la pregunta inicial, y permite evidenciar la dificultad de contestarla. En particular: Señala que la pregunta no sólo debe concentarse en el tipo de “sistema”: pública, privada, etc. Por ejemplo, las escuelas públicas en zonas de marginación baja no tienen una distribución de calificaciones muy distinta a las privadas en zonas de marginación alta. El contexto de la escuela es importante. Debemos de pensar qué factores –por ejemplo, el entorno familiar de los estudiantes– puede resultar en comparaciones que favorecen a las escuelas privadas. Un ejemplo de esto es considerar si los estudiantes tienen que trabajar o no. A su vez, esto puede o no ser reflejo de la calidad del sistema educativo. Si esto es cierto, entonces la pregunta inicial es demasiado vaga y mal planteada. Quizá deberíamos intentar entender cuánto “aporta” cada escuela a cada estudiante, como medida de qué tan buena es cada escuela. Estados y calificaciones en SAT ¿Cómo se relaciona el gasto por alumno, a nivel estatal, con sus resultados académicos? Hay trabajo considerable en definir estos términos, pero supongamos que tenemos el siguiente conjunto de datos (Guber 1999), que son datos oficiales agregados por estado de Estados Unidos. Consideremos el subconjunto de variables sat, que es la calificación promedio de los alumnos en cada estado (para 1997) y expend, que es el gasto en miles de dólares por estudiante en (1994-1995). sat <- read_csv("data/sat.csv") sat_tbl <- sat |> select(state, expend, sat) |> gather(variable, valor, expend:sat) |> group_by(variable) |> summarise(cuantiles = list(cuantil(valor))) |> unnest(cols = c(cuantiles)) |> mutate(valor = round(valor, 1)) |> spread(cuantil, valor) sat_tbl |> gt() #trvhlcrcph table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #trvhlcrcph thead, #trvhlcrcph tbody, #trvhlcrcph tfoot, #trvhlcrcph tr, #trvhlcrcph td, #trvhlcrcph th { border-style: none; } #trvhlcrcph p { margin: 0; padding: 0; } #trvhlcrcph .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #trvhlcrcph .gt_caption { padding-top: 4px; padding-bottom: 4px; } #trvhlcrcph .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #trvhlcrcph .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #trvhlcrcph .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #trvhlcrcph .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #trvhlcrcph .gt_column_spanner_outer:first-child { padding-left: 0; } #trvhlcrcph .gt_column_spanner_outer:last-child { padding-right: 0; } #trvhlcrcph .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #trvhlcrcph .gt_spanner_row { border-bottom-style: hidden; } #trvhlcrcph .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #trvhlcrcph .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #trvhlcrcph .gt_from_md > :first-child { margin-top: 0; } #trvhlcrcph .gt_from_md > :last-child { margin-bottom: 0; } #trvhlcrcph .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #trvhlcrcph .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #trvhlcrcph .gt_row_group_first td { border-top-width: 2px; } #trvhlcrcph .gt_row_group_first th { border-top-width: 2px; } #trvhlcrcph .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #trvhlcrcph .gt_first_summary_row.thick { border-top-width: 2px; } #trvhlcrcph .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #trvhlcrcph .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #trvhlcrcph .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_left { text-align: left; } #trvhlcrcph .gt_center { text-align: center; } #trvhlcrcph .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #trvhlcrcph .gt_font_normal { font-weight: normal; } #trvhlcrcph .gt_font_bold { font-weight: bold; } #trvhlcrcph .gt_font_italic { font-style: italic; } #trvhlcrcph .gt_super { font-size: 65%; } #trvhlcrcph .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #trvhlcrcph .gt_asterisk { font-size: 100%; vertical-align: 0; } #trvhlcrcph .gt_indent_1 { text-indent: 5px; } #trvhlcrcph .gt_indent_2 { text-indent: 10px; } #trvhlcrcph .gt_indent_3 { text-indent: 15px; } #trvhlcrcph .gt_indent_4 { text-indent: 20px; } #trvhlcrcph .gt_indent_5 { text-indent: 25px; } #trvhlcrcph .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #trvhlcrcph div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } variable 0 0.25 0.5 0.75 1 expend 3.7 4.9 5.8 6.4 9.8 sat 844.0 897.2 945.5 1032.0 1107.0 Esta variación es considerable para promedios del SAT: el percentil 75 es alrededor de 1050 puntos, mientras que el percentil 25 corresponde a alrededor de 800. Igualmente, hay diferencias considerables de gasto por alumno (miles de dólares) a lo largo de los estados. Ahora hacemos nuestro primer ejercico de comparación: ¿Cómo se ven las calificaciones para estados en distintos niveles de gasto? Podemos usar una gráfica de dispersión: library(ggrepel) ggplot(sat, aes(x = expend, y = sat, label = state)) + geom_point(colour = "red", size = 2) + geom_text_repel(colour = "gray50") + xlab("Gasto por alumno (miles de dólares)") + ylab("Calificación promedio en SAT") Estas comparaciones no son de alta calidad, solo estamos usando 2 variables —que son muy pocas— y no hay mucho que podamos decir en cuanto explicación. Sin duda nos hace falta una imagen más completa. Necesitaríamos entender la correlación que existe entre las demás características de nuestras unidades de estudio. Las unidades que estamos comparando pueden diferir fuertemente en otras propiedades importantes (o dimensiones), lo cual no permite interpretar la gráfica de manera sencilla. Una variable que tenemos es el porcentaje de alumnos de cada estado que toma el SAT. Podemos agregar como sigue: ggplot(sat, aes(x = expend, y = math, label=state, colour = frac)) + geom_point() + geom_text_repel() + xlab("Gasto por alumno (miles de dólares)") + ylab("Calificación promedio en SAT") Esto nos permite entender por qué nuestra comparación inicial es relativamente pobre. Los estados con mejores resultados promedio en el SAT son aquellos donde una fracción relativamente baja de los estudiantes toma el examen. La diferencia es considerable. En este punto podemos hacer varias cosas. Una primera idea es intentar comparar estados más similares en cuanto a la población de alumnos que asiste. Podríamos hacer grupos como sigue: set.seed(991) k_medias_sat <- kmeans(sat |> select(frac), centers = 4, nstart = 100, iter.max = 100) sat$clase <- k_medias_sat$cluster sat <- sat |> group_by(clase) |> mutate(clase_media = round(mean(frac))) |> ungroup() |> mutate(clase_media = factor(clase_media)) sat <- sat |> mutate(rank_p = rank(frac, ties= "first") / length(frac)) ggplot(sat, aes(x = rank_p, y = frac, label = state, colour = clase_media)) + geom_point(size = 2) Estos resultados indican que es más probable que buenos alumnos decidan hacer el SAT. Lo interesante es que esto ocurre de manera diferente en cada estado. Por ejemplo, en algunos estados era más común otro examen: el ACT. Si hacemos clusters de estados según el % de alumnos, empezamos a ver otra historia. Para esto, ajustemos rectas de mínimos cuadrados como referencia: Esto da una imagen muy diferente a la que originalmente planteamos. Nota que dependiendo de cómo categorizamos, esta gráfica puede variar (puedes intentar con más o menos grupos, por ejemplo). Tablas de conteos Consideremos los siguientes datos de tomadores de té (del paquete FactoMineR (Lê et al. 2008)): tea <- read_csv("data/tea.csv") # nombres y códigos te <- tea |> select(how, price, sugar) |> rename(presentacion = how, precio = price, azucar = sugar) |> mutate( presentacion = fct_recode(presentacion, suelto = "unpackaged", bolsas = "tea bag", mixto = "tea bag+unpackaged"), precio = fct_recode(precio, marca = "p_branded", variable = "p_variable", barato = "p_cheap", marca_propia = "p_private label", desconocido = "p_unknown", fino = "p_upscale"), azucar = fct_recode(azucar, sin_azúcar = "No.sugar", con_azúcar = "sugar")) sample_n(te, 10) ## # A tibble: 10 × 3 ## presentacion precio azucar ## <fct> <fct> <fct> ## 1 bolsas marca sin_azúcar ## 2 bolsas variable sin_azúcar ## 3 bolsas marca con_azúcar ## 4 bolsas fino con_azúcar ## 5 mixto variable con_azúcar ## 6 mixto fino con_azúcar ## 7 bolsas marca sin_azúcar ## 8 bolsas fino sin_azúcar ## 9 mixto variable con_azúcar ## 10 mixto variable sin_azúcar Nos interesa ver qué personas compran té suelto, y de qué tipo. Empezamos por ver las proporciones que compran té según su empaque (en bolsita o suelto): precio <- te |> count(precio) |> mutate(prop = round(100 * n / sum(n))) |> select(-n) tipo <- te |> count(presentacion) |> mutate(pct = round(100 * n / sum(n))) tipo |> gt() #wiljiluquk table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #wiljiluquk thead, #wiljiluquk tbody, #wiljiluquk tfoot, #wiljiluquk tr, #wiljiluquk td, #wiljiluquk th { border-style: none; } #wiljiluquk p { margin: 0; padding: 0; } #wiljiluquk .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #wiljiluquk .gt_caption { padding-top: 4px; padding-bottom: 4px; } #wiljiluquk .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #wiljiluquk .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #wiljiluquk .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #wiljiluquk .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #wiljiluquk .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #wiljiluquk .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #wiljiluquk .gt_column_spanner_outer:first-child { padding-left: 0; } #wiljiluquk .gt_column_spanner_outer:last-child { padding-right: 0; } #wiljiluquk .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #wiljiluquk .gt_spanner_row { border-bottom-style: hidden; } #wiljiluquk .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #wiljiluquk .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #wiljiluquk .gt_from_md > :first-child { margin-top: 0; } #wiljiluquk .gt_from_md > :last-child { margin-bottom: 0; } #wiljiluquk .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #wiljiluquk .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #wiljiluquk .gt_row_group_first td { border-top-width: 2px; } #wiljiluquk .gt_row_group_first th { border-top-width: 2px; } #wiljiluquk .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #wiljiluquk .gt_first_summary_row.thick { border-top-width: 2px; } #wiljiluquk .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #wiljiluquk .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #wiljiluquk .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #wiljiluquk .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #wiljiluquk .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_left { text-align: left; } #wiljiluquk .gt_center { text-align: center; } #wiljiluquk .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #wiljiluquk .gt_font_normal { font-weight: normal; } #wiljiluquk .gt_font_bold { font-weight: bold; } #wiljiluquk .gt_font_italic { font-style: italic; } #wiljiluquk .gt_super { font-size: 65%; } #wiljiluquk .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #wiljiluquk .gt_asterisk { font-size: 100%; vertical-align: 0; } #wiljiluquk .gt_indent_1 { text-indent: 5px; } #wiljiluquk .gt_indent_2 { text-indent: 10px; } #wiljiluquk .gt_indent_3 { text-indent: 15px; } #wiljiluquk .gt_indent_4 { text-indent: 20px; } #wiljiluquk .gt_indent_5 { text-indent: 25px; } #wiljiluquk .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #wiljiluquk div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } presentacion n pct bolsas 170 57 mixto 94 31 suelto 36 12 La mayor parte de las personas toma té en bolsas. Sin embargo, el tipo de té (en términos de precio o marca) que compran es muy distinto dependiendo de la presentación: tipo <- tipo |> select(presentacion, prop_presentacion = pct) tabla_cruzada <- te |> count(presentacion, precio) |> # porcentajes por presentación group_by(presentacion) |> mutate(prop = round(100 * n / sum(n))) |> select(-n) tabla_cruzada |> pivot_wider(names_from = presentacion, values_from = prop, values_fill = list(prop = 0)) |> gt() #sxkvcchtyg table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #sxkvcchtyg thead, #sxkvcchtyg tbody, #sxkvcchtyg tfoot, #sxkvcchtyg tr, #sxkvcchtyg td, #sxkvcchtyg th { border-style: none; } #sxkvcchtyg p { margin: 0; padding: 0; } #sxkvcchtyg .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #sxkvcchtyg .gt_caption { padding-top: 4px; padding-bottom: 4px; } #sxkvcchtyg .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #sxkvcchtyg .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #sxkvcchtyg .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #sxkvcchtyg .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #sxkvcchtyg .gt_column_spanner_outer:first-child { padding-left: 0; } #sxkvcchtyg .gt_column_spanner_outer:last-child { padding-right: 0; } #sxkvcchtyg .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #sxkvcchtyg .gt_spanner_row { border-bottom-style: hidden; } #sxkvcchtyg .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #sxkvcchtyg .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #sxkvcchtyg .gt_from_md > :first-child { margin-top: 0; } #sxkvcchtyg .gt_from_md > :last-child { margin-bottom: 0; } #sxkvcchtyg .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #sxkvcchtyg .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #sxkvcchtyg .gt_row_group_first td { border-top-width: 2px; } #sxkvcchtyg .gt_row_group_first th { border-top-width: 2px; } #sxkvcchtyg .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #sxkvcchtyg .gt_first_summary_row.thick { border-top-width: 2px; } #sxkvcchtyg .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #sxkvcchtyg .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #sxkvcchtyg .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_left { text-align: left; } #sxkvcchtyg .gt_center { text-align: center; } #sxkvcchtyg .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #sxkvcchtyg .gt_font_normal { font-weight: normal; } #sxkvcchtyg .gt_font_bold { font-weight: bold; } #sxkvcchtyg .gt_font_italic { font-style: italic; } #sxkvcchtyg .gt_super { font-size: 65%; } #sxkvcchtyg .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #sxkvcchtyg .gt_asterisk { font-size: 100%; vertical-align: 0; } #sxkvcchtyg .gt_indent_1 { text-indent: 5px; } #sxkvcchtyg .gt_indent_2 { text-indent: 10px; } #sxkvcchtyg .gt_indent_3 { text-indent: 15px; } #sxkvcchtyg .gt_indent_4 { text-indent: 20px; } #sxkvcchtyg .gt_indent_5 { text-indent: 25px; } #sxkvcchtyg .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #sxkvcchtyg div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } precio bolsas mixto suelto marca 41 21 14 barato 3 1 3 marca_propia 9 4 3 desconocido 6 1 0 fino 8 20 56 variable 32 52 25 Estos datos podemos examinarlos un rato y llegar a conclusiones, pero esta tabla no necesariamente es la mejor manera de mostrar patrones en los datos. Tampoco son muy útiles gráficas como la siguiente: ggplot(tabla_cruzada |> ungroup() |> mutate(price = fct_reorder(precio, prop)), aes(x = precio, y = prop, group = presentacion, colour = presentacion)) + geom_point() + coord_flip() + geom_line() En lugar de eso, calcularemos perfiles columna. Esto es, comparamos cada una de las columnas con la columna marginal (en la tabla de tipo de estilo de té): num_grupos <- n_distinct(te |> select(presentacion)) tabla <- te |> count(presentacion, precio) |> group_by(presentacion) |> mutate(prop_precio = (100 * n / sum(n))) |> group_by(precio) |> mutate(prom_prop = sum(prop_precio)/num_grupos) |> mutate(perfil = 100 * (prop_precio / prom_prop - 1)) tabla ## # A tibble: 17 × 6 ## # Groups: precio [6] ## presentacion precio n prop_precio prom_prop perfil ## <fct> <fct> <int> <dbl> <dbl> <dbl> ## 1 bolsas marca 70 41.2 25.4 61.8 ## 2 bolsas barato 5 2.94 2.26 30.1 ## 3 bolsas marca_propia 16 9.41 5.48 71.7 ## 4 bolsas desconocido 11 6.47 2.51 158. ## 5 bolsas fino 14 8.24 28.0 -70.6 ## 6 bolsas variable 54 31.8 36.3 -12.5 ## 7 mixto marca 20 21.3 25.4 -16.4 ## 8 mixto barato 1 1.06 2.26 -52.9 ## 9 mixto marca_propia 4 4.26 5.48 -22.4 ## 10 mixto desconocido 1 1.06 2.51 -57.6 ## 11 mixto fino 19 20.2 28.0 -27.8 ## 12 mixto variable 49 52.1 36.3 43.6 ## 13 suelto marca 5 13.9 25.4 -45.4 ## 14 suelto barato 1 2.78 2.26 22.9 ## 15 suelto marca_propia 1 2.78 5.48 -49.3 ## 16 suelto fino 20 55.6 28.0 98.4 ## 17 suelto variable 9 25 36.3 -31.1 tabla_perfil <- tabla |> select(presentacion, precio, perfil, pct = prom_prop) |> pivot_wider(names_from = presentacion, values_from = perfil, values_fill = list(perfil = -100.0)) if_profile <- function(x){ any(x < 0) & any(x > 0) } marcar <- marcar_tabla_fun(25, "red", "black") tab_out <- tabla_perfil |> arrange(desc(bolsas)) |> select(-pct, everything()) |> mutate(across(where(is.numeric), \\(x) round(x, 0))) |> mutate(across(where(if_profile), \\(x) marcar(x))) |> knitr::kable(format_table_salida(), escape = FALSE, digits = 0, booktabs = T) |> kableExtra::kable_styling(latex_options = c("striped", "scale_down"), bootstrap_options = c( "hover", "condensed"), full_width = FALSE) tab_out precio bolsas mixto suelto pct desconocido 158 -58 -100 3 marca_propia 72 -22 -49 5 marca 62 -16 -45 25 barato 30 -53 23 2 variable -12 44 -31 36 fino -71 -28 98 28 Leemos esta tabla como sigue: por ejemplo, los compradores de té suelto compran té fino a una tasa casi el doble (98%) que el promedio. También podemos graficar como: tabla_graf <- tabla_perfil |> ungroup() |> mutate(precio = fct_reorder(precio, bolsas)) |> select(-pct) |> pivot_longer(cols = -precio, names_to = "presentacion", values_to = "perfil") g_perfil <- ggplot(tabla_graf, aes(x = precio, xend = precio, y = perfil, yend = 0, group = presentacion)) + geom_point() + geom_segment() + facet_wrap(~presentacion) + geom_hline(yintercept = 0 , colour = "gray")+ coord_flip() g_perfil Observación: hay dos maneras de construir la columna promedio: tomando los porcentajes sobre todos los datos, o promediando los porcentajes de las columnas. Si los grupos de las columnas están desbalanceados, estos promedios son diferentes. Cuando usamos porcentajes sobre la población, perfiles columna y renglón dan el mismo resultado Sin embargo, cuando hay un grupo considerablemente más grande que otros, las comparaciones se vuelven vs este grupo particular. No siempre queremos hacer esto. Interpretación En el último ejemplo de tomadores de té utilizamos una muestra de personas, no toda la población de tomadores de té. Eso quiere decir que tenemos cierta incertidumbre de cómo se generalizan o no los resultados que obtuvimos en nuestro análisis a la población general. Nuestra respuesta depende de cómo se extrajo la muestra que estamos considerando. Si el mecanismo de extracción incluye algún proceso probabilístico, entonces es posible en principio entender qué tan bien generalizan los resultados de nuestro análisis a la población general, y entender esto depende de entender qué tanta variación hay de muestra a muestra, de todas las posibles muestras que pudimos haber extraido. En las siguientes secciones discutiremos estos aspectos, en los cuales pasamos del trabajo de “detective” al trabajo de “juez” en nuestro trabajo analítico. Suavizamiento loess Las gráficas de dispersión son la herramienta básica para describir la relación entre dos variables cuantitativas, y como vimos en ejemplo anteriores, muchas veces podemos apreciar mejor la relación entre ellas si agregamos una curva loess. Veamos un ejemplo, los siguientes datos muestran los premios ofrecidos y las ventas totales de una lotería a lo largo de 53 sorteos (las unidades son cantidades de dinero indexadas). Graficamos en escalas logarítmicas y agregamos una curva loess. # cargamos los datos load(here::here("data", "ventas_sorteo.Rdata")) ggplot(ventas.sorteo, aes(x = premio, y = ventas.tot.1)) + geom_point() + geom_smooth(method = "loess", span = 0.6, method.args = list(degree = 1), se = FALSE) + scale_x_log10(breaks = c(20000, 40000, 80000)) + scale_y_log10(breaks = c(10000, 15000, 22000, 33000)) El patrón no era difícil de ver en los datos originales, sin embargo, la curva lo hace más claro, el logaritmo de las ventas tiene una relación no lineal con el logaritmo del premio: para premios no muy grandes no parece haber gran diferencia, pero cuando los premios empiezan a crecer por encima de 20,000, las ventas crecen más rápidamente que para premios menores. Este efecto se conoce como bola de nieve, y es frecuente en este tipo de loterías. Antes de adentrarnos a los modelos loess comenzamos explicando cómo se ajustan familias paramétricas de curvas a conjuntos de datos dados. El modelo de regresion lineal ajusta una recta a un conjunto de datos. Por ejemplo, consideremos la familia \\[f_{a,b}(x) = a x + b,\\] para un conjunto de datos bivariados \\(\\{ (x_1, y_1), \\ldots, (x_N, y_N)\\}\\). Buscamos encontrar \\(a\\) y \\(b\\) tales que \\(f_{a,b}\\) de un ajuste óptimo a los datos. Para esto, se minimiza la suma de errores cuadráticos \\[\\frac1N \\sum_{n = 1}^N ( y_n - a x_n - b)^2.\\] En este caso, las constantes \\(a\\) y \\(b\\) se pueden encontrar diferenciando la función de mínimos cuadrados. Nótese que podemos repetir el argumento con otras familias de funciones (por ejemplo cuadráticas). ggplot(ventas.sorteo, aes(x = premio, y = ventas.tot.1)) + geom_point() + geom_smooth(method = "lm", se = FALSE) + scale_x_log10(breaks = c(20000, 40000, 80000)) + scale_y_log10(breaks = c(10000, 15000, 22000, 33000)) Si observamos la gráfica notamos que este modelo lineal (en los logaritmos) no resumen adecuadamente estos datos. Podríamos experimentar con otras familias (por ejemplo, una cuadrática o cúbica, potencias, exponenciales, etc.); sin embargo, en la etapa exploratoria es mejor tomar una ruta de ajuste más flexible y robusta. Regresión local nos provee de un método con estas características: Curvas loess (regresión local): Una manera de mejorar la flexibilidad de los modelos lineales es considerar rectas de manera local. Es decir, en cada \\(x\\) posible consideramos cuál es la recta que mejor ajusta a los datos, considerando solamente valores de \\(x_n\\) que están cercanos a \\(x\\). La siguiente gráfica muestra qué recta se ajusta alrededor de cada punto, y cómo queda el suavizador completo, con distintos valores de suavizamiento. El tono de los puntos indican en cada paso que ventana de datos es considerada: Escogiendo de los parámetros. El parámetro de suavizamiento se encuentra por ensayo y error. La idea general es que debemos encontrar una curva que explique patrones importantes en los datos (que ajuste los datos) pero que no muestre variaciones a escalas más chicas difíciles de explicar (que pueden ser el resultado de influencias de otras variables, variación muestral, ruido o errores de redondeo, por ejemplo). En el proceso de prueba y error iteramos el ajuste y en cada paso hacemos análisis de residuales, con el fin de seleccionar un suavizamiento adecuado. En lugar de usar ajustes locales lineales, podemos usar ajustes locales cuadráticos que nos permiten capturar formas locales cuadráticas sin tener que suavizar demasiado poco: Opcional: cálculo del suavizador La idea es producir ajustes locales de rectas o funciones lineales o cuadráticas. Consideremos especificar dos parámetros: Parámetro de suavizamiento \\(\\alpha\\): toma valores en \\((0,1)\\), cuando \\(\\alpha\\) es más grande, la curva ajustada es más suave. Grado de los polinomios locales que ajustamos \\(\\lambda\\): generalmente se toma \\(\\lambda=1,2\\). Entonces, supongamos que los datos están dados por \\((x_1,y_1), \\ldots, (x_N, y_N)\\), y sean \\(\\alpha\\) un parámetro de suavizamiento fijo, y \\(\\lambda=1\\). Denotamos como \\(\\hat{g}(x)\\) la curva loess ajustada, y como \\(w_n(x)\\) a una función de peso (que depende de x) para la observación \\((x_n, y_n)\\). Para poder calcular \\(w_n(x)\\) debemos comenzar calculando \\(q=\\lfloor{N\\alpha}\\rfloor\\) que suponemos mayor que uno, esta \\(q\\) es el número de puntos que se utilizan en cada ajuste local. Ahora definimos la función tricubo: \\[\\begin{align} T(u)=\\begin{cases} (1-|u|^3)^3, & \\text{para $|u| < 1$}.\\\\ 0, & \\text{en otro caso}. \\end{cases} \\end{align}\\] entonces, para el punto \\(x\\) definimos el peso correspondiente al dato \\((x_n,y_n)\\), denotado por \\(w_n(x)\\) como: \\[w_n(x)=T\\bigg(\\frac{|x-x_n|}{d_q(x)}\\bigg)\\] donde \\(d_q(x)\\) es el valor de la \\(q\\)-ésima distancia más chica (la más grande entre las \\(q\\) más chicas) entre los valores \\(|x-x_j|\\), \\(j=1,\\ldots,N\\). De esta forma, las observaciones \\(x_n\\) reciben más peso cuanto más cerca estén de \\(x\\). En palabras, de \\(x_1,...,x_N\\) tomamos los \\(q\\) datos más cercanos a \\(x\\), que denotamos \\(x_{i_1}(x) \\leq x_{i_2}(x) \\leq \\cdots \\leq x_{i_q}(x)\\). Los re-escalamos a \\([0,1]\\) haciendo corresponder \\(x\\) a \\(0\\) y el punto más alejado de \\(x\\) (que es \\(x_{i_q}\\)) a 1. Aplicamos el tricubo (gráfica de abajo), para encontrar los pesos de cada punto. Los puntos que están a una distancia mayor a \\(d_q(x)\\) reciben un peso de cero, y los más cercanos un peso que depende de que tan cercanos están a \\(x\\). Nótese que \\(x\\) es el punto ancla en dónde estamos ajustando la regresión local. tricubo <- function(x) { ifelse(abs(x) < 1, (1 - abs(x) ^ 3) ^ 3, 0) } curve(tricubo, from = -1.5, to = 1.5) Finalmente, para cada valor de \\(x_k\\) que está en el conjunto de datos \\(\\{x_1,...,x_n\\}\\), ajustamos una recta de mínimos cuadrados ponderados por los pesos \\(w_n(x)\\), es decir, minimizamos (en el caso lineal): \\[\\sum_{i=1}^nw_n(x_k)(y_i-ax_n-b)^2.\\] Observaciones: Cualquier función (continua y quizás diferenciable) con la forma de flan del tricubo que se desvanece fuera de \\((-1,1),\\) es creciente en \\((-1,0)\\) y decreciente en \\((0, 1)\\) es un buen candidato para usarse en lugar del tricubo. La razón por la que escogemos precisamente esta forma algebráica no tiene que ver con el análisis exploratorio, sino con las ventajas teóricas adicionales que tiene en la inferencia. El caso \\(\\lambda=2\\) es similar. La única diferencia es en el paso de ajuste, donde usamos funciones cuadráticas, y obtendríamos entonces tres familias de parámetros \\(a(x_k), b_1(x_k), b_2(x_k),\\) para cada \\(k \\in \\{1, \\ldots, N\\}\\). Caso de estudio: nacimientos en México Podemos usar el suavizamiento loess para entender y describir el comportamiento de series de tiempo, en las cuáles intentamos entender la dependencia de una serie de mediciones indexadas por el tiempo. Típicamente es necesario utilizar distintas componentes para describir exitosamente una serie de tiempo, y para esto usamos distintos tipos de suavizamientos. Veremos que distintas componentes varían en distintas escalas de tiempo (unas muy lentas, como la tendencia, otras más rapidamente, como variación quincenal, etc.). Este caso de estudio esta basado en un análisis propuesto por A. Vehtari y A. Gelman, junto con un análisis de serie de tiempo de William S. Cleveland (1993). En nuestro caso, usaremos los datos de nacimientos registrados por día en México desde 1999. Los usaremos para contestar las preguntas: ¿cuáles son los cumpleaños más frecuentes? y ¿en qué mes del año hay más nacimientos? Podríamos utilizar una gráfica popular (ver por ejemplo esta visualización) como: Sin embargo, ¿cómo criticarías este análisis desde el punto de vista de los tres primeros principios del diseño analítico? ¿Las comparaciones son útiles? ¿Hay aspectos multivariados? ¿Qué tan bien explica o sugiere estructura, mecanismos o causalidad? Datos de natalidad para México library(lubridate) library(ggthemes) theme_set(theme_minimal(base_size = 14)) natalidad <- read_rds("./data/nacimientos/natalidad.rds") |> mutate(dia_semana = weekdays(fecha)) |> mutate(dia_año = yday(fecha)) |> mutate(año = year(fecha)) |> mutate(mes = month(fecha)) |> ungroup() |> mutate(dia_semana = recode(dia_semana, Monday = "Lunes", Tuesday = "Martes", Wednesday = "Miércoles", Thursday = "Jueves", Friday = "Viernes", Saturday = "Sábado", Sunday = "Domingo")) |> #necesario pues el LOCALE puede cambiar mutate(dia_semana = recode(dia_semana, lunes = "Lunes", martes = "Martes", miércoles = "Miércoles", jueves = "Jueves", viernes = "Viernes", sábado = "Sábado", domingo = "Domingo")) |> mutate(dia_semana = fct_relevel(dia_semana, c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"))) Consideremos los datos agregados del número de nacimientos (registrados) por día desde 1999 hasta 2016. Un primer intento podría ser hacer una gráfica de la serie de tiempo. Sin embargo, vemos que no es muy útil: Hay varias características que notamos. Primero, parece haber una tendencia ligeramente decreciente del número de nacimientos a lo largo de los años. Segundo, la gráfica sugiere un patrón anual. Y por último, encontramos que hay dispersión producida por los días de la semana. Sólo estas características hacen que la comparación entre días sea difícil de realizar. Supongamos que comparamos el número de nacimientos de dos miércoles dados. Esa comparación será diferente dependiendo: del año donde ocurrieron, el mes donde ocurrieron, si semana santa ocurrió en algunos de los miércoles, y así sucesivamente. Como en nuestros ejemplos anteriores, la idea del siguiente análisis es aislar las componentes que observamos en la serie de tiempo: extraemos componentes ajustadas, y luego examinamos los residuales. En este caso particular, asumiremos una descomposición aditiva de la serie de tiempo (William S. Cleveland 1993). En el estudio de series de tiempo una estructura común es considerar el efecto de diversos factores como tendencia, estacionalidad, ciclicidad e irregularidades de manera aditiva. Esto es, consideramos la descomposición \\[\\begin{align} y(t) = f_{t}(t) + f_{e}(t) + f_{c}(t) + \\varepsilon. \\end{align}\\] Una estrategia de ajuste, como veremos más adelante, es proceder de manera modular. Es decir, se ajustan los componentes de manera secuencial considerando los residuales de los anteriores. Tendencia Comenzamos por extraer la tendencia, haciendo promedios loess (William S. Cleveland 1979) con vecindades relativamente grandes. Quizá preferiríamos suavizar menos para capturar más variación lenta, pero si hacemos esto en este punto empezamos a absorber parte de la componente anual: mod_1 <- loess(n ~ as.numeric(fecha), data = natalidad, span = 0.2, degree = 1) datos_dia <- natalidad |> mutate(ajuste_1 = fitted(mod_1)) |> mutate(res_1 = n - ajuste_1) Notemos que a principios de 2000 el suavizador está en niveles de alrededor de 7000 nacimientos diarios, hacia 2015 ese número es más cercano a unos 6000. Componente anual Al obtener la tendencia podemos aislar el efecto a largo plazo y proceder a realizar mejores comparaciones (por ejemplo, comparar un día de 2000 y de 2015 tendria más sentido). Ahora, ajustamos los residuales del suavizado anterior, pero con menos suavizamiento. Así evitamos capturar tendencia: mod_anual <- loess(res_1 ~ as.numeric(fecha), data = datos_dia, degree = 2, span = 0.005) datos_dia <- datos_dia |> mutate(ajuste_2 = fitted(mod_anual)) |> mutate(res_2 = res_1 - ajuste_2) Día de la semana Hasta ahora, hemos aislado los efectos por plazos largos de tiempo (tendencia) y hemos incorporado las variaciones estacionales (componente anual) de nuestra serie de tiempo. Ahora, veremos cómo capturar el efecto por día de la semana. En este caso, podemos hacer suavizamiento loess para cada serie de manera independiente datos_dia <- datos_dia |> group_by(dia_semana) |> nest() |> mutate(ajuste_mod = map(data, ~ loess(res_2 ~ as.numeric(fecha), data = .x, span = 0.1, degree = 1))) |> mutate(ajuste_3 = map(ajuste_mod, fitted)) |> select(-ajuste_mod) |> unnest(cols = c(data, ajuste_3)) |> mutate(res_3 = res_2 - ajuste_3) |> ungroup() Residuales Por último, examinamos los residuales finales quitando los efectos ajustados: ## `geom_smooth()` using formula = 'y ~ x' Observación: nótese que la distribución de estos residuales presenta irregularidades interesantes. La distribución es de colas largas, y no se debe a unos cuantos datos atípicos. Esto generalmente es indicación que hay factores importantes que hay que examinar mas a detalle en los residuales: Reestimación Cuando hacemos este proceso secuencial de llevar el ajuste a los residual, a veces conviene iterarlo. La razón es que en una segunda o tercera pasada podemos hacer mejores estimaciones de cada componente, y es posible suavizar menos sin capturar componentes de más alta frecuencia. Así que podemos regresar a la serie original para hacer mejores estimaciones, más suavizadas: # Quitamos componente anual y efecto de día de la semana datos_dia <- datos_dia |> mutate(n_1 = n - ajuste_2 - ajuste_3) # Reajustamos mod_1 <- loess(n_1 ~ as.numeric(fecha), data = datos_dia, span = 0.02, degree = 2, family = "symmetric") Y ahora repetimos con la componente de día de la semana: Análisis de componentes Ahora comparamos las componentes estimadas y los residuales en una misma gráfica. Por definición, la suma de todas estas componentes da los datos originales. Este último paso nos permite diversas comparaciones que explican la variación que vimos en los datos. Una gran parte de los residuales está entre \\(\\pm 250\\) nacimientos por día. Sin embargo, vemos que las colas tienen una dispersión mucho mayor: quantile(datos_dia$res_6, c(00, .01,0.05, 0.10, 0.90, 0.95, 0.99, 1)) |> round() ## 0% 1% 5% 10% 90% 95% 99% 100% ## -2238 -1134 -315 -202 188 268 516 2521 ¿A qué se deben estas colas tan largas? Viernes 13? Podemos empezar con una curosidad. Los días Viernes o Martes 13, ¿nacen menos niños? Nótese que fue útil agregar el indicador de Semana santa por el Viernes 13 de Semana Santa que se ve como un atípico en el panel de los viernes 13. Residuales: antes y después de 2006 Veamos primero una agregación sobre los años de los residuales. Lo primero es observar un cambio que sucedió repentinamente en 2006: La razón es un cambio en la ley acerca de cuándo pueden entrar los niños a la primaria. Antes era por edad y había poco margen. Ese exceso de nacimientos son reportes falsos para que los niños no tuvieran que esperar un año completo por haber nacido unos cuantos días después de la fecha límite. Otras características que debemos investigar: Efectos de Año Nuevo, Navidad, Septiembre 16 y otros días feriados como Febrero 14. Semana santa: como la fecha cambia, vemos que los residuales negativos tienden a ocurrir dispersos alrededor del día 100 del año. Otros días especiales: más de residuales Ahora promediamos residuales (es posible agregar barras para indicar dispersión a lo largo de los años) para cada día del año. Podemos identificar ahora los residuales más grandes: se deben, por ejemplo, a días feriados, con consecuencias adicionales que tienen en días ajuntos (excesos de nacimientos): Semana santa Para Semana Santa tenemos que hacer unos cálculos. Si alineamos los datos por días antes de Domingo de Pascua, obtenemos un patrón de caída fuerte de nacimientos el Viernes de Semana Santa, y la característica forma de “valle con hombros” en días anteriores y posteriores estos Viernes. ¿Por qué ocurre este patrón? Nótese un defecto de nuestro modelo: el patrón de “hombros” alrededor del Viernes Santo no es suficientemente fuerte para equilibrar los nacimientos faltantes. ¿Cómo podríamos mejorar nuestra descomposición? Referencias "],["tipos-de-estudio-y-experimentos.html", "Sección 2 Tipos de estudio y experimentos Muestreo aleatorio Pero si no podemos hacer muestreo aleatorio? El estimador estándar Experimentos tradicionales Bloqueo Variables desconocidas Aleatorizando el tratamiento Selección de unidades y tratamiento Asignación natural del tratamiento", " Sección 2 Tipos de estudio y experimentos Motivación Pregunta de entrevista de Google (Chihara and Hesterberg 2018) Imagina que eres consultor y te preguntan lo siguiente (ver siguiente figura): Estoy haciendo una comparación de antes y después donde la hipótesis alternativa es pre.media.error > post.media.error. La distribución de ambas muestras es sesgada a la derecha. ¿Qué prueba me recomiendas para ésta situación? Figure 2.1: Error CPR, gráfica de densidad. Far better an approximate answer to the right question, which is often vague, than an exact answer to the wrong question, which can always be made precise. — John Tukey La siguiente imagen Roger Peng representa una situación común a la que se enfrenta el analista de datos, y se desarrolló en el contexto de preguntas vagas. En el esquema hay tres caminos: uno es uno ideal que pocas veces sucede, otro produce respuestas poco útiles pero es fácil, y otro es tortuoso pero que caracteriza el mejor trabajo de análisis de datos: Figure 2.2: Adaptado de R. Peng: Tukey, design thinking and better questions. Ejemplos: Alguien nos pregunta cuáles son las tiendas que mas venden de una cadena. Podríamos consultar bases de datos, hacer extracciones, definir periodos, etc. y reportar el promedio de ventas en el último mes, esta respuesta probablemente es poco útil. Nos damos cuenta, por ejemplo, porque la peor tienda es una que abrió hace relativamente poco, y la mejor es una de las tiendas más grandes que está en una zona de tráfico de alto costo. Una pregunta más interesante es, ¿qué equipos de ventas tienen mejor desempeño? ¿Cuánto aporta tener una cafetería dentro de la tienda en términos de ventas?, etc. Proceso Generador de Datos Entre las preguntas que se debe hacer el analista de datos una fundamental es entender el proceso generador de datos, pues esto determinará que otras preguntas son relevantes, y que análisis son adecuados, tanto en términos prácticos como estadísticos. La inferencia estadística busca hacer afirmaciones, cuantificadas de manera probabilista, acerca de datos que no tenemos, usando regularidades y conocimiento de datos que sí tenemos disponibles y métodos cuantitativos. Para hacer afirmaciones inferenciales eficientes y bien calibradas (con garantías estadísticas de calibración) a preguntas donde queremos generalizar de muestra a población, se requiere conocer con precisión el proceso que genera los datos muestrales. Esto incluye saber con detalle cómo se seleccionaron los datos a partir de los que se quiere hacer inferencia. En este caso, eficiente quiere decir que aprovechamos toda la información que está en los datos observados de manera que nuestros rangos de incertidumbre son lo más chico posibles (además de estar correctamente calibrados). Por su parte, probabilísticamente bien calibrados se refiere a que, lo que decimos que puede ocurrir con 10% de probabilidad ocurre efectivamente 1 de cada 10 veces, si decimos 20% entonces ocurre 2 de 20, etc. Veremos que para muestras dadas naturalmente, a veces es muy difiícil entender a fondo el proceso que generó la muestra y por tanto no tenemos las garantías de eficiencia y calibración. Ejemplo: Prevalencia de anemia Supongamos que nos interesa conocer el porcentaje de menores en edad escolar, (entre 6 y 15 años), con anemia en México. La fuente de datos disponible corresponde a registros del IMSS de hospitalizaciones de menores, ya sea por anemia o por otra causa (infecciones gastrointestinales, apendicitis, tratamiento de leucemia, …), se registró si el menor tenía anemia. En nuestra muestra el 47% de los niños tiene anemia. head(paciente) #> # A tibble: 6 × 4 #> edad padecimiento sexo anemia #> <int> <chr> <chr> <int> #> 1 8 picadura alacrán mujer 0 #> 2 10 infección intestinal hombre 1 #> 3 7 mordedura de perro hombre 1 #> 4 8 asma hombre 1 #> 5 13 infección intestinal mujer 0 #> 6 7 picadura alacrán hombre 0 ¿Qué nos dice esta cantidad acerca de la anemia en la población? ¿Podemos hacer inferencia estadística? ¿Cómo calculamos intervalos de confianza? # Si calculo el error estándar de la p estimada como sigue, es correcto? p <- mean(paciente$anemia) sqrt(p * (1 - p) / 5000) #> [1] 0.007060751 Muestreo aleatorio En la situación ideal diseñaríamos una muestra aleatoria de menores de edad, por ejemplo, utilizando el registro en educación primaria de la SEP, y mediríamos la prevalencia de anemia en la muestra, usaríamos esta muestra para estimar la prevalencia en la población y tendríamos además las herramientas para medir la incertidumbre de nuestra estimación (reportar intervalos, o errores estándar). El elemento clave, es la aleatorización en la selección de la muestra, la idea es distribuir los efecros desconcidos o no controlables que pueden introducir sesgos o variabilidad no conocida en los resultados. Pero si no podemos hacer muestreo aleatorio? En el caso de prevalencia de anemia, discutiendo con médicos e investigadores nos informan que la anemia se presenta en tasas más altas en niños más chicos. paciente |> count(edad) |> mutate(prop = round(100 * n / sum(n))) #> # A tibble: 10 × 3 #> edad n prop #> <int> <int> <dbl> #> 1 6 1001 20 #> 2 7 931 19 #> 3 8 980 20 #> 4 9 445 9 #> 5 10 484 10 #> 6 11 489 10 #> 7 12 246 5 #> 8 13 239 5 #> 9 14 90 2 #> 10 15 95 2 Y consultando con las proyecciones de población notamos que los niños chicos están sobrerepresentados en la muestra. Lo que nos hace considerar que debemos buscar una manera de ponderar nuestras observaciones para que reflejen a la población. Más aún, investigamos que algunas enfermedades están asociadas a mayor prevalencia de anemia: paciente |> count(padecimiento) |> arrange(-n) #> # A tibble: 7 × 2 #> padecimiento n #> <chr> <int> #> 1 infección respiratoria 745 #> 2 mordedura de perro 723 #> 3 úlcera 723 #> 4 asma 713 #> 5 apendcitis 704 #> 6 picadura alacrán 701 #> 7 infección intestinal 691 Utilizamos esta información para modelar y corregir nuestra estimación original. Por ejemplo con modelos de regresión. Sin embargo, debemos preguntarnos: ¿Hay más variables qué nos falta considerar? Ejemplo: Policías y tráfico Supongamos que nos preguntan en cuánto reduce un policía el tráfico en un crucero grande de la ciudad. La cultura popular ha establecido que los policías en cruceros hacen más tráfico porque no saben mover los semáforos. Nosotros decidimos buscar unos datos para entender esto. Escogemos entonces un grupo de cruceros problemáticos, registramos el tráfico cuando visitamos, y si había un policía o no. Después de este esfuerzo, obtenemos los siguientes datos: #> # A tibble: 10 × 2 #> # Groups: policia [2] #> policia tiempo_espera_min #> <int> <dbl> #> 1 0 2.27 #> 2 0 2.65 #> 3 0 3.4 #> 4 0 0.39 #> 5 0 1.1 #> 6 1 10.8 #> 7 1 4.67 #> 8 1 7.77 #> 9 1 6.3 #> 10 1 6.99 Lo que sabemos ahora es que la presencia de un policía es indicador de tráfico alto. El análisis prosiguiría calculando medias y medidas de error (escogimos una muestra aleatoria): Si somos ingenuos, entonces podríamos concluir que los policías efectivamente empeoran la situación cuando manipulan los semáforos, y confirmaríamos la sabiduría popular. Para juzgar este argumento desde el punto de vista causal, nos preguntamos primero: ¿Cuáles son los contrafactuales (los contrafactuales explican que pasaría si hubiéramos hecho otra cosa que la que efectivamente hicimos) de las observaciones? Efectos causales y el esquema de resultados potenciales Consideramos un tratamiento binario: Se manda policía o no se manda policía. Un resultado potencial es aquél que se observaría bajo un tratamiento particular. En cada semáforo, a una hora dada, hay dos resultados potenciales, uno por cada valor del tratamiento: \\(y_1:\\) tiempo de espera si se envía policía. \\(y_0:\\) tiempo de espera si no se envía policía. Para cada semáforo, en el momento de registro, uno observa únicamente uno de los dos resultados potenciales. El resultado no observado se conoce como resultado contrafactual. El estimador estándar A la comparación anterior - la diferencia de medias de tratados y no tratados - le llamamos usualmente el estimador estándar del efecto causal. Muchas veces este es un estimador malo del efecto causal. En nuestro ejemplo, para llegar a la conclusión errónea que confirma la sabiduría popular, hicimos un supuesto importante: En nuestra muestra, los casos con policía actúan como contrafactuales de los casos sin policía. Asi que asumimos que los casos con policía y sin policía son similares, excepto por la existencia o no de policía. En nuestro ejemplo, quizá un analista más astuto nota que tienen categorías históricas de qué tan complicado es cada crucero. Junta a sus datos, y obtiene: #> # A tibble: 10 × 3 #> # Groups: policia [2] #> policia tiempo_espera_min categoria #> <int> <dbl> <fct> #> 1 0 2.27 Fluido #> 2 0 2.65 Fluido #> 3 0 3.4 Típico #> 4 0 0.39 Fluido #> 5 0 1.1 Fluido #> 6 1 10.8 Complicado #> 7 1 4.67 Típico #> 8 1 7.77 Complicado #> 9 1 6.3 Complicado #> 10 1 6.99 Típico El analista argumenta entonces que los policías se enviaron principalmente a cruceros que se consideran Complicados según datos históricos. Esto resta credibilidad a la comparación que hicimos inicialmente: La comparación del estimador estándar no es de peras con peras: estamos comparando qué efecto tienen los policías en cruceros difíciles, con cruceros no difíciles donde no hay policía. La razón de esto es que el proceso generador de los datos incluye el hecho de que no se envían policías a lugares donde no hay tráfico. ¿Cómo producir contrafactuales para hacer la comparación correcta? Experimentos tradicionales Idealmente, quisiéramos observar un mismo crucero en las dos condiciones: con y sin policías. Esto no es posible. En un experimento “tradicional”, como nos lo explicaron en la escuela, nos aproximamos a esto preparando dos condiciones idénticas, y luego alteramos cada una de ellas con nuestra intervención. Si el experimento está bien hecho, esto nos da observaciones en pares, y cada quien tiene su contrafactual. La idea del experimiento tradicional es controlar todos los factores que intervienen en los resultados, y sólo mover el tratamiento para producir los contrafactuales. Más en general, esta estrategia consiste en hacer bloques de condiciones, donde las condiciones son prácticamente idénticas dentro de cada bloque. Comparamos entonces unidades tratadas y no tratadas dentro de cada bloque. Por ejemplo, si queremos saber si el tiempo de caída libre es diferente para un objeto más pesado que otro, prepararíamos dos pesos con el mismo tamaño pero de peso distinto. Soltaríamos los dos al mismo tiempo y compararíamos el tiempo de caída de cada uno. En nuestro caso, como es usual en problemas de negocio o sociales, hacer esto es considerablemente más difícil. No podemos “preparar” cruceros con condiciones idénticas. Sin embargo, podríamos intentar \\(bloquear\\) los cruceros según información que tenemos acerca de ellos, para hacer más comparaciones de peras con peras. Bloqueo Podemos acercanos en lo posible a este ideal de experimentación usando información existente. En lugar de hacer comparaciones directas entre unidades que recibieron el tratamiento y las que no (que pueden ser diferentes en otros aspectos, como vimos arriba), podemos refinar nuestras comparaciones bloquéandolas con variables conocidas. En el ejemplo de los policías, podemos hacer lo siguiente: dentro de cada categoría de cruceros (fluido, típico o complicado), tomaremos una muestra de cruceros, algunos con policía y otros sin. Haremos comparaciones dentro de cada categoría. Obtenemos una muestra con estas características (6 casos en cada categoría de crucero, 3 con policía y 3 sin policía): categoria policia n Fluido 0 3 Fluido 1 3 Típico 0 3 Típico 1 3 Complicado 0 3 Complicado 1 3 Y ahora hacemos comparaciones dentro de cada bloque creado por categoría: #> # A tibble: 3 × 3 #> # Groups: categoria [3] #> categoria `policia =0` `policia =1` #> <fct> <dbl> <dbl> #> 1 Fluido 2.1 0.8 #> 2 Típico 5.6 4.2 #> 3 Complicado 10.4 8.6 Y empezamos a ver otra imagen en estos datos: comparando tipos e cruceros similares, los que tienen policía tienen tiempos de espera ligeramente más cortos. ¿Hemos termniado? ¿Podemos concluir que el efecto de un policía es beneficiosos pero considerablemente chico? ¿Qué problemas puede haber con este análisis? Variables desconocidas El problema con el análisis anterior es que controlamos por una variable que conocemos, pero muchas otras variables pueden estar ligadas con el proceso de selección de cruceros para enviar policías. Por ejemplo, envían o policías a cruceros Típicos solo cuando reportan mucho tráfico. No envían a un polícia a un crucero Complicado si no presenta demasiado tráfico. Existen otras variables desconocidas que los tomadores de decisiones usan para enviar a los policías. En este caso, por ejemplo, los expertos hipotéticos nos señalan que hay algunos cruceros que aunque problemáticos, a veces su tráfico se resuelve rápidamente, mientras que otros tienen tráfico más persistente, y prefieren enviar policías a los de tráfico persistente. La lista de cruceros persistentes están en una hoja de excel que se comparte de manera informal. En resumen, no tenemos conocimiento detallado del proceso generador de datos en cuanto a cómo se asignan los policías a los cruceros. Igual que en la sección anterior, podemos cortar esta complejidad usando aleatorización. Nótese que los expertos no están haciendo nada malo: en su trabajo están haciendo el mejor uso de los recursos que tienen. El problema es que por esa misma razón no podemos saber el resultado de sus esfuerzos, y si hay maneras de optimizar la asignación que hacen actualmente. Aleatorizando el tratamiento Tomamos la decisión entonces de hacer un experimento que incluya aletorización. En un dia particular, escogeremos algunos cruceros. Dicidimos usar solamente cruceros de la categoría Complicada y Típica, pues esos son los más interesantes para hacer intervenciones. Usaremos un poco de código para entener el detalle: en estos datos, tenemos para cada caso los dos posibles resultados hipotéticos \\(y_0\\) y \\(y_1\\) (con policia y sin policia). En el experimento asignamos el tratamiento al azar: muestra_exp <- trafico_tbl |> filter(categoria != "Fluido") |> sample_n(200) |> # asignar tratamiento al azar, esta es nuestra intervención: mutate(tratamiento_policia = rbernoulli(length(y_0), 0.5)) |> # observar resultado mutate(tiempo_espera_exp = ifelse(tratamiento_policia == 1, y_1, y_0)) Nótese la diferencia si tomamos la asignación natural del tratamiento (policía o no): set.seed(134) muestra_natural <- trafico_tbl |> filter(categoria != "Fluido") |> sample_n(200) |> # usamos el tratamiento que se asignó # policia indica si hubo o no policía en ese crucero # observar resultado mutate(tiempo_espera_obs = ifelse(policia == 1, y_1, y_0)) Resumimos nuestros resultados del experimento son: #> # A tibble: 2 × 3 #> # Groups: categoria [2] #> categoria `policia=0` `policia=1` #> <fct> <dbl> <dbl> #> 1 Típico 6.24 4.97 #> 2 Complicado 15.8 8.47 Sin embargo, la muestra natural da: #> # A tibble: 2 × 3 #> # Groups: categoria [2] #> categoria `policia=0` `policia=1` #> <fct> <dbl> <dbl> #> 1 Típico 5.49 4.35 #> 2 Complicado 10.8 8.93 ¿Cuál de los dos análisis da la respuesta correcta a la pregunta: ayudan o no los policías a reducir el tráfico en los cruceros problemáticos? El experimento establece que un policía en promedio reduce a la mitad el tiempo de espera en un crucero complicado Selección de unidades y tratamiento Vimos dos tipos de inferencia que requieren distintos diseños de estudio: a poblaciones (ejemplo anemia) y causal (ejemplo policías). En el escenario ideal de cada uno de estos ejemplos requerimos un mecanismo de aleatorización, sin embargo, la aleatorización requerida en cada caso es distinta y distinguir esto es fundamental para entender las inferencias que podemos hacer en distintos escenarios. Inferencia estadística de acuerdo al tipo del diseño (Ramsey and Schafer (2012)). El cuadro arriba a la izquierda es donde el análisis es más simple y los resultados son más fáciles de interpretar. En este escenario don de la aleatorización es tanto en unidades como en grupos no hacen falta supuestos adicionales para tener las garantías de métodos de inferencia. Es posible hacer análisis fuera de este cuadro, pero el proceso es más complicado, requieren más supuestos, conocimiento del dominio y habilidades de análisis. En general resultan conclusiones menos sólidas. Muchas veces no nos queda otra más que trabajar fuera del cuadro ideal. El punto crucial para entender las medidas de incertidumbre estadística es visualizar de manera hipotética, replicaciones del estudio y las condiciones que llevaron a la selección de la muestra. Esto es, entender el proceso generador de datos e imaginar replicarlo. Ubica los siguientes tipos de análisis: Pruebas clínicas para medicinas Analizar cómo afecta tener seguro médico a los ingresos, usando datos del ENIGH. Estimación de retorno sobre inversión en modelos de marketing mix. Asignación natural del tratamiento Cuando consideramos un sistema donde se “asignan” tratamientos de manera natural, generalmente los tratamientos se asignan bajo un criterio de optimización o conveniencia (por ejemplo los policías a cruceros problemáticos). La cara buena de este hecho es que de alguna forma los resultados están intentando optimizarse, y la gente está haciendo su trabajo. La cara mala de este hecho es que no podemos evaluar de manera simple la efectividad de los tratamientos. Y esto hace difícil optimizar de forma cuantificable los procesos, o entender qué funciona y qué no. Referencias "],["pruebas-de-hipótesis.html", "Sección 3 Pruebas de hipótesis Comparación con poblaciones de referencia Comparando distribuciones Prueba de permutaciones y el lineup Comparaciones usando lineup (continuación) Prueba de permutaciones para proporciones Pruebas de hipótesis tradicionales Tomadores de té (continuación) Pruebas de permutación: implementación. Ejemplo: tiempos de fusión Ejemplo: tiempos de fusión (continuación) Separación de grupos La “crisis de replicabilidad” El jardín de los senderos que se bifurcan Ejemplo: decisiones de análisis y valores p Alternativas o soluciones", " Sección 3 Pruebas de hipótesis Las primeras técnicas inferenciales que veremos intentan contestar la siguiente pregunta: Si observamos cierto patrón en los datos, ¿cómo podemos cuantificar la evidencia de que es un patrón notable y no sólo debido a fluctuaciones en los datos particulares que tenemos? ¿Cómo sabemos que no estamos sobreinterpretando esas fluctuaciones? Por ejemplo: Un sistema tiene cierto comportamiento “usual” para el cual tenemos datos históricos. El sistema presenta fluctuaciones en el tiempo. Observamos la última salida de nuestro sistema. Naturalmente, tiene fluctuaciones. ¿Esas fluctuaciones son consistentes con la operación usual del sistema? ¿Existe evidencia para pensar que algo en el sistema cambió? Comparación con poblaciones de referencia En las prueba de hipótesis, tratamos de construir distribuciones de referencia para comparar resultados que obtengamos con un “estándar” de variación, y juzgar si nuestros resultados son consistentes con la referencia o no (Box et al. 1978). En algunos casos, ese estándar de variación puede construirse con datos históricos. Ejemplo Supongamos que estamos considerando cambios rápidos en una serie de tiempo de alta frecuencia. Hemos observado la serie en su estado “normal” durante un tiempo considerable, y cuando observamos nuevos datos quisiéramos juzgar si hay indicaciones o evidencia en contra de que el sistema sigue funcionando de manera similar. Digamos que monitoreamos ventanas de tiempo de tamaño 20 y necesitamos tomar una decisión. Abajo mostramos cinco ejemplos donde el sistema opera normalmente, que muestra la variabilidad en el tiempo en ventanas cortas del sistema. Ahora suponemos que obtenemos una nueva ventana de datos. ¿Hay evidencia en contra de que el sistema sigue funcionando de manera similar? Nuestra primera inclinación debe ser comparar: en este caso, compararamos ventanas históricas con nuestra nueva serie: # usamos datos simulados para este ejemplo set.seed(8812) historicos <- simular_serie(2000) ¿Vemos algo diferente en los datos nuevos (el panel de color diferente)? Indpendientemente de la respuesta, vemos que hacer este análisis de manera tan simple no es siempre útil: seguramente podemos encontrar maneras en que la nueva muestra (4) es diferente a muestras históricas. Por ejemplo, ninguna de muestras tiene un “forma de montaña” tan clara. Nos preguntamos si no estamos sobreinterpretando variaciones que son parte normal del proceso. Podemos hacer un mejor análisis si extraemos varias muestras del comportamiento usual del sistema, graficamos junto a la nueva muestra, y revolvemos las gráficas para que no sepamos cuál es cuál. Entonces la pregunta es: ¿Podemos detectar donde están los datos nuevos? Esta se llama una prueba de lineup, o una prueba de ronda de sospechosos (Hadley Wickham et al. 2010). En la siguiente gráfica, en uno de los páneles están los datos recientemente observados. ¿Hay algo en los datos que distinga al patrón nuevo? # nuevos datos obs <- simular_serie(500, x_inicial = last(obs$obs)) # muestrear datos históricos prueba_tbl <- muestrear_ventanas(historicos, obs[1:20, ], n_ventana = 20) # gráfica de pequeños múltiplos ggplot(prueba_tbl$lineup, aes(x = t_0, y = obs)) + geom_line() + facet_wrap(~rep, nrow = 4) + scale_y_log10() ¿Cuáles son los datos nuevos (solo hay un panel con los nuevos datos)? ¿Qué implica que la gráfica que escojamos como “más diferente” no sean los datos nuevos? ¿Qué implica que le “atinemos” a la gráfica de los datos nuevos? Ahora observamos al sistema en otro momento y repetimos la comparación. En el siguiente caso obtenemos: Aunque es imposible estar seguros de que ha ocurrido un cambio, la diferencia de una de las series es muy considerable. Si identificamos los datos correctos, la probabilidad de que hayamos señalado la nueva serie “sobreinterpretando” fluctuaciones en un proceso que sigue comportándose normalente es 0.05 - relativamente baja. Detectar los datos diferentes es evidencia en contra de que el sistema sigue funcionando de la misma manera que antes. En el ejemplo anterior se encontraban en la posición: prueba_tbl$pos ## [1] 18 Observaciones y terminología: Llamamos hipótesis nula a la hipótesis de que los nuevos datos son producidos bajo las mismas condiciones que los datos de control o de referencia. Si no escogemos la gráfica de los nuevos datos, nuestra conclusión es que la prueba no aporta evidencia en contra de la hipótesis nula. Si escogemos la gráfica correcta, nuestra conclusión es que la prueba aporta evidencia en contra de la hipótesis nula. ¿Qué tan fuerte es la evidencia, en caso de que descubrimos los datos no nulos? Cuando el número de paneles es más grande y detectamos los datos, la evidencia es más alta en contra de la nula. Decimos que el nivel de significancia de la prueba es la probabilidad de seleccionar a los datos correctos cuando la hipótesis nula es cierta (el sistema no ha cambiado). En el caso de 20 paneles, la significancia es de 1/20 = 0.05. Cuando detectamos los datos nuevos, niveles de significancia más bajos implican más evidencia en contra de la nula. Si acertamos, y la diferencia es más notoria y fue muy fácil detectar la gráfica diferente (pues sus diferencias son más extremas), esto también sugiere más evidencia en contra de la hipótesis nula. Finalmente, esta prueba rara vez (o nunca) nos da seguridad completa acerca de ninguna conclusión, aún cuando hiciéramos muchos páneles. Comparando distribuciones Ahora intentamos un ejemplo más típico. Supongamos que tenemos muestras para tres grupos a, b y c, esto es que dentro de cada grupo, el proceso de selección de los elementos se hace al azar y de manera simétrica (por ejemplo cada elemento tiene a misma probabiidad de ser seleccionado, y las extracciones se hacen de manera independiente.) Queremos comparar las distribuciones de los datos obtenidos para cada grupo. Quizá la pregunta detrás de esta comparación es: el grupo de clientes b recibió una promoción especial. ¿Están gastando más? La medición que comparamos es el gasto de los clientes. En la muestra observamos diferencias entre los grupos. Pero notamos adicionalmente que hay mucha variación dentro de cada grupo. Nos podríamos preguntar entonces si las diferencias que observamos se deben variación muestral, por ejemplo. Podemos construir ahora una hipótesis nula, que establece que las observaciones provienen de una población similar: Las tres poblaciones (a, b, c) son prácticamente indistiguibles. En este caso, la variación que observamos se debería a que tenemos información incompleta. Como en el ejemplo anterior necesitamos construir u obtener una distribución de referencia para comparar qué tan extremos o diferentes son los datos que observamos. Esa distribución de referencia debería estar basada en el supuesto de que los grupos producen datos de distribuciones similares. Si tuvieramos mediciones similares históricas de estos tres grupos, quizá podríamos extraer datos de referencia y comparar, como hicimos en el ejempo anterior. Pero esto es menos común en este tipo de ejemplos. Prueba de permutaciones y el lineup Para abordar este problema podemos pensar en usar permutaciones de los grupos de la siguiente forma ((Box et al. 1978), (Tim C. Hesterberg 2015a)): Si los grupos producen datos bajo procesos idénticos, entonces los grupos a, b, c solo son etiquetas que no contienen información. Podríamos permutar al azar las etiquetas y observar nuevamente la gráfica de caja y brazos por grupos. Si la hipótesis nula es cierta (grupos idénticos), esta es una muestra tan verosímil como la que obtuvimos. Así que podemos construir datos de referencia permutando las etiquetas de los grupos al azar, y observando la variación que ocurre. Si la hipótesis nula es cercana a ser cierta, no deberíamos de poder distinguir fácilmente los datos observados de los producidos con las permutaciones al azar. Vamos a intentar esto, por ejemplo usando una gráfica de cuantiles simplificada. Hacemos un lineup, o una rueda de sospechosos (usamos el paquete (H. Wickham, Chowdhury, and Cook 2012), ver (Hadley Wickham et al. 2010)), donde 19 de los acusados son generados mediante permutaciones al azar de la variable del grupo, y el culpable (los verdaderos datos) están en una posición escogida al azar. ¿Podemos identificar los datos verdaderos? Para evitar sesgarnos, también ocultamos la etiqueta verdadera. Usamos una gráfica que muestra los cuantiles 0.10, 0.50, 0.90: set.seed(88) reps <- lineup(null_permute("grupo"), muestra_tab, n = 20) ## decrypt("M7xA 2S8S Jj dUyJ8JUj ZW") reps_mezcla <- reps |> mutate(grupo_1 = factor(digest::digest2int(grupo) %% 177)) grafica_cuantiles(reps_mezcla, grupo_1, x) + coord_flip() + facet_wrap(~.sample, ncol = 5) + ylab("x") + labs(caption = "Mediana y percentiles 10% y 90%") + geom_point(aes(colour = grupo_1)) Y la pregunta que hacemos es ¿podemos distinguir nuestra muestra entre todas las replicaciones producidas con permutaciones? ¿Dónde están los datos observados? Según tu elección, ¿qué tan diferentes son los datos observados de los datos nulos? En este ejemplo, es difícil indicar cuáles son los datos. Los grupos tienen distribuciones similares y es factible que las diferencias que observamos se deban a variación muestral. Si la persona escoge los verdaderos datos, encontramos evidencia en contra de la hipótesis nula (los tres grupos son equivalentes). En algunos contextos, se dice que los datos son significativamente diferentes al nivel 0.05. Esto es evidencia en contra de que los datos se producen de manera homogénea, independientemente del grupo. Si la persona escoge uno de los datos permutados, no encontramos evidencia en contra de que los tres grupos producen datos con distribuciones similares. Comparaciones usando lineup (continuación) Repetimos el ejemplo para otra muestra (en este ejemplo el proceso generador de datos es diferente para el grupo b): Hacemos primero la prueba del lineup: set.seed(121) reps <- lineup(null_permute("grupo"), muestra_tab, n = 20) grafica_cuantiles(reps |> mutate(grupo_escondido = factor(digest::digest2int(grupo) %% 177)), grupo_escondido, x) + facet_wrap(~.sample) + ylab("x") + coord_flip() + geom_point(aes(colour = grupo_escondido)) Podemos distinguir más o menos claramente que está localizada en valores más altos y tiene mayor dispersión. En este caso, como en general podemos identificar los datos, obtenemos evidencia en contra de que los tres grupos tienen distribuciones iguales. Estos ejemplos siguen la idea de inferencia visual propuestas en (Hadley Wickham et al. 2010), (Hofmann et al. 2012) son pruebas muy flexibles y estadísticamente rigurosas. Prueba de permutaciones para proporciones Veremos otro ejemplo donde podemos hacer más concreta la idea de distribución nula o de referencia usando pruebas de permutaciones. Supongamos que con nuestra muestra de tomadores de té, queremos probar la siguiente hipótesis nula: Los tomadores de té en bolsas exclusivamente, usan azúcar a tasas simillares que los tomadores de té suelto (que pueden o no también tomar té en bolsita). Los datos que obtuvimos en nuestra encuesta, en conteos, son: sugar bolsa_exclusivo suelto o bolsa No.sugar 81 74 sugar 89 56 Y en proporciones tenemos que: how prop_azucar n bolsa_exclusivo 0.52 170 suelto o bolsa 0.43 130 Pero distintas muestras podrían haber dado distintos resultados. Nos preguntamos qué tan fuerte es la evidencia en contra de que en realidad los dos grupos de personas usan azúcar en proporciones similares, y la diferencia que vemos se puede atribuir a variación muestral. En este ejemplo, podemos usar una estadística de prueba numérica, por ejemplo, la diferencia entre las dos proporciones: \\[\\hat p_1 - \\hat p_2,\\] (tomadores de té en bolsa solamente vs. suelto y bolsa). El proceso sería entonces: La hipótesis nula es que los dos grupos tienen distribuciones iguales. Este caso quiere decir que en la población, tomadores de té solo en bolsa usan azúcar a las mismas tasas que tomadores de suelto o bolsas. Bajo nuestra hipótesis nula (proporciones iguales), producimos una cantidad grande (por ejemplo 10 mil o más) de muestras permutando las etiquetas de los grupos. Evaluamos nuestra estadística de prueba en cada una de las muestras permutadas. El conjunto de valores obtenidos nos da nuestra distribución de referencia (ya no estamos limitados a 20 replicaciones como en las pruebas gráficas). Y la pregunta clave es: ¿el valor de la estadística en nuestra muestra es extrema en comparación a la distribución de referencia? dif_obs <- te_azucar |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(how) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = how, values_from = prop_azucar) |> mutate(diferencia_prop = bolsa_exclusivo - `suelto o bolsa`) |> pull(diferencia_prop) La diferencia observada es: dif_obs |> round(3) ## [1] 0.093 Ahora construimos nuestra distribución nula o de referencia: reps <- lineup(null_permute("how"), te_azucar, n = 50000) glimpse(reps) ## Rows: 15,000,000 ## Columns: 3 ## $ how <chr> "bolsa_exclusivo", "bolsa_exclusivo", "suelto o bolsa", "suelt… ## $ sugar <chr> "sugar", "No.sugar", "No.sugar", "sugar", "No.sugar", "No.suga… ## $ .sample <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… valores_ref <- reps |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(.sample, how) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = how, values_from = prop_azucar) |> mutate(diferencia = bolsa_exclusivo - `suelto o bolsa`) Y graficamos nuestros resultados (con un histograma y una gráfica de cuantiles, por ejemplo). la estadística evaluada un cada una de nuestras muestras permutadas: g_1 <- ggplot(valores_ref, aes(sample = diferencia)) + geom_qq(distribution = stats::qunif) + xlab("f") + ylab("diferencia") + labs(subtitle = "Distribución nula o de referencia") g_2 <- ggplot(valores_ref, aes(x = diferencia)) + geom_histogram(binwidth = 0.04) + coord_flip() + xlab("") + labs(subtitle = " ") g_1 + g_2 Este es el rango de fluctuación usual para nuestra estadística bajo la hipótesis de que los dos grupos de tomadores de té consumen té a la misma tasa. El valor que obtuvimos en nuestros datos es: 0.09. Mismo que no es un valor extremo en la distribución de referencia que vimos arriba. Ésta muestra no aporta mucha evidencia en contra de que los grupos tienen distribuciones similares. Podemos graficar otra vez marcando el valor observado: # Función de distribución acumulada (inverso de función de cuantiles) dist_perm <- ecdf(valores_ref$diferencia) # Calculamos el percentil del valor observado percentil_obs <- dist_perm(dif_obs) g_1 <- ggplot(valores_ref, aes(sample = diferencia)) + geom_qq(distribution = stats::qunif) + xlab("f") + ylab("diferencia") + labs(subtitle = "Distribución nula o de referencia") + geom_hline(yintercept = dif_obs, colour = "red") + annotate("text", x = 0.35, y = dif_obs - 0.03, label = "diferencia observada", colour = "red") g_2 <- ggplot(valores_ref, aes(x = diferencia)) + geom_histogram(binwidth = 0.04) + coord_flip() + xlab("") + labs(subtitle = " ") + geom_vline(xintercept = dif_obs, colour = "red") + annotate("text", x = dif_obs, y = N_rep * .3, label = percentil_obs,vjust = -0.2, colour = "red") g_1 + g_2 Y vemos que es un valor algo (pero no muy) extremo en la distribución de referencia que vimos arriba: esta muestra no aporta una gran cantidad de evidencia en contra de que los grupos tienen distribuciones similares, que en este caso significa que los dos grupos usan azúcar a tasas similares. Es decir, sobre la hipótesis \\[H_0: p_1 = p_2,\\] o bien, \\[H_0: p_1 - p_2 = 0.\\] Pruebas de hipótesis tradicionales Comencemos recordando la definición de parámetro y estadística. Definición. Un parámetro es una característica (numérica) de una población o de una distribución de probabilidad. Usualmente denotado por \\(\\theta \\in \\mathbb{R},\\) o por \\(\\theta \\in \\mathbb{R}^p.\\) Una estadística es una característica (numérica) de los datos. Usualmente denotado por \\(\\hat \\theta.\\) Cualquier función de un parámetro es también un parámetro \\(\\varphi = h(\\theta),\\) y cualquier función de una estadística es también una estadística \\(\\hat \\varphi = h(\\hat \\theta).\\) Cuando la estadística se calcula de una muestra aleatoria (\\(T(X),\\) para \\(X_i \\sim \\pi_x\\) para \\(i = 1, \\ldots, n\\)), es por consiguiente aleatoria y es por tanto una variable aleatoria (\\(T \\sim \\pi_T\\)). Por ejemplo \\(\\mu\\) y \\(\\sigma\\) son parámetros de la distribución normal con función de densidad \\(\\pi(x) = (1/\\sqrt{2\\pi}\\sigma)e^{(x-\\mu)^2/(2\\sigma^2)}\\). La varianza \\(\\sigma^2\\), y el coeficiente de variación (cociente de señal a ruido) \\(\\mu/\\sigma\\) también son parámetros. Si \\(X_1, \\ldots ,X_n\\) son una muestra aleatoria, entonces la media \\(\\bar{X}=\\frac1n\\sum_i X_i\\) es una estadística. Ahora podemos pasar a las definiciones correspondientes a pruebas de hipótesis (o pruebas de significancia). Definición. Denotamos por \\(H_0\\) a la hipótesis nula la cual usualmente tratamos como la afirmación del status quo. La hipótesis alternativa la denotamos por \\(H_1\\) y representa el supuesto que está a prueba y para el cual buscamos evidencia en los datos. Definición. La hipótesis normalmente se plantea en términos de un parámetro (\\(\\theta\\in\\mathbb{R}\\)) o conjunto de parámetros (\\(\\theta\\in\\mathbb{R}^p\\)) de la distribución de interés (por ejemplo media, moda, varianza). Para una hipótesis nula del estilo \\(H_0: \\theta = \\theta_0,\\) la hipótesis a contrastar se puede denominar como: Hipótesis alternativa de una cola \\(H_1: \\theta \\gt \\theta_0\\) Hipótesis alternativa de dos colas \\(H_1: \\theta \\neq \\theta_0\\) En el ejemplo anterior planteamos hipótesis nula (proporciones iguales) e hipótesis alternativa que la proporción de tomadores de te suelto que usan azúcar en menor proporción, esto corresponde a una hipótesis alternativa a dos colas: \\(H_0: p_1 = p_2\\), y \\(H_1:p_1 > p_2\\). Definición. Una estadística de prueba es una función numérica de los datos cuyo valor determina el resultado de la prueba. La función usualmente es denotada por \\(T(\\bf X)\\) donde \\(\\bf X\\) representa los datos como variable aleatoria. Por ejemplo, \\(T = T(X_1, \\ldots, X_n)\\) si sólo tenemos una muestra, o por \\(T = T(X_1, \\ldots, X_n, Y_1, \\ldots, Y_m)\\) en el caso de tener dos muestras. Al evaluar la prueba para un conjunto de datos dado, \\(x\\), ésta se denomina estadística de prueba observada, \\(t = T(x).\\) La estadística de prueba correspondiente al ejemplo es \\(T = \\hat p_1 - \\hat p_2.\\) Definición. El valor p es la probabilidad de que bajo la hipótesis nula los datos generen un valor tan extremo como la estadística de prueba observada. Por ejemplo, si consideramos la hipótesis nula admite valores grandes, el valor p se calcula como \\(P(T \\geq t).\\) En el ejemplo de tomadores de té: el valor p lo calculamos usando el percentil donde nuestra observación cae en la distribución generada por las permutación (valor p de una cola). 1 - dist_perm(dif_obs) ## [1] 0.04344 Por otro lado, podemos calcular: Valor p de dos colas: Si la hipótesis nula es cierta, ¿cuál es la probabilidad de observar una diferencia tan extrema o más extrema de lo que observamos? Considerando este caso interpretamos extrema como qué tan lejos cae del centro de masa de la distribución. De tal forma que podemos calcular el valor p como sigue. A partir del valor observado, consideramos cuál dato es menor: la probabilidad bajo lo hipótesis nula de observar una diferencia mayor de la que observamos, o la probabilidad de observar una diferencia menor a la que observamos. Tomamos el mínimo y multiplicamos por dos (Tim C. Hesterberg 2015a): 2 * min(dist_perm(dif_obs), (1 - dist_perm(dif_obs))) ## [1] 0.08688 Este valor p se considera como evidencia moderada en contra de la hipótesis nula. Valores p chicos (observaciones más extremas en comparación con la referencia) aportan más evidencia en contra de la hipótesis nula, y valores más grandes aportan menos evidencia en contra. Definición. Un resultado es estadisticamente significativo si tiene muy baja probabilidad de suceder al azar. Entre más pequeño requiramos un valor p oara declarar un resultado estadísticamente significativo, somos más conservadores. Las pruebas de hipótesis con frecuencia inician contestando una pregunta más general que los valores p: ¿Cuál es la distribución de la estadística de prueba cuando no hay un efecto real? Definición. La distribución nula es la distribución de la estadística de prueba si la hipótesis nula es cierta. En ocasiones también nos referimos a ella como la distribución de referencia pues estamos comparando la estadística de prueba observada a su referencia para determinar que tan inusual es. En el ejemplo de tomadores de té aproximamos la distribución nula (y los valores p) con simulación; sin embargo, para algunas estadísticas hay métodos exactos. En particular, usamos el método de pruebas de permutación. Para dicha prueba el algoritmo para en el caso de dos grupos sería como sigue: Prueba de permutación para dos muestras Supongamos que tenemos m observaciones de una población y n de otra. Combina los m+n valores. Repite: Obtén un remuestra de tamaño m sin reemplazo del total. Usa las n observaciones restantes para obtener la otra muestra. Calcula la estadística de prueba (que compara las muestras). Calcula el valor p como la fracción de las veces que la estadística sobrepasó la estadística observada, multiplica por 2 para una prueba de dos lados. La distribución de la estadística a lo largo de las remuestras de permutación es la distribución de permutación. Ésta puede ser exacta, si se calcula exhaustivamente (como cuando tenemos pocas observaciones) o aproximada (cuando enlistar todas las posible combinaciones es prohibitivo). Tomadores de té (continuación) Ahora hacemos una prueba de permutaciones para otro par de proporciones utilizando el mismo método. La hipótesis nula ahora es: Los tomadores de té Earl Gray usan azúcar a una tasa similar a los tomadores de té negro. Los datos que obtuvimos en nuestra encuesta se muestran en la siguiente tabla: sugar Earl Grey black No.sugar 84 51 sugar 109 23 Y en porcentajes tenemos que: prop_azucar <- te_azucar |> count(Tea, sugar) |> group_by(Tea) |> mutate(prop = 100 * n / sum(n), n = sum(n)) |> filter(sugar == "sugar") |> select(Tea, prop_azucar = prop, n) |> mutate('% usa azúcar' = round(prop_azucar)) |> select(-prop_azucar) prop_azucar |> formatear_tabla() Tea n % usa azúcar Earl Grey 193 56 black 74 31 Pero distintas muestras podrían haber dado distintos resultados. Nos preguntamos qué tan fuerte es la evidencia en contra de que en realidad los dos grupos de personas usan azúcar en proporciones similares considerando que la diferencia que vemos se puede atribuir a variación muestral. Escribimos la función que calcula diferencias para cada muestra: calc_diferencia_2 <- function(datos){ datos |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(Tea) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = Tea, values_from = prop_azucar) |> mutate(diferencia_prop = `Earl Grey` - black) |> pull(diferencia_prop) } La diferencia observada es: ## [1] 0.254 Ahora construimos nuestra distribución nula o de referencia: set.seed(2) reps <- lineup(null_permute("Tea"), te_azucar, n = N_rep) valores_ref <- reps |> group_by(.sample) |> nest() |> mutate(diferencia = lapply(data, calc_diferencia_2)) |> unnest(diferencia) Y podemos graficar la distribución de referencia otra vez marcando el valor observado En este caso, la evidencia es muy fuerte en contra de la hipótesis nula, pues el resultado que obtuvimos es muy extremo en relación a la distribución de referencia. El valor p es cercano a 0. Haz una prueba de permutaciones para diferencia de medias para comparar la propina en cena vs en comidas. Grafica la distribución de referencia. Calcula el valor p (dos colas). Pruebas de permutación: implementación. Hasta ahora nos hemos centrado en ejemplos de diferencias en medias. Podemos extender las pruebas de permutación a \\(\\bar{X}\\) (la media de la primera muestra), \\(n\\bar{X}\\) (la suma de las observaciones en la primera muestra), y más. Teorema. En pruebas de permutación, si dos estadísticas de prueba \\(T_1\\) y \\(T_2\\) están relacionadas por una función estríctamente monótona, \\(T_1(X^*)=f(T_2(X^*))\\) donde \\(X^*\\) es una remuestra de permutación de los datos originales, entonces los valores p serán los mismos en las pruebas de permutación. Muestras con reemplazo de la Distribución Nula. En la implementación de muestreo, no nos aseguramos que las remuestras sean únicas. Sería más acertado tomar muestras sin reemplazo, sin embargo, el costo computacional es demasiado alto. Por simplicidad consideramos muestras con reemplazo del total de \\[m+n\\choose n\\] posibles remuestras. Por lo tanto, al remuestrar obtenemos una muestra de la distribución nula. Entre más muestras, más exactitud. Hemos usado \\(B = 10^3\\) remuestras (N_rep en el código), en general entre más remuestras tendremos una mejor estimación del valor p. Si el verdadero valor es \\(p\\) el estimado tendrá una varianza aproximadamente de \\(p(1- p)/B\\) donde \\(B\\) es el número de remuestras generadas. Observación. Así como los \\(n\\) datos originales son una muestra de la población, también las \\(B\\) remuestras de la estadística son una muestra de una población, en este caso de la distribución nula. La pruebas de permutaciones son más útiles cuando nuestra hipótesis nula se refiere que la distribución de los grupos son muy similares, o la independencia entre observaciones y grupo. Esto también aplica cuando queremos probar por ejemplo, que una variable numérica \\(Y\\) es independiente de \\(X.\\) Hay algunas hipótesis que no se pueden probar con este método, como por ejemplo, las que se refieren a una sola muestra: ¿los datos son consistentes con que su media es igual a 5? Adicionalmente, en algunas ocasiones queremos probar aspectos más específicos de las diferencias: como ¿son iguales las medias o medianas de dos grupos de datos? ¿Tienen dispersión similar? Es común aplicar pruebas de permutaciones a este segundo problema, sin embargo, no están tan perfectamente adaptadas a el, pues prueban todos los aspectos de las distribuciones que se comparan, aún cuando escojamos una estadística particular que pretende medir. Por ejemplo, cuando trabajamos con la diferencia de medias. Eso quiere decir que podemos rechazar igualdad de medias, por ejemplo, cuando en realidad otra característica de las distribuciones es la que difiere mucho en las poblaciones. En algunas referencias (ver (Chihara and Hesterberg 2018), (Efron and Tibshirani 1993)) se argumenta que de todas formas las pruebas de permutaciones son relativamente robustas a esta desadaptación. Un caso excepcional, por ejemplo, es cuando las poblaciones que comparamos resultan tener dispersión extremadamente distinta, y adicionalmente los tamaños de muestra de los grupos son muy desiguales (otra vez, ver ejemplos en (Chihara and Hesterberg 2018)). Ejemplo: tiempos de fusión Veamos el siguiente ejemplo, que es un experimento donde se midió el tiempo que tardan distintas personas en fusionar un estereograma para ver una imagen 3D. (William S. Cleveland (1993)). Existen dos condiciones: en una se dio indicaciones de qué figura tenían que buscar (VV) y en otra no se dio esa indicación. ¿Las instrucciones verbales ayudan a fusionar más rápido el estereograma? ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## n = col_double(), ## time = col_double(), ## nv.vv = col_character() ## ) La situación es la siguiente: considerando que hay mucha variación en el tiempo de fusión dentro de cada tratamiento, necesitamos calificar la evidencia de nuestra conclusión (el tiempo de fusión se reduce con información verbal). Podemos usar una prueba de permutaciones, esta vez justificándola por el hecho de que los tratamientos se asignan al azar: si los tratamientos son indistinguibles, entonces las etiquetas de los grupos son sólo etiquetas, y permutarlas daría muestras igualmente verosímiles. En este caso, compararemos gráficas de cuantiles de los datos con los producidos por permutaciones (transformamos los datos pues en este caso es más apropiado una comparación multiplicativa): ¿Podemos identificar los datos? En general, muy frecuentemente las personas identifican los datos correctamente, lo que muestra evidencia considerable de que la instrucción verbal altera los tiempos de respuesta de los partipantes, y en este caso ayuda a reducir el tiempo de fusión de los estereogramas. Ejemplo: tiempos de fusión (continuación) Podemos usar las pruebas de permutaciones para distintos tipos de estadísticas: medianas, medias, comparar dispersión usando rangos intercuartiles o varianzas, etc. Regresamos a los tiempos de fusión. Podemos hacer una prueba de permutaciones para la diferencia de las medias o medianas, por ejemplo. En este ejemplo usaremos una medida de centralidad un poco diferente, como ilustración: el promedio de los cuartiles superior e inferior de las dos distribuciones. Usaremos el cociente de estas dos cantidades para medir su diferencia # esta función hace permutaciones y calcula la diferencia para cada una permutaciones_est <- function(datos, variable, calc_diferencia, n = 1000){ # calcular estadística para cada grupo permutar <- function(variable){ sample(variable, length(variable)) } tbl_perms <- tibble(.sample = seq(1, n-1, 1)) |> mutate(diferencia = map_dbl(.sample, ~ datos |> mutate({{variable}}:= permutar({{variable}})) |> calc_diferencia())) bind_rows(tbl_perms, tibble(.sample = n, diferencia = calc_diferencia(datos))) } stat_fusion <- function(x){ (quantile(x, 0.75) + quantile(x, 0.25))/2 } calc_fusion <- function(stat_fusion){ fun <- function(datos){ datos |> group_by(nv.vv) |> summarise(est = stat_fusion(time), .groups = 'drop') |> pivot_wider(names_from = nv.vv, values_from = est) |> mutate(dif = VV / NV ) |> pull(dif) } fun } calc_cociente <- calc_fusion(stat_fusion) dif_obs <- calc_cociente(fusion) # permutar valores_ref <- permutaciones_est(fusion, nv.vv, calc_cociente, n = N_rep) dist_perm_nv <- ecdf(valores_ref$diferencia) cuantil_obs <- dist_perm_nv(dif_obs) Y el valor p de dos colas es dist_perm_nv <- ecdf(valores_ref$diferencia) 2 * min(dist_perm_nv(dif_obs), 1 - dist_perm_nv(dif_obs)) ## [1] 0.028 Lo que muestra evidencia considerable, aunque no muy fuerte, de que la instrucción verbal ayuda a reducir el tiempo de fusión de los estereogramas: la caja del diagrama de caja y brazos para el grupo VV está encogida por un factor menor a 1. Separación de grupos Este ejemplo tomado de (Chowdhury et al. 2015) (tanto la idea como el código). La pregunta que se aborda en ese estudio es: Existen métodos de clasificación (supervisados o no supervisados) para formar grupos en términos de variables que describen a los individuos Estos métodos (análisis discriminante, o k-means, por ejemplo), pretenden formar grupos compactos, bien separados entre ellos. Cuando aplicamos el método, obtenemos clasificadores basados en las variables de entrada. La pregunta es: ¿los grupos resultantes son producto de patrones que se generalizan a la población, o capitalizaron en variación aleatoria para formarse? Especialmente cuando tenemos muchas mediciones de los individuos, y una muestra relativamente chica, Es relativamente fácil encontrar combinaciones de variables que separan los grupos, aunque estas combinaciones y diferencias están basadas en ruido y no generalizan a la población. Como muestran en (Chowdhury et al. 2015), el lineup es útil para juzgar si tenemos evidencia en contra de que los grupos en realidad son iguales, y usamos variación muestral para separarlos. Avispas (opcional) En el siguiente ejemplo, tenemos 4 grupos de avispas (50 individuos en total), y para cada individuo se miden expresiones de 42 genes distintos. La pregunta es: ¿Podemos separar a los grupos de avispas dependiendo de sus mediciones? En este se usó análisis discriminante (LDA) para buscar proyecciones de los datos en dimensión baja de forma que los grupos sean lo más compactos y separados posibles. Para probar qué tan bien funciona este método, podemos hacer una prueba de permutación, aplicamos LDA y observamos los resultados. Y vemos que incluso permutando los grupos, es generalmente posible separarlos en grupos bien definidos: la búsqueda es suficientemente agresiva para encontrar combinaciones lineales que los separan. Que no podamos distinguir los datos verdaderos de las replicaciones nulas indica que este método difícilmente puede servir para separar los grupos claramente. Otro enfoque sería separar los datos en una muestra de entrenamiento y una de prueba (que discutiremos en la última sesión). Aplicamos el procedimiento a la muestra de entrenamiento y luego vemos qué pasa con los datos de prueba: set.seed(8) wasps_1 <- wasps |> mutate(u = runif(nrow(wasps), 0, 1)) wasps_entrena <- wasps_1 |> filter(u <= 0.8) wasps_prueba <- wasps_1 |> filter(u > 0.8) wasp.lda <- MASS::lda(Group ~ ., data=wasps_entrena[,-1]) wasp_ld_entrena <- predict(wasp.lda, dimen=2)$x |> as_tibble(.name_repair = "universal") |> mutate(tipo = "entrenamiento") |> mutate(grupo = wasps_entrena$Group) wasp_ld_prueba <- predict(wasp.lda, newdata = wasps_prueba, dimen=2)$x |> as_tibble(.name_repair = "universal") |> mutate(tipo = "prueba")|> mutate(grupo = wasps_prueba$Group) wasp_lda <- bind_rows(wasp_ld_entrena, wasp_ld_prueba) ggplot(wasp_lda, aes(x = LD1, y = LD2, colour = grupo)) + geom_point(size = 3) + facet_wrap(~tipo) Aunque esta separación de datos es menos efectiva en este ejemplo por la muestra chica, podemos ver que la separación lograda en los datos de entrenamiento probablemente se debe a variación muestral. La “crisis de replicabilidad” Recientemente (Ioannidis 2005) se ha reconocido en campos como la psicología la crisis de replicabilidad. Varios estudios que recibieron mucha publicidad inicialmente no han podido ser replicados posteriormente por otros investigadores. Por ejemplo: Hacer poses poderosas produce cambios fisiológicos que mejoran nuestro desempeño en ciertas tareas. Mostrar palabras relacionadas con “viejo” hacen que las personas caminen más lento (efectos de priming). En todos estos casos, el argumento de la evidencia de estos efectos fue respaldada por una prueba de hipótesis nula con un valor p menor a 0.05. La razón es que ese es el estándar de publicación seguido por varias áreas y revistas arbitradas. La tasa de no replicabilidad parece ser mucho más alta (al menos la mitad o más, según algunas fuentes como la señalada arriba) que la sugerida por la tasa de falsos positivos (menos de 5%). Este problema de replicabilidad parece ser más frecuente cuando: Se trata de estudios de potencia baja: mediciones ruidosas y tamaños de muestra chicos. El plan de análisis no está claramente definido desde un principio (lo cual es difícil cuando se están investigando “fenómenos no estudiados antes”). ¿A qué se atribuye esta crisis de replicabilidad? El jardín de los senderos que se bifurcan Aunque haya algunos ejemplos de manipulaciones conscientes —e incluso, en menos casos, malintencionadas— para obtener resultados publicables o significativos (p-hacking), como vimos en ejemplos anteriores, hay varias decisiones, todas razonables, que podemos tomar cuando estamos buscando las comparaciones correctas. Algunas pueden ser: Transformar los datos (tomar o no logaritmos, u otra transformación). Editar datos atípicos (razonable si los equipos pueden fallar, o hay errores de captura, por ejemplo). Distintas maneras de interpretar los criterios de inclusión de un estudio (por ejemplo, algunos participantes mostraron tener gripa, o revelaron que durmieron muy poco la noche anterior, etc. ¿los dejamos o los quitamos?). Dado un conjunto de datos, las justificaciones de las decisiones que se toman en cada paso son razonables, pero con datos distintos las decisiones podrían ser diferentes. Este es el jardín de los senderos que se bifurcan (ver referencia en Gelman), que invalida en parte el uso valores p como criterio de evidencia contra la hipótesis nula. Esto es exacerbado por: Tamaños de muestra chicos y efectos “inestables” que se quieren medir (por ejemplo en psicología). El hecho de que el criterio de publicación es obtener un valor \\(p < 0.05\\), y la presión fuerte sobre los investigadores para producir resultados publicables (\\(p < 0.05\\)). El que estudios o resultados similares que no obtuvieron valores \\(p\\) por debajo del umbral no son publicados o reportados. Ver por ejemplo el comunicado de la ASA. Ojo: esas presiones de publicación no sólo ocurre para investigadores en psicología. Cuando trabajamos en problemas de análisis de datos que son de importancia, es común que existan intereses de algunas partes o personas involucradas por algunos resultados u otros (por ejemplo, nuestros clientes de consultoría o clientes internos). Eso puede dañar nuestro trabajo como analistas, y el avance de nuestro equipo. Aunque esas presiones son inevitables, se vuelven manejables cuando hay una relación de confianza entre las partes involucradas. Ejemplo: decisiones de análisis y valores p En el ejemplo de datos de fusión, decidimos probar, por ejemplo, el promedio de los cuartiles inferior y superior, lo cual no es una decisión típica pero usamos como ilustración. Ahora intentamos usar distintas mediciones de la diferencia entre los grupos, usando distintas medidas resumen y transformaciones (por ejemplo, con o sin logaritmo). Aquí hay unas 12 combinaciones distintas para hacer el análisis (multiplicadas por criterios de “aceptación de datos en la muestra”, que simulamos tomando una submuestra al azar): calc_fusion <- function(stat_fusion, trans, comparacion){ fun <- function(datos){ datos |> group_by(nv.vv) |> summarise(est = stat_fusion({{ trans }}(time)), .groups = 'drop') |> pivot_wider(names_from = nv.vv, values_from = est) |> mutate(dif = {{ comparacion }}) |> pull(dif) } fun } valor_p <- function(datos, variable, calc_diferencia, n = 1000){ # calcular estadística para cada grupo permutar <- function(variable){ sample(variable, length(variable)) } tbl_perms <- tibble(.sample = seq(1, n-1, 1)) |> mutate(diferencia = map_dbl(.sample, ~ datos |> mutate({{variable}} := permutar({{variable}})) |> calc_diferencia())) perms <- bind_rows(tbl_perms, tibble(.sample = n, diferencia = calc_diferencia(datos))) perms_ecdf <- ecdf(perms$diferencia) dif <- calc_diferencia(datos) 2 * min(perms_ecdf(dif), 1- perms_ecdf(dif)) } set.seed(7272) media_cuartiles <- function(x){ (quantile(x, 0.75) + quantile(x, 0.25))/2 } # nota: usar n=10000 o más, esto solo es para demostración: ejemplo <- list() calc_dif <- calc_fusion(mean, identity, VV - NV) ejemplo$media_dif <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(mean, log, VV - NV) ejemplo$media_dif_log <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(median, identity, VV / NV) ejemplo$mediana_razon <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(media_cuartiles, identity, VV / NV) ejemplo$cuartiles_razon <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) ejemplo <- read_rds("cache/ejemplo_p_val.rds") ejemplo$media_dif ## [1] 0.0658 ejemplo$media_dif_log ## [1] 0.018 ejemplo$mediana_razon ## [1] 0.049 ejemplo$cuartiles_razon ## [1] 0.0464 Si existen grados de libertad —muchas veces necesarios para hacer un análisis exitoso—, entonces los valores p pueden tener poco significado. Alternativas o soluciones El primer punto importante es reconocer que la mayor parte de nuestro trabajo es exploratorio (recordemos el proceso complicado del análisis de datos de refinamiento de preguntas). En este tipo de trabajo, reportar valores p puede tener poco sentido, y mucho menos tiene sentido aceptar algo verdadero cuando pasa un umbral de significancia dado. Nuestro interés principal al hacer análisis es: expresar correctamente, y de manera útil, la incertidumbre asociada a las conclusiones o patrones que mostramos (asociada a variación muestral, por ejemplo) con el objetivo que el proceso de toma de decisiones sea informado. Un resumen de un número (valor p, o el que sea) no puede ser tomado como criterio para tomar una decisión que generalmente es compleja. En la siguiente sección veremos cómo podemos mostrar parte de esa incertidumbre de manera más útil. Por otra parte, los estudios confirmatorios (donde se reportan valores p) también tienen un lugar. En áreas como la psicología, existen ahora movimientos fuertes en favor de la repetición de estudios prometedores pero donde hay sospecha de grados de libertad del investigador. Este movimiento sugiere dar valor a los estudios exploratorios que no reportan valor p, y posteriormente, si el estudio es de interés, puede intentarse una replicación confirmatoria, con potencia más alta y con planes de análisis predefinidos. Referencias "],["estimación-y-distribución-de-muestreo-1.html", "Sección 4 Estimación y distribución de muestreo Ejemplo: precios de casas Distribución de muestreo Más ejemplos El error estándar Calculando la distribución de muestreo Teorema central del límite Normalidad y gráficas de cuantiles normales Prueba de hipótesis de normalidad Ejemplo Más del Teorema central del límite", " Sección 4 Estimación y distribución de muestreo En esta sección discutiremos cuál el objetivo general del proceso de estimación, y cómo entender y manejar la variabilidad que se produce cuando aleatorizamos la selección de las muestras que utilizamos para hacer análisis. A diferencia de las pruebas de permutación, donde evaluábamos como cambiaría una estadísitica si un tratamiento o grupo se hubiera asignado de forma distinta, en la siguiente sección nos preguntamos como varía una estadística entre muestras. Por ejemplo, pasaremos de preguntar si una vacuna reduce el riesgo de una enfermedad a evaluar en que magnitud se reduce el riesgo de contraer la enfermedad. Ejemplo: precios de casas Supongamos que queremos conocer el valor total de las casas que se vendieron recientemente en una zona particular. Supondremos que tenemos un listado de las casas que se han vendido recientemente, pero en ese listado no se encuentra el precio de venta. Decidimos entonces tomar una muestra aleatoria de 100 de esas casas. Para esas casas hacemos trabajo de campo para averiguar el precio de venta. marco_casas <- read_csv("data/casas.csv") set.seed(841) muestra_casas <- sample_n(marco_casas, 100) |> select(id, nombre_zona, area_habitable_sup_m2, precio_miles) sprintf("Hay %0.0f casas en total, tomamos muestra de %0.0f", nrow(marco_casas), nrow(muestra_casas)) ## [1] "Hay 1144 casas en total, tomamos muestra de 100" head(muestra_casas) ## # A tibble: 6 × 4 ## id nombre_zona area_habitable_sup_m2 precio_miles ## <dbl> <chr> <dbl> <dbl> ## 1 287 NAmes 161. 159 ## 2 755 NAmes 95.3 156 ## 3 1190 Gilbert 168. 189 ## 4 36 NridgHt 228. 309 ## 5 32 Sawyer 114. 149. ## 6 538 NAmes 80.3 111. Como tomamos una muestra aleatoria, intentamos estimar el valor total de las casas que se vendieron expandiendo el total muestral, es decir nuestro estimador \\(\\hat{t} = t(X_1,\\ldots X_{100})\\) del total poblacional \\(t\\) es \\[\\hat{t} = \\frac{N}{n} \\sum_{i=1}^{100} X_i = N\\bar{x}\\] Esta función implementa el estimador: n <- nrow(muestra_casas) # tamaño muestra N <- nrow(marco_casas) # tamaño población estimar_total <- function(muestra_casas, N){ total_muestral <- sum(muestra_casas$precio_miles) n <- nrow(muestra_casas) # cada unidad de la muestra representa a N/n f_exp <- N / n # estimador total es la expansión del total muestral estimador_total <- f_exp * total_muestral res <- tibble(total_muestra = total_muestral, factor_exp = f_exp, est_total_millones = estimador_total / 1000) res } estimar_total(muestra_casas, N) |> mutate(across(where(is.numeric), \\(x) round(x, 2))) ## # A tibble: 1 × 3 ## total_muestra factor_exp est_total_millones ## <dbl> <dbl> <dbl> ## 1 18444. 11.4 211 Sin embargo, si hubiéramos obtenido otra muestra, hubiéramos obtenido otra estimación diferente. Por ejemplo: estimar_total(sample_n(marco_casas, 100), N) |> mutate(across(where(is.numeric), \\(x) round(x, 2))) ## # A tibble: 1 × 3 ## total_muestra factor_exp est_total_millones ## <dbl> <dbl> <dbl> ## 1 17916. 11.4 205. El valor poblacional que buscamos estimar (nótese que en la práctica este no lo conocemos) es: # multiplicar por 1000 para que sea en millones de dólares total_pob <- sum(marco_casas |> pull(precio_miles)) / 1000 total_pob ## [1] 209.7633 Así que: Para algunas muestras esta estadística puede estar muy cercana al valor poblacional, pero para otras puede estar más lejana. Para entender qué tan buena es una estimación particular, entonces, tenemos que entender cuánta variabilidad hay de muestra a muestra debida a la aleatorización. Esto depende del diseño de la muestra y de la población de precios de casas (que no conocemos). Distribución de muestreo La distribución de muestreo de una estadística enumera los posibles resultados que puede tomar esa estadística sobre todas las muestras posibles. Este es el concepto básico para poder entender qué tan bien o mal estima un parámetro poblacional dado. En nuestro ejemplo anterior de precio de casas, no podemos calcular todas las posibles estimaciones bajo todas las posibles muestras, pero podemos aproximar repitiendo una gran cantidad de veces el proceso de muestreo, como hicimos al aproximar la distribución de permutaciones de estadísticas de prueba de las secciones anteriores. Empezamos repitiendo 10 veces y examinamos cómo varía nuestra estadística: replicar_muestreo <- function(marco_casas, m = 500, n){ # n es el tamaño de muestra que se saca de marco_casas # m es el número de veces que repetimos el muestro de tamaño n resultados <- map_df(1:m, function(id) { sample_n(marco_casas, n) |> estimar_total(N) }, .id = "id_muestra") } replicar_muestreo(marco_casas, m = 10, n = 100) |> mutate(across(where(is.numeric), round, 1)) |> formatear_tabla() id_muestra total_muestra factor_exp est_total_millones 1 17594.8 11.4 201.3 2 17423.9 11.4 199.3 3 18444.3 11.4 211.0 4 17696.6 11.4 202.4 5 17275.8 11.4 197.6 6 17867.6 11.4 204.4 7 18450.8 11.4 211.1 8 18187.2 11.4 208.1 9 18604.2 11.4 212.8 10 19144.4 11.4 219.0 Como vemos, hay variación considerable en nuestro estimador del total, pero la estimación que haríamos con cualquiera de estas muestras no es muy mala. Ahora examinamos un número más grande de simulaciones: replicaciones_1 <- replicar_muestreo(marco_casas, m = 1500, n = 100) Y el siguiente histograma nos dice qué podemos esperar de la variación de nuestras estimaciones, y donde es más probable que una estimación particular caiga: graf_1 <- ggplot(replicaciones_1, aes(x = est_total_millones)) + geom_histogram() + geom_vline(xintercept = total_pob, colour = "red") + xlab("Millones de dólares") + scale_x_continuous(breaks = seq(180, 240, 10), limits = c(180, 240)) graf_1 Con muy alta probabilidad el error no será de más de unos 30 millones de dólares (o no más de 20% del valor poblacional). Definición Sea \\(X_1, X_2, \\ldots X_n\\) una muestra, y \\(T = t(X_1, X_2, \\ldots, X_n)\\) una estadística. La distribución de muestreo de \\(T\\) es la función de distribución de \\(T\\). Esta distribución es sobre todas las posibles muestras que se pueden obtener. Cuando usamos \\(T\\) para estimar algún parámetro poblacional \\(\\theta\\), decimos informalmente que el estimador es preciso si su distribución de muestreo está muy concentrada alrededor del valor \\(\\theta\\) que queremos estimar. Si la distribución de muestreo está concentrada en un conjunto muy grande o muy disperso, quiere decir que con alta probabilidad cuando obtengamos nuestra muestra y calculemos nuestra estimación, el resultado estará lejano del valor poblacional que nos interesa estimar. Veamos qué pasa cuando hacemos la muestra más grande en nuestro ejemplo: replicaciones_2 <- replicar_muestreo(marco_casas, m = 1500, n = 250) Graficamos las dos distribuciones de muestreo juntas, y vemos cómo con mayor muestra obtenemos un estimador más preciso, y sin considerar el costo, preferimos el estimador mejor concentrado alrededor del valor que buscamos estimar. library(patchwork) graf_2 <- ggplot(replicaciones_2, aes(x = est_total_millones)) + geom_histogram() + geom_vline(xintercept = total_pob, colour = "red") + xlab("Millones de dólares") + scale_x_continuous(breaks = seq(180, 240, 10), limits = c(180, 240)) graf_1 + graf_2 Observación: a veces este concepto se confunde la distribución poblacional de las \\(X_i\\). Esto es muy diferente. Por ejemplo, en nuestro caso, el histograma de la distribución de valores poblacionales es ggplot(marco_casas, aes(x = precio_miles)) + geom_histogram() que en general no tiene ver mucho en escala o forma con la distribución de muestreo de nuestro estimador del total. Más ejemplos Podemos también considerar muestrear de poblaciones sintéticas o modelos probabilísticos que usamos para modelar poblaciones reales. Por ejemplo, supongamos que tomamos una muestra de tamaño 15 de la distribución uniforme en \\([0,1]\\). Es decir, cada \\(X_i\\) es un valor uniformemente distribuido en \\([0,1]\\), y las \\(X_i\\) se extraen independientemente unas de otras. Consideramos dos estadísticas de interés: La media muestral \\(T_1(X) = \\frac{1}{15}\\sum_{i = 1}^{15} X_i\\) El cuantil 0.75 de la muestra \\(T_2(X) = q_{0.75}(X)\\) ¿Cómo crees que se vean las distribuciones muestrales de estas estadísticas? ¿Alrededor de qué valores crees que concentren? ¿Crees que tendrán mucha o poca dispersión? ¿Qué forma crees que tengan? Para el primer caso hacemos: # simular replicar_muestreo_unif <- function(est = mean, m, n = 15){ valores_est <- map_dbl(1:m, ~ est(runif(n))) tibble(id_muestra = 1:m, estimacion = valores_est) } sim_estimador_1 <- replicar_muestreo_unif(mean, 4000, 15) # graficar aprox de distribución de muestreo ggplot(sim_estimador_1, aes(x = estimacion)) + geom_histogram(bins = 40) + xlim(c(0, 1)) # simular para el máximo cuantil_75 <- function(x) quantile(x, 0.75) sim_estimador_2 <- replicar_muestreo_unif(cuantil_75, 4000, 15) # graficar distribución de muestreo ggplot(sim_estimador_2, aes(x = estimacion)) + geom_histogram(breaks = seq(0, 1, 0.02)) + xlim(c(0, 1)) Supón que tenemos una muestra de 30 observaciones de una distribución uniforme \\([0,b]\\). ¿Qué tan buen estimador de \\(b/2\\) es la media muestral? ¿Cómo lo cuantificarías? ¿Qué tan buen estimador del cuantil 0.8 de la distribución uniforme es el cuantil 0.8 muestral? ¿Qué desventajas notas en este estimador? El error estándar Una primera medida útil de la dispersión de la distribución de muestreo es su desviación estándar: la razón específica tiene qué ver con un resultado importante, el teorema central del límite, que veremos más adelante. En este caso particular, a esta desviación estándar se le llama error estándar: Definición A la desviación estándar de una estadística \\(T\\) le llamamos su error estándar, y la denotamos por \\(\\text{ee}(T)\\). A cualquier estimador de este error estándar lo denotamos como \\(\\hat{\\text{ee}}(T)\\). Este error estándar mide qué tanto varía el estimador \\(T\\) de muestra a muestra. Observación: es importante no confundir el error estándar con la desviación estándar de una muestra (o de la población). En nuestro ejemplo de las uniformes, la desviación estándar de las muestras varía como: map_dbl(1:10000, ~ sd(runif(15))) |> quantile() |> round(2) ## 0% 25% 50% 75% 100% ## 0.11 0.26 0.29 0.31 0.41 Mientras que el error estándar de la media es aproximadamente map_dbl(1:10000, ~ mean(runif(15))) |> sd() ## [1] 0.07439575 y el error estándar del máximo es aproximadamente map_dbl(1:10000, ~ max(runif(15))) |> sd() ## [1] 0.05928675 Como ejercicio para contrastar estos conceptos, puedes considerar: ¿Qué pasa con la desviación estándar de una muestra muy grande de uniformes? ¿Qué pasa con el error estándar de la media muestral de una muestra muy grande de uniformes? Ejemplo: valor de casas Consideramos el error estándar del estimador del total del inventario vendido, usando una muestra de 250 con el estimador del total que describimos arriba. Como aproximamos con simulación la distribución de muestreo, podemos hacer: ee_2 <- replicaciones_2 |> pull(est_total_millones) |> sd() round(ee_2, 1) ## [1] 5.2 que está en millones de pesos y cuantifica la dispersión de la distribución de muestreo del estimador del total. Para tamaño de muestra 100, obtenemos más dispersión: ee_1 <- replicaciones_1 |> pull(est_total_millones) |> sd() round(ee_1, 1) ## [1] 8.9 Nótese que esto es muy diferente, por ejemplo, a la desviación estándar poblacional o de una muestra. Estas dos cantidades miden la variabilidad del estimador del total. Calculando la distribución de muestreo En los ejemplos anteriores usamos simulación para obtener aproximaciones de la distribución de muestreo de algunos estimadores. También es posible: Hacer cálculos exactos a partir de modelos probabilísticos. Hacer aproximaciones asintóticas para muestras grandes (de las cuales la más importante es la que da el teorema central del límite). En los ejemplos de arriba, cuando muestreamos de la poblaciones, extrajimos las muestras de manera aproximadamente independiente. Cada observación \\(X_i\\) tiene la misma distribución y las \\(X_i\\)’s son independientes. Este tipo de diseños aleatorizados es de los más simples, y se llama muestreo aleatorio simple. En general, en esta parte haremos siempre este supuesto: Una muestra es iid (independiente e idénticamente distribuida) si es es un conjunto de observaciones \\(X_1,X_2, \\ldots X_n\\) independientes, y cada una con la misma distribución. En términos de poblaciones, esto lo logramos obteniendo cada observación de manera aleatoria con el mismo procedimiento. En términos de modelos probabilísticos, cada \\(X_i\\) se extrae de la misma distribución fija \\(F\\) (que pensamos como la “población”) de manera independiente. Esto lo denotamos por \\(X_i \\overset{iid}{\\sim} F.\\) Ejemplo Si \\(X_1, X_2, \\ldots X_n\\) es una muestra de uniformes independientes en \\([0,1]\\), ¿cómo calcularíamos la distribución de muestreo del máximo muestra \\(T_2 = \\max\\)? En este caso, es fácil calcular su función de distribución acumulada de manera exacta: \\[F_{\\max}(x) = P(\\max\\{X_1,X_2,\\ldots X_n\\} \\leq x)\\] El máximo es menor o igual a \\(x\\) si y sólo si todas las \\(X_i\\) son menores o iguales a \\(x\\), así que \\[F_{\\max} (x) = P(X_1\\leq x, X_2\\leq x, \\cdots, X_n\\leq x)\\] como las \\(X_i\\)’s son independientes entonces \\[F_{\\max}(x) = P(X_1\\leq x)P(X_2\\leq x)\\cdots P(X_n\\leq x) = x^n\\] para \\(x\\in [0,1]\\), pues para cada \\(X_i\\) tenemos \\(P(X_i\\leq x) = x\\). Así que no es necesario usar simulación para conocer esta distribución de muestreo. Derivando esta distribución acumulada obtenemos su densidad, que es \\[f(x) = nx^{n-1}\\] para \\(x\\in [0,1]\\), y es cero en otro caso. Si comparamos con nuestra simulación: teorica <- tibble(x = seq(0, 1 ,0.001)) |> mutate(f_dens = 15 * x^14) sim_estimador_3 <- replicar_muestreo_unif(max, 4000, 15) ggplot(sim_estimador_3) + geom_histogram(aes(x = estimacion), breaks = seq(0, 1, 0.02)) + xlim(c(0.5, 1)) + # el histograma es de ancho 0.02 y el número de simulaciones 4000 geom_line(data = teorica, aes(x = x, y = (4000 * 0.02) * f_dens), colour = "red", linewidth = 1.3) Y vemos que con la simulación obtuvimos una buena aproximación Nota: ¿cómo se relaciona un histograma con la función de densidad que genera los datos? Supón que \\(f(x)\\) es una función de densidad, y obtenemos un número \\(n\\) de simulaciones independientes. Si escogemos un histograma de ancho \\(\\Delta\\), ¿cuántas observaciones esperamos que caigan en un intervalo \\(I = [a - \\Delta/2, a + \\Delta/2]\\)?. La probabilidad de que una observación caiga en \\(I\\) es igual a \\[P(X\\in I) = \\int_I f(x)\\,dx = \\int_{a - \\Delta/2}^{a + \\Delta/2} f(x)\\,dx \\approx f(a) \\text{long}(I) = f(a) \\Delta\\] para \\(\\Delta\\) chica. Si nuestra muestra es de tamaño \\(n\\), el número esperado de observaciones que caen en \\(I\\) es entonces \\(nf(a)\\Delta\\). Eso explica el ajuste que hicimos en la gráfica de arriba. Otra manera de hacer es ajustando el histograma: si en un intervalo el histograma alcanza el valor \\(y\\), \\[f(a) = \\frac{y}{n\\Delta}\\] teorica <- tibble(x = seq(0, 1 ,0.001)) |> mutate(f_dens = 15*x^{14}) ggplot(sim_estimador_3) + geom_histogram(aes(x = estimacion, y = after_stat(density)), breaks = seq(0, 1, 0.02)) + xlim(c(0.5, 1)) + # el histograma es de ancho 0.02 y el número de simulaciones 4000 geom_line(data = teorica, aes(x = x, y = f_dens), colour = "red", size = 1.3) Ejemplo Supongamos que las \\(X_i\\)’s son independientes y exponenciales con tasa \\(\\lambda > 0\\). ¿Cuál es la distribución de muestreo de la suma \\(S = X_1 + \\cdots + X_n\\)? Sabemos que la suma de exponenciales independientes es una distribución gamma con parámetros \\((n, \\lambda)\\), y esta es la distribución de muestreo de nuestra estadística \\(S\\) bajo las hipótesis que hicimos. Podemos checar este resultado con simulación, por ejemplo para una muestra de tamaño \\(n=15\\) con \\(\\lambda = 1\\): replicar_muestreo_exp <- function(est = mean, m, n = 150, lambda = 1){ valores_est <- map_dbl(1:m, ~ est(rexp(n, lambda))) tibble(id_muestra = 1:m, estimacion = valores_est) } sim_estimador_1 <- replicar_muestreo_exp(sum, 4000, n = 15) teorica <- tibble(x = seq(0, 35, 0.001)) |> mutate(f_dens = dgamma(x, shape = 15, rate = 1)) # graficar aprox de distribución de muestreo ggplot(sim_estimador_1) + geom_histogram(aes(x = estimacion, y = after_stat(density)), bins = 35) + geom_line(data = teorica, aes(x = x, y = f_dens), colour = "red", linewidth = 1.2) Teorema central del límite Si consideramos los ejemplos de arriba donde tratamos con estimadores basados en una suma, total o una media —y en menor medida cuantiles muestrales—, vimos que las distribución de muestreo de las estadísticas que usamos tienden a tener una forma común. Estas son manifestaciones de una regularidad estadística importante que se conoce como el teorema central del límite: las distribuciones de muestreo de sumas y promedios son aproximadamente normales cuando el tamaño de muestra es suficientemente grande. Teorema central del límite Si \\(X_1,X_2, \\ldots, X_n\\) son independientes e idénticamente distribuidas con media \\(\\mu\\) y desviación estándar \\(\\sigma\\) finitas. Si el tamaño de muestra \\(n\\) es grande, entonces la distribución de muestreo de la media \\[\\bar{X} = \\frac{X_1 + X_2 +\\cdots + X_n}{n}\\] es aproximadamente normal con media \\(\\mu\\) y desviación estándar \\(\\sigma/\\sqrt{n}\\), que escribimos como \\[\\bar{X} \\xrightarrow{} \\mathsf{N}\\left( \\mu, \\frac{\\sigma}{\\sqrt{n}} \\right)\\] Adicionalmente, la distribución de la media estandarizada converge a una distribución normal estándar cuando \\(n\\) es grande: \\[\\sqrt{n} \\, \\left( \\frac{\\bar{X}-\\mu}{\\sigma} \\right) \\xrightarrow{} \\mathsf{N}(0, 1)\\] El error estándar de \\(\\bar{X}\\) es \\(\\text{ee}(\\bar{X}) = \\frac{\\sigma}{\\sqrt{n}}\\). Si tenemos una muestra, podemos estimar \\(\\sigma\\) con de la siguiente forma: \\[\\hat{\\sigma} =\\sqrt{\\frac{1}{n}\\sum_{i=1}^n (X_i - \\bar{X})^2}\\] o el más común (que explicaremos más adelante) \\[\\hat{s} = \\sqrt{\\frac{1}{n-1}\\sum_{i=1}^n (X_i - \\bar{X})^2}\\] Este hecho junto con el teorema del límite central nos dice cuál es la dispersión, y cómo se distribuyen las posibles desviaciones de la media muestral alrededor de la verdadera media poblacional. ¿Qué tan grande debe ser \\(n\\). Depende de cómo es la población. Cuando la población tiene una distribución muy sesgada, por ejemplo, \\(n\\) típicamente necesita ser más grande que cuando la población es simétrica si queremos obtener una aproximación “buena”. En algunos textos se afirma que \\(n\\geq 30\\) es suficiente para que la aproximación del Teorema central del límite (TCL) sea buena siempre y cuando la distribución poblacional no sea muy sesgada. Esta regla es más o menos arbitraria y es mejor no confiarse, pues fácilmente puede fallar. En la práctica es importante checar este supuesto, por ejemplo usando remuestreo (que veremos más adelante) Revisa los ejemplos que hemos visto hasta ahora (precios de casas, simulaciones de uniformes y exponenciales según las distintas estadísticas que consideramos). ¿Qué distribuciones de muestreo parecen tener una distribución normal? ¿Cómo juzgamos si estas distribuciones están cerca o lejos de una distribución normal? Normalidad y gráficas de cuantiles normales Para checar si una distribución de datos dada es similar a la normal, la herramienta mas común en estádística es la gráfica de cuantiles teóricos, que es una generalización de la gráfica de cuantiles que vimos anteriormente. En primer lugar, definimos la función de cuantiles de una distribución teórica, que es análoga a la que definimos para conjuntos de datos: Supongamos que tenemos una distribución acumulada teórica \\(\\Phi\\). Podemos definir el cuantil-\\(f\\) \\(q(f)\\) de \\(\\Phi\\) como el valor \\(q(f)\\) tal que \\[q(f) = \\text{argmin}\\{x \\,| \\, \\Phi(x)\\geq f \\}\\] En el caso de que \\(\\Phi\\) tiene densidad \\(\\phi\\), y su soporte es un intervalo (que puede ser de longitud infinita), entonces podemos también escribir \\(q(f)\\) como el valor único donde acumulamos \\(f\\) de la probabilidad \\[\\int_{-\\infty}^{q(f)} \\phi(x)\\,dx= f\\] Por ejemplo, para una densidad normal, abajo mostramos los cuantiles \\(f=0.5\\) (mediana) y \\(f=0.95\\) densidad_tbl <- tibble(x = seq(0, 10, 0.01)) |> mutate(densidad = dnorm(x, 5, 1)) # qnorm es la función de cuantiles de una normal cuantil_50 <- qnorm(0.50, 5, 1) cuantil_90 <- qnorm(0.95, 5, 1) # graficamos densidad_tbl <- densidad_tbl |> mutate(menor_50 = x >= cuantil_50) |> mutate(menor_90 = x >= cuantil_90) g_normal_50 <- ggplot(densidad_tbl, aes(y = densidad)) + ylab('f(x)') + geom_area(aes(x = x, fill = menor_50)) + geom_line(aes(x = x), alpha = 0.1) + geom_vline(xintercept = cuantil_50) + theme(legend.position = "none") + annotate("text", 4.3, 0.2, label = "50%") + labs(subtitle = paste0("q(0.5)=", round(cuantil_50,1))) g_normal_90 <- ggplot(densidad_tbl, aes(y = densidad)) + ylab('f(x)') + geom_area(aes(x = x, fill = menor_90)) + geom_line(aes(x = x), alpha = 0.1) + geom_vline(xintercept = cuantil_90) + theme(legend.position = "none") + annotate("text", 5.0, 0.2, label = "95%") + labs(subtitle = paste0("q(0.95)=", round(cuantil_90,1))) g_normal_50 + g_normal_90 Como todas las distribuciones normales tienen la misma forma, y para obtener una de otra solo basta reescalar y desplazar, para calcular los cuantiles de una variable con distribución normal \\(\\mathsf{N}(\\mu, \\sigma)\\) sólo tenemos que saber los cuantiles de la distribución normal estándar \\(\\mathsf{N}(0,1)\\) y escalarlos apropiadamente por su media y desviación estándar \\[q(f, \\mu, \\sigma) = \\mu + \\sigma q(f, 0, 1)\\] Puedes demostrar esto sin mucha dificultad empezando con \\(P(X\\leq q) = f\\) y estandarizando: \\[P(X\\leq q(f, \\mu, \\sigma)) = f \\implies P\\left (Z\\leq \\frac{q(f,\\mu,\\sigma) - \\mu}{\\sigma}\\right)=f\\] y esto implica que \\[q(f, 0, 1) = \\frac{q(f,\\mu,\\sigma) - \\mu}{\\sigma} \\implies q(f, \\mu, \\sigma) = \\mu + \\sigma q(f, 0, 1)\\] De modo que si graficáramos los cuantiles de una distribución \\(\\mathsf{N}(\\mu, \\sigma)\\) contra los cuantiles de una distribución \\(\\mathsf{N}(0,1)\\), estos cuantiles aparecen en una línea recta: comparacion_tbl <- tibble(f = seq(0.01, 0.99, 0.01)) |> mutate(cuantiles_normal = qnorm(f, 5, 3), cuantiles_norm_estandar = qnorm(f, 0, 1)) ggplot(comparacion_tbl, aes(cuantiles_norm_estandar, cuantiles_normal)) + geom_point() Ahora supongamos que tenemos una muestra \\(X_1, \\ldots, X_n\\). ¿Cómo podemos checar si estos datos tienen una distribución aproximadamente normal? Si la muestra tiene una distribución aproximadamente \\(\\mathsf{N}(\\mu, \\sigma)\\), entonces sus cuantiles muestrales y los cuantiles respectivos de la normal estándar están aproximadamente en una línea recta. Primero veamos un ejemplo donde los datos son generados según una normal. set.seed(21) muestra <- tibble(x_1 = rnorm(60, 10, 3), x_2 = rgamma(60, 2, 5)) graf_1 <- ggplot(muestra, aes(sample = x_1)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") graf_2 <- ggplot(muestra, aes(sample = x_2)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") graf_1 + graf_2 ¿Cuáles son los datos aproximadamente normales? ¿Cómo interpretas las desviaciones de la segunda gráfica en términos de la forma de la distribución normal? Prueba de hipótesis de normalidad Para interpretar las gráficas de cuantiles normales se requiere práctica, pues claramente los datos, aún cuando provengan de una distribución normal, no van a caer justo sobre una línea recta y observaremos variabilidad. Esto no descarta necesariamente que los datos sean aproximadamente normales. Con la práctica, generalmente esta gráfica nos da una buena indicación si el supuesto de normalidad es apropiado. Sin embargo, podemos hacer una prueba de hipótesis formal de normalidad si quisiéramos. La hipótesis nula es la siguiente: Los datos provienen de una distribución normal, y las desviaciones que observamos de una línea recta se deben a variación muestral. Podemos generar datos nulos tomando la media y desviación estándar muestrales, y generando muestras normales \\(\\mathsf{N}(\\bar{x}, s)\\). Usamos el lineup, produciendo datos bajo la hipótesis nula y viendo si podemos distinguir los datos. Por ejemplo: library(nullabor) lineup_normal <- lineup(null_dist("x_2", dist = "normal"), muestra) ggplot(lineup_normal, aes(sample = x_2)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") + facet_wrap(~ .sample) En esta gráfica claramente rechazaríamos la hipótesis de normalidad. Sin embargo, para la primera muestra, obtenemos: lineup_normal <- lineup(null_dist("x_1", dist = "normal"), muestra) ggplot(lineup_normal, aes(sample = x_1)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") + facet_wrap(~ .sample) Los datos verdaderos están en attr(lineup_normal, "pos") ## [1] 4 Ejemplo Consideremos el problema de estimar el total poblacional de los precios de las casas que se vendieron. El estimador que usamos fue la suma muestral expandida por un factor. Vamos a checar qué tan cerca de la normalidad está la distribución de meustreo de esta estadística (\\(n=250\\)): replicaciones_2 ## # A tibble: 1,500 × 4 ## id_muestra total_muestra factor_exp est_total_millones ## <chr> <dbl> <dbl> <dbl> ## 1 1 47089. 4.58 215. ## 2 2 45654. 4.58 209. ## 3 3 43973. 4.58 201. ## 4 4 45665. 4.58 209. ## 5 5 43551. 4.58 199. ## 6 6 46066. 4.58 211. ## 7 7 46626. 4.58 213. ## 8 8 47944. 4.58 219. ## 9 9 45381. 4.58 208. ## 10 10 46519. 4.58 213. ## # ℹ 1,490 more rows ggplot(replicaciones_2, aes(sample = est_total_millones)) + geom_qq(alpha = 0.3) + geom_qq_line(colour = "red") Y vemos que en efecto el TCL aplica en este ejemplo, y la aproximación es buena. Aunque la población original es sesgada, la descripción de la distribución de muestreo es sorprendemente compacta: La distribución de muestreo de nuestro estimador del total \\(\\hat{t}\\) es aproximadamente normal con media \\(\\bar{x}\\) y desviación estándar \\(s\\), donde: mu <- mean(replicaciones_2$est_total_millones) s <- sd(replicaciones_2$est_total_millones) c(mu = mu, s = s) |> round(2) ## mu s ## 209.90 5.24 Estas cantidades están en millones de dólares. Ejemplo Supongamos que queremos calcular la probabilidad que la suma de 30 variables uniformes en \\([0,1]\\) independientes sea mayor que 18. Podríamos aproximar esta cantidad usando simulación. Otra manera de aproximar esta cantidad es con el TCL, de la siguiente forma: Si \\(S=X_1 + X_2 + X_{30}\\), entonces la media de \\(S\\) es 15 (¿cómo se calcula?) y su desviación estándar es \\(\\sqrt{\\frac{30}{12}}\\). La suma es entonces aproximadamente \\(\\mathsf{N}\\left(15, \\sqrt{\\frac{30}{12}}\\right)\\). Entonces \\[P(S > 18) = P \\left (\\frac{S - 15}{\\sqrt{\\frac{30}{12}}} > \\frac{18 - 15}{\\sqrt{\\frac{30}{12}}}\\right) \\approx P(Z > 1.897)\\] donde \\(Z\\) es normal estándar. Esta última cantidad la calculamos usando la función de distribución de la normal estándar, y nuestra aproximación es 1 - pnorm(1.897) ## [1] 0.02891397 Podemos checar nuestro cálculo usando simulación: tibble(n_sim = 1:100000) |> mutate(suma = map_dbl(n_sim, ~ sum(runif(30)))) |> summarise(prob_may_18 = mean(suma > 18), .groups = "drop") ## # A tibble: 1 × 1 ## prob_may_18 ## <dbl> ## 1 0.0280 Y vemos que la aproximación normal es buena para fines prácticos. Usando simulaciones haz un histograma que aproxime la distribución de muestreo de \\(S\\). Haz una gráfica de cuantiles normales para checar la normalidad de esta distribución. Ejemplo Cuando el sesgo de la distribución poblacional es grande, puede ser necesario que \\(n\\) sea muy grande para que la aproximación normal sea aceptable para el promedio o la suma. Por ejemplo, si tomamos una gamma con parámetro de forma chico, \\(n = 30\\) no es suficientemente bueno, especialmente si quisiéramos aproximar probabilidades en las colas de la distribución: sims_gamma <- map_df(1:2000, ~ tibble(suma = sum(rgamma(30, 0.1, 1))), .id = "n_sim") ggplot(sims_gamma, aes(x = suma)) + geom_histogram() Más del Teorema central del límite El teorema central del límite aplica a situaciones más generales que las del enunciado del teorema básico. Por ejemplo, aplica a poblaciones finitas (como vimos en el ejemplo de las casas), en 1960 Jaroslav Hajek demostró una versión del TCL bajo muestreo sin reemplazo. Mas allá de la media muestral, el TCL se puede utilizar para más estadísticas ya que muchas pueden verse como promedios, como totales o errores estándar. El TLC se ha generalizado incluso para cuantiles muestrales. Es importante notar que la calidad de la aproximación del TCL depende de características de la población y también del tamaño de muestra \\(n\\). Para ver si el TCL aplica, podemos hacer ejercicios de simulación bajo diferentes supuestos acerca de la población. También veremos más adelante, con remuestreo, maneras de checar si es factible el TCL dependiendo del análisis de una muestra dada que tengamos. El TCL era particularmente importante en la práctica antes de que pudiéramos hacer simulación por computadora. Era la única manera de aproximar y entender la distribución muestral fuera de cálculos analíticos (como los que hicimos para el máximo de un conjunto de uniformes, por ejemplo). Hoy en día, veremos que podemos hacer simulación para obtener respuestas más exactas, particularmente en la construcción de intervalos de confianza, por ejemplo. Dependemos menos de resultados asintóticos, como el TCL. Cuando aproximamos una distribución discreta mediante la distribución normal, conviene hacer correcciones de continuidad, como se explica en (Chihara and Hesterberg 2018), 4.3.2. Referencias "],["intervalos-de-confianza-y-remuestreo.html", "Sección 5 Intervalos de confianza y remuestreo Ejemplo introductorio La idea del bootstrap El principio de plug-in Discusión: propiedades de la distribución bootstrap Error estándar bootstrap e intervalos normales Ejemplo: inventario de casas vendidas Calibración de intervalos de confianza Interpretación de intervalos de confianza Sesgo Intervalos bootstrap de percentiles Bootstrap para dos muestras Bootstrap y otras estadísticas Bootstrap y estimadores complejos: tablas de perfiles Bootstrap y muestras complejas Bootstrap en R Conclusiones y observaciones", " Sección 5 Intervalos de confianza y remuestreo En la sección anterior, vimos el concepto de distribución de muestreo de una estadística que queremos utilizar para estimar un valor poblacional, y vimos que con esta distribución podíamos evaluar qué tan preciso es nuestro estimador evaluando qué tan concentrada está esta distribución alrededor del valor poblacion que queremos estimar. Sin embargo, en los ejemplos que vimos la población era conocida: ya sea que tuviéramos toda la población finita disponible (como el ejemplo de las casas), o donde la población estaba definida por un modelo teórico de probabilidad (como los ejemplos de las distribuciones uniforme o exponencial). Ahora vemos qué hacer en el caso que realmente nos interesa: solo tenemos una muestra disponible, y la población es desconocida. Todo lo que tenemos es una muestra y una estimación basada en la muestra, y requerimos estimar la distribución de muestreo de la estadística de interés. El enfoque que presentaremos aquí es uno de los más flexibles y poderosos que están disponibles para este problema: el método bootstrap o de remuestreo. En primer lugar explicamos el concepto de intervalo de confianza, que es una manera resumida de evaluar la precisión de nuestras estimaciones. Ejemplo introductorio Regresamos a nuestro ejemplo anterior donde muestreamos 3 grupos, y nos preguntábamos acerca de la diferencia de sus medianas. En lugar de hacer pruebas de permutaciones (ya sea pruebas gráficas o alguna prueba de permutaciones para media o mediana, por ejemplo), podríamos considerar qué tan precisa es cada una de nuestras estimaciones para las medianas de los grupos. Nuestros resultados podríamos presentarlos como sigue. Este código lo explicaremos más adelante, por el momento consideramos la gŕafica resultante: set.seed(8) pob_tab <- tibble(id = 1:2000, x = rgamma(2000, 4, 1), grupo = sample(c("a","b", "c"), 2000, prob = c(4,2,1), replace = T)) muestra_tab <- pob_tab |> slice_sample(n = 125) g_1 <- ggplot(muestra_tab, aes(x = grupo, y = x)) + geom_boxplot(outlier.alpha = 0) + geom_jitter(alpha = 0.3) + labs(subtitle = "Muestra \\n") + ylim(c(0,14)) ## Hacemos bootstrap fun_boot <- function(datos){ datos |> group_by(grupo) |> slice_sample(prop = 1, replace = TRUE) } reps_boot <- map_df(1:2000, function(i){ muestra_tab |> fun_boot() |> group_by(grupo) |> summarise(mediana = median(x), .groups = "drop")}, .id = 'rep') resumen_boot <- reps_boot |> group_by(grupo) |> summarise(ymin = quantile(mediana, 0.025), ymax = quantile(mediana, 0.975), .groups = "drop") |> left_join(muestra_tab |> group_by(grupo) |> summarise(mediana = median(x))) g_2 <- ggplot(resumen_boot, aes(x = grupo, y = mediana, ymin = ymin, ymax = ymax)) + geom_linerange() + geom_point(colour = "red", size = 2) + ylim(c(0,14)) + labs(subtitle = "Intervalos de 95% \\n para la mediana") g_1 + g_2 Donde: En rojo está nuestro = puntual de la mediana de cada grupo (la mediana muestral), y Las segmentos muestran un intervalo de confianza del 95% para nuestra estimación de la mediana: esto quiere decir que los valores poblacionales tienen probabilidad aproximada de 95% de estar dentro del intervalo. Este análisis comunica correctamente que tenemos incertidumbre alta acerca de nuestras estimaciones (especialmente grupos b y c), y que no tenemos mucha evidencia de que el grupo b tenga una mediana poblacional considerablemente más alta que a o c. En muchos casos es más útil presentar la información de esta manera que usando alguna prueba de hipótesis. La idea del bootstrap Como explicamos, el problema que tenemos ahora es que normalmente sólo tenemos una muestra, así que no es posible calcular las distribuciones de muestreo como hicimos en la sección anterior y así evaluar qué tan preciso es nuestro estimador. Sin embargo, podemos hacer lo siguiente: Supongamos que tenemos una muestra \\(X_1,X_2,\\dots, X_n\\) independientes de alguna población desconocida y un estimador \\(T=t(X_1,\\dots, X_n)\\) Mundo poblacional Si tuviéramos la distribución poblacional, simulamos muestras iid para aproximar la distribución de muestreo de nuestro estimador, y así entender su variabilidad. Pero no tenemos la distribución poblacional. Sin embargo, podemos estimar la distribución poblacional con nuestros valores muestrales. Mundo bootstrap Si usamos la estimación del inciso 3, entonces usando el inciso 1 podríamos tomar muestras de nuestros datos muestrales, como si fueran de la población, y usando el mismo tamaño de muestra. El muestreo lo hacemos con reemplazo de manera que produzcamos muestras independientes de la misma “población estimada”, que es la muestra. Evaluamos nuestra estadística en cada una de estas remuestras, a estas les llamamos replicaciones bootstrap. A la distribución de las replicaciones le llamamos distribución bootstrap o distribución de remuestreo del estimador. Usamos la distribución bootstrap para estimar la variabilidad en nuestra estimación con la muestra original. Veamos que sucede para un ejemplo concreto, donde nos interesa estimar la media de los precios de venta de una población de casas. Tenemos nuestra muestra: set.seed(2112) poblacion_casas <- read_csv("data/casas.csv") muestra <- slice_sample(poblacion_casas, n = 200, replace = TRUE) mean(muestra$precio_miles) ## [1] 179.963 Esta muestra nos da nuestro estimador de la distribución poblacional: bind_rows(muestra |> mutate(tipo = "muestra"), poblacion_casas |> mutate(tipo = "población")) |> ggplot(aes(sample = precio_miles, colour = tipo, group = tipo)) + geom_qq(distribution = stats::qunif, alpha = 0.4, size = 1) + facet_wrap(~ tipo) O con histogramas: bind_rows(muestra |> mutate(tipo = "muestra"), poblacion_casas |> mutate(tipo = "población")) |> ggplot(aes(x = precio_miles, group = tipo)) + geom_histogram(aes(y=..density..), binwidth = 50) + facet_wrap(~ tipo) Y vemos que la aproximación es razonable en las partes centrales de la distribución. Ahora supongamos que nos interesa cuantificar la precisión de nuestra estimación de la media poblacional de precios de casas, y usaremos la media muestral para hacer esto. Para nuestra muestra, nuestra estimación puntual es: media <- mean(muestra$precio_miles) media ## [1] 179.963 Y recordamos que para aproximar la distribución de muestreo podíamos muestrear repetidamente la población y calcular el valor del estimador en cada una de estas muestras. Aquí no tenemos la población, pero tenemos una estimación de la población: la muestra obtenida. Así que para evaluar la variabilidad de nuestro estimador, entramos en el mundo bootstrap, y consideramos que la población es nuestra muestra. Podemos entonces extraer un número grande de muestras con reemplazo de tamaño 200 de la muestra: el muestreo debe ser análogo al que se tomó para nuestra muestra original. Evaluamos nuestra estadística (en este caso la media) en cada una de estas remuestras: media_muestras <- map_dbl(1:5000, ~ muestra |> slice_sample(n = 200, replace = TRUE) |> summarise(media_precio = mean(precio_miles), .groups = "drop") |> pull(media_precio)) Y nuestra estimación de la distribución de muestreo para la media es entonces: bootstrap <- tibble(media = media_muestras) g_cuantiles <- ggplot(bootstrap, aes(sample = media)) + geom_qq(distribution = stats::qunif) g_histograma <- ggplot(bootstrap, aes(x = media)) + geom_histogram(binwidth = 2) g_cuantiles + g_histograma A esta le llamamos la distribución bootstrap (o de remuestreo) de la media, que definimos más abajo. Ahora podemos calcular un intervalo de confianza del 90% simplemente calculando los cuantiles de esta distribución (no son los cuantiles de la muestra original!): limites_ic <- quantile(media_muestras, c(0.05, 0.95)) |> round() limites_ic ## 5% 95% ## 171 189 Presentaríamos nuestro resultado como sigue: nuestra estimación puntual de la mediana es 180, con un intervalo de confianza del 90% de (171, 189) Otra cosa que podríamos hacer para describir la dispersión de nuestro estimador es calcular el error estándar de remuestreo, que estima el error estándar de la distribución de muestreo: ee_boot <- sd(media_muestras) round(ee_boot, 2) ## [1] 5.39 Definición. Sea \\(X_1,X_2,\\ldots,X_n\\) una muestra independiente y idénticamente distribuida, y \\(T=t(X_1, X_2, \\ldots, X_n)\\) una estadística. Supongamos que sus valores que obervamos son \\(x_1, x_2,\\ldots, x_n\\). La distribución bootstrap, o distribución de remuestreo, de \\(T\\) es la distribución de \\(T^*=t(X_1^*, X_2^*, \\dots X_n^*)\\), donde cada \\(X_i^*\\) se obtiene tomando al azar uno de los valores de \\(x_1,x_2,\\ldots, x_n\\). Otra manera de decir esto es que la remuestra \\(X_1^*, X_2^*, \\ldots, X_n^*\\) es una muestra con reemplazo de los valores observados \\(x_1, x_2, \\ldots, x_n\\) Ejemplo. Si observamos la muestra muestra <- sample(1:20, 5) muestra ## [1] 6 10 7 3 14 Una remuestra se obtiene: sample(muestra, size = 5, replace = TRUE) ## [1] 7 3 7 10 6 Nótese que algunos valores de la muestra original pueden aparecer varias veces, y otros no aparecen del todo. La idea del bootstrap (no paramétrico). La muestra original es una aproximación de la población de donde fue extraída. Así que remuestrear la muestra aproxima lo que pasaría si tomáramos muestras de la población. La distribución de remuestreo de una estadística, que se construye tomando muchas remuestras, aproxima la distribución de muestreo de la estadística. Y el proceso que hacemos es: Remuestreo para una población. Dada una muestra de tamaño \\(n\\) de una población, Obtenemos una remuestra de tamaño \\(n\\) con reemplazo de la muestra original y calculamos la estadística de interés. Repetimos este remuestreo muchas veces (por ejemplo, 10,000). Construímos la distribución bootstrap, y examinamos sus características (dónde está centrada, dispersión y forma). El principio de plug-in La idea básica detrás del bootstrap es el principio de plug-in para estimar parámetros poblacionales: si queremos estimar una cantidad poblacional, calculamos esa cantidad poblacional con la muestra obtenida. Es un principio común en estadística. Por ejemplo, si queremos estimar la media o desviación estándar poblacional, usamos la media muestral o la desviación estándar muestral. Si queremos estimar un cuantil de la población usamos el cuantil correspondiente de la muestra, y así sucesivamente. En todos estos casos, lo que estamos haciendo es: Tenemos una fórmula para la cantidad poblacional de interés en términos de la distribución poblacional. Tenemos una muestra, la distribución que da esta muestra se llama distribución empírica (\\(\\hat{F}(x) = \\frac{1}{n}\\{\\#valores \\le x\\}\\)). Contruimos nuestro estimador, de la cantidad poblacional de interés, “enchufando” la distribución empírica de la muestra en la fórmula del estimador. En el bootstrap aplicamos este principio simple a la distribución de muestreo: Si tenemos la población, podemos calcular la distribución de muestreo de nuestro estimador tomando muchas muestras de la población. Estimamos la poblacion con la muestra y enchufamos en la frase anterior: estimamos la distribución de muestreo de nuestro estimador tomando muchas muestras de la muestra. Nótese que el proceso de muestreo en el último paso debe ser el mismo que se usó para tomar la muestra original. Estas dos imágenes simuladas con base en un ejemplo de Chihara and Hesterberg (2018) muestran lo que acabamos de describir: Figure 5.1: Mundo Real Figure 5.2: Mundo Bootstrap Observación 1. Veremos ejemplos más complejos, pero nótese que si la muestra original son observaciones independientes obtenidas de la distribución poblacional, entonces logramos esto en las remuestras tomando observaciones con reemplazo de la muestra. Igualmente, las remuestras deben ser del mismo tamaño que la muestra original. ¿Porqué no funcionaría tomar muestras sin reemplazo? Piensa si hay independencia entre las observaciones de la remuestra, y cómo serían las remuestras sin reemplazo. ¿Por qué no se puede hacer bootstrap si no conocemos cómo se obtuvo la muestra original? Observación 2. Estos argumentos se pueden escribir con fórmulas usando por ejemplo la función de distribución acumulada \\(F\\) de la población y su estimador, que es la función empírica \\(\\hat{F}\\). Si \\(\\theta = t(F)\\) es una cantidad poblacional que queremos estimar, su estimador plug-in es \\(\\hat{\\theta} = t(\\hat{F})\\). Observación 3: La distribución empírica \\(\\hat{F}\\) es un estimador “razonable” de la distribución poblacional \\(F,\\) pues por el teorema de Glivenko-Cantelli (ver Wasserman (2013), o aquí), \\(\\hat{F}\\) converge a \\(F\\) cuando el tamaño de muestra \\(n\\to\\infty\\), lo cual es intuitivamente claro. Ejemplo En el ejemplo de tomadores de té, podemos estimar la proporción de tomadores de té que prefiere el té negro usando nuestra muestra: te <- read_csv("data/tea.csv") |> rowid_to_column() |> select(rowid, Tea, sugar) te |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro), .groups = "drop") ## # A tibble: 1 × 2 ## prop_negro n ## <dbl> <int> ## 1 0.247 300 ¿Cómo evaluamos la precisión de este estimador? Supondremos que el estudio se hizo tomando una muestra aleatoria simple de tamaño 300 de la población de tomadores de té que nos interesa. Podemos entonces usar el bootstrap: # paso 1: define el estimador calc_estimador <- function(datos){ prop_negro <- datos |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro), .groups = "drop") |> pull(prop_negro) prop_negro } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador prop_negro_tbl <- tibble(prop_negro = map_dbl(1:10000, ~ calc_estimador(muestra_boot(datos = te)))) # paso 4: examina la distribución bootstrap prop_negro_tbl |> ggplot(aes(x = prop_negro)) + geom_histogram(bins = 15) + geom_vline(xintercept = calc_estimador(te), color = "red") Y podemos evaluar varios aspectos, por ejemplo dónde está centrada y qué tan dispersa es la distribución bootstrap: prop_negro_tbl |> summarise(media = mean(prop_negro), ee = sd(prop_negro), cuantil_75 = quantile(prop_negro, 0.75), cuantil_25 = quantile(prop_negro, 0.25), .groups = "drop") |> mutate(across(where(is.numeric), round, 3)) |> pivot_longer(cols = everything()) ## # A tibble: 4 × 2 ## name value ## <chr> <dbl> ## 1 media 0.247 ## 2 ee 0.025 ## 3 cuantil_75 0.263 ## 4 cuantil_25 0.23 –> –> Discusión: propiedades de la distribución bootstrap Uasremos la distribución bootstrap principalmente para evaluar la variabilidad de nuestros estimadores (y también otros aspectos como sesgo) estimando la dispersión de la distribución de muestreo. Sin embargo, es importante notar que no la usamos, por ejemplo, para saber dónde está centrada la distribución de muestreo, o para “mejorar” la estimación remuestreando. Ejemplo En este ejemplo, vemos 20 muestras de tamaño 200, y evaluamos cómo se ve la aproximación a la distribución de la población (rojo): Podemos calcular las distribuciones de remuestreo (bootstrap) para cada muestra, y compararlas con la distribución de muestreo real. # paso 1: define el estimador calc_estimador <- function(datos){ media_precio <- datos |> summarise(media = mean(precio_miles), .groups = "drop") |> pull(media) media_precio } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos, n = NULL){ #tomar muestra con reemplazo del mismo tamaño if(is.null(n)){ m <- slice_sample(datos, prop = 1, replace = TRUE)} else { m <- slice_sample(datos, n = n, replace = TRUE) } m } dist_boot <- datos_sim |> filter(tipo == "muestras") |> select(precio_miles, rep) |> group_by(rep) |> nest() |> mutate(precio_miles = map(data, function(data){ tibble(precio_miles = map_dbl(1:1000, ~ calc_estimador(muestra_boot(data)))) })) |> select(rep, precio_miles) |> unnest() dist_muestreo <- datos_sim |> filter(tipo == "población") |> group_by(rep) |> nest() |> mutate(precio_miles = map(data, function(data){ tibble(precio_miles = map_dbl(1:1000, ~ calc_estimador(muestra_boot(data, n = 200)))) })) |> select(rep, precio_miles) |> unnest() Obsérvese que: En algunos casos la aproximación es mejor que en otros (a veces la muestra tiene valores ligeramente más altos o más bajos). La dispersión de cada una de estas distribuciones bootstrap es similar a la de la verdadera distribución de muestreo (en rojo), pero puede está desplazada dependiendo de la muestra original que utilizamos. Adicionalmente, los valores centrales de la distribución de bootstrap tiende cubrir el verdadero valor que buscamos estimar, que es: poblacion_casas |> summarise(media = mean(precio_miles), .groups = "drop") ## # A tibble: 1 × 1 ## media ## <dbl> ## 1 183. Variación en distribuciones bootstrap En el proceso de estimación bootstrap hay dos fuentes de variación pues: La muestra original se selecciona con aleatoriedad de una población. Las muestras bootstrap se seleccionan con aleatoriedad de la muestra original. Esto es: La estimación bootstrap ideal es un resultado asintótico \\(B=\\infty\\), en esta caso \\(\\hat{\\textsf{se}}_B\\) iguala la estimación plug-in \\(se_{P_n}\\). En el proceso de bootstrap podemos controlar la variación del segundo aspecto, conocida como implementación de muestreo Monte Carlo, y la variación Monte Carlo decrece conforme incrementamos el número de muestras. Podemos eliminar la variación Monte Carlo si seleccionamos todas las posibles muestras con reemplazo de tamaño \\(n\\), hay \\({2n-1}\\choose{n}\\) posibles muestras y si seleccionamos todas obtenemos \\(\\hat{\\textsf{se}}_\\infty\\) (bootstrap ideal), sin embargo, en la mayor parte de los problemas no es factible proceder así. En la siguiente gráfica mostramos 6 posibles muestras de tamaño 50 simuladas de la población, para cada una de ellas se graficó la distribución empírica y se se realizan histogramas de la distribución bootstrap con \\(B=30\\) y \\(B=1000\\), en cada caso hacemos dos repeticiones, notemos que cuando el número de muestras bootstrap es grande las distribuciones bootstrap son muy similares (para una muestra de la población dada), esto es porque disminuimos el erro Monte Carlo. También vale la pena recalcar que la distribución bootstrap está centrada en el valor observado en la muestra (línea azúl punteada) y no en el valor poblacional sin embargo la forma de la distribución es similar a lo largo de las filas. Entonces, ¿cuántas muestras bootstrap? Incluso un número chico de replicaciones bootstrap, digamos \\(B=25\\) es informativo, y \\(B=50\\) con frecuencia es suficiente para dar una buena estimación de \\(se_P(\\hat{\\theta})\\) (Efron and Tibshirani (1993)). Cuando se busca estimar error estándar Chihara and Hesterberg (2018) recomienda \\(B=1000\\) muestras, o \\(B=10,000\\) muestras dependiendo la presición que se busque. Error estándar bootstrap e intervalos normales Ahora podemos construir nuestra primera versión de intervalos de confianza basados en la distribución bootstrap. Supongamos que queremos estimar una cantidad poblacional \\(\\theta\\) con una estadística \\(\\hat{\\theta} = t(X_1,\\ldots, X_n)\\), donde \\(X_1,\\ldots, X_n\\) es una muestra independiente e idénticamente distribuida de la población. Suponemos además que la distribución muestral de \\(\\hat{\\theta}\\) es aproximadamente normal (el teorema central del límite aplica), y está centrada en el verdadero valor poblacional \\(\\theta\\). Ahora queremos construir un intervalo que tenga probabilidad 95% de cubrir al valor poblacional \\(\\theta\\). Tenemos que \\[P(-2\\mathsf{ee}(\\hat{\\theta}) < \\hat{\\theta} - \\theta < 2\\mathsf{ee}(\\hat{\\theta})) \\approx 0.95\\] por las propiedades de la distribución normal (\\(P(-2\\sigma < X -\\mu < 2\\sigma)\\approx 0.95\\) si \\(X\\) es normal con media \\(\\mu\\) y desviación estándar \\(\\sigma\\)). Entonces \\[P(\\hat{\\theta} - 2\\mathsf{ee}(\\hat{\\theta}) < \\theta < \\hat{\\theta} + 2\\mathsf{ee}(\\hat{\\theta})) \\approx 0.95\\] Es decir, la probabilidad de que el verdadero valor poblacional \\(\\theta\\) esté en el intervalo \\[[\\hat{\\theta} - 2\\mathsf{ee}(\\hat{\\theta}), \\hat{\\theta} + 2\\mathsf{ee}(\\hat{\\theta})]\\] es cercano a 0.95. En este intervalo no conocemos el error estándar (es la desviación estándar de la distribución de muestreo de \\(\\hat{\\theta}\\)), y aquí es donde entre la distribución bootstrap, que aproxima la distribución de muestreo. Lo estimamos con \\[\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})\\] que es la desviación estándar de la distribución bootsrap. Definición. El error estándar bootstrap \\(\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})\\) se define como la desviación estándar de la distribución bootstrap de \\(\\theta\\). El intervalo de confianza normal bootstrap al 95% está dado por \\[[\\hat{\\theta} - 2\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta}), \\hat{\\theta} + 2\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})].\\] Nótese que hay varias cosas qué revisar aquí: que el teorema central del límite aplica y que la distribución de muestreo de nuestro estimador está centrado en el valor verdadero. Esto en algunos casos se puede demostrar usando la teoría, pero más abajo veremos comprobaciones empíricas. Ejemplo: tomadores de té negro Consideremos la estimación que hicimos de el procentaje de tomadores de té que toma té negro: # paso 1: define el estimador calc_estimador <- function(datos){ prop_negro <- datos |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro)) |> pull(prop_negro) prop_negro } prop_hat <- calc_estimador(te) prop_hat |> round(2) ## [1] 0.25 Podemos graficar su distribución bootstrap —la cual simulamos arriba—. g_hist <- ggplot(prop_negro_tbl, aes(x = prop_negro)) + geom_histogram(bins = 15) g_qq_normal <- ggplot(prop_negro_tbl, aes(sample = prop_negro)) + geom_qq() + geom_qq_line(colour = "red") g_hist + g_qq_normal Y notamos que la distribución bootstrap es aproximadamente normal. Adicionalmente, vemos que el sesgo tiene un valor estimado de: media_boot <- prop_negro_tbl |> pull(prop_negro) |> mean() media_boot - prop_hat ## [1] 0.0004393333 De esta forma, hemos verificado que: La distribución bootstrap es aproximadamente normal (ver gráfica de cuantiles normales); La distribución bootstrap es aproximadamente insesgada. Lo cual nos lleva a construir intervalos de confianza basados en la distribución normal. Estimamos el error estándar con la desviación estándar de la distribución bootstrap ee_boot <- prop_negro_tbl |> pull(prop_negro) |> sd() ee_boot ## [1] 0.02485138 y construimos un intervalo de confianza del 95%: intervalo_95 <- c(prop_hat - 2 * ee_boot, prop_hat + 2 * ee_boot) intervalo_95 |> round(2) ## [1] 0.2 0.3 Este intervalo tiene probabilidad del 95% de capturar al verdadero poblacional. Con alta probabilidad, entonces, el porcentaje de tomadores de té en la población está entre 0.2 y 0.3. Ejemplo: inventario de casas vendidas Ahora consideremos el problema de estimar el total del valor de las casas vendidas en un periodo. Tenemos una muestra de tamaño \\(n=150\\): # muestra original set.seed(121) muestra_casas <- slice_sample(poblacion_casas, n = 150) # paso 1: define el estimador calc_estimador_casas <- function(datos){ N <- nrow(poblacion_casas) n <- nrow(datos) total_muestra <- sum(datos$precio_miles) estimador_total <- (N / n) * total_muestra estimador_total } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador totales_boot <- tibble(total_boot = map_dbl(1:5000, ~ calc_estimador_casas(muestra_boot(muestra_casas)))) # paso 4: examina la distribución bootstrap g_hist <- totales_boot |> ggplot(aes(x = total_boot)) + geom_histogram() g_qq <- totales_boot |> ggplot(aes(sample = total_boot)) + geom_qq() + geom_qq_line(colour = "red") + geom_hline(yintercept = quantile(totales_boot$total_boot, 0.975), colour = "gray") + geom_hline(yintercept = quantile(totales_boot$total_boot, 0.025), colour = "gray") g_hist + g_qq En este caso, distribución de muestreo presenta cierta asimetría, pero la desviación no es grande. En la parte central la aproximación normal es razonable. Procedemos a revisar sesgo total_est <- calc_estimador_casas(muestra_casas) sesgo <- mean(totales_boot$total_boot) - total_est sesgo ## [1] 110.0851 Este número puede parecer grande, pero sí calculamos la desviación relativa con respecto al error estándar vemos que es chico en la escala de la distribución bootstrap: ee_boot <- sd(totales_boot$total_boot) sesgo_relativo <- sesgo / ee_boot sesgo_relativo ## [1] 0.01522088 De forma que procedemos a construir intervalos de confianza como sigue : c(total_est - 2*ee_boot, total_est + 2*ee_boot) ## [1] 203366.6 232296.6 Que está en miles de dólares. En millones de dólares, este intervalo es: intervalo_total <- c(total_est - 2*ee_boot, total_est + 2*ee_boot) / 1000 intervalo_total |> round(1) ## [1] 203.4 232.3 Así que con 95% de confianza el verdadero total del valor de las casas vendidas está entre 203 y 232 millones de dólares. Nota: en este ejemplo mostraremos una alternativa de intervalos de confianza que es más apropiado cuando observamos asimetría. Sin embargo, primero tendremos que hablar de dos conceptos clave con respecto a intervalos de confianza: calibración e interpretación. Calibración de intervalos de confianza ¿Cómo sabemos que nuestros intervalos de confianza del 95% nominal tienen cobertura real de 95%? Es decir, tenemos que checar: El procedimiento para construir intervalos debe dar intervalos tales que el valor poblacional está en el intervalo de confianza para 95% de las muestras. Como solo tenemos una muestra, la calibración depende de argumentos teóricos o estudios de simulación previos. Para nuestro ejemplo de casas tenemos la población, así que podemos checar qué cobertura real tienen los intervalos normales: simular_intervalos <- function(rep, size = 150){ muestra_casas <- slice_sample(poblacion_casas, n = size) N <- nrow(poblacion_casas) n <- nrow(muestra_casas) total_est <- (N / n) * sum(muestra_casas$precio_miles) # paso 1: define el estimador calc_estimador_casas <- function(datos){ total_muestra <- sum(datos$precio_miles) estimador_total <- (N / n) * total_muestra estimador_total } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador totales_boot <- map_dbl(1:2000, ~ calc_estimador_casas(muestra_boot(muestra_casas))) |> tibble(total_boot = .) |> summarise(ee_boot = sd(total_boot)) |> mutate(inf = total_est - 2*ee_boot, sup = total_est + 2*ee_boot) |> mutate(rep = rep) totales_boot } # Para recrear, correr: # sims_intervalos <- map(1:100, ~ simular_intervalos(rep = .x)) # write_rds(sims_intervalos, "cache/sims_intervalos.rds") # Para usar resultados en cache: sims_intervalos <- read_rds("cache/sims_intervalos.rds") total <- sum(poblacion_casas$precio_miles) sims_tbl <- sims_intervalos |> bind_rows() |> mutate(cubre = inf < total & total < sup) ggplot(sims_tbl, aes(x = rep)) + geom_hline(yintercept = total, colour = "red") + geom_linerange(aes(ymin = inf, ymax = sup, colour = cubre)) La cobertura para estos 100 intervalos simulados da total <- sum(poblacion_casas$precio_miles) sims_tbl |> summarise(cobertura = mean(cubre)) ## # A tibble: 1 × 1 ## cobertura ## <dbl> ## 1 0.96 que es consistente con una cobertura real del 95% (¿qué significa “consistente”? ¿Cómo puedes checarlo con el bootstrap?) Observación. En este caso teníamos la población real, y pudimos verificar la cobertura de nuestros intervalos. En general no la tenemos. Estos ejercicios de simulación se pueden hacer con poblaciones sintéticas que se generen con las características que creemos va a tener nuestra población (por ejemplo, sesgo, colas largas, etc.). En general, no importa qué tipo de estimadores o intervalos de confianza usemos, requerimos checar la calibración. Esto puede hacerse con ejercicios de simulación con poblaciones sintéticas y tanto los procedimientos de muestreo como los tamaños de muestra que nos interesa usar. Verificar la cobertura de nuestros intervalos de confianza por medio simulación está bien estudiado para algunos casos. Por ejemplo, cuando trabajamos con estimaciones para poblaciones teóricas. En general sabemos que los procedimientos funcionan bien en casos: con distribuciones simétricas que tengan colas no muy largas; estimación de proporciones donde no tratamos con casos raros o casos seguros (probabilidades cercanas a 0 o 1). Interpretación de intervalos de confianza Como hemos visto, “intervalo de confianza” (de 90% de confianza, por ejemplo) es un término frecuentista, que significa: Cada muestra produce un intervalo distinto. Para el 90% de las muestras posibles, el intervalo cubre al valor poblacional. La afirmación es sobre el intervalo y el mecanismo para construirlo. Así que con alta probabilidad, el intervalo contiene el valor poblacional. Intervalos más anchos nos dan más incertidumbre acerca de dónde está el verdadero valor poblacional (y al revés para intervalos más angostos). Existen también “intervalos de credibilidad” (de 90% de probabilidad, por ejemplo), que se interpetan de forma bayesiana: Con 90% de probabilidad (relativamente alta), creemos que el valor poblacional está dentro del intervalo de credibilidad. Esta última interpretación es más natural. Obsérvese que para hablar de intervalos de confianza frecuentista tenemos que decir: Este intervalo particular cubre o no al verdadero valor, pero nuestro procedimiento produce intervalos que contiene el verdadero valor para el 90% de las muestras. Esta es una interpretación relativamente débil, y muchos intervalos poco útiles pueden satisfacerla. La interpretación bayesiana es más natural porque expresa más claramente incertidumbre acerca del valor poblacional. Por otro lado, La interpretación frecuentista nos da maneras empíricas de probar si los intervalos de confianza están bien calibrados o no: es un mínimo que “intervalos del 90%” deberían satisfacer. Así que tomamos el punto de vista bayesiano en la intepretación, pero buscamos que nuestros intervalos cumplan o aproximen bien garantías frecuentistas (discutimos esto más adelante). Los intervalos que producimos en esta sección pueden interpretarse de las dos maneras. Sesgo Notemos que hemos revisado el sesgo en varias ocasiones, esto es porque algunos estimadores comunes (por ejemplo, cociente de dos cantidades aleatorias) pueden sufrir de sesgo grande, especialmente en el caso de muestras chicas. Esto a su vez afecta la cobertura, pues es posible que nuestros intervalos no tengan “cobertura simétrica”, por ejemplo. Para muchos estimadores, y muestras no muy chicas, esté sesgo tiende a ser poco importante y no es necesario hacer correcciones. Si el tamaño del sesgo es grande comparado con la dispersión de la distribución bootstrap generalmente consideramos que bajo el diseño actual el estimador que estamos usando no es apropiado, y podemos proponer otro estimador u otro procedimiento para construir intervalos (ver Efron and Tibshirani (1993) intervalos BC_{a}), Efron and Tibshirani (1993) sugieren más de 20% de la desviación estándar, mientras que en Chihara and Hesterberg (2018) se sugiere 2% de la desviación estándar. Dependiendo que tan crítico es que los intervalos estén bien calibrados podemos evaluar nuestro problema particular. Intervalos bootstrap de percentiles Retomemos nuestro ejemplo del valor total del precio de las casas. A través de remuestras bootstrap hemos verificado gráficamente que la distribución de remuestreo es ligeramente asimétrica (ver la figura de abajo). Anteriormente hemos calculado intervalos de confianza basados en supuestos normales por medio del error éstandar. Este intervalo está dado por ## [1] 203.4 232.3 y por construcción sabemos que es simétrico con respecto al valor estimado, pero como podemos ver la distribución de muestreo no es simétrica, lo cual podemos confirmar por ejemplo calculando el porcentaje de muestras bootstrap que caen por arriba y por debajo del intervalo construido: ## # A tibble: 1 × 2 ## prop_inf prop_sup ## <dbl> <dbl> ## 1 0.0192 0.026 los cuales se han calculado como el porcentaje de medias bootstrap por debajo (arriba) de la cota inferior (superior), y vemos que no coinciden con el nivel de confianza prestablecido (2.5% para cada extremo). Otra opción común que se usa específicamente cuando la distribución bootstrap no es muy cercana a la normal son los intervalos de percentiles bootstrap: Definición. El intervalo de percentiles bootstrap al 95% de confianza está dado por \\[[q_{0.025}, q_{0.975}]\\] donde \\(q_f\\) es el percentil \\(f\\) de la distribución bootstrap. Otros intervalos comunes son el de 80% o 90% de confianza, por ejemplo, que corresponden a \\([q_{0.10}, q_{0.90}]\\) y \\([q_{0.05}, q_{0.95}]\\). Ojo: intervalos de confianza muy alta (por ejemplo 99.5%) pueden tener mala calibración o ser muy variables en su longitud pues dependen del comportamiento en las colas de la distribución. Para el ejemplo de las casas, calcularíamos simplemente intervalo_95 <- totales_boot |> pull(total_boot) |> quantile(probs = c(0.025, 0.975)) / 1000 (intervalo_95) |> round(1) ## 2.5% 97.5% ## 204.3 232.5 que está en millones de dólares. Nótese que es similar al intervalo de error estándar. Otro punto interesante sobre los intervalos bootstrap de percentiles es que lidian naturalmente con la asímetría de la distribución bootstrap. Ilustramos esto con la distancia de las extremos del intervalo con respecto a la media: abs(intervalo_95 - total_est/1000) ## 2.5% 97.5% ## 13.53912 14.64674 Los intervalos de confianza nos permiten presentar un rango de valores posibles para el parámetro de interés. Esto es una notable diferencia con respecto a presentar sólo un candidato como estimador. Nuestra fuente de información son los datos. Es por esto que si vemos valores muy chicos (grandes) en nuestra muestra, el intervalo se tiene que extender a la izquierda (derecha) para compensar dichas observaciones. Explica por qué cuando la aproximación normal es apropiada, el intervalo de percentiles al 95% es muy similar al intervalo normal de 2 errores estándar. Ejemplo Consideramos los datos de propinas. Queremos estimar la media de cuentas totales para la comida y la cena. Podemos hacer bootstrap de cada grupo por separado: # en este ejemplo usamos rsample, pero puedes # escribir tu propio código library(rsample) propinas <- read_csv("data/propinas.csv") estimador <- function(split, ...){ muestra <- analysis(split) |> group_by(momento) muestra |> summarise(estimate = mean(cuenta_total), .groups = 'drop') |> mutate(term = momento) } intervalo_propinas_90 <- bootstraps(propinas, strata = momento, 1000) |> mutate(res_boot = map(splits, estimador)) |> int_pctl(res_boot, alpha = 0.10) |> mutate(across(where(is.numeric), round, 2)) intervalo_propinas_90 ## # A tibble: 2 × 6 ## term .lower .estimate .upper .alpha .method ## <chr> <dbl> <dbl> <dbl> <dbl> <chr> ## 1 Cena 19.8 20.8 22.0 0.1 percentile ## 2 Comida 15.6 17.1 18.8 0.1 percentile Nota: .estimate es la media de los valores de la estadística sobre las remuestras, no es el estimador original. De la tabla anterior inferimos que la media en la cuenta en la cena es más grande que la de la comida. Podemos graficar agregando los estimadores plugin: estimadores <- propinas |> group_by(momento) |> rename(term = momento) |> summarise(media = mean(cuenta_total)) ggplot(intervalo_propinas_90, aes(x = term)) + geom_linerange(aes(ymin = .lower, ymax = .upper)) + geom_point(data = estimadores, aes(y = media), colour = "red", size = 3) + xlab("Momento") + ylab("Media de cuenta total (dólares)") + labs(subtitle = "Intervalos de 90% para la media") Nótese que el bootstrap lo hicimos por separado en cada momento del día (por eso el argumento strata en la llamada a bootstraps): Justifica el procedimiento de hacer el bootstrap separado para cada grupo. ¿Qué supuestos acerca del muestreo se deben satisfacer? ¿Deben ser muestras aleatorias simples de cada momento del día, por ejemplo? ¿Qué harías si no fuera así, por ejemplo, si se escogieron al azar tickets de todos los disponibles en un periodo? Bootstrap para dos muestras En el ejemplo anterior consideramos cómo hacer bootstrap cuando tenemos muestras independientes. También podemos aplicarlo a estimadores que comparen directamente las dos muestras: Bootstrap para comparar poblaciones. Dadas muestras independientes de tamaños \\(m\\) y \\(n\\) de dos poblaciones: Extraer una remuestra de tamaño \\(m\\) con reemplazo de la primera muestra y una remuestra separada de tamaño \\(n\\) de la segunda muestra. Calcula la estadística que compara los dos grupos (por ejemplo, diferencia de medias) Repetir este proceso muchas veces (por ejemplo, 1000 - 10000). Construir la distribución bootstrap de la estadística. Examinar dispersión, sesgo y forma. Ejemplo Supongamos que queremos comparar directamente la media de la cuenta total en comida y cena. Podemos hacer: estimador_dif <- function(split, ...){ muestra <- analysis(split) |> group_by(momento) muestra |> summarise(estimate = mean(cuenta_total), .groups = "drop") |> pivot_wider(names_from = momento, values_from = estimate) |> mutate(estimate = Cena - Comida, term = "diferencia") } dist_boot <- bootstraps(propinas, strata = momento, 2000) |> mutate(res_boot = map(splits, estimador_dif)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) + xlab("Diferencia Comida vs Cena") g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 Y podemos calcular un intervalo de confianza para la diferencia de medias: dist_boot |> int_pctl(res_boot, alpha = 0.01) |> mutate(across(where(is.numeric), round, 2)) |> select(term, .lower, .upper) ## # A tibble: 1 × 3 ## term .lower .upper ## <chr> <dbl> <dbl> ## 1 diferencia 0.73 6.54 Que nos indica que con alta probabilidad las cuentas son más altas que en la cena que en la comida. La diferencia puede ir de un poco menos de un dólar hasta seis dólares con 99% de confianza. Datos pareados En otros casos, las muestras no son independientes y están pareadas. Por ejemplo, este es un estudio dende a 10 personas una noche se les dio una medicina para dormir y otra noche otra medicina. Se registraron cuántas horas de sueño extra comparados con un día donde no tomaron medicina. dormir <- sleep |> pivot_wider(names_from = group, names_prefix = "medicina_", values_from = extra) dormir ## # A tibble: 10 × 3 ## ID medicina_1 medicina_2 ## <fct> <dbl> <dbl> ## 1 1 0.7 1.9 ## 2 2 -1.6 0.8 ## 3 3 -0.2 1.1 ## 4 4 -1.2 0.1 ## 5 5 -0.1 -0.1 ## 6 6 3.4 4.4 ## 7 7 3.7 5.5 ## 8 8 0.8 1.6 ## 9 9 0 4.6 ## 10 10 2 3.4 En este caso, el bootstrap se hace sobre individuos, y quisiéramos comparar la medición de la medicina_1 con la medicina_2. Usaremos la media de al diferencia entre horas de sueño entre las dos medicinas. Nuestro estimador puntual es: estimador_dif <- dormir |> mutate(dif_2_menos_1 = medicina_2 - medicina_1) |> summarise(dif_media = mean(dif_2_menos_1)) estimador_dif ## # A tibble: 1 × 1 ## dif_media ## <dbl> ## 1 1.58 Esto indica que en promedio duermen hora y media más con la medicina 2 que con la medicina 1. Como hay variabilildad considerable en el número de horas extra de cada medicina dependiendo del individuo, es necesario hacer una intervalo de confianza para descartar que esta diferencia haya aparecido por azar debido a la variación muestral. Nótese que aquí no tenemos estratos, pues solo hay una muestra de individuo con dos mediciones. estimador_dif <- function(split, ...){ muestra <- analysis(split) muestra |> mutate(dif_2_menos_1 = medicina_2 - medicina_1) |> summarise(estimate = mean(dif_2_menos_1), .groups = "drop") |> mutate(term = "diferencia 2 vs 1") } dist_boot <- bootstraps(dormir, 2000) |> mutate(res_boot = map(splits, estimador_dif)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 Nuestro intervalo de percentiles al 90% es de dist_boot |> int_pctl(res_boot, 0.10) ## # A tibble: 1 × 6 ## term .lower .estimate .upper .alpha .method ## <chr> <dbl> <dbl> <dbl> <dbl> <chr> ## 1 diferencia 2 vs 1 1.04 1.57 2.22 0.1 percentile Lo que indica con alta probabilidad que la medicina 2 da entre 1 y 2 horas extras de sueño. Nota que en este ejemplo también podríamos hacer una prueba de hipótesis por permutaciones, suponiendo como hipótesis nula que las dos medicinas son equivalentes. Sin embargo, usualmente es más informativo presentar este tipo de intervalos para estimar la diferencia. Bootstrap y otras estadísticas El bootstrap es una técnica versátil. Un ejemplo son estimadores de razón, que tienen la forma \\[ \\hat{r} = \\frac{\\overline y}{\\overline x}\\] Por ejemplo, ¿cómo haríamos estimación para el procentaje de área area habitable de las casas en relación al tamaño del lote? Una manera de estimar esta cantidad es dividiendo la suma del área habitable de nuestra muestra y dividirlo entre la suma del área de los lotes de nuestra muestra, como en la fórmula anterior. Esta fórmula es más difícil pues tanto numerador como denominador tienen variabilidad, y estas dos cantidades no varían independientemente. Con el bootstrap podemos atacar estos problemas Ejemplo: estimadores de razón Nuestra muestra original es: set.seed(250) casas_muestra <- slice_sample(poblacion_casas, n = 200) El estimador de interés es: estimador_razon <- function(split, ...){ muestra <- analysis(split) muestra |> summarise(estimate = sum(area_habitable_sup_m2) / sum(area_lote_m2), .groups = "drop") |> mutate(term = "% area del lote construida") } Y nuestra estimación puntual es estimacion <- muestra_casas |> summarise(estimate = sum(area_habitable_sup_m2) / sum(area_lote_m2)) estimacion ## # A tibble: 1 × 1 ## estimate ## <dbl> ## 1 0.148 Es decir que en promedio, un poco más de 15% del lote total es ocupado por área habitable. Ahora hacemos bootstrap para construir un intervalo: dist_boot <- bootstraps(casas_muestra, 2000) |> mutate(res_boot = map(splits, estimador_razon)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 En este caso la cola derecha parece tener menos dispersión que una distribución normal. Usamos un intervalo de percentiles para obtener: dist_boot |> int_pctl(res_boot) |> mutate(estimador = estimacion$estimate) |> rename(media_boot = .estimate) |> mutate(bias = media_boot - estimador) |> pivot_longer(is_double) |> mutate(value = round(value, 3)) ## # A tibble: 6 × 4 ## term .method name value ## <chr> <chr> <chr> <dbl> ## 1 % area del lote construida percentile .lower 0.121 ## 2 % area del lote construida percentile media_boot 0.142 ## 3 % area del lote construida percentile .upper 0.159 ## 4 % area del lote construida percentile .alpha 0.05 ## 5 % area del lote construida percentile estimador 0.148 ## 6 % area del lote construida percentile bias -0.006 De modo que en esta zona, entre 12% y 16% de toda el área disponible es ocupada por área habitable: estas son casas que tienen jardines o terrenos, garage relativamente grandes. Ejemplo: suavizadores Podemos usar el bootstrap para juzgar la variabilidad de un suavizador, que consideramos como nuestra estadística: graf_casas <- function(data){ ggplot(data |> filter(calidad_gral < 7), aes(x = area_habitable_sup_m2)) + geom_point(aes(y = precio_m2_miles), alpha = 0.75) + geom_smooth(aes(y = precio_m2_miles), method = "loess", span = 0.7, se = FALSE, method.args = list(degree = 1, family = "symmetric")) } graf_casas(casas_muestra) Podemos hacer bootstrap para juzgar la estabilidad del suavizador: suaviza_boot <- function(x, data){ # remuestreo muestra_boot <- slice_sample(data, prop = 1, replace = T) ajuste <- loess(precio_m2_miles ~ area_habitable_sup_m2, data = muestra_boot, degree = 1, span = 0.7, family = "symmetric") datos_grafica <- tibble(area_habitable_sup_m2 = seq(25, 250, 5)) ajustados <- predict(ajuste, newdata = datos_grafica) datos_grafica |> mutate(ajustados = ajustados) |> mutate(rep = x) } reps <- map(1:10, ~ suaviza_boot(.x, casas_muestra |> filter(calidad_gral < 7))) |> bind_rows() # ojo: la rutina loess no tienen soporte para extrapolación graf_casas(casas_muestra) + geom_line(data = reps, aes(y = ajustados, group = rep), alpha = 1, colour = "red") Donde vemos que algunas cambios de pendiente del suavizador original no son muy interpretables (por ejemplo, para áreas chicas) y alta variabilidad en general en los extremos. Podemos hacer más iteraciones para calcular bandas de confianza: reps <- map(1:200, ~ suaviza_boot(.x, casas_muestra |> filter(calidad_gral < 7))) |> bind_rows() # ojo: la rutina loess no tienen soporte para extrapolación graf_casas(casas_muestra) + geom_line(data = reps, aes(y = ajustados, group = rep), alpha = 0.2, colour = "red") Donde observamos cómo tenemos incertidumbre en cuanto al nivel y forma de las curvas en los extremos de los datos (casas grandes y chicas), lo cual es natural. Aunque podemos resumir para hacer bandas de confianza, mostrar remuestras de esta manera es informativo: por ejempo: vemos cómo es probable también que para casas de menos de 70 metros cuadrados el precio por metro cuadrado no cambia tanto (líneas constantes) Bootstrap y estimadores complejos: tablas de perfiles Podemos regresar al ejemplo de la primera sesión donde calculamos perfiles de los tomadores de distintos tés: en bolsa, suelto, o combinados. Caundo hacemos estos tipos de análisis no es raro que los prefiles tengan variabilidad considerable que es necesario cuantificar. price tea bag tea bag+unpackaged unpackaged promedio p_upscale -0.71 -0.28 0.98 28 p_variable -0.12 0.44 -0.31 36 p_cheap 0.3 -0.53 0.23 2 p_branded 0.62 -0.16 -0.45 25 p_private label 0.72 -0.22 -0.49 5 p_unknown 1.58 -0.58 -1 3 Hacemos bootstrap sobre toda la muestra, y repetimos exactamente el mismo proceso de construción de perfiles: boot_perfiles <- map(1:1000, function(x){ te_boot <- te |> slice_sample(prop = 1, replace = TRUE) calcular_perfiles(te_boot) |> mutate(rep = x) }) |> bind_rows() Ahora resumimos y graficamos, esta vez de manera distinta: resumen_perfiles <- boot_perfiles |> group_by(how, price) |> summarise(perfil_media = mean(perfil), ymax = quantile(perfil, 0.9), ymin = quantile(perfil, 0.10)) resumen_bolsa <- resumen_perfiles |> ungroup() |> filter(how == "tea bag") |> select(price, perfil_bolsa = perfil_media) resumen_perfiles <- resumen_perfiles |> left_join(resumen_bolsa) |> ungroup() |> mutate(price = fct_reorder(price, perfil_bolsa)) ggplot(resumen_perfiles, aes(x = price, y = perfil_media, ymax = ymax, ymin = ymin)) + geom_point(colour = "red") + geom_linerange() + facet_wrap(~how) + coord_flip() + geom_hline(yintercept = 0, colour = "gray") + ylab("Perfil") + xlab("Precio") Nótese una deficiencia clara del bootstrap: para los que compran té suelto, en la muestra no existen personas que desconocen de dónde provienen su té (No sabe/No contestó). Esto produce un intervalo colapsado en 0 que no es razonable. Podemos remediar esto de varias maneras: quitando del análisis los que no sabe o no contestaron, agrupando en otra categoría, usando un modelo, o regularizar usando proporciones calculadas con conteos modificados: por ejemplo, agregando un caso de cada combinación (agregaría 18 personas “falsas” a una muestra de 290 personas). Bootstrap y muestras complejas La necesidad de estimaciones confiables junto con el uso eficiente de recursos conllevan a diseños de muestras complejas. Estos diseños típicamente usan las siguientes técnicas: muestreo sin reemplazo de una población finita, muestreo sistemático, estratificación, conglomerados, ajustes a no-respuesta, postestratificación. Como consecuencia, los valores de la muestra suelen no ser independientes y los análisis de los mismos dependerá del diseño de la muestra. Comenzaremos con definiciones para entender el problema. set.seed(3872999) n_escuelas <- 5000 tipo <- sample(c("rural", "urbano", "indigena"), n_escuelas, replace = TRUE, prob = c(0.3, 0.5, 0.2)) escuela <- tibble(ind_escuela = 1:n_escuelas, tipo, media_tipo = case_when(tipo == "urbano" ~ 550, tipo == "rural" ~ 400, TRUE ~ 350), media_escuela = rnorm(n_escuelas, media_tipo, 30), n_estudiantes = round(rnorm(n_escuelas, 30, 4))) estudiantes <- uncount(escuela, n_estudiantes, .id = "id_estudiante") %>% rowwise() %>% mutate(calif = rnorm(1, media_escuela, 70)) %>% ungroup() Imaginemos que tenemos una población de 5000 escuelas, y queremos estimar la media de las calificaciones de los estudiantes en una prueba. head(estudiantes) ## # A tibble: 6 × 6 ## ind_escuela tipo media_tipo media_escuela id_estudiante calif ## <int> <chr> <dbl> <dbl> <int> <dbl> ## 1 1 urbano 550 561. 1 488. ## 2 1 urbano 550 561. 2 574. ## 3 1 urbano 550 561. 3 456. ## 4 1 urbano 550 561. 4 507. ## 5 1 urbano 550 561. 5 598. ## 6 1 urbano 550 561. 6 527. La primera idea sería tomar una muestra aleatoria (MAS, muestreo aleatorio simple), donde todos los estudiantes tienen igual probabilidad de ser seleccionados. Con estas condiciones el presupuesto alcanza para seleccionar a 60 estudiantes, hacemos esto y calculamos la media. muestra <- slice_sample(estudiantes, n = 60) round(mean(muestra$calif), 2) ## [1] 466.73 Este número es muy cercano a la media verdadera de la población: 466.51, pero esta es una de muchas posibles muestras. medias_mas <- rerun(1000, mean(sample(estudiantes$calif, 60))) %>% flatten_dbl() sd(medias_mas) ## [1] 14.75242 hist_mas <- ggplot(tibble(medias_mas), aes(x = medias_mas)) + geom_histogram(binwidth = 10) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_mas <- ggplot(tibble(medias_mas), aes(sample = medias_mas)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_mas + qq_mas Algunas de las muestras generan valores alejados de la verdadera media, para minimizar la probabilidad de seleccionar muestras que lleven a estimaciones alejadas del verdadero valor poblacional podríamos tomar muestras más grandes. Pero usualmente los costos limitan el tamaño de muestra. Una alternativa es estratificar, supongamos que sabemos el tipo de cada escuela (urbana, rural o indígena) y sabemos también que la calificación de los estudiantes de escuelas urbanas tiende a ser distinta a las calificaciones que los estudiantes de escuelas rurales o indígenas. En esta caso un diseño más eficiente consiste en tomar muestras independientes dentro de cada estrato. muestra_estrat <- estudiantes %>% group_by(tipo) %>% sample_frac(0.0004) dim(muestra_estrat) ## [1] 60 6 muestrea_estrat <- function(){ muestra <- estudiantes %>% group_by(tipo) %>% sample_frac(0.0004) mean(muestra$calif) } medias_estrat <- rerun(1000, muestrea_estrat()) %>% flatten_dbl() Notamos que la distribución muestral está más concentrada que el caso de MAS, el error estándar se reduce de 14.75 a 10.2 hist_estrat <- ggplot(tibble(medias_estrat), aes(x = medias_estrat)) + geom_histogram(binwidth = 6) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_estrat <- ggplot(tibble(medias_estrat), aes(sample = medias_estrat)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_estrat + qq_estrat Entonces, la estratificación nos sirve para reducir el error estándar de las estimaciones. Otro procedimiento común en muestreo es introducir conglomerados, a diferencia del muestreo estratificado, el propósito principal de los conglomerados es reducir costos. Veamos cuantas escuelas tendría que visitar en una muestra dada (con diseño estratificado). n_distinct(muestra_estrat$ind_escuela) ## [1] 60 Es fácil ver que visitar una escuela para aplicar solo uno o dos exámenes no es muy eficiente en cuestión de costos. Es por ello que se suelen tomar muestras considerando conglomerados naturales, en este caso la escuela. En nuestro ejemplo es razonable suponer que una parte grande del costo del muestreo sea mandar al examinador a la escuela, y que una vez en la escuela el costo de evaluar a todo sexto, en lugar de a un único alumno, es relativamente bajo. Podemos imaginar que considerando estos costos por visita de escuela nos alcance para visitar 40 escuelas y en cada una examinar a todos los estudiantes. muestra_escuelas <- escuela %>% group_by(tipo) %>% sample_frac(size = 0.008) muestra_cgl <- muestra_escuelas %>% left_join(estudiantes) mean(muestra_cgl$calif) ## [1] 462.5677 muestrea_cgl <- function(){ muestra_escuelas <- escuela %>% group_by(tipo) %>% sample_frac(size = 0.008) muestra_cgl <- muestra_escuelas %>% left_join(estudiantes, by = c("ind_escuela", "tipo")) mean(muestra_cgl$calif) } medias_cgl <- rerun(1000, muestrea_cgl()) %>% flatten_dbl() En este caso, el número de estudiantes examinados es mucho mayor que en MAS y muestreo estratificado, notemos que el número de estudiantes evaluados cambiará de muestra a muestra dependiendo del número de alumnos en las escuelas seleccionadas. sd(medias_cgl) ## [1] 5.337327 hist_cgl <- ggplot(tibble(medias_cgl), aes(x = medias_cgl)) + geom_histogram(binwidth = 6) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_cgl <- ggplot(tibble(medias_cgl), aes(sample = medias_cgl)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_cgl + qq_cgl Ejemplo: ENIGH La complejidad de los diseños de encuestas conlleva a que el cálculo de errores estándar sea muy complicado, para atacar este problema hay dos técnicas básicas: 1) un enfoque analítico usando linearización, 2) métodos de remuestreo como bootstrap. El incremento en el poder de cómputo ha favorecido los métodos de remuestreo pues la linearización requiere del desarrollo de una fórmula para cada estimación y supuestos adicionales para simplificar. En 1988 Rao and Wu (1988) propusieron un método de bootstrap para diseños estratificados multietápicos con reemplazo de UPMs (Unidades Primarias de Muestreo) que describimos a continuación. ENIGH. Usaremos como ejemplo la Encuesta Nacional de Ingresos y Gastos de los Hogares, ENIGH 2018 (INEGI 2018), esta encuesta usa un diseño de conglomerados estratificado. Antes de proceder a bootstrap debemos entender como se seleccionaron los datos, esto es, el diseño de la muestra: Unidad primaria de muestreo (UPM). Las UPMs están constituidas por agrupaciones de viviendas. Se les denomina unidades primarias pues corresponden a la primera etapa de selección, las unidades secundarias (USMs) serían los hogares. Estratificación. Los estratos se construyen en base a estado, ámbito (urbano, complemento urbano, rural), características sociodemográficas de los habitantes de las viviendas, características físicas y equipamiento. El proceso de estratificación resulta en 888 subestratos en todo el ámbito nacional. La selección de la muestra es independiente para cada estrato, y una vez que se obtiene la muestra se calculan los factores de expansión que reflejan las distintas probabilidades de selección. Después se llevan a cabo ajustes por no respuesta y por proyección (calibración), esta última busca que distintos dominios de la muestra coincidan con la proyección de población de INEGI. concentrado_hogar <- read_csv(here::here("data", "conjunto_de_datos_enigh_2018_ns_csv", "conjunto_de_datos_concentradohogar_enigh_2018_ns", "conjunto_de_datos", "conjunto_de_datos_concentradohogar_enigh_2018_ns.csv")) # seleccionar variable de ingreso corriente hogar <- concentrado_hogar %>% mutate( upm = as.integer(upm), edo = str_sub(ubica_geo, 1, 2) ) %>% select(folioviv, foliohog, est_dis, upm, factor, ing_cor, edad_jefe, edo) %>% group_by(est_dis) %>% mutate(n = n_distinct(upm)) %>% # número de upms por estrato ungroup() hogar ## # A tibble: 74,647 × 9 ## folioviv foliohog est_dis upm factor ing_cor edad_jefe edo n ## <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr> <int> ## 1 100013601 1 2 1 175 76404. 74 10 106 ## 2 100013602 1 2 1 175 42988. 48 10 106 ## 3 100013603 1 2 1 175 580698. 39 10 106 ## 4 100013604 1 2 1 175 46253. 70 10 106 ## 5 100013606 1 2 1 175 53837. 51 10 106 ## 6 100026701 1 2 2 189 237743. 41 10 106 ## 7 100026703 1 2 2 189 32607. 57 10 106 ## 8 100026704 1 2 2 189 169918. 53 10 106 ## 9 100026706 1 2 2 189 17311. 30 10 106 ## 10 100027201 1 2 3 186 120488. 69 10 106 ## # ℹ 74,637 more rows Para el cálculo de estadísticos debemos usar los factores de expansión, por ejemplo el ingreso trimestral total sería: sum(hogar$factor * hogar$ing_cor / 1000) ## [1] 1723700566 y ingreso trimestral medio (miles pesos) sum(hogar$factor * hogar$ing_cor / 1000) / sum(hogar$factor) ## [1] 49.61029 La estimación del error estándar, por otro lado, no es sencilla y requiere usar aproximaciones, en la metodología de INEGI proponen una aproximación con series de Taylor. Figure 5.3: Extracto de estimación de errores de muestreo, ENIGH 2018. Veamos ahora como calcular el error estándar siguiendo el bootstrap de Rao y Wu: En cada estrato se seleccionan con reemplazo \\(m_h\\) UPMs de las \\(n_h\\) de la muestra original. Denotamos por \\(m_{hi}^*\\) el número de veces que se seleccionó la UPM \\(i\\) en el estrato \\(h\\) (de tal manera que \\(\\sum m_{hi}^*=m_h\\)). Creamos una replicación del ponderador correspondiente a la \\(k\\)-ésima unidad (USM) como: \\[d_k^*=d_k \\bigg[\\bigg(1-\\sqrt{\\frac{m_h}{n_h - 1}}\\bigg) + \\bigg(\\sqrt{\\frac{m_h}{n_h - 1}}\\frac{n_h}{m_h}m_{h}^*\\bigg)\\bigg]\\] donde \\(d_k\\) es el inverso de la probabilidad de selección. Si \\(m_h <(n_h -1)\\) todos los pesos definidos de esta manera serán no negativos. Calculamos el peso final \\(w_k^*\\) aplicando a \\(d_k^*\\) los mismos ajustes que se hicieron a los ponderadores originales. Calculamos el estadístico de interés \\(\\hat{\\theta}\\) usando los ponderadores \\(w_k^*\\) en lugar de los originales \\(w_k\\). Repetimos los pasos 1 y 2 \\(B\\) veces para obtener \\(\\hat{\\theta}^{*1},\\hat{\\theta}^{*2},...,\\hat{\\theta}^{*B}\\). Calculamos el error estándar como: \\[\\hat{\\textsf{se}}_B = \\bigg\\{\\frac{\\sum_{b=1}^B[\\hat{\\theta}^*(b)-\\hat{\\theta}^*(\\cdot)]^2 }{B}\\bigg\\}^{1/2}\\] En principio podemos elegir cualquier valor de \\(m_h \\geq 1\\), el más común es elegir \\(m_h=n_h-1\\), en este caso: \\[d_k^*=d_k \\frac{n_h}{n_h-1}m_{hi}^*\\] en este escenario las unidades que no se incluyen en la muestra tienen un valor de cero como ponderador. Si elegimos \\(n_h \\ne n_h-1\\) las unidades que no están en la muestra tienen ponderador distinto a cero, si \\(m_h=n_h\\) el ponderador podría tomar valores negativos. Implementemos el bootstrap de Rao y Wu a la ENIGH, usaremos \\(m_h=n_h-1\\) # creamos una tabla con los estratos y upms est_upm <- hogar %>% distinct(est_dis, upm, n) %>% arrange(est_dis, upm) hogar_factor <- est_upm %>% group_by(est_dis) %>% # dentro de cada estrato tomamos muestra (n_h-1) sample_n(size = first(n) - 1, replace = TRUE) %>% add_count(est_dis, upm, name = "m_hi") %>% # calculamos m_hi* left_join(hogar, by = c("est_dis", "upm", "n")) |> mutate(factor_b = factor * m_hi * n / (n - 1)) # unimos los pasos anteriores en una función para replicar en cada muestra bootstrap svy_boot <- function(est_upm, hogar){ m_hi <- est_upm %>% group_split(est_dis) %>% map(~sample(.$upm, size = first(.$n) - 1, replace = TRUE)) %>% flatten_int() %>% plyr::count() %>% select(upm = x, m_h = freq) m_hi %>% left_join(hogar, by = c("upm")) %>% mutate(factor_b = factor * m_h * n / (n - 1)) } set.seed(1038984) boot_rep <- rerun(500, svy_boot(est_upm, hogar)) # Aplicación a ingreso medio wtd_mean <- function(w, x, na.rm = FALSE) { sum(w * x, na.rm = na.rm) / sum(w, na.rm = na.rm) } # La media es: hogar %>% summarise(media = wtd_mean(factor, ing_cor)) ## # A tibble: 1 × 1 ## media ## <dbl> ## 1 49610. Y el error estándar: map_dbl(boot_rep, ~wtd_mean(w = .$factor_b, x = .$ing_cor)) %>% quantile(c(0.025, 0.975)) ## 2.5% 97.5% ## 48742.12 50519.02 El método bootstrap está implementado en el paquete survey y más recientemente en srvyr que es una versión tidy que utiliza las funciones en survey. Podemos comparar nuestros resultados con la implementación en survey. # 1. Definimos el diseño de la encuesta library(survey) library(srvyr) enigh_design <- hogar %>% as_survey_design(ids = upm, weights = factor, strata = est_dis) # 2. Elegimos bootstrap como el método para el cálculo de errores estándar set.seed(7398731) enigh_boot <- enigh_design %>% as_survey_rep(type = "bootstrap", replicates = 500) # 3. Así calculamos la media enigh_boot %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor)) ## # A tibble: 1 × 2 ## mean_ingcor mean_ingcor_se ## <dbl> <dbl> ## 1 49610. 468. enigh_boot %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor, vartype = "ci")) ## # A tibble: 1 × 3 ## mean_ingcor mean_ingcor_low mean_ingcor_upp ## <dbl> <dbl> <dbl> ## 1 49610. 48690. 50530. # por estado enigh_boot %>% group_by(edo) %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor)) ## # A tibble: 30 × 3 ## edo mean_ingcor mean_ingcor_se ## <chr> <dbl> <dbl> ## 1 10 50161. 995. ## 2 11 46142. 1241. ## 3 12 29334. 1063. ## 4 13 38783. 1019. ## 5 14 60541. 1924. ## 6 15 48013. 1359. ## 7 16 42653. 1393. ## 8 17 42973. 1601. ## 9 18 48148. 1967. ## 10 19 68959. 4062. ## # ℹ 20 more rows Resumiendo: El bootstrap de Rao y Wu genera un estimador consistente y aproximadamente insesgado de la varianza de estadísticos no lineales y para la varianza de un cuantil. Este método supone que la seleccion de UPMs es con reemplazo; hay variaciones del estimador bootstrap de Rao y Wu que extienden el método que acabamos de estudiar; sin embargo, es común ignorar este aspecto, por ejemplo Mach et al estudian las propiedades del estimador de varianza bootstrap de Rao y Wu cuando la muestra se seleccionó sin reemplazo. Bootstrap en R Es común crear nuestras propias funciones cuando usamos bootstrap, sin embargo, en R también hay alternativas que pueden resultar convenientes, mencionamos 3: El paquete rsample (forma parte de la colección tidymodels) y tiene una función bootstraps() que regresa un arreglo cuadrangular (tibble, data.frame) que incluye una columna con las muestras bootstrap y un identificador del número y tipo de muestra. Veamos un ejemplo donde seleccionamos muestras del conjunto de datos muestra_computos que contiene 10,000 observaciones. library(rsample) load("data/election_2012.rda") muestra_computos <- slice_sample(election_2012, n = 10000) muestra_computos ## # A tibble: 10,000 × 23 ## state_code state_name state_abbr district_loc_17 district_fed_17 polling_id ## <chr> <chr> <chr> <int> <int> <int> ## 1 18 Nayarit NAY 11 2 86709 ## 2 27 Tabasco TAB 17 5 122035 ## 3 15 México MEX 7 35 75477 ## 4 27 Tabasco TAB 19 5 122262 ## 5 17 Morelos MOR 6 2 84733 ## 6 07 Chiapas CHPS 22 5 15376 ## 7 14 Jalisco JAL 2 2 52634 ## 8 08 Chihuahua CHIH 7 4 19097 ## 9 14 Jalisco JAL 20 20 60549 ## 10 13 Hidalgo HGO 11 4 50221 ## # ℹ 9,990 more rows ## # ℹ 17 more variables: section <int>, region <chr>, polling_type <chr>, ## # section_type <chr>, pri_pvem <int>, pan <int>, panal <int>, ## # prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>, ## # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>, ## # otros_pct <dbl>, winner <chr> Generamos 100 muestras bootstrap, y la función nos regresa un arreglo con 100 renglones, cada uno corresponde a una muestra bootstrap. set.seed(839287482) computos_boot <- bootstraps(muestra_computos, times = 100) computos_boot ## # Bootstrap sampling ## # A tibble: 100 × 2 ## splits id ## <list> <chr> ## 1 <split [10000/3647]> Bootstrap001 ## 2 <split [10000/3623]> Bootstrap002 ## 3 <split [10000/3724]> Bootstrap003 ## 4 <split [10000/3682]> Bootstrap004 ## 5 <split [10000/3696]> Bootstrap005 ## 6 <split [10000/3716]> Bootstrap006 ## 7 <split [10000/3679]> Bootstrap007 ## 8 <split [10000/3734]> Bootstrap008 ## 9 <split [10000/3632]> Bootstrap009 ## 10 <split [10000/3692]> Bootstrap010 ## # ℹ 90 more rows La columna splits tiene información de las muestras seleccionadas, para la primera vemos que de 10,000 observaciones en la muestra original la primera muestra bootstrap contiene 10000-3647=6353. first_computos_boot <- computos_boot$splits[[1]] first_computos_boot ## <Analysis/Assess/Total> ## <10000/3647/10000> Y podemos obtener los datos de la muestra bootstrap con la función as.data.frame() as.data.frame(first_computos_boot) ## # A tibble: 10,000 × 23 ## state_code state_name state_abbr district_loc_17 district_fed_17 polling_id ## <chr> <chr> <chr> <int> <int> <int> ## 1 07 Chiapas CHPS 13 9 13397 ## 2 14 Jalisco JAL 15 15 58404 ## 3 09 Ciudad de M… CDMX 11 13 26471 ## 4 17 Morelos MOR 7 3 84909 ## 5 25 Sinaloa SIN 11 3 114038 ## 6 11 Guanajuato GTO 16 12 41506 ## 7 29 Tlaxcala TLAX 6 3 128006 ## 8 02 Baja Califo… BC 8 5 3901 ## 9 02 Baja Califo… BC 9 5 3779 ## 10 08 Chihuahua CHIH 19 5 19536 ## # ℹ 9,990 more rows ## # ℹ 17 more variables: section <int>, region <chr>, polling_type <chr>, ## # section_type <chr>, pri_pvem <int>, pan <int>, panal <int>, ## # prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>, ## # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>, ## # otros_pct <dbl>, winner <chr> Una de las principales ventajas de usar este paquete es que es eficiente en el uso de memoria. library(pryr) object_size(muestra_computos) ## 1.41 MB object_size(computos_boot) ## 5.49 MB # tamaño por muestra object_size(computos_boot)/nrow(computos_boot) ## 54.92 kB # el incremento en tamaño es << 1000 as.numeric(object_size(computos_boot)/object_size(muestra_computos)) ## [1] 3.895024 Adicionalmente incluye funciones para el cálculo de intervalos bootstrap: intervalo_propinas_90 <- bootstraps(propinas, strata = momento, 1000) |> mutate(res_boot = map(splits, estimador)) |> int_pctl(res_boot, alpha = 0.10) El paquete boot está asociado al libro Bootstrap Methods and Their Applications (Davison and Hinkley (1997)) y tiene, entre otras, funciones para calcular replicaciones bootstrap y para construir intervalos de confianza usando bootstrap: calculo de replicaciones bootstrap con la función boot(), intervalos normales, de percentiles y \\(BC_a\\) con la función boot.ci(), intevalos ABC con la función `abc.ci(). El paquete bootstrap contiene datos usados en Efron and Tibshirani (1993), y la implementación de funciones para calcular replicaciones y construir intervalos de confianza: calculo de replicaciones bootstrap con la función bootstrap(), intervalos \\(BC_a\\) con la función bcanon(), intevalos ABC con la función abcnon(). Conclusiones y observaciones El principio fundamental del Bootstrap no paramétrico es que podemos estimar la distribución poblacional con la distribución empírica. Por tanto para hacer inferencia tomamos muestras con reemplazo de la muestra y analizamos la variación de la estadística de interés a lo largo de las remuestras. El bootstrap nos da la posibilidad de crear intervalos de confianza cuando no contamos con fórmulas para hacerlo de manera analítica y sin supuestos distribucionales de la población. Hay muchas opciones para construir intervalos bootstrap, los que tienen mejores propiedades son los intervalos \\(BC_a\\), sin embargo, los más comunes son los intervalos normales con error estándar bootstrap y los intervalos de percentiles de la distribución bootstrap. Antes de hacer intervalos normales vale la pena graficar la distribución bootstrap y evaluar si el supuesto de normalidad es razonable. En cuanto al número de muestras bootstrap se recomienda al menos \\(1,000\\) al hacer pruebas, y \\(10,000\\) o \\(15,000\\) para los resultados finales, sobre todo cuando se hacen intervalos de confianza de percentiles. La función de distribución empírica es una mala estimación en las colas de las distribuciones, por lo que es difícil construir intervalos de confianza (usando bootstrap no paramétrico) para estadísticas que dependen mucho de las colas. O en general para estadísticas que dependen de un número chico de observaciones de una muestra grande. Referencias "],["estimación-por-máxima-verosimilitud.html", "Sección 6 Estimación por máxima verosimilitud Introducción a estimación por máxima verosimilitud Máxima verosimilitud para observaciones continuas Aspectos numéricos Máxima verosimilitud para más de un parámetro", " Sección 6 Estimación por máxima verosimilitud Los ejemplos que hemos visto han sido todos de estimadores plug-in (o por sustitución): si queremos saber una cantidad poblacional, y tenemos una muestra dada, entonces calculamos la estadística de interés como si la muestra fuera la población. Por ejemplo, para estimar la mediana poblacional usamos la mediana muestral, si queremos estimar la media poblacional usamos la media muestral, y así sucesivamente. Estos estimadores usualmente dan resultados razonables (pero hay que checar usando muestra bootstraps, por ejemplo, y pensar lo que estamos haciendo). Cuando sabemos más acerca de la población y usamos un modelo teórico es posible hacer más: dependiendo de qué cantidades se quieren estimar, podemos construir estimadores que sean óptimos en algún sentido siempre y cuando se cumplan los supuestos teóricos, como veremos ahora. Por ejemplo: ¿deberíamos estimar el centro de una distribución simétrica con la media o con la mediana, o quizá con una media recortada? En esta parte construiremos la teoría básica de estimación cuando trabajamos con modelos teóricos conocidos. El objetivo es entender las ideas básicas de estos procedimientos, y cómo evaluar sus resultados. Recordatorio: las ventajas de usar modelos teóricos para describir distribuciones de datos está en que es posible comprimir más eficientemente la información, es posible construir modelos más complejos juntando varios de estos modelos y de sus dependencias, y de que es posible hacer más teoría útil que nos guíe. La desventaja es que es necesario que esos supuestos teóricos sean razonables. Introducción a estimación por máxima verosimilitud Uno de los procedimientos más estándar en esta situación es el método de máxima verosimilitud. Los estimadores de máxima verosimilitud tienen propiedades convenientes, y dan en general resultados razonables siempre y cuando los supuestos sean razonables. Máxima verosimilitud es un proceso intuitivo, y consiste en aprender o estimar valores de parámetros desconocidos suponiendo para los datos su explicación más probable. Para esto, usando supuestos y modelos, requeriremos calcular la probabilidad de un conjunto de observaciones. Ejemplo. Adaptado de (Chihara and Hesterberg 2018). Supongamos que una máquina produce dos tipos de bolsas de 25 galletas: la mitad de las veces produce una bolsa con 5 galletas de avena y 20 de chispas de chocolate, y la otra mitad produce bolsas con 23 galletas de avena y 2 de chispas de chocolate. Tomamos una bolsa, y no sabemos qué tipo de bolsa es (parámetro desconocido). Extraemos al azar una de las galletas, y es de chispas de chocolate (observación). Por máxima verosimilitud, inferimos que la bolsa que estamos considerando tiene 5 galletas de avena. Esto es porque es más probable observar una galleta de chispas en las bolsas que contienen 5 galletas de avena que en las bolsas que contienen 23 galletas de avena. Podemos cuantificar la probabilidad que “acertemos” en nuestra inferencia. Cómo se aprecia en el ejemplo anterior, el esquema general es: Existe un proceso del que podemos obtener observaciones de algún sistema o población real. Tenemos un modelo probabilístico que dice cómo se producen esas observaciones a partir del sistema o población real. Usualmente este modelo tiene algunas cantidades que no conocemos, que rigen el proceso y cómo se relaciona el proceso con las observaciones. Nuestro propósito es: Extraemos observaciones del proceso \\[x_1, x_2, \\ldots, x_n.\\] Queremos aprender de los parámetros desconocidos del proceso para calcular cantidades de interés acerca del sistema o población real En principio, los modelos que consideramos pueden ser complicados y tener varias partes o parámetros. Veamos primero un ejemplo clásico con un solo parámetro, y cómo lo resolveríamos usando máxima verosimilitud. Nota: Cuando decimos muestra en general nos referimos a observaciones independientes obtenidas del mismo proceso (ver la sección de distribución de muestreo) para ver qué significa que sea independientes. Este esquema es un supuesto que simplifica mucho los cálculos, como discutimos antes. Muchas veces este supuesto sale del diseño de la muestra o del estudio, pero en todo caso es importante considerar si es razonable o no para nuestro problema particular. Denotemos por \\(f(x; \\theta)\\) la función de densidad para una variable aleatoria continua con párametro asociado \\(\\theta.\\) Denotamos por \\(X_1, \\ldots, X_n,\\) una muestra aleatoria de \\(n\\) observaciones de esta distribución y por \\(x_1, \\ldots, x_n\\) los valores observados de esta muestra aleatoria. Ejemplo. Supongamos que queremos saber qué proporción de registros de una base de datos tiene algún error menor de captura. No podemos revisar todos los registros, así que tomamos una muestra de 8 registros, escogiendo uno por uno al azar de manera independiente. Revisamos los 8 registros, y obtenemos los siguientes datos: \\[x_1 = 0, x_2 = 1, x_3 = 0, x_4 = 0, x_5 =1, x_6 =0, x_7 =0, x_8 =0\\] donde 1 indica un error menor. Encontramos dos errores menores. ¿Cómo estimamos el número de registros con errores leves en la base de datos? Ya sabemos una respuesta razonable para nuestro estimador puntual, que sería \\(\\hat{p}=2/8=0.25\\). Veamos cómo se obtendría por máxima verosimilitud. Según el proceso con el que se construyó la muestra, debemos dar una probabilidad de observar los 2 errores en 8 registros. Supongamos que en realidad existe una proporción \\(p\\) de que un registro tenga un error. Entonces calculamos Probabilidad de observar la muestra: \\[P(X_1 = 0, X_2 = 1, X_3 = 0, X_4 = 0, X_5 =1, X_6 =0, X_7 =0, X_8 =0)\\] es igual a \\[P(X_1 = 0)P(X_2 = 1)P(X_3 = 0)P( X_4 = 0)P(X_5 =1)P(X_6 =0)P(X_7 =0)P(X_8 =0)\\] pues la probabilidad de que cada observación sea 0 o 1 no depende de las observaciones restantes (la muestra se extrajo de manera independiente). Esta última cantidad tiene un parámetro que no conocemos: la proporcion \\(p\\) de registros con errores. Así que lo denotamos como una cantidad desconocida \\(p\\). Nótese entonces que \\(P(X_2=1) = p\\), \\(P(X_3=0) = 1-p\\) y así sucesivamente, así que la cantidad de arriba es igual a \\[(1-p)p(1-p)(1-p)p(1-p)(1-p)(1-p) \\] que se simplifica a \\[ \\mathcal{L}(p) = p^2(1-p)^6\\] Ahora la idea es encontrar la p que maximiza la probabilidad de lo que observamos. En este caso se puede hacer con cálculo, pero vamos a ver una gráfica de esta función y cómo resolverla de manera numérica. verosimilitud <- function(p){ p^2 * (1-p)^6 } dat_verosim <- tibble(x = seq(0,1, 0.001)) %>% mutate(prob = map_dbl(x, verosimilitud)) ggplot(dat_verosim, aes(x = x, y = prob)) + geom_line() + geom_vline(xintercept = 0.25, color = "red") + xlab("p") Nótese que esta gráfica: Depende de los datos, que pensamos fijos. Cuando cambiamos la \\(p\\), la probabilidad de observar la muestra cambia. Nos interesa ver las regiones donde la probabilidad es relativamente alta. El máximo está en 0.25. Así que el estimador de máxima verosimilitud es \\(\\hat{p} = 0.25\\), que es también el estimador usual de plugin en este caso. Para uniformizar la notación con el caso continuo que veremos más adelante, usaremos la notación \\[P(X=x) = f(x)\\] donde \\(f\\) es la función de densidad (en este caso, función de masa de probabilidad) de \\(X\\). Si esta función depende de un parámetro, escribimos \\[f(x ;\\theta)\\] Definición. Sean \\(X_1, \\ldots, X_n\\) una muestra de una densidad \\(f(x; \\theta)\\) y sean \\(x_1,x_2,\\ldots, x_n\\) los valores observados. La función de verosimilitud del párametro de interés \\(\\theta\\) está definida por \\[\\begin{align} \\mathcal{L}(\\theta; x_1, \\ldots, x_n) = \\prod_{i = 1}^n f(x_i; \\theta). \\end{align}\\] Esta función nos dice qué tan creible es el valor del parámetro \\(\\theta\\) dada la muestra observada. A veces también la denotamos por \\(\\mathcal{L}_n(\\theta)\\). Ahora definimos qué es un estimador de máxima verosimilitud. Definición. Un estimador de máxima verosimilitud lo denotamos por \\(\\hat \\theta_{\\textsf{MLE}}\\) y es un valor que satisface \\[\\begin{align} \\hat \\theta_{\\textsf{MLE}} = \\underset{\\theta \\, \\in \\, \\Theta}{\\arg\\max}\\, \\mathcal{L}(\\theta; x_1, \\ldots, x_n), \\end{align}\\] donde \\(\\Theta\\) denota el espacio parametral. Es decir, el espacio válido de búsqueda congruente con la definición del modelo. Considera el caso de una normal con media y varianza desconocidas. ¿Cuáles son los espacios parametrales para efectuar \\(\\mathsf{MLE}\\)? Considera el caso de una Binomial con parámetro \\(p\\) desconocidos. ¿Cuál es el espacio parametral para la búsqueda del \\(\\mathsf{MLE}\\)? Obsérvese que para construir la verosimilitud y en consecuencia buscar por estimadores de máxima verosimlitud necesitamos: Un modelo teórico de cómo es la población con parámetros e Información de cómo se extrajo la muestra, y entonces podemos resolver nuestro problema de estimación convirtiéndolo en uno de optimización. Probamos esta idea con un proceso más complejo. Ejemplo. Supongamos que una máquina puede estar funcionando correctamente o no en cada corrida. Cada corrida se producen 500 productos, y se muestrean 10 para detectar defectos. Cuando la máquina funciona correctamente, la tasa de defectos es de 3%. Cuando la máquina no está funcionando correctamente la tasa de defectos es de 20% Supongamos que escogemos al azar 11 corridas, y obervamos los siguientes número de defectuosos: \\[1, 0, 0, 3 ,0, 0, 0, 2, 1, 0, 0\\] La pregunta es: ¿qué porcentaje del tiempo la máquina está funcionando correctamente? Primero pensemos en una corrida. La probabilidad de observar una sucesión particular de \\(r\\) defectos es \\[0.03^r(0.97)^{(10-r)}\\] cuando la máquina está funcionando correctamente. Si la máquina está fallando, la misma probabilidad es \\[0.2^r(0.8)^{(10-r)}.\\] Ahora supongamos que la máquina trabaja correctamente en una proporción \\(p\\) de las corridas. Entonces la probabilidad de observar \\(r\\) fallas se calcula promediando (probabilidad total) sobre las probabilidades de que la máquina esté funcionando bien o no: \\[0.03^r(0.97)^{(10-r)}p + 0.2^r(0.8)^{(10-r)}(1-p)\\] Y esta es nuestra función de verosimilitud para una observación. Suponemos que las \\(r_1,r_2, \\ldots, r_{11}\\) observaciones son independientes (por ejemplo, después de cada corrida la máquina se prepara de una manera estándar, y es como si el proceso comenzara otra vez). Entonces tenemos que multiplicar estas probabilidades para cada observación \\(r_1\\): # creamos la función de verosimilitud con los datos observados como dados verosim <- function(p) { r <- c(1, 2, 0, 3, 0, 0, 0, 2, 1, 0, 3) q_func <- 0.03^r*(0.97)^(10-r) q_falla <- 0.2^r*(0.8)^(10-r) prod(p * q_func + (1 - p) * q_falla) } verosim(0.1) # Una alternativa que nos da más flexibilidad para generar la función de # verosimilitud, es crear una función que recibe los datos observados y nos # regresa la función de verosimilitud correspondiente # Entonces, cal_verosim es una función que regresa una función calc_verosim <- function(r){ q_func <- 0.03 ^ r * (0.97) ^ (10 - r) q_falla <- 0.2 ^ r * (0.8) ^ (10 - r) function(p){ #nota: esta no es la mejor manera de calcularlo, hay # que usar logaritmos. prod(p * q_func + (1 - p) * q_falla) } } verosim <- calc_verosim(r = c(1, 0, 0, 3, 0, 0, 0, 2, 1, 0, 0)) verosim(0.1) ## [1] 2.692087e-14 dat_verosim <- tibble(x = seq(0, 1, 0.001)) %>% mutate(prob = map_dbl(x, verosim)) ggplot(dat_verosim, aes(x = x, y = prob)) + geom_line() + geom_vline(xintercept = 0.773, color = "red") + xlab("prop funcionado") Y nuestra estimación puntual sería de alrededor de 80%. Máxima verosimilitud para observaciones continuas Cuando las observaciones \\(x_1,\\ldots, x_n\\) provienen de una distribución continua, no tiene sentido considerar \\(P(X = x_i)\\), pues siempre es igual a cero. Sin embargo, podemos escribir para pequeños valores \\(\\epsilon \\ll 1\\) \\[\\begin{align} P(x - \\epsilon < X < x + \\epsilon | \\theta) = \\int_{x - \\epsilon}^{x + \\epsilon} f(t; \\theta) \\, \\text{d} t \\approx 2 \\epsilon f(x; \\theta), \\end{align}\\] donde \\(f(x; \\theta)\\) es la función de densidad de \\(X.\\) Por lo tanto, \\[\\begin{align} \\begin{split} P&(x_1 - \\epsilon < X_1 < x_1 + \\epsilon, \\ldots, x_n - \\epsilon < X_n < x_n + \\epsilon | \\theta) \\\\ &= \\prod_{i = 1}^n P(x_i - \\epsilon < X_i < x_i + \\epsilon | \\theta) \\\\ &= \\prod_{i = 1}^n 2 \\epsilon f(x_i; \\theta) = (2\\epsilon)^n \\prod_{i = 1}^n f(x_i; \\theta). \\end{split} \\end{align}\\] Notemos que si \\(\\epsilon \\rightarrow 0\\) la ecuación rápidamente converge a cero. Pero para pequeños valores de \\(\\epsilon\\) la ecuación que nos interesa es proporcional a \\(\\prod_{i = 1}^n f(x_i; \\theta).\\) De esta forma, nuestra definición de máxima verosimilitud y estimadores de máxima verosimilitud es la misma para el caso continuo (verifica las definiciones de la sección anterior). Ejemplo. Supongamos que tenemos una muestra \\(x_1\\ldots, x_n\\) extraidas de una distribución exponencial con tasa \\(\\lambda>0\\) donde no conocemos \\(\\lambda\\). ¿Cuál es el estimador de máxima verosimilitud de \\(\\lambda\\)? Para \\(\\lambda>0\\), tenemos que \\[{\\mathcal L}(\\lambda) = \\prod_{i=1}^n \\lambda e^{-\\lambda x_i}\\] de modo que \\[{\\mathcal L}(\\lambda) = \\lambda^n e^{-\\lambda \\sum_{i=1}^nx_i} = \\lambda^n e^{-n\\lambda\\bar{x}} = e^{n(\\log\\lambda - \\lambda\\bar{x})}\\] Que podemos maximizar usando cálculo para obtener \\(\\hat{\\lambda}_{\\mathsf{ML}} = \\frac{1}{\\bar{x}}\\) (demuéstralo). Discute por qué esto es intuitivamente razonable: ¿cuál es el valor esperado de una exponencial con parámetro \\(\\lambda\\)? Aspectos numéricos Encontrar el estimador de máxima verosimilitud (\\(\\textsf{MLE}\\)) es automático en la mayoría de los casos. En teoría, podemos reutilizar la misma rutina numérica para encontrar el estimador sin ninguna ayuda de la analista. Esto contrasta con otras técnicas de estimación en donde se requieren cálculos y manipulación de ecuaciones. Sin embargo, hay situaciones que se pueden evitar de manera general. Por ejemplo, cuando calculamos la verosimilitud arriba, nótese que estamos multiplicando números que pueden ser muy chicos (por ejemplo \\(p^6\\), etc). Esto puede producir desbordes numéricos fácilmente. Por ejemplo para un tamaño de muestra de 1000, podríamos tener que calcular p <- 0.1 proba <- (p ^ 800)*(1-p)^200 proba ## [1] 0 En estos casos, es mejor hacer los cálculos en escala logarítmica. El logaritmo convierte productos en sumas, y baja exponentes multiplicando. Si calculamos en escala logaritmica la cantidad de arriba, no tenemos problema: log_proba <- 800 * log(p) + 200 * log(1-p) log_proba ## [1] -1863.14 Ahora notemos que Maximizar la verosimilitud es lo mismo que maximizar la log-verosimilitud, pues el logaritmo es una función creciente. Si \\(x_{\\max}\\) es el máximo de \\(f\\), tenemos que \\(f(x_{\\max})>f(x)\\) para cualquier \\(x\\), entonces tomando logaritmo, \\[\\log(f(x_{max}))>\\log(f(x)),\\] para cualquier \\(x.\\) Pues el logaritmo respeta la desigualdad por ser creciente. Usualmente usamos la log-verosimilitud para encontrar el estimador de máxima verosimilitud. Hay razónes teóricas y de interpretación por las que también es conveniente hacer esto. Definición. La log-verosimilitud la denotamos usualmente por \\[\\ell_n(\\theta) = \\log \\left(\\mathcal{L}_n(\\theta)\\right),\\] donde hemos suprimido la dependencia en la muestra por conveniencia. Ejemplo. En nuestro primer ejemplo, log_verosimilitud <- function(p){ 2*log(p) + 6*log(1-p) } dat_verosim <- tibble(x = seq(0,1, 0.01)) %>% mutate(log_prob = map_dbl(x, log_verosimilitud)) ggplot(dat_verosim, aes(x = x, y = log_prob)) + geom_line() + geom_vline(xintercept = 0.25, color = "red") + xlab("p") Obtenemos el mismo máximo. Podemos incluso resolver numéricamente: solucion <- optim(p = 0.5, log_verosimilitud, control = list(fnscale = -1), method = "Brent", lower = 0, upper = 1) solucion$par ## [1] 0.25 Y en nuestro segundo ejemplo: calc_log_verosim <- function(r){ q_func <- 0.03^r*(0.97)^(10-r) q_falla <- 0.2^r*(0.8)^(10-r) function(p){ #nota: esta no es la mejor manera de calcularlo, hay # que usar logaritmos. sum(log(p * q_func + (1 - p) * q_falla)) } } log_verosim <- calc_log_verosim(c(1, 0, 0, 3, 0, 0, 0, 2, 1, 0, 0)) log_verosim(0.1) ## [1] -31.24587 solucion <- optim(p = 0.2, log_verosim, control = list(fnscale = -1), method = "Brent", lower = 0, upper = 1) solucion$par ## [1] 0.7733766 solucion$convergence ## [1] 0 dat_verosim <- tibble(x = seq(0,1, 0.001)) %>% mutate(log_verosimilitud = map_dbl(x, log_verosim)) ggplot(dat_verosim, aes(x = x, y = log_verosimilitud)) + geom_line() + geom_vline(xintercept = 0.775, color = "red") + xlab("prop funcionado") Nótese que la verosimilitud la consideramos función de los parámetros, donde los datos están fijos. Podemos construir una función que genera la función de verosimilitud dependiendo de los datos. En nuestro primer ejemplo de muestras de registros erróneos, podríamos construir una función que genera la log verosimilitud dependiendo del tamaño de muestra y del número de errores encontrado: construir_log_verosim <- function(n, n_err){ # n es tamaño de muestra # n_err el número de errores detectados (datos) n_corr <- n - n_err log_verosim <- function(p){ n_err * log(p) + n_corr * log(1-p) } } Cuando fijamos \\(n\\) y \\(n_{\\textsf{err}}\\), esta función genera otra función, la log verosimilitud, que es la que queremos optimizar. Supongamos entonces que sacamos 20 registros al azar y observamos 10 incorrectos. La función de verosimilitud es log_vero <- construir_log_verosim(20, 10) tibble(x = seq(0,1,0.001)) %>% mutate(log_ver = log_vero(x)) %>% ggplot(aes(x = x, y = log_ver)) + geom_line() + geom_vline(xintercept = 0.5, color = 'red') Ejemplo. Supongamos que en una población de transacciones hay un porcentaje \\(p\\) (desconocido) que son fraudulentas. Tenemos un sistema de clasificación humana que que marca transacciones como sospechosas. Con este sistema hemos medido que la proporción de transacciones normales que son marcadas como sospechosas es de 0.1%, y que la proporción de transacciones fraudulentas que son marcadas como sospechosas es de 98%. Supongamos que extraemos una muestra de 2000 transacciones, de manera que todas ellas tiene la misma probabilidad de ser fraudulentas. El sistema de clasificación marca 4 transacciones como sospechosas ¿Cómo estimamos la proporción de transacciones fraudulentas en la población? Solución: sea \\(p\\) la proporción de transacciones fraudulentas. Entonces la probabilidad de que una transacción sea marcada como sospechosa es (proba total): \\[0.98p + 0.001(1-p)\\] Pues tenemos que contar 98% de la proporción \\(p\\) de fraudulentas (correctamente detectadas) más 0.1% de la proporción \\((1-p)\\) de fraudulentas. Escribimos entonces nuestra función de verosimilitud crear_log_verosim <- function(n, n_sosp){ # devolver la función log verosimilitud log_verosimilitud_pct <- function(pct){ # sup que pct es la proporcentaje de fraudes, # que es el parámetro que queremos estimar prob_sosp <- 0.98 * pct / 100 + 0.001 * (1 - pct / 100) log_prob <- n_sosp * log(prob_sosp) + (n - n_sosp) * log(1- prob_sosp) log_prob } log_verosimilitud_pct } La verosimilitud es una función de \\(p\\). log_verosim <- crear_log_verosim(n = 2000, n_sosp = 4) A continuación la mostramos de manera gráfica. No se ve muy claro dónde ocurre el máximo, pero podemos ampliar cerca de cero la misma gráfica: Vemos que alrededor de 0.1% maximiza la probabilidad de haber observado 4 transacciones sospechosas. Notamos sin embargo que varios valores alrededor de este valor tienen probabilidad similar, así que también son consistentes con los datos (por ejemplo, valores como 0.05 o 0.15 tienen probabilidad similar). Tendremos que considerar esto para evaluar la incertidumbre en nuestra estimación. Obsérvese adicionalmente que si no tomáramos en cuenta las probabilidades de falsos negativos y falsos positivos la estimación simple daría \\(4/2000 = 0.002\\) (0.2%), que es dos veces más grande que nuestra estimación puntual por máxima verosimilitud. Ejemplo. Este es un ejemplo donde mostramos que cuando el soporte de las densidades teóricas es acotado hay que tener cuidado en la definición de la verosimilitud. En este caso, el soporte de la variable aleatoria es el párametro de interés. Supongamos que nuestros datos son generados por medio de una distribución uniforme en el intervalo \\([0,b].\\) Contamos con una muestra de \\(n\\) observaciones generadas de manera independiente \\(X_i \\sim U[0,b]\\) para \\(i= 1, \\ldots, n.\\) Sin embargo, no conocemos el valor de \\(b\\). ¿Cómo es la función de log verosimilitud \\({\\mathcal L}_n(b)\\) para este caso? Nótese que cuando el parámetro \\(b\\) es menor que alguna \\(x_i\\), tenemos que \\({\\mathcal L}_n(b) = 0\\): la verosimilitud es cero si tomamos una \\(b\\) más chica que algún dato, pues este valor es incosistente del todo con los datos observados. En otro caso, \\[{\\mathcal L}_n(b) = \\frac{1}{b^n},\\] pues la función de densidad de una uniforme en \\([0,b]\\) es igual a \\(1/b\\) en el intervalo \\([0,b]\\), y 0 en otro caso. Podemos escribir entonces: crear_verosim <- function(x){ n <- length(x) verosim <- function(b){ indicadora <- ifelse(all(x <= b), 1, 0) indicadora / b^n } } Ahora podemos hacer máxima verosimilitud para un ejemplo: set.seed(234) x <- runif(10, 0, 3) verosim <- crear_verosim(x) res_opt <- optimize(verosim, c(-1000, 1000), maximum = TRUE) res_opt$maximum ## [1] 2.788167 Y nótese que, como esperaríamos, este valor es el máximo de la muestra: max(x) ## [1] 2.788158 La gráfica de la función de verosimilitud es: tibble(b = seq(-1, 5, 0.001)) %>% mutate(verosim_1 = map_dbl(b, ~ verosim(.x))) %>% ggplot() + geom_line(aes(x = b, y = verosim_1)) + geom_rug(data = tibble(x = x), aes(x = x), colour = "red") Podemos escribir en una fórmula como: \\[\\begin{align} \\mathcal{L}(b; x_1, \\ldots, x_n) = \\prod_{i = 1}^n 1_{[0,b]}(x_i) \\frac1b. \\end{align}\\] Y podríamos resolver analíticamente como sigue: Si consideramos \\[ \\hat b_{\\textsf{MLE}} = x_{\\max} = \\max\\{x_i\\},\\] notemos que cualquier valor observado necesariamente satisface \\[x_i \\leq \\hat b_{\\textsf{MLE}},\\] y por lo tanto todas las funciones indicadoras están encendidas. El valor de la verosimilitud es igual a \\[\\mathcal{L}(\\hat b_{\\textsf{MLE}}; x_1, \\ldots, x_n) = \\left(\\frac{1}{x_{\\max}}\\right)^n \\geq \\left (\\frac1b\\right )^n\\] para cualquier \\(b\\geq x_{\\max}\\). Como la verosimilitud para \\(b<x_{\\max}\\) es igual a cero, esto demuestra que el máximo de la muestra es el estimador de máxima verosimilitud de \\(b\\). Observación. Este ejemplo también tiene dificultades numéricas, pues la verosimilitud presenta discontinuidades y regiones con derivada igual a cero, y la mayoria de los algoritmos numéricos no tienen garantías buenas de covergencia al máximo en estos casos. Si aplicamos sin cuidado descenso en gradiente, por ejemplo, podríamos comenzar incorrectamente en un valor \\(b_0 < x_{\\max}\\) y el algoritmo no avanzaría al máximo. Máxima verosimilitud para más de un parámetro Si nuestro modelo contiene más de un parámetro desconocido podemos también usar máxima verosimilitud. En este caso, optimizamos sobre todos los parámetros usando cálculo o alguna rutina numérica. Ejemplo. Considera el caso de \\(n\\) muestras iid de un modelo Gaussiano. Es decir, \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2).\\) Consideremos que ambos parámetros son desconocidos y nos gustaria encontrar el \\(\\textsf{MLE}\\). Para este problema denotamos \\(\\theta \\in \\mathbb{R}^2\\), donde \\(\\theta_1 = \\mu\\) y \\(\\theta_2 = \\sigma^2.\\) La función de verosimiltud se puede calcular (ignorando algunas constantes multiplicativas) como \\[\\begin{align} \\mathcal{L}_n(\\theta) &= \\prod_{i = 1}^n \\frac{1}{\\sigma} \\, \\exp\\left( - \\frac{(x_i - \\mu)^2}{2\\sigma^2}\\right) \\\\ &= \\theta_2^{-\\frac{n}{2}}\\exp\\left( - \\frac{1}{2 \\theta_2} \\sum_{i = 1}^n (x_i - \\theta_1)^2 \\right). \\end{align}\\] A continuación mostramos la representación gráfica de la función de verosimilitud de este ejemplo. Notamos lo mismo que para los ejemplos anteriores. Conforme más datos tenemos, más nos acercamos a los valores reales que no conocemos. Ejemplo. Como ejercicio, podemos encontrar los estimadores de máxima verosimilitud cuando tenemos una muestra \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2).\\) (puedes derivar e igualar el cero para encontrar el mínimo). También podemos resolver numéricamente, por ejemplo: Supongamos que tenemos la siguiente muestra: set.seed(41852) muestra <- rnorm(150, mean = 1, sd = 2) La función generadora de la log verosimilitud para una muestra es (ve la expresión del ejercicio anterior y calcula su logaritmo), y generamos la función de verosimilitud para nuestra muestra: crear_log_p <- function(x){ log_p <- function(pars){ media = pars[1] desv_est = pars[2] # ve la ecuación del ejercicio anterior z <- (x - media) / desv_est log_verosim <- -(log(desv_est) + 0.5 * mean(z ^ 2)) log_verosim } log_p } log_p <- crear_log_p(muestra) Ahora optimizamos: res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mv <- tibble(parametro = c("media", "sigma"), estimador = res$par) %>% column_to_rownames(var = "parametro") est_mv ## estimador ## media 1.136001 ## sigma 1.838421 Verifica que el estimador de la media y de la desviación estándar es el que esperábamos (y que puedes derivar analíticamente): n <- length(muestra) sd_n <- function(x) sqrt(mean((x - mean(x))^2)) c(media = mean(muestra), sigma = sd_n(muestra)) %>% round(4) ## media sigma ## 1.1364 1.8392 Ejemplo. Supongamos que en una población de estudiantes tenemos dos tipos: unos llenaron un examen de opción múltiple al azar (1 de 5), y otros contestaron las preguntas intentando sacar una buena calificación. Suponemos que una vez que conocemos el tipo de estudiante, todas las preguntas tienen la misma probabilidad de ser contestadas correctamente, de manera independiente. El modelo teórico está representado por la siguiente simulación: sim_formas <- function(p_azar, p_corr){ tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } Y una muestra se ve como sigue: set.seed(12) muestra <- map_dbl(1:200, ~ sim_formas(0.3, 0.75)) qplot(muestra) Supongamos que no conocemos la probabildad de contestar correctamente ni la proporción de estudiantes que contestó al azar. ¿Como estimamos estas dos cantidades? Escribimos la verosimilitud: crear_log_p <- function(x){ log_p <- function(pars){ p_azar = pars[1] p_corr = pars[2] sum(log(p_azar * dbinom(x, 10, 1/5) + (1 - p_azar) * dbinom(x, 10, p_corr))) } log_p } Creamos la función de verosimilitud con los datos log_p <- crear_log_p(muestra) y optimizamos res <- optim(c(0.5, 0.5), log_p, control = list(fnscale = -1)) res$par ## [1] 0.2827061 0.7413276 En este caso, obtenemos estimaciones razonables de ambos parámetros. Nota: dependiendo de los datos, este problema puede estar mal condicionado. Por ejemplo, ¿qué pasa si la probabilidad de acertar cuando se contesta bien está cercano al azar? La siguiente pregunta qué nos interesa hacer es: ¿cómo estimamos la variabilidad de estos estimadores? Más adelante veremos una respuesta basada en teoría, pero también podemos resolver este problema usando el bootstrap. Referencias "],["bootstrap-paramétrico.html", "Sección 7 Bootstrap paramétrico Ventajas y desventajas de bootstrap paramétrico Verificando los supuestos distribucionales Modelos mal identificados", " Sección 7 Bootstrap paramétrico Cuando nuestras observaciones provienen de un modelo teórico parametrizado con algunos parámetros que queremos estimar, y utilizamos máxima verosimilitud para hacer nuestra estimación, no es adecuado aplicar directamente el bootstrap no paramétrico que vimos en las secciones anteriores. Sin embargo, suponiendo que el modelo paramétrico que estamos usando es apropiado, podemos remuestrear de tal modelo para estimar la varianza de nuestros estimadores. Este proceso se llama el bootstrap paramétrico. Antes de hacer una definición precisa, veamos cómo calcularíamos error estándar para los estimadores de máxima verosimilitud de la normal que vimos en la sección anterior. Ejemplo (sección máxima verosimilitud). Como ejercicio, podemos encontrar los estimadores de máxima verosimilitud cuando tenemos una muestra \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2)\\) (puedes derivar e igualar a cero para encontrar el mínimo). También podemos resolver numéricamente. Supongamos que tenemos la siguiente muestra: set.seed(41852) muestra <- rnorm(150, mean = 1, sd = 2) La función generadora de la log-verosimilitud para una muestra es (ve la expresión del ejercicio anterior y calcula su logaritmo), y generamos la función de verosimilitud para nuestra muestra: crear_log_p <- function(x){ log_p <- function(pars){ media = pars[1] desv_est = pars[2] # ve la ecuación del ejercicio anterior z <- (x - media) / desv_est log_verosim <- -(log(desv_est) + 0.5 * mean(z^2)) log_verosim } log_p } log_p <- crear_log_p(muestra) Ahora optimizamos (revisa que el método converge): res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mle <- tibble(parametro = c("media", "sigma"), estimador = res$par) |> column_to_rownames(var = "parametro") Una vez que tenemos nuestros estimadores puntuales, est_mle ## estimador ## media 1.136001 ## sigma 1.838421 Sustituimos estos parámetros en la distribución normal y simulamos una muestra del mismo tamaño que la original: simular_modelo <- function(n, media, sigma){ rnorm(n, media, sigma) } muestra_bootstrap <- simular_modelo(length(muestra), est_mle["media", "estimador"], est_mle["sigma", "estimador"]) head(muestra_bootstrap) ## [1] 1.8583885 2.2084326 2.5852895 2.5174462 -0.7428032 0.5995989 Una vez que tenemos esta muestra bootstrap recalculamos los estimadores de máxima verosimlitud. Esto se hace optimizando: # creamos nueva verosimilitud para muestra bootstrap log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0, 0.5), log_p_boot, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res_boot$convergence ## [1] 0 est_mle_boot <- tibble(parametro = c("media", "sigma"), estimador = res_boot$par) |> column_to_rownames(var = "parametro") est_mle_boot ## estimador ## media 1.235914 ## sigma 1.710042 Y esta es nuestra replicación bootstrap de los estimadores de máxima verosimilitud. La idea es la misma que el bootstrap no paramétrico, con la ventaja de que estamos simulando del modelo que suponemos es el correcto, es decir, estamos usando información adicional que no teníamos en el bootstrap no paramétrico. Ahora es necesario repetir un número grande de veces. Nótese que esta función envuelve el proceso de remuestreo, cálculo de la función de verosimilitud y optimización: rep_boot <- function(rep, crear_log_p, est_mle, n){ muestra_bootstrap <- simular_modelo(length(muestra), est_mle["media", "estimador"], est_mle["sigma", "estimador"]) log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0, 0.5), log_p_boot, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") try(if(res_boot$convergence != 0) stop("No se alcanzó convergencia.")) tibble(parametro = c("media", "sigma"), estimador_boot = res_boot$par) } reps_boot <- map_dfr(1:5000, ~ rep_boot(.x, crear_log_p, est_mle, n = length(muestra)), rep = ".id") reps_boot ## # A tibble: 10,000 × 2 ## parametro estimador_boot ## <chr> <dbl> ## 1 media 0.797 ## 2 sigma 1.90 ## 3 media 1.23 ## 4 sigma 1.96 ## 5 media 1.14 ## 6 sigma 1.89 ## 7 media 1.33 ## 8 sigma 1.73 ## 9 media 1.19 ## 10 sigma 1.73 ## # ℹ 9,990 more rows Ya ahora podemos estimar error estándar: error_est <- reps_boot |> group_by(parametro) |> summarise(ee_boot = sd(estimador_boot)) error_est ## # A tibble: 2 × 2 ## parametro ee_boot ## <chr> <dbl> ## 1 media 0.150 ## 2 sigma 0.106 Así que nuestra estimación final sería: bind_cols(est_mle, error_est) |> mutate(across(where(is.numeric), round, 3)) |> select(parametro, estimador, ee_boot) ## parametro estimador ee_boot ## media media 1.136 0.150 ## sigma sigma 1.838 0.106 Si usamos la rutina estándar de R (dejaremos para después explicar cómo calcula los errores estándar esta rutina —no es con bootstrap): broom::tidy(MASS::fitdistr(muestra, "normal")) ## # A tibble: 2 × 3 ## term estimate std.error ## <chr> <dbl> <dbl> ## 1 mean 1.14 0.150 ## 2 sd 1.84 0.106 Podemos revisar también la normalidad aproximada de las distribuciones bootstrap para construir nuestros intervalos: ggplot(reps_boot, aes(sample = estimador_boot)) + geom_qq() + geom_qq_line(colour = "red") + facet_wrap(~parametro, scales = "free_y") La distribuciones son aproximadamente normales. Nótese que esto no siempre sucede, especialmente con parámetros de dispersión como \\(\\sigma\\). Ejemplo. Supongamos que tenemos una muestra más chica. Repasa los pasos para asegurarte que entiendes el procedimiento: set.seed(4182) muestra <- rnorm(6, mean = 1, sd = 2) # función de verosimilitud log_p <- crear_log_p(muestra) # máxima verosimilitud res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mle <- tibble(parametro = c("media", "sigma"), estimador = res$par) |> column_to_rownames(var = "parametro") est_mle ## estimador ## media 0.3982829 ## sigma 2.3988969 Hacemos bootstrap paramétrico reps_boot <- map_dfr(1:5000, ~ rep_boot(.x, crear_log_p, est_mle, n = length(muestra)), .id = "rep") reps_boot ## # A tibble: 10,000 × 3 ## rep parametro estimador_boot ## <chr> <chr> <dbl> ## 1 1 media 0.789 ## 2 1 sigma 0.945 ## 3 2 media -0.103 ## 4 2 sigma 1.37 ## 5 3 media 1.96 ## 6 3 sigma 1.70 ## 7 4 media 1.55 ## 8 4 sigma 2.28 ## 9 5 media -0.228 ## 10 5 sigma 1.73 ## # ℹ 9,990 more rows ggplot(reps_boot, aes(sample = estimador_boot)) + geom_qq() + geom_qq_line(colour = "red") + facet_wrap(~parametro, scales = "free_y") ggplot(reps_boot, aes(x = estimador_boot)) + geom_histogram() +facet_wrap(~parametro) Donde vemos que la distribución de \\(\\sigma\\) es asimétrica pues en algunos casos obtenemos estimaciones muy cercanas a cero. Podemos usar intervalos de percentiles. Ejercicio (extra). Con más de un parámetro, podemos preguntarnos cómo dependen las estimaciones individuales - en algunos casos pueden estar correlacionadas. Podemos examinar este comportamiendo visualizando las replicaciones bootstrap ggplot(reps_boot |> pivot_wider(names_from = parametro, values_from = estimador_boot), aes(x = media, y = sigma)) + geom_point(alpha = 0.5) + coord_equal() Esta es nuestra aproximación a la distribución de remuestreo de nuestro par de estadísticas \\((\\mu_{\\mathsf{MLE}}, \\sigma_{\\mathsf{MLE}})\\). En este caso, parecen ser independientes (lo cual es posible demostrar). Bootstrap paramétrico. Supongamos que tenemos una muestra iid \\(X_1,X_2,\\ldots, X_n \\sim f(x;\\theta)\\) de un modelo paramétrico, y un estimador de máxima verosimilitud \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) para \\(\\theta\\). El error estándar estimado para \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) por medio del bootstrap paramétrico se calcula como sigue: Se calcula \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) para la muestra observada Se simula una muestra iid de tamaño \\(n\\) de \\(f(x; \\hat{\\theta}_{\\mathsf{MLE}})\\) (muestra bootstrap) Se recalcula el estimador de máxima verosimilitud para la muestra bootstrap \\(\\hat{\\theta^*}_{\\mathsf{MLE}}\\) Se repiten 2-3 una cantidad grande de veces (1000 - 10000) Se calcula la desviación estándar de los valores \\(\\hat{\\theta^*}_{\\mathsf{MLE}}\\) obtenidos. Este es el error estándar estimado para el estimador \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) Ventajas y desventajas de bootstrap paramétrico Ventaja: el bootstrap paramétrico puede dar estimadores más precisos e intervalos más angostos y bien calibrados que el no paramétrico, siempre y cuando el modelo teórico sea razonable. Desventaja: Es necesario decidir el modelo teórico, que tendrá cierto grado de desajuste vs. el proceso generador real de los datos. Si el ajuste es muy malo, los resultados tienen poca utilidad. Para el no paramétrico no es necesario hacer supuestos teóricos. Ventaja: el bootstrap paramétrico puede ser más escalable que el no paramétrico, pues no es necesario cargar y remuestrear los datos originales, y tenemos mejoras adicionales cuando tenemos expresiones explícitas para los estimadores de máxima verosimilitud (como en el caso normal, donde es innecesario hacer optimización numérica). Desventaja: el bootstrap paramétrico es conceptualmente más complicado que el no paramétrico, y como vimos arriba, sus supuestos pueden ser más frágiles que los del no-paramétrico. Verificando los supuestos distribucionales Como hemos discutido antes, podemos hacer pruebas de hipótesis para revisar si una muestra dada proviene de una distribución conocida. Sin embargo, la herramienta más común es la de los qq-plots, donde podemos juzgar fácilmente el tamaño de las desviaciones y si estas tienen implicaciones prácticas importantes. El proceso es como sigue: si \\(X_1,X_,\\ldots, X_n\\) es una muestra de \\(f(x;\\theta)\\), calculamos el estimador de máxima verosimilitud \\(\\theta_{\\mathsf{MLE}}\\) con los datos observados. Enchufamos \\(\\hat{f} = f(x;\\theta_{\\mathsf{MLE}})\\), y hacemos una gráfica de los cuantiles teóricos de \\(\\hat{f}\\) contra los cuantiles muestrales. Ejemplo. Consideramos la siguiente muestra: set.seed(32) muestra <- rgamma(150, 0.4, 1) qplot(muestra) Y queremos usar un modelo exponencial. Encontramos los estimadores de maxima verosimilitud est_mle <- MASS::fitdistr(muestra, "exponential") rate_mle <- est_mle$estimate rate_mle ## rate ## 2.76054 g_exp <- ggplot(tibble(muestra = muestra), aes(sample = muestra)) + geom_qq(distribution = stats::qexp, dparams = list(rate = rate_mle)) + geom_abline() + labs(subtitle = "Gráfica de cuantiles exponenciales") g_exp Donde vemos que el desajuste es considerable, y los datos tienen una cola derecha considerablemente más larga que la de exponencial (datos son casi dos veces más grande de lo que esperaríamos), y la cola izquierda está más comprimida en los datos que en una exponencial. Sin embargo, si ajustamos una gamma: est_mle <- MASS::fitdistr(muestra, "gamma")$estimate g_gamma <- ggplot(tibble(muestra = muestra), aes(sample = muestra)) + geom_qq(distribution = stats::qgamma, dparams = list(shape = est_mle[1], rate = est_mle[2])) + geom_abline() + labs(subtitle = "Gráfica de cuantiles gamma") g_exp + g_gamma El ajuste es considerablemente mejor para la distribución gamma (puedes hacer el protocolo rorschach para afinar tu diagnóstico de este tipo de gráficas). Ejempĺo. Examinamos un modelo teórico para las cuentas totales del conjunto de datos de propinas. En primer lugar: Separamos comida y cena, pues sabemos que las cuentas tienden a ser más grandes en las cenas. En lugar de modelar la cuenta total, modelamos el gasto por persona, es decir, la cuenta total dividida por el numero de personas. Grupos grandes pueden producir colas largas que no tenemos necesidad de modelar de manera probabilística, pues conocemos el número de personas. En este caso intentaremos un modelo lognormal, es decir, el logaritmo de los valores observados se comporta aproximadamente normal. Puedes también intentar con una distribución gamma. Separamos por Cena y Comida, dividimos entre número de personas y probamos ajustando un modelo para cada horario: propinas <- read_csv("data/propinas.csv") |> mutate(cuenta_persona = cuenta_total / num_personas) propinas_mle <- propinas |> group_by(momento) |> summarise(est_mle = list(tidy(MASS::fitdistr(cuenta_persona, "lognormal")))) |> unnest(est_mle) propinas_mle ## # A tibble: 4 × 4 ## momento term estimate std.error ## <chr> <chr> <dbl> <dbl> ## 1 Cena meanlog 2.03 0.0273 ## 2 Cena sdlog 0.362 0.0193 ## 3 Comida meanlog 1.94 0.0366 ## 4 Comida sdlog 0.302 0.0259 Ojo: estos parámetros están en escala logarítmica. Puedes revisar aquí para ver cómo calcular media y desviación estándar de las distribuciones originales. Ahora verificamos el ajuste: g_1 <- ggplot(propinas |> filter(momento == "Cena"), aes(sample = cuenta_persona)) + geom_qq(dparams = list(mean = propinas_mle$estimate[1], sd = propinas_mle$estimate[2]), distribution = stats::qlnorm) + ylim(c(0, 20)) + geom_abline() + labs(subtitle = "Cena") g_2 <- ggplot(propinas |> filter(momento == "Comida"), aes(sample = cuenta_persona)) + geom_qq(dparams = list(mean = propinas_mle$estimate[3], sd = propinas_mle$estimate[4]), distribution = stats::qlnorm) + ylim(c(0, 20)) + geom_abline() + labs(subtitle = "Comida") g_1 + g_2 El ajuste es bueno, aunque podríamos revisar la cola de la derecha en la Comida: ¿por qué existen esos valores relativamente grandes (alrededor de 25% más altos de lo que esperaríamos). ¿Tiene sentido ajustar dos distribuciones con parámetros separados? ¿Crees que estas dos distribuciones podrían compartir algún parámetro? Para esto puedes revisar el error estándar de los estimadores de máxima verosimilitud que mostramos arriba. ¿Qué ventajas verías en usar menos parámetros? ¿Cómo implementarías la estimación? ¿Qué pasa si intentas ajustar un modelo normal a estos datos? Modelos mal identificados Para algunos modelos y algunos parámetros, puede suceder que existan varias configuraciones muy diferentes de los parámetros que sean consistentes con los datos (en términos de verosimilitud, tienen verosimilitud alta similar), y en estos casos decimos que el modelo (con los datos observados) está mal identificado. Esto presenta problemas múltiples: optimizar es más difícil, hay incertidumbre grande en la estimación, y los parámetros se acoplan, haciendo difícil su interpretación. Ejemplo. Consideremos el ejemplo donde queríamos estimar dos proporciones: la proporción de examenes contestados al azar y la tasa de correctos. Vamos a suponer que la probabilidad de tener respuesta correcta dado que el examen no fue contestado al azar no es muy lejano a 1/5, que es la probabilidad de acertar a al azar. Aquí está la función para simular y la log verosimilitud correspondiente. Aquí vamos a ver un problema más difícil, así que usaremos la transformación logit para las proporciones, y no obtener resultados fuera del rango 0-1 al optimizar: inv_logit <- function(theta){ exp(theta) / (1 + exp(theta)) } logit <- function(p){ log(p / (1-p)) } # Simular datos sim_formas <- function(probs){ p_azar <- probs[1] p_corr <- probs[2] tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } simular_modelo <- function(n, params){ muestra <- map_dbl(1:n, ~ sim_formas(probs = inv_logit(params))) muestra } # log verosimilitud crear_log_p <- function(x){ log_p <- function(pars){ p_azar = inv_logit(pars[1]) p_corr = inv_logit(pars[2]) sum(log(p_azar * dbinom(x, 10, 1/5) + (1 - p_azar) * dbinom(x, 10, p_corr))) } log_p } # simular datos set.seed(12) muestra <- simular_modelo(2000, params = logit(c(0.3, 0.29))) qplot(muestra) log_p <- crear_log_p(muestra) res <- optim(c(0.0, 0.0), log_p, control = list(fnscale = -1)) res$convergence ## [1] 0 est_mle <- res$par names(est_mle) <- c("p_azar_logit", "p_corr_logit") est_mle ## p_azar_logit p_corr_logit ## -0.9194029 -0.8896454 probs_mle <- inv_logit(est_mle) names(probs_mle) <- c("p_azar", "p_corr") probs_mle ## p_azar p_corr ## 0.2850796 0.2911830 En primer lugar, parece ser que nuestras estimaciones son menos precias. Vamos a hacer bootstrap paramétrico: rep_boot <- function(rep, simular, crear_log_p, pars, n){ muestra_bootstrap <- simular(n, pars) log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0.0, 0.0), log_p_boot, control = list(fnscale = -1)) try(if(res_boot$convergence != 0) stop("No se alcanzó convergencia.")) est_mle_boot <- res_boot$par names(est_mle_boot) <- names(pars) est_mle_boot["rep"] <- rep est_mle_boot["convergence"] <- res_boot$convergence est_mle_boot } set.seed(8934) reps_boot <- map(1:500, ~ rep_boot(.x, simular_modelo, crear_log_p, est_mle, n = length(muestra))) |> bind_rows() reps_boot |> mutate(across(everything(), round, 2)) |> head() ## # A tibble: 6 × 4 ## p_azar_logit p_corr_logit rep convergence ## <dbl> <dbl> <dbl> <dbl> ## 1 -1.14 -0.92 1 0 ## 2 -1.11 -0.85 2 0 ## 3 -1.17 -0.95 3 0 ## 4 -2.74 -1.01 4 0 ## 5 -1.05 -0.93 5 0 ## 6 -0.91 -0.87 6 0 El optimizador encontró resultados que no tienen sentido: ggplot(reps_boot, aes(x = inv_logit(p_azar_logit), y = inv_logit(p_corr_logit), colour = factor(convergence))) + geom_point(show.legend = FALSE) + xlab("p_azar") + ylab("p_corr") Y notamos un problema grave: Tenemos mucha variación en nuestros estimadores, y la correlación entre las estimaciones es alta. Esto deberíamos haberlo esperado, pues como las probabilidades de contestar correctamente son muy similares a las de contestar al azar: Existen muchas combinaciones de parámetros que son consistentes con los datos. Decimos entonces que este modelo está mal identificado con estos datos. La mala identificación, como vemos, es una propiedad tanto de modelo como datos. ¿Qué conclusiones acerca del examen obtienes al ver estas simulaciones bootstrap? ¿Cómo se deberían reportar estos resultados? Qué pasa en este ejemplo si la \\(p_{corr}\\) es más grande, o el tamaño de muestra es más grande? Repite el ejercicio con los parámetros del primer ejemplo (\\(p_{azar} = 0.3, p_{corr}=0.75\\)) y el mismo tamaño de muestra. ¿Qué sucede en este caso? En el caso extremo, decimos que el modelo no está indentificado, y eso generalmente sucede por un problema en el planteamiento del modelo, independientemente de los datos. ¿Puedes imaginar un modelo así? "],["propiedades-teóricas-de-mle.html", "Sección 8 Propiedades teóricas de MLE Consistencia Equivarianza del \\(\\textsf{MLE}\\) Normalidad asintótica Optimalidad del \\(\\textsf{MLE}\\)", " Sección 8 Propiedades teóricas de MLE El método de máxima verosimiltud es uno de los métodos más utilizados en la inferencia estadística paramétrica. En esta sección estudiaremos las propiedades teóricas que cumplen los estimadores de máxima verosimilitud (\\(\\textsf{MLE}\\)) y que han ayudado en su casi adopción universal. Estas propiedades de los \\(\\textsf{MLE}\\) son válidas siempre y cuando el modelo \\(f(x; \\theta)\\) satisfaga ciertas condiciones de regularidad. En particular veremos las condiciones para que los estimadores de máxima verosimilitud sean: consistentes, asintóticamente normales, asintóticamente insesgados, asintóticamente eficientes, y equivariantes. Los estimadores \\(\\textsf{MLE}\\) en ocasiones son malinterpretados como una estimación puntual en la inferencia, y por ende, incapaces de cuantificar incertidumbre. A lo largo de estas notas hemos visto cómo extraer intervalos de confianza por medio de simulación y por lo tanto incorporar incertidumbre en la estimación. Sin embargo, hay otros maneras de reportar incertidumbre para \\(\\textsf{MLE}\\). Y hablaremos de ello en esta sección. A lo largo de esta sección asumiremos muestras de la forma \\[\\begin{align} X_1, \\ldots, X_n \\overset{\\text{iid}}{\\sim} f(x; \\theta^*), \\end{align}\\] donde \\(\\theta^*\\) es el valor verdadero —que suponemos desconocido pero fijo— del parámetro \\(\\theta \\in \\Theta\\), y sea \\(\\hat \\theta_n\\) el estimador de máxima verosimilitud de \\(\\theta.\\) Ejemplo Usaremos este ejemplo para ilustrar los diferentes puntos teóricos a lo largo de esta sección. Consideremos el caso de una muestra de variables binarias que registran el éxito o fracaso de un experimento. Es decir, \\(X_1, \\ldots, X_n \\sim \\textsf{Bernoulli}(p),\\) donde el párametro desconocido es el procentaje de éxitos. Éste último denotado por \\(p.\\) Este ejemplo lo hemos estudiado en secciones pasadas, y sabemos que el \\(\\textsf{MLE}\\) es \\[\\begin{align} \\hat p_n = \\frac{S_n}{n} = \\bar X_n, \\end{align}\\] donde \\(S_n= \\sum_i X_i\\) es el número total de éxitos en la muestra. La figura siguiente ilustra el estimador \\(\\hat p_n\\) como función del número de observaciones en nuestra muestra. Podemos apreciar cómo el promedio parece estabilizarse alrededor del verdadero valor de \\(p^* = 0.25\\) cuando tenemos una cantidad suficientemente grande de observaciones. Como es de esperarse, diferentes muestras tendrán diferentes valores de \\(n\\) dónde las trayectorias parezca que se haya estabilizado (Ver figura siguiente). Sin embargo, se puede notar que este comportamiento parece estar controlado y son raras las trayectorias que se encuentran más lejos. Los conceptos siguientes nos permitirán cuantificar el porcentaje de trayectorias que se mantienen cercanas a \\(p^*,\\) en el caso límite de un número grande de observaciones, cuando trabajemos con estimadores de máxima verosimilitud. Más aún, nos permitirán cracterizar la distribución para dicho límite y aprenderemos de otras propiedades bajo este supuesto asintótico. Consistencia Es prudente pensar que para un estimador, lo que nos interesa es que conforme más información tengamos, más cerca esté del valor desconocido. Esta propiedad la representamos por medio del concepto de consistencia. Para hablar de esta propiedad necesitamos definir un tipo de convergencia para una secuencia de variables aleatorias, convergencia en probabilidad. Definición. Una sucesión de variables aleatorias \\(X_n\\) converge en probabilidad a la variable aleatoria \\(X,\\) lo cual denotamos por \\(X_n \\overset{P}{\\rightarrow} X\\), si para toda \\(\\epsilon \\gt 0\\), \\[\\lim_{n \\rightarrow \\infty} \\mathbb{P}(|X_n - X| > \\epsilon) = 0.\\] Ahora, definimos un estimador consistente como: Definición. Un estimador \\(\\tilde \\theta_n\\) es consistente si converge en probabilidad a \\(\\theta^*.\\) Donde \\(\\theta^*\\) denota el verdadero valor del parámetro, que asumimos fijo. En particular, los estimadores \\(\\textsf{MLE}\\) son consistentes. Teorema. Sea \\(X_n \\sim f(X; \\theta^*),\\) una muestra iid, tal que \\(f(X; \\theta)\\) cumple con ciertas condiciones de regularidad. Entonces, \\(\\hat \\theta_n,\\) el estimador de máxima verosimilitud, converge en probabilidad a \\(\\theta^*.\\) Es decir, \\(\\hat \\theta_n\\) es consistente. La demostración de este teorema la pueden encontrar en Wasserman (2013). Ejemplo El estimador \\(\\hat p_n\\) es consistente. Esto quiere decir que el estimador se vuelve más preciso conforme obtengamos más información. En general esta es una propiedad que los estimadores deben satisfacer para ser útiles en la práctica. La figura siguiente muestra el estimador \\(\\hat p_n\\) como función del número de observaciones utilizado. Distintas curvas corresponden a distintas realizaciones de muestras obtenidas del modelo (\\(B = 500\\)). Nota que la banda definida por \\(\\epsilon\\) se puede hacer tan pequeña como se requiera, lo único que sucederá es que necesitaremos un mayor número de observaciones para garantizar que las trayectorias de los estimadores \\(\\hat p_n\\) se mantengan dentro de las bandas con alta probabilidad. Equivarianza del \\(\\textsf{MLE}\\) Muchas veces nos interesa reparametrizar la función de verosimilitud con el motivo de simplificar el problema de optimización asociado, o simplemente por conveniencia interpretativa. Por ejemplo, si el parámetro de interés es tal que \\(\\theta \\in [a, b],\\) entonces encontrar el \\(\\textsf{MLE}\\) se traduce en optimizar la log-verosimilitud en el espacio restringido al intervalo \\([a,b].\\) En este caso, los métodos tradicionales de búsqueda local por descenso en gradiente podrían tener problemas de estabilidad cuando la búsqueda se realice cerca de las cotas. El concepto de equivarianza nos dice que si el cambio de coordenadas parametrales está definida, y si este cambio de variable se realiza por medio de una función bien comportada (derivable y cuya derivada no es cero), entonces la solución de encontrar el \\(\\textsf{MLE}\\) en las coordenadas originales y transformar, es igual a realizar la inferencia en las coordenadas fáciles. Teorema. Sea \\(\\tau = g(\\theta)\\) una función de \\(\\theta\\) bien comportada. Entonces si \\(\\hat \\theta_n\\) es el \\(\\textsf{MLE}\\) de \\(\\theta,\\) entonces \\(\\hat \\tau_n = g(\\hat \\theta_n)\\) es el \\(\\textsf{MLE}\\) de \\(\\tau.\\) Ejemplo El concepto de equivarianza lo ilustraremos para nuestro ejemplo de esta sección. En particular la parametrización la realizamos por cuestiones de interpretación como un factor de riesgo. Como hemos visto estimador \\(\\hat p_n\\) es equivariante. Es importante mencionar que esta propiedad es general para cualquier tamaño de muestra. Es decir, no descansa en supuestos de muestras grandes. Supongamos que nos interesa estimar el momio de éxitos (bastante común en casas de apuestas). El momio está definido como \\[ \\theta = \\frac{p}{1-p},\\] y podemos rescribir la función de verosimilitud en términos de este parámetro. Sustituyendo \\(p = \\frac{\\theta}{1+\\theta}\\) en \\(\\mathcal{L}_n(p)\\) obtenemos \\[\\begin{align} \\mathcal{L}_n(\\theta) = \\left( \\frac{\\theta}{1 + \\theta} \\right)^{S_n} \\left(\\frac{1}{1 + \\theta} \\right)^{n - S_n}, \\end{align}\\] cuya función encuentra su máximo en \\[\\begin{align} \\hat \\theta_n = \\frac{\\bar X_n}{ 1 - \\bar X_n}. \\end{align}\\] Comprueba que el estimador de arriba para \\(\\theta\\) es el MLE. Normalidad asintótica Está propiedad nos permite caracterizar la distribución asintótica del MLE. Es decir, nos permite caracterizar la incertidumbre asociada una muestra suficientemente grande por medio de una distribución Gaussiana. Esto es, bajo ciertas condiciones de regularidad, \\[\\hat \\theta_n \\overset{.}{\\sim} \\mathsf{N}( \\theta^*, \\mathsf{ee}^2),\\] donde \\(\\mathsf{ee}\\) denota el error estándar del \\(\\textsf{MLE},\\) \\(\\mathsf{ee} = \\mathsf{ee}(\\hat \\theta_n) = \\sqrt{\\mathbb{V}(\\hat \\theta_n)}\\). Esta distribución se puede caracterizar de manera aproximada por métodos analíticos. Para esto necesitamos las siguientes definiciones. Definición. La función de score está definida como \\[\\begin{align} s(X; \\theta) = \\frac{\\partial \\log f(X; \\theta)}{\\partial \\theta}. \\end{align}\\] La información de Fisher está definida como \\[\\begin{align} I_n(\\theta) &= \\mathbb{V}\\left( \\sum_{i = 1}^ns(X_i; \\theta) \\right) \\\\ &= \\sum_{i = 1}^n \\mathbb{V} \\left(s(X_i; \\theta) \\right) \\end{align}\\] Estas cantidades nos permiten evaluar qué tan fácil será identificar el mejor modelo dentro de la familia parámetrica \\(f(X; \\theta)\\). La función de score nos dice qué tanto cambia locamente la distribución cuando cambiamos el valor del parámetro. Calcular la varianza, nos habla de la dispersión de dicho cambio a lo largo del soporte de la variable aleatoria \\(X.\\) Si \\(I_n(\\theta)\\) es grande entonces el cambio de la distribución es muy importante. Esto quiere decir que la distribución es muy diferente de las distribuciones cercanas que se generen al evaluar en \\(\\theta\\)s diferentes. Por lo tanto, si \\(I_n(\\theta)\\) es grande, la distribución será fácil de identificar cuando hagamos observaciones. La información de Fisher también nos permite caracterizar de forma analítica la varianza asíntotica del \\(\\textsf{MLE}\\) pues la aproximación \\(\\mathsf{ee}^2 \\approx \\frac{1}{I_n(\\theta^*)}\\) es válida. El siguiente resultado utiliza la propiedad de la función de score: \\(\\mathbb{E}[s(X; \\theta)] = 0,\\) que implica que \\(\\mathbb{V} \\left(s(X_i; \\theta) \\right) = \\mathbb{E}[s^2(X; \\theta)],\\) y permite a su vez un cómputo más sencillo de la información de Fisher. Teorema. El cálculo de la información de Fisher para una muestra de tamaño \\(n\\) se puede calcular de manera simplificada como \\(I_n(\\theta) = n \\, I(\\theta).\\) Por otro lado, tenemos la siguiente igualdad \\[ I(\\theta) = - \\mathbb{E}\\left( \\frac{\\partial^2 \\log f(X; \\theta)}{\\partial \\theta^2} \\right).\\] Con estas herramientas podemos formular el teorema siguiente. Teorema. Bajo ciertas condiciones de regularidad se satisface que \\(\\mathsf{ee} \\approx \\sqrt{1/I_n(\\theta^*)}\\) y \\[ \\hat \\theta_n \\overset{d}{\\rightarrow} \\mathsf{N}( \\theta^*, \\mathsf{ee}^2).\\] El resultado anterior es teóricamente interesante y nos asegura un comportamiento controlado conforme tengamos más observaciones disponibles. Sin embargo, no es práctico pues no conocemos \\(\\theta^*\\) en la práctica y por consiguiente no conoceríamos la varianza. Sin embargo, también podemos aplicar el principio de plug-in y caracterizar la varianza de la distribución asintótica por medio de \\[\\hat{\\mathsf{ee}} = \\sqrt{1/I_n(\\hat \\theta_n)}.\\] Esto último nos permite constuir intervalos de confianza, por ejemplo al 95%, a través de \\[ \\hat \\theta_n \\pm 2 \\, \\hat{\\mathsf{ee}}.\\] Asimismo, el teorema de Normalidad asintótica nos permite establecer que el \\(\\textsf{MLE}\\) es asíntoticamente insesgado. Es decir, \\[\\lim_{n \\rightarrow \\infty}\\mathbb{E}[\\hat \\theta_n] = \\theta^*.\\] Definición. Sea una muestra \\(X_1, \\ldots, X_n \\overset{iid}{\\sim} f(X; \\theta^*)\\). Un estimador \\(\\tilde \\theta_n\\) es insesgado si satisface que \\[\\mathbb{E}[\\tilde \\theta_n] =\\theta^*.\\] El sesgo del estimador es precisamente la diferencia: \\(\\textsf{Sesgo} = \\mathbb{E}[\\tilde \\theta_n] - \\theta^*.\\) Ejemplo: Información de Fisher En el caso Bernoulli obtenemos \\(I_n(\\theta) = \\frac{n}{\\theta(1-\\theta)}\\), si \\(n = 20\\) podemos comparar con \\(\\theta=0.5, 0.7, 0.8\\), library(patchwork) # Verosimilitud X_1,...,X_n ~ Bernoulli(theta) L_bernoulli <- function(n, S){ function(theta){ theta ^ S * (1 - theta) ^ (n - S) } } xy <- data.frame(x = 0:1) l_b1 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 10)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 10") + ylim(0, 5e-05) l_b2 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 14)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 14") + ylim(0, 5e-05) l_b3 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 16)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 19") + ylim(0, 5e-05) l_b1 + l_b2 + l_b3 Ejemplo: Normalidad Regresando a nuestro ejemplo. Veremos empiricamente que el estimador \\(\\hat \\theta_n\\) es asintóticamente normal. Esta propiedad la hemos visto anteriormente para un caso muy particular. Lo vimos en el TLC para el caso de promedios, \\(\\bar X_n,\\) que en nuestro ejemplo corresponde a \\(\\hat p_n\\). Como hemos visto, esta propiedad la satisface cualquier otro estimador que sea máximo verosímil. Por ejemplo, podemos utilizar el \\(\\mathsf{MLE}\\) de los momios. La figura que sigue muestra la distribución de \\(\\hat \\theta_n\\) para distintas remuestras \\((B = 500)\\) con distintos valores de \\(n.\\) El gráfico anterior valida empíricamente la distribución asintótica para casos de muchas observaciones. A continuación ilustraremos cómo explotar este resultado para obtener intervalos de confianza. Para el caso de \\(\\hat p_n\\) hemos visto que el error estándar se calcula analíticamente como \\[\\textsf{ee}_p^2 = \\mathbb{V}(\\hat p_n) = \\mathbb{V}\\left(\\frac1n \\sum_{i = 1}^n x_i\\right) = \\frac{p^* (1 - p^*)}{n}.\\] Éste empata con el valor del error estándar asintótico \\[\\textsf{ee}_p^2 \\approx \\sqrt{\\frac{1}{I_n(p^*)}},\\] pues la información de Fisher es igual a \\[I_n(p) = n \\, I(p) = \\frac{n}{p ( 1- p)}.\\] En este caso podemos utilizar el estimador plug-in, \\(\\hat{\\textsf{ee}}_p = \\textsf{ee}_p(\\hat p_n).\\) Para estimar el momio, \\(\\theta,\\) el cálculo no es tan fácil pues tendríamos que calcular de manera analítica la varianza de un cociente \\[\\textsf{ee}_\\theta^2 = \\mathbb{V}\\left( \\frac{\\hat p_n}{1-\\hat p_n}\\right).\\] Utilizando la distirbución asintótica, el error estándar se puede calcular mediante \\[\\textsf{ee}_\\theta \\approx \\sqrt{\\frac{1}{I_n(\\theta^*)}} = \\sqrt{\\frac{\\theta (1 + \\theta)^2 }{n}}.\\] A continuación mostramos los errores estándar para nuestro ejemplo utilizando la distribución asintótica y por medio de la distribución de bootstrap. Como es de esperarse, ambos coinciden para muestras relativamente grandes. # Genero muestra muestras <- tibble(tamanos = 2**seq(4,7)) %>% mutate(obs = map(tamanos, ~rbernoulli(., p = p_true))) calcula_momio <- function(x){ x / (1 - x) } calcula_ee_momio <- function(x){ sqrt(((1+x)**2) * x) } # Calculo MLE muestras_est <- muestras %>% group_by(tamanos) %>% mutate(media_hat = map_dbl(obs, mean), media_ee = sqrt(media_hat * (1 - media_hat)/tamanos), momio_hat = calcula_momio(media_hat), momio_ee = calcula_ee_momio(momio_hat)/sqrt(tamanos)) # Calculo por bootstrap muestras_boot <- muestras_est %>% group_by(tamanos) %>% mutate(sims_muestras = map(tamanos, ~rerun(1000, sample(muestras %>% filter(tamanos == ..1) %>% unnest(obs) %>% pull(obs), size = ., replace = TRUE))), sims_medias = map(sims_muestras, ~map_dbl(., mean)), sims_momios = map(sims_medias, ~map_dbl(., calcula_momio)), media_boot = map_dbl(sims_medias, mean), momio_boot = map_dbl(sims_momios, mean), media_ee_boot = map_dbl(sims_medias, sd), momio_ee_boot = map_dbl(sims_momios, sd) ) ## # A tibble: 4 × 5 ## # Groups: tamanos [4] ## tamanos momio_hat momio_boot momio_ee momio_ee_boot ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 16 0.333 0.367 0.192 0.236 ## 2 32 0.333 0.342 0.136 0.140 ## 3 64 0.123 0.123 0.0492 0.0498 ## 4 128 0.407 0.417 0.0793 0.0800 Comprueba las fórmulas para los errores estándar tanto para la probabilidad de éxito como para los momios. El método delta El ejercicio anterior nos sugiere una pregunta natural: Cómo establecer la distribución asintótica de un estimador cuando ya se conoce la de una pre-imagen de él? Es decir, si ya conocemos la distribución de \\(\\theta,\\) podemos establecer la distribución de \\(\\tau = g(\\theta)?\\) La respuesta es afirmativa y la enunciamos por medio de un teorema. El resultado se conoce como el método delta. Teorema. Si \\(\\tau = g(\\theta)\\) es una función diferenciable y \\(g'(\\theta) \\neq 0\\), entonces \\[\\hat \\tau_n \\overset{d}{\\rightarrow} \\mathsf{N}( \\tau^*, \\hat{\\mathsf{ee}}^2_\\tau),\\] donde \\(\\hat \\tau_n = g(\\hat \\theta_n)\\) y \\[\\hat{\\mathsf{ee}}_\\tau = \\bigg| g'(\\hat \\theta_n) \\bigg| \\times \\hat{\\mathsf{ee}}_\\theta(\\hat \\theta_n).\\] Por ejemplo, este resultado lo podemos utilizar para nuestro experimento de Bernoullis. Pues \\(g(p) = \\frac{p}{1-p}\\) es una función diferenciable y por lo tanto \\[\\hat{\\mathsf{ee}}_\\theta = \\sqrt{\\frac1n} \\times \\left[ \\hat p_n^{1/2} (1-\\hat p_n)^{-3/2}\\right].\\] Comprueba la fórmula del método delta para el momio en función de la fracción de éxitos, y también comprueba que de el mismo resultado analítico que habías calculado en el ejercicio anterior. Optimalidad del \\(\\textsf{MLE}\\) Consideremos el caso de una muestra iid \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\theta, \\sigma^2).\\) Y consideremos dos estimadores para \\(\\theta.\\) El primero será la media muestral \\(\\bar X_n\\) y el segundo la mediana muestral, la cual denotaremos por \\(\\tilde \\theta_n.\\) Sabemos que ambos son insesgados. Por lo tanto, en promedio emiten estimaciones correctas. Pero ¿cómo escogemos cual utilizar? Un criterio para comparar estimadores es el error cuadrático medio (\\(\\textsf{ECM}\\), por sus siglas en inglés). Definición. El error cuadrático medio de un estimador \\(\\tilde \\theta_n\\) se calcula como \\[\\textsf{ECM}[\\tilde \\theta_n] = \\mathbb{E}[(\\tilde \\theta_n - \\theta^*)^2].\\] Por lo tanto, el \\(\\textsf{ECM}\\) mide la distancia promedio entre el estimador y el valor verdadero valor del parámetro. La siguiente igualdad es bastante útil para comparar dos estimadores. \\[\\textsf{ECM}[\\tilde \\theta_n] = \\mathbb{V}\\left(\\tilde \\theta_n\\right) + \\textsf{Sesgo}\\left[\\tilde \\theta_n\\right]^2.\\] Por lo tanto si dos estimadores son insesgados, uno es más eficiente que el otro si su varianza es menor. La media sabemos que es el \\(\\textsf{MLE}\\) y por el TCL tenemos que \\[\\sqrt{n} \\left( \\bar X_n - \\theta \\right) \\overset{d}{\\rightarrow} \\mathsf{N}( 0, \\sigma^2).\\] La mediana, en contraste, tiene una distribución asintótica \\[\\sqrt{n} \\left( \\tilde X_n - \\theta \\right) \\overset{d}{\\rightarrow} \\mathsf{N}\\left( 0, \\sigma^2 \\frac{\\pi}{2}\\right),\\] es decir tiene una varianza ligeramente mayor. Por lo tanto, decimos que la mediana tiene una eficiencia relativa con respecto a la media del \\(.63 \\% (\\approx 2/\\pi)\\). Es decir, la mediana sólo utliza una fracción de los datos comparado con la media. El siguiente teorema, la desigualdad de Cramer-Rao, nos permite establecer esta resultado de manera mas general para cualquier estimador insesgado. Teorema. Sea \\(\\tilde \\theta_n\\) cualquier estimador insesgado de \\(\\theta\\) cuyo valor verdadero es \\(\\theta^*,\\) entonces \\[\\begin{align} \\mathbb{V}(\\tilde \\theta_n) \\geq \\frac{1}{n I(\\theta^*)}. \\end{align}\\] Un estimador insesgado que satisfaga esta desigualdad se dice que es eficiente. Nota que el lado derecho de la desigualdad es precisamente la varianza asintótica del \\(\\textsf{MLE}.\\) Por lo tanto, éste es asintóticamente eficiente. Es importante hacer enfásis en que la optimalidad del \\(\\textsf{MLE}\\) es un resultado asintótico. Es decir, sólo se satisface cuando tenemos un número suficiente de observaciones. Qué tan grande debe ser el tamaño de muestra varia de problema a problema. Es por esto que para muestras de tamaño finito se prefieren estimadores que minimicen el \\(\\textsf{ECM},\\) como cuando hacemos regresión ridge o utilizamos el estimador James–Stein para un vector de medias. Referencias "],["más-de-pruebas-de-hipótesis-e-intervalos.html", "Sección 9 Más de pruebas de hipótesis e intervalos Prueba de Wald Observación: pruebas \\(t\\) y práctica estadística Prueba de Wald para dos medias o proporciones Datos pareados Pruebas de cociente de verosimilitud Otro tipo de pruebas Errores tipo I y tipo II Consideraciones prácticas Pruebas múltiples", " Sección 9 Más de pruebas de hipótesis e intervalos En esta sección veremos enfoques más clásicos para analizar una prueba de hipótesis, en particular veremos situaciones donde podemos hacer algunos supuestos teóricos acerca de la distribución de las poblaciones. Esta es una sección complementaria para entender prácticas estadísticas usuales: recuerda que discutimos antes que hacer estimación por intervalos generalmente es más útil que hacer pruebas de hipótesis, y adicionalmente, tenemos también la técnica de pruebas de permutaciones que podemos aplicar en muchos de los casos que discutiremos a continuación. El enfoque básico es el mismo que cuando vimos pruebas de permutaciones: calculamos una estadística de prueba de los datos y luego, con una distribución de referencia (asociada a la hipótesis nula), calculamos un valor-\\(p\\). Si el valor-\\(p\\) es chico, entonces los resultados observados no pueden explicarse fácilmente por variación muestral, y rechazamos la hipótesis nula. Con esta idea básica, y supuestos distribucionales acerca de las poblaciones, podemos construir pruebas que requieren menos cómputo. La desventaja es que hay que checar con cuidado los supuestos distribucionales que hagamos. Si los supuestos son incorrectos, las valores-\\(p\\) no tienen mucho sentido y son difíciles de interpretar. Para esta sección seguiremos más a Wasserman (2013) (capítulo 10), pero puedes revisar también Chihara and Hesterberg (2018) (capítulo 8). Prueba de Wald Como hemos visto, existe normalidad asintótica en varios estimadores que hemos considerado, como medias y proporciones muestrales. También vimos que estimadores de máxima verosimilitud cumplen muchas veces un teorema central del límite. Así que supongamos que tenemos una estadística \\(\\hat{\\theta}_n\\) que estima \\(\\theta\\) y es asintóticamente insesgada y normal. Denotamos por \\(\\hat{\\textsf{ee}}\\) una estimación de su error estándar —hay distintas maneras de hacerlo: por ejemplo, con simulación (bootstrap), o por medios analíticos (teoría). Recuerda que el error estándar de una estadística es la desviación estándar de su distribución de muestreo. Si nos interesa probar la hipótesis de que \\(\\theta = 125\\), por ejemplo, y \\(\\hat{\\theta}_n\\) es aproximadamente normal, entonces podemos construir una distribución de referencia aproximada como sigue: Si la nula es cierta, entonces la distribución de muestreo de \\(\\hat{\\theta}\\) es aproximadamente \\(\\mathsf{N}(125, \\hat{\\textsf{ee}})\\). Esto implica que la siguiente estadística \\(W\\) es aproximadamente normal estándar bajo la nula: \\[W = \\frac{\\hat{\\theta} - 125}{\\hat{\\textsf{ee}}} \\sim \\mathsf{N}(0,1)\\] Por lo que valores lejanos de \\([-2,2]\\), por ejemplo, dan evidencia en contra de la hipótesis nula. Como \\(W\\) no depende de ningún parámetro desconocido, podemos usarla como distribución de referencia para comparar el valor de \\(W\\) que obtuvimos en la muestra. Si observamos para nuestra muestra un valor \\(W=w\\) entonces, el valor-\\(p\\) (dos colas) de esta prueba es, aproximadamente, \\[\\mathsf{valor-}p \\approx P(|Z| > |w|) = 2(1 - \\Phi(|w|))\\] donde \\(Z\\sim \\mathsf{N}(0,1)\\) y \\(\\Phi\\) es su función de distribución acumulada. Ejemplo: media muestral. La media nacional de las escuelas de enlace está alrededor de 454 (matemáticas en 6o. grado). Tomamos una muestra de 180 escuelas del Estado de México, y queremos saber si la media obtenida es consistente o no con la media nacional. Ya que estamos usando como estimador una media de una muestra iid, podemos estimar el error estándar de la media con \\[\\hat{\\textsf{ee}} = s / \\sqrt{n}\\] Obtenemos: set.seed(29) muestra_edomex <- read_csv("data/enlace.csv") |> filter(estado == "ESTADO DE MEXICO") |> sample_n(180) resumen <- muestra_edomex |> summarise(media = mean(mate_6), s = sd(mate_6), n = n()) |> mutate(ee = s / sqrt(n)) resumen ## # A tibble: 1 × 4 ## media s n ee ## <dbl> <dbl> <int> <dbl> ## 1 456. 155. 180 11.5 La hipótesis nula es que la media poblacional del Estado de México es igual a 454. Calculamos el valor-\\(p\\) usando la prueba de Wald: dif <- (resumen |> pull(media)) - 454 ee <- resumen |> pull(ee) w <- dif / ee p <- 2 * (1 - pt(abs(w), 179)) p ## [1] 0.8413082 y vemos que esta muestra es consistente con la media nacional. No tenemos evidencia en contra de que la media del estado de México es muy similar a la nacional. Repite esta prueba con una muestra de Chiapas. ¿Qué resultado obtienes? Tenemos entonces: Prueba de Wald. Consideramos probar la hipótesis nula \\(H_0: \\theta = \\theta_0\\) contra la alternativa \\(H_1: \\theta \\neq \\theta_0\\). Suponemos que \\(\\hat{\\theta}_n\\) es asintóticamente normal e insesgada, de modo que bajo la hipótesis nula \\[\\frac{\\hat{\\theta}_n - \\theta_0}{\\hat{\\textsf{ee}}} \\sim \\mathsf{N}(0,1).\\] Entonces el valor-\\(p\\) de la prueba de Wald para esta hipótesis nula es \\[\\mathsf{valor-}p \\approx P(|Z| > |w|) = 2(1 - \\Phi(|w|)).\\] Ejemplo. Podemos hacer la prueba de Wald para proporciones con el estimador usual \\(\\hat{p}_n\\) que estima una proporción poblacional \\(p\\). En este caso, utilizamos la estimación usual del error estándar de \\(\\hat{p}_n\\), que está dada por \\[\\hat{\\textsf{ee}} = \\sqrt{\\frac{\\hat{p}_n(1-\\hat{p}_n)}{n}}.\\] Supongamos por ejemplo que en nuestros datos observamos que en \\(n=80\\) muestras independientes, tenemos \\(x=47\\) éxitos. ¿Es esto consistente con la hipótesis nula \\(p = 0.5\\)? Calcuamos primero: p_hat <- 47 / 80 ee <- sqrt(p_hat * (1 - p_hat) / 80) y la estadística \\(W\\) de prueba es: w <- (p_hat - 0.5) / ee w ## [1] 1.58978 Calculamos su valor p: valor_p <- 2 * (1 - pnorm(abs(w))) valor_p ## [1] 0.1118843 Y vemos que en este caso tenemos evidencia baja de que la proporción poblacional es distinta de 0.5. Observación: pruebas \\(t\\) y práctica estadística Con más supuestos distribucionales podemos hacer otros tipos de pruebas donde no requerimos hacer supuestos asintóticos. Por ejemplo, si suponemos que la muestra obtenida \\(X_1,\\ldots, X_n\\) proviene de una distribución normal \\(\\mathsf{N}(\\mu, \\sigma)\\) (cosa que es necesario verificar), entonces es posible demostrar que la estadística \\[T = \\frac{\\bar{X} - \\mu}{S / \\sqrt{n}}\\] tiene una distribución exacta que es \\(t\\) de Student con \\(n-1\\) grados de libertad, y no depende de otros parámetros, de manera que podemos usarla como distribución de referencia y podemos calcular valores \\(p\\) exactos (revisa la sección 8.1 de Chihara and Hesterberg (2018)). La diferencia con usar una prueba de Wald está en que aquí consideramos también la variablidad del error estándar estimado, lo que correctamente sugiere que esperamos variaciones proporcionalmente más grandes en \\(T\\) comparado con lo que sucede si no consideramos esta variación (como en la prueba de Wald). Sin embargo: Si la muestra \\(n\\) es grande, la distribución \\(t\\) de Student con \\(n-1\\) grados de libertad es muy similar a la normal estándar, de manera que la aproximación de Wald es apropiada. Cuando la muestra \\(n\\) es chica, es difícil validar el supuesto de normalidad, a menos que tengamos alguna información adicional acerca de la distribución poblacional. La prueba tiene cierta robustez a desviaciones de normalidad de las observaciones, pero si el sesgo es muy grande, por ejemplo, el supuesto es incorrecto y da valores \\(p\\) distorsionados. Puedes ver aquí, o el apéndice B.11 de Chihara and Hesterberg (2018) para ver descripciones de la distribución \\(t\\) y cómo se compara con una normal estándar dependiendo de los grados de libertad. En muchas ocasiones, en la práctica es común no checar supuestos y saltar directamente a hacer pruebas \\(t\\), lo cual no es muy seguro. Si tenemos duda de esos supuestos, podemos hacer pruebas gráficas o de permutaciones, si son apropiadas. Prueba de Wald para dos medias o proporciones Cuando tenemos dos muestras extraidas de manera independiente de dos poblaciones distintas, y queremos ver si la hipótesis de medias poblacionales iguales es consistente con los datos, podemos usar también una prueba de Wald. Sea \\(\\bar{X}_1\\) y \\(\\bar{X}_2\\) las medias muestrales correspondientes. Si la hipótesis de normalidad aplica para ambas distribuciones muestrales (normalidad asintótica), la variable \\[\\hat{\\delta} = \\bar{X}_1 - \\bar{X}_2\\] es aproximadamente normal con media \\(\\mathsf{N}(\\mu_1 - \\mu_2, \\textsf{ee})\\), donde \\(\\mu_1\\) y \\(\\mu_2\\) son las medias poblacionales correspondientes, y donde el error estándar de \\(\\hat{\\delta}\\) es la raíz de la suma de los cuadrados de los errores estándar de \\(\\bar{X}\\) y \\(\\bar{Y}\\): \\[ \\textsf{ee} = \\sqrt{\\textsf{ee}_1^2 + \\textsf{ee}_{2}^2}.\\] Se sigue entonces que: \\[\\textsf{ee} =\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2} }\\] (Nota: usa probabilidad para explicar por qué es cierto esto). De esto se deduce que bajo la hipótesis nula de igualdad de medias \\(\\mu_1 = \\mu_2\\), tenemos que la estadística de Wald \\[W = \\frac{\\hat{\\delta} - 0}{\\sqrt{\\frac{s_1^2}{n_1}+\\frac{s_2^2}{n_2}} } \\sim \\mathsf{N}(0,1)\\] es aproximamente normal estándar. Procedemos entonces a calcular el valor \\(p\\) usando la función de distribución acumulada de la normal estándar. En el caso particular de proporciones, podemos simplificar, como hicimos arriba, a \\[W = \\frac{\\hat{p}_1 - \\hat{p}_2}{\\sqrt{\\frac{\\hat{p}_1(1-\\hat{p}_1)}{n_1}+\\frac{\\hat{p}_2(1-\\hat{p}_2)}{n_2}} } \\sim \\mathsf{N}(0,1)\\] Haz una prueba comparando las medias en enlace de la Ciudad de México vs Estado de México. ¿Hay evidencia de que tienen distintas medias? Ejemplo (Wasserman (2013)). Supongamos tenemos dos conjuntos de prueba para evaluar algoritmos de predicción, de tamaños \\(n_1=100\\) y \\(n_2=250\\) respectivamente, tenemos dos algoritmos para generar predicciones de clase (digamos positivo y negativo). Usaremos el primer conjunto para evaluar el algoritmo 1 y el segundo para evaluar el algoritmo 2. El algoritmo 1 corre en 1 hora, y el algoritmo 2 tarda 24 horas. Supón que obtenemos que la tasa de clasificación correcta del primer algoritmo es \\(\\hat{p}_1 = 0.85\\), y la tasa del segundo es de \\(\\hat{p}_2 = 0.91\\). ¿Estos datos son consistentes con la hipótesis de que los algoritmos tienen desempeño muy similar? Es decir, queremos probar la hipótesis \\(p_1 = p_2\\). Calculamos la estadística de Wald: n_1 <- 100 n_2 <- 250 p_hat_1 <- 0.86 p_hat_2 <- 0.90 ee <- sqrt(p_hat_1 * (1 - p_hat_1) / n_1 + p_hat_2 * (1 - p_hat_2) / n_2) delta = p_hat_1 - p_hat_2 w <- delta / ee w ## [1] -1.011443 que da un valor p de: 2 * (1 - pnorm(abs(w))) ## [1] 0.3118042 Y vemos que valor-\\(p\\) es grande, de forma que los datos son consistentes con la hipótesis de que los algoritmos tienen desempeño similar. ¿Cómo tomaríamos nuestra decisión final? Si la diferencia entre 1 hora y 24 horas no es muy importante, entonces preferíamos usar el algoritmo 2. Sin embargo, si el costo de 24 horas es más alto que 1 hora de corrida, los datos no tienen indicios fuertes de que vayamos a perder en desempeño, y podriamos seleccionar el algoritmo 1. Datos pareados Las pruebas que acabamos de ver para comparar medias requieren poblaciones independientes. Si las dos muestras están pareadas (es decir, son dos mediciones en una misma muestra), podemos tomar considerar las diferencias \\(D_i = X_i - Y_i\\) y utilizar la prueba para una sola muestra con la media \\(\\bar{D}\\). Esta es una prueba de Wald pareada. Ejemplo (Wasserman (2013)). Ahora supongamos que utilizamos la misma muestra de tamaño \\(n=300\\) para probar los dos algoritmos. En este caso, no debemos hacer la prueba para medias de muestras independientes. Sin embargo, esto podemos ponerlo en términos de una prueba para una sola muestra. Tenemos las observaciones \\(X_1,\\ldots, X_n\\) y \\(Y_1,\\dots, Y_n\\), donde \\(X_i=1\\) si el algoritmo 1 clasifica correctamente, y 0 en otro caso. Igualmente, \\(Y_i=1\\) si el algoritmo 2 clasifica correctamente, y 0 en otro caso. Definimos \\[D_i= X_i - Y_i\\] Y \\(D_1,\\ldots, D_n\\) es una muestra iid. Ahora observemos que la media \\(\\bar{D}\\) tiene valor esperado \\(p_1 - p_2\\), donde \\(p_1\\) y \\(p_2\\) son las tasas de correctos del algoritmo 1 y del algoritmo 2 respectivamente. Podemos hacer una prueba de Wald como al principio de la sección: \\[W = \\frac{\\bar{D} - 0}{{\\textsf{ee}}}\\] Y notemos que el error estándar no se calcula como en el ejemplo anterior. Podríamos usar bootstrap para estimarlo, pero en este caso podemos usar el estimador usual \\[\\hat{\\textsf{ee}} = S / \\sqrt{n}\\] donde \\[S = \\frac{1}{n}\\sum_{i=1}^n (D_i - \\bar{D})^2\\] y nótese que necesitamos las decisiones indiviudales de cada algoritmo para cada caso, en contraste al ejemplo anterior de muestras independientes donde los errores estándar se calculaban de manera independiente. Esto tiene sentido, pues la variablidad de \\(\\bar{D}\\) depende de cómo están correlacionados los aciertos de los dos algoritmos. Supongamos por ejemplo que los datos que obtenemos son: datos_clasif |> head() ## # A tibble: 6 × 3 ## caso x y ## <chr> <dbl> <dbl> ## 1 1 1 1 ## 2 2 0 1 ## 3 3 0 1 ## 4 4 0 1 ## 5 5 0 1 ## 6 6 1 0 Como explicamos arriba, nos interesa la diferencia. Calculamos \\(d\\): datos_clasif <- datos_clasif |> mutate(d = x - y) datos_clasif |> head() ## # A tibble: 6 × 4 ## caso x y d ## <chr> <dbl> <dbl> <dbl> ## 1 1 1 1 0 ## 2 2 0 1 -1 ## 3 3 0 1 -1 ## 4 4 0 1 -1 ## 5 5 0 1 -1 ## 6 6 1 0 1 datos_clasif |> summarise(sd_x = sd(x), sd_y = sd(y), sd_d = sd(d)) ## # A tibble: 1 × 3 ## sd_x sd_y sd_d ## <dbl> <dbl> <dbl> ## 1 0.393 0.309 0.539 Y ahora calculamos la media de \\(d\\) (y tasa de correctos de cada clasificador:) medias_tbl <- datos_clasif |> summarise(across(where(is.numeric), mean, .names = "{col}_hat")) d_hat <- pull(medias_tbl, d_hat) medias_tbl ## # A tibble: 1 × 3 ## x_hat y_hat d_hat ## <dbl> <dbl> <dbl> ## 1 0.81 0.893 -0.0833 Ahora necesitamos calcular el error estándar. Como explicamos arriba, hacemos ee <- datos_clasif |> mutate(d_hat = mean(d)) |> mutate(dif_2 = (d - d_hat)) |> summarise(ee = sd(dif_2) / sqrt(n())) |> pull(ee) ee ## [1] 0.03112829 Y ahora podemos calcular la estadística \\(W\\) y el valor p correspondiente: w <- d_hat / ee valor_p <- 2 * (1 - pnorm(abs(w))) c(w = w, valor_p = valor_p) |> round(3) ## w valor_p ## -2.677 0.007 Y vemos que tenemos evidencia considerable de que el desempeño no es el mismo: el algoritmo 2 parece ser mejor. ¿Qué pasaría si incorrectamente usaras la prueba de dos muestras para este ejemplo? ¿Qué cosa cambia en la fórmula de la estadística de Wald? Pruebas de cociente de verosimilitud Otra técnica clásica para hacer pruebas de hipótesis es el de cociente de verosimilitudes. Con esta técnica podemos hacer pruebas que involucren varios parámetros, y podemos contrastar hipótesis nulas contra alternativas especificas. Para aplicar este tipo de pruebas es necesario hacer supuestos distribucionales (modelos probabilísticos), pues estas pruebas se basan en la función de verosimilitud \\(\\mathcal{L}(\\theta; x_1,\\ldots, x_n)\\). Ejemplo. Supongamos que tenemos la hipótesis nula de que una moneda es justa (\\(p =0.5\\) de sol). En 120 tiros de la moneda (que suponemos independientes), observamos 75 soles. Recordemos la función de log-verosimilitud para el modelo binomial (ignorando constantes que no dependen de \\(p\\)) es \\[\\ell(p) = 75 \\log(p) + (120 - 75)\\log(1-p) \\] Primero calculamos el estimador de máxima verosimilitud de \\(p\\), que es \\(\\hat{p} = 75/120 = 0.625\\). Evaluamos la verosimilitud \\[\\ell(\\hat{p}) = \\ell(0.625) = 75\\log(0.625) + 45\\log(0.375) = -79.388\\] - Ahora evaluamos la verosimlitud según la hipótesis nula, donde asumimos que \\(p = 0.5\\): \\[\\ell(p_0) = \\ell(0.5) = 75\\log(0.5) + 45\\log(0.5) = -83.177\\] - Finalmente, contrastamos estos dos números con una estadística que denotamos con \\(\\lambda\\): \\[\\lambda = 2\\left[\\ell(\\hat{p}) - \\ell(p_0)\\right] = 2[\\ell(0.625)- \\ell(0.5)] = 2(3.79)=7.58\\] A \\(\\lambda\\) se le llama la estadística de cociente de verosimilitud. Tomamos la diferencia de log verosimilitudes, que es los mismo que tomar el logaritmo del cociente de verosimilitudes, y de ahí el nombre de la prueba. Nótese que cuando este número \\(\\lambda\\) es muy grande, esto implica que la hipótesis nula es menos creíble, o menos consistente con los datos, pues la nula tiene mucho menos verosimilitud de lo que los datos indican. Por otro lado, cuando este valor es cercano a 0, entonces tenemos menos evidencia en contra de la hipótesis nula. Esto se explica en la siguiente gráfica: log_verosim <- function(p){ 75 * log(p) + (120 - 75) * log(1 - p) } verosim_tbl <- tibble(p = seq(0.4, 0.7, 0.01)) |> mutate(log_verosim = log_verosim(p)) ggplot(verosim_tbl, aes(x = p, y = log_verosim)) + geom_line() + geom_segment(x = 75/120, xend = 75/120, y = -130, yend = log_verosim(75/120), colour = "red") + geom_segment(x = 0.5, xend = 0.5, y = -130, yend = log_verosim(0.5), colour = "gray") + geom_errorbar(aes(x = 0.5, ymin = log_verosim(0.5), ymax = log_verosim(75/120)), colour = "orange", width = 0.05) + annotate("text", x = 0.48, y = -81.5, label = "3.79") + annotate("text", x = 0.515, y = -91, label ="nula", colour = "gray20") + annotate("text", x = 0.665, y = -91, label ="max verosímil", colour = "red") + labs(subtitle = expression(paste(lambda, "=2(3.79)=7.58"))) Este método puede generalizarse para que no solo aplique a hipótesis nulas donde \\(\\theta = \\theta_0\\), sino en general, \\(\\theta \\in \\Theta_0\\). Por ejemplo, podemos construir pruebas para \\(\\theta < 0.4\\). Definición. Consideramos la hipótesis nula \\(\\theta= \\theta_0\\). La estadística del cociente de verosimilitudes está dada por: \\[\\lambda = 2\\log\\left( \\frac{\\max_{\\theta}\\mathcal{L}(\\theta)}{\\max_{\\theta=\\theta_0}\\mathcal{L}(\\theta)} \\right ) = 2\\log\\left( \\frac{\\mathcal{L}(\\hat{\\theta})}{\\mathcal{L}(\\theta_0)} \\right)\\] donde \\(\\hat{\\theta}\\) es el estimador de máxima verosimilitud. Para construir una prueba asociada, como siempre, necesitamos una distribución de referencia. Esto podemos hacerlo con simulación, o usando resultados asintóticos. Distribución de referencia para pruebas de cocientes Para nuestro ejemplo anterior, podemos simular datos bajo la hipótesis nula, y ver cómo se distribuye la estadística \\(\\lambda\\): Ejemplo. Simulamos bajo la hipótesis nula como sigue: n_volados <- 120 # número de volados simulados_nula <- rbinom(4000, n_volados, p = 0.5) lambda <- function(n, x, p_0 = 0.5){ # estimador de max verosim p_mv <- x / n # log verosimilitud bajo mv log_p_mv <- x * log(p_mv) + (n - x) * log(1 - p_mv) # log verosimllitud bajo nula log_p_nula <- x * log(p_0) + (n - x) * log(1 - p_0) lambda <- 2*(log_p_mv - log_p_nula) lambda } lambda_obs <- lambda(n_volados, 75, 0.5) sims_tbl <- tibble(sim_x = simulados_nula) |> mutate(lambda = map_dbl(sim_x, ~ lambda(n_volados, .x, p_0 = 0.5))) ggplot(sims_tbl, aes(x = lambda)) + geom_histogram(binwidth = 0.7) + geom_vline(xintercept = lambda_obs, color = "red") Con esta aproximación a la distribución de referencia podemos calcular el valor p en nuestro ejemplo anterior: valor_p <- mean(sims_tbl$lambda >= lambda_obs) valor_p ## [1] 0.00675 y observamos que tenemos evidencia fuerte en contra de la hipótesis nula: la moneda no está balanceada. Ejemplo. Este ejemplo es un poco artificial, pero lo usamos para entender mejor las pruebas de cocientes de verosimlitud. Supongamos que tenemos una muestra de \\(\\mathsf{N}(\\mu, 1)\\), y queremos probar si \\(\\mu = 8\\). Asumimos que el supuesto de normalidad y desviación estándar iugal a 1 se cumplen. set.seed(3341) n_muestra <- 100 muestra_1 <- rnorm(n_muestra, 7.9, 1) crear_log_p <- function(x){ # crear log verosim para dos muestras normales independientes. log_p <- function(params){ mu <- params[1] log_vero <- dnorm(x, mean = mu, sd = 1, log = TRUE) |> sum() log_vero } } lambda_calc <- function(muestra, crear_log_p){ log_p <- crear_log_p(muestra) res <- optim(c(0), log_p, control = list(fnscale = -1)) lambda_mv <- log_p(res$par) lambda_nula <- log_p(8.0) lambda <- 2 * (lambda_mv - lambda_nula) lambda } lambda <- lambda_calc(muestra_1, crear_log_p) lambda ## [1] 2.101775 Ahora construimos con simulación la distribución de referencia usando simulaciones bajo la nula sims_nula <- map(1:10000, ~ rnorm(n_muestra, 8, 1)) lambda_nula_sim <- map_dbl(sims_nula, ~ lambda_calc(.x, crear_log_p)) tibble(lambda = lambda_nula_sim) |> ggplot(aes(x = lambda)) + geom_histogram() + geom_vline(xintercept = lambda, colour = "red") valor_p <- mean(lambda_nula_sim >= lambda) valor_p ## [1] 0.1537 Estos datos muestran consistencia con la hipótesis \\(\\mu = 8\\). Discusión: Nota en los dos ejemplos anteriores la similitud entre las distribuciones de referencia. En ambos casos, estas distribuciones resultan ser aproximadamente \\(\\chi\\)-cuadrada con 1 grado de libertad (ji-cuadrada). Podemos checar para el último ejemplo: teorica <- tibble(x = seq(0.1, 10, 0.01)) |> mutate(f_chi_1 = dchisq(x, df = 1)) tibble(lambda = lambda_nula_sim) |> ggplot() + geom_histogram(aes(x = lambda, y = ..density..), binwidth = 0.1) + geom_line(data = teorica, aes(x = x, y = f_chi_1), colour = "red") O mejor, con una gráfica de cuantiles de las simulaciones vs la téorica: tibble(lambda = lambda_nula_sim) |> ggplot(aes(sample = lambda)) + geom_qq(distribution = stats::qchisq, dparams = list(df = 1)) + geom_qq_line(distribution = stats::qchisq, dparams = list(df = 1)) Este resultado asintótico no es trivial, y se usa comúnmente para calcular valores \\(p\\). Discutiremos más este punto más adelante. Otro tipo de pruebas Con cocientes de verosimlitud podemos diseñar pruebas para contrastar condiciones que sólo un subconjunto de parámetros cumple. Ejemplo. Supongamos que queremos hacer una prueba de igualdad de medias \\(\\mu_1 = \\mu_2\\) para dos poblaciones normales \\(\\mathsf{N}(\\mu_1, \\sigma_1)\\) y \\(\\mathsf{N}(\\mu_2, \\sigma_2)\\), donde extraemos las muestras de manera independiente, y no conocemos las desviaciones estándar. Obtenemos dos muestras (que supondremos provienen de distribuciones normales, pues ese es nuestro supuesto) set.seed(223) muestra_1 <- rnorm(80, 0.8, 0.2) muestra_2 <- rnorm(120, 0.8, 0.4) Necesitamos: 1) calcular el valor de la estadística \\(\\lambda\\) de cociente de verosimilitudes, 2) Calcular la distribución de referencia para \\(\\lambda\\) bajo la hipótesis nula y finalmente 3) Ver qué tan extremo es el valor obtenido de \\(\\lambda\\) en relación a la distribución de referencia. crear_log_p <- function(x, y){ # crear log verosim para dos muestras normales independientes. log_p <- function(params){ mu_1 <- params[1] mu_2 <- params[2] sigma_1 <- params[3] sigma_2 <- params[4] log_vero_1 <- dnorm(x, mean = mu_1, sd = sigma_1, log = TRUE) |> sum() log_vero_2 <- dnorm(y, mean = mu_2, sd = sigma_2, log = TRUE) |> sum() log_vero <- log_vero_1 + log_vero_2 #se suman por independiencia log_vero } } log_p <- crear_log_p(muestra_1, muestra_2) crear_log_p_nula <- function(x, y){ log_p <- function(params){ # misma media mu <- params[1] sigma_1 <- params[2] sigma_2 <- params[3] log_vero_1 <- dnorm(x, mean = mu, sd = sigma_1, log = TRUE) |> sum() log_vero_2 <- dnorm(y, mean = mu, sd = sigma_2, log = TRUE) |> sum() log_vero <- log_vero_1 + log_vero_2 #se suman por independiencia log_vero } } log_p_nula <- crear_log_p_nula(muestra_1, muestra_2) Ahora tenemos el problema de que no conocemos las sigma. Estas deben ser estimadas para después calcular el cociente de verosimilitud: res <- optim(c(0, 0, 1, 1), log_p, method = "Nelder-Mead", control = list(fnscale = -1)) res$convergence ## [1] 0 est_mv <- res$par names(est_mv) <- c("mu_1", "mu_2", "sigma_1", "sigma_2") est_mv ## mu_1 mu_2 sigma_1 sigma_2 ## 0.8153471 0.7819913 0.1987545 0.3940484 Y tenemos lambda_1 <- log_p(est_mv) lambda_1 ## [1] -42.76723 Ahora calculamos el máximo bajo el supuesto de la hipótesis nula: res <- optim(c(0, 1, 1), log_p_nula, method = "Nelder-Mead", control = list(fnscale = -1)) res$convergence ## [1] 0 est_mv_nula <- res$par names(est_mv) <- c("mu", "sigma_1", "sigma_2") est_mv_nula ## [1] 0.8062091 0.1989438 0.3948603 y evaluamos lambda_2 <- log_p_nula(est_mv_nula) lambda_2 ## [1] -43.07902 Finalmente, nuestra estadística \\(\\lambda\\) es lambda <- 2 * (lambda_1 - lambda_2) lambda ## [1] 0.6235661 Y ahora necesitamos calcular un valor-\\(p\\). El problema que tenemos en este punto es que bajo la hipótesis nula no están determinados todos los parámetros, así que no podemos simular de manera simple muestras para obtener la distribución de referencia. Podemos sin embargo usar bootstrap paramétrico usando los estimadores de máxima verosimilitud bajo la nula simular_boot <- function(n_1, n_2, est_mv_nula){ x <- rnorm(n_1, est_mv_nula[1], est_mv_nula[2]) y <- rnorm(n_2, est_mv_nula[1], est_mv_nula[3]) list(x = x, y = y) } lambda_nula_sim <- function(est_mv_nula){ muestras <- simular_boot(80, 120, est_mv_nula) x <- muestras$x y <- muestras$y log_p <- crear_log_p(x, y) log_p_nula <- crear_log_p_nula(x, y) est_1 <- optim(c(0,0,1,1), log_p, control = list(fnscale = -1)) est_2 <- optim(c(0,1,1), log_p_nula, control = list(fnscale = -1)) lambda <- 2*(log_p(est_1$par) - log_p_nula(est_2$par)) lambda } lambda_sim <- map_dbl(1:2000, ~ lambda_nula_sim(est_mv_nula = est_mv_nula)) Y graficamos la distribución de referencia junto con el valor de \\(\\lambda\\) que obtuvimos: tibble(lambda = lambda_sim) |> ggplot(aes(x = lambda)) + geom_histogram() + geom_vline(xintercept = lambda, colour = "red") Y claramente los datos son consistentes con medias iguales. El valor-\\(p\\) es mean(lambda_sim > lambda) ## [1] 0.4275 Verificamos una vez más que la distribución de referencia es cercana a una \\(\\chi\\)-cuadrada con un grado de libertad. tibble(lambda = lambda_sim) |> ggplot(aes(sample = lambda)) + geom_qq(distribution = stats::qchisq, dparams = list(df = 1)) + geom_qq_line(distribution = stats::qchisq, dparams = list(df = 1)) Esta es la definición generalizada de las pruebas de cociente de verosimilitudes Definición. Consideramos la hipótesis nula \\(\\theta \\in \\Theta_0\\). La estadística del cociente de verosimilitudes está dada por: \\[\\lambda = 2\\log\\left( \\frac{\\max_{\\theta}\\mathcal{L}(\\theta)}{\\max_{\\theta\\in\\Theta_0}\\mathcal{L}(\\theta)} \\right ) = 2\\log\\left( \\frac{ \\mathcal{L}(\\hat{\\theta})}{\\mathcal{L}(\\hat{\\theta}_0)} \\right)\\] donde \\(\\hat{\\theta}\\) es el estimador de máxima verosimilitud de \\(\\theta\\) y \\(\\hat{\\theta}_0\\) es el estimador de máxima verosimilitud de \\(\\theta\\) cuando restringimos a que \\(\\theta \\in \\Theta_0\\). En nuestro ejemplo anterior, el espacio \\(\\Theta_0\\) era \\(\\{ (\\mu,\\mu,\\sigma_1, \\sigma_2)\\}\\), que es un subconjunto de \\(\\{ (\\mu_1,\\mu_2,\\sigma_1, \\sigma_2)\\}\\). Nótese que el espacio \\(\\Theta_0\\) tiene tres parámetros libres, mientras que el espacio total tiene 4. Aunque podemos usar el bootstrap paramétrico para construir distribuciones de referencia para estas pruebas y calcular un valor-\\(p\\), el siguiente teorema, cuya demostración no es trivial, explica las observaciones que hicimos arriba. Este teorema enuncia la estrategia del enfoque clásico, que utiliza una aproximación asintótica. Valores p para pruebas de cocientes de verosimilitud. Supongamos que \\(\\theta = (\\theta_1,\\theta_2, \\ldots, \\theta_p)\\). Sea \\[\\Theta_0 = \\{\\theta : \\theta_1 = a_1, \\theta_2 = a_2, \\dots, \\theta_q = a_q \\},\\] es decir la hipótesis \\(\\theta \\in \\Theta_0\\) es que los primeros \\(q\\) parámetros de \\(\\theta\\) estan fijos en algún valor. Los otros parámetros no se consideran en esta prueba. Si \\(\\lambda\\) es la estadística de cociente de verosimilitudes de esta prueba, entonces, bajo la nula \\(\\theta \\in \\Theta_0\\) tenemos que la distribución de \\(\\lambda\\) es asintóticamente \\(\\chi\\)-cuadrada con \\(q\\) grados de libertad, denotada por \\(\\chi^2_q\\). El valor-\\(p\\) para esta prueba es \\[P(\\chi^2_{q} > \\lambda)\\] Observaciones: Para hacer cálculos con la distribución \\(\\chi\\)-cuadrada usamos rutinas numéricas (por ejemplo la función pchisq en R). Nótese que \\(p\\) es la dimensión del espacio \\(\\Theta\\) (\\(p\\) parámetros), y que \\(p-q\\) es la dimensión del espacio \\(\\Theta_0\\) (pues \\(q\\) parámetros están fijos), de modo que los grados de libertad son la dimensión de \\(\\Theta\\) menos la dimensión de \\(\\Theta_0\\). En nuestro primer ejemplo (proporción de éxitos) solo teníamos un parámetro. El espacio \\(\\Theta_0\\) es de dimensión 0, así que los grados de libertad son \\(1 = 1 - 0\\) En este último ejemplo donde probamos igualdad de medias, el espacio \\(\\Theta\\) tiene dimensión 4, y el espacio \\(\\Theta_0\\) es de dimensión 3 (tres parámetros libres), por lo tanto los grados de libertad son \\(1 = 4 -3\\). Ejemplo En nuestro ejemplo de prueba de igualdad de medias, usaríamos pchisq(lambda, df =1, lower.tail = FALSE) ## [1] 0.4297252 que es similar al que obtuvimos con la estrategia del bootstrap paramétrico. Errores tipo I y tipo II En algunas ocasiones, en lugar de solamente calcular un valor-\\(p\\) queremos tomar una decisión asociada a distintas hipótesis que consideramos posibles. Por ejemplo, nuestra hipótesis nula podría ser Hipótesis nula \\(H_0\\): Una medicina nueva que estamos probando no es efectiva en reducir el colesterol en pacientes. Y queremos contrastar con una alternativa: Hipótesis alternativa \\(H_A\\): la medicina nueva reduce los niveles de colesterol en los pacientes. La decisión que está detrás de estas pruebas es: si no podemos rechazar la nula, la medicina no sale al mercado. Si rechazamos la nula, entonces la medicina es aprobada para salir al mercado. Para diseñar esta prueba, procedemos como sigue: Definimos cómo recolectar datos \\(X\\) de interés Definimos una estádistica \\(T(X)\\) de los datos. Definimos una región de rechazo \\(R\\) de valores tales que si \\(T(X)\\in R\\), entonces rechazaremos la hipótesis nula (e implícitamente tomaríamos la decisión asociada a la alternativa). Ejecutamos la prueba observando datos \\(X=x\\), calculando \\(T(x)\\), y checando si \\(T(x) \\in R\\). Si esto sucede entonces decimos que rechazamos la hipótesis nula, y tomamos la decisión asociada a la alternativa. Ejemplo. Si tenemos la hipótesis nula \\(p_1=0.5\\) para una proporción, y al alternativa es \\(p_1\\neq 0.5\\), podemos usar la estadística de Wald \\(T(x) = \\frac{\\hat{p_1} - 0.5}{\\hat{\\textsf{ee}}}\\). Podríamos definir la región de rechazo como \\(R = \\{T(x) : |T(x)| > 3 \\}\\) (rechazamos si en valor absoluto la estadística de Wald es mayor que 3). Cuando diseñamos una prueba de este tipo, quisiéramos minimizar dos tipos de errores: Rechazar la hipótesis nula \\(H_0\\) cuando es cierta: Error tipo I No rechazar la hipótesis nula \\(H_0\\) cuando \\(H_0\\) es falsa: Error tipo II La gravedad de cada error depende del problema. En nuestro ejemplo de la medicina, por ejemplo: Un error tipo II resultaría en una medicina efectiva que no sale al mercado, lo que tiene consecuencias financieras (para la farmaceútica) y costos de oportunidad en salud (para la población). Por otra parte, Un error tipo I resultaría en salir al mercado con una medicina que no es efectiva. Esto tiene costos de oportunidad financieros que pueden ser grandes para la sociedad. Todos estos costos dependen, por ejempĺo, de qué tan grave es la enfermedad, qué tan costosa es la medicina, y así sucesivamente. En el enfoque más clásico, los errores tipo I y tipo II generalmente no se balancean según su severidad o probabilidad. En lugar de eso, generalmente se establece un límite para la probabilidad de cometer un error del tipo I (usualmente 5%, por una tradición que no tiene mucho fundamento) En vista de este ejemplo simple, y las observaciones de arriba: Reducir una decisión compleja a una prueba de hipótesis con resultados binarios (rechazar o no) es generalmente erróneo. Las pruebas de hipótesis se usan muchas veces incorrectamente cuando lo más apropiado es usar estimación por intervalos o algo similar que cuantifique la incertidumbre de las estimaciones. Consulta por ejemplo el comunicado de la ASA acerca de p-values y pruebas de hipótesis En el caso de la medicina, por ejemplo, realmente no nos interesa que la medicina sea mejor que un placebo. Nos importa que tenga un efecto considerable en los pacientes. Si estimamos este efecto, incluyendo incertidumbre, tenemos una mejor herramienta para hacer análisis costo-beneficio y tomar la decisión más apropiada. Como dijimos, típicamente se selecciona la región de rechazo de forma que bajo la hipótesis nula la probabilidad de cometer un error tipo I está acotada. Definición. Supongamos que los datos \\(X_1,X_2,\\ldots, X_n\\) provienen de una distribución \\(F_\\theta\\), donde no conocemos \\(\\theta\\). Supongamos que la hipótesis nula es que \\(\\theta = \\theta_0\\) (que llamamos una hipótesis simple). La función de potencia de una prueba con región de rechazo \\(R\\) se define como la probabilidad de rechazar para cada posible valor del parámetro \\(\\theta\\) \\[\\beta(\\theta) = P_\\theta (X\\in R).\\] El tamaño de una prueba se define como el valor \\[\\alpha = \\beta(\\theta_0),\\] es decir, la probabilidad de rechazar la nula (\\(\\theta = \\theta_0\\)) erróneamente. Observación. Esto se generaliza para hipótesis compuestas, donde la nula es que el parámetro \\(\\theta\\) está en un cierto conjunto \\(\\Theta_0\\). Por ejemplo, una hipótesis nula puede ser \\(\\theta < 0.5\\). En este caso, \\(\\alpha\\) se define como el valor más grande que \\(\\beta(\\theta)\\) toma cuando \\(\\theta\\) está en \\(\\Theta_0\\), es decir, la probabilidad de rechazo más grande cuando la hipótesis nula se cumple. Decimos que una prueba tiene nivel de significancia de \\(\\alpha\\) si su tamaño es menor o igual a \\(\\alpha\\). Decimos que la potencia de una prueba es la probabilidad de, correctamente, rechazar la hipótesis nula cuando la alterna es verdadera: \\[\\beta(\\theta_a) = P_{\\theta_a} (X \\in R).\\] Observación: Sería deseable encontrar la prueba con mayor potencia bajo \\(H_a\\), entre todas las pruebas con tamaño \\(\\alpha\\). Esto no es trivial y no siempre existe. Observación: El valor \\(p\\) es el menor tamaño con el que podemos rechazar \\(H_0\\). Ejemplo (Chihara and Hesterberg (2018)) Supongamos que las calificaciones de Enlace de alumnos en México se distribuye aproximadamente como una normal con media 515 y desviación estándar de 120. En una ciudad particular, se quiere decidir si es neceario pedir fondos porque la media de la ciudad es más baja que la nacional. Nuestra hipótesis nula es \\(H_0: \\mu \\geq 515\\) y la alternativa es \\(\\mu < 515\\), así que si rechazamos la nula se pedirían los fondos. Supondremos que la distribución de calificaciones en la ciudad es también aproximadamente normal con desviación estándar de 130. Se plantea tomar una muestra de 100 alumnos, y rechazar si la media muestral \\(\\bar{X}\\) es menor que 505. ¿Cuál es la probabilidad \\(\\alpha\\) de tener un error de tipo I? La función de potencia es \\[\\beta(\\mu) = P_\\mu(\\bar{X} < 505)\\] Restando la media \\(\\mu\\) y estandarizando obtenemos \\[\\beta(\\mu) = P \\left (\\frac{\\bar{X} - \\mu}{130/\\sqrt{100}} < \\frac{505 -\\mu}{130/\\sqrt{100}} \\right )\\] así que \\[\\beta(\\mu) = \\Phi \\left (\\frac{505 -\\mu}{130/\\sqrt{100}}\\right ),\\] donde \\(\\Phi\\) es la función acumulada de la normal estándar. La gráfica de la función potencia es entonces potencia_tbl <- tibble(mu = seq(450, 550, 0.5)) |> mutate(beta = pnorm((505 - mu)/13)) |> # probabilidad de rechazar mutate(nula_verdadera = factor(mu >= 515)) # nula verdadera ggplot(potencia_tbl, aes(x = mu, y = beta, colour = nula_verdadera)) + geom_line() Es decir, si la media \\(\\mu\\) de la ciudad es muy baja, con mucha seguridad rechazamos. Si es relativamente alta entonces no rechazamos. El tamaño de la prueba es el mayor valor de probabilidad de rechazo que se obtiene sobre los valores \\(\\mu\\geq 515\\) (la nula). Podemos calcularlo analíticamente como sigue: Si \\(\\mu \\geq 515\\), entonces \\[\\beta(\\mu) \\leq \\beta(515) = \\Phi\\left (\\frac{505 -515}{130/\\sqrt{100}}\\right ) = \\Phi( - 10 / 13) = \\Phi(-0.7692)\\] que es igual a pnorm(-0.7692) ## [1] 0.2208873 Y este es el tamaño de la prueba. En otras palabras: si la ciudad no está por debajo de la media nacional, hay una probabilidad de 22% de que erróneamente se pidan fondos (al rechazar \\(H_0\\)). Ejemplo Supongamos que los que programan el presupuesto deciden que se requiere tener una probabilidad de a lo más 5% de rechazar erróneamente la hipótesis nula (es decir, pedir fondos cuando en realidad su media no está debajo de la nacional) para poder recibir fondos. ¿Cuál es la región de rechazo que podríamos escoger? En el caso anterior usamos la región \\(\\bar{X}<505\\). Si el tamaño de muestra está fijo en \\(n=100\\) (por presupuesto), entonces tenemos que escoger un punto de corte más extremo. Si la región de rechazo es \\(\\bar{X} < C)\\) entonces tenemos, siguiendo los cálculos anteriores, que \\[0.05 = \\alpha = \\Phi \\left ( \\frac{C -515}{130/\\sqrt{100}}\\right) = \\Phi \\left( \\frac{C- 515}{13} \\right)\\] Buscamos el cuantil 0.05 de la normal estándar, que es z_alpha <- qnorm(0.05) z_alpha ## [1] -1.644854 Y entonces requerimos que \\[\\frac{C- 515}{13} = -1.6448.\\] Despejando obtenemos C <- 13*z_alpha + 515 C ## [1] 493.6169 Así que podemos usar la región \\(\\bar{X} < 493.5\\), que es más estricta que la anterior de \\(\\bar{X} < 505\\). Considera la potencia de la prueba \\(\\beta(\\mu)\\) que vimos arriba. Discute y corre algunos ejemplos para contestar las siguientes preguntas: Recuerda la definición: ¿qué significa \\(\\beta(\\mu)\\)? ¿Qué pasa con la potencia cuando \\(\\mu\\) está más lejos de los valores de la hipótesis nula? ¿Qué pasa con la potencia cuando hay menos variabilidad en la población? ¿Y cuando la muestra es más grande? ¿Qué pasa si hacemos más chico el nivel de significancia? Consideraciones prácticas Algunos recordatorios de lo que hemos visto: Rechazar la nula no quiere decir que la nula es falsa, ni que encotramos un “efecto”. Un valor-\\(p\\) chico tampoco quiere decir que la nula es falsa. Lo que quiere decir es que la nula es poco consistente con los datos que observamos, o que es muy poco probable que la nula produzca los datos que observamos. Rechazar la nula (encontrar un efecto “significativo”) no quiere decir que el efecto tiene importancia práctica. Si la potencia es alta (por ejemplo cuando el tamaño de muestra es grande), puede ser que la discrepancia de los datos con la nula es despreciable, entonces para fines prácticos podríamos trabajar bajo el supuesto de la nula. Por eso en general preferimos hacer estimación que pruebas de hipótesis para entender o resumir los datos y tamaños de las discrepancias. Adicionalmente, muchas de las hipótesis nulas que generalmente se utilizan se pueden rechazar sin datos (por ejemplo, igualdad de proporciones en dos poblaciones reales). Lo que importa es qué tan diferentes son, y qué tan bien podemos estimar sus diferencias. En la literatura, muchas veces parece que “encontrar una cosa interesante” es rechazar una hipótesis nulas con nivel 5% de significancia. Es más importante entender cómo se diseñó el estudio, cómo se recogieron los datos, cuáles fueron las decisiones de análisis que pasar el mítico nivel de 5% Cuando la potencia es baja (por ejemplo porque el tamaño de muestra es muy chico), tenemos que observar diferencias muy grandes para rechazar. Si probamos algo poco factible (por ejemplo, que la vitamina \\(C\\) aumenta la estatura a los adultos), entonces los rechazos generalmente se deben a variabilidad en la muestra (error tipo II). Cuando diseñamos y presentamos resultados de un estudio o análisis, es mejor pensar en describir los datos y su variabilidad, y mostrar estimaciones incluyendo fuentes de incertidumbre, en lugar de intentar resumir con un valor-\\(p\\) o con el resultado de una prueba de hipótesis. Pruebas múltiples En algunas ocasiones se hacen muchas pruebas para “filtrar” las cosas que son interesantes y las que no. Por ejemplo, cuando comparamos miles de genes entre dos muestras (la nula es que son similares). Si cada prueba se conduce a un nivel \\(\\alpha\\), la probablilidad de tener al menos un rechazo falso (un error tipo I) es considerablemente más alta que \\(\\alpha\\). Por ejemplo, si repetimos una prueba de hipótesis con nivel \\(\\alpha\\) con muestras independientes, la probabilidad de tener al menos un rechazo falso es \\(1-(1-\\alpha)^n\\), que es muy cercano a uno si \\(n\\) es grande (¿cómo derivas esta fórmula?). Por ejemplo, si \\(\\alpha = 0.05\\) y \\(n = 100\\), con más de 99% probabilidad tendremos al menos un rechazo falso, o un “hallazgo” falso. Sin \\(n\\) es muy grande, varios de los hallazgos que encontremos serán debidos a variabilidad muestral. Puedes ver en (Wasserman 2013), sección 10.7 métodos conservadores como corrección de Bonferroni (sólo rechazar cuando el valor-\\(p\\) es menor a \\(0.05/n\\)), o la técnica más moderna de control de tasa de descubrimientos falsos (FDR). Cuando estamos en una situación como esta (que es más retadora en cuanto a análisis), sin embargo, sugerimos usar estimaciones que tomen cuenta todos los datos con regularización apropiada: por ejemplo, en lugar de trabajar con cada muestra por separado, intentamos construir un modelo para el proceso completo de muestreo. Una posibilidad son modelos jerárquicos bayesianos. Ver por ejemplo (Gelman, Hill, and Yajima 2012). Referencias "],["introducción-a-inferencia-bayesiana-1.html", "Sección 10 Introducción a inferencia bayesiana Un primer ejemplo completo de inferencia bayesiana Ejemplo: estimando una proporción Ejemplo: observaciones uniformes Probabilidad a priori Análisis conjugado Pasos de un análisis de datos bayesiano Verificación predictiva posterior Predicción", " Sección 10 Introducción a inferencia bayesiana Para esta sección seguiremos principalmente Kruschke (2015). Adicionalmente puedes ver la sección correspondiente de Chihara and Hesterberg (2018). En las secciones anteriores estudiamos el método de máxima verosimilitud y métodos de remuestreo. Esto lo hemos hecho para estimar parámetros, y cuantificar la incertidumbre qué tenemos acerca de valores poblacionales. La inferencia bayesiana tiene objetivos similares. Igual que en máxima verosimilitud, la inferencia bayesiana comienza con modelos probabilísticos y observaciones. En contraste con máxima verosimilitud, la inferencia bayesiana está diseñada para incorporar información previa o de expertos que tengamos acerca de los parámetros de interés. La inferencia bayesiana cubre como caso particular métodos basados en máxima verosimilitud. El concepto probabilístico básico que utilizamos para construir estos modelos y la inferencia es el de probabilidad condicional: la probabilidad de que ocurran ciertos eventos dada la información disponible del fenómeno que nos interesa. Un primer ejemplo completo de inferencia bayesiana Consideremos el siguiente problema: Nos dan una moneda, y solo sabemos que la moneda puede tener probabilidad \\(3/5\\) de tirar sol (está cargada a sol) o puede ser una moneda cargada a águila, con probabilidad \\(2/5\\) de tirar sol. Vamos a lanzar la moneda dos veces y observamos su resultado (águila o sol). Queremos decir algo acerca de qué tan probable es que hayamos tirado la moneda cargada a sol o la moneda cargada a águila. En este caso, tenemos dos variables: \\(X\\), que cuenta el número de soles obtenidos en el experimento aleatorio, y \\(\\theta\\), que da la probabilidad de que un volado resulte en sol (por ejemplo, si la moneda es justa entonces \\(\\theta = 0.5\\)). ¿Qué cantidades podríamos usar para evaluar qué moneda es la que estamos usando? Si hacemos el experimento, y tiramos la moneda 2 veces, podríamos considerar la probabilidad \\[P(\\theta = 0.4 | X = x)\\] donde \\(x\\) es el número de soles que obtuvimos en el experimento. Esta es la probabilidad condicional de que estemos tirando la moneda con probabilidad de sol 2/5 dado que observamos \\(x\\) soles. Por ejemplo, si tiramos 2 soles, deberíamos calcular \\[P(\\theta=0.4|X=2).\\] ¿Cómo calculamos esta probabilidad? ¿Qué sentido tiene? Usando reglas de probabildad (regla de Bayes en particular), podríamos calcular \\[P(\\theta=0.4|X=2) = \\frac{P(X=2 | \\theta = 0.4) P(\\theta =0.4)}{P(X=2)}\\] Nota que en el numerador uno de los factores, \\(P(X=2 | \\theta = 0.4),\\) es la verosimilitud. Así que primero necesitamos la verosimilitud: \\[P(X=2|\\theta = 0.4) = (0.4)^2 = 0.16.\\] La novedad es que ahora tenemos que considerar la probabilidad \\(P(\\theta = 0.4)\\). Esta cantidad no la habíamos encontrado antes. Tenemos que pensar entonces que este parámetro es una cantidad aleatoria, y puede tomar dos valores \\(\\theta=0.4\\) ó \\(\\theta = 0.6\\). Considerar esta cantidad como aleatoria requiere pensar, en este caso, en cómo se escogió la moneda, o qué sabemos acerca de las monedas que se usan para este experimento. Supongamos que en este caso, nos dicen que la moneda se escoge al azar de una bolsa donde hay una proporción similar de los dos tipos de moneda (0.4 ó 0.6). Es decir el espacio parametral es \\(\\Theta = \\{0.4, 0.6\\},\\) y las probabilidades asociadas a cada posibilidad son las mismas. Es decir, tenemos \\[P(\\theta = 0.4) = P(\\theta = 0.6) =0.5,\\] que representa la probabilidad de escoger de manera aleatoria la moneda con una carga en particular. Ahora queremos calcular \\(P(X=2)\\), pero con el trabajo que hicimos esto es fácil. Pues requiere usar reglas de probabilidad usuales para hacerlo. Podemos utilizar probabilidad total \\[\\begin{align} P(X) &= \\sum_{\\theta \\in \\Theta} P(X, \\theta)\\\\ &= \\sum_{\\theta \\in \\Theta} P(X\\, |\\, \\theta) P(\\theta), \\end{align}\\] lo cual en nuestro ejemplo se traduce en escribir \\[ P(X=2) = P(X=2|\\theta = 0.4)P(\\theta = 0.4) + P(X=2|\\theta=0.6)P(\\theta =0.6),\\] por lo que obtenemos \\[P(X=2) = 0.16(0.5) + 0.36(0.5) = 0.26.\\] Finalmente la probabilidad de haber escogido la moneda con carga \\(2/5\\) dado que observamos dos soles en el lanzamiento es \\[P(\\theta=0.4|X=2) = \\frac{0.16(0.5)}{0.26} \\approx 0.31.\\] Es decir, la probabilidad posterior de que estemos tirando la moneda \\(2/5\\) baja de 0.5 (nuestra información inicial) a 0.31. Este es un ejemplo completo, aunque muy simple, de inferencia bayesiana. La estrategia de inferencia bayesiana implica tomar decisiones basadas en las probabilidades posteriores. Finalmente, podríamos hacer predicciones usando la posterior predictiva. Si \\({X}_{nv}\\) es una nueva tirada adicional de la moneda que estamos usando, nos interesaría saber: \\[P({X}_{nv}=\\mathsf{sol}\\, | \\, X=2)\\] Notemos que un volado adicional es un resultado binario. Por lo que podemos calcular observando que \\(P({X}_{nv}|X=2, \\theta)\\) es una variable Bernoulli con probabilidad \\(\\theta\\), que puede valer 0.4 ó 0.6. Como tenemos las probabilidades posteriores \\(P(\\theta|X=2)\\) podemos usar probabilidad total, condicionado en \\(X=2\\): \\[\\begin{align*} P({X}_{nv}=\\mathsf{sol}\\, | \\, X=2) & = \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}, \\theta \\, | \\, X=2) & \\text{(probabilidad total)}\\\\ &= \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}\\, | \\theta , X=2) P(\\theta \\, | \\, X=2) & \\text{(probabilidad condicional)}\\\\ &= \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}\\, | \\theta ) P(\\theta \\, | \\, X=2), & \\text{(independencia condicional)} \\end{align*}\\] lo que nos da el siguiente cálculo \\[P(X_{nv}=\\mathsf{sol}\\, |\\, \\theta=0.4) \\, P(\\theta=0.4|X=2) \\, +\\, P(X_{nv}=\\mathsf{sol}|\\theta = 0.6) \\, P(\\theta =0.6|X=2)\\] Es decir, promediamos ponderando con las probabilidades posteriores. Por lo tanto obtenemos \\[P(X_{nv} = \\mathsf{sol}|X=2) = 0.4 ( 0.31) + 0.6 (0.69) = 0.538.\\] Observación 0 Nótese que en contraste con máxima verosimilitud, en este ejemplo cuantificamos con probabilidad condicional la incertidumbre de los parámetros que no conocemos. En máxima verosimilitud esta probabilidad no tiene mucho sentido, pues nunca consideramos el parámetro desconocido como una cantidad aleatoria. Observación 1 Nótese el factor \\(P(X=2)\\) en la probabilidad posterior puede entenderse como un factor de normalización. Notemos que los denominadores en la distribución posterior son \\[P(X=2 | \\theta = 0.4) P(\\theta =0.4) = 0.16(0.5) = 0.08,\\] y \\[P(X=2 | \\theta = 0.6) P(\\theta =0.6) = 0.36(0.5) = 0.18.\\] Las probabilidades posteriores son proporcionales a estas dos cantidades, y como deben sumar uno, entonces normalizando estos dos números (dividiendo entre su suma) obtenemos las probabilidades. Observación 2 La nomenclatura que usamos es la siguiente: Como \\(X\\) son los datos observados, llamamos a \\(P(X|\\theta)\\) la verosimilitud, o modelo de los datos. A \\(P(\\theta)\\) le llamamos la distribución inicial o previa. La distribución que usamos para hacer inferencia \\(P(\\theta|X)\\) es la distribución final o posterior. Para utilizar inferencia bayesiana, hay que hacer supuestos para definir las primeras dos partes del modelo. La parte de iniciales o previas está ausente de enfoques como máxima verosimlitud usual. Observación 3 ¿Cómo decidimos las probabilidades iniciales, por ejemplo \\(P(\\theta=0.4)\\) ? Quizá es un supuesto y no tenemos razón para pensar que se hace de otra manera. O quizá conocemos el mecanismo concreto con el que se selecciona la moneda. Discutiremos esto más adelante. Observación 4 ¿Cómo decidimos el modelo de los datos? Aquí típicamente también tenemos que hacer algunos supuestos, aunque algunos de estos pueden estar basados en el diseño del estudio, por ejemplo. Igual que cuando usamos máxima verosimilitud, es necesario checar que nuestro modelo ajusta razonablemente a los datos. Ejercicio Cambia distintos parámetros del número de soles observados, las probabilidades de sol de las monedas, y las probabilidades iniciales de selección de las monedas. n_volados <- 2 # posible valores del parámetro desconocido theta = c(0.4, 0.6) # probabilidades iniciales probs_inicial <- tibble(moneda = c(1, 2), theta = theta, prob_inicial = c(0.5, 0.5)) probs_inicial ## # A tibble: 2 × 3 ## moneda theta prob_inicial ## <dbl> <dbl> <dbl> ## 1 1 0.4 0.5 ## 2 2 0.6 0.5 # verosimilitud crear_verosim <- function(no_soles){ verosim <- function(theta){ # prob de observar no_soles en 2 volados con probabilidad de sol theta dbinom(no_soles, n_volados, theta) } verosim } # evaluar verosimilitud verosim <- crear_verosim(2) # ahora usamos regla de bayes para hacer tabla de probabilidades tabla_inferencia <- probs_inicial |> mutate(verosimilitud = map_dbl(theta, verosim)) |> mutate(inicial_x_verosim = prob_inicial * verosimilitud) |> # normalizar mutate(prob_posterior = inicial_x_verosim / sum(inicial_x_verosim)) tabla_inferencia |> mutate(moneda_obs = moneda) |> select(moneda_obs, theta, prob_inicial, verosimilitud, prob_posterior) ## # A tibble: 2 × 5 ## moneda_obs theta prob_inicial verosimilitud prob_posterior ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1 0.4 0.5 0.16 0.308 ## 2 2 0.6 0.5 0.36 0.692 ¿Qué pasa cuando el número de soles es 0? ¿Cómo cambian las probabilidades posteriores de cada moneda? Incrementa el número de volados, por ejemplo a 10. ¿Qué pasa si observaste 8 soles, por ejemplo? ¿Y si observaste 0? ¿Qué pasa si cambias las probabilidades iniciales (por ejemplo incrementas la probabilidad inicial de la moneda 1 a 0.9)? Justifica las siguientes aseveraciones (para este ejemplo): Las probabilidades posteriores o finales son una especie de punto intermedio entre verosimilitud y probablidades iniciales. Si tenemos pocas observaciones, las probabilidades posteriores son similares a las iniciales. Cuando tenemos muchos datos, las probabilidades posteriores están más concentradas, y no es tan importante la inicial. Si la inicial está muy concentrada en algún valor, la posterior requiere de muchas observaciones para que se pueda concentrar en otros valores diferentes a los de la inicial. Ahora resumimos los elementos básicos de la inferencia bayesiana, que son relativamente simples: Inferencia bayesiana. Con la notación de arriba: Como \\(X\\) son los datos observados, llamamos a \\(P(X|\\theta)\\) la verosimilitud, proceso generador de datos o modelo de los datos. El factor \\(P(\\theta)\\) le llamamos la distribución inicial o previa. La distribución que usamos para hacer inferencia \\(P(\\theta|X)\\) es la distribución final o posterior Hacemos inferencia usando la ecuación \\[P(\\theta | X) = \\frac{P(X | \\theta) P(\\theta)}{P(X)}\\] que también escribimos: \\[P(\\theta | X) \\propto P(X | \\theta) P(\\theta)\\] donde \\(\\propto\\) significa “proporcional a”. No ponemos \\(P(X)\\) pues como vimos arriba, es una constante de normalización. En estadística Bayesiana, las probablidades posteriores \\(P(\\theta|X)\\) dan toda la información que necesitamos para hacer inferencia. ¿Cuándo damos probablidad alta a un parámetro particular \\(\\theta\\)? Cuando su verosimilitud es alta y/o cuando su probabilidad inicial es alta. De este modo, la posterior combina la información inicial que tenemos acerca de los parámetros con la información en la muestra acerca de los parámetros (verosimilitud). Podemos ilustrar como sigue: Ejemplo: estimando una proporción Consideremos ahora el problema de estimar una proporción \\(\\theta\\) de una población dada usando una muestra iid \\(X_1,X_2,\\ldots, X_n\\) de variables Bernoulli. Ya sabemos calcular la verosimilitud (el modelo de los datos): \\[P(X_1=x_1,X_2 =x_2,\\ldots, X_n=x_n|\\theta) = \\theta^k(1-\\theta)^{n-k},\\] donde \\(k = x_1 + x_2 +\\cdots + x_k\\) es el número de éxitos que observamos. Ahora necesitamos una distribución inicial o previa \\(P(\\theta)\\). Aunque esta distribución puede tener cualquier forma, supongamos que nuestro conocimiento actual podemos resumirlo con una distribución \\(\\mathsf{Beta}(3, 3)\\): \\[P(\\theta) \\propto \\theta^2(1-\\theta)^2.\\] La constante de normalización es 1/30, pero no la requerimos. Podemos simular para examinar su forma: sim_inicial <- tibble(theta = rbeta(10000, 3, 3)) ggplot(sim_inicial) + geom_histogram(aes(x = theta, y = ..density..), bins = 15) De modo que nuestra información inicial es que la proporción puede tomar cualquier valor entre 0 y 1, pero es probable que tome un valor no tan lejano de 0.5. Por ejemplo, con probabilidad 0.95 creemos que \\(\\theta\\) está en el intervalo quantile(sim_inicial$theta, c(0.025, 0.975)) |> round(2) ## 2.5% 97.5% ## 0.14 0.85 Es difícil justificar en abstracto por qué escogeriamos una inicial con esta forma. Aunque esto los detallaremos más adelante, puedes pensar, por el momento, que alguien observó algunos casos de esta población, y quizá vio tres éxitos y tres fracasos. Esto sugeriría que es poco probable que la probablidad \\(\\theta\\) sea muy cercana a 0 o muy cercana a 1. Ahora podemos construir nuestra posterior. Tenemos que \\[P(\\theta| X_1=x_1, \\ldots, X_n=x_n) \\propto P(X_1 = x_1,\\ldots X_n=x_n | \\theta)P(\\theta) = \\theta^{k+2}(1-\\theta)^{n-k + 2}\\] donde la constante de normalización no depende de \\(\\theta\\). Como \\(\\theta\\) es un parámetro continuo, la expresión de la derecha nos debe dar una densidad posterior. Supongamos entonces que hicimos la prueba con \\(n = 30\\) (número de prueba) y observamos 19 éxitos. Tendríamos entonces \\[P(\\theta | S_n = 19) \\propto \\theta^{19 + 2} (1-\\theta)^{30-19 +2} = \\theta^{21}(1-\\theta)^{13}\\] La cantidad de la derecha, una vez que normalizemos por el número \\(P(X=19)\\), nos dará una densidad posterior (tal cual, esta expresion no integra a 1). Podemos obtenerla usando cálculo, pero recordamos que una distribución \\(\\mathsf{\\mathsf{Beta}}(a,b)\\) tiene como fórmula \\[\\frac{1}{B(a,b)} \\theta^{a-1}(1-\\theta)^{b-1}\\] Concluimos entonces que la posterior tiene una distribución \\(\\mathsf{Beta}(22, 14)\\). Podemos simular de la posterior usando código estándar para ver cómo luce: sim_inicial <- sim_inicial |> mutate(dist = "inicial") sim_posterior <- tibble(theta = rbeta(10000, 22, 14)) |> mutate(dist = "posterior") sims <- bind_rows(sim_inicial, sim_posterior) ggplot(sims, aes(x = theta, fill = dist)) + geom_histogram(aes(x = theta), bins = 30, alpha = 0.5, position = "identity") La posterior nos dice cuáles son las posibilidades de dónde puede estar el parámetro \\(\\theta\\). Nótese que ahora excluye prácticamente valores más chicos que 0.25 o mayores que 0.9. Esta distribución posterior es el objeto con el que hacemos inferencia: nos dice dónde es creíble que esté el parámetro \\(\\theta\\). Podemos resumir de varias maneras. Por ejemplo, si queremos un estimador puntual usamos la media posterior: sims |> group_by(dist) |> summarise(theta_hat = mean(theta) |> round(3)) ## # A tibble: 2 × 2 ## dist theta_hat ## <chr> <dbl> ## 1 inicial 0.503 ## 2 posterior 0.61 Nota que el estimador de máxima verosimilitud es \\(\\hat{p} = 19/30 = 0.63\\), que es ligeramente diferente de la media posterior. ¿Por qué? Y podemos construir intervalos de percentiles, que en esta situación suelen llamarse intervalos de credibilidad, por ejemplo: f <- c(0.025, 0.975) sims |> group_by(dist) |> summarise(cuantiles = quantile(theta, f) |> round(2), f = f) |> pivot_wider(names_from = f, values_from = cuantiles) ## # A tibble: 2 × 3 ## # Groups: dist [2] ## dist `0.025` `0.975` ## <chr> <dbl> <dbl> ## 1 inicial 0.14 0.85 ## 2 posterior 0.45 0.76 El segundo renglón nos da un intervalo posterior para \\(\\theta\\) de credibilidad 95%. En inferencia bayesiana esto sustituye a los intervalos de confianza. El intervalo de la inicial expresa nuestras creencias a priori acerca de \\(\\theta\\). Este intervalo es muy amplio (va de 0.15 a 0.85) El intervalo de la posterior actualiza nuestras creencias acerca de \\(\\theta\\) una vez que observamos los datos, y es considerablemente más angosto y por lo tanto informativo. Puedes experimentar en esta shiny app con diferentes iniciales, número de volados y observación de éxitos. Observaciones: Nótese que escogimos una forma analítica fácil para la inicial, pues resultó así que la posterior es una distribución beta. No siempre es así, y veremos qué hacer cuando nuestra inicial no es de un tipo “conveniente”. Como tenemos la forma analítica de la posterior, es posible hacer los cálculos de la media posterior, por ejemplo, integrando la densidad posterior a mano. Esto generalmente no es factible, y en este ejemplo preferimos hacer una aproximación numérica. En este caso particular es posible usando cálculo, y sabemos que la media de una \\(\\mathsf{\\mathsf{Beta}}(a,b)\\) es \\(a/(a+b)\\), de modo que nuestra media posterior es \\[\\hat{\\mu} = (19 + 2)/(30 + 4) = 21/34 = 0.617 \\] que podemos interpretar como sigue: para calcular la media posterior, a nuestras \\(n\\) pruebas iniciales agregamos 4 pruebas adicionales fijas, con 2 éxitos y 2 fracasos, y calculamos la proporción usual de éxitos. Repite el análisis considerando en general \\(n\\) pruebas, con \\(k\\) éxitos. Utiliza la misma distribución inicial. Lo mismo aplica para el intervalo de 95% (¿cómo se calcularía integrando?). También puedes usar la aproximación de R, por ejemplo: qbeta(0.025, shape1 = 22, shape2 = 14) |> round(2) ## [1] 0.45 qbeta(0.975, shape1 = 22, shape2 = 14) |> round(2) ## [1] 0.76 Ejemplo: observaciones uniformes Ahora regresamos al problema de estimación del máximo de una distribución uniforme. En este caso, consideraremos un problema más concreto. Supongamos que hay una lotería (tipo tradicional) en México y no sabemos cuántos números hay. Obtendremos una muestra iid de \\(n\\) números, y haremos una aproximación continua, suponiendo que \\[X_i \\sim U[0,\\theta]\\] La verosimilitud es entonces \\[P(X_1,\\ldots, X_n|\\theta) = \\theta^{-n},\\] cuando \\(\\theta\\) es mayor que todas las \\(X_i\\), y cero en otro caso. Necesitaremos una inicial \\(P(\\theta)\\). Por la forma que tiene la verosimilitud, podemos intentar una distribución Pareto, que tiene la forma \\[P(\\theta) = \\frac{\\alpha \\theta_0^\\alpha}{\\theta^{\\alpha + 1}}\\] con soporte en \\([\\theta_0,\\infty]\\). Tenemos que escoger entonces el mínimo \\(\\theta_0\\) y el parámetro \\(\\alpha\\). En primer lugar, como sabemos que es una lotería nacional, creemos que no puede haber menos de unos 300 mil números, así que \\(\\theta_0 = 300\\). La función acumulada de la pareto es \\(1- (300/\\theta)^\\alpha\\), así que si \\(\\alpha = 1.1\\) el cuantil 99% es: alpha <- 1.1 (300/(0.01)^(1/alpha)) ## [1] 19738 es decir, alrededor de 20 millones de números. Creemos que es poco probable que el número de boletos sea mayor a esta cota. Nótese ahora que la posterior cumple (multiplicando verosimilitud por inicial): \\[P(\\theta|X_1,\\ldots, X_n |\\theta) \\propto \\theta^{-(n + 2.1)}\\] para \\(\\theta\\) mayor que el máximo de las \\(X_n\\)’s y 300, y cero en otro caso. Esta distribución es pareto con \\(\\theta_0' = \\max\\{300, X_1,\\ldots, X_n\\}\\) y \\(\\alpha' = n + 1.1\\) Una vez planteado nuestro modelo, veamos los datos. Obtuvimos la siguiente muestra de números: loteria_tbl <- read_csv("data/nums_loteria_avion.csv", col_names = c("id", "numero")) |> mutate(numero = as.integer(numero)) set.seed(334) muestra_loteria <- sample_n(loteria_tbl, 25) |> mutate(numero = numero/1000) muestra_loteria |> as.data.frame() |> head() ## id numero ## 1 87 348.341 ## 2 5 5851.982 ## 3 40 1891.786 ## 4 51 1815.455 ## 5 14 5732.907 ## 6 48 3158.414 Podemos simular de una Pareto como sigue: rpareto <- function(n, theta_0, alpha){ # usar el método de inverso de distribución acumulada u <- runif(n, 0, 1) theta_0 / (1 - u)^(1/alpha) } Simulamos de la inicial: sims_pareto_inicial <- tibble( theta = rpareto(20000, 300, 1.1 ), dist = "inicial") Y con los datos de la muestra, simulamos de la posterior: sims_pareto_posterior <- tibble( theta = rpareto(20000, max(c(300, muestra_loteria$numero)), nrow(muestra_loteria) + 1.1), dist = "posterior") sims_theta <- bind_rows(sims_pareto_inicial, sims_pareto_posterior) ggplot(sims_theta) + geom_histogram(aes(x = theta, fill = dist), bins = 70, alpha = 0.5, position = "identity", boundary = max(muestra_loteria$numero)) + xlim(0, 15000) + scale_y_sqrt() + geom_rug(data = muestra_loteria, aes(x = numero)) Nótese que cortamos algunos valores de la inicial en la cola derecha: un defecto de esta distribución inicial, con una cola tan larga a la derecha, es que pone cierto peso en valores que son poco creíbles y la vuelve poco apropiada para este problema. Regresaremos más adelante a este problema. Si obtenemos percentiles, obtenemos el intervalo f <- c(0.025, 0.5, 0.975) sims_theta |> group_by(dist) |> summarise(cuantiles = quantile(theta, f) |> round(2), f = f) |> pivot_wider(names_from = f, values_from = cuantiles) ## # A tibble: 2 × 4 ## # Groups: dist [2] ## dist `0.025` `0.5` `0.975` ## <chr> <dbl> <dbl> <dbl> ## 1 inicial 307. 569. 8449. ## 2 posterior 5858. 6010. 6732. Estimamos entre 5.8 millones y 6.7 millones de boletos. El máximo en la muestra es de max(muestra_loteria$numero) ## [1] 5851.982 Escoger la distribución pareto como inicial es conveniente y nos permitió resolver el problema sin dificultad, pero por su forma vemos que no necesariamente es apropiada para el problema por lo que señalamos arriba. Nos gustaría, por ejemplo, poner una inicial como la siguiente qplot(rgamma(2000, 5, 0.001), geom="histogram", bins = 20) + scale_x_continuous(breaks = seq(1000, 15000, by = 2000)) Sin embargo, los cálculos no son tan simples en este caso, pues la posterior no tiene un forma reconocible. Tendremos que usar otras estrategias de simulación para ejemplos como este (Monte Carlo por medio de Cadenas de Markov, que veremos más adelante). Probabilidad a priori La inferencia bayesiana es conceptualmente simple: siempre hay que calcular la posterior a partir de verosimilitud (modelo de datos) y distribución inicial o a priori. Sin embargo, una crítica usual que se hace de la inferencia bayesiana es precisamente que hay que tener esa información inicial, y que distintos analistas llegan a distintos resultados si tienen información inicial distinta. Eso realmente no es un defecto, es una ventaja de la inferencia bayesiana. Los datos y los problemas que queremos resolver no viven en un vacío donde podemos creer que la estatura de las personas, por ejemplo, puede variar de 0 a mil kilómetros, el número de boletos de una lotería puede ir de 2 o 3 boletos o también quizá 500 millones de boletos, o la proporción de personas infectadas de una enfermedad puede ser de unos cuantos hasta miles de millones. En todos estos casos tenemos cierta información inicial que podemos usar para informar nuestras estimaciones. Esta información debe usarse. Antes de tener datos, las probabilidades iniciales deben ser examinadas en términos del conocimiento de expertos. Las probabilidades iniciales son supuestos que hacemos acerca del problema de interés, y también están sujetas a críticas y confrontación con datos. Análisis conjugado Los dos ejemplos que hemos visto arriba son ejemplos de análisis conjugado: (Beta-bernoulli) Si las observaciones \\(X_i\\) son \\(\\mathsf{Bernoulli}(p)\\) (\\(n\\) fija) queremos estimar \\(p\\), y tomamos como distribución inicial para \\(p\\) una \\(\\mathsf{Beta}(a,b)\\), entonces la posterior para \\(p\\) cuando \\(S_n=k\\) es \\(\\mathsf{Beta}(k + a, n - k + b)\\), donde \\(S_n = X_1 + X_2 +\\cdots +X_n\\). Y más en general: (Beta-binomial) Si las observaciones \\(X_i, i=1,2,\\ldots, m\\) son \\(\\mathsf{Binomial}(n_i, p)\\) (\\(n_i\\)’s fijas) independientes, queremos estimar \\(p\\), y tomamos como distribución inicial para \\(p\\) una \\(\\mathsf{Beta}(a,b)\\), entonces la posterior para \\(p\\) cuando \\(S_m=k\\) es \\(\\mathsf{Beta}(k + a, n - k + b)\\), donde \\(S_m = X_1 + X_2 +\\cdots +X_m\\) y \\(n= n_1+n_2+\\cdots+n_m\\) También aplicamos: (Uniforme-Pareto) Si el modelo de datos \\(X_i\\) es uniforme \\(\\mathsf{U}[0,\\theta]\\) (\\(n\\) fija), queremos estimar \\(\\theta\\), y tomamos como distribución inicial para \\(\\theta\\) una Pareto \\((\\theta_0, \\alpha)\\), entonces la posterior para \\(p\\) si el máximo de las \\(X_i\\)’s es igual a \\(M\\) es Pareto con parámetros \\((\\max\\{\\theta_0, M\\}, \\alpha + n)\\). Nótese que en estos casos, dada una forma de la verosimilitud, tenemos una familia conocida de iniciales tales que las posteriores están en la misma familia. Estos modelos son convenientes porque podemos hacer simulaciones de la posterior de manera fácil, o usar sus propiedades teóricas. Otro ejemplo típico es el modelo normal-normal: (Normal-normal) Si \\(X_i\\sim \\mathsf{N}(\\mu,\\sigma)\\), con \\(\\sigma\\) conocida, y tomamos como distribución inicial para \\(\\mu \\sim \\mathsf{N}(\\mu_0,\\sigma_0)\\), y definimos la precisión \\(\\tau\\) como el inverso de la varianza \\(\\sigma^2\\), entonces la posterior de \\(\\mu\\) es Normal con media \\((1-\\lambda) \\mu_0 + \\lambda\\overline{x}\\), y precisión \\(\\tau_0 + n\\tau\\), donde \\(\\lambda = \\frac{n\\tau}{\\tau_0 + n\\tau}\\) Completa cuadrados para mostrar las fórmulas del modelo normal-normal con varianza conocida. Más útil es el siguiente modelo: (Normal-Gamma inverso) Sean \\(X_i\\sim \\mathsf{N}(\\mu, \\sigma)\\). Queremos estimar \\(\\mu\\) y \\(\\sigma\\). Tomamos como distribuciones iniciales (dadas por 4 parámetros: \\(\\mu_0, n_0, \\alpha,\\beta\\)): \\(\\tau = \\frac{1}{\\sigma^2} \\sim \\mathsf{Gamma}(\\alpha,\\beta)\\) \\(\\mu|\\sigma\\) es normal con media \\(\\mu_0\\) y varianza \\(\\sigma^2 / {n_0}\\) , y \\(p(\\mu, \\sigma) = p(\\mu|\\sigma)p(\\sigma)\\) Entonces la posterior es: \\(\\tau|x\\) es \\(\\mathsf{Gamma}(\\alpha', \\beta')\\), con \\(\\alpha' = \\alpha + n/2\\), \\(\\beta' = \\beta + \\frac{1}{2}\\sum_{i=1}^{n}(x_{i} - \\bar{x})^2 + \\frac{nn_0}{n+n_0}\\frac{({\\bar{x}}-\\mu_{0})^2}{2}\\) \\(\\mu|\\sigma,x\\) es normal con media \\(\\mu' = \\frac{n_0\\mu_{0}+n{\\bar{x}}}{n_0 +n}\\) y varianza \\(\\sigma^2/({n_0 +n})\\). \\(p(\\mu,\\sigma|x) = p(\\mu|x,\\sigma)p(\\sigma|x)\\) Observaciones Nótese que este último ejemplo tiene más de un parámetro. En estos casos, el objeto de interés es la posterior conjunta de los parámetros \\(p(\\theta_1,\\theta_2,\\cdots, \\theta_p|x)\\). Este último ejemplo es relativamente simple pues por la selección de iniciales, para simular de la conjunta de \\(\\mu\\) y \\(\\tau\\) podemos simular primero \\(\\tau\\) (o \\(\\sigma\\)), y después usar este valor para simular de \\(\\mu\\): el par de valores resultantes son una simulación de la conjunta. Los parámetros \\(\\alpha,\\beta\\) para la inicial de \\(\\tau\\) pueden interpretarse como sigue: \\(\\sqrt{\\beta/\\alpha}\\) es un valor “típico” a priori para la varianza poblacional, y \\(a\\) indica qué tan seguros estamos de este valor típico. Nótese que para que funcionen las fórmulas de la manera más simple, escogimos una dependencia a priori entre la media y la precisión: \\(\\tau = \\sigma^{-2}\\) indica la escala de variabilidad que hay en la población, la incial de la media tiene varianza \\(\\sigma^2/n_0\\). Si la escala de variabilidad de la población es más grande, tenemos más incertidumbre acerca de la localización de la media. Aunque esto tiene sentido en algunas aplicaciones, y por convenviencia usamos esta familia conjugada, muchas veces es preferible otro tipo de especificaciones para las iniciales: por ejemplo, la media normal y la desviación estándar uniforme, o media normal, con iniciales independientes. Sin embargo, estos casos no son tratables con análisis conjugado (veremos más adelante cómo tratarlos con MCMC). Ejemplo Supongamos que queremos estimar la estatura de los cantantes de tesitura tenor con una muestra iid de tenores de Estados Unidos. Usaremos el modelo normal de forma que \\(X_i\\sim \\mathsf{N}(\\mu, \\sigma^2)\\). Una vez decidido el modelo, tenemos que poner distribución inicial para los parámetros \\((\\mu, \\sigma^2)\\). Comenzamos con \\(\\sigma^2\\). Como está el modelo, esta inicial debe estar dada para la precisión \\(\\tau\\), pero podemos simular para ver cómo se ve nuestra inicial para la desviación estándar. En la población general la desviación estándar es alrededor de 7 centímetros # Comenzamos seleccionando un valor que creemos típico para la desviación estándar sigma_0 <- 7 # seleccionamos un valor para a, por ejemplo: si es más chico sigma tendrá más # disperisón a <- 3 # ponemos 7 = sqrt(b/a) -> b = a * 64 b <- a * sigma_0 ^ 2 c(a = a, b = b) ## a b ## 3 147 Ahora simulamos para calcular cuantiles tau <- rgamma(1000, a, b) quantile(tau, c(0.05, 0.95)) ## 5% 95% ## 0.005781607 0.042170161 sigma <- 1 / sqrt(tau) mean(sigma) ## [1] 8.002706 quantile(sigma, c(0.05, 0.95)) ## 5% 95% ## 4.869653 13.151520 Que es dispersión considerable: con poca probabilidad la desviación estándar es menor a 4 centímetros, y también creemos que es poco creíble la desviación estándar sea de más de 13 centímetros. Comenzamos con \\(\\mu\\). Sabemos, por ejemplo, que con alta probabilidad la media debe ser algún número entre 1.60 y 1.80. Podemos investigar: la media nacional en estados unidos está alrededor de 1.75, y el percentil 90% es 1.82. Esto es variabilidad en la población: debe ser muy poco probable, por ejemplo, que la media de tenores sea 1.82 Quizá los cantantes tienden a ser un poco más altos o bajos que la población general, así que podríamos agregar algo de dispersión. Podemos establecer parámetros y simular de la marginal a partir de las fórmulas de arriba para entender cómo se ve la inicial de \\(\\mu\\): mu_0 <- 175 # valor medio de inicial n_0 <- 5 # cuánta concentración en la inicial tau <- rgamma(1000, a,b) sigma <- 1/sqrt(tau) mu <- map_dbl(sigma, ~ rnorm(1, mu_0, .x / sqrt(n_0))) quantile(mu, c(0.05, 0.5, 0.95)) ## 5% 50% 95% ## 168.7275 174.8412 180.7905 Que consideramos un rango en el que con alta probabilidad debe estar la media poblacional de los cantantes. Podemos checar nuestros supuestos simulando posibles muestras usando sólo nuestra información previa: simular_normal_invgamma <- function(n, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular media tau <- rgamma(1, a, b) sigma <- 1 / sqrt(tau) mu <- rnorm(1, mu_0, sigma/sqrt(n_0)) # simular sigma rnorm(n, mu, sigma) } set.seed(3461) sims_tbl <- tibble(rep = 1:20) |> mutate(estatura = map(rep, ~ simular_normal_invgamma(500, c(mu_0, n_0, a, b)))) |> unnest(cols = c(estatura)) ggplot(sims_tbl, aes(x = estatura)) + geom_histogram() + facet_wrap(~ rep) + geom_vline(xintercept = c(150, 180), colour = "red") Pusimos líneas de referencia en 150 y 180. Vemos que nuestras iniciales no producen simulaciones totalmente fuera del contexto, y parecen cubrir apropiadamente el espacio de posiblidades para estaturas de los tenores. Quizá hay algunas realizaciones poco creíbles, pero no extremadamente. En este punto, podemos regresar y ajustar la inicial para \\(\\sigma\\), que parece tomar valores demasiado grandes (produciendo por ejemplo una simulación con estatura de 220 y 140, que deberían ser menos probables). Ahora podemos usar los datos para calcular nuestras posteriores. set.seed(3413) cantantes <- lattice::singer |> mutate(estatura_cm = round(2.54 * height)) |> filter(str_detect(voice.part, "Tenor")) |> sample_n(20) cantantes ## height voice.part estatura_cm ## 139 70 Tenor 1 178 ## 150 68 Tenor 2 173 ## 140 65 Tenor 1 165 ## 132 66 Tenor 1 168 ## 152 69 Tenor 2 175 ## 141 72 Tenor 1 183 ## 161 71 Tenor 2 180 ## 156 71 Tenor 2 180 ## 158 71 Tenor 2 180 ## 164 69 Tenor 2 175 ## 147 68 Tenor 1 173 ## 130 72 Tenor 1 183 ## 162 71 Tenor 2 180 ## 134 74 Tenor 1 188 ## 170 69 Tenor 2 175 ## 167 68 Tenor 2 173 ## 149 64 Tenor 1 163 ## 143 68 Tenor 1 173 ## 157 69 Tenor 2 175 ## 153 71 Tenor 2 180 Los cálculos son un poco tediosos, pero podemos construir una función apropiada: calcular_pars_posterior <- function(x, pars_inicial){ # iniciales mu_0 <- pars_inicial[1] n_0 <- pars_inicial[2] a_0 <- pars_inicial[3] b_0 <- pars_inicial[4] # muestra n <- length(x) media <- mean(x) S2 <- sum((x - media)^2) # sigma post a_1 <- a_0 + 0.5 * n b_1 <- b_0 + 0.5 * S2 + 0.5 * (n * n_0) / (n + n_0) * (media - mu_0)^2 # posterior mu mu_1 <- (n_0 * mu_0 + n * media) / (n + n_0) n_1 <- n + n_0 c(mu_1, n_1, a_1, b_1) } pars_posterior <- calcular_pars_posterior(cantantes$estatura_cm, c(mu_0, n_0, a, b)) pars_posterior ## [1] 175.8 25.0 13.0 509.0 ¿Cómo se ve nuestra posterior comparada con la inicial? Podemos hacer simulaciones: sim_params <- function(m, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular sigmas sims <- tibble(tau = rgamma(m, a, b)) |> mutate(sigma = 1 / sqrt(tau)) # simular mu sims <- sims |> mutate(mu = rnorm(m, mu_0, sigma / sqrt(n_0))) sims } sims_inicial <- sim_params(5000, c(mu_0, n_0, a, b)) |> mutate(dist = "inicial") sims_posterior <- sim_params(5000, pars_posterior) |> mutate(dist = "posterior") sims <- bind_rows(sims_inicial, sims_posterior) ggplot(sims, aes(x = mu, y = sigma, colour = dist)) + geom_point(alpha = 0.4) Y vemos que nuestra posterior es consistente con la información inicial que usamos, hemos aprendido considerablemente de la muestra. La posterior se ve como sigue. Hemos marcado también las medias posteriores de cada parámetro: media y desviación estándar. medias_post <- sims |> filter(dist == "posterior") |> select(-dist) |> summarise(across(everything(), mean)) ggplot(sims |> filter(dist == "posterior"), aes(x = mu, y = sigma)) + geom_point(colour = "#00BFC4") + geom_point(data = medias_post, size = 5, colour = "black") + coord_equal() Podemos construir intervalos creíbles del 90% para estos dos parámetros, por ejemplo haciendo intervalos de percentiles: f <- c(0.05, 0.5, 0.95) sims |> pivot_longer(cols = mu:sigma, names_to = "parametro") |> group_by(dist, parametro) |> reframe(cuantil = quantile(value, f) |> round(1), f = f) |> pivot_wider(names_from = f, values_from = cuantil) ## # A tibble: 4 × 5 ## dist parametro `0.05` `0.5` `0.95` ## <chr> <chr> <dbl> <dbl> <dbl> ## 1 inicial mu 169. 175. 181. ## 2 inicial sigma 4.8 7.4 13.3 ## 3 posterior mu 174. 176. 178. ## 4 posterior sigma 5.1 6.3 8.2 Como comparación, los estimadores de máxima verosimlitud son media_mv <- mean(cantantes$estatura_cm) sigma_mv <- mean((cantantes$estatura_cm - media_mv)^2) |> sqrt() c(media_mv, sigma_mv) ## [1] 176 6 Ahora solo resta checar que el modelo es razonable. Veremos más adelante cómo hacer esto, usando la distribución predictiva posterior. Pasos de un análisis de datos bayesiano Como vimos en los ejemplos, en general un análisis de datos bayesiano sigue los siguientes pasos: Identificar los datos releventes a nuestra pregunta de investigación, el tipo de datos que vamos a describir, que variables queremos estimar. Definir el modelo descriptivo para los datos. La forma matemática y los parámetros deben ser apropiados para los objetivos del análisis. Especificar la distribución inicial de los parámetros. Utilizar inferencia bayesiana para reubicar la credibilidad a lo largo de los posibles valores de los parámetros. Verificar que la distribución posterior replique los datos de manera razonable, de no ser el caso considerar otros modelos descriptivos para los datos. Elicitando probablidades subjetivas (opcional) No siempre es fácil elicitar probabilidades subjetivas de manera que capturemos el verdadero conocimiento de dominio que tenemos. Una manera clásica de hacerlo es con apuestas Considera una pregunta sencilla que puede afectar a un viajero: ¿Qué tanto crees que habrá una tormenta que ocasionará el cierre de la autopista México-Acapulco en el puente del \\(20\\) de noviembre? Como respuesta debes dar un número entre \\(0\\) y \\(1\\) que refleje tus creencias. Una manera de seleccionar dicho número es calibrar las creencias en relación a otros eventos cuyas probabilidades son claras. Como evento de comparación considera una experimento donde hay canicas en una urna: \\(5\\) rojas y \\(5\\) blancas. Seleccionamos una canica al azar. Usaremos esta urna como comparación para considerar la tormenta en la autopista. Ahora, considera el siguiente par de apuestas de las cuales puedes elegir una: A. Obtienes \\(\\$1000\\) si hay una tormenta que ocasiona el cierre de la autopista el próximo \\(20\\) de noviembre. B. Obtienes \\(\\$1000\\) si seleccionas una canica roja de la urna que contiene \\(5\\) canicas rojas y \\(5\\) blancas. Si prefieres la apuesta B, quiere decir que consideras que la probabilidad de tormenta es menor a \\(0.5\\), por lo que al menos sabes que tu creencia subjetiva de una la probabilidad de tormenta es menor a \\(0.5\\). Podemos continuar con el proceso para tener una mejor estimación de la creencia subjetiva. A. Obtienes \\(\\$1000\\) si hay una tormenta que ocasiona el cierre de la autopista el próximo \\(20\\) de noviembre. C. Obtienes \\(\\$1000\\) si seleccionas una canica roja de la urna que contiene \\(1\\) canica roja y \\(9\\) blancas. Si ahora seleccionas la apuesta \\(A\\), esto querría decir que consideras que la probabilidad de que ocurra una tormenta es mayor a \\(0.10\\). Si consideramos ambas comparaciones tenemos que tu probabilidad subjetiva se ubica entre \\(0.1\\) y \\(0.5\\). Verificación predictiva posterior Una vez que ajustamos un modelo bayesiano, podemos simular nuevas observaciones a partir del modelo. Esto tiene dos utilidades: Hacer predicciones acerca de datos no observados. Confirmar que nuevas observaciones, producidas simulando con el modelo son similares a las que de hecho observamos. Esto nos permite confirmar la calidad del ajuste del modelo, y se llama verificación predictiva posterior. Supongamos que tenemos la posterior \\(p(\\theta | x)\\). Podemos generar una nueva replicación de los datos como sigue: La distribución predictiva posterior genera nuevas observaciones a partir de la información observada. La denotamos como \\(p(\\tilde{x}|x)\\). Para simular de ella: Muestreamos un valor \\(\\tilde{\\theta}\\) de la posterior \\(p(\\theta|x)\\). Simulamos del modelo de las observaciones \\(\\tilde{x} \\sim p(\\tilde{x}|\\tilde{\\theta})\\). Repetimos el proceso hasta obtener una muestra grande. Usamos este método para producir, por ejemplo, intervalos de predicción para nuevos datos. Si queremos una replicación de las observaciones de la predictiva posterior, Muestreamos un valor \\(\\tilde{\\theta}\\) de la posterior \\(p(\\theta|x)\\). Simulamos del modelo de las observaciones \\(\\tilde{x}_1, \\tilde{x}_2,\\ldots, \\tilde{x}_n \\sim p(\\tilde{x}|\\tilde{\\theta})\\), done \\(n\\) es el tamaño de muestra de la muestra original \\(x\\). Usamos este método para producir conjuntos de datos simulados que comparamos con los observados para verificar nuestro modelo. Ejemplo: estaturas de tenores En este ejemplo, usaremos la posterior predictiva para checar nuestro modelo. Vamos a crear varias muestras, del mismo tamaño que la original, según nuestra predictiva posterior, y compararemos estas muestras con la observada. Y ahora simulamos otra muestra muestra_sim <- simular_normal_invgamma(20, pars_posterior) muestra_sim |> round(0) ## [1] 167 181 184 181 167 167 172 170 177 172 169 174 182 184 176 171 175 176 168 ## [20] 181 Podemos simular varias muestras y hacer una prueba de lineup: library(nullabor) set.seed(9921) sims_obs <- tibble(.n = 1:19) |> mutate(estatura_cm = map(.n, ~ simular_normal_invgamma(20, pars_posterior))) |> unnest(estatura_cm) pos <- sample(1:20, 1) lineup_tbl <- lineup(true = cantantes |> select(estatura_cm), samples = sims_obs, pos = pos) ggplot(lineup_tbl, aes(x = estatura_cm)) + geom_histogram(binwidth = 2.5) + facet_wrap(~.sample) Con este tipo de gráficas podemos checar desajustes potenciales de nuestro modelo. ¿Puedes encontrar los datos verdaderos? ¿Cuántos seleccionaron los datos correctos? Ejemplo: modelo Poisson Supongamos que pensamos el modelo para las observaciones es Poisson con parámetro \\(\\lambda\\). Pondremos como inicial para \\(\\lambda\\) una exponencial con media 10. Nótese que la posterior está dada por \\[p(\\lambda|x_1,\\ldots, x_n) \\propto e^{-n\\lambda}\\lambda^{\\sum_i x_i} e^{-0.1\\lambda} = \\lambda^{n\\overline{x}}e^{-\\lambda(n + 0.1)}\\] que es una distribución gamma con parámetros \\((n\\overline{x} + 1, n+0.1)\\) Ahora supongamos que observamos la siguiente muestra, ajustamos nuestro modelo y hacemos replicaciones posteriores de los datos observados: x <- rnbinom(250, mu = 20, size = 3) crear_sim_rep <- function(x){ n <- length(x) suma <- sum(x) sim_rep <- function(rep){ lambda <- rgamma(1, sum(x) + 1, n + 0.1) x_rep <- rpois(n, lambda) tibble(rep = rep, x_rep = x_rep) } } sim_rep <- crear_sim_rep(x) lineup_tbl <- map(1:5, ~ sim_rep(.x)) |> bind_rows() |> bind_rows(tibble(rep = 6, x_rep = x)) ggplot(lineup_tbl, aes(x = x_rep)) + geom_histogram(bins = 15) + facet_wrap(~rep) Y vemos claramente que nuestro modelo no explica apropiadamente la variación de los datos observados. Contrasta con: set.seed(223) x <- rpois(250, 15) crear_sim_rep <- function(x){ n <- length(x) suma <- sum(x) sim_rep <- function(rep){ lambda <- rgamma(1, sum(x) + 1, n + 0.1) x_rep <- rpois(n, lambda) tibble(rep = rep, x_rep = x_rep) } } sim_rep <- crear_sim_rep(x) lineup_tbl <- map(1:5, ~ sim_rep(.x)) |> bind_rows() |> bind_rows(tibble(rep = 6, x_rep = x)) ggplot(lineup_tbl, aes(x = x_rep)) + geom_histogram(bins = 15) + facet_wrap(~rep) Y verificamos que en este caso el ajuste del modelo es apropiado. Predicción Cuando queremos hacer predicciones particulares acerca de datos que observemos en el futuro, también podemos usar la posterior predictiva. En este caso, tenemos que considerar La variabilidad que produce la incertidumbre en la estimación de los parámetros La variabilidad de las observaciones dados los parámetros. Es decir, tenemos que simular sobre todos las combinaciones factibles de los parámetros. Ejemplo: cantantes Si un nuevo tenor llega a un coro, ¿cómo hacemos una predicción de su estatura? Como siempre, quisiéramos obtener un intervalo que exprese nuestra incertidumbre acerca del valor que vamos a observar. Entonces haríamos: sims_posterior <- sim_params(50000, pars_posterior) |> mutate(y_pred = rnorm(n(), mu, sigma)) sims_posterior |> head() ## # A tibble: 6 × 4 ## tau sigma mu y_pred ## <dbl> <dbl> <dbl> <dbl> ## 1 0.0286 5.91 175. 181. ## 2 0.0200 7.07 177. 178. ## 3 0.0257 6.23 176. 170. ## 4 0.0344 5.39 176. 174. ## 5 0.0297 5.80 175. 169. ## 6 0.0282 5.96 177. 170. f <- c(0.025, 0.5, 0.975) sims_posterior |> summarise(f = f, y_pred = quantile(y_pred, f)) ## # A tibble: 3 × 2 ## f y_pred ## <dbl> <dbl> ## 1 0.025 163. ## 2 0.5 176. ## 3 0.975 189. Y con esto obtenemos el intervalo (163, 189), al 95%, para una nueva observación. Nótese que este intervalo no puede construirse con una simulación particular de la posterior de los parámetros, pues sería demasiado corto. Es posible demostrar que en este caso, la posterior predictiva tiene una forma conocida: La posterior predictiva para el modelo normal-gamma inverso es una distribución \\(t\\) con \\(2\\alpha'\\) grados de libertad, centrada en \\(\\mu'\\), y con escala \\(s^2 = \\frac{\\beta'}{\\alpha'}\\frac{n + n_0 + 1}{n +n_0}\\) mu_post <- pars_posterior[1] n_post <- pars_posterior[2] alpha_post <- pars_posterior[3] beta_post <- pars_posterior[4] s <- sqrt(beta_post/alpha_post) * sqrt((n_post + 1)/n_post) qt(c(0.025, 0.5, 0.975), 2 * alpha_post) * s + mu_post ## [1] 162.6832 175.8000 188.9168 Calcula la posterior predictiva del modelo Beta-Bernoulli y Beta-Binomial. (Más difícil) Calcula la posterior predictiva del modelo Poisson-Gamma. Ejemplo: posterior predictiva de Pareto-Uniforme. La posterior predictiva del modelo Pareto-Uniforme no tiene un nombre estándar, pero podemos aproximarla usando simulación. Usando los mismos datos del ejercicio de la lotería, haríamos: rpareto <- function(n, theta_0, alpha){ # usar el método de inverso de distribución acumulada u <- runif(n, 0, 1) theta_0 / (1 - u)^(1/alpha) } # Simulamos de la posterior de los parámetros lim_inf_post <- max(c(300, muestra_loteria$numero)) k_posterior <- nrow(muestra_loteria) + 1.1 sims_pareto_posterior <- tibble( theta = rpareto(100000, lim_inf_post, k_posterior)) # Simulamos una observación para cada una de las anteriores: sims_post_pred <- sims_pareto_posterior |> mutate(x_pred = map_dbl(theta, ~ runif(1, 0, .x))) # Graficamos ggplot(sims_post_pred, aes(x = x_pred)) + geom_histogram(binwidth = 50) + geom_vline(xintercept = lim_inf_post, colour = "red") Que es una mezcla de una uniforme con una Pareto. Referencias "],["calibración-bayesiana-y-regularización.html", "Sección 11 Calibración bayesiana y Regularización Enfoque bayesiano y frecuentista Ejemplo: estimación de una proporción Intervalos de Agresti-Coull Incorporando información inicial Inferencia bayesiana y regularización Ejemplo: modelo normal y estaturas Ejemplo: estimación de proporciones Teoría de decisión Riesgo de Bayes", " Sección 11 Calibración bayesiana y Regularización El enfoque bayesiano se puede formalizar coherentemente en términos de probabilidades subjetivas, y como vimos, esta es una fortaleza del enfoque bayesiano. En la práctica, sin embargo, muchas veces puede ser difícil argumentar en términos exclusivos de probabilidad subjetiva, aunque hagamos los esfuerzos apropiados para incorporar la totalidad de información que distintos actores involucrados pueden tener. Consideremos, por ejemplo, que INEGI produjera un intervalo creíble del 95% para el ingreso mediano de los hogares de México. Aún cuando nuestra metodología sea transparente y correctamente informada, algunos investigadores interesados puede ser que tengan recelo en usar esta información, y quizá preferirían hacer estimaciones propias. Esto restaría valor al trabajo cuidadoso que pusimos en nuestras estimaciones oficiales. Por otra parte, el enfoque frecuentista provee de ciertas garantías mínimas para la utilización de las estimaciones, que no dependen de la interpretación subjetiva de la probabilidad, sino de las propiedades del muestreo. Consideremos la cobertura de los intervalos de confianza: Bajo ciertos supuestos de nuestros modelos, la probabilidad de que un intervalo de confianza del 95% cubra al verdadero valor poblacional es del 95%. Esta probabilidad es sobre las distintas muestras que se pueden obtener según el diseño del muestreo. Los intervalos creíbles en principio no tienen por qué cumplir esta propiedad, pero consideramos que en la práctica es una garantía mínima que deberían cumplir. El enfoque resultante se llama bayesiano calibrado, Little (2011) . La idea es seguir el enfoque bayesiano usual para construir nuestras estimaciones, pero verificar hasta donde sea posible que los intervalos resultantes satisfacen alguna garantía frecuentista básica. Observación. checar que la cobertura real es similar a la nominal es importante en los dos enfoques: frecuentista y bayesiano. Los intervalos frecuentistas, como hemos visto, generalmente son aproximados, y por lo tanto no cumplen automáticamente esta propiedad de calibración. Enfoque bayesiano y frecuentista Los métodos estadísticos clásicos toman el punto de vista frecuentista y se basa en los siguientes puntos (Wasserman (2013)): La probabilidad se interpreta como un límite de frecuencias relativas, donde las probabilidades son propiedades objetivas en el mundo real. En un modelo, los parámetros son constantes fijas (desconocidas). Como consecuencia, no se pueden realizar afirmaciones probabilísticas útiles en relación a éstos. Los procedimientos estadísticos deben diseñarse con el objetivo de tener propiedades frecuentistas bien definidas. Por ejemplo, un intervalo de confianza del \\(95\\%\\) debe contener el verdadero valor del parámetro con frecuencia límite de al menos el \\(95\\%\\). En contraste, el acercamiento Bayesiano muchas veces se describe por los siguientes postulados: La probabilidad describe grados de creencia, no frecuencias limite. Como tal uno puede hacer afirmaciones probabilísticas acerca de muchas cosas y no solo datos sujetos a variabilidad aleatoria. Por ejemplo, puedo decir: “La probabilidad de que Einstein tomara una taza de té el primero de agosto de \\(1948\\)” es \\(0.35\\), esto no hace referencia a ninguna frecuencia relativa sino que refleja la certeza que yo tengo de que la proposición sea verdadera. Podemos hacer afirmaciones probabilísticas de parámetros. Podemos hacer inferencia de un parámetro \\(\\theta\\) por medio de distribuciones de probabilidad. Las inferencias como estimaciones puntuales y estimaciones de intervalos se pueden extraer de dicha distribución. Finalmente, en el enfoque bayesiano calibrado (Little (2011)): Usamos el enfoque bayesiano para modelar y hacer afirmaciones probabilísticas de los parámetros. Buscamos cumplir las garantías frecuentistas del inciso 3). Ejemplo: estimación de una proporción Recordamos nuestro problema de estimación de una proporcion \\(\\theta\\). Usando la distribución inicial \\(p(\\theta)\\sim \\mathsf{Beta}(2,2)\\), y la verosimilitud estándar binomial, vimos que la posterior cuando observamos \\(k\\) éxitos es \\[p(\\theta|k) \\sim \\mathsf{Beta}(k + 2, n - k + 2)\\]. La media posterior es \\[\\frac{k + 2}{n + 4} \\] que podemos interpretar como: agrega 2 éxitos y 2 fracasos a los datos observados y calcula la proporción de éxitos. Un intervalo posterior de credibilidad del 95% se calcula encontrando los cuantiles 0.025 y 0.975 de una \\(\\mathsf{Beta}(k + 2, n - k + 2)\\) \\[I_a = \\left [q_{0.025}(k+2, n+4), q_{0.975}(k+2, n+4)\\right ]\\] Que compararemos con el intervalo usual de Wald: si \\(\\hat{\\theta} = \\frac{k}{n}\\), entonces \\[I_w = \\left [\\hat{\\theta} - 2 \\sqrt{\\frac{\\hat{\\theta}(1-\\hat{\\theta})}{n}}, \\hat{\\theta} + 2 \\sqrt{\\frac{\\hat{\\theta}(1-\\hat{\\theta})}{n}}\\right]\\] ¿Cómo podemos comparar la calibración de estos dos intervalos? Nominalmente, deben tener cobertura de 95%. Hagamos un ejercicio de simulación para distintos tamaños de muestra \\(n\\) y posibles valores \\(\\theta\\in (0,1)\\): set.seed(332) simular_muestras <- function(M, n, p){ k = rbinom(M, n, p) tibble(rep = 1:M, n = n, p = p, k = k) } intervalo_wald <- function(n, k){ p_hat <- k / n ee_hat <- sqrt(p_hat * (1 - p_hat) / n) tibble(inf = p_hat - 2 * ee_hat, sup = p_hat + 2 * ee_hat) } intervalo_bayes <- function(n, k, a = 2, b = 2){ a <- k + a b <- n - k + b tibble(inf = qbeta(0.025, a, b), sup = qbeta(0.975, a, b)) } set.seed(812) ejemplo <- simular_muestras(5, 20, 0.4) ejemplo |> mutate(intervalo = intervalo_wald(n, k)) |> pull(intervalo) |> bind_cols(ejemplo) |> select(-rep) ## # A tibble: 5 × 5 ## inf sup n p k ## <dbl> <dbl> <dbl> <dbl> <int> ## 1 0.0211 0.379 20 0.4 4 ## 2 0.228 0.672 20 0.4 9 ## 3 0.276 0.724 20 0.4 10 ## 4 0.228 0.672 20 0.4 9 ## 5 0.137 0.563 20 0.4 7 ejemplo |> mutate(intervalo = intervalo_bayes(n, k)) |> pull(intervalo) |> bind_cols(ejemplo) |> select(-rep) ## # A tibble: 5 × 5 ## inf sup n p k ## <dbl> <dbl> <dbl> <dbl> <int> ## 1 0.102 0.437 20 0.4 4 ## 2 0.268 0.655 20 0.4 9 ## 3 0.306 0.694 20 0.4 10 ## 4 0.268 0.655 20 0.4 9 ## 5 0.197 0.573 20 0.4 7 ¿Cuáles de estos intervalos cubren al verdadero valor? Nótese que no podemos descalificar a ningún método por no cubrir una vez. Es fácil producir un intervalo con 100% de cobertura: (0,1). Pero no nos informa dónde es probable que esté el parámetro. Sin embargo, podemos checar la cobertura frecuentista haciendo una cantidad grande de simulaciones: parametros <- crossing(n = c(5, 10, 30, 60, 100, 400), p = c(0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.05, 0.07, 0.1, 0.15)) set.seed(2343) # simulaciones simulaciones <- parametros |> mutate(muestra = map2(n, p, ~ simular_muestras(50000, .x, .y) |> select(rep, k))) |> unnest(muestra) # calcular_cobertura calcular_cobertura <- function(simulaciones, construir_intervalo){ # nombre de función intervalo_nombre <- substitute(construir_intervalo) |> as.character() cobertura_tbl <- simulaciones |> mutate(intervalo = construir_intervalo(n, k)) |> pull(intervalo) |> bind_cols(simulaciones) |> mutate(cubre = p >= inf & p <= sup) |> group_by(n, p) |> summarise(cobertura = mean(cubre), long_media = mean(sup - inf)) cobertura_tbl |> mutate(tipo = intervalo_nombre) } cobertura_wald <- calcular_cobertura(simulaciones, intervalo_wald) cobertura_wald ## # A tibble: 66 × 5 ## # Groups: n [6] ## n p cobertura long_media tipo ## <dbl> <dbl> <dbl> <dbl> <chr> ## 1 5 0.01 0.0483 0.0347 intervalo_wald ## 2 5 0.015 0.0733 0.0527 intervalo_wald ## 3 5 0.02 0.0954 0.0689 intervalo_wald ## 4 5 0.025 0.119 0.0862 intervalo_wald ## 5 5 0.03 0.140 0.102 intervalo_wald ## 6 5 0.035 0.165 0.120 intervalo_wald ## 7 5 0.04 0.187 0.137 intervalo_wald ## 8 5 0.05 0.227 0.167 intervalo_wald ## 9 5 0.07 0.299 0.223 intervalo_wald ## 10 5 0.1 0.398 0.303 intervalo_wald ## # ℹ 56 more rows graficar_cobertura <- function(cobertura_tbl){ ggplot(cobertura_tbl, aes(x = p, y = cobertura, colour = tipo)) + geom_hline(yintercept = 0.95, colour = "black") + geom_line() + geom_point() + facet_wrap(~n) + ylim(0, 1) } cobertura_wald |> graficar_cobertura() La cobertura real es mucho más baja que la nominal en muchos casos, especialmente cuando la \\(p\\) es baja y \\(n\\) es chica. Pero incluso para muestras relativamente grandes (100), la cobertura es mala si \\(p\\) es chica. Ahora probamos nuestro método alternativo: cobertura_bayes <- calcular_cobertura(simulaciones, intervalo_bayes) bind_rows(cobertura_wald, cobertura_bayes) |> mutate(tipo = factor(tipo, levels = c('intervalo_wald', 'intervalo_bayes'))) |> graficar_cobertura() Y vemos que en general el intervalo de Bayes es superior al de Wald, en sentido de que su cobertura real es más cercana a la nominal. El caso donde fallan los dos es para muestras muy chicas \\(n=5, 10\\), con probabilidades de éxito chicas \\(p\\leq 0.02\\). Sin embargo, si tenemos información previa acerca del tamaño de la proporción que estamos estimando, es posible obtener buena calibración con el método bayesiano. En este caso particular, tenemos argumentos frecuentistas para utilizar el método bayesiano. Por ejemplo, si el INEGI utilizara estos intervalos creíbles, un análisis de calibración de este tipo sostendría esa decisión. Intervalos de Agresti-Coull Un método intermedio que se usa para obtener mejores intervalos cuando estimamos proporciones es el siguiente: Agregar dos 1’s y dos 0’s a los datos. Utilizar el método de Wald con estos datos modificados. intervalo_agresti_coull <- function(n, k){ p_hat <- (k + 2)/ (n + 4) ee_hat <- sqrt(p_hat * (1 - p_hat) / n) tibble(inf = p_hat - 2 * ee_hat, sup = p_hat + 2 * ee_hat) } cobertura_ac <- calcular_cobertura(simulaciones, intervalo_agresti_coull) bind_rows(cobertura_wald, cobertura_bayes, cobertura_ac) |> mutate(tipo = factor(tipo, levels = c('intervalo_wald', 'intervalo_bayes', 'intervalo_agresti_coull'))) |> graficar_cobertura() Que tiende a ser demasiado conservador para proporciones chicas: graficar_cobertura(cobertura_ac) + ylim(c(0.9, 1)) Conclusión 1: Los intervalos de Agresti-Coull son una buena alternativa para estimar proporciones como sustituto de los intervalos clásicos de Wald, aunque tienden a ser muy conservadores para muestras chicas Idealmente podemos utilizar un método bayesiano pues normalmente tenemos información inicial acerca de las proporciones que queremos estimar. Incorporando información inicial Nótese que generalmente tenemos información acerca de la cantidad que queremos estimar: por ejemplo, que proporción de visitantes de un sitio web compra algo (usualmente muy baja, menos de 2%), qué proporción de personas tiene diabetes tipo 1 (una proporción muy baja, menos de 1 por millar), o qué proporción de hogares tienen ingresos trimestrales mayores a 150 mil pesos (menos de %5 con alta probabilidad). En este caso, tenemos que ajustar nuestra inicial. Por ejemplo, para el problema de ingresos, podríamos usar una \\(\\mathsf{Beta}(2, 100)\\), cuyos cuantiles son: # uno de cada 100 a <- 2 b <- 100 beta_sims <- rbeta(5000, a, b) quantile(beta_sims, c(0.01, 0.05, 0.50, 0.90, 0.99)) |> round(3) ## 1% 5% 50% 90% 99% ## 0.001 0.004 0.016 0.039 0.067 qplot(beta_sims) Veamos cómo se ven los intervalos bayesianos producidos con esta inicial: crear_intervalo_bayes <- function(a, b){ intervalo_fun <- function(n, k){ a_post <- k + a b_post <- n - k + b tibble(inf = qbeta(0.025, a_post, b_post), sup = qbeta(0.975, a_post, b_post)) } intervalo_fun } intervalo_bayes_2 <- crear_intervalo_bayes(a, b) cobertura_bayes <- calcular_cobertura(simulaciones, intervalo_bayes_2) graficar_cobertura(bind_rows(cobertura_bayes, cobertura_ac) |> filter(p < 0.05)) + ylim(c(0.5, 1)) Y vemos que la calibración es similar. Notemos sin embargo que la longitud del del intervalo bayesiano es mucho menor que el de Agresti-Coull cuando la muestra es chica: ggplot(bind_rows(cobertura_bayes, cobertura_ac), aes(x = p, y = long_media, colour = tipo)) + geom_point() + facet_wrap(~n) Cuando la muestra es chica, los intervalos de bayes son similares a los iniciales, y mucho más cortos que los de Agresti-Coull. Para muestras intermedias (50-100) los intervalos bayesianos son más informativos que los de Agresti-Coull, con calibración similar, y representan aprendizaje por encima de lo que sabíamos en la inicial. Para muestras grandes, obtenemos resultados simililares. Por ejemplo: set.seed(2131) k <- rbinom(1, 50, 0.03) k ## [1] 4 intervalo_agresti_coull(50, k) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.022 0.2 es un intervalo muy grande que puede incluir valores negativos. En contraste, el intervalo bayesiano es: intervalo_bayes_2(50, k) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.015 0.076 Aún quitando valores negativos, los intervalos de Agresti-Coull son mucho más anchos. La aproximación bayesiana, entonces, utiliza información previa para dar un resultado considerablemente más informativo, con calibración similar a Agresti-Coull. ¿Aprendimos algo? Comparemos la posterior con la inicial: beta_sims_inicial <- tibble(prop = rbeta(5000, a, b), dist = "inicial") beta_sims_posterior <- tibble(prop = rbeta(5000, a + k, b + 50), dist = "posterior") bind_rows(beta_sims_inicial, beta_sims_posterior) |> ggplot(aes(x = prop, fill = dist)) + geom_histogram(alpha = 0.5, position = "identity") Donde vemos que no aprendimos mucho en este caso, pero nuestras creencias sí cambiaron en comparación con la inicial. Conclusión 2: con el enfoque bayesiano podemos obtener intervalos informativos con calibración razonable, incluso con información inicial que no es muy precisa. Los intervalos de Agresti-Coull son poco informativos para muestras chicas y/o proporciones chicas. Ejemplo: porporción de hogares de ingresos grandes Usaremos los datos de ENIGH como ejemplo (ignorando el diseño, pero es posible hacer todas las estimaciones correctamente) para estimar el porcentaje de hogares que tienen ingreso corriente de más de 150 mil pesos al trimestre. Suponemos que la muestra del enigh es la población, y tomaremos una muestra iid de esta población. Usamos la misma inicial que mostramos arriba, que es una Beta con parámetros c(a,b) ## [1] 2 100 set.seed(2521) muestra_enigh <- read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) |> sample_n(120) |> mutate(mas_150mil = ing_cor > 150000) Un intervalo de 95% es entonces k <- sum(muestra_enigh$mas_150mil) k ## [1] 3 intervalo_bayes_2(120, sum(muestra_enigh$mas_150mil)) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.007 0.046 La media posterior es prop_post <- (a + k) / (120 + b) prop_post ## [1] 0.02272727 ¿Cuál es la verdadera proporción? read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) |> mutate(mas_150mil = ing_cor > 150000) |> summarise(prop_pob = mean(mas_150mil)) ## # A tibble: 1 × 1 ## prop_pob ## <dbl> ## 1 0.0277 En este caso, nuestro intervalo cubre a la proporción poblacional. Inferencia bayesiana y regularización Como hemos visto en análisis y modelos anteriores, la posterior que usamos para hacer inferencia combina aspectos de la inicial con la verosimilitud (los datos). Una manera de ver esta combinación y sus beneficios es pensando en término de regularización de estimaciones. En las muestras hay variación. Algunas muestras particulares nos dan estimaciones de máxima verosimilitud pobres de los parámetros de interés (estimaciones ruidosas). Cuando esas estimaciones pobres están en una zona de baja probabilidad de la inicial, la estimación posterior tiende a moverse (o encogerse) hacia las zonas de alta probabilidad de la inicial. Esto filtra ruido en las estimaciones. El mecanismo resulta en una reducción del error cuadrático medio, mediante una reducción de la varianza de los estimadores (aunque quizá el sesgo aumente). Esta es una técnica poderosa, especialmente para problemas complejos donde tenemos pocos datos para cada parámetro. En general, excluímos resultados que no concuerdan con el conocimiento previo, y esto resulta en mayor precisión en las estimaciones. Ejemplo: modelo normal y estaturas Haremos un experimento donde simularemos muestras de los datos de cantantes. Usaremos el modelo normal-gamma inverso que discutimos anteriormente, con la información inicial que elicitamos. ¿Cómo se compara la estimación de máxima verosimilitud con la media posterior? # inicial para media, ver sección anterior para discusión (normal) mu_0 <- 175 n_0 <- 5 # inicial para sigma^2 (gamma inversa) a <- 3 b <- 140 Para este ejemplo chico, usaremos muestras de tamaño 5: set.seed(3413) # ver sección anterior para explicación de esta función calcular_pars_posterior <- function(x, pars_inicial){ # iniciales mu_0 <- pars_inicial[1] n_0 <- pars_inicial[2] a_0 <- pars_inicial[3] b_0 <- pars_inicial[4] # muestra n <- length(x) media <- mean(x) S2 <- sum((x - media)^2) # sigma post a_1 <- a_0 + 0.5 * n b_1 <- b_0 + 0.5 * S2 + 0.5 * (n * n_0) / (n + n_0) * (media - mu_0)^2 # posterior mu mu_1 <- (n_0 * mu_0 + n * media) / (n + n_0) n_1 <- n + n_0 c(mu_1, n_1, a_1, b_1) } Y también de la sección anterior: sim_params <- function(m, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular sigmas sims <- tibble(tau = rgamma(m, a, b)) |> mutate(sigma = 1 / sqrt(tau)) # simular mu sims <- sims |> mutate(mu = rnorm(m, mu_0, sigma / sqrt(n_0))) sims } # simular muestras y calcular medias posteriores simular_muestra <- function(rep, mu_0, n_0, a_0, b_0){ cantantes <- lattice::singer |> mutate(estatura_cm = 2.54 * height) |> filter(str_detect(voice.part, "Tenor")) |> sample_n(5, replace = FALSE) pars_posterior <- calcular_pars_posterior(cantantes$estatura_cm, c(mu_0, n_0, a_0, b_0)) medias_post <- sim_params(1000, pars_posterior) |> summarise(across(everything(), mean)) |> select(mu, sigma) media <- mean(cantantes$estatura_cm) est_mv <- c("mu" = media, "sigma" = sqrt(mean((cantantes$estatura_cm - media)^2))) bind_rows(medias_post, est_mv) |> mutate(rep = rep, tipo = c("media_post", "max_verosim")) |> pivot_longer(mu:sigma, names_to = "parametro", values_to = "estimador") } poblacion <- lattice::singer |> mutate(estatura_cm = 2.54 * height) |> filter(str_detect(voice.part, "Tenor")) |> summarise(mu = mean(estatura_cm), sigma = sd(estatura_cm)) |> pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor_pob") errores <- map(1:2000, ~ simular_muestra(.x, mu_0, n_0, a, b)) |> bind_rows() |> left_join(poblacion) |> mutate(error = (estimador - valor_pob)) ggplot(errores, aes(x = error, fill = tipo)) + geom_histogram(bins = 20, position = "identity", alpha = 0.5) + facet_wrap(~parametro) Vemos claramente que la estimación de la desviación estándar de nuestro modelo es claramente superior a la de máxima verosimilitud. En resumen: errores |> group_by(tipo, parametro) |> summarise(recm = sqrt(mean(error^2)) |> round(2)) |> arrange(parametro) ## # A tibble: 4 × 3 ## # Groups: tipo [2] ## tipo parametro recm ## <chr> <chr> <dbl> ## 1 max_verosim mu 2.85 ## 2 media_post mu 1.55 ## 3 max_verosim sigma 2.45 ## 4 media_post sigma 1.04 Obtenemos una ganancia considerable en cuanto a la estimación de la desviación estandar de esta población. Los estimadores de la media posterior son superiores a los de máxima verosimilitud en términos de error cuadrático medio. Podemos graficar las dos estimaciones, muestra a muestra, para entender cómo sucede esto: errores |> select(-error) |> pivot_wider(names_from = tipo, values_from = estimador) |> filter(parametro == "sigma") |> ggplot(aes(x = max_verosim, y = media_post)) + geom_abline(colour = "red") + geom_hline(yintercept = sqrt(b/(a - 1)), lty = 2, color = 'black') + geom_point() + labs(subtitle = "Estimación de sigma") + xlab("Estimador MV de sigma") + ylab("Media posterior de sigma") + coord_fixed() + geom_segment(aes(x = 13, y = 11, xend = 13, yend = sqrt(b/(a - 1))), colour='red', size=1, arrow =arrow(length = unit(0.5, "cm"))) + geom_segment(aes(x = .5, y = 6, xend = .5, yend = sqrt(b/(a - 1))), colour='red', size=1, arrow =arrow(length = unit(0.5, "cm"))) Nótese como estimaciones demasiado bajas o demasiada altas son contraídas hacia valores más consistentes con la inicial, lo cual resulta en menor error. El valor esperado de \\(\\sigma\\) bajo la distribución inicial se muestra como una horizontal punteada. Ejemplo: estimación de proporciones Ahora repetimos el ejercicio # inicial a <- 2 b <- 100 qbeta(c(0.01, 0.99), a, b) ## [1] 0.001477084 0.063921446 # datos datos <- read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) # estimaciones obtener_estimados <- function(datos){ muestra_enigh <- datos |> sample_n(120) |> mutate(mas_150mil = ing_cor > 150000) k <- sum(muestra_enigh$mas_150mil) tibble(k = k, est_mv = k/120, media_post = (a + k) / (120 + b), pob = 0.02769) } estimadores_sim <- map(1:200, ~obtener_estimados(datos)) |> bind_rows() # calculo de errores error_cm <- estimadores_sim |> summarise(error_mv = sqrt(mean((est_mv - pob)^2)), error_post = sqrt(mean((media_post - pob)^2))) error_cm ## # A tibble: 1 × 2 ## error_mv error_post ## <dbl> <dbl> ## 1 0.0147 0.00928 Podemos ver claramente que las medias posteriores están encogidas hacia valores más chicos (donde la inicial tiene densidad alta) comparadas con las estimaciones de máxima verosimilitud: estimadores_sim_ag <- estimadores_sim |> group_by(k, est_mv, media_post) |> summarise(n = n()) ggplot(estimadores_sim_ag, aes(x = est_mv, media_post, size = n)) + geom_point() + geom_abline() Teoría de decisión En esta parte (que sigue a Wasserman (2013) a grandes rasgos), discutimos brevemente teoría general que nos sirve para seleccionar estimadores puntuales, y que esperemos ponga en contexto la parte anterior que acabamos de discutir. Usaremos algunos conceptos que vimos en la parte de propiedades de estimadores de máxima verosimilitud. Definimos una función de pérdida \\(L(\\theta, \\hat{\\theta}_n)\\), que mide el costo de la discrepancia entre nuestro estimador \\[\\hat{\\theta}_n = t(X_1,\\ldots, X_n) = t(X)\\] y el verdadero valor \\(\\theta\\) poblacional. Es posible considerar distintas funciones de pérdida, pero como en secciones anteriores, usaremos la pérdida cuadrática, definida por: \\[L(\\theta, \\hat{\\theta}_n) = (\\theta - \\hat{\\theta}_n)^2\\] Esta función toma distintos valores dependiendo de la muestra y del parámetro \\(\\theta\\), y necesitamos resumirla para dar una evaluación de qué tan bueno es el estimador \\(\\hat{\\theta}_n\\). Ahora que hemos considerado tanto estadística bayesiana como frecuentista, podemos pensar en resumir esta función de distintas maneras. Comenzamos pensando de manera frecuentista. En este caso, consideramos a \\(\\theta\\) como un valor fijo, y nos preguntamos qué pasaría con la pérdida con distintas muestras potenciales que podríamos observar. Definimos como antes el riesgo (frecuentista) como: \\[R(\\theta, t) = \\mathbb{E}_X\\left[ (\\theta - \\hat{\\theta}_n)^2 \\, \\big| \\, \\theta\\right]\\] donde promediamos a lo largo de las muestras posibles, con \\(\\theta\\) fijo. Esta cantidad no nos dice necesariamente cómo escoger un buen estimador para \\(\\theta\\), pues dependiendo de dónde está \\(\\theta\\) puede tomar valores distintos. Ahora vamos a pensar de manera bayesiana: en este caso, los datos serán fijos una vez que los obervemos de manera que \\(\\hat{\\theta}_n\\) está fijo, y el parámetro \\(\\theta\\) es una cantidad aleatoria con distribución inicial \\(p(\\theta)\\). Entonces consideraríamos el promedio sobre la posterior dado por: \\[\\rho(t, X) = \\mathbb{E}_{p(\\theta|X)}\\left[(\\theta - \\hat{\\theta})^2 \\, \\big | \\, X \\right]\\] que llamamos riesgo posterior. Esta cantidad se calcula con la posterior de los parámetros dados los datos, y nos dice, una vez que vimos los datos, cómo es el error de nuestro estimador. Nótese que esta cantidad no es útil para escoger un estimador bueno \\(t\\) antes de ver los datos, pero nos sirve para evaluar a un estimador dados los datos. En el primer caso, promediamos sobre posibles muestras, y en el segundo por valores posibles de \\(\\theta\\) para una muestra dada. Ejemplo: riesgo frecuentista Para observaciones bernoulli, el estimador de máxima verosimilitud es \\(\\hat{p}_1 = k /n\\), donde \\(n\\) es el tamaño de muestra y \\(k\\) el número de éxitos observados. Podemos usar también como estimador la media posterior de un modelo Beta-Bernoulli con inicial \\(a=2, b=2\\), que nos daría \\(\\hat{p}_2 = \\frac{k + 2}{n + 4}\\). Aunque podemos hacer los cálculos analíticos, aproximaremos el riesgo bajo el error cuadrático usando simulación perdida_cuad <- function(p, p_hat){ (p - p_hat)^2 } # dos estimadores t_1 <- function(n, x) x / n t_2 <- function(n, x) (x + 2) / (n + 4) estimar_riesgo <- function(n = 20, theta, perdida, reps = 10000){ x <- rbinom(reps, n, theta) # calcular estimaciones theta_1 <- t_1(n, x) theta_2 <- t_2(n, x) # calcular pérdida media_perdida <- tibble( n = n, theta = theta, estimador = c("MLE", "Posterior"), riesgo = c(mean(perdida(theta, theta_1)), mean(perdida(theta, theta_2)))) media_perdida } estimar_riesgo(n = 20, theta = 0.1, perdida = perdida_cuad) ## # A tibble: 2 × 4 ## n theta estimador riesgo ## <dbl> <dbl> <chr> <dbl> ## 1 20 0.1 MLE 0.00449 ## 2 20 0.1 Posterior 0.00755 Como dijimos, esta cantidad depende de \\(\\theta\\) que no conocemos. Así que calculamos para cada valor de \\(\\theta:\\) Las funciones de riesgo \\(R(\\theta, t_1)\\) y \\(R(\\theta, t_2)\\) (dependen de \\(\\theta\\)) se ven aproximadamente como sigue: p_seq <- seq(0, 1, 0.001) riesgo_tbl <- map(p_seq, ~ estimar_riesgo(n = 20, theta = .x, perdida = perdida_cuad)) |> bind_rows() ggplot(riesgo_tbl, aes(x = theta, y = riesgo, colour = estimador)) + geom_line() Y vemos que el riesgo depende del verdadero valor del parametro: en los extremos, el estimador de máxima verosimilitud tiene menos riesgo, pero en el centro tiene más (esto es independiente del tipo de intervalos que construyamos y su cobertura). La razón es que las estimaciones de tipo Agresti-Coull (\\(\\theta_2\\)) están contraídas hacia 0.5 (agregamos dos éxitos y dos fracasos). Esto produce sesgo en la estimación para valores extremos de \\(\\theta\\). Sin embargo, para valores centrales de \\(\\theta\\) tiene menos variabilidad (por regularización) que el estimador de máxima verosimilitud, y sufre poco de sesgo. Ejemplo: riesgo posterior Supongamos que la inicial es \\(\\theta \\sim \\mathsf{Beta}(5,3)\\) estimar_riesgo_post <- function(n = 20, x, perdida, reps = 20000){ # calcular estimaciones theta_1 <- t_1(n, x) theta_2 <- t_2(n, x) # simular de posterior theta_post <- rbeta(reps, x + 5, n - x + 3) # calcular pérdida media_perdida <- tibble( n = n, x = x, estimador = c("MLE", "Posterior"), riesgo_post= c(mean(perdida(theta_post, theta_1)), mean(perdida(theta_post, theta_2)))) media_perdida } estimar_riesgo_post(n = 20, x = 8, perdida = perdida_cuad) ## # A tibble: 2 × 4 ## n x estimador riesgo_post ## <dbl> <dbl> <chr> <dbl> ## 1 20 8 MLE 0.0127 ## 2 20 8 Posterior 0.0109 Como dijimos, esta cantidad depende de los datos \\(x\\) que no hemos observado. Así que calculamos para cada valor de \\(x\\): Las funciones de pérdida promedio \\(\\rho(x, t_1)\\) y \\(\\rho(x, t_2)\\) (dependen de \\(x\\)) se ven aproximadamente como sigue: x_seq <- seq(0, 20, 1) riesgo_post_tbl <- map(x_seq, ~ estimar_riesgo_post(n = 20, x = .x, perdida = perdida_cuad)) |> bind_rows() ggplot(riesgo_post_tbl, aes(x = x, y = riesgo_post, colour = estimador)) + geom_line() + geom_point() Donde vemos que la pérdida del estimador bayesiano es mejor para valores extremos de número de éxitos observado \\(x\\), pero tiene más riesgo posterior para valores chicos de \\(x\\). En general es mejor el estimador \\(\\theta_2\\). El estimador de máxima verosimilitud tiene más riesgo en los extremos, lo que esperaríamos porque no tenemos la regularización que aporta la posterior. Igualmente, vemos más riesgo para valores chicos de \\(x\\) que para valores grandes: esto es porque la inicial está concentrada en valores reslativamente grandes de \\(\\theta\\). Riesgo de Bayes Finalmente, podemos crear un resumen unificado considerando: Si no conocemos el valor del parámetro \\(\\theta\\), podemos promediar el riesgo frecuentista con la inicial \\(p(\\theta)\\) Si no conocemos los datos observados, podemos promediar usando datos generados por la marginal \\(p(x)\\) de \\(x\\) bajo el modelo de datos \\(p(x|\\theta)\\) y la inicial \\(p(\\theta)\\). Por la ley de la esperanza iterada, estos dos resultados son iguales. La cantidad resultante \\[r(t) = \\int R(\\theta,t) p(\\theta)\\, d\\theta = \\int r(x, t)p(x|\\theta)p(\\theta)\\, d\\theta\\, dx\\] Se llama riesgo de Bayes para el estimador \\(t\\). Ejemplo Podemos calcular marginal_tbl <- function(n = 20, m = 5000){ theta <- rbeta(m, 5, 3) x <- rbinom(m, size = n, p = theta) tibble(x = x) |> group_by(x) |> summarise(n_x = n()) } riesgo_post_tbl |> left_join(marginal_tbl()) |> group_by(estimador) |> summarise(riesgo_bayes = sum(riesgo_post * n_x) / sum(n_x)) ## # A tibble: 2 × 2 ## estimador riesgo_bayes ## <chr> <dbl> ## 1 MLE 0.0104 ## 2 Posterior 0.00833 o también theta_tbl <- tibble(theta = rbeta(50000, 5, 3) |> round(3)) |> group_by(theta) |> summarise(n_x = n()) riesgo_tbl |> left_join(theta_tbl) |> mutate(n_x = ifelse(is.na(n_x), 0, n_x)) |> group_by(estimador) |> summarise(riesgo_bayes = sum(riesgo * n_x) / sum(n_x)) ## # A tibble: 2 × 2 ## estimador riesgo_bayes ## <chr> <dbl> ## 1 MLE 0.0104 ## 2 Posterior 0.00839 Ahora consideremos cómo decidiríamos, desde el punto de vista Bayesiano, qué estimador usar: (Estimador de Bayes) Si tenemos los datos \\(X\\), escogeríamos una función \\(t_X\\) que minimice el riesgo posterior \\(\\rho(t, X)\\), y nuestro estimador es \\(\\hat{\\theta}_n = t_X (X)\\). (Regla de Bayes) Si no tenemos los datos, escogeríamos el estimador una función \\(t\\) que minimice el riesgo de Bayes \\(r(t)\\), y estimaríamos usando \\(\\hat{\\theta}_n = t(X)\\) Pero como el riesgo de Bayes es el promedio del riesgo posterior, la solución de 1 nos da la solución de 2. Es decir, el estimador que escogemos condicional a los datos \\(X\\) es el mismo que escogeríamos antes de escoger los datos, dada una distribución inicial \\(p(\\theta).\\) Por ejemplo, es posible demostrar que bajo la pérdida cuadrática, la regla de Bayes es utilizar la media posterior, bajo la pérdida absoluta, la mediana posterior, etc. Este estimador de Bayes tiene sentido desde el punto de vista frecuentista, también, porque minimiza el riesgo frecuentista promedio, suponiendo la inicial \\(p(\\theta)\\). Por ejemplo, para la pérdida cuadrática podemos usar la descomposición de sesgo y varianza y obtenemos: \\[r(t) = \\mathbb{E}[R(\\theta,t)] = \\mathbb{E}[ \\mathsf{Sesgo}_\\theta^2(t)] +\\mathbb{E}[\\mathsf{Var}_\\theta(t)] \\] Podemos ver entonces que el estimador de Bayes, en este caso la media posterior, es resultado de minimizar la suma de estas dos cantidades: por eso puede incurrir en sesgo, si ese costo se subsana con una reducción considerable de la varianza. Los estimadores insesgados que vimos en esta sección fueron subóptimos en muchos casos justamente porque son insesgados, e incurren en varianza grande. Regresa a los ejemplos anteriores donde evaluamos el desempeño de la media posterior en varios ejemplos. Muestra en las gráficas dónde ves el balance entre sesgo y varianza que cumplen cuando los comparamos con estimadores insesgados. Desde el punto de vista frecuentista, la cuestión es más complicada y hay varias maneras de proceder. En primer lugar, comenzaríamos con el riesgo frecuentista \\(R(\\theta, t)\\). Una idea es,por ejemplo, calcular el riesgo máximo: \\[R_{\\max} (t) = \\underset{\\theta}{\\max} R(\\theta, t).\\] En nuestro ejemplo de arriba el máximo se alcanza en 0.5, y tomaríamos eso evaluación de los estimadores \\(\\theta_1\\) o \\(\\theta_2\\). Buscaríamos entonces estimadores que minimicen este máximo, es decir, estimadores minimax. Pero también es posible enfocar este problema considerando sólo estimadores insesgados, lo que nos lleva por ejemplo a buscar estimadores con mínima varianza. También podemos enfocarnos en buscar estimador admisibles, que son aquellos cuyo riesgo no está dominado para toda \\(\\theta\\) por otro estimador, y así sucesivamente. Finalmente, es posible demostrar (ver Wasserman (2013)) que típicamente, para muestras grandes, el estimador de máxima verosimilitud es cercano a ser minimax y además es una regla de Bayes. Estas son buenas propiedades, pero debemos contar con que el régimen asintótico se cumpla aproximadamente. Referencias "],["métodos-de-cadenas-de-markov-monte-carlo.html", "Sección 12 Métodos de Cadenas de Markov Monte Carlo Integrales mediante subdivisiones Métodos Monte Carlo Simulando de la posterior 12.1 Ejemplo de islas ¿Por qué funciona Metrópolis? Método de Metrópolis Ajustando el tamaño de salto Metrópolis con varios parámetros Muestreador de Gibbs Conclusiones y observaciones Metrópolis y Gibbs HMC y Stan Diagnósticos generales para MCMC", " Sección 12 Métodos de Cadenas de Markov Monte Carlo Hasta ahora, hemos considerado modelos bayesianos conjugados, donde la posterior tiene una forma conocida. Esto nos permitió simular directamente de la posterior usando las rutinas estándar de R, o utilizar cálculos teóricos o funciones estándar de R para calcular resúmenes de interés, como medias o medianas posteriores o intervalos de credibilidad. Sin embargo, en aplicaciones rara vez es factible este tipo de análisis tan simple, pues: Los modelos que estamos considerando son más complejos y la distribución posterior conjunta de los parámetros no tiene una forma simple conocida. Queremos usar distribuciones iniciales que no son conjugadas para utilizar correctamente nuestra información inicial. Recordamos que tenemos expresiones explícitas para la inicial \\(p(\\theta)\\) y la verosimilitud \\(p(x|\\theta)\\), así que conocemos explícitamente la posterior, módulo la constante de normalización, \\[p(\\theta|x) \\propto p(x|\\theta) \\, p(\\theta).\\] Supongamos por ejemplo que quisiéramos calcular las medias posteriores de los parámetros \\(\\theta\\). En teoría, tendríamos que calcular \\[\\hat \\theta = \\mathbb{E}[{\\theta}\\, |\\, x] = \\int \\theta \\, p(\\theta|x) \\, d\\theta\\] Entonces es necesario calcular también \\(p(x)\\), que resulta de la integral \\[p(x) = \\int p(x|\\theta) \\, p(\\theta)\\, d\\theta\\] Si no tenemos expresiones analíticas simples, tendremos que aproximar numéricamente estas integrales de alguna forma. Si la posterior tiene una forma conocida, podemos calcular cantidades de interés usando fórmulas o rutinas de simulación de distribuciones conocidas que producen muestras independientes. Cuando la posterior no tiene una forma conocida, sin embargo: Podemos intentar usar integración numérica usual. Como veremos, este enfoque no es muy escalable. Podemos usar simulaciones bajo cadenas de Markov (Markov Chain Monte Carlo, MCMC), que es un enfoque más escalable. Mucho del uso generalizado actual de la estadística bayesiana se debe a que gracias al poder de cómputo disponible y los métodos MCMC, no estamos restringidos al uso de 1 y 2, que tienen desventajas grandes. Primero mostraremos cómo el método de integración por subdivisión no es escalable. Integrales mediante subdivisiones Como tenemos una expresión analítica para el integrando, podemos intentar una rutina numérica de integración. Una vez calculada, podríamos entonces usar otra rutina numérica para calcular las medias posteriores \\(\\hat{\\theta}\\). Las rutinas usuales de integración pueden sernos útiles cuando el número de parámetros es chico. Consideremos primero el caso de 1 dimensión, y supongamos que \\(a\\leq\\theta\\leq b\\). Si dividimos el rango de \\(\\theta\\) en intervalos determinados por \\(a = \\theta^1<\\theta^2<\\cdots \\theta^M =b\\), tales que \\(\\Delta\\theta = \\theta^{i+1} -\\theta^{i}\\), podríamos aproximar con \\[p(x) \\approx \\sum_{i=1}^M p(x|\\theta^i)p(\\theta^i) \\Delta\\theta\\] Lo que requiere \\(M\\) evaluaciones del factor \\(p(x|\\theta)p(\\theta)\\). Podríamos usar por ejemplo \\(M=100\\) para tener precisión razonable. Ejemplo: estimación de una proporción Teníamos que \\(p(S_n = k|\\theta) \\propto \\theta^k(1-\\theta)^{n-k}\\) cuando observamos \\(k\\) éxitos en \\(n\\) pruebas independientes. Supongamos que nuestra inicial es \\(p(\\theta) = 2\\theta\\) (checa que es una densidad), es decir, creemos que es más probable a priori observar proporciones altas. Podemos integrar numéricamente crear_log_post <- function(n, k){ function(theta){ verosim <- k * log(theta) + (n - k) * log(1 - theta) inicial <- log(theta) log_p_factor <- verosim + inicial log_p_factor } } # observamos 3 éxitos en 4 pruebas: log_post <- crear_log_post(4, 3) prob_post <- function(x) { exp(log_post(x))} # integramos numéricamente p_x <- integrate(prob_post, lower = 0, upper = 1, subdivisions = 100L) p_x ## 0.03333333 with absolute error < 3.7e-16 Y ahora podemos calcular la media posterior: media_funcion <- function(theta){ theta * prob_post(theta) / p_x$value } integral_media <- integrate(media_funcion, lower = 0, upper = 1, subdivisions = 100L) media_post <- integral_media$value media_post ## [1] 0.7142857 Podemos verificar nuestro trabajo pues sabemos que la posterior es \\(\\mathsf{Beta}(5, 2)\\) cuya media es 5/(2+5) ## [1] 0.7142857 Y podríamos intentar una estrategia similar, por ejemplo, para calcular intervalos de credibilidad. Sin embargo, veremos abajo que este método no escala con el número de parámetros. Más de un parámetro Ahora supongamos que tenemos \\(2\\) parámetros. Dividiríamos cada parámetro en 100 intervalos, y luego tendríamos que calcular \\[p(x) \\approx \\sum_{i=1}^M \\sum_{j=1}^M p(x|\\theta_1^i, \\theta_2^j)p(\\theta_1^i, \\theta_2^j) \\Delta\\theta_1\\Delta\\theta_2\\] Y esto requeriría \\(M^2 = 10,000\\) evaluaciones de \\(p(x|\\theta)p(\\theta)\\). Si tenemos \\(p\\) parámetros, entonces tendríamos que hacer \\(M^p\\) evaluaciones de la posterior. Incluso cuando \\(p=10\\), esta estrategia es infactible, pues tendríamos que hacer más de millones de millones de millones de evaluaciones de la posterior. Si sólo tenemos esta técnica disponible, el análisis bayesiano está considerablemente restringido. Regresión bayesiana con unas 10 covariables por ejemplo, no podría hacerse. De modo que tenemos que replantearnos cómo atacar el problema de calcular o aproximar estas integrales. Métodos Monte Carlo En varias ocasiones anteriormente hemos usado el método Monte Carlo para aproximar integrales: por ejemplo, para calcular medias posteriores. Supongamos que tenemos una densidad \\(p(\\theta)\\). Integración Monte Carlo. Supongamos que queremos calcular el valor esperado de \\(g(X)\\), donde \\(X\\sim p(X\\,|\\,\\theta).\\) Es decir, la variable aleatoria \\(X\\) se distribuye de acuerdo al modelo probabilistico \\(p(X \\, | \\, \\theta),\\) de tal forma que lo que nos interesa calcular es \\[\\mathbb{E}[g(X)] = \\int g(x) p(x|\\theta)\\, dx.\\] Si tomamos una muestra \\(x^{(1)},x^{(2)}, \\ldots x^{(N)} \\overset{iid}{\\sim} p(x|\\theta)\\), entonces \\[\\mathbb{E}[g(X)] \\approx \\, \\frac1N \\, \\sum_{n = 1}^N g(x^{(n)})\\] cuando \\(N\\) es grande. Esto es simplemente una manera de escribir la ley de los grandes números, y hemos aplicado este teorema en varias ocasiones. Nos ha sido útil cuando sabemos cómo simular de distribución \\(p(\\theta | x)\\) (usando alguna rutina de R, por ejemplo, o usando un método estándar como inversión de la función de distribución acumulada). Ejemplo En este ejemplo repetimos cosas que ya hemos visto. En el caso de estimación de una proporción \\(\\theta\\), tenemos como inicial \\(p(\\theta) \\propto \\theta\\), que es \\(\\mathsf{Beta}(2,1)\\). Si observamos 3 éxitos en 4 pruebas, entonces sabemos que la posterior es \\(p(\\theta|x)\\propto \\theta^4(1-\\theta)\\), que es \\(\\mathsf{Beta}(5, 2)\\). Si queremos calcular media y segundo momento posterior para \\(\\theta\\), en teoría necesitamos calcular \\[\\mu = \\int_0^1 \\theta p(\\theta|X = 3)\\, d\\theta,\\,\\, \\mu_2=\\int_0^1 \\theta^2 p(\\theta|X = 3)\\, d\\theta\\] integramos con Monte Carlo theta <- rbeta(10000, 5, 2) media_post <- mean(theta) momento_2_post <- mean(theta^2) c(media_post, momento_2_post) ## [1] 0.7155559 0.5372170 Y podemos aproximar de esta manera cualquier cantidad de interés que esté basada en integrales, como probabilidades asociadas a \\(\\theta\\) o cuantiles asociados. Por ejemplo, podemos aproximar fácilmente \\(P(e^{\\theta}> 2|x)\\) haciendo mean(exp(theta) > 2) ## [1] 0.5958 y así sucesivamente. Este enfoque, sin embargo, es mucho más flexible y poderoso. Ejemplo: varias pruebas independientes Supongamos que probamos el nivel de gusto para 4 sabores distintos de una paleta. Usamos 4 muestras de aproximadamente 50 personas diferentes para cada sabor, y cada uno evalúa si le gustó mucho o no. Obtenemos los siguientes resultados: datos <- tibble( sabor = c("fresa", "limón", "mango", "guanábana"), n = c(50, 45, 51, 50), gusto = c(36, 35, 42, 29)) %>% mutate(prop_gust = gusto / n) datos ## # A tibble: 4 × 4 ## sabor n gusto prop_gust ## <chr> <dbl> <dbl> <dbl> ## 1 fresa 50 36 0.72 ## 2 limón 45 35 0.778 ## 3 mango 51 42 0.824 ## 4 guanábana 50 29 0.58 Usaremos como inicial \\(\\mathsf{Beta}(2, 1)\\) (pues hemos obervado cierto sesgo de cortesía en la calificación de sabores, y no es tan probable tener valores muy bajos) para todos los sabores, es decir \\(p(\\theta_i)\\) es la funcion de densidad de una \\(\\mathsf{Beta}(2, 1)\\). La inicial conjunta la definimos entonces, usando idependiencia inicial, como \\[p(\\theta_1,\\theta_2, \\theta_3,\\theta_4) = p(\\theta_1)p(\\theta_2)p(\\theta_3)p(\\theta_4).\\] Pues inicialmente establecemos que ningún parámetro da información sobre otro: saber que mango es muy gustado no nos dice nada acerca del gusto por fresa. Bajo este supuesto, y el supuesto adicional de que las muestras de cada sabor son independientes, podemos mostrar que las posteriores son independientes: \\[p(\\theta_1,\\theta_2,\\theta_3, \\theta_4|k_1,k_2,k_3,k_4) = p(\\theta_4|k_1)p(\\theta_4|k_2)p(\\theta_4|k_3)p(\\theta_4|k_4)\\] De forma que podemos trabajar individualmente con cada muestra. Calculamos los parámetros de las posteriores individuales: datos <- datos %>% mutate(a_post = gusto + 2, b_post = n - gusto + 1) datos ## # A tibble: 4 × 6 ## sabor n gusto prop_gust a_post b_post ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 fresa 50 36 0.72 38 15 ## 2 limón 45 35 0.778 37 11 ## 3 mango 51 42 0.824 44 10 ## 4 guanábana 50 29 0.58 31 22 Ahora nos preguntamos, ¿cuál es la probabilidad posterior de que mango sea el sabor más preferido de la población? Conocemos la posterior para cada parámetro, y sabemos que los parámetros son independientes para la posterior. Eso quiere decir que podemos simular de cada parámetro independientemente para obtener simulaciones de la conjunta posterior. simular_conjunta <- function(rep, datos){ datos %>% mutate(valor_sim = map2_dbl(a_post, b_post, ~ rbeta(1, .x, .y))) %>% select(sabor, valor_sim) } simular_conjunta(1, datos) ## # A tibble: 4 × 2 ## sabor valor_sim ## <chr> <dbl> ## 1 fresa 0.755 ## 2 limón 0.783 ## 3 mango 0.819 ## 4 guanábana 0.569 # esta no es una manera muy rápida, podríamos calcular todas las # simulaciones de cada parámetro de manera vectorizada sims_posterior <- tibble(rep = 1:5000) %>% mutate(sims = map(rep, ~ simular_conjunta(.x, datos))) %>% unnest(cols = sims) sims_posterior ## # A tibble: 20,000 × 3 ## rep sabor valor_sim ## <int> <chr> <dbl> ## 1 1 fresa 0.732 ## 2 1 limón 0.831 ## 3 1 mango 0.850 ## 4 1 guanábana 0.397 ## 5 2 fresa 0.670 ## 6 2 limón 0.839 ## 7 2 mango 0.664 ## 8 2 guanábana 0.558 ## 9 3 fresa 0.671 ## 10 3 limón 0.758 ## # ℹ 19,990 more rows Y ahora podemos aproximar fácilmente la probabilidad de interés: sims_posterior %>% group_by(rep) %>% mutate(sabor = sabor[which.max(valor_sim)]) %>% group_by(sabor) %>% count() %>% ungroup() %>% mutate(prop = n / sum(n)) ## # A tibble: 4 × 3 ## sabor n prop ## <chr> <int> <dbl> ## 1 fresa 1264 0.0632 ## 2 guanábana 8 0.0004 ## 3 limón 5396 0.270 ## 4 mango 13332 0.667 Y vemos que los mejores sabores son mango y limón. La probabilidad posterior de que mango sea el sabor preferido por la población es de 66%. La integral correspondiente no es trivial. ¿Cuáles son las probabilidades a priori de que cada sabor sea el preferido por la población? ¿Cuál es la integral correspondiente a las probabilidades que acabamos de calcular? ¿Qué tan fácil es hacer esta integral de manera analítica? Calcula la probabilidad de que mango sea preferido a limón? ¿Qué conclusión práctica sacas de estos resultados? Simulando de la posterior Hemos establecido que podemos contestar varias preguntas de inferencia usando simulación Monte Carlo, y que este enfoque es potencialmente escalable (en contraste con métodos de integración numérica por cuadrícula). Ahora el problema que necesitamos resolver es el siguiente: Conocemos \\(p(\\theta |x)\\) módulo una constante de integración. En general, \\(p(\\theta|x)\\) no tiene una forma reconocible que corresponda a un simulador estándar. ¿Cómo simulamos de esta posterior cuando sólo sabemos calcular \\(p(x|\\theta)p(\\theta)\\)? Hay varias maneras de hacer esto. Presentaremos los algoritmos en términos de una distribución cualquiera \\(p(\\theta) = K f(\\theta)\\), donde sólo conocemos la función \\(f(\\theta)\\). 12.1 Ejemplo de islas Comenzamos revisando el ejemplo de las islas en Kruschke (2015) (7.2) para tener más intuición de cómo funciona este algoritmo. ¿Por qué funciona Metrópolis? Supongamos que un vendedor de Yakult trabaja a lo largo de una cadena de islas: Constantemente viaja entre las islas ofreciendo sus productos; Al final de un día de trabajo decide si permanece en la misma isla o se transporta a una de las \\(2\\) islas vecinas; El vendedor ignora la distribución de la población en las islas y el número total de islas; sin embargo, una vez que se encuentra en una isla puede investigar la población de la misma y también de la isla a la que se propone viajar después. El objetivo del vendedor es visitar las islas de manera proporcional a la población de cada una. Con esto en mente el vendedor utiliza el siguiente proceso: Lanza un volado, si el resultado es águila se propone ir a la isla del lado izquierdo de su ubicación actual y si es sol a la del lado derecho. Si la isla propuesta en el paso anterior tiene población mayor a la población de la isla actual, el vendedor decide viajar a ella. Si la isla vecina tiene población menor, entonces visita la isla propuesta con una probabilidad que depende de la población de las islas. Sea \\(P^*\\) la población de la isla propuesta y \\(P_{t}\\) la población de la isla actual. Entonces el vendedor cambia de isla con probabilidad \\[q_{mover}=P^*/P_{t}\\] A la larga, si el vendedor sigue la heurística anterior la probabilidad de que el vendedor este en alguna de las islas coincide con la población relativa de la isla. islas <- tibble(islas = 1:10, pob = 1:10) camina_isla <- function(i){ # i: isla actual u <- runif(1) # volado v <- ifelse(u < 0.5, i - 1, i + 1) # isla vecina (índice) if (v < 1 | v > 10) { # si estás en los extremos y el volado indica salir return(i) } p_move = ifelse(islas$pob[v] > islas$pob[i], 1, islas$pob[v] / islas$pob[i]) u2 <- runif(1) if (p_move > u2) { return(v) # isla destino } else { return(i) # me quedo en la misma isla } } pasos <- 100000 iteraciones <- numeric(pasos) iteraciones[1] <- sample(1:10, 1) # isla inicial for (j in 2:pasos) { iteraciones[j] <- camina_isla(iteraciones[j - 1]) } caminata <- tibble(pasos = 1:pasos, isla = iteraciones) plot_caminata <- ggplot(caminata[1:1000, ], aes(x = pasos, y = isla)) + geom_point(size = 0.8) + geom_path(alpha = 0.5) + coord_flip() + labs(title = "Caminata aleatoria") + scale_y_continuous(expression(theta), breaks = 1:10) + scale_x_continuous("Tiempo") plot_dist <- ggplot(caminata, aes(x = isla)) + geom_histogram() + scale_x_continuous(expression(theta), breaks = 1:10) + labs(title = "Distribución objetivo", y = expression(P(theta))) plot_caminata / plot_dist Entonces: Para aproximar la distribución objetivo debemos permitir que el vendedor recorra las islas durante una sucesión larga de pasos y registramos sus visitas. Nuestra aproximación de la distribución es justamente el registro de sus visitas. Más aún, debemos tener cuidado y excluir la porción de las visitas que se encuentran bajo la influencia de la posición inicial. Esto es, debemos excluir el periodo de calentamiento. Una vez que tenemos un registro largo de los viajes del vendedor (excluyendo el calentamiento) podemos aproximar la distribución objetivo simplemente contando el número relativo de veces que el vendedor visitó dicha isla. t <- c(1:10, 20, 50, 100, 200, 1000, 5000) plots_list <- map(t, function(i){ ggplot(caminata[1:i, ], aes(x = isla)) + geom_histogram() + labs(y = "", x = "", title = paste("t = ", i, sep = "")) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) }) wrap_plots(plots_list) Escribamos el algoritmo, para esto indexamos las islas por el valor \\(\\theta\\), es así que la isla del extremo oeste corresponde a \\(\\theta=1\\) y la población relativa de cada isla es \\(P(\\theta)\\): El vendedor se ubica en \\(\\theta^{(i)}\\) y propone moverse a la izquierda o derecha con probabilidad \\(0.5\\). El rango de los posibles valores para moverse, y la probabilidad de proponer cada uno se conoce como distribución propuesta, en nuestro ejemplo sólo toma dos valores cada uno con probabilidad \\(0.5\\). Una vez que se propone un movimiento, decidimos si aceptarlo. La decisión de aceptar se basa en el valor de la distribución objetivo en la posición propuesta, relativo al valor de la distribución objetivo en la posición actual: \\[\\alpha=\\min\\bigg\\{\\frac{P(\\theta^*)}{P(\\theta^{(i)})},1\\bigg\\},\\] donde \\(\\alpha\\) denota la probabilidad de hacer el cambio de isla. Notemos que la distribución objetivo \\(P(\\theta)\\) no necesita estar normalizada, esto es porque lo que nos interesa es el cociente \\(P(\\theta^*)/P(\\theta^{(i)})\\). Una vez que propusimos un movimiento y calculamos la probabilidad de aceptar el movimiento aceptamos o rechazamos el movimiento generando un valor de una distribución uniforme, si dicho valor es menor a la probabilidad de cambio, \\(\\alpha,\\) entonces hacemos el movimiento. Entonces, para utilizar el algoritmo necesitamos ser capaces de: Generar un valor de la distribución propuesta, que hemos denotado por \\(q,\\) (para crear \\(\\theta^*\\)). Evaluar la distribución objetivo en cualquier valor propuesto (para calcular \\(P(\\theta^*)/P(\\theta^{(i)})\\)). Generar un valor uniforme (para movernos con probabilidad \\(\\alpha\\)). Las \\(3\\) puntos anteriores nos permiten generar muestras aleatorias de la distribución objetivo, sin importar si esta está normalizada. Esta técnica es particularmente útil cuando cuando la distribución objetivo es una posterior proporcional a \\(p(x|\\theta)p(\\theta)\\). Para entender porque funciona el algoritmo de Metrópolis hace falta entender \\(2\\) puntos, primero que la distribución objetivo es estable: si la probabilidad actual de ubicarse en una posición coincide con la probabilidad en la distribución objetivo, entonces el algoritmo preserva las probabilidades. library(expm) transMat <- function(P){ # recibe vector de probabilidades (o población) T <- matrix(0, 10, 10) n <- length(P - 1) # número de estados for (j in 2:n - 1) { # llenamos por fila T[j, j - 1] <- 0.5 * min(P[j - 1] / P[j], 1) T[j, j] <- 0.5 * (1 - min(P[j - 1] / P[j], 1)) + 0.5 * (1 - min(P[j + 1] / P[j], 1)) T[j, j + 1] <- 0.5 * min(P[j + 1] / P[j], 1) } # faltan los casos j = 1 y j = n T[1, 1] <- 0.5 + 0.5 * (1 - min(P[2] / P[1], 1)) T[1, 2] <- 0.5 * min(P[2] / P[1], 1) T[n, n] <- 0.5 + 0.5 * (1 - min(P[n - 1] / P[n], 1)) T[n, n - 1] <- 0.5 * min(P[n - 1] / P[n], 1) T } T <- transMat(islas$pob) w <- c(0, 1, rep(0, 8)) t <- c(1:10, 20, 50, 100, 200, 1000, 5000) expT <- map_df(t, ~data.frame(t = ., w %*% (T %^% .))) expT_long <- expT %>% gather(theta, P, -t) %>% mutate(theta = parse_number(theta)) ggplot(expT_long, aes(x = theta, y = P)) + geom_bar(stat = "identity", fill = "darkgray") + facet_wrap(~ t) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) El segundo punto es que el proceso converge a la distribución objetivo. Podemos ver, (en nuestro ejemplo sencillo) que sin importar el punto de inicio se alcanza la distribución objetivo. inicio_p <- function(i){ w <- rep(0, 10) w[i] <- 1 t <- c(1, 10, 50, 100) exp_t <- map_df(t, ~ data.frame(t = .x, inicio = i, w %*% (T %^% .))) %>% gather(theta, P, -t, -inicio) %>% mutate(theta = parse_number(theta)) exp_t } exp_t <- map_df(c(1, 3, 5, 9), inicio_p) ggplot(exp_t, aes(x = as.numeric(theta), y = P)) + geom_bar(stat = "identity", fill = "darkgray") + facet_grid(inicio ~ t) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) Método de Metrópolis En el método de Metrópolis, uno de los más antiguos, comenzamos con un valor inicial de los parámetros \\(\\theta^{(0)}\\) en el soporte de \\(p(\\theta)\\), es decir \\(p(\\theta^{(0)})>0.\\) Para \\(i=1, \\ldots, M\\), hacemos: Partiendo de \\(\\theta^{(i)}\\), hacemos un salto corto en una dirección al azar para obtener una propuesta \\(\\theta^* \\sim q(\\theta \\, |\\, \\theta^{(i)}).\\) Aceptamos or rechazamos el salto: Si \\(\\alpha = \\frac{f(\\theta^*)}{f(\\theta^{(i)})} \\geq 1\\), aceptamos el salto y ponemos \\(\\theta^{(i+1)}=\\theta^*\\). Regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1.\\) Si \\(\\alpha = \\frac{f(\\theta^*)}{f(\\theta^{(i)})} < 1\\), entonces aceptamos con probabilidad \\(\\alpha\\) el salto, ponemos \\(\\theta^{(i+1)}=\\theta^*\\) y regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1\\). Si rechazamos el salto, ponemos entonces \\(\\theta^{(i+1)}=\\theta^{(i)}\\) y regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1.\\) Requerimos también que la función que propone los saltos sea simétrica: es decir, \\(q(\\theta^*|\\theta^{(i)})\\) debe ser igual a \\(q(\\theta^{(i)}|\\theta^*)\\). Se puede modificar el algoritmo para tratar con una propuesta que no sea simétrica. Una elección común es escoger \\(q(\\theta^* |\\theta^{(i)})\\) como una \\(\\mathsf{N}(\\theta^{(i)}, \\sigma_{salto})\\). En este curso, escribiremos varios métodos de cadenas de Markov para estimación Monte Carlo (Markov Chain Monte Carlo, MCMC) desde cero para entender los básicos de cómo funciona. Sin embargo, en la práctica no hacemos esto, sino que usamos software estándar (Stan, JAGS, BUGS, etc.) para hacer este trabajo. Expertos en MCMC, métodos numéricos, y estadística a veces escriben partes de sus rutinas de simulación, y pueden lograr mejoras de desempeño considerables. Excepto para modelos simples, esto no es trivial de hacer garantizando resultados correctos. En resumen, todo el código de esta sección es de carácter ilustrativo. Utiliza implementaciones establecidas en las aplicaciones. Abajo implementamos el algoritmo con un salto de tipo normal: crear_metropolis <- function(fun_log, sigma_salto = 0.1){ # la entrada es la log posterior iterar_metropolis <- function(theta_inicial, n){ p <- length(theta_inicial) nombres <- names(theta_inicial) iteraciones <- matrix(0, nrow = n, ncol = p) colnames(iteraciones) <- nombres iteraciones[1,] <- theta_inicial for(i in 2:n){ theta <- iteraciones[i - 1, ] theta_prop <- theta + rnorm(p, 0, sigma_salto) # exp(log(p) - log(q)) = p/q cociente <- exp(fun_log(theta_prop) - fun_log(theta)) if(cociente >= 1 || runif(1,0,1) < cociente){ iteraciones[i, ] <- theta_prop } else { iteraciones[i, ] <- theta } } iteraciones_tbl <- iteraciones %>% as_tibble() %>% mutate(iter_num = row_number()) %>% select(iter_num, everything()) iteraciones_tbl } iterar_metropolis } E intentamos simular de una exponencial no normalizada: exp_no_norm <- function(x) { z <- ifelse(x > 0, exp(-0.5 * x), 0) log(z) } iterador_metro <- crear_metropolis(exp_no_norm, sigma_salto = 0.25) sims_tbl <- iterador_metro(c(theta = 0.5), 50000) ggplot(sims_tbl, aes(x = theta)) + geom_histogram() Ahora probemos con una \\(\\mathsf{Beta}(3, 2):\\) beta_no_norm <- function(x) { z <- ifelse(x > 0 && x < 1, (x^2)*(1-x), 0) log(z) } iterador_metro <- crear_metropolis(beta_no_norm, sigma_salto = 0.04) sims_metro_tbl <- iterador_metro(c(theta = 0.5), 50000) sims_indep_tbl <- tibble(iter_num = 1:30000, theta = rbeta(30000, 3, 2)) g_1 <- ggplot(sims_metro_tbl, aes(x = theta)) + geom_histogram() + labs(subtitle = "Metrópolis") g_2 <- ggplot(sims_indep_tbl, aes(x = theta)) + geom_histogram() + labs(subtitle = "rbeta") g_1 + g_2 Y vemos que esto funciona. Nótese sin embargo un aspecto de estas simulaciones que no habíamos encontrado en el curso. Aunque la distribución final de las simulaciones es muy cercana a la de la distribución que queremos simular, lo cual era nuestro propósito, las simulaciones no son extracciones independientes de esa distribución. La construcción del algoritmo muestra eso, pero podemos también graficar las simulaciones: g_metropolis <- sims_metro_tbl %>% filter(iter_num < 500) %>% ggplot(aes(x = iter_num, y = theta)) + geom_line() + labs(subtitle = "Metrópolis") g_indep <- sims_indep_tbl %>% filter(iter_num < 500) %>% ggplot(aes(x = iter_num, y = theta)) + geom_line() + labs(subtitle = "Independientes") g_metropolis + g_indep Donde vemos claramente que las simulaciones de metropolis están autocorrelacionadas: la siguiente simulación depende de la anterior. Esto define una cadena de Markov. En cualquiera de los dos casos, como vimos en los histogramas de arriba, las simulaciones “visitan” cada parte [0,1] de manera proporcional a la densidad, de manera que podemos usar ambos tipos de simulaciones para aproximar la integral o cantidad que nos interesa. Por ejemplo, la media posterior es: media_1 <- sims_metro_tbl %>% summarise(media_post = mean(theta)) %>% pull(media_post) media_2 <- sims_indep_tbl %>% summarise(media_post = mean(theta)) %>% pull(media_post) media_exacta <- 3/(3 + 2) tibble(metodo = c("sim Metrópolis", "sim Independiente", "exacto"), media_post = c(media_1, media_2, media_exacta)) ## # A tibble: 3 × 2 ## metodo media_post ## <chr> <dbl> ## 1 sim Metrópolis 0.605 ## 2 sim Independiente 0.602 ## 3 exacto 0.6 Supongamos que queremos simular de una distribución \\(p(\\theta)\\), pero sólo conocemos \\(p(\\theta)\\) módulo una constante. Bajo ciertas condiciones de regularidad: El algoritmo Metrópolis para la distribución \\(p(\\theta)\\) define una cadena de Markov cuya distribución a largo plazo es \\(p(\\theta)\\). Esto implica que si \\(\\theta^{(1)},\\theta^{(2)}, \\ldots, \\theta^{(M)}\\) es una simulación de esta cadena, y \\(M\\) es suficientemente grande La distribución de las \\(\\theta^{(i)}\\) es aproximadamente \\(p(\\theta)\\), Tenemos que \\[ \\frac1M \\sum_{m = 1}^M h(\\theta^{(m)}) \\to \\int h(\\theta)p(\\theta)\\, d\\theta\\] cuando \\(M\\to \\infty\\) Observaciones: Aunque hay distintas condiciones de regularidad que pueden funcionar, generalmente el supuesto es que la cadena de Markov construída es ergódica, y hay varias condiciones que garantizan esta propiedad. Una condición simple, por ejemplo, es que el soporte de la distribución \\(p(\\theta)\\) es un conjunto conexo del espacio de parámetros. Más crucialmente, este resultado no dice qué tan grande debe ser \\(M\\) para que la aproximación sea buena. Esto depende de cómo es \\(p(\\theta)\\), y de la distribución que se utiliza para obtener los saltos propuestos. Dependiendo de estos dos factores, la convergencia puede ser rápida (exponencial) o tan lenta que es infactible usarla. Más adelante veremos diagnósticos para descartar los peores casos de falta de convergencia. Ajustando el tamaño de salto En el algoritmo Metrópolis, generalmente es importante escoger la dispersión de la distribución que genera propuestas con cuidado. Si la dispersión de la propuesta es demasiado grande, tenderemos a rechazar mucho, y la convergencia será lenta. Si la dispersión de la propuesta es demasiado chica, tardaremos mucho tiempo en explorar las distintas partes de la distribución objetivo. Ejemplo Supongamos que queremos simular usando metróplis de una distribución \\(\\textsf{Gamma}(20, 100)\\). Abajo vemos la forma de esta distribución: sim_indep <- tibble(theta = rgamma(10000, 20, 100)) ggplot(sim_indep, aes(x = theta)) + geom_histogram() # logaritmo de densidad no normalizada log_f_dist <- function(x) 210 + dgamma(x, 20, 100, log = TRUE) # iterar iterador_metro_chico <- crear_metropolis(log_f_dist, sigma_salto = 0.001) sims_chico_tbl <- iterador_metro_chico(c(theta = 0.02), 50000) g_sim <- ggplot(sims_chico_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) dist_bplot <- ggplot(tibble(x = rgamma(10000, 20, 100)), aes(y = x, x = "a")) + geom_violin() + ylab("") + ylim(0, 0.5) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) Nótese que después de 5 mil iteraciones estamos muy lejos de tener una muestra que se aproxime a la distribución objetivo. Empezamos en un lugar bajo, y la cadena sólo ha ido lentamente hacia las zonas de alta densidad. Cualquier resumen con esta cadena estaría fuertemente sesgado al valor donde iniciamos la iteración. Decimos que la cadena todavía no mezcla en las primeras 5 mil iteraciones. Ahora vemos qué pasa si ponemos el tamaño de salto demasiado grande: set.seed(831) iterador_metro_grande <- crear_metropolis(log_f_dist, sigma_salto = 20) sims_grande_tbl <- iterador_metro_grande(c(theta = 0.02), 50000) g_sim <- ggplot(sims_grande_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) En este caso, la cadena se atora muchas veces, pues las propuestas tienen probabilidad muy baja, y tendemos a tener una tasa de rechazos muy alta. Esto quiere decir que la información que tenemos acerca de la posterior es relativamente poca, pues muchos datos son repeticiones del mismo valor. Cualquier resumen con esta cadena podría estar muy lejos del verdadero valor, pues su varianza es alta - otra corrida se “atoraría” en otros valores distintos. Nótese que cualquiera de estas cadenas, si la corremos suficientemente tiempo, nos daría resultados buenos. Sin embargo, el número de simulaciones puede ser infactible. Un valor intermedio nos dará mucho mejores resultados: set.seed(831) iterador_metro_apropiada <- crear_metropolis(log_f_dist, sigma_salto = 0.1) sims_tbl <-iterador_metro_apropiada(c(theta = 0.02), 50000) g_sim <- ggplot(sims_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) Donde vemos que esta cadena parece mezclar bien (está explorando la totalidad de la distribución objetivo), y también parece estar en un estado estable. Comparemos cómo saldría por ejemplo la media posterior aproximada según los tres métodos: estimaciones_media <- map_dfr( list(sims_chico_tbl, sims_grande_tbl, sims_tbl), ~ filter(.x, iter_num < 3000) %>% summarise(media = mean(theta))) %>% mutate(tipo = c("salto chico", "salto grande", "salto apropiado")) estimaciones_media %>% bind_rows(tibble(tipo = "exacta", media = 20/100)) %>% select(tipo, media) ## # A tibble: 4 × 2 ## tipo media ## <chr> <dbl> ## 1 salto chico 0.128 ## 2 salto grande 0.190 ## 3 salto apropiado 0.203 ## 4 exacta 0.2 Veamos otra corrida: set.seed(6222131) sims_chica_tbl <- iterador_metro_chico(c(theta = 0.02), 5000) sims_grande_tbl <- iterador_metro_grande(c(theta = 0.02), 5000) estimaciones_media <- map_dfr( list(sims_chica_tbl, sims_grande_tbl, sims_tbl), ~ filter(.x, iter_num < 3000) %>% summarise(media = mean(theta))) %>% mutate(tipo = c("salto chico", "salto grande", "salto apropiado")) estimaciones_media %>% bind_rows(tibble(tipo = "exacta", media = 20/100)) %>% select(tipo, media) ## # A tibble: 4 × 2 ## tipo media ## <chr> <dbl> ## 1 salto chico 0.124 ## 2 salto grande 0.229 ## 3 salto apropiado 0.203 ## 4 exacta 0.2 Repite este proceso varias veces. Verifica que: Si el tamaño de paso es muy chico, las estimaciones de la media tienen sesgo alto. Si el tamaño de paso es muy grande, las estimaciones tienen varianza alta. Si el tamaño de paso es adecuado, obtenemos buena precisión en la estimación de la media posterior. Explica estos tres casos en términos de la convergencia de las realizaciones de la cadena de Markov. Explica cómo afecta a cada caso el valor inicial de las simulaciones de Metrópolis. Repite para otra estadística, como la desviación estándar o el rangon intercuartil. Metrópolis con varios parámetros Ahora aplicaremos el algoritmo Metrópolis cuando tenemos varios parámetros. La idea es la misma, pero nuestra distribución de salto debe ser multivariada. Una selección usual es usando saltos normales independientes para cada parámetro, es decir, la normal multivariada con matriz de varianza y covarianza diagonal. Ejemplo: el modelo normal Veremos cómo simular con Metrópolis para el problema de los cantantes. Sabemos como calcular la posterior: crear_log_posterior_norm <- function(x = datos, m_0, n_0, a, b){ # calcula log_posterior log_posterior <- function(mu, sigma){ log_verosim <- sum(dnorm(x, mu, sigma, log = TRUE)) tau <- 1 / sigma^2 log_inicial <- dgamma(tau, a, b, log = TRUE) + dnorm(mu, mu_0, sigma/sqrt(n_0), log = TRUE) log_p <- log_verosim + log_inicial log_p } log_posterior } # parametros de inicial y datos a <- 3 b <- 140 mu_0 <- 175 n_0 <- 5 set.seed(3413) cantantes <- lattice::singer %>% mutate(estatura_cm = round(2.54 * height)) %>% filter(str_detect(voice.part, "Tenor")) %>% sample_n(20) Vemos cómo se ven las primeras iteraciones de nuestra cadena de Markov: log_p <- crear_log_posterior_norm(cantantes$estatura_cm, mu_0, n_0, a, b) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(823) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 172, sigma = 3), 50000) ggplot(sim_tbl %>% filter(iter_num < 100), aes(x = mu, y = sigma)) + geom_path() + geom_point() Y ahora vemos todas las simulaciones: g_normal <- ggplot(sim_tbl, aes(x = mu, y = sigma)) + geom_point(alpha = 0.05)+ coord_equal() + ylim(c(0, 14)) g_normal Y las medias posteriores son: sim_tbl %>% summarise(across(is_double, mean)) ## # A tibble: 1 × 2 ## mu sigma ## <dbl> <dbl> ## 1 176. 6.80 Ejemplo: observaciones normales, no conjugado Arriba repetimos el análisis conjugado usando Metrópolis. Aunque ya no es necesario usar el modelo conjugado, y podemos poner iniciales que sean más intuitivas y acorde con nuestro conocimiento existente. Por ejemplo, podemos poner \\(p(\\mu, \\sigma) = p(\\mu)p(\\sigma)\\), donde la densidad de \\(\\mu \\sim \\mathsf{N}(175, 2)\\) y \\(\\sigma \\sim \\mathsf{U}[2, 20].\\) Igual que antes, la verosimilitud \\(p(x|\\mu, \\sigma)\\) es normal con media \\(\\mu\\) y desviación estándar \\(\\sigma.\\) Escribimos la posterior: crear_log_posterior <- function(x, m_0, sigma_0, inf, sup){ # calcula log_posterior log_posterior <- function(mu, sigma){ log_verosim <- sum(dnorm(x, mu, sigma, log = TRUE)) log_inicial <- dunif(sigma, inf, sup, log = TRUE) + dnorm(mu, mu_0, sigma_0, log = TRUE) log_p <- log_verosim + log_inicial log_p } log_posterior } log_p <- crear_log_posterior(cantantes$estatura_cm, 175, 3, 2, 20) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(8231) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 172, sigma = 5), 50000) g_normal_2 <- ggplot(sim_tbl, aes(x = mu, y = sigma)) + geom_point(alpha = 0.05) + coord_equal() + ylim(c(0, 14)) g_normal + g_normal_2 Los resultados son similares, pero en nuestras estimaciones bajo el segundo modelo, la \\(\\sigma\\) está concentrada en valores un poco más bajos que el modelo normal-gamma inversa. Las medias posteriores son: sim_tbl %>% summarise(across(is.numeric, mean)) ## # A tibble: 1 × 3 ## iter_num mu sigma ## <dbl> <dbl> <dbl> ## 1 25000. 176. 6.54 Nótese que la inicial para el modelo normal-gamma inversa pone muy poca probabilidad para valores bajos de \\(\\sigma\\), mientras que el segundo modelo hay un 10% de probabilidad de que la \\(\\sigma\\) sea menor que 4. tau <- rgamma(5000, 3, 150) sigma <- 1/sqrt(tau) quantile(sigma, c(0.01,0.1, 0.9, 0.99)) ## 1% 10% 90% 99% ## 4.219278 5.276228 11.579358 19.038529 quantile(runif(5000, 2, 25), c(0.01,0.1, 0.9, 0.99)) ## 1% 10% 90% 99% ## 2.261297 4.254128 22.691760 24.719630 Ejemplo: exámenes Recordamos un ejemplo que vimos en la sección de máxima verosimilitud. Supongamos que en una población de estudiantes tenemos dos tipos: unos llenaron un examen de opción múltiple al azar (1 de 5), y otros contestaron las preguntas intentando sacar una buena calificación. Suponemos que una vez que conocemos el tipo de estudiante, todas las preguntas tienen la misma probabilidad de ser contestadas correctamente, de manera independiente. El modelo teórico está representado por la siguiente simulación: sim_formas <- function(p_azar, p_corr){ tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } Y una muestra se ve como sigue: set.seed(12) muestra <- map_dbl(1:200, ~ sim_formas(0.35, 0.5)) qplot(muestra) Supongamos que no conocemos la probabildad de contestar correctamente ni la proporción de estudiantes que contestó al azar. ¿Como estimamos estas dos cantidades? La verosimilitud la escribimos en el ejercicio anterior en la sección de máxima verosimilitud, está dada, para las repuestas de un estudiante, por: \\[p(X = k|\\theta_{azar}, \\theta_{corr}) \\propto \\theta_{azar}(1/5)^k(4/5)^{10-k} + (1-\\theta_{azar})\\theta_{corr}^k(1-\\theta_{corr})^{10-k}\\] Suponiendo que todas las preguntas tienen la misma dificultad, y que los estudiantes que estudiaron son homogéneos (podemos discutir qué haríamos para introducir heterogeneidad que típicamente observaríamos). Creemos que la mayoría de los estudiantes no contesta al azar, así que pondremos como inicial \\[\\theta_{azar} \\sim \\mathsf{Beta}(1, 5)\\] qbeta(c(0.1, 0.9), 1, 5) %>% round(2) ## [1] 0.02 0.37 Ahora tenemos que pensar en la probabilidad \\(\\theta_{corr}\\) para los estudiantes que sí estudiaron. Imaginemos que lo probamos con un estudiante que sabemos que sí estudió, y obtuvo un porcentaje de correctos de 7/10, Podríamos poner entonces (vimos 10 intentos, con 3 fracasos y 7 éxitos): \\[\\theta_{corr} \\sim \\mathsf{Beta}(7, 3)\\] Finalmente, necesitamos la conjunta inicial. Pondremos \\[p(\\theta_{azar},\\theta_{corr}) = p(\\theta_{azar})p(\\theta_{corr})\\] con lo que expresamos que inicialmente no creemos que estos dos parámetros estén relacionados. Si pensáramos, por ejemplo, que cuando hacemos exámenes difíciles menos estudiantes estudian, entonces deberíamos intentar otra conjunta. Escribimos el producto de la verosimilitud con la inicial: crear_log_posterior <- function(x){ log_posterior <- function(theta_azar, theta_corr){ log_verosim <- sum(log(theta_azar * dbinom(x, 10, 1/5) + (1 - theta_azar) * dbinom(x, 10, theta_corr))) log_inicial <- dbeta(theta_azar, 1, 5, log = TRUE) + dbeta(theta_corr, 7, 3, log = TRUE) log_post <- log_verosim + log_inicial log_post } log_posterior } Creamos la función de verosimilitud con los datos log_p <- crear_log_posterior(muestra) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(8231) metro_examenes <- crear_metropolis(log_post, sigma_salto = 0.02) sim_tbl <- metro_examenes(c(theta_azar = 0.5, theta_corr = 0.5), 20000) g_1 <- ggplot(sim_tbl, aes(x = theta_azar, y = theta_corr)) + geom_point(alpha = 0.05) + coord_equal() g_1 Nótese que hay cierta correlación entre las dos proporciones, y esto produce intervalos posteriores relativamente amplios. Esto es de esperarse, pues los datos son consistentes con una proporción relativamente chica de estudiantes que contestan al azar, y tasas de correctos más altas entre los que sí estudian, y una proporción más grande de respuestas al azar con tasas de correctos más altas. f <- c(0.05, 0.5, 0.95) sim_tbl %>% pivot_longer(-iter_num, names_to = "parametro", values_to = "valor") %>% group_by(parametro) %>% summarise(cuantil = quantile(valor, f), f = f) %>% mutate(cuantil = round(cuantil, 2)) %>% pivot_wider(names_from = f, values_from = cuantil) ## # A tibble: 2 × 4 ## # Groups: parametro [2] ## parametro `0.05` `0.5` `0.95` ## <chr> <dbl> <dbl> <dbl> ## 1 theta_azar 0.3 0.38 0.45 ## 2 theta_corr 0.5 0.52 0.56 Muestreador de Gibbs El algoritmo de Metrópolis es muy general y se puede aplicar a una gran variedad de problemas. Sin embargo, afinar los parámetros de la distribución propuesta para que el algoritmo funcione correctamente puede ser complicado. El muestredor de Gibbs no necesita de una distribución propuesta y por lo tanto no requiere afinar estos parámetros. Para implementar un muestreador de Gibbs se necesita ser capaz de generar muestras de la distribución posterior condicional a cada uno de los parámetros individuales. Esto es, el muestreador de Gibbs permite generar muestras de la posterior: \\[p(\\theta_1,...,\\theta_p|x)\\] siempre y cuando podamos generar valores de todas las distribuciones condicionales: \\[\\theta_k \\sim p(\\theta_k|\\theta_1,...,\\theta_{k-1},\\theta_{k+1},...,\\theta_p,x).\\] El proceso del muestreador de Gibbs es una caminata aleatoria a lo largo del espacio de parámetros. La caminata inicia en un punto arbitrario y en cada tiempo el siguiente paso depende únicamente de la posición actual. Por tanto el muestredor de Gibbs es un proceso cadena de Markov vía Monte Carlo. La diferencia entre Gibbs y Metrópolis radica en como se deciden los pasos. Muestreador Gibbs En cada punto de la caminata se selecciona uno de los componentes del vector de parámetros (típicamente se cicla en orden): Supongamos que se selecciona el parámetro \\(k\\)-ésimo después de haber modificado los \\(k-1\\) anteriores, entonces obtenemos un nuevo valor para este parámetro generando una simulación de la distribución condicional \\[\\theta_k^{(i+1)} \\sim p(\\theta_k|\\theta_1^{(i+1)},\\ldots,\\theta_{k-1}^{(i+1)},\\theta_{k+1}^{(i)},\\ldots,\\theta_p^{(i)},x)\\] El nuevo valor \\(\\theta_k^{(i+1)}\\) junto con los valores \\(\\theta_1^{(i+1)},\\ldots,\\theta_{k-1}^{(i+1)},\\theta_{k+1}^{(i)},\\ldots,\\theta_p^{(i)}\\) constituyen la nueva posición en la caminata aleatoria. Seleccionamos una nueva componente \\(\\theta_{k+1}^{(i+1)}\\) y repetimos el proceso. El muestreador de Gibbs es útil cuando no podemos determinar de manera analítica la distribución conjunta y no se puede simular directamente de ella, pero sí podemos determinar todas las distribuciones condicionales y simular de ellas. Ejemplo: dos proporciones Supongamos que queremos evaluar el balanceo de dos dados de 20 lados que produce una fábrica. En particular, evaluar la probabilidad de tirar un 20, y quizá escoger el dado que nos de mayor probabilidad de tirar un 20. Tiramos cada dado \\(n\\) veces, y denotamos por \\(X_1\\) y \\(X_2\\) el número de 20’s que tiramos en cada ocasión. El modelo de datos está dado por \\[p(x_1, x_2|\\theta_1, \\theta_2)\\propto \\theta_1^{x_1}(1-\\theta_1)^{n - x_1}\\theta_2^{x_2}(1-\\theta_2)^{n - x_2},\\] que es el producto de dos densidades binomiales, pues suponemos que las tiradas son independientes cuando conocemos los parámetros \\(\\theta_1\\) y \\(\\theta_2\\). Ahora ponemos una inicial \\[p(\\theta_i)\\sim \\mathsf{Beta}(100, 1900)\\] y aquí están las razones de nuestra elección: media <- 1/20 k <- 2000 a <- media * k b <- (1 - media) * k c(a,b) ## [1] 100 1900 qbeta(c(0.05, 0.95), a, b) %>% round(3) ## [1] 0.042 0.058 y suponemos que \\[p(\\theta_1,\\theta_2) = p (\\theta_1)p(\\theta_2)\\] es decir, apriori saber el desempeño de un dado no nos da información adicional del otro (esto podría no ser cierto, por ejemplo, si el defecto es provocado por la impresión del número 20). Por lo tanto, la posterior es \\[p(\\theta_1,\\theta_2|x_1, x_2)\\propto \\theta_1^{x_1+100-1}(1-\\theta_1)^{n - x_1 + 1900-1}\\theta_2^{x_2+100 -1}(1-\\theta_2)^{n - x_2 + 1900-1}\\] Ahora consideramoso qué pasa cuando conocemos \\(\\theta_2\\) y los datos. Pensamos en todo lo que no sea \\(\\theta_1\\) como constante de modo que nos queda: \\[p(\\theta_1 | \\theta_2, x) \\propto \\theta_1^{x_1+100 -1}(1-\\theta_1)^{n - x_1 + 1900 -1}\\] que es \\(\\mathsf{Beta}(x_1 + 100, n - x_1 + 1900)\\), y por la misma razón, \\[p(\\theta_2 | \\theta_1, x) \\propto \\theta_2^{x_2+100-1}(1-\\theta_2)^{n - x_2 + 1900-1}\\] que también es es \\(\\mathsf{Beta}(x_1 + 100, n - x_1 + 1900)\\) De hecho, estas condicionales son fáciles de deducir de otra manera: en realidad estamos haciendo dos experimentos separados (pues suponemos que las iniciales son independientes y las pruebas también), así que podriamos usar el análisis Beta-Binomial para cada uno de ellos. En realidad no es necesario usar MCMC para este ejemplo. Usaremos esta función para hacer nuestras iteraciones de Gibbs: iterar_gibbs <- function(pasos, n, x_1, x_2){ iteraciones <- matrix(0, nrow = pasos + 1, ncol = 2) # vector guardará las simulaciones iteraciones[1, 1] <- 0.5 # valor inicial media colnames(iteraciones) <- c("theta_1", "theta_2") # Generamos la caminata aleatoria for (j in seq(2, pasos, 2)) { # theta_1 a <- x_2 + 100 - 1 b <- n - x_2 + 1900 - 1 iteraciones[j, "theta_2"] <- rbeta(1, a, b) # Actualizar theta_1 iteraciones[j, "theta_1"] <- iteraciones[j-1, "theta_1"] # theta_2 a <- x_1 + 100 - 1 b <- n - x_1 + 1900 - 1 iteraciones[j + 1, "theta_1"] <- rbeta(1, a, b) # Actualizar theta_1 iteraciones[j + 1, "theta_2"] <- iteraciones[j, "theta_2"] } iteraciones } Y supongamos que estamos comparando los dados de dos compañías: Chessex y GameScience. Tiramos cada dado 10 mil veces, y obtenemos: # Datos de https://www.awesomedice.com/blogs/news/d20-dice-randomness-test-chessex-vs-gamescience n <- 10000 x_1 <- 408 # Chessex, alrededor de 0.85 dólares por dado x_2 <- 474 # GameScience, alrededor 1.60 dólares por dado E iteramos: iteraciones <- iterar_gibbs(20000, n, x_1, x_2) %>% as_tibble() %>% mutate(iter_num = row_number()) head(iteraciones) ## # A tibble: 6 × 3 ## theta_1 theta_2 iter_num ## <dbl> <dbl> <int> ## 1 0.5 0 1 ## 2 0.5 0.0479 2 ## 3 0.0442 0.0479 3 ## 4 0.0442 0.0452 4 ## 5 0.0411 0.0452 5 ## 6 0.0411 0.0505 6 ggplot(filter(iteraciones, iter_num > 1000, iter_num< 1050), aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() g_1 <- ggplot(iteraciones, aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() g_2 <- ggplot(iteraciones %>% filter(iter_num > 10), aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() + geom_abline(colour = "red") + geom_point(data= tibble(theta_1=1/20, theta_2=1/20), colour = "red", size = 5) g_1 + g_2 Notamos el dado de Cheesex no es consistente con 1/20 de tiros de 20s, pero el dado de GameScience sí lo es. De este gráfica vemos que Cheesex está sesgado hacia abajo, así que deberíamos escoger el dado de GameScience Podemos ver directamente cómo se distribuye la diferencia \\(\\theta_1 - \\theta_2\\). Cualquier estadística es fácil de evaluar, pues simplemente la calculamos para cada simulación y después resumimos: iteraciones <- iteraciones %>% mutate(dif = theta_1 - theta_2) ggplot(iteraciones %>% filter(iter_num > 10), aes(x = dif)) + geom_histogram(bins = 100) + geom_vline(xintercept = 0, colour = "red") Y vemos que es altamente probable que el dado de Cheesex produce más 20’s que el dado de GameScience. iteraciones %>% mutate(theta_1_mayor = dif > 0) %>% summarise(prob_theta_1_mayor = mean(theta_1_mayor)) ## # A tibble: 1 × 1 ## prob_theta_1_mayor ## <dbl> ## 1 0.0215 Finalmente, verificamos nuestro modelo y cuánto aprendimos. Podemos hacerlo simulando de la inicial y comparando con la posterior: inicial_tbl <- tibble(theta_1 = rbeta(20000, 100, 1900), theta_2 = rbeta(20000, 100, 1900), dist = "inicial") posterior_tbl <- iteraciones %>% filter(iter_num > 10) %>% mutate(dist = "posterior") sims_tbl <- bind_rows(inicial_tbl, posterior_tbl) ggplot(sims_tbl, aes(x = theta_1, y = theta_2, colour = dist)) + geom_point(alpha = 0.2) donde vemos que el resultado que obtuvimos es razonablemente consistente con nuestra información inicial, y las 10 mil tiradas de dado fueron altamente informativas. ¿Qué crees que pasaría si sólo hubieramos tirado 40 veces cada dado? ¿Qué tanto habríamos aprendido? Puedes usar datos simulados y repetir este ejercicio. Puedes examinar los resultados para cada cara con los datos originales. Un modelo apropiado es el Dirichlet-Multinomial. Ejemplo: Modelo normal no conjugado Retomemos el caso de observaciones normales, supongamos que tenemos una muestra \\(X_1,...,X_n\\) de observaciones independientes e identicamente distribuidas, con \\(X_i \\sim \\mathsf{N}(\\mu, \\sigma^2)\\). Usaremos iniciales distintas al modelo anterior: \\[p(\\mu, \\sigma^2) = p(\\sigma^2)p(\\mu)\\] con \\(\\mu\\) \\(\\mathsf{N}(\\mu_0, \\sigma_0)\\) y \\(\\tau = 1/\\sigma^2\\) con distribución \\(\\mathsf{Gamma}(a,b)\\). Esto no nos da el modelo conjugado que vimos antes (nota la diferencia de la especificación de la inicial conjunta). Comenzamos por escribir \\[p(\\mu, \\sigma^2|x) \\propto \\frac{1}{{\\sigma^{n/2}}} \\exp(-\\sum\\frac{(x_i-\\mu)²}{2\\sigma^2}) \\exp(- \\frac{(\\mu - \\mu_0)^2}{2\\sigma_0^2}) \\frac{1}{(\\sigma^2)^{a + 1}}\\exp (-\\beta/\\sigma^2 )\\] Comenzamos analizando \\(p(\\mu|\\sigma^2, x)\\). Por la ecuación de arriba, e ignorando los términos que no dependen de \\(\\mu\\): \\[p(\\mu|\\sigma^2, x) \\propto \\exp [ - \\sum_i (\\frac{(\\mu - x_i)^2}{2\\sigma^2} - \\frac{(\\mu - \\mu_0)^2}{2n\\sigma_0^2})]\\] que es una distribución normal (completa cuadrados): \\[\\mu|\\sigma^2,x \\sim \\mathsf{N}\\bigg(\\frac{\\sigma^2}{\\sigma^2 + n\\sigma_0^2}\\mu_0 + \\frac{n\\sigma_0^2}{\\sigma^2 + n \\sigma_0^2}\\bar{x}, \\frac{\\sigma \\sigma_0}{\\sqrt{\\sigma^2 + n\\sigma_0^2}}\\bigg)\\] Ahora consideramos \\(p(\\sigma^2|mu,x)\\). Ignoramos en \\(p(\\mu,\\sigma^2|x)\\) los términos que *no** dependen de \\(\\sigma^2\\): \\[p(\\sigma^2|\\mu, x) \\propto \\frac{1}{\\sigma^{n/2}} \\exp(-\\sum\\frac{(x_i-\\mu)²}{2\\sigma^2}) \\frac{1}{(\\sigma^2)^{a + 1}}\\exp (-\\beta/\\sigma^2)\\] que simplificando da \\[ = \\frac{1}{\\sigma^{n/2 + a + 1}}\\exp( -\\frac{\\beta +\\frac{1}{2}\\sum(x_i - \\mu)^2}{\\sigma^2} )\\] de modo que \\[\\sigma^2|\\mu, x \\sim \\mathsf{GI}(a +n/2, b + \\frac{1}{2}\\sum(x_i -\\mu)^2)\\] Ejemplo Usaremos este muestreador para el problema de la estaturas de los tenores. Comenzamos definiendo las distribuciones iniciales: \\(\\mu \\sim \\mathsf{N}(175, 3)\\) \\(\\tau = 1/\\sigma^2 \\sim \\mathsf{GI}(3, 150)\\), esto es \\(a = 3\\) y \\(b = 150\\). Escribimos el muestreador de Gibbs. n <- 20 x <- cantantes$estatura_cm m <- 175; sigma_0 <- 3; alpha <- 3; beta <- 150 # parámetros de iniciales pasos <- 20000 iteraciones <- matrix(0, nrow = pasos + 1, ncol = 2) # vector guardará las simulaciones iteraciones[1, 1] <- 0 # valor inicial media colnames(iteraciones) <- c("mu", "sigma") # Generamos la caminata aleatoria for (j in seq(2, pasos, 2)) { # sigma^2 mu <- iteraciones[j - 1, "mu"] a <- n / 2 + alpha b <- sum((x - mu) ^ 2) / 2 + beta iteraciones[j, "sigma"] <- sqrt(1/rgamma(1, a, b)) # Actualizar sigma iteraciones[j, "mu"] <- iteraciones[j-1, "mu"] # mu sigma <- iteraciones[j, "sigma"] media <- (n * sigma_0^2 * mean(x) + sigma^2 * m) / (n * sigma_0^2 + sigma^2) varianza <- sigma^2 * sigma_0^2 / (n * sigma_0^2 + sigma^2) iteraciones[j+1, "mu"] <- rnorm(1, media, sd = sqrt(varianza)) # actualizar mu iteraciones[j+1, "sigma"] <- iteraciones[j, "sigma"] } caminata <- data.frame(pasos = 1:pasos, mu = iteraciones[1:pasos, "mu"], sigma = iteraciones[1:pasos, "sigma"]) caminata_g <- caminata %>% gather(parametro, val, mu, sigma) %>% arrange(pasos) Veamos primero algunos pasos: ggplot(filter(caminata, pasos > 1000, pasos< 1010), aes(x = mu, y = sigma)) + geom_path(alpha = 0.3) + geom_point() Donde vemos cómo en cada iteración se actualiza un solo parámetro. Una alternativa es conservar únicamente ciclos completos de la caminata u esto es lo que hacen varios programas que implementan Gibbs, sin embargo ambas cadenas (cadenas completas y conservando únicamente ciclos completos) convergen a la misma distribución posterior. Si tomamos iteraciones completas: ggplot(filter(caminata, pasos > 1000, pasos< 1020, pasos %% 2 == 0), aes(x = mu, y = sigma)) + geom_path(alpha = 0.3) + geom_point() Y ahora vemos cómo se ven las simulaciones: ggplot(filter(caminata, pasos > 1000, pasos< 10000, pasos %% 2 == 0), aes(x = mu, y = sigma)) + geom_point(alpha = 0.1) Y el diagnóstico de cada cadena: ggplot(filter(caminata_g, pasos > 15000), aes(x = pasos, y = val)) + geom_path(alpha = 0.3) + facet_wrap(~parametro, ncol = 1, scales = "free") + scale_y_continuous("") Estas cadenas parecen estar mezclando bien. Podemos resumirlas: ggplot(filter(caminata_g, pasos > 5000), aes(x = val)) + geom_histogram(fill = "gray") + facet_wrap(~parametro, ncol = 1, scales = "free") caminata_g %>% filter(pasos > 1000) %>% # eliminamos la etapa de calentamiento group_by(parametro) %>% summarise( mean(val), sd(val), median(val) ) %>% mutate(across(is_double, round, 2)) ## # A tibble: 2 × 4 ## parametro `mean(val)` `sd(val)` `median(val)` ## <chr> <dbl> <dbl> <dbl> ## 1 mu 176. 1.32 176. ## 2 sigma 6.54 0.95 6.44 Y obtenemos un resultado similar a los anteriores. Conclusiones y observaciones Metrópolis y Gibbs Una generalización del algoritmo de Metrópolis es Metrópolis-Hastings. El algoritmo de Metrópolis es como sigue: Generamos un punto inicial tal que \\(p(\\theta)>0\\). Para \\(i = 1,2,...\\) Se propone un nuevo valor \\(\\theta^*\\) con una distribución propuesta \\(g(\\theta^*|\\theta^{(i)})\\) es común que \\(g(\\theta^*|\\theta^{(i)})\\) sea una normal centrada en \\(\\theta^{(i)}\\). Calculamos la probabilidad de aceptación \\[\\alpha=\\min\\bigg\\{\\frac{p(\\theta^*)}{p(\\theta^{(i)})},1\\bigg\\},\\] y aceptamos \\(\\theta^*\\) con probabilidad \\(p_{mover}\\). Es así que el algorito requiere que podamos calcular el cociente en \\(p_{mover}\\) para todo \\(\\theta^{(i)}\\) y \\(\\theta^*\\), así como simular de la distribución propuesta \\(g(\\theta^*|\\theta^{(i)})\\), adicionalmente debemos poder generar valores uniformes para decidir si aceptar/rechazar. En el caso de Metrópolis un requerimiento adicional es que la distribución propuesta \\(g(\\theta_{a}|\\theta_b)\\) debe ser simétrica, es decir \\(g(\\theta_{a}|\\theta_b) = g(\\theta_{b}|\\theta_a)\\) para todo \\(\\theta_{a}\\), \\(\\theta_{b}\\). Metrópolis-Hastings generaliza Metrópolis, eliminando la restricción de simetría en la distribución propuesta \\(g(\\theta_{a}|\\theta_b)\\), sin embargo para corregir por esta asimetría debemos calcular \\(\\alpha\\) como sigue: \\[\\alpha=\\min\\bigg\\{ \\frac{p(\\theta^*)}{g(\\theta^*|\\theta^{(i)})} \\cdot \\frac{g(\\theta^{(i)}|\\theta^*)}{p(\\theta^{(i)})},1\\bigg\\}\\] La generalización de Metrópolis-Hastings puede resultar en algoritmos más veloces. Se puede ver Gibbs como una generalización de Metrópolis-Hastings, cuando estamos actualizando un componente de los parámetros, la distribución propuesta es la distribución posterior para ese parámetro, por tanto siempre es aceptado. Comparado con Metrópolis, Gibbs tiene la ventaja de que no se necesita afinar los parámetros de una distribución propuesta (o seleccionar siquiera una distribución propuesta). Además que no hay pérdida de simulaciones debido a rechazo. Por su parte, la desventaja debemos conocer las distribuciones condicionales y poder simular de ellas. En el caso de modelos complicados se utilizan combinaciones de Gibbs y Metrópolis. Cuando se consideran estos dos algoritmos Gibbs es un método más simple y es la primera opción para modelos condicionalmente conjugados. Sí solo podemos simular de un subconjunto de las distribuciones condicionales posteriores, entonces podemos usar Gibbs siempre que se pueda y Metrópolis unidimensional para el resto, o de manera más general separamos en bloques, un bloque se actualiza con Gibbs y otro con Metrópolis. El algoritmo de Gibbs puede atorarse cuando hay correlación alta entre los parámetros, reparametrizar puede ayudar, o se pueden usar otros algoritmos. JAGS (Just Another Gibbs Sampler), WinBUGS y OpenBUGS son programas que implementan métodos MCMC para generar simulaciones de distribuciones posteriores. Los paquetes rjags y R2jags permiten ajustar modelos en JAGS desde R. Es muy fácil utilizar estos programas pues uno simplemente debe especificar las distribuciones iniciales, la verosimilitud y los datos observados. Para aprender a usar JAGS se puede revisar la sección correspondiente en las notas de 2018, ahora nos concentraremos en el uso de Stan. HMC y Stan It appears to be quite a general principle that, whenever there is a randomized way of doing something, then there is a nonrandomized way that delivers better performance but requires more thought. -E.T. Jaynes Stan es un programa para generar muestras de una distribución posterior de los parámetros de un modelo, el nombre del programa hace referencia a Stanislaw Ulam (1904-1984) que fue pionero en los métodos de Monte Carlo. A diferencia de JAGS y BUGS, los pasos de la cadena de Markov se generan con un método llamado Monte Carlo Hamiltoniano (HMC). HMC es computacionalmente más costoso que Metrópolis o Gibbs, sin embargo, sus propuestas suelen ser más eficientes, y por consiguiente no necesita muestras tan grandes. En particular cuando se ajustan modelos grandes y complejos (por ejemplo, con variables con correlación alta) HMC supera a otros. Diagnósticos generales para MCMC Cuando generamos una muestra de la distribución posterior usando MCMC, sin importar el método (Metrópolis, Gibbs, HMC), buscamos que: Los valores simulados sean representativos de la distribución posterior. Esto implica que no deben estar influenciados por el valor inicial (arbitrario) y deben explorar todo el rango de la posterior, con suficientes retornos para evaluar cuánta masa hay en cada región. Debemos tener suficientes simulaciones de tal manera que las estimaciones sean precisas y estables. Queremos tener un método eficiente para generar las simulaciones. En la práctica intentamos cumplir lo más posible estos objetivos, pues aunque en principio los métodos MCMC garantizan que una cadena infinitamente larga logrará una representación perfecta, siempre debemos tener un criterio para cortar la cadena y evaluar la calidad de las simulaciones. Representatividad Burn-in e iteraciones iniciales- En primer lugar, en muchas ocasiones las condiciones iniciales de las cadenas están en partes del espacio de parámetros que son “atípicos” en términos de la posterior. Así que es común quitar algunas observaciones iniciales (iteraciones de burn-in) para minimizar su efecto en resúmenes posteriores. Por ejemplo, para el ejemplo de los cantantes, podemos ver que las iteraciones iniciales tienen como función principal llegar a las regiones de probabilidad posterior alta: log_p <- crear_log_posterior_norm(cantantes$estatura_cm, mu_0, n_0, a, b) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(823) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 162, sigma = 1), 5000) ggplot(sim_tbl %>% filter(iter_num < 500), aes(x = mu, y = sigma)) + geom_path(alpha = 0.5) + geom_point(aes(colour = iter_num)) De modo que puede ser buena idea eliminar las primeras iteraciones. En teoría, no es necesario hacer esto si hacemos suficientes iteraciones, pues la cadena va a terminar en su estado estable explorando la posterior. En la práctica, y con pocas iteraciones, puede ayudar un poco a mejorar la precisión numérica de las cantidades que queramos calcular. sim_g <- sim_tbl %>% pivot_longer(-iter_num, names_to = "parametro", values_to = "valor") todas <- ggplot(sim_g, aes(x = iter_num, y = valor)) + geom_line(alpha = 0.5) + facet_wrap(~ parametro, ncol = 1, scales = "free_y") + labs(subtitle = "Todas las simulaciones") sin_burnin <- sim_g %>% filter(iter_num > 200) %>% ggplot(aes(x = iter_num, y = valor)) + geom_line(alpha = 0.5) + facet_wrap(~ parametro, ncol = 1, scales = "free_y") + labs(subtitle = "Quitando 200 de burn-in") todas + sin_burnin Convergencia a estado límite. Para determinar la convergencia es conveniente realizar más de una cadena: buscamos ver si realmente se ha olvidado el estado inicial, si las distribuciones de cada cadena son consistentes unas con otras, y revisar que algunas cadenas no hayan quedado atoradas en regiones inusuales del espacio de parámetros. Inicializamos las cadenas con valores al azar en rangos razonables (por ejemplo simulando de la inicial): set.seed(8513) valores_iniciales <- tibble(mu_0 = rnorm(4, 160, 20), sigma_0 = runif(4, 0, 20), cadena = 1:4) sims_tbl <- valores_iniciales %>% mutate(sims = map2(mu_0, sigma_0, ~ metro_normal(c(mu = .x, sigma = .y), 300) )) %>% unnest(sims) ggplot(sims_tbl, aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() Y este es un ejemplo donde claramente las cadenas no han alcanzado un estado estable: tienen muy distintas medias y varianzas. Por ejemplo: set.seed(83243) sims_tbl <- valores_iniciales %>% mutate(sims = map2(mu_0, sigma_0, ~ metro_normal(c(mu = .x, sigma = .y), 20000) )) %>% unnest(sims) ggplot(sims_tbl, aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() Y este resultado se ve mejor. La parte transición hacia las zonas de alta probabilidad pasa antes de unas 1000 iteraciones. Podemos hacer más simulaciones, o eliminar como burn-in las primiras iteraciones: media_g <- ggplot(sims_tbl %>% filter(iter_num > 2000), aes(x = iter_num, y = mu, colour = factor(cadena))) + geom_line() sigma_g <- ggplot(sims_tbl %>% filter(iter_num > 2000), aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() media_g / sigma_g Las gráficas anteriores nos ayudan a determinar si elegimos un periodo de calentamiento adecuado o si alguna cadena está alejada del resto. Una vez que las cadenas están en estado estable, podemos usar todas las simulaciones juntas para resumir: head(sims_tbl) ## # A tibble: 6 × 6 ## mu_0 sigma_0 cadena iter_num mu sigma ## <dbl> <dbl> <int> <int> <dbl> <dbl> ## 1 155. 3.16 1 1 155. 3.16 ## 2 155. 3.16 1 2 155. 3.16 ## 3 155. 3.16 1 3 155. 3.16 ## 4 155. 3.16 1 4 155. 3.16 ## 5 155. 3.16 1 5 155. 3.50 ## 6 155. 3.16 1 6 155. 3.81 # medias posteriores sims_tbl %>% summarise(mu = mean(mu), sigma = mean(sigma)) ## # A tibble: 1 × 2 ## mu sigma ## <dbl> <dbl> ## 1 176. 6.77 Además de realizar gráficas podemos usar la medida de convergencia \\(\\hat{R}\\). La medida \\(\\hat{R}\\) se conoce como el factor de reducción potencial de escala o diagnóstico de convergencia de Gelman-Rubin, esta es una estimación de la posible reducción en la longitud de un intervalo de confianza si las simulaciones continuaran infinitamente. \\(\\hat{R}\\) es aproximadamente la raíz cuadrada de la varianza de todas las cadenas juntas dividida entre la varianza dentro de cada cadena. Si \\(\\hat{R}\\) es mucho mayor a 1 esto indica que las cadenas no se han mezclado bien. Una regla usual es iterar hasta alcanzar un valor \\(\\hat{R} \\leq 1.1\\) para todos los parámetros. \\[\\hat{R} \\approx \\sqrt{\\frac{\\hat{V}}{W}}\\] donde \\(B\\) es la varianza entre las cadenas, \\(W\\) es la varianza dentro de las cadenas \\[B = \\frac{N}{M-1}\\sum_m (\\hat{\\theta}_m - \\hat{\\theta})^2\\] \\[W = \\frac{1}{M}\\sum_m \\hat{\\sigma}_m^2\\] Y \\(\\hat{V}\\) es una estimación del varianza de posterior de \\(\\theta\\): \\[\\hat{V} = \\frac{N-1}{N}W + \\frac{M+1}{MN}B\\] #### Ejemplo {-} En nuestro ejemplo anterior, tenemos sims_tbl %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(media = mean(valor), num = n(), sigma2 = var(valor)) %>% summarise(N = first(num), M = n_distinct(cadena), B = N * var(media), W = mean(sigma2), V_hat = ((N - 1) / N) * W + (M + 1)/(M * N) * B, R_hat = sqrt(V_hat / W)) ## # A tibble: 2 × 7 ## parametro N M B W V_hat R_hat ## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> ## 1 mu 20000 4 1281. 4.29 4.37 1.01 ## 2 sigma 20000 4 121. 1.31 1.32 1.00 Y verificamos que los valores de \\(\\hat{R}\\) son cercanos a uno, lo cual indica que este diagnóstico es aceptable. Si hubiéramos trabajado con las primeras 300 iteraciones sims_tbl %>% filter(iter_num < 300) %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(media = mean(valor), num = n(), sigma2 = var(valor)) %>% summarise(N = first(num), M = n_distinct(cadena), B = N * var(media), W = mean(sigma2), V_hat = ((N - 1) / N) * W + (M + 1)/(M * N) * B, R_hat = sqrt(V_hat / W)) ## # A tibble: 2 × 7 ## parametro N M B W V_hat R_hat ## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> ## 1 mu 299 4 32334. 40.4 175. 2.08 ## 2 sigma 299 4 7394. 11.9 42.8 1.89 Y estos valores indican problemas en la convergencia de las cadenas. Es necesario diagnosticar el problema, que en este caso resolvemos incrementando el número de iteraciones. Precisión Una vez que tenemos una muestra representativa de la distribución posterior, nuestro objetivo es asegurarnos de que la muestra es lo suficientemente grande para producir estimaciones estables y precisas de la distribución. Para ello usaremos el tamaño efectivo de muestra, Si las simulaciones fueran independientes \\(N_{eff}\\) sería el número total de simulaciones; sin embargo, las simulaciones de MCMC suelen estar correlacionadas, de modo que cada iteración de MCMC es menos informativa que si fueran independientes. Ejemplo: Si graficaramos simulaciones independientes, esperaríamos valores de autocorrelación chicos: acf(rgamma(1000,1,1)) Sin embargo, los valores que simulamos tienen el siguiente perfil de autocorrelación: sigma_metro_sims <- sims_tbl %>% filter(cadena==4) %>% pull(mu) acf(sigma_metro_sims) El tamaño efectivo de muestra nos dice qué tamaño de muestra de observaciones independientes nos daría la misma información que las simulaciones de la cadena. Una manera de manera relativamente simple de estimarlo es: \\[N_{eff} = \\frac{N}{1+2\\sum_{k=1}^\\infty ACF(k)} \\] Usualmente nos gustaría obtener un tamaño efectivo de al menos \\(100\\) (para cálculo de medias y varianzas posteriores). Esta cantidad usualmente se reporta en el software (con mejores estimaciones que la de la fórmula de arriba), y es necesario checarlo. En nuestro ejemplo hacemos una aproximación como sigue: calc_acf <- function(x){ valores_acf <- acf(x, lag.max = 1000, plot = FALSE)$acf %>% as.numeric() valores_acf[-1] } acf_tbl <- sims_tbl %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(N = n_distinct(iter_num), k = 1:1000, acf = calc_acf(valor)) %>% summarise(N = first(N), N_eff = N / (1 + 2 * sum(acf))) acf_tbl ## # A tibble: 8 × 4 ## # Groups: parametro [2] ## parametro cadena N N_eff ## <chr> <int> <int> <dbl> ## 1 mu 1 20000 251. ## 2 mu 2 20000 700. ## 3 mu 3 20000 104. ## 4 mu 4 20000 394. ## 5 sigma 1 20000 421. ## 6 sigma 2 20000 411. ## 7 sigma 3 20000 93.9 ## 8 sigma 4 20000 724. Nótese que algunas cadenas tienen un tamaño efectivo de muestra relativamente bajo para el número de iteraciones que hicimos. De cualquier forma, el agregado sobre todas las cadenas es suficientemente grande para calcular resúmenes básicos: acf_tbl %>% group_by(parametro) %>% summarise(N = sum(N), N_eff = sum(N_eff)) ## # A tibble: 2 × 3 ## parametro N N_eff ## <chr> <int> <dbl> ## 1 mu 80000 1450. ## 2 sigma 80000 1650. Sin embargo, podemos hacer más simulaciones si es necesario, por ejemplo para aproximar de manera apropiada percentiles en las colas. Eficiencia Hay varias maneras para mejorar la eficiencia de un proceso MCMC: Paralelizar, no disminuimos el número de pasos en las simulaciones pero podemos disminuir el tiempo que tarda en correr. Cambiar la parametrización del modelo o transformar los datos. Adelgazar la muestra cuando tenemos problemas de uso de memoria, consiste en guardar únicamente los \\(k\\)-ésimos pasos de la cadena y resulta en cadenas con menos autocorrelación . Recomendaciones generales Gelman and Hill (2006) recomienda los siguientes pasos cuando uno esta simulando de la posterior: Cuando definimos un modelo por primera vez establecemos un valor bajo para el número de iteraciones. La razón es que la mayor parte de las veces los modelos no funcionan a la primera por lo que sería pérdida de tiempo dejarlo correr mucho tiempo antes de descubrir el problema. Si las simulaciones no han alcanzado convergencia aumentamos las iteraciones a \\(500\\) ó \\(1000\\) de tal forma que las corridas tarden segundos o unos cuantos minutos. Si tarda más que unos cuantos minutos (para problemas del tamaño que veremos en la clase) y aún así no alcanza convergencia entonces juega un poco con el modelo (por ejemplo intenta transformaciones lineales), para JAGS Gelman sugiere más técnicas para acelerar la convergencia en el capitulo \\(19\\) del libro Data Analysis Using Regression and Multilevel/Hierarchical models. En el caso de Stan veremos ejemplos de reparametrización, y se puede leer más en la guía. Otra técnica conveniente cuando se trabaja con bases de datos grandes (sobre todo en la parte exploratoria) es trabajar con un subconjunto de los datos, quizá la mitad o una quinta parte. Referencias "],["apéndice-principios-de-visualizacion.html", "Apéndice: Principios de visualizacion Introducción Visualización popular de datos Teoría de visualización de datos Ejemplo: gráfica de Minard", " Apéndice: Principios de visualizacion “The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey El cuarteto de Anscombe En 1971 un estadístico llamado Frank Anscombe (fundador del departamento de Estadística de la Universidad de Yale) publicó cuatro conjuntos de dato. Cada uno consiste de 11 observaciones. La peculariedad de estos conjuntos es que tienen las mismas propiedades estadísticas. Sin embargo, cuando analizamos los datos de manera gráfica en un histograma encontramos rápidamente que los conjuntos de datos son muy distintos. Media de \\(x\\): 9 Varianza muestral de \\(x\\): 11 Media de \\(y\\): 7.50 Varianza muestral de \\(y\\): 4.12 Correlación entre \\(x\\) y \\(y\\): 0.816 Línea de regresión lineal: \\(y = 3.00 + 0.500x\\) En la gráfica del primer conjunto de datos, se ve clara una relación lineal simple con un modelo que cumple los supuestos de normalidad. La segunda gráfica (arriba a la derecha) muestra unos datos que tienen una asociación pero definitivamente no es lineal. En la tercera gráfica (abajo a la izquierda) están puntos alineados perfectamente en una línea recta, excepto por uno de ellos. En la última gráfica podemos ver un ejemplo en el cual basta tener una observación atípica para que se produzca un coeficiente de correlación alto aún cuando en realidad no existe una asociación lineal entre las dos variables. El cuarteto de Ascombe inspiró una técnica reciente para crear datos que comparten las mismas propiedades estadísticas al igual que en el cuarteto, pero que producen gráficas muy distintas (Matejka, Fitzmaurice). Introducción La visualización de datos no trata de hacer gráficas “bonitas” o “divertidas”, ni de simplificar lo complejo o ayudar a una persona “que no entiende mucho” a entender ideas complejas. Más bien, trata de aprovechar nuestra gran capacidad de procesamiento visual para exhibir de manera clara aspectos importantes de los datos. El siguiente ejemplo de (Tufte 2006), ilustra claramente la diferencia entre estos dos enfoques. A la izquierda están gráficas (más o menos típicas de Powerpoint) basadas en la filosofía de simplificar, de intentar no “ahogar” al lector con datos. El resultado es una colección incoherente, de bajo contenido, que no tiene mucho qué decir y que es, “indeferente al contenido y la evidencia”. A la derecha está una variación del rediseño de Tufte en forma de tabla, que en este caso particular es una manera eficiente de mostrar claramente los patrones que hay en este conjunto simple de datos. ¿Qué principios son los que soportan la efectividad de esta tabla sobre la gráfica de la derecha? Veremos que hay dos conjuntos de principios importantes: unos relacionados con el diseño y otros con la naturaleza del análisis de datos, independientemente del método de visualización. Visualización popular de datos Publicaciones populares (periódicos, revistas, sitios internet) muchas veces incluyen visualización de datos como parte de sus artículos o reportajes. En general siguen el mismo patrón que en la visión tradicionalista de la estadística: sirven más para divertir que para explicar, tienden a explicar ideas simples y conjuntos chicos de datos, y se consideran como una “ayuda” para los “lectores menos sofisticados”. Casi siempre se trata de gráficas triviales (muchas veces con errores graves) que no aportan mucho a artículos que tienen un nivel de complejidad mucho mayor (es la filosofía: lo escrito para el adulto, lo graficado para el niño). Teoría de visualización de datos Existe teoría fundamentada acerca de la visualización. Después del trabajo pionero de Tukey, los principios e indicadores de Tufte se basan en un estudio de la historia de la graficación y ejercicios de muestreo de la práctica gráfica a lo largo de varias disciplinas (¿cuáles son las mejores gráficas? ¿por qué?) El trabajo de Cleveland es orientado a la práctica del análisis de datos (¿cuáles gráficas nos han ayudado a mostrar claramente los resultados del análisis?), por una parte, y a algunos estudios de percepción visual. En resumen, hablaremos de las siguientes guías: Principios generales del diseño analítico Aplicables a una presentación o análisis completos, y como guía para construir nuevas visualizaciones (Tufte 2006). Principio 1. Muestra comparaciones, contrastes, diferencias. Principio 2. Muestra causalidad, mecanismo, explicación, estructura sistemática. Principio 3. Muestra datos multivariados, es decir, más de una o dos variables. Principio 4. Integra palabras, números, imágenes y diagramas. Principio 5. Describe la totalidad de la evidencia. Muestra fuentes usadas y problemas relevantes. Principio 6. Las presentaciones analíticas, a fin de cuentas, se sostienen o caen dependiendo de la calidad, relevancia e integridad de su contenido. Técnicas de visualización Esta categoría incluye técnicas específicas que dependen de la forma de nuestros datos y el tipo de pregunta que queremos investigar (Tukey (1977), William S. Cleveland (1993), W. S. Cleveland (1994), Tufte (2006)). Tipos de gráficas: cuantiles, histogramas, caja y brazos, gráficas de dispersión, puntos/barras/ líneas, series de tiempo. Técnicas para mejorar gráficas: Transformación de datos, transparencia, vibración, banking 45, suavizamiento y bandas de confianza. Pequeños múltiplos Indicadores de calidad gráfica Aplicables a cualquier gráfica en particular. Estas son guías concretas y relativamente objetivas para evaluar la calidad de una gráfica (Tufte 1986). Integridad Gráfica. El factor de engaño, es decir, la distorsión gráfica de las cantidades representadas, debe ser mínimo. Chartjunk. Minimizar el uso de decoración gráfica que interfiera con la interpretación de los datos: 3D, rejillas, rellenos con patrones. Tinta de datos. Maximizar la proporción de tinta de datos vs. tinta total de la gráfica. For non-data- ink, less is more. For data-ink, less is a bore. Densidad de datos. Las mejores gráficas tienen mayor densidad de datos, que es la razón entre el tamaño del conjunto de datos y el área de la gráfica. Las gráficas se pueden encoger mucho. Percepción visual. Algunas tareas son más fáciles para el ojo humano que otras (W. S. Cleveland 1994). Factor de engaño y Chartjunk El factor de engaño es el cociente entre el efecto mostrado en una gráfica y el efecto correspondiente en los datos. Idealmente, el factor de engaño debe ser 1 (ninguna distorsión). El chartjunk son aquellos elementos gráficos que no corresponden a variación de datos, o que entorpecen la interpretación de una gráfica. Estos son los indicadores de calidad más fáciles de entender y aplicar, y afortunadamente cada vez son menos comunes. Un diseño popular que califica como chartjunk y además introduce factores de engaño es el pie de 3D. En la gráfica de la derecha, podemos ver como la rebanada C se ve más grande que la rebanada A, aunque claramente ese no es el caso (factor de engaño). La razón es la variación en la perspectiva que no corresponde a variación en los datos (chartjunk). Crítica gráfica: Gráfica de pie Todavía elementos que pueden mejorar la comprensión de nuestra gráfica de pie: se trata de la decodificiación que hay que hacer categoría - color - cuantificación. Podemos agregar las etiquetas como se muestra en la serie de la derecha, pero entonces: ¿por qué no mostrar simplemente la tabla de datos? ¿qué agrega el pie a la interpretación? La deficiencias en el pie se pueden ver claramente al intentar graficar más categorías (13) . En el primer pie no podemos distinguir realmente cuáles son las categorías grandes y cuáles las chicas, y es muy difícil tener una imagen mental clara de estos datos. Agregar los porcentajes ayuda, pero entonces, otra vez, preguntamos cuál es el propósito del pie. La tabla de la izquierda hace todo el trabajo (una vez que ordenamos las categrías de la más grande a la más chica). Es posible hacer una gráfica de barras como la de abajo a la izquierda. Hay otros tipos de chartjunk comunes: uno es la textura de barras, por ejemplo. El efecto es la producción de un efecto moiré que es desagradable y quita la atención de los datos, como en la gráfica de barras de abajo. Otro común son las rejillas, como mostramos en las gráficas de la izquierda. Nótese como en estos casos hay efectos ópticos no planeados que degradan la percepción de los patrones en los datos. Pequeños múltiplos y densidad gráfica La densidad de una gráfica es el tamaño del conjunto de datos que se grafica comparado con el área total de la gráfica. En el siguiente ejemplo, graficamos en logaritmo-10 de millones de cabezas de ganado en Francia (cerdos, res, ovejas y caballos). La gráfica de la izquierda es pobre en densidad pues sólo representa 4 datos. La manera más fácil de mejorar la densidad es hacer más chica la gráfica: La razón de este encogimiento es una que tiene qué ver con las oportunidades perdidas de una gráfica grande. Si repetimos este mismo patrón (misma escala, mismos tipos de ganado) para distintos países obtenemos la siguiente gráfica: Esta es una gráfica de puntos. Es útil como sustituto de una gráfica de barras, y es superior en el sentido de que una mayor proporción de la tinta que se usa es tinta de datos. Otra vez, mayor proporción de tinta de datos representa más oportunidades que se pueden capitalizar. Más pequeños múltiplos Los pequeños múltiplos presentan oportunidades para mostrar más acerca de nuestro problema de interés. Consideramos por ejemplo la relación de radiación solar y niveles de ozono: En el ejemplo anterior incluyendo una variable adicional (velocidad del viento) podemos entender más acerca de la relación de radiación solar y niveles de ozono: Tinta de datos Maximizar la proporción de tinta de datos en nuestras gráficas tiene beneficios inmediatos. La regla es: si hay tinta que no representa variación en los datos, o la eliminación de esa tinta no representa pérdidas de significado, esa tinta debe ser eliminada. El ejemplo más claro es el de las rejillas en gráficas y tablas: ¿Por qué usar grises en lugar de negros? La respuesta tiene qué ver con el principio de tinta de datos: si marcamos las diferencias sutil pero claramente, tenemos más oportunidades abiertas para hacer énfasis en lo que nos interesa: a una gráfica o tabla saturada no se le puede hacer más - es difícil agregar elementos adicionales que ayuden a la comprensión. Si comenzamos marcando con sutileza, entonces se puede hacer más. Los mapas geográficos son un buen ejemplo de este principio. El espacio en blanco es suficientemente bueno para indicar las fronteras en una tabla, y facilita la lectura: Para un ejemplo del proceso de rediseño de una tabla, ver aquí. Finalmente, podemos ver un ejemplo que intenta incorporar los elementos del diseño analítico, incluyendo pequeños múltiplos: Decoración Percepción de escala Entre la percepción visual y la interpretación de una gráfica están implícitas tareas visuales específicas que las personas debemos realizar para ver correctamente la gráfica. En la década de los ochenta, William S. Cleveland y Robert McGill realizaron algunos experimentos identificando y clasificando estas tareas para diferentes tipos de gráficos (William S. Cleveland and McGill 1984). En estos, se le pregunta a la persona que compare dos valores dentro de una gráfica, por ejemplo, en dos barras en una gráfica de barras, o dos rebanadas de una gráfica de pie. Los resultados de Cleveland y McGill fueron replicados por Heer y Bostock en 2010 y los resultados se muestran en las gráficas de la derecha: Ejemplo: gráfica de Minard Concluimos esta sección con una gráfica que, aunque poco común, ejemplifica los principios de una buena gráfica, y es reconocida como una de las mejores visualizaciones de la historia. Una gráfica excelente, presenta datos interesantes de forma bien diseñada: es una cuestión de fondo, de diseño, y estadística… [Se] compone de ideas complejas comunicadas con claridad, precisión y eficiencia. … [Es] lo que da al espectador la mayor cantidad de ideas, en el menor tiempo, con la menor cantidad de tinta, y en el espacio más pequeño. … Es casi siempre multivariado. … Una excelente gráfica debe decir la verdad acerca de los datos. (Tufte, 1983) La famosa visualización de Charles Joseph Minard de la marcha de Napoleón sobre Moscú, ilustra los principios de una buena gráfica. Tufte señala que esta imagen “bien podría ser el mejor gráfico estadístico jamás dibujado”, y sostiene que “cuenta una historia rica y coherente con sus datos multivariados, mucho más esclarecedora que un solo número que rebota en el tiempo”. Se representan seis variables: el tamaño del ejército, su ubicación en una superficie bidimensional, la dirección del movimiento del ejército y la temperatura en varias fechas durante la retirada de Moscú”. Hoy en día Minard es reconocido como uno de los principales contribuyentes a la teoría de análisis de datos y creación de infografías con un fundamento estadístico. Se grafican 6 variables: el número de tropas de Napoleón, la distancia, la temperatura, la latitud y la longitud, la dirección en que viajaban las tropas y la localización relativa a fechas específicas. La gráfica de Minard, como la describe E.J. Marey, parece “desafiar la pluma del historiador con su brutal elocuencia”, la combinación de datos del mapa, y la serie de tiempo, dibujados en 1869, “retratan una secuencia de pérdidas devastadoras que sufrieron las tropas de Napoleón en 1812”. Comienza en la izquierda, en la frontera de Polonia y Rusia, cerca del río Niemen. La línea gruesa dorada muestra el tamaño de la Gran Armada (422,000) en el momento en que invadía Rusia en junio de 1812. El ancho de esta banda indica el tamaño de la armada en cada punto del mapa. En septiembre, la armada llegó a Moscú, que ya había sido saqueada y dejada desértica, con sólo 100,000 hombres. El camino del retiro de Napoleón desde Moscú está representado por la línea oscura (gris) que está en la parte inferior, que está relacionada a su vez con la temperatura y las fechas en el diagrama de abajo. Fue un invierno muy frío, y muchos se congelaron en su salida de Rusia. Como se muestra en el mapa, cruzar el río Berezina fue un desastre, y el ejército de Napoleón logró regresar a Polonia con tan sólo 10,000 hombres. También se muestran los movimientos de las tropas auxiliaries, que buscaban proteger por atrás y por la delantera mientras la armada avanzaba hacia Moscú. La gráfica de Minard cuenta una historia rica y cohesiva, coherente con datos multivariados y con los hechos históricos, y que puede ser más ilustrativa que tan sólo representar un número rebotando a lo largo del tiempo. Referencias "],["apéndice-transformaciones.html", "Apéndice: Transformaciones", " Apéndice: Transformaciones En ocasiones es conveniente transformar los datos para el análisis, el objetivo de los ajustes es simplificar la interpretación y el análisis al eliminar fuentes de variación conocidas, también es común realizan transformaciones para simplificar los patrones. Algunos ejemplos donde eliminamos efectos conocidos: Cuando analizamos el precio de venta de las casas podemos eliminar la variación debida al tamaño de las casas al pasar de precio de venta a precio de venta por metro cuadrado. De manera similar al analizar las propinas puede convenir considerar la propina como porcentaje de la cuenta. En series de tiempo cuando los datos están relacionados con el tamaño de la población podemos ajustar a mediciones per capita (en series de tiempo PIB). También es común ajustar por inflación, o poner cantidades monetarias en valor presente. mex_dat <- global_economy |> filter(Code == "MEX") pib <- ggplot(mex_dat, aes(x = Year, y = GDP / 1e6)) + geom_line() pib_pc <- ggplot(mex_dat, aes(x = Year, y = GDP / Population)) + geom_line() pib / pib_pc Adicionalmente podemos recurrir a otras transformaciones matemáticas (e.g. logaritmo, raíz cuadrada) que simplifiquen el patrón en los datos y la interpretación. Veamos un ejemplo donde es apropiado la transformación logaritmo. Usamos los datos Animals con información de peso corporal promedio y peso cerebral promedio para 28 especies. Buscamos entender la relación entre estas dos variables, e inspeccionar que especies se desvían (residuales) del esperado. Comenzamos con un diagrama de dispersión usando las unidades originales animals_tbl <- as_tibble(Animals, rownames = "animal") p1 <- ggplot(animals_tbl, aes(x = body, y = brain, label = animal)) + geom_point() + labs(subtitle = "Unidades originales") p2 <- ggplot(animals_tbl, aes(x = body, y = brain, label = animal)) + geom_point() + xlim(0, 500) + ylim(0, 1500) + geom_text_repel() + labs(subtitle = "Unidades originales, eliminando 'grandes'") (p1 + p2) Incluso cuando nos limitamos a especies de menos de 500 kg de masa corporal, la relación no es fácil de descrubir.En la suguiente gráfica hacemos la transformación logaritmo y obtenemos una gráfica más fácil de leer, además los datos se modelarán con más facilidad. p3 <- ggplot(animals_tbl, aes(x = log(body), y = log(brain), label = animal)) + geom_smooth(method = "lm", se = FALSE, color = "red") + geom_point() + geom_text_repel() + stat_poly_eq(use_label(c("eq"))) p3 ## `geom_smooth()` using formula = 'y ~ x' La transformación logaritmo tiene también ventajas en interpretación, para diferencias chicas en escala log, las diferencias corresponden a diferencias porcentuales en la escala original, por ejempo consideremos la diferencia entre el peso en escala log de humano y borrego: 4.13 - 4.02 = 0.11. Confirmamos que el humano es aproximadamente 11% más pesado que el borrego en la escala original: 62/55.5 - 1 = 0.12 animals_tbl <- animals_tbl |> mutate(log_body = log(body), log_brain = log(brain)) animals_tbl |> filter(animal == "Human" | animal == "Sheep") |> arrange(body) |> gt::gt() |> gt::fmt_number() #ufmafyhycy table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #ufmafyhycy thead, #ufmafyhycy tbody, #ufmafyhycy tfoot, #ufmafyhycy tr, #ufmafyhycy td, #ufmafyhycy th { border-style: none; } #ufmafyhycy p { margin: 0; padding: 0; } #ufmafyhycy .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #ufmafyhycy .gt_caption { padding-top: 4px; padding-bottom: 4px; } #ufmafyhycy .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #ufmafyhycy .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #ufmafyhycy .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #ufmafyhycy .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ufmafyhycy .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #ufmafyhycy .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #ufmafyhycy .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #ufmafyhycy .gt_column_spanner_outer:first-child { padding-left: 0; } #ufmafyhycy .gt_column_spanner_outer:last-child { padding-right: 0; } #ufmafyhycy .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #ufmafyhycy .gt_spanner_row { border-bottom-style: hidden; } #ufmafyhycy .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #ufmafyhycy .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #ufmafyhycy .gt_from_md > :first-child { margin-top: 0; } #ufmafyhycy .gt_from_md > :last-child { margin-bottom: 0; } #ufmafyhycy .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #ufmafyhycy .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #ufmafyhycy .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #ufmafyhycy .gt_row_group_first td { border-top-width: 2px; } #ufmafyhycy .gt_row_group_first th { border-top-width: 2px; } #ufmafyhycy .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #ufmafyhycy .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #ufmafyhycy .gt_first_summary_row.thick { border-top-width: 2px; } #ufmafyhycy .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ufmafyhycy .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #ufmafyhycy .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #ufmafyhycy .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #ufmafyhycy .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #ufmafyhycy .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ufmafyhycy .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #ufmafyhycy .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #ufmafyhycy .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #ufmafyhycy .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #ufmafyhycy .gt_left { text-align: left; } #ufmafyhycy .gt_center { text-align: center; } #ufmafyhycy .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #ufmafyhycy .gt_font_normal { font-weight: normal; } #ufmafyhycy .gt_font_bold { font-weight: bold; } #ufmafyhycy .gt_font_italic { font-style: italic; } #ufmafyhycy .gt_super { font-size: 65%; } #ufmafyhycy .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #ufmafyhycy .gt_asterisk { font-size: 100%; vertical-align: 0; } #ufmafyhycy .gt_indent_1 { text-indent: 5px; } #ufmafyhycy .gt_indent_2 { text-indent: 10px; } #ufmafyhycy .gt_indent_3 { text-indent: 15px; } #ufmafyhycy .gt_indent_4 { text-indent: 20px; } #ufmafyhycy .gt_indent_5 { text-indent: 25px; } #ufmafyhycy .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #ufmafyhycy div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } animal body brain log_body log_brain Sheep 55.50 175.00 4.02 5.16 Human 62.00 1,320.00 4.13 7.19 Y podemos usarlo también para interpretar la recta de referencia \\(y = 2.55 + 0.5 x\\) , para cambios chicos: Un incremento de 10% en masa total corresponde en un incremento de 5% en masa cerebral. El coeficiente de la regresión log-log, en nuestro ejemplo 0.5, es la elasticidad y es un concepto común en economía. Justificación Para entender la interpretación como cambio porcentual recordemos primero que la representación con series de Taylor de la función exponencial es: \\[e^x = \\sum_{n=0}^\\infty \\frac{x^n}{n!}\\] Más aún podemos tener una aproximación usando polinomios de Taylor, en el caso de la exponencial el \\(k\\)-ésimo polinomio de Taylor está dado por: \\[e^\\delta \\approx 1 + \\delta + \\frac{1}{2!}\\delta^2 + \\dots + \\frac{1}{k!}\\delta^k\\] y si \\(\\delta\\) es chica (digamos menor a 0.15), entonces la aproximación de primer grado es razonable y tenemos: \\[Ae^{\\delta} \\approx A(1+\\delta)\\] dat <- tibble(delta = seq(0, 1, 0.01), exp_delta = exp(delta), uno_mas_delta = 1 + delta) ggplot(dat, aes(x = uno_mas_delta, y = exp_delta)) + geom_line() + geom_abline(color = "red") + annotate("text", x = 1.20, y = 1.18, label = "y = x", color = "red", size = 6) "],["referencias.html", "Referencias", " Referencias "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] +[["index.html", "Fundamentos de Estadística con Remuestreo Información del curso", " Fundamentos de Estadística con Remuestreo Teresa Ortiz, Felipe González, Alfredo Garbuno Información del curso Notas del curso Fundamentos de Estadística con Remuestreo, este curso busca explicar los principios básicos de la estadística y su papel en el análisis de datos. Nuestro punto de vista es uno de fundamentos, con menos énfasis en recetas o técnicas particulares. Ligas Notas: https://tereom.github.io/fundamentos-2024/ Repositorio con material: https://github.com/tereom/fundamentos-2024 Correo: teresa.ortiz.mancera@gmail.com Zoom clase (miércoles 4:00-7:00 pm): https://itam.zoom.us/j/92745909276 Zoom sesiones de dudas (lunes de 5:30-6:30 pm): https://itam.zoom.us/j/92518922348 Canvas: https://itam.instructure.com/courses/13328 x Este trabajo está bajo una Licencia Creative Commons Atribución 4.0 Internacional. "],["temario.html", "Temario Plan semanal Evaluación", " Temario Plan semanal Datos y análisis exploratorio Referencias: (W. S. Cleveland 1994), (Chihara and Hesterberg 2018) Visualización1 Análisis exploratorio Tipos de datos o estudios Muestras diseñadas y muestras naturales Experimentos y datos observacionales Introducción a Pruebas de Hipótesis Referencias: (Chihara and Hesterberg 2018) Introducción a pruebas de hipótesis. Pruebas de permutaciones Muestras pareadas y otros ejemplos Estimación y distribución de muestreo Referencias: (Chihara and Hesterberg 2018), (Tim C. Hesterberg 2015b) Estimadores y su distribución de muestreo Repaso de probabilidad y Teorema del límite central Introducción a estimación por intervalos Referencias: (Chihara and Hesterberg 2018), (Efron and Tibshirani 1993), (Tim C. Hesterberg 2015b) El método plugin y el boostrap Bootstrap e Intervalos de confianza. Ejemplos. Estimación Referencias: (Chihara and Hesterberg 2018), (Wasserman 2013) Estimación por máxima verosimilitud Ejemplos de estimación por máxima verosimilitud y Bootstrap paramétrico Propiedades de estimadores de máxima verosimilitud Más de pruebas de hipótesis Referencias: (Chihara and Hesterberg 2018), (Wasserman 2013) Pruebas de hipótesis para medias y proporciones: una y dos poblaciones. Introducción a inferencia bayesiana Referencias: (Kruschke 2015) Introducción a inferencia bayesiana Ejemplos de distribuciones conjugadas Introducción a métodos computacionales básicos: Muestreadores Metrópolis y Gibbs Ejemplos de inferencia bayesiana en Stan Evaluación Se evaluará mediante tareas semanales y dos exámenes: Tareas semanales (20%) Examen parcial en clase y a casa (40%) Examen final a casa (40%) Referencias "],["análisis-exploratorio.html", "Sección 1 Análisis exploratorio El papel de la exploración en el análisis de datos Preguntas y datos Algunos conceptos básicos Ejemplos Suavizamiento loess Caso de estudio: nacimientos en México", " Sección 1 Análisis exploratorio “Exploratory data analysis can never be the whole story, but nothing else can serve as the foundation stone –as the first step.” — John Tukey El papel de la exploración en el análisis de datos El estándar científico para contestar preguntas o tomar decisiones es uno que se basa en el análisis de datos. Es decir, en primer lugar se deben reunir todos los datos que puedan contener o sugerir alguna guía para entender mejor la pregunta o la decisión a la que nos enfrentamos. Esta recopilación de datos —que pueden ser cualitativos, cuantitativos, o una mezcla de los dos— debe entonces ser analizada para extraer información relevante para nuestro problema. En análisis de datos existen dos distintos tipos de trabajo: El trabajo exploratorio o de detective: ¿cuáles son los aspectos importantes de estos datos? ¿qué indicaciones generales muestran los datos? ¿qué tareas de análisis debemos empezar haciendo? ¿cuáles son los caminos generales para formular con precisión y contestar algunas preguntas que nos interesen? El trabajo inferencial, confirmatorio, o de juez: ¿cómo evaluar el peso de la evidencia de los descubrimientos del paso anterior? ¿qué tan bien soportadas están las respuestas y conclusiones por nuestro conjunto de datos? Preguntas y datos Cuando observamos un conjunto de datos, independientemente de su tamaño, el paso inicial más importante es entender bajo qué proceso se generan los datos. A grandes rasgos, cuanto más sepamos de este proceso, mejor podemos contestar preguntas de interés. En muchos casos, tendremos que hacer algunos supuestos de cómo se generan estos datos para dar respuestas (condicionales a esos supuestos). Algunos conceptos básicos Empezamos explicando algunas ideas que no serán útiles más adelante. El primer concepto se refiere a entender cómo se distribuyen los datos a los largo de su escala de medición. Comenzamos con un ejemplo: los siguientes datos fueron registrados en un restaurante durante cuatro días consecutivos. library(tidyverse) library(patchwork) # organizar gráficas library(gt) # formatear tablas source("R/funciones_auxiliares.R") # usamos los datos tips del paquete reshape2 propinas <- read_csv("./data/propinas.csv") Y vemos una muestra slice_sample(propinas, n = 10) |> gt() #qcaxfnkqcl table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #qcaxfnkqcl thead, #qcaxfnkqcl tbody, #qcaxfnkqcl tfoot, #qcaxfnkqcl tr, #qcaxfnkqcl td, #qcaxfnkqcl th { border-style: none; } #qcaxfnkqcl p { margin: 0; padding: 0; } #qcaxfnkqcl .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #qcaxfnkqcl .gt_caption { padding-top: 4px; padding-bottom: 4px; } #qcaxfnkqcl .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #qcaxfnkqcl .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #qcaxfnkqcl .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #qcaxfnkqcl .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #qcaxfnkqcl .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #qcaxfnkqcl .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #qcaxfnkqcl .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #qcaxfnkqcl .gt_column_spanner_outer:first-child { padding-left: 0; } #qcaxfnkqcl .gt_column_spanner_outer:last-child { padding-right: 0; } #qcaxfnkqcl .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #qcaxfnkqcl .gt_spanner_row { border-bottom-style: hidden; } #qcaxfnkqcl .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #qcaxfnkqcl .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #qcaxfnkqcl .gt_from_md > :first-child { margin-top: 0; } #qcaxfnkqcl .gt_from_md > :last-child { margin-bottom: 0; } #qcaxfnkqcl .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #qcaxfnkqcl .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #qcaxfnkqcl .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #qcaxfnkqcl .gt_row_group_first td { border-top-width: 2px; } #qcaxfnkqcl .gt_row_group_first th { border-top-width: 2px; } #qcaxfnkqcl .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #qcaxfnkqcl .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #qcaxfnkqcl .gt_first_summary_row.thick { border-top-width: 2px; } #qcaxfnkqcl .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #qcaxfnkqcl .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #qcaxfnkqcl .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #qcaxfnkqcl .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #qcaxfnkqcl .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #qcaxfnkqcl .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #qcaxfnkqcl .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #qcaxfnkqcl .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #qcaxfnkqcl .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #qcaxfnkqcl .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #qcaxfnkqcl .gt_left { text-align: left; } #qcaxfnkqcl .gt_center { text-align: center; } #qcaxfnkqcl .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #qcaxfnkqcl .gt_font_normal { font-weight: normal; } #qcaxfnkqcl .gt_font_bold { font-weight: bold; } #qcaxfnkqcl .gt_font_italic { font-style: italic; } #qcaxfnkqcl .gt_super { font-size: 65%; } #qcaxfnkqcl .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #qcaxfnkqcl .gt_asterisk { font-size: 100%; vertical-align: 0; } #qcaxfnkqcl .gt_indent_1 { text-indent: 5px; } #qcaxfnkqcl .gt_indent_2 { text-indent: 10px; } #qcaxfnkqcl .gt_indent_3 { text-indent: 15px; } #qcaxfnkqcl .gt_indent_4 { text-indent: 20px; } #qcaxfnkqcl .gt_indent_5 { text-indent: 25px; } #qcaxfnkqcl .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #qcaxfnkqcl div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } cuenta_total propina fumador dia momento num_personas 15.81 3.16 Si Sab Cena 2 16.47 3.23 Si Jue Comida 3 38.01 3.00 Si Sab Cena 4 3.07 1.00 Si Sab Cena 1 12.46 1.50 No Vie Cena 2 8.52 1.48 No Jue Comida 2 11.61 3.39 No Sab Cena 2 50.81 10.00 Si Sab Cena 3 38.07 4.00 No Dom Cena 3 15.06 3.00 No Sab Cena 2 Aquí la unidad de observación es una cuenta particular. Tenemos tres mediciones numéricas de cada cuenta: cúanto fue la cuenta total, la propina, y el número de personas asociadas a la cuenta. Los datos están separados según se fumó o no en la mesa, y temporalmente en dos partes: el día (Jueves, Viernes, Sábado o Domingo), cada uno separado por Cena y Comida. Denotamos por \\(x\\) el valor de medición de una unidad de observación. Usualmente utilizamos sub-índices para identificar entre diferentes puntos de datos (observaciones), por ejemplo, \\(x_n\\) para la \\(n-\\)ésima observación. De tal forma que una colección de \\(N\\) observaciones la escribimos como \\[\\begin{align} \\{x_1, \\ldots, x_N\\}. \\end{align}\\] El primer tipo de comparaciones que nos interesa hacer es para una medición: ¿Varían mucho o poco los datos de un tipo de medición? ¿Cuáles son valores típicos o centrales? ¿Existen valores atípicos? Supongamos entonces que consideramos simplemente la variable de cuenta_total. Podemos comenzar por ordenar los datos, y ver cuáles datos están en los extremos y cuáles están en los lugares centrales: propinas <- propinas |> mutate(orden_cuenta = rank(cuenta_total, ties.method = "first"), f = (orden_cuenta - 0.5) / n()) cuenta <- propinas |> select(orden_cuenta, f, cuenta_total) |> arrange(f) bind_rows(head(cuenta), tail(cuenta)) |> gt() |> fmt_number(columns = f, decimals = 3) #phufidpmfh table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #phufidpmfh thead, #phufidpmfh tbody, #phufidpmfh tfoot, #phufidpmfh tr, #phufidpmfh td, #phufidpmfh th { border-style: none; } #phufidpmfh p { margin: 0; padding: 0; } #phufidpmfh .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #phufidpmfh .gt_caption { padding-top: 4px; padding-bottom: 4px; } #phufidpmfh .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #phufidpmfh .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #phufidpmfh .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #phufidpmfh .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #phufidpmfh .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #phufidpmfh .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #phufidpmfh .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #phufidpmfh .gt_column_spanner_outer:first-child { padding-left: 0; } #phufidpmfh .gt_column_spanner_outer:last-child { padding-right: 0; } #phufidpmfh .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #phufidpmfh .gt_spanner_row { border-bottom-style: hidden; } #phufidpmfh .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #phufidpmfh .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #phufidpmfh .gt_from_md > :first-child { margin-top: 0; } #phufidpmfh .gt_from_md > :last-child { margin-bottom: 0; } #phufidpmfh .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #phufidpmfh .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #phufidpmfh .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #phufidpmfh .gt_row_group_first td { border-top-width: 2px; } #phufidpmfh .gt_row_group_first th { border-top-width: 2px; } #phufidpmfh .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #phufidpmfh .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #phufidpmfh .gt_first_summary_row.thick { border-top-width: 2px; } #phufidpmfh .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #phufidpmfh .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #phufidpmfh .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #phufidpmfh .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #phufidpmfh .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #phufidpmfh .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #phufidpmfh .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #phufidpmfh .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #phufidpmfh .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #phufidpmfh .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #phufidpmfh .gt_left { text-align: left; } #phufidpmfh .gt_center { text-align: center; } #phufidpmfh .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #phufidpmfh .gt_font_normal { font-weight: normal; } #phufidpmfh .gt_font_bold { font-weight: bold; } #phufidpmfh .gt_font_italic { font-style: italic; } #phufidpmfh .gt_super { font-size: 65%; } #phufidpmfh .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #phufidpmfh .gt_asterisk { font-size: 100%; vertical-align: 0; } #phufidpmfh .gt_indent_1 { text-indent: 5px; } #phufidpmfh .gt_indent_2 { text-indent: 10px; } #phufidpmfh .gt_indent_3 { text-indent: 15px; } #phufidpmfh .gt_indent_4 { text-indent: 20px; } #phufidpmfh .gt_indent_5 { text-indent: 25px; } #phufidpmfh .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #phufidpmfh div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } orden_cuenta f cuenta_total 1 0.002 3.07 2 0.006 5.75 3 0.010 7.25 4 0.014 7.25 5 0.018 7.51 6 0.023 7.56 239 0.977 44.30 240 0.982 45.35 241 0.986 48.17 242 0.990 48.27 243 0.994 48.33 244 0.998 50.81 También podemos graficar los datos en orden, interpolando valores consecutivos. A esta función le llamamos la función de cuantiles para la variable cuenta_total. Nos sirve para comparar directamente los distintos valores que observamos los datos según el orden que ocupan. En particular, podemos estudiar la dispersión y valores centrales de los datos observados: El rango de datos va de unos 3 dólares hasta 50 dólares Los valores centrales, por ejemplo el 50% de los valores más centrales, están entre unos 13 y 25 dólares. El valor que divide en dos mitades iguales a los datos es de alrededor de 18 dólares. El cuantil \\(f\\), que denotamos por \\(q(f)\\) es valor a lo largo de la escala de medición de los datos tal que aproximadamente una fracción \\(f\\) de los datos son menores o iguales a \\(q(f)\\). Al cuantil \\(f=0.5\\) le llamamos la mediana. A los cuantiles \\(f=0.25\\) y \\(f=0.75\\) les llamamos cuartiles inferior y superior. En nuestro ejemplo: Los valores centrales —del cuantil 0.25 al 0.75, por decir un ejemplo— están entre unos 13 y 25 dólares. Estos dos cuantiles se llaman cuartil inferior y cuartil superior respectivamente El cuantil 0.5 (o también conocido como mediana) está alrededor de 18 dólares. Éste último puede ser utilizado para dar un valor central de la distribución de valores para cuenta_total. Asimismo podemos dar resúmenes más refinados si es necesario. Por ejemplo, podemos reportar que: El cuantil 0.95 es de unos 35 dólares — sólo 5% de las cuentas son de más de 35 dólares El cuantil 0.05 es de unos 8 dólares — sólo 5% de las cuentas son de 8 dólares o menos. Finalmente, la forma de la gráfica se interpreta usando su pendiente (tasa de cambio) haciendo comparaciones en diferentes partes de la gráfica: La distribución de valores tiene asimetría: el 10% de las cuentas más altas tiene considerablemente más dispersión que el 10% de las cuentas más bajas. Entre los cuantiles 0.2 y 0.7 es donde existe mayor densidad de datos: la pendiente (tasa de cambio) es baja, lo que significa que al avanzar en los valores observados, los cuantiles (el porcentaje de casos) aumenta rápidamente. Cuando la pendiente alta, quiere decir que los datos tienen más dispersión local o están más separados. Observación: Hay varias maneras de definir los cuantiles (ver (William S. Cleveland 1993)): Supongamos que queremos definir \\(q(f)\\), y denotamos los datos ordenados como \\(x_{(1)}, x_{(2)}, \\ldots, x_{(N)}\\), de forma que \\(x_{(1)}\\) es el dato más chico y \\(x_{(N)}\\) es el dato más grande. Para cada \\(x_{(i)}\\) definimos \\[f_i = i / N\\] entonces definimos el cuantil \\(q(f_i)=x_{(i)}\\). Para cualquier \\(f\\) entre 0 y 1, podemos definir \\(q(f)\\) como sigue: si \\(f\\) está entre \\(f_i\\) y \\(f_{i+1}\\) interpolamos linealmente los valores correspondientes \\(x_{(i)}\\) y \\(x_{(i+1)}\\). En la práctica, es más conveniente usar \\(f_i= \\frac{i - 0.5}{N}\\). La gráfica de cuantiles no cambia mucho comparado con la difinición anterior, y esto nos permitirá comparar de mejor manera con distribuciones teóricas que no tienen definido su cuantil 0 y el 1, pues tienen soporte en los números reales (como la distribución normal, por ejemplo). Asociada a la función de cuantiles \\(q\\) tenemos la distribución acumulada empírica de los datos, que es aproximadamente inversa de la función de cuantiles, y se define como: \\[\\hat{F}(x) = i/N\\] si \\(x_{(i)} \\leq x < x_{(i+1)}\\). Nótese que \\(\\hat{F}(q(f_i)) = i/N = f_i\\) (demuéstralo). acum_cuenta <- ecdf(cuenta$cuenta_total) cuenta <- cuenta |> mutate(dea_cuenta_total = acum_cuenta(cuenta_total)) g_acum <- ggplot(cuenta, aes(x = cuenta_total, y = dea_cuenta_total)) + geom_point() + labs(subtitle = "Distribución acum empírica de cuenta total", x = "") g_cuantiles + g_acum La función de distribución acumulada empírica es otra forma de graficar la dispersión de los datos. En su gráfica vemos que proporción de los datos que son iguales o están por debajo de cada valor en el eje horizontal. Nota: En análisis de datos, es más frecuente utilizar la función de cuantiles pues existen versiones más generales que son útiles, por ejemplo, para evaluar ajuste de modelos probabilísticos En la teoría, generalmente es más común utilizar la fda empírica, que tiene una única definición que veremos coincide con definiciones teóricas. Histogramas En algunos casos, es más natural hacer un histograma, donde dividimos el rango de la variable en cubetas o intervalos (en este caso de igual longitud), y graficamos por medio de barras cuántos datos caen en cada cubeta: Es una gráfica más popular, pero perdemos cierto nivel de detalle, y distintas particiones resaltan distintos aspectos de los datos. ¿Cómo se ve la gráfica de cuantiles de las propinas? ¿Cómo crees que esta gráfica se compara con distintos histogramas? g_1 <- ggplot(propinas, aes(sample = propina)) + geom_qq(distribution = stats::qunif) + labs(x = "f", y = "propina") g_1 Finalmente, una gráfica más compacta que resume la gráfica de cuantiles o el histograma es el diagrama de caja y brazos. Mostramos dos versiones, la clásica de Tukey (T) y otra versión menos común de Spear/Tufte (ST): library(ggthemes) cuartiles <- quantile(cuenta$cuenta_total) cuartiles |> round(2) ## 0% 25% 50% 75% 100% ## 3.07 13.35 17.80 24.13 50.81 g_1 <- ggplot(cuenta, aes(x = f, y = cuenta_total)) + labs(subtitle = "Gráfica de cuantiles: Cuenta total") + geom_hline(yintercept = cuartiles[2:4], colour = "gray") + geom_point(alpha = 0.5) + geom_line() g_2 <- ggplot(cuenta, aes(x = factor("ST", levels = "ST"), y = cuenta_total)) + geom_tufteboxplot() + labs(subtitle = "", x = "", y = "") g_3 <- ggplot(cuenta, aes(x = factor("T"), y = cuenta_total)) + geom_boxplot() + labs(subtitle = "", x = "", y = "") g_4 <- ggplot(cuenta, aes(x = factor("P"), y = cuenta_total)) + geom_jitter(height = 0, width =0.2, alpha = 0.5) + labs(subtitle = "", x = "", y = "") g_5 <- ggplot(cuenta, aes(x = factor("V"), y = cuenta_total)) + geom_violin() + labs(subtitle = "", x = "", y = "") g_1 + g_2 + g_3 + g_4 + plot_layout(widths = c(8, 2, 2, 2)) El diagrama de abajo explica los elementos de la versión típica del diagrama de caja y brazos (boxplot). RIC se refiere al Rango Intercuantílico, definido por la diferencia entre los cuantiles 25% y 75%. Figura: Jumanbar / CC BY-SA Ventajas en el análisis inicial En un principio del análisis, estos resúmenes (cuantiles) pueden ser más útiles que utilizar medias y varianzas, por ejemplo. La razón es que los cuantiles: Son cantidades más fácilmente interpretables Los cuantiles centrales son más resistentes a valores atípicos que medias o varianzas Permiten identificar valores extremos Es fácil comparar cuantiles de distintos bonches de datos en la misma escala Nota: Existen diferentes definiciones para calcular cuantiles de una muestra de datos, puedes leer más en este artículo. Media y desviación estándar Las medidas más comunes de localización y dispersión para un conjunto de datos son la media muestral y la desviación estándar muestral. En general, no son muy apropiadas para iniciar el análisis exploratorio, pues: Son medidas más difíciles de interpretar y explicar que los cuantiles. En este sentido, son medidas especializadas. Por ejemplo, compara una explicación intuitiva de la mediana contra una explicación intuitiva de la media. No son resistentes a valores atípicos. Su falta de resistencia los vuelve poco útiles en las primeras etapas de limpieza y descripción y en resúmenes deficientes para distribuciones irregulares (con colas largas por ejemplo). La media, o promedio, se denota por \\(\\bar x\\) y se define como \\[\\begin{align} \\bar x = \\frac1N \\sum_{n = 1}^N x_n. \\end{align}\\] La desviación estándar muestral se define como \\[\\begin{align} \\text{std}(x) = \\sqrt{\\frac1{N-1} \\sum_{n = 1}^N (x_n - \\bar x)^2}. \\end{align}\\] Observación: Si \\(N\\) no es muy chica, no importa mucho si dividimos por \\(N\\) o por \\(N-1\\) en la fórmula de la desviación estándar. La razón de que típicamente se usa \\(N-1\\) la veremos más adelante, en la parte de estimación. Por otro lado, ventajas de estas medidas de centralidad y dispersión son: La media y desviación estándar son computacionalmente convenientes. Por lo tanto regresaremos a estas medidas una vez que estudiemos modelos de probabilidad básicos. En muchas ocasiones conviene usar estas medidas pues permite hacer comparaciones históricas o tradicionales —pues análisis anteriores pudieran estar basados en éstas. Considera el caso de tener \\(N\\) observaciones y asume que ya tienes calculado el promedio para dichas observaciones. Este promedio lo denotaremos por \\(\\bar x_N\\). Ahora, considera que has obtenido \\(M\\) observaciones más. Escribe una fórmula recursiva para la media del conjunto total de datos \\(\\bar x_{N+M}\\) en función de lo que ya tenías precalculado \\(\\bar x_N.\\) ¿En qué situaciones esta propiedad puede ser conveniente? Ejemplos Precios de casas En este ejemplo consideremos los datos de precios de ventas de la ciudad de Ames, Iowa. En particular nos interesa entender la variación del precio de las casas. Por este motivo calculamos los cuantiles que corresponden al 25%, 50% y 75% (cuartiles), así como el mínimo y máximo de los precios de las casas: quantile(casas |> pull(precio_miles)) ## 0% 25% 50% 75% 100% ## 37.9 132.0 165.0 215.0 755.0 Comprueba que el mínimo y máximo están asociados a los cuantiles 0% y 100%, respectivamente. Una posible comparación es considerar los precios y sus variación en función de zona de la ciudad en que se encuentra una vivienda. Podemos usar diagramas de caja y brazos para hacer una comparación burda de los precios en distintas zonas de la ciudad: ggplot(casas, aes(x = nombre_zona, y = precio_miles)) + geom_boxplot() + coord_flip() La primera pregunta que nos hacemos es cómo pueden variar las características de las casas dentro de cada zona. Para esto, podemos considerar el área de las casas. En lugar de graficar el precio, graficamos el precio por metro cuadrado, por ejemplo: ggplot(casas, aes(x = nombre_zona, y = precio_m2)) + geom_boxplot() + coord_flip() Podemos cuantificar la variación que observamos de zona a zona y la variación que hay dentro de cada una de las zonas. Una primera aproximación es observar las variación del precio al calcular la mediana dentro de cada zona, y después cuantificar por medio de cuantiles cómo varía la mediana entre zonas: casas |> group_by(nombre_zona) |> summarise(mediana_zona = median(precio_m2), .groups = "drop") |> arrange(mediana_zona) |> pull(mediana_zona) |> quantile() |> round() ## 0% 25% 50% 75% 100% ## 963 1219 1298 1420 1725 Por otro lado, las variaciones con respecto a las medianas dentro de cada zona, por grupo, se resume como: quantile(casas |> group_by(nombre_zona) |> mutate(residual = precio_m2 - median(precio_m2)) |> pull(residual)) |> round() ## 0% 25% 50% 75% 100% ## -765 -166 0 172 1314 Nótese que este último paso tiene sentido pues la variación dentro de las zonas, en términos de precio por metro cuadrado, es similar. Esto no lo podríamos haber hecho de manera efectiva si se hubiera utilizado el precio de las casas sin ajustar por su tamaño. Podemos resumir este primer análisis con un par de gráficas de cuantiles (William S. Cleveland (1993)): mediana <- median(casas$precio_m2) resumen <- casas |> select(nombre_zona, precio_m2) |> group_by(nombre_zona) |> mutate(mediana_zona = median(precio_m2)) |> mutate(residual = precio_m2 - mediana_zona) |> ungroup() |> mutate(mediana_zona = mediana_zona - mediana) |> select(nombre_zona, mediana_zona, residual) |> pivot_longer(mediana_zona:residual, names_to = "tipo", values_to = "valor") ggplot(resumen, aes(sample = valor)) + geom_qq(distribution = stats::qunif) + facet_wrap(~ tipo) + ylab("Precio por m2") + xlab("f") + labs(subtitle = "Precio por m2 por zona", caption = paste0("Mediana total de ", round(mediana))) Vemos que la mayor parte de la variación del precio por metro cuadrado ocurre dentro de cada zona, una vez que controlamos por el tamaño de las casas. La variación dentro de cada zona es aproximadamente simétrica, aunque la cola derecha es ligeramente más larga con algunos valores extremos. Podemos seguir con otro indicador importante: la calificación de calidad de los terminados de las casas. Como primer intento podríamos hacer: Lo que indica que las calificaciones de calidad están distribuidas de manera muy distinta a lo largo de las zonas, y que probablemente no va ser simple desentrañar qué variación del precio se debe a la zona y cuál se debe a la calidad. Prueba Enlace Consideremos la prueba Enlace (2011) de matemáticas para primarias. Una primera pregunta que alguien podría hacerse es: ¿cuáles escuelas son mejores en este rubro, las privadas o las públicas? enlace_tbl <- enlace |> group_by(tipo) |> summarise(n_escuelas = n(), cuantiles = list(cuantil(mate_6, c(0.05, 0.25, 0.5, 0.75, 0.95)))) |> unnest(cols = cuantiles) |> mutate(valor = round(valor)) enlace_tbl |> spread(cuantil, valor) |> gt() #sykxxonvyi table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #sykxxonvyi thead, #sykxxonvyi tbody, #sykxxonvyi tfoot, #sykxxonvyi tr, #sykxxonvyi td, #sykxxonvyi th { border-style: none; } #sykxxonvyi p { margin: 0; padding: 0; } #sykxxonvyi .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #sykxxonvyi .gt_caption { padding-top: 4px; padding-bottom: 4px; } #sykxxonvyi .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #sykxxonvyi .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #sykxxonvyi .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #sykxxonvyi .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #sykxxonvyi .gt_column_spanner_outer:first-child { padding-left: 0; } #sykxxonvyi .gt_column_spanner_outer:last-child { padding-right: 0; } #sykxxonvyi .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #sykxxonvyi .gt_spanner_row { border-bottom-style: hidden; } #sykxxonvyi .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #sykxxonvyi .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #sykxxonvyi .gt_from_md > :first-child { margin-top: 0; } #sykxxonvyi .gt_from_md > :last-child { margin-bottom: 0; } #sykxxonvyi .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #sykxxonvyi .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #sykxxonvyi .gt_row_group_first td { border-top-width: 2px; } #sykxxonvyi .gt_row_group_first th { border-top-width: 2px; } #sykxxonvyi .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #sykxxonvyi .gt_first_summary_row.thick { border-top-width: 2px; } #sykxxonvyi .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #sykxxonvyi .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #sykxxonvyi .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sykxxonvyi .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sykxxonvyi .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sykxxonvyi .gt_left { text-align: left; } #sykxxonvyi .gt_center { text-align: center; } #sykxxonvyi .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #sykxxonvyi .gt_font_normal { font-weight: normal; } #sykxxonvyi .gt_font_bold { font-weight: bold; } #sykxxonvyi .gt_font_italic { font-style: italic; } #sykxxonvyi .gt_super { font-size: 65%; } #sykxxonvyi .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #sykxxonvyi .gt_asterisk { font-size: 100%; vertical-align: 0; } #sykxxonvyi .gt_indent_1 { text-indent: 5px; } #sykxxonvyi .gt_indent_2 { text-indent: 10px; } #sykxxonvyi .gt_indent_3 { text-indent: 15px; } #sykxxonvyi .gt_indent_4 { text-indent: 20px; } #sykxxonvyi .gt_indent_5 { text-indent: 25px; } #sykxxonvyi .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #sykxxonvyi div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } tipo n_escuelas 0.05 0.25 0.5 0.75 0.95 Indígena/Conafe 13599 304 358 412 478 588 General 60166 380 454 502 548 631 Particular 6816 479 551 593 634 703 Para un análisis exploratorio podemos utilizar distintas gráficas. Por ejemplo, podemos utilizar nuevamente las gráficas de caja y brazos, así como graficar los percentiles. Nótese que en la gráfica 1 se utilizan los cuantiles 0.05, 0.25, 0.5, 0.75 y 0.95: ## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0. ## ℹ Please use `linewidth` instead. ## This warning is displayed once every 8 hours. ## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was ## generated. Se puede discutir qué tan apropiada es cada gráfica con el objetivo de realizar comparaciones. Sin duda, graficar más cuantiles es más útil para hacer comparaciones. Por ejemplo, en la Gráfica 1 podemos ver que la mediana de las escuelas generales está cercana al cuantil 5% de las escuelas particulares. Por otro lado, el diagrama de caja y brazos muestra también valores “atípicos”. Antes de contestar prematuramente la pregunta: ¿cuáles son las mejores escuelas? busquemos mejorar la interpretabilidad de nuestras comparaciones. Podemos comenzar por agregar, por ejemplo, el nivel del marginación del municipio donde se encuentra la escuela. Para este objetivo, podemos usar páneles (pequeños múltiplos útiles para hacer comparaciones) y graficar: Esta gráfica pone en contexto la pregunta inicial, y permite evidenciar la dificultad de contestarla. En particular: Señala que la pregunta no sólo debe concentarse en el tipo de “sistema”: pública, privada, etc. Por ejemplo, las escuelas públicas en zonas de marginación baja no tienen una distribución de calificaciones muy distinta a las privadas en zonas de marginación alta. El contexto de la escuela es importante. Debemos de pensar qué factores –por ejemplo, el entorno familiar de los estudiantes– puede resultar en comparaciones que favorecen a las escuelas privadas. Un ejemplo de esto es considerar si los estudiantes tienen que trabajar o no. A su vez, esto puede o no ser reflejo de la calidad del sistema educativo. Si esto es cierto, entonces la pregunta inicial es demasiado vaga y mal planteada. Quizá deberíamos intentar entender cuánto “aporta” cada escuela a cada estudiante, como medida de qué tan buena es cada escuela. Estados y calificaciones en SAT ¿Cómo se relaciona el gasto por alumno, a nivel estatal, con sus resultados académicos? Hay trabajo considerable en definir estos términos, pero supongamos que tenemos el siguiente conjunto de datos (Guber 1999), que son datos oficiales agregados por estado de Estados Unidos. Consideremos el subconjunto de variables sat, que es la calificación promedio de los alumnos en cada estado (para 1997) y expend, que es el gasto en miles de dólares por estudiante en (1994-1995). sat <- read_csv("data/sat.csv") sat_tbl <- sat |> select(state, expend, sat) |> gather(variable, valor, expend:sat) |> group_by(variable) |> summarise(cuantiles = list(cuantil(valor))) |> unnest(cols = c(cuantiles)) |> mutate(valor = round(valor, 1)) |> spread(cuantil, valor) sat_tbl |> gt() #trvhlcrcph table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #trvhlcrcph thead, #trvhlcrcph tbody, #trvhlcrcph tfoot, #trvhlcrcph tr, #trvhlcrcph td, #trvhlcrcph th { border-style: none; } #trvhlcrcph p { margin: 0; padding: 0; } #trvhlcrcph .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #trvhlcrcph .gt_caption { padding-top: 4px; padding-bottom: 4px; } #trvhlcrcph .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #trvhlcrcph .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #trvhlcrcph .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #trvhlcrcph .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #trvhlcrcph .gt_column_spanner_outer:first-child { padding-left: 0; } #trvhlcrcph .gt_column_spanner_outer:last-child { padding-right: 0; } #trvhlcrcph .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #trvhlcrcph .gt_spanner_row { border-bottom-style: hidden; } #trvhlcrcph .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #trvhlcrcph .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #trvhlcrcph .gt_from_md > :first-child { margin-top: 0; } #trvhlcrcph .gt_from_md > :last-child { margin-bottom: 0; } #trvhlcrcph .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #trvhlcrcph .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #trvhlcrcph .gt_row_group_first td { border-top-width: 2px; } #trvhlcrcph .gt_row_group_first th { border-top-width: 2px; } #trvhlcrcph .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #trvhlcrcph .gt_first_summary_row.thick { border-top-width: 2px; } #trvhlcrcph .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #trvhlcrcph .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #trvhlcrcph .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #trvhlcrcph .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #trvhlcrcph .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #trvhlcrcph .gt_left { text-align: left; } #trvhlcrcph .gt_center { text-align: center; } #trvhlcrcph .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #trvhlcrcph .gt_font_normal { font-weight: normal; } #trvhlcrcph .gt_font_bold { font-weight: bold; } #trvhlcrcph .gt_font_italic { font-style: italic; } #trvhlcrcph .gt_super { font-size: 65%; } #trvhlcrcph .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #trvhlcrcph .gt_asterisk { font-size: 100%; vertical-align: 0; } #trvhlcrcph .gt_indent_1 { text-indent: 5px; } #trvhlcrcph .gt_indent_2 { text-indent: 10px; } #trvhlcrcph .gt_indent_3 { text-indent: 15px; } #trvhlcrcph .gt_indent_4 { text-indent: 20px; } #trvhlcrcph .gt_indent_5 { text-indent: 25px; } #trvhlcrcph .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #trvhlcrcph div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } variable 0 0.25 0.5 0.75 1 expend 3.7 4.9 5.8 6.4 9.8 sat 844.0 897.2 945.5 1032.0 1107.0 Esta variación es considerable para promedios del SAT: el percentil 75 es alrededor de 1050 puntos, mientras que el percentil 25 corresponde a alrededor de 800. Igualmente, hay diferencias considerables de gasto por alumno (miles de dólares) a lo largo de los estados. Ahora hacemos nuestro primer ejercico de comparación: ¿Cómo se ven las calificaciones para estados en distintos niveles de gasto? Podemos usar una gráfica de dispersión: library(ggrepel) ggplot(sat, aes(x = expend, y = sat, label = state)) + geom_point(colour = "red", size = 2) + geom_text_repel(colour = "gray50") + xlab("Gasto por alumno (miles de dólares)") + ylab("Calificación promedio en SAT") Estas comparaciones no son de alta calidad, solo estamos usando 2 variables —que son muy pocas— y no hay mucho que podamos decir en cuanto explicación. Sin duda nos hace falta una imagen más completa. Necesitaríamos entender la correlación que existe entre las demás características de nuestras unidades de estudio. Las unidades que estamos comparando pueden diferir fuertemente en otras propiedades importantes (o dimensiones), lo cual no permite interpretar la gráfica de manera sencilla. Una variable que tenemos es el porcentaje de alumnos de cada estado que toma el SAT. Podemos agregar como sigue: ggplot(sat, aes(x = expend, y = math, label=state, colour = frac)) + geom_point() + geom_text_repel() + xlab("Gasto por alumno (miles de dólares)") + ylab("Calificación promedio en SAT") Esto nos permite entender por qué nuestra comparación inicial es relativamente pobre. Los estados con mejores resultados promedio en el SAT son aquellos donde una fracción relativamente baja de los estudiantes toma el examen. La diferencia es considerable. En este punto podemos hacer varias cosas. Una primera idea es intentar comparar estados más similares en cuanto a la población de alumnos que asiste. Podríamos hacer grupos como sigue: set.seed(991) k_medias_sat <- kmeans(sat |> select(frac), centers = 4, nstart = 100, iter.max = 100) sat$clase <- k_medias_sat$cluster sat <- sat |> group_by(clase) |> mutate(clase_media = round(mean(frac))) |> ungroup() |> mutate(clase_media = factor(clase_media)) sat <- sat |> mutate(rank_p = rank(frac, ties= "first") / length(frac)) ggplot(sat, aes(x = rank_p, y = frac, label = state, colour = clase_media)) + geom_point(size = 2) Estos resultados indican que es más probable que buenos alumnos decidan hacer el SAT. Lo interesante es que esto ocurre de manera diferente en cada estado. Por ejemplo, en algunos estados era más común otro examen: el ACT. Si hacemos clusters de estados según el % de alumnos, empezamos a ver otra historia. Para esto, ajustemos rectas de mínimos cuadrados como referencia: Esto da una imagen muy diferente a la que originalmente planteamos. Nota que dependiendo de cómo categorizamos, esta gráfica puede variar (puedes intentar con más o menos grupos, por ejemplo). Tablas de conteos Consideremos los siguientes datos de tomadores de té (del paquete FactoMineR (Lê et al. 2008)): tea <- read_csv("data/tea.csv") # nombres y códigos te <- tea |> select(how, price, sugar) |> rename(presentacion = how, precio = price, azucar = sugar) |> mutate( presentacion = fct_recode(presentacion, suelto = "unpackaged", bolsas = "tea bag", mixto = "tea bag+unpackaged"), precio = fct_recode(precio, marca = "p_branded", variable = "p_variable", barato = "p_cheap", marca_propia = "p_private label", desconocido = "p_unknown", fino = "p_upscale"), azucar = fct_recode(azucar, sin_azúcar = "No.sugar", con_azúcar = "sugar")) sample_n(te, 10) ## # A tibble: 10 × 3 ## presentacion precio azucar ## <fct> <fct> <fct> ## 1 bolsas marca sin_azúcar ## 2 bolsas variable sin_azúcar ## 3 bolsas marca con_azúcar ## 4 bolsas fino con_azúcar ## 5 mixto variable con_azúcar ## 6 mixto fino con_azúcar ## 7 bolsas marca sin_azúcar ## 8 bolsas fino sin_azúcar ## 9 mixto variable con_azúcar ## 10 mixto variable sin_azúcar Nos interesa ver qué personas compran té suelto, y de qué tipo. Empezamos por ver las proporciones que compran té según su empaque (en bolsita o suelto): precio <- te |> count(precio) |> mutate(prop = round(100 * n / sum(n))) |> select(-n) tipo <- te |> count(presentacion) |> mutate(pct = round(100 * n / sum(n))) tipo |> gt() #wiljiluquk table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #wiljiluquk thead, #wiljiluquk tbody, #wiljiluquk tfoot, #wiljiluquk tr, #wiljiluquk td, #wiljiluquk th { border-style: none; } #wiljiluquk p { margin: 0; padding: 0; } #wiljiluquk .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #wiljiluquk .gt_caption { padding-top: 4px; padding-bottom: 4px; } #wiljiluquk .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #wiljiluquk .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #wiljiluquk .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #wiljiluquk .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #wiljiluquk .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #wiljiluquk .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #wiljiluquk .gt_column_spanner_outer:first-child { padding-left: 0; } #wiljiluquk .gt_column_spanner_outer:last-child { padding-right: 0; } #wiljiluquk .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #wiljiluquk .gt_spanner_row { border-bottom-style: hidden; } #wiljiluquk .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #wiljiluquk .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #wiljiluquk .gt_from_md > :first-child { margin-top: 0; } #wiljiluquk .gt_from_md > :last-child { margin-bottom: 0; } #wiljiluquk .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #wiljiluquk .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #wiljiluquk .gt_row_group_first td { border-top-width: 2px; } #wiljiluquk .gt_row_group_first th { border-top-width: 2px; } #wiljiluquk .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #wiljiluquk .gt_first_summary_row.thick { border-top-width: 2px; } #wiljiluquk .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #wiljiluquk .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #wiljiluquk .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #wiljiluquk .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #wiljiluquk .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #wiljiluquk .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #wiljiluquk .gt_left { text-align: left; } #wiljiluquk .gt_center { text-align: center; } #wiljiluquk .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #wiljiluquk .gt_font_normal { font-weight: normal; } #wiljiluquk .gt_font_bold { font-weight: bold; } #wiljiluquk .gt_font_italic { font-style: italic; } #wiljiluquk .gt_super { font-size: 65%; } #wiljiluquk .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #wiljiluquk .gt_asterisk { font-size: 100%; vertical-align: 0; } #wiljiluquk .gt_indent_1 { text-indent: 5px; } #wiljiluquk .gt_indent_2 { text-indent: 10px; } #wiljiluquk .gt_indent_3 { text-indent: 15px; } #wiljiluquk .gt_indent_4 { text-indent: 20px; } #wiljiluquk .gt_indent_5 { text-indent: 25px; } #wiljiluquk .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #wiljiluquk div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } presentacion n pct bolsas 170 57 mixto 94 31 suelto 36 12 La mayor parte de las personas toma té en bolsas. Sin embargo, el tipo de té (en términos de precio o marca) que compran es muy distinto dependiendo de la presentación: tipo <- tipo |> select(presentacion, prop_presentacion = pct) tabla_cruzada <- te |> count(presentacion, precio) |> # porcentajes por presentación group_by(presentacion) |> mutate(prop = round(100 * n / sum(n))) |> select(-n) tabla_cruzada |> pivot_wider(names_from = presentacion, values_from = prop, values_fill = list(prop = 0)) |> gt() #sxkvcchtyg table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #sxkvcchtyg thead, #sxkvcchtyg tbody, #sxkvcchtyg tfoot, #sxkvcchtyg tr, #sxkvcchtyg td, #sxkvcchtyg th { border-style: none; } #sxkvcchtyg p { margin: 0; padding: 0; } #sxkvcchtyg .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #sxkvcchtyg .gt_caption { padding-top: 4px; padding-bottom: 4px; } #sxkvcchtyg .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #sxkvcchtyg .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #sxkvcchtyg .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #sxkvcchtyg .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #sxkvcchtyg .gt_column_spanner_outer:first-child { padding-left: 0; } #sxkvcchtyg .gt_column_spanner_outer:last-child { padding-right: 0; } #sxkvcchtyg .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #sxkvcchtyg .gt_spanner_row { border-bottom-style: hidden; } #sxkvcchtyg .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #sxkvcchtyg .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #sxkvcchtyg .gt_from_md > :first-child { margin-top: 0; } #sxkvcchtyg .gt_from_md > :last-child { margin-bottom: 0; } #sxkvcchtyg .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #sxkvcchtyg .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #sxkvcchtyg .gt_row_group_first td { border-top-width: 2px; } #sxkvcchtyg .gt_row_group_first th { border-top-width: 2px; } #sxkvcchtyg .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #sxkvcchtyg .gt_first_summary_row.thick { border-top-width: 2px; } #sxkvcchtyg .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #sxkvcchtyg .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #sxkvcchtyg .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #sxkvcchtyg .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #sxkvcchtyg .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #sxkvcchtyg .gt_left { text-align: left; } #sxkvcchtyg .gt_center { text-align: center; } #sxkvcchtyg .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #sxkvcchtyg .gt_font_normal { font-weight: normal; } #sxkvcchtyg .gt_font_bold { font-weight: bold; } #sxkvcchtyg .gt_font_italic { font-style: italic; } #sxkvcchtyg .gt_super { font-size: 65%; } #sxkvcchtyg .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #sxkvcchtyg .gt_asterisk { font-size: 100%; vertical-align: 0; } #sxkvcchtyg .gt_indent_1 { text-indent: 5px; } #sxkvcchtyg .gt_indent_2 { text-indent: 10px; } #sxkvcchtyg .gt_indent_3 { text-indent: 15px; } #sxkvcchtyg .gt_indent_4 { text-indent: 20px; } #sxkvcchtyg .gt_indent_5 { text-indent: 25px; } #sxkvcchtyg .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #sxkvcchtyg div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } precio bolsas mixto suelto marca 41 21 14 barato 3 1 3 marca_propia 9 4 3 desconocido 6 1 0 fino 8 20 56 variable 32 52 25 Estos datos podemos examinarlos un rato y llegar a conclusiones, pero esta tabla no necesariamente es la mejor manera de mostrar patrones en los datos. Tampoco son muy útiles gráficas como la siguiente: ggplot(tabla_cruzada |> ungroup() |> mutate(price = fct_reorder(precio, prop)), aes(x = precio, y = prop, group = presentacion, colour = presentacion)) + geom_point() + coord_flip() + geom_line() En lugar de eso, calcularemos perfiles columna. Esto es, comparamos cada una de las columnas con la columna marginal (en la tabla de tipo de estilo de té): num_grupos <- n_distinct(te |> select(presentacion)) tabla <- te |> count(presentacion, precio) |> group_by(presentacion) |> mutate(prop_precio = (100 * n / sum(n))) |> group_by(precio) |> mutate(prom_prop = sum(prop_precio)/num_grupos) |> mutate(perfil = 100 * (prop_precio / prom_prop - 1)) tabla ## # A tibble: 17 × 6 ## # Groups: precio [6] ## presentacion precio n prop_precio prom_prop perfil ## <fct> <fct> <int> <dbl> <dbl> <dbl> ## 1 bolsas marca 70 41.2 25.4 61.8 ## 2 bolsas barato 5 2.94 2.26 30.1 ## 3 bolsas marca_propia 16 9.41 5.48 71.7 ## 4 bolsas desconocido 11 6.47 2.51 158. ## 5 bolsas fino 14 8.24 28.0 -70.6 ## 6 bolsas variable 54 31.8 36.3 -12.5 ## 7 mixto marca 20 21.3 25.4 -16.4 ## 8 mixto barato 1 1.06 2.26 -52.9 ## 9 mixto marca_propia 4 4.26 5.48 -22.4 ## 10 mixto desconocido 1 1.06 2.51 -57.6 ## 11 mixto fino 19 20.2 28.0 -27.8 ## 12 mixto variable 49 52.1 36.3 43.6 ## 13 suelto marca 5 13.9 25.4 -45.4 ## 14 suelto barato 1 2.78 2.26 22.9 ## 15 suelto marca_propia 1 2.78 5.48 -49.3 ## 16 suelto fino 20 55.6 28.0 98.4 ## 17 suelto variable 9 25 36.3 -31.1 tabla_perfil <- tabla |> select(presentacion, precio, perfil, pct = prom_prop) |> pivot_wider(names_from = presentacion, values_from = perfil, values_fill = list(perfil = -100.0)) if_profile <- function(x){ any(x < 0) & any(x > 0) } marcar <- marcar_tabla_fun(25, "red", "black") tab_out <- tabla_perfil |> arrange(desc(bolsas)) |> select(-pct, everything()) |> mutate(across(where(is.numeric), \\(x) round(x, 0))) |> mutate(across(where(if_profile), \\(x) marcar(x))) |> knitr::kable(format_table_salida(), escape = FALSE, digits = 0, booktabs = T) |> kableExtra::kable_styling(latex_options = c("striped", "scale_down"), bootstrap_options = c( "hover", "condensed"), full_width = FALSE) tab_out precio bolsas mixto suelto pct desconocido 158 -58 -100 3 marca_propia 72 -22 -49 5 marca 62 -16 -45 25 barato 30 -53 23 2 variable -12 44 -31 36 fino -71 -28 98 28 Leemos esta tabla como sigue: por ejemplo, los compradores de té suelto compran té fino a una tasa casi el doble (98%) que el promedio. También podemos graficar como: tabla_graf <- tabla_perfil |> ungroup() |> mutate(precio = fct_reorder(precio, bolsas)) |> select(-pct) |> pivot_longer(cols = -precio, names_to = "presentacion", values_to = "perfil") g_perfil <- ggplot(tabla_graf, aes(x = precio, xend = precio, y = perfil, yend = 0, group = presentacion)) + geom_point() + geom_segment() + facet_wrap(~presentacion) + geom_hline(yintercept = 0 , colour = "gray")+ coord_flip() g_perfil Observación: hay dos maneras de construir la columna promedio: tomando los porcentajes sobre todos los datos, o promediando los porcentajes de las columnas. Si los grupos de las columnas están desbalanceados, estos promedios son diferentes. Cuando usamos porcentajes sobre la población, perfiles columna y renglón dan el mismo resultado Sin embargo, cuando hay un grupo considerablemente más grande que otros, las comparaciones se vuelven vs este grupo particular. No siempre queremos hacer esto. Interpretación En el último ejemplo de tomadores de té utilizamos una muestra de personas, no toda la población de tomadores de té. Eso quiere decir que tenemos cierta incertidumbre de cómo se generalizan o no los resultados que obtuvimos en nuestro análisis a la población general. Nuestra respuesta depende de cómo se extrajo la muestra que estamos considerando. Si el mecanismo de extracción incluye algún proceso probabilístico, entonces es posible en principio entender qué tan bien generalizan los resultados de nuestro análisis a la población general, y entender esto depende de entender qué tanta variación hay de muestra a muestra, de todas las posibles muestras que pudimos haber extraido. En las siguientes secciones discutiremos estos aspectos, en los cuales pasamos del trabajo de “detective” al trabajo de “juez” en nuestro trabajo analítico. Suavizamiento loess Las gráficas de dispersión son la herramienta básica para describir la relación entre dos variables cuantitativas, y como vimos en ejemplo anteriores, muchas veces podemos apreciar mejor la relación entre ellas si agregamos una curva loess. Veamos un ejemplo, los siguientes datos muestran los premios ofrecidos y las ventas totales de una lotería a lo largo de 53 sorteos (las unidades son cantidades de dinero indexadas). Graficamos en escalas logarítmicas y agregamos una curva loess. # cargamos los datos load(here::here("data", "ventas_sorteo.Rdata")) ggplot(ventas.sorteo, aes(x = premio, y = ventas.tot.1)) + geom_point() + geom_smooth(method = "loess", span = 0.6, method.args = list(degree = 1), se = FALSE) + scale_x_log10(breaks = c(20000, 40000, 80000)) + scale_y_log10(breaks = c(10000, 15000, 22000, 33000)) El patrón no era difícil de ver en los datos originales, sin embargo, la curva lo hace más claro, el logaritmo de las ventas tiene una relación no lineal con el logaritmo del premio: para premios no muy grandes no parece haber gran diferencia, pero cuando los premios empiezan a crecer por encima de 20,000, las ventas crecen más rápidamente que para premios menores. Este efecto se conoce como bola de nieve, y es frecuente en este tipo de loterías. Antes de adentrarnos a los modelos loess comenzamos explicando cómo se ajustan familias paramétricas de curvas a conjuntos de datos dados. El modelo de regresion lineal ajusta una recta a un conjunto de datos. Por ejemplo, consideremos la familia \\[f_{a,b}(x) = a x + b,\\] para un conjunto de datos bivariados \\(\\{ (x_1, y_1), \\ldots, (x_N, y_N)\\}\\). Buscamos encontrar \\(a\\) y \\(b\\) tales que \\(f_{a,b}\\) de un ajuste óptimo a los datos. Para esto, se minimiza la suma de errores cuadráticos \\[\\frac1N \\sum_{n = 1}^N ( y_n - a x_n - b)^2.\\] En este caso, las constantes \\(a\\) y \\(b\\) se pueden encontrar diferenciando la función de mínimos cuadrados. Nótese que podemos repetir el argumento con otras familias de funciones (por ejemplo cuadráticas). ggplot(ventas.sorteo, aes(x = premio, y = ventas.tot.1)) + geom_point() + geom_smooth(method = "lm", se = FALSE) + scale_x_log10(breaks = c(20000, 40000, 80000)) + scale_y_log10(breaks = c(10000, 15000, 22000, 33000)) Si observamos la gráfica notamos que este modelo lineal (en los logaritmos) no resumen adecuadamente estos datos. Podríamos experimentar con otras familias (por ejemplo, una cuadrática o cúbica, potencias, exponenciales, etc.); sin embargo, en la etapa exploratoria es mejor tomar una ruta de ajuste más flexible y robusta. Regresión local nos provee de un método con estas características: Curvas loess (regresión local): Una manera de mejorar la flexibilidad de los modelos lineales es considerar rectas de manera local. Es decir, en cada \\(x\\) posible consideramos cuál es la recta que mejor ajusta a los datos, considerando solamente valores de \\(x_n\\) que están cercanos a \\(x\\). La siguiente gráfica muestra qué recta se ajusta alrededor de cada punto, y cómo queda el suavizador completo, con distintos valores de suavizamiento. El tono de los puntos indican en cada paso que ventana de datos es considerada: Escogiendo de los parámetros. El parámetro de suavizamiento se encuentra por ensayo y error. La idea general es que debemos encontrar una curva que explique patrones importantes en los datos (que ajuste los datos) pero que no muestre variaciones a escalas más chicas difíciles de explicar (que pueden ser el resultado de influencias de otras variables, variación muestral, ruido o errores de redondeo, por ejemplo). En el proceso de prueba y error iteramos el ajuste y en cada paso hacemos análisis de residuales, con el fin de seleccionar un suavizamiento adecuado. En lugar de usar ajustes locales lineales, podemos usar ajustes locales cuadráticos que nos permiten capturar formas locales cuadráticas sin tener que suavizar demasiado poco: Opcional: cálculo del suavizador La idea es producir ajustes locales de rectas o funciones lineales o cuadráticas. Consideremos especificar dos parámetros: Parámetro de suavizamiento \\(\\alpha\\): toma valores en \\((0,1)\\), cuando \\(\\alpha\\) es más grande, la curva ajustada es más suave. Grado de los polinomios locales que ajustamos \\(\\lambda\\): generalmente se toma \\(\\lambda=1,2\\). Entonces, supongamos que los datos están dados por \\((x_1,y_1), \\ldots, (x_N, y_N)\\), y sean \\(\\alpha\\) un parámetro de suavizamiento fijo, y \\(\\lambda=1\\). Denotamos como \\(\\hat{g}(x)\\) la curva loess ajustada, y como \\(w_n(x)\\) a una función de peso (que depende de x) para la observación \\((x_n, y_n)\\). Para poder calcular \\(w_n(x)\\) debemos comenzar calculando \\(q=\\lfloor{N\\alpha}\\rfloor\\) que suponemos mayor que uno, esta \\(q\\) es el número de puntos que se utilizan en cada ajuste local. Ahora definimos la función tricubo: \\[\\begin{align} T(u)=\\begin{cases} (1-|u|^3)^3, & \\text{para $|u| < 1$}.\\\\ 0, & \\text{en otro caso}. \\end{cases} \\end{align}\\] entonces, para el punto \\(x\\) definimos el peso correspondiente al dato \\((x_n,y_n)\\), denotado por \\(w_n(x)\\) como: \\[w_n(x)=T\\bigg(\\frac{|x-x_n|}{d_q(x)}\\bigg)\\] donde \\(d_q(x)\\) es el valor de la \\(q\\)-ésima distancia más chica (la más grande entre las \\(q\\) más chicas) entre los valores \\(|x-x_j|\\), \\(j=1,\\ldots,N\\). De esta forma, las observaciones \\(x_n\\) reciben más peso cuanto más cerca estén de \\(x\\). En palabras, de \\(x_1,...,x_N\\) tomamos los \\(q\\) datos más cercanos a \\(x\\), que denotamos \\(x_{i_1}(x) \\leq x_{i_2}(x) \\leq \\cdots \\leq x_{i_q}(x)\\). Los re-escalamos a \\([0,1]\\) haciendo corresponder \\(x\\) a \\(0\\) y el punto más alejado de \\(x\\) (que es \\(x_{i_q}\\)) a 1. Aplicamos el tricubo (gráfica de abajo), para encontrar los pesos de cada punto. Los puntos que están a una distancia mayor a \\(d_q(x)\\) reciben un peso de cero, y los más cercanos un peso que depende de que tan cercanos están a \\(x\\). Nótese que \\(x\\) es el punto ancla en dónde estamos ajustando la regresión local. tricubo <- function(x) { ifelse(abs(x) < 1, (1 - abs(x) ^ 3) ^ 3, 0) } curve(tricubo, from = -1.5, to = 1.5) Finalmente, para cada valor de \\(x_k\\) que está en el conjunto de datos \\(\\{x_1,...,x_n\\}\\), ajustamos una recta de mínimos cuadrados ponderados por los pesos \\(w_n(x)\\), es decir, minimizamos (en el caso lineal): \\[\\sum_{i=1}^nw_n(x_k)(y_i-ax_n-b)^2.\\] Observaciones: Cualquier función (continua y quizás diferenciable) con la forma de flan del tricubo que se desvanece fuera de \\((-1,1),\\) es creciente en \\((-1,0)\\) y decreciente en \\((0, 1)\\) es un buen candidato para usarse en lugar del tricubo. La razón por la que escogemos precisamente esta forma algebráica no tiene que ver con el análisis exploratorio, sino con las ventajas teóricas adicionales que tiene en la inferencia. El caso \\(\\lambda=2\\) es similar. La única diferencia es en el paso de ajuste, donde usamos funciones cuadráticas, y obtendríamos entonces tres familias de parámetros \\(a(x_k), b_1(x_k), b_2(x_k),\\) para cada \\(k \\in \\{1, \\ldots, N\\}\\). Caso de estudio: nacimientos en México Podemos usar el suavizamiento loess para entender y describir el comportamiento de series de tiempo, en las cuáles intentamos entender la dependencia de una serie de mediciones indexadas por el tiempo. Típicamente es necesario utilizar distintas componentes para describir exitosamente una serie de tiempo, y para esto usamos distintos tipos de suavizamientos. Veremos que distintas componentes varían en distintas escalas de tiempo (unas muy lentas, como la tendencia, otras más rapidamente, como variación quincenal, etc.). Este caso de estudio esta basado en un análisis propuesto por A. Vehtari y A. Gelman, junto con un análisis de serie de tiempo de William S. Cleveland (1993). En nuestro caso, usaremos los datos de nacimientos registrados por día en México desde 1999. Los usaremos para contestar las preguntas: ¿cuáles son los cumpleaños más frecuentes? y ¿en qué mes del año hay más nacimientos? Podríamos utilizar una gráfica popular (ver por ejemplo esta visualización) como: Sin embargo, ¿cómo criticarías este análisis desde el punto de vista de los tres primeros principios del diseño analítico? ¿Las comparaciones son útiles? ¿Hay aspectos multivariados? ¿Qué tan bien explica o sugiere estructura, mecanismos o causalidad? Datos de natalidad para México library(lubridate) library(ggthemes) theme_set(theme_minimal(base_size = 14)) natalidad <- read_rds("./data/nacimientos/natalidad.rds") |> mutate(dia_semana = weekdays(fecha)) |> mutate(dia_año = yday(fecha)) |> mutate(año = year(fecha)) |> mutate(mes = month(fecha)) |> ungroup() |> mutate(dia_semana = recode(dia_semana, Monday = "Lunes", Tuesday = "Martes", Wednesday = "Miércoles", Thursday = "Jueves", Friday = "Viernes", Saturday = "Sábado", Sunday = "Domingo")) |> #necesario pues el LOCALE puede cambiar mutate(dia_semana = recode(dia_semana, lunes = "Lunes", martes = "Martes", miércoles = "Miércoles", jueves = "Jueves", viernes = "Viernes", sábado = "Sábado", domingo = "Domingo")) |> mutate(dia_semana = fct_relevel(dia_semana, c("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"))) Consideremos los datos agregados del número de nacimientos (registrados) por día desde 1999 hasta 2016. Un primer intento podría ser hacer una gráfica de la serie de tiempo. Sin embargo, vemos que no es muy útil: Hay varias características que notamos. Primero, parece haber una tendencia ligeramente decreciente del número de nacimientos a lo largo de los años. Segundo, la gráfica sugiere un patrón anual. Y por último, encontramos que hay dispersión producida por los días de la semana. Sólo estas características hacen que la comparación entre días sea difícil de realizar. Supongamos que comparamos el número de nacimientos de dos miércoles dados. Esa comparación será diferente dependiendo: del año donde ocurrieron, el mes donde ocurrieron, si semana santa ocurrió en algunos de los miércoles, y así sucesivamente. Como en nuestros ejemplos anteriores, la idea del siguiente análisis es aislar las componentes que observamos en la serie de tiempo: extraemos componentes ajustadas, y luego examinamos los residuales. En este caso particular, asumiremos una descomposición aditiva de la serie de tiempo (William S. Cleveland 1993). En el estudio de series de tiempo una estructura común es considerar el efecto de diversos factores como tendencia, estacionalidad, ciclicidad e irregularidades de manera aditiva. Esto es, consideramos la descomposición \\[\\begin{align} y(t) = f_{t}(t) + f_{e}(t) + f_{c}(t) + \\varepsilon. \\end{align}\\] Una estrategia de ajuste, como veremos más adelante, es proceder de manera modular. Es decir, se ajustan los componentes de manera secuencial considerando los residuales de los anteriores. Tendencia Comenzamos por extraer la tendencia, haciendo promedios loess (William S. Cleveland 1979) con vecindades relativamente grandes. Quizá preferiríamos suavizar menos para capturar más variación lenta, pero si hacemos esto en este punto empezamos a absorber parte de la componente anual: mod_1 <- loess(n ~ as.numeric(fecha), data = natalidad, span = 0.2, degree = 1) datos_dia <- natalidad |> mutate(ajuste_1 = fitted(mod_1)) |> mutate(res_1 = n - ajuste_1) Notemos que a principios de 2000 el suavizador está en niveles de alrededor de 7000 nacimientos diarios, hacia 2015 ese número es más cercano a unos 6000. Componente anual Al obtener la tendencia podemos aislar el efecto a largo plazo y proceder a realizar mejores comparaciones (por ejemplo, comparar un día de 2000 y de 2015 tendria más sentido). Ahora, ajustamos los residuales del suavizado anterior, pero con menos suavizamiento. Así evitamos capturar tendencia: mod_anual <- loess(res_1 ~ as.numeric(fecha), data = datos_dia, degree = 2, span = 0.005) datos_dia <- datos_dia |> mutate(ajuste_2 = fitted(mod_anual)) |> mutate(res_2 = res_1 - ajuste_2) Día de la semana Hasta ahora, hemos aislado los efectos por plazos largos de tiempo (tendencia) y hemos incorporado las variaciones estacionales (componente anual) de nuestra serie de tiempo. Ahora, veremos cómo capturar el efecto por día de la semana. En este caso, podemos hacer suavizamiento loess para cada serie de manera independiente datos_dia <- datos_dia |> group_by(dia_semana) |> nest() |> mutate(ajuste_mod = map(data, ~ loess(res_2 ~ as.numeric(fecha), data = .x, span = 0.1, degree = 1))) |> mutate(ajuste_3 = map(ajuste_mod, fitted)) |> select(-ajuste_mod) |> unnest(cols = c(data, ajuste_3)) |> mutate(res_3 = res_2 - ajuste_3) |> ungroup() Residuales Por último, examinamos los residuales finales quitando los efectos ajustados: ## `geom_smooth()` using formula = 'y ~ x' Observación: nótese que la distribución de estos residuales presenta irregularidades interesantes. La distribución es de colas largas, y no se debe a unos cuantos datos atípicos. Esto generalmente es indicación que hay factores importantes que hay que examinar mas a detalle en los residuales: Reestimación Cuando hacemos este proceso secuencial de llevar el ajuste a los residual, a veces conviene iterarlo. La razón es que en una segunda o tercera pasada podemos hacer mejores estimaciones de cada componente, y es posible suavizar menos sin capturar componentes de más alta frecuencia. Así que podemos regresar a la serie original para hacer mejores estimaciones, más suavizadas: # Quitamos componente anual y efecto de día de la semana datos_dia <- datos_dia |> mutate(n_1 = n - ajuste_2 - ajuste_3) # Reajustamos mod_1 <- loess(n_1 ~ as.numeric(fecha), data = datos_dia, span = 0.02, degree = 2, family = "symmetric") Y ahora repetimos con la componente de día de la semana: Análisis de componentes Ahora comparamos las componentes estimadas y los residuales en una misma gráfica. Por definición, la suma de todas estas componentes da los datos originales. Este último paso nos permite diversas comparaciones que explican la variación que vimos en los datos. Una gran parte de los residuales está entre \\(\\pm 250\\) nacimientos por día. Sin embargo, vemos que las colas tienen una dispersión mucho mayor: quantile(datos_dia$res_6, c(00, .01,0.05, 0.10, 0.90, 0.95, 0.99, 1)) |> round() ## 0% 1% 5% 10% 90% 95% 99% 100% ## -2238 -1134 -315 -202 188 268 516 2521 ¿A qué se deben estas colas tan largas? Viernes 13? Podemos empezar con una curosidad. Los días Viernes o Martes 13, ¿nacen menos niños? Nótese que fue útil agregar el indicador de Semana santa por el Viernes 13 de Semana Santa que se ve como un atípico en el panel de los viernes 13. Residuales: antes y después de 2006 Veamos primero una agregación sobre los años de los residuales. Lo primero es observar un cambio que sucedió repentinamente en 2006: La razón es un cambio en la ley acerca de cuándo pueden entrar los niños a la primaria. Antes era por edad y había poco margen. Ese exceso de nacimientos son reportes falsos para que los niños no tuvieran que esperar un año completo por haber nacido unos cuantos días después de la fecha límite. Otras características que debemos investigar: Efectos de Año Nuevo, Navidad, Septiembre 16 y otros días feriados como Febrero 14. Semana santa: como la fecha cambia, vemos que los residuales negativos tienden a ocurrir dispersos alrededor del día 100 del año. Otros días especiales: más de residuales Ahora promediamos residuales (es posible agregar barras para indicar dispersión a lo largo de los años) para cada día del año. Podemos identificar ahora los residuales más grandes: se deben, por ejemplo, a días feriados, con consecuencias adicionales que tienen en días ajuntos (excesos de nacimientos): Semana santa Para Semana Santa tenemos que hacer unos cálculos. Si alineamos los datos por días antes de Domingo de Pascua, obtenemos un patrón de caída fuerte de nacimientos el Viernes de Semana Santa, y la característica forma de “valle con hombros” en días anteriores y posteriores estos Viernes. ¿Por qué ocurre este patrón? Nótese un defecto de nuestro modelo: el patrón de “hombros” alrededor del Viernes Santo no es suficientemente fuerte para equilibrar los nacimientos faltantes. ¿Cómo podríamos mejorar nuestra descomposición? Referencias "],["tipos-de-estudio-y-experimentos.html", "Sección 2 Tipos de estudio y experimentos Muestreo aleatorio Pero si no podemos hacer muestreo aleatorio? El estimador estándar Experimentos tradicionales Bloqueo Variables desconocidas Aleatorizando el tratamiento Selección de unidades y tratamiento Asignación natural del tratamiento", " Sección 2 Tipos de estudio y experimentos Motivación Pregunta de entrevista de Google (Chihara and Hesterberg 2018) Imagina que eres consultor y te preguntan lo siguiente (ver siguiente figura): Estoy haciendo una comparación de antes y después donde la hipótesis alternativa es pre.media.error > post.media.error. La distribución de ambas muestras es sesgada a la derecha. ¿Qué prueba me recomiendas para ésta situación? Figure 2.1: Error CPR, gráfica de densidad. Far better an approximate answer to the right question, which is often vague, than an exact answer to the wrong question, which can always be made precise. — John Tukey La siguiente imagen Roger Peng representa una situación común a la que se enfrenta el analista de datos, y se desarrolló en el contexto de preguntas vagas. En el esquema hay tres caminos: uno es uno ideal que pocas veces sucede, otro produce respuestas poco útiles pero es fácil, y otro es tortuoso pero que caracteriza el mejor trabajo de análisis de datos: Figure 2.2: Adaptado de R. Peng: Tukey, design thinking and better questions. Ejemplos: Alguien nos pregunta cuáles son las tiendas que mas venden de una cadena. Podríamos consultar bases de datos, hacer extracciones, definir periodos, etc. y reportar el promedio de ventas en el último mes, esta respuesta probablemente es poco útil. Nos damos cuenta, por ejemplo, porque la peor tienda es una que abrió hace relativamente poco, y la mejor es una de las tiendas más grandes que está en una zona de tráfico de alto costo. Una pregunta más interesante es, ¿qué equipos de ventas tienen mejor desempeño? ¿Cuánto aporta tener una cafetería dentro de la tienda en términos de ventas?, etc. Proceso Generador de Datos Entre las preguntas que se debe hacer el analista de datos una fundamental es entender el proceso generador de datos, pues esto determinará que otras preguntas son relevantes, y que análisis son adecuados, tanto en términos prácticos como estadísticos. La inferencia estadística busca hacer afirmaciones, cuantificadas de manera probabilista, acerca de datos que no tenemos, usando regularidades y conocimiento de datos que sí tenemos disponibles y métodos cuantitativos. Para hacer afirmaciones inferenciales eficientes y bien calibradas (con garantías estadísticas de calibración) a preguntas donde queremos generalizar de muestra a población, se requiere conocer con precisión el proceso que genera los datos muestrales. Esto incluye saber con detalle cómo se seleccionaron los datos a partir de los que se quiere hacer inferencia. En este caso, eficiente quiere decir que aprovechamos toda la información que está en los datos observados de manera que nuestros rangos de incertidumbre son lo más chico posibles (además de estar correctamente calibrados). Por su parte, probabilísticamente bien calibrados se refiere a que, lo que decimos que puede ocurrir con 10% de probabilidad ocurre efectivamente 1 de cada 10 veces, si decimos 20% entonces ocurre 2 de 20, etc. Veremos que para muestras dadas naturalmente, a veces es muy difiícil entender a fondo el proceso que generó la muestra y por tanto no tenemos las garantías de eficiencia y calibración. Ejemplo: Prevalencia de anemia Supongamos que nos interesa conocer el porcentaje de menores en edad escolar, (entre 6 y 15 años), con anemia en México. La fuente de datos disponible corresponde a registros del IMSS de hospitalizaciones de menores, ya sea por anemia o por otra causa (infecciones gastrointestinales, apendicitis, tratamiento de leucemia, …), se registró si el menor tenía anemia. En nuestra muestra el 47% de los niños tiene anemia. head(paciente) #> # A tibble: 6 × 4 #> edad padecimiento sexo anemia #> <int> <chr> <chr> <int> #> 1 8 picadura alacrán mujer 0 #> 2 10 infección intestinal hombre 1 #> 3 7 mordedura de perro hombre 1 #> 4 8 asma hombre 1 #> 5 13 infección intestinal mujer 0 #> 6 7 picadura alacrán hombre 0 ¿Qué nos dice esta cantidad acerca de la anemia en la población? ¿Podemos hacer inferencia estadística? ¿Cómo calculamos intervalos de confianza? # Si calculo el error estándar de la p estimada como sigue, es correcto? p <- mean(paciente$anemia) sqrt(p * (1 - p) / 5000) #> [1] 0.007060751 Muestreo aleatorio En la situación ideal diseñaríamos una muestra aleatoria de menores de edad, por ejemplo, utilizando el registro en educación primaria de la SEP, y mediríamos la prevalencia de anemia en la muestra, usaríamos esta muestra para estimar la prevalencia en la población y tendríamos además las herramientas para medir la incertidumbre de nuestra estimación (reportar intervalos, o errores estándar). El elemento clave, es la aleatorización en la selección de la muestra, la idea es distribuir los efecros desconcidos o no controlables que pueden introducir sesgos o variabilidad no conocida en los resultados. Pero si no podemos hacer muestreo aleatorio? En el caso de prevalencia de anemia, discutiendo con médicos e investigadores nos informan que la anemia se presenta en tasas más altas en niños más chicos. paciente |> count(edad) |> mutate(prop = round(100 * n / sum(n))) #> # A tibble: 10 × 3 #> edad n prop #> <int> <int> <dbl> #> 1 6 1001 20 #> 2 7 931 19 #> 3 8 980 20 #> 4 9 445 9 #> 5 10 484 10 #> 6 11 489 10 #> 7 12 246 5 #> 8 13 239 5 #> 9 14 90 2 #> 10 15 95 2 Y consultando con las proyecciones de población notamos que los niños chicos están sobrerepresentados en la muestra. Lo que nos hace considerar que debemos buscar una manera de ponderar nuestras observaciones para que reflejen a la población. Más aún, investigamos que algunas enfermedades están asociadas a mayor prevalencia de anemia: paciente |> count(padecimiento) |> arrange(-n) #> # A tibble: 7 × 2 #> padecimiento n #> <chr> <int> #> 1 infección respiratoria 745 #> 2 mordedura de perro 723 #> 3 úlcera 723 #> 4 asma 713 #> 5 apendcitis 704 #> 6 picadura alacrán 701 #> 7 infección intestinal 691 Utilizamos esta información para modelar y corregir nuestra estimación original. Por ejemplo con modelos de regresión. Sin embargo, debemos preguntarnos: ¿Hay más variables qué nos falta considerar? Ejemplo: Policías y tráfico Supongamos que nos preguntan en cuánto reduce un policía el tráfico en un crucero grande de la ciudad. La cultura popular ha establecido que los policías en cruceros hacen más tráfico porque no saben mover los semáforos. Nosotros decidimos buscar unos datos para entender esto. Escogemos entonces un grupo de cruceros problemáticos, registramos el tráfico cuando visitamos, y si había un policía o no. Después de este esfuerzo, obtenemos los siguientes datos: #> # A tibble: 10 × 2 #> # Groups: policia [2] #> policia tiempo_espera_min #> <int> <dbl> #> 1 0 2.27 #> 2 0 2.65 #> 3 0 3.4 #> 4 0 0.39 #> 5 0 1.1 #> 6 1 10.8 #> 7 1 4.67 #> 8 1 7.77 #> 9 1 6.3 #> 10 1 6.99 Lo que sabemos ahora es que la presencia de un policía es indicador de tráfico alto. El análisis prosiguiría calculando medias y medidas de error (escogimos una muestra aleatoria): Si somos ingenuos, entonces podríamos concluir que los policías efectivamente empeoran la situación cuando manipulan los semáforos, y confirmaríamos la sabiduría popular. Para juzgar este argumento desde el punto de vista causal, nos preguntamos primero: ¿Cuáles son los contrafactuales (los contrafactuales explican que pasaría si hubiéramos hecho otra cosa que la que efectivamente hicimos) de las observaciones? Efectos causales y el esquema de resultados potenciales Consideramos un tratamiento binario: Se manda policía o no se manda policía. Un resultado potencial es aquél que se observaría bajo un tratamiento particular. En cada semáforo, a una hora dada, hay dos resultados potenciales, uno por cada valor del tratamiento: \\(y_1:\\) tiempo de espera si se envía policía. \\(y_0:\\) tiempo de espera si no se envía policía. Para cada semáforo, en el momento de registro, uno observa únicamente uno de los dos resultados potenciales. El resultado no observado se conoce como resultado contrafactual. El estimador estándar A la comparación anterior - la diferencia de medias de tratados y no tratados - le llamamos usualmente el estimador estándar del efecto causal. Muchas veces este es un estimador malo del efecto causal. En nuestro ejemplo, para llegar a la conclusión errónea que confirma la sabiduría popular, hicimos un supuesto importante: En nuestra muestra, los casos con policía actúan como contrafactuales de los casos sin policía. Asi que asumimos que los casos con policía y sin policía son similares, excepto por la existencia o no de policía. En nuestro ejemplo, quizá un analista más astuto nota que tienen categorías históricas de qué tan complicado es cada crucero. Junta a sus datos, y obtiene: #> # A tibble: 10 × 3 #> # Groups: policia [2] #> policia tiempo_espera_min categoria #> <int> <dbl> <fct> #> 1 0 2.27 Fluido #> 2 0 2.65 Fluido #> 3 0 3.4 Típico #> 4 0 0.39 Fluido #> 5 0 1.1 Fluido #> 6 1 10.8 Complicado #> 7 1 4.67 Típico #> 8 1 7.77 Complicado #> 9 1 6.3 Complicado #> 10 1 6.99 Típico El analista argumenta entonces que los policías se enviaron principalmente a cruceros que se consideran Complicados según datos históricos. Esto resta credibilidad a la comparación que hicimos inicialmente: La comparación del estimador estándar no es de peras con peras: estamos comparando qué efecto tienen los policías en cruceros difíciles, con cruceros no difíciles donde no hay policía. La razón de esto es que el proceso generador de los datos incluye el hecho de que no se envían policías a lugares donde no hay tráfico. ¿Cómo producir contrafactuales para hacer la comparación correcta? Experimentos tradicionales Idealmente, quisiéramos observar un mismo crucero en las dos condiciones: con y sin policías. Esto no es posible. En un experimento “tradicional”, como nos lo explicaron en la escuela, nos aproximamos a esto preparando dos condiciones idénticas, y luego alteramos cada una de ellas con nuestra intervención. Si el experimento está bien hecho, esto nos da observaciones en pares, y cada quien tiene su contrafactual. La idea del experimiento tradicional es controlar todos los factores que intervienen en los resultados, y sólo mover el tratamiento para producir los contrafactuales. Más en general, esta estrategia consiste en hacer bloques de condiciones, donde las condiciones son prácticamente idénticas dentro de cada bloque. Comparamos entonces unidades tratadas y no tratadas dentro de cada bloque. Por ejemplo, si queremos saber si el tiempo de caída libre es diferente para un objeto más pesado que otro, prepararíamos dos pesos con el mismo tamaño pero de peso distinto. Soltaríamos los dos al mismo tiempo y compararíamos el tiempo de caída de cada uno. En nuestro caso, como es usual en problemas de negocio o sociales, hacer esto es considerablemente más difícil. No podemos “preparar” cruceros con condiciones idénticas. Sin embargo, podríamos intentar \\(bloquear\\) los cruceros según información que tenemos acerca de ellos, para hacer más comparaciones de peras con peras. Bloqueo Podemos acercanos en lo posible a este ideal de experimentación usando información existente. En lugar de hacer comparaciones directas entre unidades que recibieron el tratamiento y las que no (que pueden ser diferentes en otros aspectos, como vimos arriba), podemos refinar nuestras comparaciones bloquéandolas con variables conocidas. En el ejemplo de los policías, podemos hacer lo siguiente: dentro de cada categoría de cruceros (fluido, típico o complicado), tomaremos una muestra de cruceros, algunos con policía y otros sin. Haremos comparaciones dentro de cada categoría. Obtenemos una muestra con estas características (6 casos en cada categoría de crucero, 3 con policía y 3 sin policía): categoria policia n Fluido 0 3 Fluido 1 3 Típico 0 3 Típico 1 3 Complicado 0 3 Complicado 1 3 Y ahora hacemos comparaciones dentro de cada bloque creado por categoría: #> # A tibble: 3 × 3 #> # Groups: categoria [3] #> categoria `policia =0` `policia =1` #> <fct> <dbl> <dbl> #> 1 Fluido 2.1 0.8 #> 2 Típico 5.6 4.2 #> 3 Complicado 10.4 8.6 Y empezamos a ver otra imagen en estos datos: comparando tipos e cruceros similares, los que tienen policía tienen tiempos de espera ligeramente más cortos. ¿Hemos termniado? ¿Podemos concluir que el efecto de un policía es beneficiosos pero considerablemente chico? ¿Qué problemas puede haber con este análisis? Variables desconocidas El problema con el análisis anterior es que controlamos por una variable que conocemos, pero muchas otras variables pueden estar ligadas con el proceso de selección de cruceros para enviar policías. Por ejemplo, envían o policías a cruceros Típicos solo cuando reportan mucho tráfico. No envían a un polícia a un crucero Complicado si no presenta demasiado tráfico. Existen otras variables desconocidas que los tomadores de decisiones usan para enviar a los policías. En este caso, por ejemplo, los expertos hipotéticos nos señalan que hay algunos cruceros que aunque problemáticos, a veces su tráfico se resuelve rápidamente, mientras que otros tienen tráfico más persistente, y prefieren enviar policías a los de tráfico persistente. La lista de cruceros persistentes están en una hoja de excel que se comparte de manera informal. En resumen, no tenemos conocimiento detallado del proceso generador de datos en cuanto a cómo se asignan los policías a los cruceros. Igual que en la sección anterior, podemos cortar esta complejidad usando aleatorización. Nótese que los expertos no están haciendo nada malo: en su trabajo están haciendo el mejor uso de los recursos que tienen. El problema es que por esa misma razón no podemos saber el resultado de sus esfuerzos, y si hay maneras de optimizar la asignación que hacen actualmente. Aleatorizando el tratamiento Tomamos la decisión entonces de hacer un experimento que incluya aletorización. En un dia particular, escogeremos algunos cruceros. Dicidimos usar solamente cruceros de la categoría Complicada y Típica, pues esos son los más interesantes para hacer intervenciones. Usaremos un poco de código para entener el detalle: en estos datos, tenemos para cada caso los dos posibles resultados hipotéticos \\(y_0\\) y \\(y_1\\) (con policia y sin policia). En el experimento asignamos el tratamiento al azar: muestra_exp <- trafico_tbl |> filter(categoria != "Fluido") |> sample_n(200) |> # asignar tratamiento al azar, esta es nuestra intervención: mutate(tratamiento_policia = rbernoulli(length(y_0), 0.5)) |> # observar resultado mutate(tiempo_espera_exp = ifelse(tratamiento_policia == 1, y_1, y_0)) Nótese la diferencia si tomamos la asignación natural del tratamiento (policía o no): set.seed(134) muestra_natural <- trafico_tbl |> filter(categoria != "Fluido") |> sample_n(200) |> # usamos el tratamiento que se asignó # policia indica si hubo o no policía en ese crucero # observar resultado mutate(tiempo_espera_obs = ifelse(policia == 1, y_1, y_0)) Resumimos nuestros resultados del experimento son: #> # A tibble: 2 × 3 #> # Groups: categoria [2] #> categoria `policia=0` `policia=1` #> <fct> <dbl> <dbl> #> 1 Típico 6.24 4.97 #> 2 Complicado 15.8 8.47 Sin embargo, la muestra natural da: #> # A tibble: 2 × 3 #> # Groups: categoria [2] #> categoria `policia=0` `policia=1` #> <fct> <dbl> <dbl> #> 1 Típico 5.49 4.35 #> 2 Complicado 10.8 8.93 ¿Cuál de los dos análisis da la respuesta correcta a la pregunta: ayudan o no los policías a reducir el tráfico en los cruceros problemáticos? El experimento establece que un policía en promedio reduce a la mitad el tiempo de espera en un crucero complicado Selección de unidades y tratamiento Vimos dos tipos de inferencia que requieren distintos diseños de estudio: a poblaciones (ejemplo anemia) y causal (ejemplo policías). En el escenario ideal de cada uno de estos ejemplos requerimos un mecanismo de aleatorización, sin embargo, la aleatorización requerida en cada caso es distinta y distinguir esto es fundamental para entender las inferencias que podemos hacer en distintos escenarios. Inferencia estadística de acuerdo al tipo del diseño (Ramsey and Schafer (2012)). El cuadro arriba a la izquierda es donde el análisis es más simple y los resultados son más fáciles de interpretar. En este escenario don de la aleatorización es tanto en unidades como en grupos no hacen falta supuestos adicionales para tener las garantías de métodos de inferencia. Es posible hacer análisis fuera de este cuadro, pero el proceso es más complicado, requieren más supuestos, conocimiento del dominio y habilidades de análisis. En general resultan conclusiones menos sólidas. Muchas veces no nos queda otra más que trabajar fuera del cuadro ideal. El punto crucial para entender las medidas de incertidumbre estadística es visualizar de manera hipotética, replicaciones del estudio y las condiciones que llevaron a la selección de la muestra. Esto es, entender el proceso generador de datos e imaginar replicarlo. Ubica los siguientes tipos de análisis: Pruebas clínicas para medicinas Analizar cómo afecta tener seguro médico a los ingresos, usando datos del ENIGH. Estimación de retorno sobre inversión en modelos de marketing mix. Asignación natural del tratamiento Cuando consideramos un sistema donde se “asignan” tratamientos de manera natural, generalmente los tratamientos se asignan bajo un criterio de optimización o conveniencia (por ejemplo los policías a cruceros problemáticos). La cara buena de este hecho es que de alguna forma los resultados están intentando optimizarse, y la gente está haciendo su trabajo. La cara mala de este hecho es que no podemos evaluar de manera simple la efectividad de los tratamientos. Y esto hace difícil optimizar de forma cuantificable los procesos, o entender qué funciona y qué no. Referencias "],["pruebas-de-hipótesis.html", "Sección 3 Pruebas de hipótesis Comparación con poblaciones de referencia Comparando distribuciones Prueba de permutaciones y el lineup Comparaciones usando lineup (continuación) Prueba de permutaciones para proporciones Pruebas de hipótesis tradicionales Tomadores de té (continuación) Pruebas de permutación: implementación. Ejemplo: tiempos de fusión Ejemplo: tiempos de fusión (continuación) Separación de grupos La “crisis de replicabilidad” El jardín de los senderos que se bifurcan Ejemplo: decisiones de análisis y valores p Alternativas o soluciones", " Sección 3 Pruebas de hipótesis Las primeras técnicas inferenciales que veremos intentan contestar la siguiente pregunta: Si observamos cierto patrón en los datos, ¿cómo podemos cuantificar la evidencia de que es un patrón notable y no sólo debido a fluctuaciones en los datos particulares que tenemos? ¿Cómo sabemos que no estamos sobreinterpretando esas fluctuaciones? Por ejemplo: Un sistema tiene cierto comportamiento “usual” para el cual tenemos datos históricos. El sistema presenta fluctuaciones en el tiempo. Observamos la última salida de nuestro sistema. Naturalmente, tiene fluctuaciones. ¿Esas fluctuaciones son consistentes con la operación usual del sistema? ¿Existe evidencia para pensar que algo en el sistema cambió? Comparación con poblaciones de referencia En las prueba de hipótesis, tratamos de construir distribuciones de referencia para comparar resultados que obtengamos con un “estándar” de variación, y juzgar si nuestros resultados son consistentes con la referencia o no (Box et al. 1978). En algunos casos, ese estándar de variación puede construirse con datos históricos. Ejemplo Supongamos que estamos considerando cambios rápidos en una serie de tiempo de alta frecuencia. Hemos observado la serie en su estado “normal” durante un tiempo considerable, y cuando observamos nuevos datos quisiéramos juzgar si hay indicaciones o evidencia en contra de que el sistema sigue funcionando de manera similar. Digamos que monitoreamos ventanas de tiempo de tamaño 20 y necesitamos tomar una decisión. Abajo mostramos cinco ejemplos donde el sistema opera normalmente, que muestra la variabilidad en el tiempo en ventanas cortas del sistema. Ahora suponemos que obtenemos una nueva ventana de datos. ¿Hay evidencia en contra de que el sistema sigue funcionando de manera similar? Nuestra primera inclinación debe ser comparar: en este caso, compararamos ventanas históricas con nuestra nueva serie: # usamos datos simulados para este ejemplo set.seed(8812) historicos <- simular_serie(2000) ¿Vemos algo diferente en los datos nuevos (el panel de color diferente)? Indpendientemente de la respuesta, vemos que hacer este análisis de manera tan simple no es siempre útil: seguramente podemos encontrar maneras en que la nueva muestra (4) es diferente a muestras históricas. Por ejemplo, ninguna de muestras tiene un “forma de montaña” tan clara. Nos preguntamos si no estamos sobreinterpretando variaciones que son parte normal del proceso. Podemos hacer un mejor análisis si extraemos varias muestras del comportamiento usual del sistema, graficamos junto a la nueva muestra, y revolvemos las gráficas para que no sepamos cuál es cuál. Entonces la pregunta es: ¿Podemos detectar donde están los datos nuevos? Esta se llama una prueba de lineup, o una prueba de ronda de sospechosos (Hadley Wickham et al. 2010). En la siguiente gráfica, en uno de los páneles están los datos recientemente observados. ¿Hay algo en los datos que distinga al patrón nuevo? # nuevos datos obs <- simular_serie(500, x_inicial = last(obs$obs)) # muestrear datos históricos prueba_tbl <- muestrear_ventanas(historicos, obs[1:20, ], n_ventana = 20) # gráfica de pequeños múltiplos ggplot(prueba_tbl$lineup, aes(x = t_0, y = obs)) + geom_line() + facet_wrap(~rep, nrow = 4) + scale_y_log10() ¿Cuáles son los datos nuevos (solo hay un panel con los nuevos datos)? ¿Qué implica que la gráfica que escojamos como “más diferente” no sean los datos nuevos? ¿Qué implica que le “atinemos” a la gráfica de los datos nuevos? Ahora observamos al sistema en otro momento y repetimos la comparación. En el siguiente caso obtenemos: Aunque es imposible estar seguros de que ha ocurrido un cambio, la diferencia de una de las series es muy considerable. Si identificamos los datos correctos, la probabilidad de que hayamos señalado la nueva serie “sobreinterpretando” fluctuaciones en un proceso que sigue comportándose normalente es 0.05 - relativamente baja. Detectar los datos diferentes es evidencia en contra de que el sistema sigue funcionando de la misma manera que antes. En el ejemplo anterior se encontraban en la posición: prueba_tbl$pos ## [1] 18 Observaciones y terminología: Llamamos hipótesis nula a la hipótesis de que los nuevos datos son producidos bajo las mismas condiciones que los datos de control o de referencia. Si no escogemos la gráfica de los nuevos datos, nuestra conclusión es que la prueba no aporta evidencia en contra de la hipótesis nula. Si escogemos la gráfica correcta, nuestra conclusión es que la prueba aporta evidencia en contra de la hipótesis nula. ¿Qué tan fuerte es la evidencia, en caso de que descubrimos los datos no nulos? Cuando el número de paneles es más grande y detectamos los datos, la evidencia es más alta en contra de la nula. Decimos que el nivel de significancia de la prueba es la probabilidad de seleccionar a los datos correctos cuando la hipótesis nula es cierta (el sistema no ha cambiado). En el caso de 20 paneles, la significancia es de 1/20 = 0.05. Cuando detectamos los datos nuevos, niveles de significancia más bajos implican más evidencia en contra de la nula. Si acertamos, y la diferencia es más notoria y fue muy fácil detectar la gráfica diferente (pues sus diferencias son más extremas), esto también sugiere más evidencia en contra de la hipótesis nula. Finalmente, esta prueba rara vez (o nunca) nos da seguridad completa acerca de ninguna conclusión, aún cuando hiciéramos muchos páneles. Comparando distribuciones Ahora intentamos un ejemplo más típico. Supongamos que tenemos muestras para tres grupos a, b y c, esto es que dentro de cada grupo, el proceso de selección de los elementos se hace al azar y de manera simétrica (por ejemplo cada elemento tiene a misma probabiidad de ser seleccionado, y las extracciones se hacen de manera independiente.) Queremos comparar las distribuciones de los datos obtenidos para cada grupo. Quizá la pregunta detrás de esta comparación es: el grupo de clientes b recibió una promoción especial. ¿Están gastando más? La medición que comparamos es el gasto de los clientes. En la muestra observamos diferencias entre los grupos. Pero notamos adicionalmente que hay mucha variación dentro de cada grupo. Nos podríamos preguntar entonces si las diferencias que observamos se deben variación muestral, por ejemplo. Podemos construir ahora una hipótesis nula, que establece que las observaciones provienen de una población similar: Las tres poblaciones (a, b, c) son prácticamente indistiguibles. En este caso, la variación que observamos se debería a que tenemos información incompleta. Como en el ejemplo anterior necesitamos construir u obtener una distribución de referencia para comparar qué tan extremos o diferentes son los datos que observamos. Esa distribución de referencia debería estar basada en el supuesto de que los grupos producen datos de distribuciones similares. Si tuvieramos mediciones similares históricas de estos tres grupos, quizá podríamos extraer datos de referencia y comparar, como hicimos en el ejempo anterior. Pero esto es menos común en este tipo de ejemplos. Prueba de permutaciones y el lineup Para abordar este problema podemos pensar en usar permutaciones de los grupos de la siguiente forma ((Box et al. 1978), (Tim C. Hesterberg 2015a)): Si los grupos producen datos bajo procesos idénticos, entonces los grupos a, b, c solo son etiquetas que no contienen información. Podríamos permutar al azar las etiquetas y observar nuevamente la gráfica de caja y brazos por grupos. Si la hipótesis nula es cierta (grupos idénticos), esta es una muestra tan verosímil como la que obtuvimos. Así que podemos construir datos de referencia permutando las etiquetas de los grupos al azar, y observando la variación que ocurre. Si la hipótesis nula es cercana a ser cierta, no deberíamos de poder distinguir fácilmente los datos observados de los producidos con las permutaciones al azar. Vamos a intentar esto, por ejemplo usando una gráfica de cuantiles simplificada. Hacemos un lineup, o una rueda de sospechosos (usamos el paquete (H. Wickham, Chowdhury, and Cook 2012), ver (Hadley Wickham et al. 2010)), donde 19 de los acusados son generados mediante permutaciones al azar de la variable del grupo, y el culpable (los verdaderos datos) están en una posición escogida al azar. ¿Podemos identificar los datos verdaderos? Para evitar sesgarnos, también ocultamos la etiqueta verdadera. Usamos una gráfica que muestra los cuantiles 0.10, 0.50, 0.90: set.seed(88) reps <- lineup(null_permute("grupo"), muestra_tab, n = 20) ## decrypt("M7xA 2S8S Jj dUyJ8JUj ZW") reps_mezcla <- reps |> mutate(grupo_1 = factor(digest::digest2int(grupo) %% 177)) grafica_cuantiles(reps_mezcla, grupo_1, x) + coord_flip() + facet_wrap(~.sample, ncol = 5) + ylab("x") + labs(caption = "Mediana y percentiles 10% y 90%") + geom_point(aes(colour = grupo_1)) Y la pregunta que hacemos es ¿podemos distinguir nuestra muestra entre todas las replicaciones producidas con permutaciones? ¿Dónde están los datos observados? Según tu elección, ¿qué tan diferentes son los datos observados de los datos nulos? En este ejemplo, es difícil indicar cuáles son los datos. Los grupos tienen distribuciones similares y es factible que las diferencias que observamos se deban a variación muestral. Si la persona escoge los verdaderos datos, encontramos evidencia en contra de la hipótesis nula (los tres grupos son equivalentes). En algunos contextos, se dice que los datos son significativamente diferentes al nivel 0.05. Esto es evidencia en contra de que los datos se producen de manera homogénea, independientemente del grupo. Si la persona escoge uno de los datos permutados, no encontramos evidencia en contra de que los tres grupos producen datos con distribuciones similares. Comparaciones usando lineup (continuación) Repetimos el ejemplo para otra muestra (en este ejemplo el proceso generador de datos es diferente para el grupo b): Hacemos primero la prueba del lineup: set.seed(121) reps <- lineup(null_permute("grupo"), muestra_tab, n = 20) grafica_cuantiles(reps |> mutate(grupo_escondido = factor(digest::digest2int(grupo) %% 177)), grupo_escondido, x) + facet_wrap(~.sample) + ylab("x") + coord_flip() + geom_point(aes(colour = grupo_escondido)) Podemos distinguir más o menos claramente que está localizada en valores más altos y tiene mayor dispersión. En este caso, como en general podemos identificar los datos, obtenemos evidencia en contra de que los tres grupos tienen distribuciones iguales. Estos ejemplos siguen la idea de inferencia visual propuestas en (Hadley Wickham et al. 2010), (Hofmann et al. 2012) son pruebas muy flexibles y estadísticamente rigurosas. Prueba de permutaciones para proporciones Veremos otro ejemplo donde podemos hacer más concreta la idea de distribución nula o de referencia usando pruebas de permutaciones. Supongamos que con nuestra muestra de tomadores de té, queremos probar la siguiente hipótesis nula: Los tomadores de té en bolsas exclusivamente, usan azúcar a tasas simillares que los tomadores de té suelto (que pueden o no también tomar té en bolsita). Los datos que obtuvimos en nuestra encuesta, en conteos, son: sugar bolsa_exclusivo suelto o bolsa No.sugar 81 74 sugar 89 56 Y en proporciones tenemos que: how prop_azucar n bolsa_exclusivo 0.52 170 suelto o bolsa 0.43 130 Pero distintas muestras podrían haber dado distintos resultados. Nos preguntamos qué tan fuerte es la evidencia en contra de que en realidad los dos grupos de personas usan azúcar en proporciones similares, y la diferencia que vemos se puede atribuir a variación muestral. En este ejemplo, podemos usar una estadística de prueba numérica, por ejemplo, la diferencia entre las dos proporciones: \\[\\hat p_1 - \\hat p_2,\\] (tomadores de té en bolsa solamente vs. suelto y bolsa). El proceso sería entonces: La hipótesis nula es que los dos grupos tienen distribuciones iguales. Este caso quiere decir que en la población, tomadores de té solo en bolsa usan azúcar a las mismas tasas que tomadores de suelto o bolsas. Bajo nuestra hipótesis nula (proporciones iguales), producimos una cantidad grande (por ejemplo 10 mil o más) de muestras permutando las etiquetas de los grupos. Evaluamos nuestra estadística de prueba en cada una de las muestras permutadas. El conjunto de valores obtenidos nos da nuestra distribución de referencia (ya no estamos limitados a 20 replicaciones como en las pruebas gráficas). Y la pregunta clave es: ¿el valor de la estadística en nuestra muestra es extrema en comparación a la distribución de referencia? dif_obs <- te_azucar |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(how) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = how, values_from = prop_azucar) |> mutate(diferencia_prop = bolsa_exclusivo - `suelto o bolsa`) |> pull(diferencia_prop) La diferencia observada es: dif_obs |> round(3) ## [1] 0.093 Ahora construimos nuestra distribución nula o de referencia: reps <- lineup(null_permute("how"), te_azucar, n = 50000) glimpse(reps) ## Rows: 15,000,000 ## Columns: 3 ## $ how <chr> "bolsa_exclusivo", "bolsa_exclusivo", "suelto o bolsa", "suelt… ## $ sugar <chr> "sugar", "No.sugar", "No.sugar", "sugar", "No.sugar", "No.suga… ## $ .sample <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… valores_ref <- reps |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(.sample, how) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = how, values_from = prop_azucar) |> mutate(diferencia = bolsa_exclusivo - `suelto o bolsa`) Y graficamos nuestros resultados (con un histograma y una gráfica de cuantiles, por ejemplo). la estadística evaluada un cada una de nuestras muestras permutadas: g_1 <- ggplot(valores_ref, aes(sample = diferencia)) + geom_qq(distribution = stats::qunif) + xlab("f") + ylab("diferencia") + labs(subtitle = "Distribución nula o de referencia") g_2 <- ggplot(valores_ref, aes(x = diferencia)) + geom_histogram(binwidth = 0.04) + coord_flip() + xlab("") + labs(subtitle = " ") g_1 + g_2 Este es el rango de fluctuación usual para nuestra estadística bajo la hipótesis de que los dos grupos de tomadores de té consumen té a la misma tasa. El valor que obtuvimos en nuestros datos es: 0.09. Mismo que no es un valor extremo en la distribución de referencia que vimos arriba. Ésta muestra no aporta mucha evidencia en contra de que los grupos tienen distribuciones similares. Podemos graficar otra vez marcando el valor observado: # Función de distribución acumulada (inverso de función de cuantiles) dist_perm <- ecdf(valores_ref$diferencia) # Calculamos el percentil del valor observado percentil_obs <- dist_perm(dif_obs) g_1 <- ggplot(valores_ref, aes(sample = diferencia)) + geom_qq(distribution = stats::qunif) + xlab("f") + ylab("diferencia") + labs(subtitle = "Distribución nula o de referencia") + geom_hline(yintercept = dif_obs, colour = "red") + annotate("text", x = 0.35, y = dif_obs - 0.03, label = "diferencia observada", colour = "red") g_2 <- ggplot(valores_ref, aes(x = diferencia)) + geom_histogram(binwidth = 0.04) + coord_flip() + xlab("") + labs(subtitle = " ") + geom_vline(xintercept = dif_obs, colour = "red") + annotate("text", x = dif_obs, y = N_rep * .3, label = percentil_obs,vjust = -0.2, colour = "red") g_1 + g_2 Y vemos que es un valor algo (pero no muy) extremo en la distribución de referencia que vimos arriba: esta muestra no aporta una gran cantidad de evidencia en contra de que los grupos tienen distribuciones similares, que en este caso significa que los dos grupos usan azúcar a tasas similares. Es decir, sobre la hipótesis \\[H_0: p_1 = p_2,\\] o bien, \\[H_0: p_1 - p_2 = 0.\\] Pruebas de hipótesis tradicionales Comencemos recordando la definición de parámetro y estadística. Definición. Un parámetro es una característica (numérica) de una población o de una distribución de probabilidad. Usualmente denotado por \\(\\theta \\in \\mathbb{R},\\) o por \\(\\theta \\in \\mathbb{R}^p.\\) Una estadística es una característica (numérica) de los datos. Usualmente denotado por \\(\\hat \\theta.\\) Cualquier función de un parámetro es también un parámetro \\(\\varphi = h(\\theta),\\) y cualquier función de una estadística es también una estadística \\(\\hat \\varphi = h(\\hat \\theta).\\) Cuando la estadística se calcula de una muestra aleatoria (\\(T(X),\\) para \\(X_i \\sim \\pi_x\\) para \\(i = 1, \\ldots, n\\)), es por consiguiente aleatoria y es por tanto una variable aleatoria (\\(T \\sim \\pi_T\\)). Por ejemplo \\(\\mu\\) y \\(\\sigma\\) son parámetros de la distribución normal con función de densidad \\(\\pi(x) = (1/\\sqrt{2\\pi}\\sigma)e^{(x-\\mu)^2/(2\\sigma^2)}\\). La varianza \\(\\sigma^2\\), y el coeficiente de variación (cociente de señal a ruido) \\(\\mu/\\sigma\\) también son parámetros. Si \\(X_1, \\ldots ,X_n\\) son una muestra aleatoria, entonces la media \\(\\bar{X}=\\frac1n\\sum_i X_i\\) es una estadística. Ahora podemos pasar a las definiciones correspondientes a pruebas de hipótesis (o pruebas de significancia). Definición. Denotamos por \\(H_0\\) a la hipótesis nula la cual usualmente tratamos como la afirmación del status quo. La hipótesis alternativa la denotamos por \\(H_1\\) y representa el supuesto que está a prueba y para el cual buscamos evidencia en los datos. Definición. La hipótesis normalmente se plantea en términos de un parámetro (\\(\\theta\\in\\mathbb{R}\\)) o conjunto de parámetros (\\(\\theta\\in\\mathbb{R}^p\\)) de la distribución de interés (por ejemplo media, moda, varianza). Para una hipótesis nula del estilo \\(H_0: \\theta = \\theta_0,\\) la hipótesis a contrastar se puede denominar como: Hipótesis alternativa de una cola \\(H_1: \\theta \\gt \\theta_0\\) Hipótesis alternativa de dos colas \\(H_1: \\theta \\neq \\theta_0\\) En el ejemplo anterior planteamos hipótesis nula (proporciones iguales) e hipótesis alternativa que la proporción de tomadores de te suelto que usan azúcar en menor proporción, esto corresponde a una hipótesis alternativa a dos colas: \\(H_0: p_1 = p_2\\), y \\(H_1:p_1 > p_2\\). Definición. Una estadística de prueba es una función numérica de los datos cuyo valor determina el resultado de la prueba. La función usualmente es denotada por \\(T(\\bf X)\\) donde \\(\\bf X\\) representa los datos como variable aleatoria. Por ejemplo, \\(T = T(X_1, \\ldots, X_n)\\) si sólo tenemos una muestra, o por \\(T = T(X_1, \\ldots, X_n, Y_1, \\ldots, Y_m)\\) en el caso de tener dos muestras. Al evaluar la prueba para un conjunto de datos dado, \\(x\\), ésta se denomina estadística de prueba observada, \\(t = T(x).\\) La estadística de prueba correspondiente al ejemplo es \\(T = \\hat p_1 - \\hat p_2.\\) Definición. El valor p es la probabilidad de que bajo la hipótesis nula los datos generen un valor tan extremo como la estadística de prueba observada. Por ejemplo, si consideramos la hipótesis nula admite valores grandes, el valor p se calcula como \\(P(T \\geq t).\\) En el ejemplo de tomadores de té: el valor p lo calculamos usando el percentil donde nuestra observación cae en la distribución generada por las permutación (valor p de una cola). 1 - dist_perm(dif_obs) ## [1] 0.04344 Por otro lado, podemos calcular: Valor p de dos colas: Si la hipótesis nula es cierta, ¿cuál es la probabilidad de observar una diferencia tan extrema o más extrema de lo que observamos? Considerando este caso interpretamos extrema como qué tan lejos cae del centro de masa de la distribución. De tal forma que podemos calcular el valor p como sigue. A partir del valor observado, consideramos cuál dato es menor: la probabilidad bajo lo hipótesis nula de observar una diferencia mayor de la que observamos, o la probabilidad de observar una diferencia menor a la que observamos. Tomamos el mínimo y multiplicamos por dos (Tim C. Hesterberg 2015a): 2 * min(dist_perm(dif_obs), (1 - dist_perm(dif_obs))) ## [1] 0.08688 Este valor p se considera como evidencia moderada en contra de la hipótesis nula. Valores p chicos (observaciones más extremas en comparación con la referencia) aportan más evidencia en contra de la hipótesis nula, y valores más grandes aportan menos evidencia en contra. Definición. Un resultado es estadisticamente significativo si tiene muy baja probabilidad de suceder al azar. Entre más pequeño requiramos un valor p oara declarar un resultado estadísticamente significativo, somos más conservadores. Las pruebas de hipótesis con frecuencia inician contestando una pregunta más general que los valores p: ¿Cuál es la distribución de la estadística de prueba cuando no hay un efecto real? Definición. La distribución nula es la distribución de la estadística de prueba si la hipótesis nula es cierta. En ocasiones también nos referimos a ella como la distribución de referencia pues estamos comparando la estadística de prueba observada a su referencia para determinar que tan inusual es. En el ejemplo de tomadores de té aproximamos la distribución nula (y los valores p) con simulación; sin embargo, para algunas estadísticas hay métodos exactos. En particular, usamos el método de pruebas de permutación. Para dicha prueba el algoritmo para en el caso de dos grupos sería como sigue: Prueba de permutación para dos muestras Supongamos que tenemos m observaciones de una población y n de otra. Combina los m+n valores. Repite: Obtén un remuestra de tamaño m sin reemplazo del total. Usa las n observaciones restantes para obtener la otra muestra. Calcula la estadística de prueba (que compara las muestras). Calcula el valor p como la fracción de las veces que la estadística sobrepasó la estadística observada, multiplica por 2 para una prueba de dos lados. La distribución de la estadística a lo largo de las remuestras de permutación es la distribución de permutación. Ésta puede ser exacta, si se calcula exhaustivamente (como cuando tenemos pocas observaciones) o aproximada (cuando enlistar todas las posible combinaciones es prohibitivo). Tomadores de té (continuación) Ahora hacemos una prueba de permutaciones para otro par de proporciones utilizando el mismo método. La hipótesis nula ahora es: Los tomadores de té Earl Gray usan azúcar a una tasa similar a los tomadores de té negro. Los datos que obtuvimos en nuestra encuesta se muestran en la siguiente tabla: sugar Earl Grey black No.sugar 84 51 sugar 109 23 Y en porcentajes tenemos que: prop_azucar <- te_azucar |> count(Tea, sugar) |> group_by(Tea) |> mutate(prop = 100 * n / sum(n), n = sum(n)) |> filter(sugar == "sugar") |> select(Tea, prop_azucar = prop, n) |> mutate('% usa azúcar' = round(prop_azucar)) |> select(-prop_azucar) prop_azucar |> formatear_tabla() Tea n % usa azúcar Earl Grey 193 56 black 74 31 Pero distintas muestras podrían haber dado distintos resultados. Nos preguntamos qué tan fuerte es la evidencia en contra de que en realidad los dos grupos de personas usan azúcar en proporciones similares considerando que la diferencia que vemos se puede atribuir a variación muestral. Escribimos la función que calcula diferencias para cada muestra: calc_diferencia_2 <- function(datos){ datos |> mutate(usa_azucar = as.numeric(sugar == "sugar")) |> group_by(Tea) |> summarise(prop_azucar = mean(usa_azucar), .groups = 'drop') |> pivot_wider(names_from = Tea, values_from = prop_azucar) |> mutate(diferencia_prop = `Earl Grey` - black) |> pull(diferencia_prop) } La diferencia observada es: ## [1] 0.254 Ahora construimos nuestra distribución nula o de referencia: set.seed(2) reps <- lineup(null_permute("Tea"), te_azucar, n = N_rep) valores_ref <- reps |> group_by(.sample) |> nest() |> mutate(diferencia = lapply(data, calc_diferencia_2)) |> unnest(diferencia) Y podemos graficar la distribución de referencia otra vez marcando el valor observado En este caso, la evidencia es muy fuerte en contra de la hipótesis nula, pues el resultado que obtuvimos es muy extremo en relación a la distribución de referencia. El valor p es cercano a 0. Haz una prueba de permutaciones para diferencia de medias para comparar la propina en cena vs en comidas. Grafica la distribución de referencia. Calcula el valor p (dos colas). Pruebas de permutación: implementación. Hasta ahora nos hemos centrado en ejemplos de diferencias en medias. Podemos extender las pruebas de permutación a \\(\\bar{X}\\) (la media de la primera muestra), \\(n\\bar{X}\\) (la suma de las observaciones en la primera muestra), y más. Teorema. En pruebas de permutación, si dos estadísticas de prueba \\(T_1\\) y \\(T_2\\) están relacionadas por una función estríctamente monótona, \\(T_1(X^*)=f(T_2(X^*))\\) donde \\(X^*\\) es una remuestra de permutación de los datos originales, entonces los valores p serán los mismos en las pruebas de permutación. Muestras con reemplazo de la Distribución Nula. En la implementación de muestreo, no nos aseguramos que las remuestras sean únicas. Sería más acertado tomar muestras sin reemplazo, sin embargo, el costo computacional es demasiado alto. Por simplicidad consideramos muestras con reemplazo del total de \\[m+n\\choose n\\] posibles remuestras. Por lo tanto, al remuestrar obtenemos una muestra de la distribución nula. Entre más muestras, más exactitud. Hemos usado \\(B = 10^3\\) remuestras (N_rep en el código), en general entre más remuestras tendremos una mejor estimación del valor p. Si el verdadero valor es \\(p\\) el estimado tendrá una varianza aproximadamente de \\(p(1- p)/B\\) donde \\(B\\) es el número de remuestras generadas. Observación. Así como los \\(n\\) datos originales son una muestra de la población, también las \\(B\\) remuestras de la estadística son una muestra de una población, en este caso de la distribución nula. La pruebas de permutaciones son más útiles cuando nuestra hipótesis nula se refiere que la distribución de los grupos son muy similares, o la independencia entre observaciones y grupo. Esto también aplica cuando queremos probar por ejemplo, que una variable numérica \\(Y\\) es independiente de \\(X.\\) Hay algunas hipótesis que no se pueden probar con este método, como por ejemplo, las que se refieren a una sola muestra: ¿los datos son consistentes con que su media es igual a 5? Adicionalmente, en algunas ocasiones queremos probar aspectos más específicos de las diferencias: como ¿son iguales las medias o medianas de dos grupos de datos? ¿Tienen dispersión similar? Es común aplicar pruebas de permutaciones a este segundo problema, sin embargo, no están tan perfectamente adaptadas a el, pues prueban todos los aspectos de las distribuciones que se comparan, aún cuando escojamos una estadística particular que pretende medir. Por ejemplo, cuando trabajamos con la diferencia de medias. Eso quiere decir que podemos rechazar igualdad de medias, por ejemplo, cuando en realidad otra característica de las distribuciones es la que difiere mucho en las poblaciones. En algunas referencias (ver (Chihara and Hesterberg 2018), (Efron and Tibshirani 1993)) se argumenta que de todas formas las pruebas de permutaciones son relativamente robustas a esta desadaptación. Un caso excepcional, por ejemplo, es cuando las poblaciones que comparamos resultan tener dispersión extremadamente distinta, y adicionalmente los tamaños de muestra de los grupos son muy desiguales (otra vez, ver ejemplos en (Chihara and Hesterberg 2018)). Ejemplo: tiempos de fusión Veamos el siguiente ejemplo, que es un experimento donde se midió el tiempo que tardan distintas personas en fusionar un estereograma para ver una imagen 3D. (William S. Cleveland (1993)). Existen dos condiciones: en una se dio indicaciones de qué figura tenían que buscar (VV) y en otra no se dio esa indicación. ¿Las instrucciones verbales ayudan a fusionar más rápido el estereograma? ## ## ── Column specification ──────────────────────────────────────────────────────── ## cols( ## n = col_double(), ## time = col_double(), ## nv.vv = col_character() ## ) La situación es la siguiente: considerando que hay mucha variación en el tiempo de fusión dentro de cada tratamiento, necesitamos calificar la evidencia de nuestra conclusión (el tiempo de fusión se reduce con información verbal). Podemos usar una prueba de permutaciones, esta vez justificándola por el hecho de que los tratamientos se asignan al azar: si los tratamientos son indistinguibles, entonces las etiquetas de los grupos son sólo etiquetas, y permutarlas daría muestras igualmente verosímiles. En este caso, compararemos gráficas de cuantiles de los datos con los producidos por permutaciones (transformamos los datos pues en este caso es más apropiado una comparación multiplicativa): ¿Podemos identificar los datos? En general, muy frecuentemente las personas identifican los datos correctamente, lo que muestra evidencia considerable de que la instrucción verbal altera los tiempos de respuesta de los partipantes, y en este caso ayuda a reducir el tiempo de fusión de los estereogramas. Ejemplo: tiempos de fusión (continuación) Podemos usar las pruebas de permutaciones para distintos tipos de estadísticas: medianas, medias, comparar dispersión usando rangos intercuartiles o varianzas, etc. Regresamos a los tiempos de fusión. Podemos hacer una prueba de permutaciones para la diferencia de las medias o medianas, por ejemplo. En este ejemplo usaremos una medida de centralidad un poco diferente, como ilustración: el promedio de los cuartiles superior e inferior de las dos distribuciones. Usaremos el cociente de estas dos cantidades para medir su diferencia # esta función hace permutaciones y calcula la diferencia para cada una permutaciones_est <- function(datos, variable, calc_diferencia, n = 1000){ # calcular estadística para cada grupo permutar <- function(variable){ sample(variable, length(variable)) } tbl_perms <- tibble(.sample = seq(1, n-1, 1)) |> mutate(diferencia = map_dbl(.sample, ~ datos |> mutate({{variable}}:= permutar({{variable}})) |> calc_diferencia())) bind_rows(tbl_perms, tibble(.sample = n, diferencia = calc_diferencia(datos))) } stat_fusion <- function(x){ (quantile(x, 0.75) + quantile(x, 0.25))/2 } calc_fusion <- function(stat_fusion){ fun <- function(datos){ datos |> group_by(nv.vv) |> summarise(est = stat_fusion(time), .groups = 'drop') |> pivot_wider(names_from = nv.vv, values_from = est) |> mutate(dif = VV / NV ) |> pull(dif) } fun } calc_cociente <- calc_fusion(stat_fusion) dif_obs <- calc_cociente(fusion) # permutar valores_ref <- permutaciones_est(fusion, nv.vv, calc_cociente, n = N_rep) dist_perm_nv <- ecdf(valores_ref$diferencia) cuantil_obs <- dist_perm_nv(dif_obs) Y el valor p de dos colas es dist_perm_nv <- ecdf(valores_ref$diferencia) 2 * min(dist_perm_nv(dif_obs), 1 - dist_perm_nv(dif_obs)) ## [1] 0.028 Lo que muestra evidencia considerable, aunque no muy fuerte, de que la instrucción verbal ayuda a reducir el tiempo de fusión de los estereogramas: la caja del diagrama de caja y brazos para el grupo VV está encogida por un factor menor a 1. Separación de grupos Este ejemplo tomado de (Chowdhury et al. 2015) (tanto la idea como el código). La pregunta que se aborda en ese estudio es: Existen métodos de clasificación (supervisados o no supervisados) para formar grupos en términos de variables que describen a los individuos Estos métodos (análisis discriminante, o k-means, por ejemplo), pretenden formar grupos compactos, bien separados entre ellos. Cuando aplicamos el método, obtenemos clasificadores basados en las variables de entrada. La pregunta es: ¿los grupos resultantes son producto de patrones que se generalizan a la población, o capitalizaron en variación aleatoria para formarse? Especialmente cuando tenemos muchas mediciones de los individuos, y una muestra relativamente chica, Es relativamente fácil encontrar combinaciones de variables que separan los grupos, aunque estas combinaciones y diferencias están basadas en ruido y no generalizan a la población. Como muestran en (Chowdhury et al. 2015), el lineup es útil para juzgar si tenemos evidencia en contra de que los grupos en realidad son iguales, y usamos variación muestral para separarlos. Avispas (opcional) En el siguiente ejemplo, tenemos 4 grupos de avispas (50 individuos en total), y para cada individuo se miden expresiones de 42 genes distintos. La pregunta es: ¿Podemos separar a los grupos de avispas dependiendo de sus mediciones? En este se usó análisis discriminante (LDA) para buscar proyecciones de los datos en dimensión baja de forma que los grupos sean lo más compactos y separados posibles. Para probar qué tan bien funciona este método, podemos hacer una prueba de permutación, aplicamos LDA y observamos los resultados. Y vemos que incluso permutando los grupos, es generalmente posible separarlos en grupos bien definidos: la búsqueda es suficientemente agresiva para encontrar combinaciones lineales que los separan. Que no podamos distinguir los datos verdaderos de las replicaciones nulas indica que este método difícilmente puede servir para separar los grupos claramente. Otro enfoque sería separar los datos en una muestra de entrenamiento y una de prueba (que discutiremos en la última sesión). Aplicamos el procedimiento a la muestra de entrenamiento y luego vemos qué pasa con los datos de prueba: set.seed(8) wasps_1 <- wasps |> mutate(u = runif(nrow(wasps), 0, 1)) wasps_entrena <- wasps_1 |> filter(u <= 0.8) wasps_prueba <- wasps_1 |> filter(u > 0.8) wasp.lda <- MASS::lda(Group ~ ., data=wasps_entrena[,-1]) wasp_ld_entrena <- predict(wasp.lda, dimen=2)$x |> as_tibble(.name_repair = "universal") |> mutate(tipo = "entrenamiento") |> mutate(grupo = wasps_entrena$Group) wasp_ld_prueba <- predict(wasp.lda, newdata = wasps_prueba, dimen=2)$x |> as_tibble(.name_repair = "universal") |> mutate(tipo = "prueba")|> mutate(grupo = wasps_prueba$Group) wasp_lda <- bind_rows(wasp_ld_entrena, wasp_ld_prueba) ggplot(wasp_lda, aes(x = LD1, y = LD2, colour = grupo)) + geom_point(size = 3) + facet_wrap(~tipo) Aunque esta separación de datos es menos efectiva en este ejemplo por la muestra chica, podemos ver que la separación lograda en los datos de entrenamiento probablemente se debe a variación muestral. La “crisis de replicabilidad” Recientemente (Ioannidis 2005) se ha reconocido en campos como la psicología la crisis de replicabilidad. Varios estudios que recibieron mucha publicidad inicialmente no han podido ser replicados posteriormente por otros investigadores. Por ejemplo: Hacer poses poderosas produce cambios fisiológicos que mejoran nuestro desempeño en ciertas tareas. Mostrar palabras relacionadas con “viejo” hacen que las personas caminen más lento (efectos de priming). En todos estos casos, el argumento de la evidencia de estos efectos fue respaldada por una prueba de hipótesis nula con un valor p menor a 0.05. La razón es que ese es el estándar de publicación seguido por varias áreas y revistas arbitradas. La tasa de no replicabilidad parece ser mucho más alta (al menos la mitad o más, según algunas fuentes como la señalada arriba) que la sugerida por la tasa de falsos positivos (menos de 5%). Este problema de replicabilidad parece ser más frecuente cuando: Se trata de estudios de potencia baja: mediciones ruidosas y tamaños de muestra chicos. El plan de análisis no está claramente definido desde un principio (lo cual es difícil cuando se están investigando “fenómenos no estudiados antes”). ¿A qué se atribuye esta crisis de replicabilidad? El jardín de los senderos que se bifurcan Aunque haya algunos ejemplos de manipulaciones conscientes —e incluso, en menos casos, malintencionadas— para obtener resultados publicables o significativos (p-hacking), como vimos en ejemplos anteriores, hay varias decisiones, todas razonables, que podemos tomar cuando estamos buscando las comparaciones correctas. Algunas pueden ser: Transformar los datos (tomar o no logaritmos, u otra transformación). Editar datos atípicos (razonable si los equipos pueden fallar, o hay errores de captura, por ejemplo). Distintas maneras de interpretar los criterios de inclusión de un estudio (por ejemplo, algunos participantes mostraron tener gripa, o revelaron que durmieron muy poco la noche anterior, etc. ¿los dejamos o los quitamos?). Dado un conjunto de datos, las justificaciones de las decisiones que se toman en cada paso son razonables, pero con datos distintos las decisiones podrían ser diferentes. Este es el jardín de los senderos que se bifurcan (ver referencia en Gelman), que invalida en parte el uso valores p como criterio de evidencia contra la hipótesis nula. Esto es exacerbado por: Tamaños de muestra chicos y efectos “inestables” que se quieren medir (por ejemplo en psicología). El hecho de que el criterio de publicación es obtener un valor \\(p < 0.05\\), y la presión fuerte sobre los investigadores para producir resultados publicables (\\(p < 0.05\\)). El que estudios o resultados similares que no obtuvieron valores \\(p\\) por debajo del umbral no son publicados o reportados. Ver por ejemplo el comunicado de la ASA. Ojo: esas presiones de publicación no sólo ocurre para investigadores en psicología. Cuando trabajamos en problemas de análisis de datos que son de importancia, es común que existan intereses de algunas partes o personas involucradas por algunos resultados u otros (por ejemplo, nuestros clientes de consultoría o clientes internos). Eso puede dañar nuestro trabajo como analistas, y el avance de nuestro equipo. Aunque esas presiones son inevitables, se vuelven manejables cuando hay una relación de confianza entre las partes involucradas. Ejemplo: decisiones de análisis y valores p En el ejemplo de datos de fusión, decidimos probar, por ejemplo, el promedio de los cuartiles inferior y superior, lo cual no es una decisión típica pero usamos como ilustración. Ahora intentamos usar distintas mediciones de la diferencia entre los grupos, usando distintas medidas resumen y transformaciones (por ejemplo, con o sin logaritmo). Aquí hay unas 12 combinaciones distintas para hacer el análisis (multiplicadas por criterios de “aceptación de datos en la muestra”, que simulamos tomando una submuestra al azar): calc_fusion <- function(stat_fusion, trans, comparacion){ fun <- function(datos){ datos |> group_by(nv.vv) |> summarise(est = stat_fusion({{ trans }}(time)), .groups = 'drop') |> pivot_wider(names_from = nv.vv, values_from = est) |> mutate(dif = {{ comparacion }}) |> pull(dif) } fun } valor_p <- function(datos, variable, calc_diferencia, n = 1000){ # calcular estadística para cada grupo permutar <- function(variable){ sample(variable, length(variable)) } tbl_perms <- tibble(.sample = seq(1, n-1, 1)) |> mutate(diferencia = map_dbl(.sample, ~ datos |> mutate({{variable}} := permutar({{variable}})) |> calc_diferencia())) perms <- bind_rows(tbl_perms, tibble(.sample = n, diferencia = calc_diferencia(datos))) perms_ecdf <- ecdf(perms$diferencia) dif <- calc_diferencia(datos) 2 * min(perms_ecdf(dif), 1- perms_ecdf(dif)) } set.seed(7272) media_cuartiles <- function(x){ (quantile(x, 0.75) + quantile(x, 0.25))/2 } # nota: usar n=10000 o más, esto solo es para demostración: ejemplo <- list() calc_dif <- calc_fusion(mean, identity, VV - NV) ejemplo$media_dif <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(mean, log, VV - NV) ejemplo$media_dif_log <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(median, identity, VV / NV) ejemplo$mediana_razon <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) calc_dif <- calc_fusion(media_cuartiles, identity, VV / NV) ejemplo$cuartiles_razon <- valor_p(fusion |> sample_frac(0.95), nv.vv, calc_dif, n = N_rep) ejemplo <- read_rds("cache/ejemplo_p_val.rds") ejemplo$media_dif ## [1] 0.0658 ejemplo$media_dif_log ## [1] 0.018 ejemplo$mediana_razon ## [1] 0.049 ejemplo$cuartiles_razon ## [1] 0.0464 Si existen grados de libertad —muchas veces necesarios para hacer un análisis exitoso—, entonces los valores p pueden tener poco significado. Alternativas o soluciones El primer punto importante es reconocer que la mayor parte de nuestro trabajo es exploratorio (recordemos el proceso complicado del análisis de datos de refinamiento de preguntas). En este tipo de trabajo, reportar valores p puede tener poco sentido, y mucho menos tiene sentido aceptar algo verdadero cuando pasa un umbral de significancia dado. Nuestro interés principal al hacer análisis es: expresar correctamente, y de manera útil, la incertidumbre asociada a las conclusiones o patrones que mostramos (asociada a variación muestral, por ejemplo) con el objetivo que el proceso de toma de decisiones sea informado. Un resumen de un número (valor p, o el que sea) no puede ser tomado como criterio para tomar una decisión que generalmente es compleja. En la siguiente sección veremos cómo podemos mostrar parte de esa incertidumbre de manera más útil. Por otra parte, los estudios confirmatorios (donde se reportan valores p) también tienen un lugar. En áreas como la psicología, existen ahora movimientos fuertes en favor de la repetición de estudios prometedores pero donde hay sospecha de grados de libertad del investigador. Este movimiento sugiere dar valor a los estudios exploratorios que no reportan valor p, y posteriormente, si el estudio es de interés, puede intentarse una replicación confirmatoria, con potencia más alta y con planes de análisis predefinidos. Referencias "],["estimación-y-distribución-de-muestreo-1.html", "Sección 4 Estimación y distribución de muestreo Ejemplo: precios de casas Distribución de muestreo Más ejemplos El error estándar Calculando la distribución de muestreo Teorema central del límite Normalidad y gráficas de cuantiles normales Prueba de hipótesis de normalidad Ejemplo Más del Teorema central del límite", " Sección 4 Estimación y distribución de muestreo En esta sección discutiremos cuál el objetivo general del proceso de estimación, y cómo entender y manejar la variabilidad que se produce cuando aleatorizamos la selección de las muestras que utilizamos para hacer análisis. A diferencia de las pruebas de permutación, donde evaluábamos como cambiaría una estadísitica si un tratamiento o grupo se hubiera asignado de forma distinta, en la siguiente sección nos preguntamos como varía una estadística entre muestras. Por ejemplo, pasaremos de preguntar si una vacuna reduce el riesgo de una enfermedad a evaluar en que magnitud se reduce el riesgo de contraer la enfermedad. Ejemplo: precios de casas Supongamos que queremos conocer el valor total de las casas que se vendieron recientemente en una zona particular. Supondremos que tenemos un listado de las casas que se han vendido recientemente, pero en ese listado no se encuentra el precio de venta. Decidimos entonces tomar una muestra aleatoria de 100 de esas casas. Para esas casas hacemos trabajo de campo para averiguar el precio de venta. marco_casas <- read_csv("data/casas.csv") set.seed(841) muestra_casas <- sample_n(marco_casas, 100) |> select(id, nombre_zona, area_habitable_sup_m2, precio_miles) sprintf("Hay %0.0f casas en total, tomamos muestra de %0.0f", nrow(marco_casas), nrow(muestra_casas)) ## [1] "Hay 1144 casas en total, tomamos muestra de 100" head(muestra_casas) ## # A tibble: 6 × 4 ## id nombre_zona area_habitable_sup_m2 precio_miles ## <dbl> <chr> <dbl> <dbl> ## 1 287 NAmes 161. 159 ## 2 755 NAmes 95.3 156 ## 3 1190 Gilbert 168. 189 ## 4 36 NridgHt 228. 309 ## 5 32 Sawyer 114. 149. ## 6 538 NAmes 80.3 111. Como tomamos una muestra aleatoria, intentamos estimar el valor total de las casas que se vendieron expandiendo el total muestral, es decir nuestro estimador \\(\\hat{t} = t(X_1,\\ldots X_{100})\\) del total poblacional \\(t\\) es \\[\\hat{t} = \\frac{N}{n} \\sum_{i=1}^{100} X_i = N\\bar{x}\\] Esta función implementa el estimador: n <- nrow(muestra_casas) # tamaño muestra N <- nrow(marco_casas) # tamaño población estimar_total <- function(muestra_casas, N){ total_muestral <- sum(muestra_casas$precio_miles) n <- nrow(muestra_casas) # cada unidad de la muestra representa a N/n f_exp <- N / n # estimador total es la expansión del total muestral estimador_total <- f_exp * total_muestral res <- tibble(total_muestra = total_muestral, factor_exp = f_exp, est_total_millones = estimador_total / 1000) res } estimar_total(muestra_casas, N) |> mutate(across(where(is.numeric), \\(x) round(x, 2))) ## # A tibble: 1 × 3 ## total_muestra factor_exp est_total_millones ## <dbl> <dbl> <dbl> ## 1 18444. 11.4 211 Sin embargo, si hubiéramos obtenido otra muestra, hubiéramos obtenido otra estimación diferente. Por ejemplo: estimar_total(sample_n(marco_casas, 100), N) |> mutate(across(where(is.numeric), \\(x) round(x, 2))) ## # A tibble: 1 × 3 ## total_muestra factor_exp est_total_millones ## <dbl> <dbl> <dbl> ## 1 17916. 11.4 205. El valor poblacional que buscamos estimar (nótese que en la práctica este no lo conocemos) es: # multiplicar por 1000 para que sea en millones de dólares total_pob <- sum(marco_casas |> pull(precio_miles)) / 1000 total_pob ## [1] 209.7633 Así que: Para algunas muestras esta estadística puede estar muy cercana al valor poblacional, pero para otras puede estar más lejana. Para entender qué tan buena es una estimación particular, entonces, tenemos que entender cuánta variabilidad hay de muestra a muestra debida a la aleatorización. Esto depende del diseño de la muestra y de la población de precios de casas (que no conocemos). Distribución de muestreo La distribución de muestreo de una estadística enumera los posibles resultados que puede tomar esa estadística sobre todas las muestras posibles. Este es el concepto básico para poder entender qué tan bien o mal estima un parámetro poblacional dado. En nuestro ejemplo anterior de precio de casas, no podemos calcular todas las posibles estimaciones bajo todas las posibles muestras, pero podemos aproximar repitiendo una gran cantidad de veces el proceso de muestreo, como hicimos al aproximar la distribución de permutaciones de estadísticas de prueba de las secciones anteriores. Empezamos repitiendo 10 veces y examinamos cómo varía nuestra estadística: replicar_muestreo <- function(marco_casas, m = 500, n){ # n es el tamaño de muestra que se saca de marco_casas # m es el número de veces que repetimos el muestro de tamaño n resultados <- map_df(1:m, function(id) { sample_n(marco_casas, n) |> estimar_total(N) }, .id = "id_muestra") } replicar_muestreo(marco_casas, m = 10, n = 100) |> mutate(across(where(is.numeric), round, 1)) |> formatear_tabla() id_muestra total_muestra factor_exp est_total_millones 1 17594.8 11.4 201.3 2 17423.9 11.4 199.3 3 18444.3 11.4 211.0 4 17696.6 11.4 202.4 5 17275.8 11.4 197.6 6 17867.6 11.4 204.4 7 18450.8 11.4 211.1 8 18187.2 11.4 208.1 9 18604.2 11.4 212.8 10 19144.4 11.4 219.0 Como vemos, hay variación considerable en nuestro estimador del total, pero la estimación que haríamos con cualquiera de estas muestras no es muy mala. Ahora examinamos un número más grande de simulaciones: replicaciones_1 <- replicar_muestreo(marco_casas, m = 1500, n = 100) Y el siguiente histograma nos dice qué podemos esperar de la variación de nuestras estimaciones, y donde es más probable que una estimación particular caiga: graf_1 <- ggplot(replicaciones_1, aes(x = est_total_millones)) + geom_histogram() + geom_vline(xintercept = total_pob, colour = "red") + xlab("Millones de dólares") + scale_x_continuous(breaks = seq(180, 240, 10), limits = c(180, 240)) graf_1 Con muy alta probabilidad el error no será de más de unos 30 millones de dólares (o no más de 20% del valor poblacional). Definición Sea \\(X_1, X_2, \\ldots X_n\\) una muestra, y \\(T = t(X_1, X_2, \\ldots, X_n)\\) una estadística. La distribución de muestreo de \\(T\\) es la función de distribución de \\(T\\). Esta distribución es sobre todas las posibles muestras que se pueden obtener. Cuando usamos \\(T\\) para estimar algún parámetro poblacional \\(\\theta\\), decimos informalmente que el estimador es preciso si su distribución de muestreo está muy concentrada alrededor del valor \\(\\theta\\) que queremos estimar. Si la distribución de muestreo está concentrada en un conjunto muy grande o muy disperso, quiere decir que con alta probabilidad cuando obtengamos nuestra muestra y calculemos nuestra estimación, el resultado estará lejano del valor poblacional que nos interesa estimar. Veamos qué pasa cuando hacemos la muestra más grande en nuestro ejemplo: replicaciones_2 <- replicar_muestreo(marco_casas, m = 1500, n = 250) Graficamos las dos distribuciones de muestreo juntas, y vemos cómo con mayor muestra obtenemos un estimador más preciso, y sin considerar el costo, preferimos el estimador mejor concentrado alrededor del valor que buscamos estimar. library(patchwork) graf_2 <- ggplot(replicaciones_2, aes(x = est_total_millones)) + geom_histogram() + geom_vline(xintercept = total_pob, colour = "red") + xlab("Millones de dólares") + scale_x_continuous(breaks = seq(180, 240, 10), limits = c(180, 240)) graf_1 + graf_2 Observación: a veces este concepto se confunde la distribución poblacional de las \\(X_i\\). Esto es muy diferente. Por ejemplo, en nuestro caso, el histograma de la distribución de valores poblacionales es ggplot(marco_casas, aes(x = precio_miles)) + geom_histogram() que en general no tiene ver mucho en escala o forma con la distribución de muestreo de nuestro estimador del total. Más ejemplos Podemos también considerar muestrear de poblaciones sintéticas o modelos probabilísticos que usamos para modelar poblaciones reales. Por ejemplo, supongamos que tomamos una muestra de tamaño 15 de la distribución uniforme en \\([0,1]\\). Es decir, cada \\(X_i\\) es un valor uniformemente distribuido en \\([0,1]\\), y las \\(X_i\\) se extraen independientemente unas de otras. Consideramos dos estadísticas de interés: La media muestral \\(T_1(X) = \\frac{1}{15}\\sum_{i = 1}^{15} X_i\\) El cuantil 0.75 de la muestra \\(T_2(X) = q_{0.75}(X)\\) ¿Cómo crees que se vean las distribuciones muestrales de estas estadísticas? ¿Alrededor de qué valores crees que concentren? ¿Crees que tendrán mucha o poca dispersión? ¿Qué forma crees que tengan? Para el primer caso hacemos: # simular replicar_muestreo_unif <- function(est = mean, m, n = 15){ valores_est <- map_dbl(1:m, ~ est(runif(n))) tibble(id_muestra = 1:m, estimacion = valores_est) } sim_estimador_1 <- replicar_muestreo_unif(mean, 4000, 15) # graficar aprox de distribución de muestreo ggplot(sim_estimador_1, aes(x = estimacion)) + geom_histogram(bins = 40) + xlim(c(0, 1)) # simular para el máximo cuantil_75 <- function(x) quantile(x, 0.75) sim_estimador_2 <- replicar_muestreo_unif(cuantil_75, 4000, 15) # graficar distribución de muestreo ggplot(sim_estimador_2, aes(x = estimacion)) + geom_histogram(breaks = seq(0, 1, 0.02)) + xlim(c(0, 1)) Supón que tenemos una muestra de 30 observaciones de una distribución uniforme \\([0,b]\\). ¿Qué tan buen estimador de \\(b/2\\) es la media muestral? ¿Cómo lo cuantificarías? ¿Qué tan buen estimador del cuantil 0.8 de la distribución uniforme es el cuantil 0.8 muestral? ¿Qué desventajas notas en este estimador? El error estándar Una primera medida útil de la dispersión de la distribución de muestreo es su desviación estándar: la razón específica tiene qué ver con un resultado importante, el teorema central del límite, que veremos más adelante. En este caso particular, a esta desviación estándar se le llama error estándar: Definición A la desviación estándar de una estadística \\(T\\) le llamamos su error estándar, y la denotamos por \\(\\text{ee}(T)\\). A cualquier estimador de este error estándar lo denotamos como \\(\\hat{\\text{ee}}(T)\\). Este error estándar mide qué tanto varía el estimador \\(T\\) de muestra a muestra. Observación: es importante no confundir el error estándar con la desviación estándar de una muestra (o de la población). En nuestro ejemplo de las uniformes, la desviación estándar de las muestras varía como: map_dbl(1:10000, ~ sd(runif(15))) |> quantile() |> round(2) ## 0% 25% 50% 75% 100% ## 0.11 0.26 0.29 0.31 0.41 Mientras que el error estándar de la media es aproximadamente map_dbl(1:10000, ~ mean(runif(15))) |> sd() ## [1] 0.07439575 y el error estándar del máximo es aproximadamente map_dbl(1:10000, ~ max(runif(15))) |> sd() ## [1] 0.05928675 Como ejercicio para contrastar estos conceptos, puedes considerar: ¿Qué pasa con la desviación estándar de una muestra muy grande de uniformes? ¿Qué pasa con el error estándar de la media muestral de una muestra muy grande de uniformes? Ejemplo: valor de casas Consideramos el error estándar del estimador del total del inventario vendido, usando una muestra de 250 con el estimador del total que describimos arriba. Como aproximamos con simulación la distribución de muestreo, podemos hacer: ee_2 <- replicaciones_2 |> pull(est_total_millones) |> sd() round(ee_2, 1) ## [1] 5.2 que está en millones de pesos y cuantifica la dispersión de la distribución de muestreo del estimador del total. Para tamaño de muestra 100, obtenemos más dispersión: ee_1 <- replicaciones_1 |> pull(est_total_millones) |> sd() round(ee_1, 1) ## [1] 8.9 Nótese que esto es muy diferente, por ejemplo, a la desviación estándar poblacional o de una muestra. Estas dos cantidades miden la variabilidad del estimador del total. Calculando la distribución de muestreo En los ejemplos anteriores usamos simulación para obtener aproximaciones de la distribución de muestreo de algunos estimadores. También es posible: Hacer cálculos exactos a partir de modelos probabilísticos. Hacer aproximaciones asintóticas para muestras grandes (de las cuales la más importante es la que da el teorema central del límite). En los ejemplos de arriba, cuando muestreamos de la poblaciones, extrajimos las muestras de manera aproximadamente independiente. Cada observación \\(X_i\\) tiene la misma distribución y las \\(X_i\\)’s son independientes. Este tipo de diseños aleatorizados es de los más simples, y se llama muestreo aleatorio simple. En general, en esta parte haremos siempre este supuesto: Una muestra es iid (independiente e idénticamente distribuida) si es es un conjunto de observaciones \\(X_1,X_2, \\ldots X_n\\) independientes, y cada una con la misma distribución. En términos de poblaciones, esto lo logramos obteniendo cada observación de manera aleatoria con el mismo procedimiento. En términos de modelos probabilísticos, cada \\(X_i\\) se extrae de la misma distribución fija \\(F\\) (que pensamos como la “población”) de manera independiente. Esto lo denotamos por \\(X_i \\overset{iid}{\\sim} F.\\) Ejemplo Si \\(X_1, X_2, \\ldots X_n\\) es una muestra de uniformes independientes en \\([0,1]\\), ¿cómo calcularíamos la distribución de muestreo del máximo muestra \\(T_2 = \\max\\)? En este caso, es fácil calcular su función de distribución acumulada de manera exacta: \\[F_{\\max}(x) = P(\\max\\{X_1,X_2,\\ldots X_n\\} \\leq x)\\] El máximo es menor o igual a \\(x\\) si y sólo si todas las \\(X_i\\) son menores o iguales a \\(x\\), así que \\[F_{\\max} (x) = P(X_1\\leq x, X_2\\leq x, \\cdots, X_n\\leq x)\\] como las \\(X_i\\)’s son independientes entonces \\[F_{\\max}(x) = P(X_1\\leq x)P(X_2\\leq x)\\cdots P(X_n\\leq x) = x^n\\] para \\(x\\in [0,1]\\), pues para cada \\(X_i\\) tenemos \\(P(X_i\\leq x) = x\\). Así que no es necesario usar simulación para conocer esta distribución de muestreo. Derivando esta distribución acumulada obtenemos su densidad, que es \\[f(x) = nx^{n-1}\\] para \\(x\\in [0,1]\\), y es cero en otro caso. Si comparamos con nuestra simulación: teorica <- tibble(x = seq(0, 1 ,0.001)) |> mutate(f_dens = 15 * x^14) sim_estimador_3 <- replicar_muestreo_unif(max, 4000, 15) ggplot(sim_estimador_3) + geom_histogram(aes(x = estimacion), breaks = seq(0, 1, 0.02)) + xlim(c(0.5, 1)) + # el histograma es de ancho 0.02 y el número de simulaciones 4000 geom_line(data = teorica, aes(x = x, y = (4000 * 0.02) * f_dens), colour = "red", linewidth = 1.3) Y vemos que con la simulación obtuvimos una buena aproximación Nota: ¿cómo se relaciona un histograma con la función de densidad que genera los datos? Supón que \\(f(x)\\) es una función de densidad, y obtenemos un número \\(n\\) de simulaciones independientes. Si escogemos un histograma de ancho \\(\\Delta\\), ¿cuántas observaciones esperamos que caigan en un intervalo \\(I = [a - \\Delta/2, a + \\Delta/2]\\)?. La probabilidad de que una observación caiga en \\(I\\) es igual a \\[P(X\\in I) = \\int_I f(x)\\,dx = \\int_{a - \\Delta/2}^{a + \\Delta/2} f(x)\\,dx \\approx f(a) \\text{long}(I) = f(a) \\Delta\\] para \\(\\Delta\\) chica. Si nuestra muestra es de tamaño \\(n\\), el número esperado de observaciones que caen en \\(I\\) es entonces \\(nf(a)\\Delta\\). Eso explica el ajuste que hicimos en la gráfica de arriba. Otra manera de hacer es ajustando el histograma: si en un intervalo el histograma alcanza el valor \\(y\\), \\[f(a) = \\frac{y}{n\\Delta}\\] teorica <- tibble(x = seq(0, 1 ,0.001)) |> mutate(f_dens = 15*x^{14}) ggplot(sim_estimador_3) + geom_histogram(aes(x = estimacion, y = after_stat(density)), breaks = seq(0, 1, 0.02)) + xlim(c(0.5, 1)) + # el histograma es de ancho 0.02 y el número de simulaciones 4000 geom_line(data = teorica, aes(x = x, y = f_dens), colour = "red", size = 1.3) Ejemplo Supongamos que las \\(X_i\\)’s son independientes y exponenciales con tasa \\(\\lambda > 0\\). ¿Cuál es la distribución de muestreo de la suma \\(S = X_1 + \\cdots + X_n\\)? Sabemos que la suma de exponenciales independientes es una distribución gamma con parámetros \\((n, \\lambda)\\), y esta es la distribución de muestreo de nuestra estadística \\(S\\) bajo las hipótesis que hicimos. Podemos checar este resultado con simulación, por ejemplo para una muestra de tamaño \\(n=15\\) con \\(\\lambda = 1\\): replicar_muestreo_exp <- function(est = mean, m, n = 150, lambda = 1){ valores_est <- map_dbl(1:m, ~ est(rexp(n, lambda))) tibble(id_muestra = 1:m, estimacion = valores_est) } sim_estimador_1 <- replicar_muestreo_exp(sum, 4000, n = 15) teorica <- tibble(x = seq(0, 35, 0.001)) |> mutate(f_dens = dgamma(x, shape = 15, rate = 1)) # graficar aprox de distribución de muestreo ggplot(sim_estimador_1) + geom_histogram(aes(x = estimacion, y = after_stat(density)), bins = 35) + geom_line(data = teorica, aes(x = x, y = f_dens), colour = "red", linewidth = 1.2) Teorema central del límite Si consideramos los ejemplos de arriba donde tratamos con estimadores basados en una suma, total o una media —y en menor medida cuantiles muestrales—, vimos que las distribución de muestreo de las estadísticas que usamos tienden a tener una forma común. Estas son manifestaciones de una regularidad estadística importante que se conoce como el teorema central del límite: las distribuciones de muestreo de sumas y promedios son aproximadamente normales cuando el tamaño de muestra es suficientemente grande. Teorema central del límite Si \\(X_1,X_2, \\ldots, X_n\\) son independientes e idénticamente distribuidas con media \\(\\mu\\) y desviación estándar \\(\\sigma\\) finitas. Si el tamaño de muestra \\(n\\) es grande, entonces la distribución de muestreo de la media \\[\\bar{X} = \\frac{X_1 + X_2 +\\cdots + X_n}{n}\\] es aproximadamente normal con media \\(\\mu\\) y desviación estándar \\(\\sigma/\\sqrt{n}\\), que escribimos como \\[\\bar{X} \\xrightarrow{} \\mathsf{N}\\left( \\mu, \\frac{\\sigma}{\\sqrt{n}} \\right)\\] Adicionalmente, la distribución de la media estandarizada converge a una distribución normal estándar cuando \\(n\\) es grande: \\[\\sqrt{n} \\, \\left( \\frac{\\bar{X}-\\mu}{\\sigma} \\right) \\xrightarrow{} \\mathsf{N}(0, 1)\\] El error estándar de \\(\\bar{X}\\) es \\(\\text{ee}(\\bar{X}) = \\frac{\\sigma}{\\sqrt{n}}\\). Si tenemos una muestra, podemos estimar \\(\\sigma\\) con de la siguiente forma: \\[\\hat{\\sigma} =\\sqrt{\\frac{1}{n}\\sum_{i=1}^n (X_i - \\bar{X})^2}\\] o el más común (que explicaremos más adelante) \\[\\hat{s} = \\sqrt{\\frac{1}{n-1}\\sum_{i=1}^n (X_i - \\bar{X})^2}\\] Este hecho junto con el teorema del límite central nos dice cuál es la dispersión, y cómo se distribuyen las posibles desviaciones de la media muestral alrededor de la verdadera media poblacional. ¿Qué tan grande debe ser \\(n\\). Depende de cómo es la población. Cuando la población tiene una distribución muy sesgada, por ejemplo, \\(n\\) típicamente necesita ser más grande que cuando la población es simétrica si queremos obtener una aproximación “buena”. En algunos textos se afirma que \\(n\\geq 30\\) es suficiente para que la aproximación del Teorema central del límite (TCL) sea buena siempre y cuando la distribución poblacional no sea muy sesgada. Esta regla es más o menos arbitraria y es mejor no confiarse, pues fácilmente puede fallar. En la práctica es importante checar este supuesto, por ejemplo usando remuestreo (que veremos más adelante) Revisa los ejemplos que hemos visto hasta ahora (precios de casas, simulaciones de uniformes y exponenciales según las distintas estadísticas que consideramos). ¿Qué distribuciones de muestreo parecen tener una distribución normal? ¿Cómo juzgamos si estas distribuciones están cerca o lejos de una distribución normal? Normalidad y gráficas de cuantiles normales Para checar si una distribución de datos dada es similar a la normal, la herramienta mas común en estádística es la gráfica de cuantiles teóricos, que es una generalización de la gráfica de cuantiles que vimos anteriormente. En primer lugar, definimos la función de cuantiles de una distribución teórica, que es análoga a la que definimos para conjuntos de datos: Supongamos que tenemos una distribución acumulada teórica \\(\\Phi\\). Podemos definir el cuantil-\\(f\\) \\(q(f)\\) de \\(\\Phi\\) como el valor \\(q(f)\\) tal que \\[q(f) = \\text{argmin}\\{x \\,| \\, \\Phi(x)\\geq f \\}\\] En el caso de que \\(\\Phi\\) tiene densidad \\(\\phi\\), y su soporte es un intervalo (que puede ser de longitud infinita), entonces podemos también escribir \\(q(f)\\) como el valor único donde acumulamos \\(f\\) de la probabilidad \\[\\int_{-\\infty}^{q(f)} \\phi(x)\\,dx= f\\] Por ejemplo, para una densidad normal, abajo mostramos los cuantiles \\(f=0.5\\) (mediana) y \\(f=0.95\\) densidad_tbl <- tibble(x = seq(0, 10, 0.01)) |> mutate(densidad = dnorm(x, 5, 1)) # qnorm es la función de cuantiles de una normal cuantil_50 <- qnorm(0.50, 5, 1) cuantil_90 <- qnorm(0.95, 5, 1) # graficamos densidad_tbl <- densidad_tbl |> mutate(menor_50 = x >= cuantil_50) |> mutate(menor_90 = x >= cuantil_90) g_normal_50 <- ggplot(densidad_tbl, aes(y = densidad)) + ylab('f(x)') + geom_area(aes(x = x, fill = menor_50)) + geom_line(aes(x = x), alpha = 0.1) + geom_vline(xintercept = cuantil_50) + theme(legend.position = "none") + annotate("text", 4.3, 0.2, label = "50%") + labs(subtitle = paste0("q(0.5)=", round(cuantil_50,1))) g_normal_90 <- ggplot(densidad_tbl, aes(y = densidad)) + ylab('f(x)') + geom_area(aes(x = x, fill = menor_90)) + geom_line(aes(x = x), alpha = 0.1) + geom_vline(xintercept = cuantil_90) + theme(legend.position = "none") + annotate("text", 5.0, 0.2, label = "95%") + labs(subtitle = paste0("q(0.95)=", round(cuantil_90,1))) g_normal_50 + g_normal_90 Como todas las distribuciones normales tienen la misma forma, y para obtener una de otra solo basta reescalar y desplazar, para calcular los cuantiles de una variable con distribución normal \\(\\mathsf{N}(\\mu, \\sigma)\\) sólo tenemos que saber los cuantiles de la distribución normal estándar \\(\\mathsf{N}(0,1)\\) y escalarlos apropiadamente por su media y desviación estándar \\[q(f, \\mu, \\sigma) = \\mu + \\sigma q(f, 0, 1)\\] Puedes demostrar esto sin mucha dificultad empezando con \\(P(X\\leq q) = f\\) y estandarizando: \\[P(X\\leq q(f, \\mu, \\sigma)) = f \\implies P\\left (Z\\leq \\frac{q(f,\\mu,\\sigma) - \\mu}{\\sigma}\\right)=f\\] y esto implica que \\[q(f, 0, 1) = \\frac{q(f,\\mu,\\sigma) - \\mu}{\\sigma} \\implies q(f, \\mu, \\sigma) = \\mu + \\sigma q(f, 0, 1)\\] De modo que si graficáramos los cuantiles de una distribución \\(\\mathsf{N}(\\mu, \\sigma)\\) contra los cuantiles de una distribución \\(\\mathsf{N}(0,1)\\), estos cuantiles aparecen en una línea recta: comparacion_tbl <- tibble(f = seq(0.01, 0.99, 0.01)) |> mutate(cuantiles_normal = qnorm(f, 5, 3), cuantiles_norm_estandar = qnorm(f, 0, 1)) ggplot(comparacion_tbl, aes(cuantiles_norm_estandar, cuantiles_normal)) + geom_point() Ahora supongamos que tenemos una muestra \\(X_1, \\ldots, X_n\\). ¿Cómo podemos checar si estos datos tienen una distribución aproximadamente normal? Si la muestra tiene una distribución aproximadamente \\(\\mathsf{N}(\\mu, \\sigma)\\), entonces sus cuantiles muestrales y los cuantiles respectivos de la normal estándar están aproximadamente en una línea recta. Primero veamos un ejemplo donde los datos son generados según una normal. set.seed(21) muestra <- tibble(x_1 = rnorm(60, 10, 3), x_2 = rgamma(60, 2, 5)) graf_1 <- ggplot(muestra, aes(sample = x_1)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") graf_2 <- ggplot(muestra, aes(sample = x_2)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") graf_1 + graf_2 ¿Cuáles son los datos aproximadamente normales? ¿Cómo interpretas las desviaciones de la segunda gráfica en términos de la forma de la distribución normal? Prueba de hipótesis de normalidad Para interpretar las gráficas de cuantiles normales se requiere práctica, pues claramente los datos, aún cuando provengan de una distribución normal, no van a caer justo sobre una línea recta y observaremos variabilidad. Esto no descarta necesariamente que los datos sean aproximadamente normales. Con la práctica, generalmente esta gráfica nos da una buena indicación si el supuesto de normalidad es apropiado. Sin embargo, podemos hacer una prueba de hipótesis formal de normalidad si quisiéramos. La hipótesis nula es la siguiente: Los datos provienen de una distribución normal, y las desviaciones que observamos de una línea recta se deben a variación muestral. Podemos generar datos nulos tomando la media y desviación estándar muestrales, y generando muestras normales \\(\\mathsf{N}(\\bar{x}, s)\\). Usamos el lineup, produciendo datos bajo la hipótesis nula y viendo si podemos distinguir los datos. Por ejemplo: library(nullabor) lineup_normal <- lineup(null_dist("x_2", dist = "normal"), muestra) ggplot(lineup_normal, aes(sample = x_2)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") + facet_wrap(~ .sample) En esta gráfica claramente rechazaríamos la hipótesis de normalidad. Sin embargo, para la primera muestra, obtenemos: lineup_normal <- lineup(null_dist("x_1", dist = "normal"), muestra) ggplot(lineup_normal, aes(sample = x_1)) + geom_qq(distribution = stats::qnorm) + geom_qq_line(colour = "red") + facet_wrap(~ .sample) Los datos verdaderos están en attr(lineup_normal, "pos") ## [1] 4 Ejemplo Consideremos el problema de estimar el total poblacional de los precios de las casas que se vendieron. El estimador que usamos fue la suma muestral expandida por un factor. Vamos a checar qué tan cerca de la normalidad está la distribución de meustreo de esta estadística (\\(n=250\\)): replicaciones_2 ## # A tibble: 1,500 × 4 ## id_muestra total_muestra factor_exp est_total_millones ## <chr> <dbl> <dbl> <dbl> ## 1 1 47089. 4.58 215. ## 2 2 45654. 4.58 209. ## 3 3 43973. 4.58 201. ## 4 4 45665. 4.58 209. ## 5 5 43551. 4.58 199. ## 6 6 46066. 4.58 211. ## 7 7 46626. 4.58 213. ## 8 8 47944. 4.58 219. ## 9 9 45381. 4.58 208. ## 10 10 46519. 4.58 213. ## # ℹ 1,490 more rows ggplot(replicaciones_2, aes(sample = est_total_millones)) + geom_qq(alpha = 0.3) + geom_qq_line(colour = "red") Y vemos que en efecto el TCL aplica en este ejemplo, y la aproximación es buena. Aunque la población original es sesgada, la descripción de la distribución de muestreo es sorprendemente compacta: La distribución de muestreo de nuestro estimador del total \\(\\hat{t}\\) es aproximadamente normal con media \\(\\bar{x}\\) y desviación estándar \\(s\\), donde: mu <- mean(replicaciones_2$est_total_millones) s <- sd(replicaciones_2$est_total_millones) c(mu = mu, s = s) |> round(2) ## mu s ## 209.90 5.24 Estas cantidades están en millones de dólares. Ejemplo Supongamos que queremos calcular la probabilidad que la suma de 30 variables uniformes en \\([0,1]\\) independientes sea mayor que 18. Podríamos aproximar esta cantidad usando simulación. Otra manera de aproximar esta cantidad es con el TCL, de la siguiente forma: Si \\(S=X_1 + X_2 + X_{30}\\), entonces la media de \\(S\\) es 15 (¿cómo se calcula?) y su desviación estándar es \\(\\sqrt{\\frac{30}{12}}\\). La suma es entonces aproximadamente \\(\\mathsf{N}\\left(15, \\sqrt{\\frac{30}{12}}\\right)\\). Entonces \\[P(S > 18) = P \\left (\\frac{S - 15}{\\sqrt{\\frac{30}{12}}} > \\frac{18 - 15}{\\sqrt{\\frac{30}{12}}}\\right) \\approx P(Z > 1.897)\\] donde \\(Z\\) es normal estándar. Esta última cantidad la calculamos usando la función de distribución de la normal estándar, y nuestra aproximación es 1 - pnorm(1.897) ## [1] 0.02891397 Podemos checar nuestro cálculo usando simulación: tibble(n_sim = 1:100000) |> mutate(suma = map_dbl(n_sim, ~ sum(runif(30)))) |> summarise(prob_may_18 = mean(suma > 18), .groups = "drop") ## # A tibble: 1 × 1 ## prob_may_18 ## <dbl> ## 1 0.0280 Y vemos que la aproximación normal es buena para fines prácticos. Usando simulaciones haz un histograma que aproxime la distribución de muestreo de \\(S\\). Haz una gráfica de cuantiles normales para checar la normalidad de esta distribución. Ejemplo Cuando el sesgo de la distribución poblacional es grande, puede ser necesario que \\(n\\) sea muy grande para que la aproximación normal sea aceptable para el promedio o la suma. Por ejemplo, si tomamos una gamma con parámetro de forma chico, \\(n = 30\\) no es suficientemente bueno, especialmente si quisiéramos aproximar probabilidades en las colas de la distribución: sims_gamma <- map_df(1:2000, ~ tibble(suma = sum(rgamma(30, 0.1, 1))), .id = "n_sim") ggplot(sims_gamma, aes(x = suma)) + geom_histogram() Más del Teorema central del límite El teorema central del límite aplica a situaciones más generales que las del enunciado del teorema básico. Por ejemplo, aplica a poblaciones finitas (como vimos en el ejemplo de las casas), en 1960 Jaroslav Hajek demostró una versión del TCL bajo muestreo sin reemplazo. Mas allá de la media muestral, el TCL se puede utilizar para más estadísticas ya que muchas pueden verse como promedios, como totales o errores estándar. El TLC se ha generalizado incluso para cuantiles muestrales. Es importante notar que la calidad de la aproximación del TCL depende de características de la población y también del tamaño de muestra \\(n\\). Para ver si el TCL aplica, podemos hacer ejercicios de simulación bajo diferentes supuestos acerca de la población. También veremos más adelante, con remuestreo, maneras de checar si es factible el TCL dependiendo del análisis de una muestra dada que tengamos. El TCL era particularmente importante en la práctica antes de que pudiéramos hacer simulación por computadora. Era la única manera de aproximar y entender la distribución muestral fuera de cálculos analíticos (como los que hicimos para el máximo de un conjunto de uniformes, por ejemplo). Hoy en día, veremos que podemos hacer simulación para obtener respuestas más exactas, particularmente en la construcción de intervalos de confianza, por ejemplo. Dependemos menos de resultados asintóticos, como el TCL. Cuando aproximamos una distribución discreta mediante la distribución normal, conviene hacer correcciones de continuidad, como se explica en (Chihara and Hesterberg 2018), 4.3.2. Referencias "],["intervalos-de-confianza-y-remuestreo.html", "Sección 5 Intervalos de confianza y remuestreo Ejemplo introductorio La idea del bootstrap El principio de plug-in Discusión: propiedades de la distribución bootstrap Error estándar bootstrap e intervalos normales Ejemplo: inventario de casas vendidas Calibración de intervalos de confianza Interpretación de intervalos de confianza Sesgo Intervalos bootstrap de percentiles Bootstrap para dos muestras Bootstrap y otras estadísticas Bootstrap y estimadores complejos: tablas de perfiles Bootstrap y muestras complejas Bootstrap en R Conclusiones y observaciones", " Sección 5 Intervalos de confianza y remuestreo En la sección anterior, vimos el concepto de distribución de muestreo de una estadística que queremos utilizar para estimar un valor poblacional, y vimos que con esta distribución podíamos evaluar qué tan preciso es nuestro estimador evaluando qué tan concentrada está esta distribución alrededor del valor poblacion que queremos estimar. Sin embargo, en los ejemplos que vimos la población era conocida: ya sea que tuviéramos toda la población finita disponible (como el ejemplo de las casas), o donde la población estaba definida por un modelo teórico de probabilidad (como los ejemplos de las distribuciones uniforme o exponencial). Ahora vemos qué hacer en el caso que realmente nos interesa: solo tenemos una muestra disponible, y la población es desconocida. Todo lo que tenemos es una muestra y una estimación basada en la muestra, y requerimos estimar la distribución de muestreo de la estadística de interés. El enfoque que presentaremos aquí es uno de los más flexibles y poderosos que están disponibles para este problema: el método bootstrap o de remuestreo. En primer lugar explicamos el concepto de intervalo de confianza, que es una manera resumida de evaluar la precisión de nuestras estimaciones. Ejemplo introductorio Regresamos a nuestro ejemplo anterior donde muestreamos 3 grupos, y nos preguntábamos acerca de la diferencia de sus medianas. En lugar de hacer pruebas de permutaciones (ya sea pruebas gráficas o alguna prueba de permutaciones para media o mediana, por ejemplo), podríamos considerar qué tan precisa es cada una de nuestras estimaciones para las medianas de los grupos. Nuestros resultados podríamos presentarlos como sigue. Este código lo explicaremos más adelante, por el momento consideramos la gŕafica resultante: set.seed(8) pob_tab <- tibble(id = 1:2000, x = rgamma(2000, 4, 1), grupo = sample(c("a","b", "c"), 2000, prob = c(4,2,1), replace = T)) muestra_tab <- pob_tab |> slice_sample(n = 125) g_1 <- ggplot(muestra_tab, aes(x = grupo, y = x)) + geom_boxplot(outlier.alpha = 0) + geom_jitter(alpha = 0.3) + labs(subtitle = "Muestra \\n") + ylim(c(0,14)) ## Hacemos bootstrap fun_boot <- function(datos){ datos |> group_by(grupo) |> slice_sample(prop = 1, replace = TRUE) } reps_boot <- map_df(1:2000, function(i){ muestra_tab |> fun_boot() |> group_by(grupo) |> summarise(mediana = median(x), .groups = "drop")}, .id = 'rep') resumen_boot <- reps_boot |> group_by(grupo) |> summarise(ymin = quantile(mediana, 0.025), ymax = quantile(mediana, 0.975), .groups = "drop") |> left_join(muestra_tab |> group_by(grupo) |> summarise(mediana = median(x))) g_2 <- ggplot(resumen_boot, aes(x = grupo, y = mediana, ymin = ymin, ymax = ymax)) + geom_linerange() + geom_point(colour = "red", size = 2) + ylim(c(0,14)) + labs(subtitle = "Intervalos de 95% \\n para la mediana") g_1 + g_2 Donde: En rojo está nuestro = puntual de la mediana de cada grupo (la mediana muestral), y Las segmentos muestran un intervalo de confianza del 95% para nuestra estimación de la mediana: esto quiere decir que los valores poblacionales tienen probabilidad aproximada de 95% de estar dentro del intervalo. Este análisis comunica correctamente que tenemos incertidumbre alta acerca de nuestras estimaciones (especialmente grupos b y c), y que no tenemos mucha evidencia de que el grupo b tenga una mediana poblacional considerablemente más alta que a o c. En muchos casos es más útil presentar la información de esta manera que usando alguna prueba de hipótesis. La idea del bootstrap Como explicamos, el problema que tenemos ahora es que normalmente sólo tenemos una muestra, así que no es posible calcular las distribuciones de muestreo como hicimos en la sección anterior y así evaluar qué tan preciso es nuestro estimador. Sin embargo, podemos hacer lo siguiente: Supongamos que tenemos una muestra \\(X_1,X_2,\\dots, X_n\\) independientes de alguna población desconocida y un estimador \\(T=t(X_1,\\dots, X_n)\\) Mundo poblacional Si tuviéramos la distribución poblacional, simulamos muestras iid para aproximar la distribución de muestreo de nuestro estimador, y así entender su variabilidad. Pero no tenemos la distribución poblacional. Sin embargo, podemos estimar la distribución poblacional con nuestros valores muestrales. Mundo bootstrap Si usamos la estimación del inciso 3, entonces usando el inciso 1 podríamos tomar muestras de nuestros datos muestrales, como si fueran de la población, y usando el mismo tamaño de muestra. El muestreo lo hacemos con reemplazo de manera que produzcamos muestras independientes de la misma “población estimada”, que es la muestra. Evaluamos nuestra estadística en cada una de estas remuestras, a estas les llamamos replicaciones bootstrap. A la distribución de las replicaciones le llamamos distribución bootstrap o distribución de remuestreo del estimador. Usamos la distribución bootstrap para estimar la variabilidad en nuestra estimación con la muestra original. Veamos que sucede para un ejemplo concreto, donde nos interesa estimar la media de los precios de venta de una población de casas. Tenemos nuestra muestra: set.seed(2112) poblacion_casas <- read_csv("data/casas.csv") muestra <- slice_sample(poblacion_casas, n = 200, replace = TRUE) mean(muestra$precio_miles) ## [1] 179.963 Esta muestra nos da nuestro estimador de la distribución poblacional: bind_rows(muestra |> mutate(tipo = "muestra"), poblacion_casas |> mutate(tipo = "población")) |> ggplot(aes(sample = precio_miles, colour = tipo, group = tipo)) + geom_qq(distribution = stats::qunif, alpha = 0.4, size = 1) + facet_wrap(~ tipo) O con histogramas: bind_rows(muestra |> mutate(tipo = "muestra"), poblacion_casas |> mutate(tipo = "población")) |> ggplot(aes(x = precio_miles, group = tipo)) + geom_histogram(aes(y=..density..), binwidth = 50) + facet_wrap(~ tipo) Y vemos que la aproximación es razonable en las partes centrales de la distribución. Ahora supongamos que nos interesa cuantificar la precisión de nuestra estimación de la media poblacional de precios de casas, y usaremos la media muestral para hacer esto. Para nuestra muestra, nuestra estimación puntual es: media <- mean(muestra$precio_miles) media ## [1] 179.963 Y recordamos que para aproximar la distribución de muestreo podíamos muestrear repetidamente la población y calcular el valor del estimador en cada una de estas muestras. Aquí no tenemos la población, pero tenemos una estimación de la población: la muestra obtenida. Así que para evaluar la variabilidad de nuestro estimador, entramos en el mundo bootstrap, y consideramos que la población es nuestra muestra. Podemos entonces extraer un número grande de muestras con reemplazo de tamaño 200 de la muestra: el muestreo debe ser análogo al que se tomó para nuestra muestra original. Evaluamos nuestra estadística (en este caso la media) en cada una de estas remuestras: media_muestras <- map_dbl(1:5000, ~ muestra |> slice_sample(n = 200, replace = TRUE) |> summarise(media_precio = mean(precio_miles), .groups = "drop") |> pull(media_precio)) Y nuestra estimación de la distribución de muestreo para la media es entonces: bootstrap <- tibble(media = media_muestras) g_cuantiles <- ggplot(bootstrap, aes(sample = media)) + geom_qq(distribution = stats::qunif) g_histograma <- ggplot(bootstrap, aes(x = media)) + geom_histogram(binwidth = 2) g_cuantiles + g_histograma A esta le llamamos la distribución bootstrap (o de remuestreo) de la media, que definimos más abajo. Ahora podemos calcular un intervalo de confianza del 90% simplemente calculando los cuantiles de esta distribución (no son los cuantiles de la muestra original!): limites_ic <- quantile(media_muestras, c(0.05, 0.95)) |> round() limites_ic ## 5% 95% ## 171 189 Presentaríamos nuestro resultado como sigue: nuestra estimación puntual de la mediana es 180, con un intervalo de confianza del 90% de (171, 189) Otra cosa que podríamos hacer para describir la dispersión de nuestro estimador es calcular el error estándar de remuestreo, que estima el error estándar de la distribución de muestreo: ee_boot <- sd(media_muestras) round(ee_boot, 2) ## [1] 5.39 Definición. Sea \\(X_1,X_2,\\ldots,X_n\\) una muestra independiente y idénticamente distribuida, y \\(T=t(X_1, X_2, \\ldots, X_n)\\) una estadística. Supongamos que sus valores que obervamos son \\(x_1, x_2,\\ldots, x_n\\). La distribución bootstrap, o distribución de remuestreo, de \\(T\\) es la distribución de \\(T^*=t(X_1^*, X_2^*, \\dots X_n^*)\\), donde cada \\(X_i^*\\) se obtiene tomando al azar uno de los valores de \\(x_1,x_2,\\ldots, x_n\\). Otra manera de decir esto es que la remuestra \\(X_1^*, X_2^*, \\ldots, X_n^*\\) es una muestra con reemplazo de los valores observados \\(x_1, x_2, \\ldots, x_n\\) Ejemplo. Si observamos la muestra muestra <- sample(1:20, 5) muestra ## [1] 6 10 7 3 14 Una remuestra se obtiene: sample(muestra, size = 5, replace = TRUE) ## [1] 7 3 7 10 6 Nótese que algunos valores de la muestra original pueden aparecer varias veces, y otros no aparecen del todo. La idea del bootstrap (no paramétrico). La muestra original es una aproximación de la población de donde fue extraída. Así que remuestrear la muestra aproxima lo que pasaría si tomáramos muestras de la población. La distribución de remuestreo de una estadística, que se construye tomando muchas remuestras, aproxima la distribución de muestreo de la estadística. Y el proceso que hacemos es: Remuestreo para una población. Dada una muestra de tamaño \\(n\\) de una población, Obtenemos una remuestra de tamaño \\(n\\) con reemplazo de la muestra original y calculamos la estadística de interés. Repetimos este remuestreo muchas veces (por ejemplo, 10,000). Construímos la distribución bootstrap, y examinamos sus características (dónde está centrada, dispersión y forma). El principio de plug-in La idea básica detrás del bootstrap es el principio de plug-in para estimar parámetros poblacionales: si queremos estimar una cantidad poblacional, calculamos esa cantidad poblacional con la muestra obtenida. Es un principio común en estadística. Por ejemplo, si queremos estimar la media o desviación estándar poblacional, usamos la media muestral o la desviación estándar muestral. Si queremos estimar un cuantil de la población usamos el cuantil correspondiente de la muestra, y así sucesivamente. En todos estos casos, lo que estamos haciendo es: Tenemos una fórmula para la cantidad poblacional de interés en términos de la distribución poblacional. Tenemos una muestra, la distribución que da esta muestra se llama distribución empírica (\\(\\hat{F}(x) = \\frac{1}{n}\\{\\#valores \\le x\\}\\)). Contruimos nuestro estimador, de la cantidad poblacional de interés, “enchufando” la distribución empírica de la muestra en la fórmula del estimador. En el bootstrap aplicamos este principio simple a la distribución de muestreo: Si tenemos la población, podemos calcular la distribución de muestreo de nuestro estimador tomando muchas muestras de la población. Estimamos la poblacion con la muestra y enchufamos en la frase anterior: estimamos la distribución de muestreo de nuestro estimador tomando muchas muestras de la muestra. Nótese que el proceso de muestreo en el último paso debe ser el mismo que se usó para tomar la muestra original. Estas dos imágenes simuladas con base en un ejemplo de Chihara and Hesterberg (2018) muestran lo que acabamos de describir: Figure 5.1: Mundo Real Figure 5.2: Mundo Bootstrap Observación 1. Veremos ejemplos más complejos, pero nótese que si la muestra original son observaciones independientes obtenidas de la distribución poblacional, entonces logramos esto en las remuestras tomando observaciones con reemplazo de la muestra. Igualmente, las remuestras deben ser del mismo tamaño que la muestra original. ¿Porqué no funcionaría tomar muestras sin reemplazo? Piensa si hay independencia entre las observaciones de la remuestra, y cómo serían las remuestras sin reemplazo. ¿Por qué no se puede hacer bootstrap si no conocemos cómo se obtuvo la muestra original? Observación 2. Estos argumentos se pueden escribir con fórmulas usando por ejemplo la función de distribución acumulada \\(F\\) de la población y su estimador, que es la función empírica \\(\\hat{F}\\). Si \\(\\theta = t(F)\\) es una cantidad poblacional que queremos estimar, su estimador plug-in es \\(\\hat{\\theta} = t(\\hat{F})\\). Observación 3: La distribución empírica \\(\\hat{F}\\) es un estimador “razonable” de la distribución poblacional \\(F,\\) pues por el teorema de Glivenko-Cantelli (ver Wasserman (2013), o aquí), \\(\\hat{F}\\) converge a \\(F\\) cuando el tamaño de muestra \\(n\\to\\infty\\), lo cual es intuitivamente claro. Ejemplo En el ejemplo de tomadores de té, podemos estimar la proporción de tomadores de té que prefiere el té negro usando nuestra muestra: te <- read_csv("data/tea.csv") |> rowid_to_column() |> select(rowid, Tea, sugar) te |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro), .groups = "drop") ## # A tibble: 1 × 2 ## prop_negro n ## <dbl> <int> ## 1 0.247 300 ¿Cómo evaluamos la precisión de este estimador? Supondremos que el estudio se hizo tomando una muestra aleatoria simple de tamaño 300 de la población de tomadores de té que nos interesa. Podemos entonces usar el bootstrap: # paso 1: define el estimador calc_estimador <- function(datos){ prop_negro <- datos |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro), .groups = "drop") |> pull(prop_negro) prop_negro } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador prop_negro_tbl <- tibble(prop_negro = map_dbl(1:10000, ~ calc_estimador(muestra_boot(datos = te)))) # paso 4: examina la distribución bootstrap prop_negro_tbl |> ggplot(aes(x = prop_negro)) + geom_histogram(bins = 15) + geom_vline(xintercept = calc_estimador(te), color = "red") Y podemos evaluar varios aspectos, por ejemplo dónde está centrada y qué tan dispersa es la distribución bootstrap: prop_negro_tbl |> summarise(media = mean(prop_negro), ee = sd(prop_negro), cuantil_75 = quantile(prop_negro, 0.75), cuantil_25 = quantile(prop_negro, 0.25), .groups = "drop") |> mutate(across(where(is.numeric), round, 3)) |> pivot_longer(cols = everything()) ## # A tibble: 4 × 2 ## name value ## <chr> <dbl> ## 1 media 0.247 ## 2 ee 0.025 ## 3 cuantil_75 0.263 ## 4 cuantil_25 0.23 –> –> Discusión: propiedades de la distribución bootstrap Uasremos la distribución bootstrap principalmente para evaluar la variabilidad de nuestros estimadores (y también otros aspectos como sesgo) estimando la dispersión de la distribución de muestreo. Sin embargo, es importante notar que no la usamos, por ejemplo, para saber dónde está centrada la distribución de muestreo, o para “mejorar” la estimación remuestreando. Ejemplo En este ejemplo, vemos 20 muestras de tamaño 200, y evaluamos cómo se ve la aproximación a la distribución de la población (rojo): Podemos calcular las distribuciones de remuestreo (bootstrap) para cada muestra, y compararlas con la distribución de muestreo real. # paso 1: define el estimador calc_estimador <- function(datos){ media_precio <- datos |> summarise(media = mean(precio_miles), .groups = "drop") |> pull(media) media_precio } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos, n = NULL){ #tomar muestra con reemplazo del mismo tamaño if(is.null(n)){ m <- slice_sample(datos, prop = 1, replace = TRUE)} else { m <- slice_sample(datos, n = n, replace = TRUE) } m } dist_boot <- datos_sim |> filter(tipo == "muestras") |> select(precio_miles, rep) |> group_by(rep) |> nest() |> mutate(precio_miles = map(data, function(data){ tibble(precio_miles = map_dbl(1:1000, ~ calc_estimador(muestra_boot(data)))) })) |> select(rep, precio_miles) |> unnest() dist_muestreo <- datos_sim |> filter(tipo == "población") |> group_by(rep) |> nest() |> mutate(precio_miles = map(data, function(data){ tibble(precio_miles = map_dbl(1:1000, ~ calc_estimador(muestra_boot(data, n = 200)))) })) |> select(rep, precio_miles) |> unnest() Obsérvese que: En algunos casos la aproximación es mejor que en otros (a veces la muestra tiene valores ligeramente más altos o más bajos). La dispersión de cada una de estas distribuciones bootstrap es similar a la de la verdadera distribución de muestreo (en rojo), pero puede está desplazada dependiendo de la muestra original que utilizamos. Adicionalmente, los valores centrales de la distribución de bootstrap tiende cubrir el verdadero valor que buscamos estimar, que es: poblacion_casas |> summarise(media = mean(precio_miles), .groups = "drop") ## # A tibble: 1 × 1 ## media ## <dbl> ## 1 183. Variación en distribuciones bootstrap En el proceso de estimación bootstrap hay dos fuentes de variación pues: La muestra original se selecciona con aleatoriedad de una población. Las muestras bootstrap se seleccionan con aleatoriedad de la muestra original. Esto es: La estimación bootstrap ideal es un resultado asintótico \\(B=\\infty\\), en esta caso \\(\\hat{\\textsf{se}}_B\\) iguala la estimación plug-in \\(se_{P_n}\\). En el proceso de bootstrap podemos controlar la variación del segundo aspecto, conocida como implementación de muestreo Monte Carlo, y la variación Monte Carlo decrece conforme incrementamos el número de muestras. Podemos eliminar la variación Monte Carlo si seleccionamos todas las posibles muestras con reemplazo de tamaño \\(n\\), hay \\({2n-1}\\choose{n}\\) posibles muestras y si seleccionamos todas obtenemos \\(\\hat{\\textsf{se}}_\\infty\\) (bootstrap ideal), sin embargo, en la mayor parte de los problemas no es factible proceder así. En la siguiente gráfica mostramos 6 posibles muestras de tamaño 50 simuladas de la población, para cada una de ellas se graficó la distribución empírica y se se realizan histogramas de la distribución bootstrap con \\(B=30\\) y \\(B=1000\\), en cada caso hacemos dos repeticiones, notemos que cuando el número de muestras bootstrap es grande las distribuciones bootstrap son muy similares (para una muestra de la población dada), esto es porque disminuimos el erro Monte Carlo. También vale la pena recalcar que la distribución bootstrap está centrada en el valor observado en la muestra (línea azúl punteada) y no en el valor poblacional sin embargo la forma de la distribución es similar a lo largo de las filas. Entonces, ¿cuántas muestras bootstrap? Incluso un número chico de replicaciones bootstrap, digamos \\(B=25\\) es informativo, y \\(B=50\\) con frecuencia es suficiente para dar una buena estimación de \\(se_P(\\hat{\\theta})\\) (Efron and Tibshirani (1993)). Cuando se busca estimar error estándar Chihara and Hesterberg (2018) recomienda \\(B=1000\\) muestras, o \\(B=10,000\\) muestras dependiendo la presición que se busque. Error estándar bootstrap e intervalos normales Ahora podemos construir nuestra primera versión de intervalos de confianza basados en la distribución bootstrap. Supongamos que queremos estimar una cantidad poblacional \\(\\theta\\) con una estadística \\(\\hat{\\theta} = t(X_1,\\ldots, X_n)\\), donde \\(X_1,\\ldots, X_n\\) es una muestra independiente e idénticamente distribuida de la población. Suponemos además que la distribución muestral de \\(\\hat{\\theta}\\) es aproximadamente normal (el teorema central del límite aplica), y está centrada en el verdadero valor poblacional \\(\\theta\\). Ahora queremos construir un intervalo que tenga probabilidad 95% de cubrir al valor poblacional \\(\\theta\\). Tenemos que \\[P(-2\\mathsf{ee}(\\hat{\\theta}) < \\hat{\\theta} - \\theta < 2\\mathsf{ee}(\\hat{\\theta})) \\approx 0.95\\] por las propiedades de la distribución normal (\\(P(-2\\sigma < X -\\mu < 2\\sigma)\\approx 0.95\\) si \\(X\\) es normal con media \\(\\mu\\) y desviación estándar \\(\\sigma\\)). Entonces \\[P(\\hat{\\theta} - 2\\mathsf{ee}(\\hat{\\theta}) < \\theta < \\hat{\\theta} + 2\\mathsf{ee}(\\hat{\\theta})) \\approx 0.95\\] Es decir, la probabilidad de que el verdadero valor poblacional \\(\\theta\\) esté en el intervalo \\[[\\hat{\\theta} - 2\\mathsf{ee}(\\hat{\\theta}), \\hat{\\theta} + 2\\mathsf{ee}(\\hat{\\theta})]\\] es cercano a 0.95. En este intervalo no conocemos el error estándar (es la desviación estándar de la distribución de muestreo de \\(\\hat{\\theta}\\)), y aquí es donde entre la distribución bootstrap, que aproxima la distribución de muestreo. Lo estimamos con \\[\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})\\] que es la desviación estándar de la distribución bootsrap. Definición. El error estándar bootstrap \\(\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})\\) se define como la desviación estándar de la distribución bootstrap de \\(\\theta\\). El intervalo de confianza normal bootstrap al 95% está dado por \\[[\\hat{\\theta} - 2\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta}), \\hat{\\theta} + 2\\hat{\\mathsf{ee}}_{\\textrm{boot}}(\\hat{\\theta})].\\] Nótese que hay varias cosas qué revisar aquí: que el teorema central del límite aplica y que la distribución de muestreo de nuestro estimador está centrado en el valor verdadero. Esto en algunos casos se puede demostrar usando la teoría, pero más abajo veremos comprobaciones empíricas. Ejemplo: tomadores de té negro Consideremos la estimación que hicimos de el procentaje de tomadores de té que toma té negro: # paso 1: define el estimador calc_estimador <- function(datos){ prop_negro <- datos |> mutate(negro = ifelse(Tea == "black", 1, 0)) |> summarise(prop_negro = mean(negro), n = length(negro)) |> pull(prop_negro) prop_negro } prop_hat <- calc_estimador(te) prop_hat |> round(2) ## [1] 0.25 Podemos graficar su distribución bootstrap —la cual simulamos arriba—. g_hist <- ggplot(prop_negro_tbl, aes(x = prop_negro)) + geom_histogram(bins = 15) g_qq_normal <- ggplot(prop_negro_tbl, aes(sample = prop_negro)) + geom_qq() + geom_qq_line(colour = "red") g_hist + g_qq_normal Y notamos que la distribución bootstrap es aproximadamente normal. Adicionalmente, vemos que el sesgo tiene un valor estimado de: media_boot <- prop_negro_tbl |> pull(prop_negro) |> mean() media_boot - prop_hat ## [1] 0.0004393333 De esta forma, hemos verificado que: La distribución bootstrap es aproximadamente normal (ver gráfica de cuantiles normales); La distribución bootstrap es aproximadamente insesgada. Lo cual nos lleva a construir intervalos de confianza basados en la distribución normal. Estimamos el error estándar con la desviación estándar de la distribución bootstrap ee_boot <- prop_negro_tbl |> pull(prop_negro) |> sd() ee_boot ## [1] 0.02485138 y construimos un intervalo de confianza del 95%: intervalo_95 <- c(prop_hat - 2 * ee_boot, prop_hat + 2 * ee_boot) intervalo_95 |> round(2) ## [1] 0.2 0.3 Este intervalo tiene probabilidad del 95% de capturar al verdadero poblacional. Con alta probabilidad, entonces, el porcentaje de tomadores de té en la población está entre 0.2 y 0.3. Ejemplo: inventario de casas vendidas Ahora consideremos el problema de estimar el total del valor de las casas vendidas en un periodo. Tenemos una muestra de tamaño \\(n=150\\): # muestra original set.seed(121) muestra_casas <- slice_sample(poblacion_casas, n = 150) # paso 1: define el estimador calc_estimador_casas <- function(datos){ N <- nrow(poblacion_casas) n <- nrow(datos) total_muestra <- sum(datos$precio_miles) estimador_total <- (N / n) * total_muestra estimador_total } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador totales_boot <- tibble(total_boot = map_dbl(1:5000, ~ calc_estimador_casas(muestra_boot(muestra_casas)))) # paso 4: examina la distribución bootstrap g_hist <- totales_boot |> ggplot(aes(x = total_boot)) + geom_histogram() g_qq <- totales_boot |> ggplot(aes(sample = total_boot)) + geom_qq() + geom_qq_line(colour = "red") + geom_hline(yintercept = quantile(totales_boot$total_boot, 0.975), colour = "gray") + geom_hline(yintercept = quantile(totales_boot$total_boot, 0.025), colour = "gray") g_hist + g_qq En este caso, distribución de muestreo presenta cierta asimetría, pero la desviación no es grande. En la parte central la aproximación normal es razonable. Procedemos a revisar sesgo total_est <- calc_estimador_casas(muestra_casas) sesgo <- mean(totales_boot$total_boot) - total_est sesgo ## [1] 110.0851 Este número puede parecer grande, pero sí calculamos la desviación relativa con respecto al error estándar vemos que es chico en la escala de la distribución bootstrap: ee_boot <- sd(totales_boot$total_boot) sesgo_relativo <- sesgo / ee_boot sesgo_relativo ## [1] 0.01522088 De forma que procedemos a construir intervalos de confianza como sigue : c(total_est - 2*ee_boot, total_est + 2*ee_boot) ## [1] 203366.6 232296.6 Que está en miles de dólares. En millones de dólares, este intervalo es: intervalo_total <- c(total_est - 2*ee_boot, total_est + 2*ee_boot) / 1000 intervalo_total |> round(1) ## [1] 203.4 232.3 Así que con 95% de confianza el verdadero total del valor de las casas vendidas está entre 203 y 232 millones de dólares. Nota: en este ejemplo mostraremos una alternativa de intervalos de confianza que es más apropiado cuando observamos asimetría. Sin embargo, primero tendremos que hablar de dos conceptos clave con respecto a intervalos de confianza: calibración e interpretación. Calibración de intervalos de confianza ¿Cómo sabemos que nuestros intervalos de confianza del 95% nominal tienen cobertura real de 95%? Es decir, tenemos que checar: El procedimiento para construir intervalos debe dar intervalos tales que el valor poblacional está en el intervalo de confianza para 95% de las muestras. Como solo tenemos una muestra, la calibración depende de argumentos teóricos o estudios de simulación previos. Para nuestro ejemplo de casas tenemos la población, así que podemos checar qué cobertura real tienen los intervalos normales: simular_intervalos <- function(rep, size = 150){ muestra_casas <- slice_sample(poblacion_casas, n = size) N <- nrow(poblacion_casas) n <- nrow(muestra_casas) total_est <- (N / n) * sum(muestra_casas$precio_miles) # paso 1: define el estimador calc_estimador_casas <- function(datos){ total_muestra <- sum(datos$precio_miles) estimador_total <- (N / n) * total_muestra estimador_total } # paso 2: define el proceso de remuestreo muestra_boot <- function(datos){ #tomar muestra con reemplazo del mismo tamaño slice_sample(datos, prop = 1, replace = TRUE) } # paso 3: remuestrea y calcula el estimador totales_boot <- map_dbl(1:2000, ~ calc_estimador_casas(muestra_boot(muestra_casas))) |> tibble(total_boot = .) |> summarise(ee_boot = sd(total_boot)) |> mutate(inf = total_est - 2*ee_boot, sup = total_est + 2*ee_boot) |> mutate(rep = rep) totales_boot } # Para recrear, correr: # sims_intervalos <- map(1:100, ~ simular_intervalos(rep = .x)) # write_rds(sims_intervalos, "cache/sims_intervalos.rds") # Para usar resultados en cache: sims_intervalos <- read_rds("cache/sims_intervalos.rds") total <- sum(poblacion_casas$precio_miles) sims_tbl <- sims_intervalos |> bind_rows() |> mutate(cubre = inf < total & total < sup) ggplot(sims_tbl, aes(x = rep)) + geom_hline(yintercept = total, colour = "red") + geom_linerange(aes(ymin = inf, ymax = sup, colour = cubre)) La cobertura para estos 100 intervalos simulados da total <- sum(poblacion_casas$precio_miles) sims_tbl |> summarise(cobertura = mean(cubre)) ## # A tibble: 1 × 1 ## cobertura ## <dbl> ## 1 0.96 que es consistente con una cobertura real del 95% (¿qué significa “consistente”? ¿Cómo puedes checarlo con el bootstrap?) Observación. En este caso teníamos la población real, y pudimos verificar la cobertura de nuestros intervalos. En general no la tenemos. Estos ejercicios de simulación se pueden hacer con poblaciones sintéticas que se generen con las características que creemos va a tener nuestra población (por ejemplo, sesgo, colas largas, etc.). En general, no importa qué tipo de estimadores o intervalos de confianza usemos, requerimos checar la calibración. Esto puede hacerse con ejercicios de simulación con poblaciones sintéticas y tanto los procedimientos de muestreo como los tamaños de muestra que nos interesa usar. Verificar la cobertura de nuestros intervalos de confianza por medio simulación está bien estudiado para algunos casos. Por ejemplo, cuando trabajamos con estimaciones para poblaciones teóricas. En general sabemos que los procedimientos funcionan bien en casos: con distribuciones simétricas que tengan colas no muy largas; estimación de proporciones donde no tratamos con casos raros o casos seguros (probabilidades cercanas a 0 o 1). Interpretación de intervalos de confianza Como hemos visto, “intervalo de confianza” (de 90% de confianza, por ejemplo) es un término frecuentista, que significa: Cada muestra produce un intervalo distinto. Para el 90% de las muestras posibles, el intervalo cubre al valor poblacional. La afirmación es sobre el intervalo y el mecanismo para construirlo. Así que con alta probabilidad, el intervalo contiene el valor poblacional. Intervalos más anchos nos dan más incertidumbre acerca de dónde está el verdadero valor poblacional (y al revés para intervalos más angostos). Existen también “intervalos de credibilidad” (de 90% de probabilidad, por ejemplo), que se interpetan de forma bayesiana: Con 90% de probabilidad (relativamente alta), creemos que el valor poblacional está dentro del intervalo de credibilidad. Esta última interpretación es más natural. Obsérvese que para hablar de intervalos de confianza frecuentista tenemos que decir: Este intervalo particular cubre o no al verdadero valor, pero nuestro procedimiento produce intervalos que contiene el verdadero valor para el 90% de las muestras. Esta es una interpretación relativamente débil, y muchos intervalos poco útiles pueden satisfacerla. La interpretación bayesiana es más natural porque expresa más claramente incertidumbre acerca del valor poblacional. Por otro lado, La interpretación frecuentista nos da maneras empíricas de probar si los intervalos de confianza están bien calibrados o no: es un mínimo que “intervalos del 90%” deberían satisfacer. Así que tomamos el punto de vista bayesiano en la intepretación, pero buscamos que nuestros intervalos cumplan o aproximen bien garantías frecuentistas (discutimos esto más adelante). Los intervalos que producimos en esta sección pueden interpretarse de las dos maneras. Sesgo Notemos que hemos revisado el sesgo en varias ocasiones, esto es porque algunos estimadores comunes (por ejemplo, cociente de dos cantidades aleatorias) pueden sufrir de sesgo grande, especialmente en el caso de muestras chicas. Esto a su vez afecta la cobertura, pues es posible que nuestros intervalos no tengan “cobertura simétrica”, por ejemplo. Para muchos estimadores, y muestras no muy chicas, esté sesgo tiende a ser poco importante y no es necesario hacer correcciones. Si el tamaño del sesgo es grande comparado con la dispersión de la distribución bootstrap generalmente consideramos que bajo el diseño actual el estimador que estamos usando no es apropiado, y podemos proponer otro estimador u otro procedimiento para construir intervalos (ver Efron and Tibshirani (1993) intervalos BC_{a}), Efron and Tibshirani (1993) sugieren más de 20% de la desviación estándar, mientras que en Chihara and Hesterberg (2018) se sugiere 2% de la desviación estándar. Dependiendo que tan crítico es que los intervalos estén bien calibrados podemos evaluar nuestro problema particular. Intervalos bootstrap de percentiles Retomemos nuestro ejemplo del valor total del precio de las casas. A través de remuestras bootstrap hemos verificado gráficamente que la distribución de remuestreo es ligeramente asimétrica (ver la figura de abajo). Anteriormente hemos calculado intervalos de confianza basados en supuestos normales por medio del error éstandar. Este intervalo está dado por ## [1] 203.4 232.3 y por construcción sabemos que es simétrico con respecto al valor estimado, pero como podemos ver la distribución de muestreo no es simétrica, lo cual podemos confirmar por ejemplo calculando el porcentaje de muestras bootstrap que caen por arriba y por debajo del intervalo construido: ## # A tibble: 1 × 2 ## prop_inf prop_sup ## <dbl> <dbl> ## 1 0.0192 0.026 los cuales se han calculado como el porcentaje de medias bootstrap por debajo (arriba) de la cota inferior (superior), y vemos que no coinciden con el nivel de confianza prestablecido (2.5% para cada extremo). Otra opción común que se usa específicamente cuando la distribución bootstrap no es muy cercana a la normal son los intervalos de percentiles bootstrap: Definición. El intervalo de percentiles bootstrap al 95% de confianza está dado por \\[[q_{0.025}, q_{0.975}]\\] donde \\(q_f\\) es el percentil \\(f\\) de la distribución bootstrap. Otros intervalos comunes son el de 80% o 90% de confianza, por ejemplo, que corresponden a \\([q_{0.10}, q_{0.90}]\\) y \\([q_{0.05}, q_{0.95}]\\). Ojo: intervalos de confianza muy alta (por ejemplo 99.5%) pueden tener mala calibración o ser muy variables en su longitud pues dependen del comportamiento en las colas de la distribución. Para el ejemplo de las casas, calcularíamos simplemente intervalo_95 <- totales_boot |> pull(total_boot) |> quantile(probs = c(0.025, 0.975)) / 1000 (intervalo_95) |> round(1) ## 2.5% 97.5% ## 204.3 232.5 que está en millones de dólares. Nótese que es similar al intervalo de error estándar. Otro punto interesante sobre los intervalos bootstrap de percentiles es que lidian naturalmente con la asímetría de la distribución bootstrap. Ilustramos esto con la distancia de las extremos del intervalo con respecto a la media: abs(intervalo_95 - total_est/1000) ## 2.5% 97.5% ## 13.53912 14.64674 Los intervalos de confianza nos permiten presentar un rango de valores posibles para el parámetro de interés. Esto es una notable diferencia con respecto a presentar sólo un candidato como estimador. Nuestra fuente de información son los datos. Es por esto que si vemos valores muy chicos (grandes) en nuestra muestra, el intervalo se tiene que extender a la izquierda (derecha) para compensar dichas observaciones. Explica por qué cuando la aproximación normal es apropiada, el intervalo de percentiles al 95% es muy similar al intervalo normal de 2 errores estándar. Ejemplo Consideramos los datos de propinas. Queremos estimar la media de cuentas totales para la comida y la cena. Podemos hacer bootstrap de cada grupo por separado: # en este ejemplo usamos rsample, pero puedes # escribir tu propio código library(rsample) propinas <- read_csv("data/propinas.csv") estimador <- function(split, ...){ muestra <- analysis(split) |> group_by(momento) muestra |> summarise(estimate = mean(cuenta_total), .groups = 'drop') |> mutate(term = momento) } intervalo_propinas_90 <- bootstraps(propinas, strata = momento, 1000) |> mutate(res_boot = map(splits, estimador)) |> int_pctl(res_boot, alpha = 0.10) |> mutate(across(where(is.numeric), round, 2)) intervalo_propinas_90 ## # A tibble: 2 × 6 ## term .lower .estimate .upper .alpha .method ## <chr> <dbl> <dbl> <dbl> <dbl> <chr> ## 1 Cena 19.8 20.8 22.0 0.1 percentile ## 2 Comida 15.6 17.1 18.8 0.1 percentile Nota: .estimate es la media de los valores de la estadística sobre las remuestras, no es el estimador original. De la tabla anterior inferimos que la media en la cuenta en la cena es más grande que la de la comida. Podemos graficar agregando los estimadores plugin: estimadores <- propinas |> group_by(momento) |> rename(term = momento) |> summarise(media = mean(cuenta_total)) ggplot(intervalo_propinas_90, aes(x = term)) + geom_linerange(aes(ymin = .lower, ymax = .upper)) + geom_point(data = estimadores, aes(y = media), colour = "red", size = 3) + xlab("Momento") + ylab("Media de cuenta total (dólares)") + labs(subtitle = "Intervalos de 90% para la media") Nótese que el bootstrap lo hicimos por separado en cada momento del día (por eso el argumento strata en la llamada a bootstraps): Justifica el procedimiento de hacer el bootstrap separado para cada grupo. ¿Qué supuestos acerca del muestreo se deben satisfacer? ¿Deben ser muestras aleatorias simples de cada momento del día, por ejemplo? ¿Qué harías si no fuera así, por ejemplo, si se escogieron al azar tickets de todos los disponibles en un periodo? Bootstrap para dos muestras En el ejemplo anterior consideramos cómo hacer bootstrap cuando tenemos muestras independientes. También podemos aplicarlo a estimadores que comparen directamente las dos muestras: Bootstrap para comparar poblaciones. Dadas muestras independientes de tamaños \\(m\\) y \\(n\\) de dos poblaciones: Extraer una remuestra de tamaño \\(m\\) con reemplazo de la primera muestra y una remuestra separada de tamaño \\(n\\) de la segunda muestra. Calcula la estadística que compara los dos grupos (por ejemplo, diferencia de medias) Repetir este proceso muchas veces (por ejemplo, 1000 - 10000). Construir la distribución bootstrap de la estadística. Examinar dispersión, sesgo y forma. Ejemplo Supongamos que queremos comparar directamente la media de la cuenta total en comida y cena. Podemos hacer: estimador_dif <- function(split, ...){ muestra <- analysis(split) |> group_by(momento) muestra |> summarise(estimate = mean(cuenta_total), .groups = "drop") |> pivot_wider(names_from = momento, values_from = estimate) |> mutate(estimate = Cena - Comida, term = "diferencia") } dist_boot <- bootstraps(propinas, strata = momento, 2000) |> mutate(res_boot = map(splits, estimador_dif)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) + xlab("Diferencia Comida vs Cena") g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 Y podemos calcular un intervalo de confianza para la diferencia de medias: dist_boot |> int_pctl(res_boot, alpha = 0.01) |> mutate(across(where(is.numeric), round, 2)) |> select(term, .lower, .upper) ## # A tibble: 1 × 3 ## term .lower .upper ## <chr> <dbl> <dbl> ## 1 diferencia 0.73 6.54 Que nos indica que con alta probabilidad las cuentas son más altas que en la cena que en la comida. La diferencia puede ir de un poco menos de un dólar hasta seis dólares con 99% de confianza. Datos pareados En otros casos, las muestras no son independientes y están pareadas. Por ejemplo, este es un estudio dende a 10 personas una noche se les dio una medicina para dormir y otra noche otra medicina. Se registraron cuántas horas de sueño extra comparados con un día donde no tomaron medicina. dormir <- sleep |> pivot_wider(names_from = group, names_prefix = "medicina_", values_from = extra) dormir ## # A tibble: 10 × 3 ## ID medicina_1 medicina_2 ## <fct> <dbl> <dbl> ## 1 1 0.7 1.9 ## 2 2 -1.6 0.8 ## 3 3 -0.2 1.1 ## 4 4 -1.2 0.1 ## 5 5 -0.1 -0.1 ## 6 6 3.4 4.4 ## 7 7 3.7 5.5 ## 8 8 0.8 1.6 ## 9 9 0 4.6 ## 10 10 2 3.4 En este caso, el bootstrap se hace sobre individuos, y quisiéramos comparar la medición de la medicina_1 con la medicina_2. Usaremos la media de al diferencia entre horas de sueño entre las dos medicinas. Nuestro estimador puntual es: estimador_dif <- dormir |> mutate(dif_2_menos_1 = medicina_2 - medicina_1) |> summarise(dif_media = mean(dif_2_menos_1)) estimador_dif ## # A tibble: 1 × 1 ## dif_media ## <dbl> ## 1 1.58 Esto indica que en promedio duermen hora y media más con la medicina 2 que con la medicina 1. Como hay variabilildad considerable en el número de horas extra de cada medicina dependiendo del individuo, es necesario hacer una intervalo de confianza para descartar que esta diferencia haya aparecido por azar debido a la variación muestral. Nótese que aquí no tenemos estratos, pues solo hay una muestra de individuo con dos mediciones. estimador_dif <- function(split, ...){ muestra <- analysis(split) muestra |> mutate(dif_2_menos_1 = medicina_2 - medicina_1) |> summarise(estimate = mean(dif_2_menos_1), .groups = "drop") |> mutate(term = "diferencia 2 vs 1") } dist_boot <- bootstraps(dormir, 2000) |> mutate(res_boot = map(splits, estimador_dif)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 Nuestro intervalo de percentiles al 90% es de dist_boot |> int_pctl(res_boot, 0.10) ## # A tibble: 1 × 6 ## term .lower .estimate .upper .alpha .method ## <chr> <dbl> <dbl> <dbl> <dbl> <chr> ## 1 diferencia 2 vs 1 1.04 1.57 2.22 0.1 percentile Lo que indica con alta probabilidad que la medicina 2 da entre 1 y 2 horas extras de sueño. Nota que en este ejemplo también podríamos hacer una prueba de hipótesis por permutaciones, suponiendo como hipótesis nula que las dos medicinas son equivalentes. Sin embargo, usualmente es más informativo presentar este tipo de intervalos para estimar la diferencia. Bootstrap y otras estadísticas El bootstrap es una técnica versátil. Un ejemplo son estimadores de razón, que tienen la forma \\[ \\hat{r} = \\frac{\\overline y}{\\overline x}\\] Por ejemplo, ¿cómo haríamos estimación para el procentaje de área area habitable de las casas en relación al tamaño del lote? Una manera de estimar esta cantidad es dividiendo la suma del área habitable de nuestra muestra y dividirlo entre la suma del área de los lotes de nuestra muestra, como en la fórmula anterior. Esta fórmula es más difícil pues tanto numerador como denominador tienen variabilidad, y estas dos cantidades no varían independientemente. Con el bootstrap podemos atacar estos problemas Ejemplo: estimadores de razón Nuestra muestra original es: set.seed(250) casas_muestra <- slice_sample(poblacion_casas, n = 200) El estimador de interés es: estimador_razon <- function(split, ...){ muestra <- analysis(split) muestra |> summarise(estimate = sum(area_habitable_sup_m2) / sum(area_lote_m2), .groups = "drop") |> mutate(term = "% area del lote construida") } Y nuestra estimación puntual es estimacion <- muestra_casas |> summarise(estimate = sum(area_habitable_sup_m2) / sum(area_lote_m2)) estimacion ## # A tibble: 1 × 1 ## estimate ## <dbl> ## 1 0.148 Es decir que en promedio, un poco más de 15% del lote total es ocupado por área habitable. Ahora hacemos bootstrap para construir un intervalo: dist_boot <- bootstraps(casas_muestra, 2000) |> mutate(res_boot = map(splits, estimador_razon)) g_1 <- ggplot(dist_boot |> unnest(res_boot), aes(x = estimate)) + geom_histogram(bins = 20) g_2 <- ggplot(dist_boot |> unnest(res_boot), aes(sample = estimate)) + geom_qq() + geom_qq_line(colour = 'red') g_1 + g_2 En este caso la cola derecha parece tener menos dispersión que una distribución normal. Usamos un intervalo de percentiles para obtener: dist_boot |> int_pctl(res_boot) |> mutate(estimador = estimacion$estimate) |> rename(media_boot = .estimate) |> mutate(bias = media_boot - estimador) |> pivot_longer(is_double) |> mutate(value = round(value, 3)) ## # A tibble: 6 × 4 ## term .method name value ## <chr> <chr> <chr> <dbl> ## 1 % area del lote construida percentile .lower 0.121 ## 2 % area del lote construida percentile media_boot 0.142 ## 3 % area del lote construida percentile .upper 0.159 ## 4 % area del lote construida percentile .alpha 0.05 ## 5 % area del lote construida percentile estimador 0.148 ## 6 % area del lote construida percentile bias -0.006 De modo que en esta zona, entre 12% y 16% de toda el área disponible es ocupada por área habitable: estas son casas que tienen jardines o terrenos, garage relativamente grandes. Ejemplo: suavizadores Podemos usar el bootstrap para juzgar la variabilidad de un suavizador, que consideramos como nuestra estadística: graf_casas <- function(data){ ggplot(data |> filter(calidad_gral < 7), aes(x = area_habitable_sup_m2)) + geom_point(aes(y = precio_m2_miles), alpha = 0.75) + geom_smooth(aes(y = precio_m2_miles), method = "loess", span = 0.7, se = FALSE, method.args = list(degree = 1, family = "symmetric")) } graf_casas(casas_muestra) Podemos hacer bootstrap para juzgar la estabilidad del suavizador: suaviza_boot <- function(x, data){ # remuestreo muestra_boot <- slice_sample(data, prop = 1, replace = T) ajuste <- loess(precio_m2_miles ~ area_habitable_sup_m2, data = muestra_boot, degree = 1, span = 0.7, family = "symmetric") datos_grafica <- tibble(area_habitable_sup_m2 = seq(25, 250, 5)) ajustados <- predict(ajuste, newdata = datos_grafica) datos_grafica |> mutate(ajustados = ajustados) |> mutate(rep = x) } reps <- map(1:10, ~ suaviza_boot(.x, casas_muestra |> filter(calidad_gral < 7))) |> bind_rows() # ojo: la rutina loess no tienen soporte para extrapolación graf_casas(casas_muestra) + geom_line(data = reps, aes(y = ajustados, group = rep), alpha = 1, colour = "red") Donde vemos que algunas cambios de pendiente del suavizador original no son muy interpretables (por ejemplo, para áreas chicas) y alta variabilidad en general en los extremos. Podemos hacer más iteraciones para calcular bandas de confianza: reps <- map(1:200, ~ suaviza_boot(.x, casas_muestra |> filter(calidad_gral < 7))) |> bind_rows() # ojo: la rutina loess no tienen soporte para extrapolación graf_casas(casas_muestra) + geom_line(data = reps, aes(y = ajustados, group = rep), alpha = 0.2, colour = "red") Donde observamos cómo tenemos incertidumbre en cuanto al nivel y forma de las curvas en los extremos de los datos (casas grandes y chicas), lo cual es natural. Aunque podemos resumir para hacer bandas de confianza, mostrar remuestras de esta manera es informativo: por ejempo: vemos cómo es probable también que para casas de menos de 70 metros cuadrados el precio por metro cuadrado no cambia tanto (líneas constantes) Bootstrap y estimadores complejos: tablas de perfiles Podemos regresar al ejemplo de la primera sesión donde calculamos perfiles de los tomadores de distintos tés: en bolsa, suelto, o combinados. Caundo hacemos estos tipos de análisis no es raro que los prefiles tengan variabilidad considerable que es necesario cuantificar. price tea bag tea bag+unpackaged unpackaged promedio p_upscale -0.71 -0.28 0.98 28 p_variable -0.12 0.44 -0.31 36 p_cheap 0.3 -0.53 0.23 2 p_branded 0.62 -0.16 -0.45 25 p_private label 0.72 -0.22 -0.49 5 p_unknown 1.58 -0.58 -1 3 Hacemos bootstrap sobre toda la muestra, y repetimos exactamente el mismo proceso de construción de perfiles: boot_perfiles <- map(1:1000, function(x){ te_boot <- te |> slice_sample(prop = 1, replace = TRUE) calcular_perfiles(te_boot) |> mutate(rep = x) }) |> bind_rows() Ahora resumimos y graficamos, esta vez de manera distinta: resumen_perfiles <- boot_perfiles |> group_by(how, price) |> summarise(perfil_media = mean(perfil), ymax = quantile(perfil, 0.9), ymin = quantile(perfil, 0.10)) resumen_bolsa <- resumen_perfiles |> ungroup() |> filter(how == "tea bag") |> select(price, perfil_bolsa = perfil_media) resumen_perfiles <- resumen_perfiles |> left_join(resumen_bolsa) |> ungroup() |> mutate(price = fct_reorder(price, perfil_bolsa)) ggplot(resumen_perfiles, aes(x = price, y = perfil_media, ymax = ymax, ymin = ymin)) + geom_point(colour = "red") + geom_linerange() + facet_wrap(~how) + coord_flip() + geom_hline(yintercept = 0, colour = "gray") + ylab("Perfil") + xlab("Precio") Nótese una deficiencia clara del bootstrap: para los que compran té suelto, en la muestra no existen personas que desconocen de dónde provienen su té (No sabe/No contestó). Esto produce un intervalo colapsado en 0 que no es razonable. Podemos remediar esto de varias maneras: quitando del análisis los que no sabe o no contestaron, agrupando en otra categoría, usando un modelo, o regularizar usando proporciones calculadas con conteos modificados: por ejemplo, agregando un caso de cada combinación (agregaría 18 personas “falsas” a una muestra de 290 personas). Bootstrap y muestras complejas La necesidad de estimaciones confiables junto con el uso eficiente de recursos conllevan a diseños de muestras complejas. Estos diseños típicamente usan las siguientes técnicas: muestreo sin reemplazo de una población finita, muestreo sistemático, estratificación, conglomerados, ajustes a no-respuesta, postestratificación. Como consecuencia, los valores de la muestra suelen no ser independientes y los análisis de los mismos dependerá del diseño de la muestra. Comenzaremos con definiciones para entender el problema. set.seed(3872999) n_escuelas <- 5000 tipo <- sample(c("rural", "urbano", "indigena"), n_escuelas, replace = TRUE, prob = c(0.3, 0.5, 0.2)) escuela <- tibble(ind_escuela = 1:n_escuelas, tipo, media_tipo = case_when(tipo == "urbano" ~ 550, tipo == "rural" ~ 400, TRUE ~ 350), media_escuela = rnorm(n_escuelas, media_tipo, 30), n_estudiantes = round(rnorm(n_escuelas, 30, 4))) estudiantes <- uncount(escuela, n_estudiantes, .id = "id_estudiante") %>% rowwise() %>% mutate(calif = rnorm(1, media_escuela, 70)) %>% ungroup() Imaginemos que tenemos una población de 5000 escuelas, y queremos estimar la media de las calificaciones de los estudiantes en una prueba. head(estudiantes) ## # A tibble: 6 × 6 ## ind_escuela tipo media_tipo media_escuela id_estudiante calif ## <int> <chr> <dbl> <dbl> <int> <dbl> ## 1 1 urbano 550 561. 1 488. ## 2 1 urbano 550 561. 2 574. ## 3 1 urbano 550 561. 3 456. ## 4 1 urbano 550 561. 4 507. ## 5 1 urbano 550 561. 5 598. ## 6 1 urbano 550 561. 6 527. La primera idea sería tomar una muestra aleatoria (MAS, muestreo aleatorio simple), donde todos los estudiantes tienen igual probabilidad de ser seleccionados. Con estas condiciones el presupuesto alcanza para seleccionar a 60 estudiantes, hacemos esto y calculamos la media. muestra <- slice_sample(estudiantes, n = 60) round(mean(muestra$calif), 2) ## [1] 466.73 Este número es muy cercano a la media verdadera de la población: 466.51, pero esta es una de muchas posibles muestras. medias_mas <- rerun(1000, mean(sample(estudiantes$calif, 60))) %>% flatten_dbl() sd(medias_mas) ## [1] 14.75242 hist_mas <- ggplot(tibble(medias_mas), aes(x = medias_mas)) + geom_histogram(binwidth = 10) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_mas <- ggplot(tibble(medias_mas), aes(sample = medias_mas)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_mas + qq_mas Algunas de las muestras generan valores alejados de la verdadera media, para minimizar la probabilidad de seleccionar muestras que lleven a estimaciones alejadas del verdadero valor poblacional podríamos tomar muestras más grandes. Pero usualmente los costos limitan el tamaño de muestra. Una alternativa es estratificar, supongamos que sabemos el tipo de cada escuela (urbana, rural o indígena) y sabemos también que la calificación de los estudiantes de escuelas urbanas tiende a ser distinta a las calificaciones que los estudiantes de escuelas rurales o indígenas. En esta caso un diseño más eficiente consiste en tomar muestras independientes dentro de cada estrato. muestra_estrat <- estudiantes %>% group_by(tipo) %>% sample_frac(0.0004) dim(muestra_estrat) ## [1] 60 6 muestrea_estrat <- function(){ muestra <- estudiantes %>% group_by(tipo) %>% sample_frac(0.0004) mean(muestra$calif) } medias_estrat <- rerun(1000, muestrea_estrat()) %>% flatten_dbl() Notamos que la distribución muestral está más concentrada que el caso de MAS, el error estándar se reduce de 14.75 a 10.2 hist_estrat <- ggplot(tibble(medias_estrat), aes(x = medias_estrat)) + geom_histogram(binwidth = 6) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_estrat <- ggplot(tibble(medias_estrat), aes(sample = medias_estrat)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_estrat + qq_estrat Entonces, la estratificación nos sirve para reducir el error estándar de las estimaciones. Otro procedimiento común en muestreo es introducir conglomerados, a diferencia del muestreo estratificado, el propósito principal de los conglomerados es reducir costos. Veamos cuantas escuelas tendría que visitar en una muestra dada (con diseño estratificado). n_distinct(muestra_estrat$ind_escuela) ## [1] 60 Es fácil ver que visitar una escuela para aplicar solo uno o dos exámenes no es muy eficiente en cuestión de costos. Es por ello que se suelen tomar muestras considerando conglomerados naturales, en este caso la escuela. En nuestro ejemplo es razonable suponer que una parte grande del costo del muestreo sea mandar al examinador a la escuela, y que una vez en la escuela el costo de evaluar a todo sexto, en lugar de a un único alumno, es relativamente bajo. Podemos imaginar que considerando estos costos por visita de escuela nos alcance para visitar 40 escuelas y en cada una examinar a todos los estudiantes. muestra_escuelas <- escuela %>% group_by(tipo) %>% sample_frac(size = 0.008) muestra_cgl <- muestra_escuelas %>% left_join(estudiantes) mean(muestra_cgl$calif) ## [1] 462.5677 muestrea_cgl <- function(){ muestra_escuelas <- escuela %>% group_by(tipo) %>% sample_frac(size = 0.008) muestra_cgl <- muestra_escuelas %>% left_join(estudiantes, by = c("ind_escuela", "tipo")) mean(muestra_cgl$calif) } medias_cgl <- rerun(1000, muestrea_cgl()) %>% flatten_dbl() En este caso, el número de estudiantes examinados es mucho mayor que en MAS y muestreo estratificado, notemos que el número de estudiantes evaluados cambiará de muestra a muestra dependiendo del número de alumnos en las escuelas seleccionadas. sd(medias_cgl) ## [1] 5.337327 hist_cgl <- ggplot(tibble(medias_cgl), aes(x = medias_cgl)) + geom_histogram(binwidth = 6) + geom_vline(xintercept = mean(estudiantes$calif), color = "red") + xlim(410, 520) qq_cgl <- ggplot(tibble(medias_cgl), aes(sample = medias_cgl)) + geom_qq(distribution = stats::qunif) + ylim(410, 520) hist_cgl + qq_cgl Ejemplo: ENIGH La complejidad de los diseños de encuestas conlleva a que el cálculo de errores estándar sea muy complicado, para atacar este problema hay dos técnicas básicas: 1) un enfoque analítico usando linearización, 2) métodos de remuestreo como bootstrap. El incremento en el poder de cómputo ha favorecido los métodos de remuestreo pues la linearización requiere del desarrollo de una fórmula para cada estimación y supuestos adicionales para simplificar. En 1988 Rao and Wu (1988) propusieron un método de bootstrap para diseños estratificados multietápicos con reemplazo de UPMs (Unidades Primarias de Muestreo) que describimos a continuación. ENIGH. Usaremos como ejemplo la Encuesta Nacional de Ingresos y Gastos de los Hogares, ENIGH 2018 (INEGI 2018), esta encuesta usa un diseño de conglomerados estratificado. Antes de proceder a bootstrap debemos entender como se seleccionaron los datos, esto es, el diseño de la muestra: Unidad primaria de muestreo (UPM). Las UPMs están constituidas por agrupaciones de viviendas. Se les denomina unidades primarias pues corresponden a la primera etapa de selección, las unidades secundarias (USMs) serían los hogares. Estratificación. Los estratos se construyen en base a estado, ámbito (urbano, complemento urbano, rural), características sociodemográficas de los habitantes de las viviendas, características físicas y equipamiento. El proceso de estratificación resulta en 888 subestratos en todo el ámbito nacional. La selección de la muestra es independiente para cada estrato, y una vez que se obtiene la muestra se calculan los factores de expansión que reflejan las distintas probabilidades de selección. Después se llevan a cabo ajustes por no respuesta y por proyección (calibración), esta última busca que distintos dominios de la muestra coincidan con la proyección de población de INEGI. concentrado_hogar <- read_csv(here::here("data", "conjunto_de_datos_enigh_2018_ns_csv", "conjunto_de_datos_concentradohogar_enigh_2018_ns", "conjunto_de_datos", "conjunto_de_datos_concentradohogar_enigh_2018_ns.csv")) # seleccionar variable de ingreso corriente hogar <- concentrado_hogar %>% mutate( upm = as.integer(upm), edo = str_sub(ubica_geo, 1, 2) ) %>% select(folioviv, foliohog, est_dis, upm, factor, ing_cor, edad_jefe, edo) %>% group_by(est_dis) %>% mutate(n = n_distinct(upm)) %>% # número de upms por estrato ungroup() hogar ## # A tibble: 74,647 × 9 ## folioviv foliohog est_dis upm factor ing_cor edad_jefe edo n ## <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr> <int> ## 1 100013601 1 2 1 175 76404. 74 10 106 ## 2 100013602 1 2 1 175 42988. 48 10 106 ## 3 100013603 1 2 1 175 580698. 39 10 106 ## 4 100013604 1 2 1 175 46253. 70 10 106 ## 5 100013606 1 2 1 175 53837. 51 10 106 ## 6 100026701 1 2 2 189 237743. 41 10 106 ## 7 100026703 1 2 2 189 32607. 57 10 106 ## 8 100026704 1 2 2 189 169918. 53 10 106 ## 9 100026706 1 2 2 189 17311. 30 10 106 ## 10 100027201 1 2 3 186 120488. 69 10 106 ## # ℹ 74,637 more rows Para el cálculo de estadísticos debemos usar los factores de expansión, por ejemplo el ingreso trimestral total sería: sum(hogar$factor * hogar$ing_cor / 1000) ## [1] 1723700566 y ingreso trimestral medio (miles pesos) sum(hogar$factor * hogar$ing_cor / 1000) / sum(hogar$factor) ## [1] 49.61029 La estimación del error estándar, por otro lado, no es sencilla y requiere usar aproximaciones, en la metodología de INEGI proponen una aproximación con series de Taylor. Figure 5.3: Extracto de estimación de errores de muestreo, ENIGH 2018. Veamos ahora como calcular el error estándar siguiendo el bootstrap de Rao y Wu: En cada estrato se seleccionan con reemplazo \\(m_h\\) UPMs de las \\(n_h\\) de la muestra original. Denotamos por \\(m_{hi}^*\\) el número de veces que se seleccionó la UPM \\(i\\) en el estrato \\(h\\) (de tal manera que \\(\\sum m_{hi}^*=m_h\\)). Creamos una replicación del ponderador correspondiente a la \\(k\\)-ésima unidad (USM) como: \\[d_k^*=d_k \\bigg[\\bigg(1-\\sqrt{\\frac{m_h}{n_h - 1}}\\bigg) + \\bigg(\\sqrt{\\frac{m_h}{n_h - 1}}\\frac{n_h}{m_h}m_{h}^*\\bigg)\\bigg]\\] donde \\(d_k\\) es el inverso de la probabilidad de selección. Si \\(m_h <(n_h -1)\\) todos los pesos definidos de esta manera serán no negativos. Calculamos el peso final \\(w_k^*\\) aplicando a \\(d_k^*\\) los mismos ajustes que se hicieron a los ponderadores originales. Calculamos el estadístico de interés \\(\\hat{\\theta}\\) usando los ponderadores \\(w_k^*\\) en lugar de los originales \\(w_k\\). Repetimos los pasos 1 y 2 \\(B\\) veces para obtener \\(\\hat{\\theta}^{*1},\\hat{\\theta}^{*2},...,\\hat{\\theta}^{*B}\\). Calculamos el error estándar como: \\[\\hat{\\textsf{se}}_B = \\bigg\\{\\frac{\\sum_{b=1}^B[\\hat{\\theta}^*(b)-\\hat{\\theta}^*(\\cdot)]^2 }{B}\\bigg\\}^{1/2}\\] En principio podemos elegir cualquier valor de \\(m_h \\geq 1\\), el más común es elegir \\(m_h=n_h-1\\), en este caso: \\[d_k^*=d_k \\frac{n_h}{n_h-1}m_{hi}^*\\] en este escenario las unidades que no se incluyen en la muestra tienen un valor de cero como ponderador. Si elegimos \\(n_h \\ne n_h-1\\) las unidades que no están en la muestra tienen ponderador distinto a cero, si \\(m_h=n_h\\) el ponderador podría tomar valores negativos. Implementemos el bootstrap de Rao y Wu a la ENIGH, usaremos \\(m_h=n_h-1\\) # creamos una tabla con los estratos y upms est_upm <- hogar %>% distinct(est_dis, upm, n) %>% arrange(est_dis, upm) hogar_factor <- est_upm %>% group_by(est_dis) %>% # dentro de cada estrato tomamos muestra (n_h-1) sample_n(size = first(n) - 1, replace = TRUE) %>% add_count(est_dis, upm, name = "m_hi") %>% # calculamos m_hi* left_join(hogar, by = c("est_dis", "upm", "n")) |> mutate(factor_b = factor * m_hi * n / (n - 1)) # unimos los pasos anteriores en una función para replicar en cada muestra bootstrap svy_boot <- function(est_upm, hogar){ m_hi <- est_upm %>% group_split(est_dis) %>% map(~sample(.$upm, size = first(.$n) - 1, replace = TRUE)) %>% flatten_int() %>% plyr::count() %>% select(upm = x, m_h = freq) m_hi %>% left_join(hogar, by = c("upm")) %>% mutate(factor_b = factor * m_h * n / (n - 1)) } set.seed(1038984) boot_rep <- rerun(500, svy_boot(est_upm, hogar)) # Aplicación a ingreso medio wtd_mean <- function(w, x, na.rm = FALSE) { sum(w * x, na.rm = na.rm) / sum(w, na.rm = na.rm) } # La media es: hogar %>% summarise(media = wtd_mean(factor, ing_cor)) ## # A tibble: 1 × 1 ## media ## <dbl> ## 1 49610. Y el error estándar: map_dbl(boot_rep, ~wtd_mean(w = .$factor_b, x = .$ing_cor)) %>% quantile(c(0.025, 0.975)) ## 2.5% 97.5% ## 48742.12 50519.02 El método bootstrap está implementado en el paquete survey y más recientemente en srvyr que es una versión tidy que utiliza las funciones en survey. Podemos comparar nuestros resultados con la implementación en survey. # 1. Definimos el diseño de la encuesta library(survey) library(srvyr) enigh_design <- hogar %>% as_survey_design(ids = upm, weights = factor, strata = est_dis) # 2. Elegimos bootstrap como el método para el cálculo de errores estándar set.seed(7398731) enigh_boot <- enigh_design %>% as_survey_rep(type = "bootstrap", replicates = 500) # 3. Así calculamos la media enigh_boot %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor)) ## # A tibble: 1 × 2 ## mean_ingcor mean_ingcor_se ## <dbl> <dbl> ## 1 49610. 468. enigh_boot %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor, vartype = "ci")) ## # A tibble: 1 × 3 ## mean_ingcor mean_ingcor_low mean_ingcor_upp ## <dbl> <dbl> <dbl> ## 1 49610. 48690. 50530. # por estado enigh_boot %>% group_by(edo) %>% srvyr::summarise(mean_ingcor = survey_mean(ing_cor)) ## # A tibble: 30 × 3 ## edo mean_ingcor mean_ingcor_se ## <chr> <dbl> <dbl> ## 1 10 50161. 995. ## 2 11 46142. 1241. ## 3 12 29334. 1063. ## 4 13 38783. 1019. ## 5 14 60541. 1924. ## 6 15 48013. 1359. ## 7 16 42653. 1393. ## 8 17 42973. 1601. ## 9 18 48148. 1967. ## 10 19 68959. 4062. ## # ℹ 20 more rows Resumiendo: El bootstrap de Rao y Wu genera un estimador consistente y aproximadamente insesgado de la varianza de estadísticos no lineales y para la varianza de un cuantil. Este método supone que la seleccion de UPMs es con reemplazo; hay variaciones del estimador bootstrap de Rao y Wu que extienden el método que acabamos de estudiar; sin embargo, es común ignorar este aspecto, por ejemplo Mach et al estudian las propiedades del estimador de varianza bootstrap de Rao y Wu cuando la muestra se seleccionó sin reemplazo. Bootstrap en R Es común crear nuestras propias funciones cuando usamos bootstrap, sin embargo, en R también hay alternativas que pueden resultar convenientes, mencionamos 3: El paquete rsample (forma parte de la colección tidymodels) y tiene una función bootstraps() que regresa un arreglo cuadrangular (tibble, data.frame) que incluye una columna con las muestras bootstrap y un identificador del número y tipo de muestra. Veamos un ejemplo donde seleccionamos muestras del conjunto de datos muestra_computos que contiene 10,000 observaciones. library(rsample) load("data/election_2012.rda") muestra_computos <- slice_sample(election_2012, n = 10000) muestra_computos ## # A tibble: 10,000 × 23 ## state_code state_name state_abbr district_loc_17 district_fed_17 polling_id ## <chr> <chr> <chr> <int> <int> <int> ## 1 18 Nayarit NAY 11 2 86709 ## 2 27 Tabasco TAB 17 5 122035 ## 3 15 México MEX 7 35 75477 ## 4 27 Tabasco TAB 19 5 122262 ## 5 17 Morelos MOR 6 2 84733 ## 6 07 Chiapas CHPS 22 5 15376 ## 7 14 Jalisco JAL 2 2 52634 ## 8 08 Chihuahua CHIH 7 4 19097 ## 9 14 Jalisco JAL 20 20 60549 ## 10 13 Hidalgo HGO 11 4 50221 ## # ℹ 9,990 more rows ## # ℹ 17 more variables: section <int>, region <chr>, polling_type <chr>, ## # section_type <chr>, pri_pvem <int>, pan <int>, panal <int>, ## # prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>, ## # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>, ## # otros_pct <dbl>, winner <chr> Generamos 100 muestras bootstrap, y la función nos regresa un arreglo con 100 renglones, cada uno corresponde a una muestra bootstrap. set.seed(839287482) computos_boot <- bootstraps(muestra_computos, times = 100) computos_boot ## # Bootstrap sampling ## # A tibble: 100 × 2 ## splits id ## <list> <chr> ## 1 <split [10000/3647]> Bootstrap001 ## 2 <split [10000/3623]> Bootstrap002 ## 3 <split [10000/3724]> Bootstrap003 ## 4 <split [10000/3682]> Bootstrap004 ## 5 <split [10000/3696]> Bootstrap005 ## 6 <split [10000/3716]> Bootstrap006 ## 7 <split [10000/3679]> Bootstrap007 ## 8 <split [10000/3734]> Bootstrap008 ## 9 <split [10000/3632]> Bootstrap009 ## 10 <split [10000/3692]> Bootstrap010 ## # ℹ 90 more rows La columna splits tiene información de las muestras seleccionadas, para la primera vemos que de 10,000 observaciones en la muestra original la primera muestra bootstrap contiene 10000-3647=6353. first_computos_boot <- computos_boot$splits[[1]] first_computos_boot ## <Analysis/Assess/Total> ## <10000/3647/10000> Y podemos obtener los datos de la muestra bootstrap con la función as.data.frame() as.data.frame(first_computos_boot) ## # A tibble: 10,000 × 23 ## state_code state_name state_abbr district_loc_17 district_fed_17 polling_id ## <chr> <chr> <chr> <int> <int> <int> ## 1 07 Chiapas CHPS 13 9 13397 ## 2 14 Jalisco JAL 15 15 58404 ## 3 09 Ciudad de M… CDMX 11 13 26471 ## 4 17 Morelos MOR 7 3 84909 ## 5 25 Sinaloa SIN 11 3 114038 ## 6 11 Guanajuato GTO 16 12 41506 ## 7 29 Tlaxcala TLAX 6 3 128006 ## 8 02 Baja Califo… BC 8 5 3901 ## 9 02 Baja Califo… BC 9 5 3779 ## 10 08 Chihuahua CHIH 19 5 19536 ## # ℹ 9,990 more rows ## # ℹ 17 more variables: section <int>, region <chr>, polling_type <chr>, ## # section_type <chr>, pri_pvem <int>, pan <int>, panal <int>, ## # prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>, ## # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>, ## # otros_pct <dbl>, winner <chr> Una de las principales ventajas de usar este paquete es que es eficiente en el uso de memoria. library(pryr) object_size(muestra_computos) ## 1.41 MB object_size(computos_boot) ## 5.49 MB # tamaño por muestra object_size(computos_boot)/nrow(computos_boot) ## 54.92 kB # el incremento en tamaño es << 1000 as.numeric(object_size(computos_boot)/object_size(muestra_computos)) ## [1] 3.895024 Adicionalmente incluye funciones para el cálculo de intervalos bootstrap: intervalo_propinas_90 <- bootstraps(propinas, strata = momento, 1000) |> mutate(res_boot = map(splits, estimador)) |> int_pctl(res_boot, alpha = 0.10) El paquete boot está asociado al libro Bootstrap Methods and Their Applications (Davison and Hinkley (1997)) y tiene, entre otras, funciones para calcular replicaciones bootstrap y para construir intervalos de confianza usando bootstrap: calculo de replicaciones bootstrap con la función boot(), intervalos normales, de percentiles y \\(BC_a\\) con la función boot.ci(), intevalos ABC con la función `abc.ci(). El paquete bootstrap contiene datos usados en Efron and Tibshirani (1993), y la implementación de funciones para calcular replicaciones y construir intervalos de confianza: calculo de replicaciones bootstrap con la función bootstrap(), intervalos \\(BC_a\\) con la función bcanon(), intevalos ABC con la función abcnon(). Conclusiones y observaciones El principio fundamental del Bootstrap no paramétrico es que podemos estimar la distribución poblacional con la distribución empírica. Por tanto para hacer inferencia tomamos muestras con reemplazo de la muestra y analizamos la variación de la estadística de interés a lo largo de las remuestras. El bootstrap nos da la posibilidad de crear intervalos de confianza cuando no contamos con fórmulas para hacerlo de manera analítica y sin supuestos distribucionales de la población. Hay muchas opciones para construir intervalos bootstrap, los que tienen mejores propiedades son los intervalos \\(BC_a\\), sin embargo, los más comunes son los intervalos normales con error estándar bootstrap y los intervalos de percentiles de la distribución bootstrap. Antes de hacer intervalos normales vale la pena graficar la distribución bootstrap y evaluar si el supuesto de normalidad es razonable. En cuanto al número de muestras bootstrap se recomienda al menos \\(1,000\\) al hacer pruebas, y \\(10,000\\) o \\(15,000\\) para los resultados finales, sobre todo cuando se hacen intervalos de confianza de percentiles. La función de distribución empírica es una mala estimación en las colas de las distribuciones, por lo que es difícil construir intervalos de confianza (usando bootstrap no paramétrico) para estadísticas que dependen mucho de las colas. O en general para estadísticas que dependen de un número chico de observaciones de una muestra grande. Referencias "],["estimación-por-máxima-verosimilitud.html", "Sección 6 Estimación por máxima verosimilitud Introducción a estimación por máxima verosimilitud Máxima verosimilitud para observaciones continuas Aspectos numéricos Máxima verosimilitud para más de un parámetro", " Sección 6 Estimación por máxima verosimilitud Los ejemplos que hemos visto han sido todos de estimadores plug-in (o por sustitución): si queremos saber una cantidad poblacional, y tenemos una muestra dada, entonces calculamos la estadística de interés como si la muestra fuera la población. Por ejemplo, para estimar la mediana poblacional usamos la mediana muestral, si queremos estimar la media poblacional usamos la media muestral, y así sucesivamente. Estos estimadores usualmente dan resultados razonables (pero hay que checar usando muestra bootstraps, por ejemplo, y pensar lo que estamos haciendo). Cuando sabemos más acerca de la población y usamos un modelo teórico es posible hacer más: dependiendo de qué cantidades se quieren estimar, podemos construir estimadores que sean óptimos en algún sentido siempre y cuando se cumplan los supuestos teóricos, como veremos ahora. Por ejemplo: ¿deberíamos estimar el centro de una distribución simétrica con la media o con la mediana, o quizá con una media recortada? En esta parte construiremos la teoría básica de estimación cuando trabajamos con modelos teóricos conocidos. El objetivo es entender las ideas básicas de estos procedimientos, y cómo evaluar sus resultados. Recordatorio: las ventajas de usar modelos teóricos para describir distribuciones de datos está en que es posible comprimir más eficientemente la información, es posible construir modelos más complejos juntando varios de estos modelos y de sus dependencias, y de que es posible hacer más teoría útil que nos guíe. La desventaja es que es necesario que esos supuestos teóricos sean razonables. Introducción a estimación por máxima verosimilitud Uno de los procedimientos más estándar en esta situación es el método de máxima verosimilitud. Los estimadores de máxima verosimilitud tienen propiedades convenientes, y dan en general resultados razonables siempre y cuando los supuestos sean razonables. Máxima verosimilitud es un proceso intuitivo, y consiste en aprender o estimar valores de parámetros desconocidos suponiendo para los datos su explicación más probable. Para esto, usando supuestos y modelos, requeriremos calcular la probabilidad de un conjunto de observaciones. Ejemplo. Adaptado de (Chihara and Hesterberg 2018). Supongamos que una máquina produce dos tipos de bolsas de 25 galletas: la mitad de las veces produce una bolsa con 5 galletas de avena y 20 de chispas de chocolate, y la otra mitad produce bolsas con 23 galletas de avena y 2 de chispas de chocolate. Tomamos una bolsa, y no sabemos qué tipo de bolsa es (parámetro desconocido). Extraemos al azar una de las galletas, y es de chispas de chocolate (observación). Por máxima verosimilitud, inferimos que la bolsa que estamos considerando tiene 5 galletas de avena. Esto es porque es más probable observar una galleta de chispas en las bolsas que contienen 5 galletas de avena que en las bolsas que contienen 23 galletas de avena. Podemos cuantificar la probabilidad que “acertemos” en nuestra inferencia. Cómo se aprecia en el ejemplo anterior, el esquema general es: Existe un proceso del que podemos obtener observaciones de algún sistema o población real. Tenemos un modelo probabilístico que dice cómo se producen esas observaciones a partir del sistema o población real. Usualmente este modelo tiene algunas cantidades que no conocemos, que rigen el proceso y cómo se relaciona el proceso con las observaciones. Nuestro propósito es: Extraemos observaciones del proceso \\[x_1, x_2, \\ldots, x_n.\\] Queremos aprender de los parámetros desconocidos del proceso para calcular cantidades de interés acerca del sistema o población real En principio, los modelos que consideramos pueden ser complicados y tener varias partes o parámetros. Veamos primero un ejemplo clásico con un solo parámetro, y cómo lo resolveríamos usando máxima verosimilitud. Nota: Cuando decimos muestra en general nos referimos a observaciones independientes obtenidas del mismo proceso (ver la sección de distribución de muestreo) para ver qué significa que sea independientes. Este esquema es un supuesto que simplifica mucho los cálculos, como discutimos antes. Muchas veces este supuesto sale del diseño de la muestra o del estudio, pero en todo caso es importante considerar si es razonable o no para nuestro problema particular. Denotemos por \\(f(x; \\theta)\\) la función de densidad para una variable aleatoria continua con párametro asociado \\(\\theta.\\) Denotamos por \\(X_1, \\ldots, X_n,\\) una muestra aleatoria de \\(n\\) observaciones de esta distribución y por \\(x_1, \\ldots, x_n\\) los valores observados de esta muestra aleatoria. Ejemplo. Supongamos que queremos saber qué proporción de registros de una base de datos tiene algún error menor de captura. No podemos revisar todos los registros, así que tomamos una muestra de 8 registros, escogiendo uno por uno al azar de manera independiente. Revisamos los 8 registros, y obtenemos los siguientes datos: \\[x_1 = 0, x_2 = 1, x_3 = 0, x_4 = 0, x_5 =1, x_6 =0, x_7 =0, x_8 =0\\] donde 1 indica un error menor. Encontramos dos errores menores. ¿Cómo estimamos el número de registros con errores leves en la base de datos? Ya sabemos una respuesta razonable para nuestro estimador puntual, que sería \\(\\hat{p}=2/8=0.25\\). Veamos cómo se obtendría por máxima verosimilitud. Según el proceso con el que se construyó la muestra, debemos dar una probabilidad de observar los 2 errores en 8 registros. Supongamos que en realidad existe una proporción \\(p\\) de que un registro tenga un error. Entonces calculamos Probabilidad de observar la muestra: \\[P(X_1 = 0, X_2 = 1, X_3 = 0, X_4 = 0, X_5 =1, X_6 =0, X_7 =0, X_8 =0)\\] es igual a \\[P(X_1 = 0)P(X_2 = 1)P(X_3 = 0)P( X_4 = 0)P(X_5 =1)P(X_6 =0)P(X_7 =0)P(X_8 =0)\\] pues la probabilidad de que cada observación sea 0 o 1 no depende de las observaciones restantes (la muestra se extrajo de manera independiente). Esta última cantidad tiene un parámetro que no conocemos: la proporcion \\(p\\) de registros con errores. Así que lo denotamos como una cantidad desconocida \\(p\\). Nótese entonces que \\(P(X_2=1) = p\\), \\(P(X_3=0) = 1-p\\) y así sucesivamente, así que la cantidad de arriba es igual a \\[(1-p)p(1-p)(1-p)p(1-p)(1-p)(1-p) \\] que se simplifica a \\[ \\mathcal{L}(p) = p^2(1-p)^6\\] Ahora la idea es encontrar la p que maximiza la probabilidad de lo que observamos. En este caso se puede hacer con cálculo, pero vamos a ver una gráfica de esta función y cómo resolverla de manera numérica. verosimilitud <- function(p){ p^2 * (1-p)^6 } dat_verosim <- tibble(x = seq(0,1, 0.001)) %>% mutate(prob = map_dbl(x, verosimilitud)) ggplot(dat_verosim, aes(x = x, y = prob)) + geom_line() + geom_vline(xintercept = 0.25, color = "red") + xlab("p") Nótese que esta gráfica: Depende de los datos, que pensamos fijos. Cuando cambiamos la \\(p\\), la probabilidad de observar la muestra cambia. Nos interesa ver las regiones donde la probabilidad es relativamente alta. El máximo está en 0.25. Así que el estimador de máxima verosimilitud es \\(\\hat{p} = 0.25\\), que es también el estimador usual de plugin en este caso. Para uniformizar la notación con el caso continuo que veremos más adelante, usaremos la notación \\[P(X=x) = f(x)\\] donde \\(f\\) es la función de densidad (en este caso, función de masa de probabilidad) de \\(X\\). Si esta función depende de un parámetro, escribimos \\[f(x ;\\theta)\\] Definición. Sean \\(X_1, \\ldots, X_n\\) una muestra de una densidad \\(f(x; \\theta)\\) y sean \\(x_1,x_2,\\ldots, x_n\\) los valores observados. La función de verosimilitud del párametro de interés \\(\\theta\\) está definida por \\[\\begin{align} \\mathcal{L}(\\theta; x_1, \\ldots, x_n) = \\prod_{i = 1}^n f(x_i; \\theta). \\end{align}\\] Esta función nos dice qué tan creible es el valor del parámetro \\(\\theta\\) dada la muestra observada. A veces también la denotamos por \\(\\mathcal{L}_n(\\theta)\\). Ahora definimos qué es un estimador de máxima verosimilitud. Definición. Un estimador de máxima verosimilitud lo denotamos por \\(\\hat \\theta_{\\textsf{MLE}}\\) y es un valor que satisface \\[\\begin{align} \\hat \\theta_{\\textsf{MLE}} = \\underset{\\theta \\, \\in \\, \\Theta}{\\arg\\max}\\, \\mathcal{L}(\\theta; x_1, \\ldots, x_n), \\end{align}\\] donde \\(\\Theta\\) denota el espacio parametral. Es decir, el espacio válido de búsqueda congruente con la definición del modelo. Considera el caso de una normal con media y varianza desconocidas. ¿Cuáles son los espacios parametrales para efectuar \\(\\mathsf{MLE}\\)? Considera el caso de una Binomial con parámetro \\(p\\) desconocidos. ¿Cuál es el espacio parametral para la búsqueda del \\(\\mathsf{MLE}\\)? Obsérvese que para construir la verosimilitud y en consecuencia buscar por estimadores de máxima verosimlitud necesitamos: Un modelo teórico de cómo es la población con parámetros e Información de cómo se extrajo la muestra, y entonces podemos resolver nuestro problema de estimación convirtiéndolo en uno de optimización. Probamos esta idea con un proceso más complejo. Ejemplo. Supongamos que una máquina puede estar funcionando correctamente o no en cada corrida. Cada corrida se producen 500 productos, y se muestrean 10 para detectar defectos. Cuando la máquina funciona correctamente, la tasa de defectos es de 3%. Cuando la máquina no está funcionando correctamente la tasa de defectos es de 20% Supongamos que escogemos al azar 11 corridas, y obervamos los siguientes número de defectuosos: \\[1, 0, 0, 3 ,0, 0, 0, 2, 1, 0, 0\\] La pregunta es: ¿qué porcentaje del tiempo la máquina está funcionando correctamente? Primero pensemos en una corrida. La probabilidad de observar una sucesión particular de \\(r\\) defectos es \\[0.03^r(0.97)^{(10-r)}\\] cuando la máquina está funcionando correctamente. Si la máquina está fallando, la misma probabilidad es \\[0.2^r(0.8)^{(10-r)}.\\] Ahora supongamos que la máquina trabaja correctamente en una proporción \\(p\\) de las corridas. Entonces la probabilidad de observar \\(r\\) fallas se calcula promediando (probabilidad total) sobre las probabilidades de que la máquina esté funcionando bien o no: \\[0.03^r(0.97)^{(10-r)}p + 0.2^r(0.8)^{(10-r)}(1-p)\\] Y esta es nuestra función de verosimilitud para una observación. Suponemos que las \\(r_1,r_2, \\ldots, r_{11}\\) observaciones son independientes (por ejemplo, después de cada corrida la máquina se prepara de una manera estándar, y es como si el proceso comenzara otra vez). Entonces tenemos que multiplicar estas probabilidades para cada observación \\(r_1\\): # creamos la función de verosimilitud con los datos observados como dados verosim <- function(p) { r <- c(1, 2, 0, 3, 0, 0, 0, 2, 1, 0, 3) q_func <- 0.03^r*(0.97)^(10-r) q_falla <- 0.2^r*(0.8)^(10-r) prod(p * q_func + (1 - p) * q_falla) } verosim(0.1) # Una alternativa que nos da más flexibilidad para generar la función de # verosimilitud, es crear una función que recibe los datos observados y nos # regresa la función de verosimilitud correspondiente # Entonces, cal_verosim es una función que regresa una función calc_verosim <- function(r){ q_func <- 0.03 ^ r * (0.97) ^ (10 - r) q_falla <- 0.2 ^ r * (0.8) ^ (10 - r) function(p){ #nota: esta no es la mejor manera de calcularlo, hay # que usar logaritmos. prod(p * q_func + (1 - p) * q_falla) } } verosim <- calc_verosim(r = c(1, 0, 0, 3, 0, 0, 0, 2, 1, 0, 0)) verosim(0.1) ## [1] 2.692087e-14 dat_verosim <- tibble(x = seq(0, 1, 0.001)) %>% mutate(prob = map_dbl(x, verosim)) ggplot(dat_verosim, aes(x = x, y = prob)) + geom_line() + geom_vline(xintercept = 0.773, color = "red") + xlab("prop funcionado") Y nuestra estimación puntual sería de alrededor de 80%. Máxima verosimilitud para observaciones continuas Cuando las observaciones \\(x_1,\\ldots, x_n\\) provienen de una distribución continua, no tiene sentido considerar \\(P(X = x_i)\\), pues siempre es igual a cero. Sin embargo, podemos escribir para pequeños valores \\(\\epsilon \\ll 1\\) \\[\\begin{align} P(x - \\epsilon < X < x + \\epsilon | \\theta) = \\int_{x - \\epsilon}^{x + \\epsilon} f(t; \\theta) \\, \\text{d} t \\approx 2 \\epsilon f(x; \\theta), \\end{align}\\] donde \\(f(x; \\theta)\\) es la función de densidad de \\(X.\\) Por lo tanto, \\[\\begin{align} \\begin{split} P&(x_1 - \\epsilon < X_1 < x_1 + \\epsilon, \\ldots, x_n - \\epsilon < X_n < x_n + \\epsilon | \\theta) \\\\ &= \\prod_{i = 1}^n P(x_i - \\epsilon < X_i < x_i + \\epsilon | \\theta) \\\\ &= \\prod_{i = 1}^n 2 \\epsilon f(x_i; \\theta) = (2\\epsilon)^n \\prod_{i = 1}^n f(x_i; \\theta). \\end{split} \\end{align}\\] Notemos que si \\(\\epsilon \\rightarrow 0\\) la ecuación rápidamente converge a cero. Pero para pequeños valores de \\(\\epsilon\\) la ecuación que nos interesa es proporcional a \\(\\prod_{i = 1}^n f(x_i; \\theta).\\) De esta forma, nuestra definición de máxima verosimilitud y estimadores de máxima verosimilitud es la misma para el caso continuo (verifica las definiciones de la sección anterior). Ejemplo. Supongamos que tenemos una muestra \\(x_1\\ldots, x_n\\) extraidas de una distribución exponencial con tasa \\(\\lambda>0\\) donde no conocemos \\(\\lambda\\). ¿Cuál es el estimador de máxima verosimilitud de \\(\\lambda\\)? Para \\(\\lambda>0\\), tenemos que \\[{\\mathcal L}(\\lambda) = \\prod_{i=1}^n \\lambda e^{-\\lambda x_i}\\] de modo que \\[{\\mathcal L}(\\lambda) = \\lambda^n e^{-\\lambda \\sum_{i=1}^nx_i} = \\lambda^n e^{-n\\lambda\\bar{x}} = e^{n(\\log\\lambda - \\lambda\\bar{x})}\\] Que podemos maximizar usando cálculo para obtener \\(\\hat{\\lambda}_{\\mathsf{ML}} = \\frac{1}{\\bar{x}}\\) (demuéstralo). Discute por qué esto es intuitivamente razonable: ¿cuál es el valor esperado de una exponencial con parámetro \\(\\lambda\\)? Aspectos numéricos Encontrar el estimador de máxima verosimilitud (\\(\\textsf{MLE}\\)) es automático en la mayoría de los casos. En teoría, podemos reutilizar la misma rutina numérica para encontrar el estimador sin ninguna ayuda de la analista. Esto contrasta con otras técnicas de estimación en donde se requieren cálculos y manipulación de ecuaciones. Sin embargo, hay situaciones que se pueden evitar de manera general. Por ejemplo, cuando calculamos la verosimilitud arriba, nótese que estamos multiplicando números que pueden ser muy chicos (por ejemplo \\(p^6\\), etc). Esto puede producir desbordes numéricos fácilmente. Por ejemplo para un tamaño de muestra de 1000, podríamos tener que calcular p <- 0.1 proba <- (p ^ 800)*(1-p)^200 proba ## [1] 0 En estos casos, es mejor hacer los cálculos en escala logarítmica. El logaritmo convierte productos en sumas, y baja exponentes multiplicando. Si calculamos en escala logaritmica la cantidad de arriba, no tenemos problema: log_proba <- 800 * log(p) + 200 * log(1-p) log_proba ## [1] -1863.14 Ahora notemos que Maximizar la verosimilitud es lo mismo que maximizar la log-verosimilitud, pues el logaritmo es una función creciente. Si \\(x_{\\max}\\) es el máximo de \\(f\\), tenemos que \\(f(x_{\\max})>f(x)\\) para cualquier \\(x\\), entonces tomando logaritmo, \\[\\log(f(x_{max}))>\\log(f(x)),\\] para cualquier \\(x.\\) Pues el logaritmo respeta la desigualdad por ser creciente. Usualmente usamos la log-verosimilitud para encontrar el estimador de máxima verosimilitud. Hay razónes teóricas y de interpretación por las que también es conveniente hacer esto. Definición. La log-verosimilitud la denotamos usualmente por \\[\\ell_n(\\theta) = \\log \\left(\\mathcal{L}_n(\\theta)\\right),\\] donde hemos suprimido la dependencia en la muestra por conveniencia. Ejemplo. En nuestro primer ejemplo, log_verosimilitud <- function(p){ 2*log(p) + 6*log(1-p) } dat_verosim <- tibble(x = seq(0,1, 0.01)) %>% mutate(log_prob = map_dbl(x, log_verosimilitud)) ggplot(dat_verosim, aes(x = x, y = log_prob)) + geom_line() + geom_vline(xintercept = 0.25, color = "red") + xlab("p") Obtenemos el mismo máximo. Podemos incluso resolver numéricamente: solucion <- optim(p = 0.5, log_verosimilitud, control = list(fnscale = -1), method = "Brent", lower = 0, upper = 1) solucion$par ## [1] 0.25 Y en nuestro segundo ejemplo: calc_log_verosim <- function(r){ q_func <- 0.03^r*(0.97)^(10-r) q_falla <- 0.2^r*(0.8)^(10-r) function(p){ #nota: esta no es la mejor manera de calcularlo, hay # que usar logaritmos. sum(log(p * q_func + (1 - p) * q_falla)) } } log_verosim <- calc_log_verosim(c(1, 0, 0, 3, 0, 0, 0, 2, 1, 0, 0)) log_verosim(0.1) ## [1] -31.24587 solucion <- optim(p = 0.2, log_verosim, control = list(fnscale = -1), method = "Brent", lower = 0, upper = 1) solucion$par ## [1] 0.7733766 solucion$convergence ## [1] 0 dat_verosim <- tibble(x = seq(0,1, 0.001)) %>% mutate(log_verosimilitud = map_dbl(x, log_verosim)) ggplot(dat_verosim, aes(x = x, y = log_verosimilitud)) + geom_line() + geom_vline(xintercept = 0.775, color = "red") + xlab("prop funcionado") Nótese que la verosimilitud la consideramos función de los parámetros, donde los datos están fijos. Podemos construir una función que genera la función de verosimilitud dependiendo de los datos. En nuestro primer ejemplo de muestras de registros erróneos, podríamos construir una función que genera la log verosimilitud dependiendo del tamaño de muestra y del número de errores encontrado: construir_log_verosim <- function(n, n_err){ # n es tamaño de muestra # n_err el número de errores detectados (datos) n_corr <- n - n_err log_verosim <- function(p){ n_err * log(p) + n_corr * log(1-p) } } Cuando fijamos \\(n\\) y \\(n_{\\textsf{err}}\\), esta función genera otra función, la log verosimilitud, que es la que queremos optimizar. Supongamos entonces que sacamos 20 registros al azar y observamos 10 incorrectos. La función de verosimilitud es log_vero <- construir_log_verosim(20, 10) tibble(x = seq(0,1,0.001)) %>% mutate(log_ver = log_vero(x)) %>% ggplot(aes(x = x, y = log_ver)) + geom_line() + geom_vline(xintercept = 0.5, color = 'red') Ejemplo. Supongamos que en una población de transacciones hay un porcentaje \\(p\\) (desconocido) que son fraudulentas. Tenemos un sistema de clasificación humana que que marca transacciones como sospechosas. Con este sistema hemos medido que la proporción de transacciones normales que son marcadas como sospechosas es de 0.1%, y que la proporción de transacciones fraudulentas que son marcadas como sospechosas es de 98%. Supongamos que extraemos una muestra de 2000 transacciones, de manera que todas ellas tiene la misma probabilidad de ser fraudulentas. El sistema de clasificación marca 4 transacciones como sospechosas ¿Cómo estimamos la proporción de transacciones fraudulentas en la población? Solución: sea \\(p\\) la proporción de transacciones fraudulentas. Entonces la probabilidad de que una transacción sea marcada como sospechosa es (proba total): \\[0.98p + 0.001(1-p)\\] Pues tenemos que contar 98% de la proporción \\(p\\) de fraudulentas (correctamente detectadas) más 0.1% de la proporción \\((1-p)\\) de fraudulentas. Escribimos entonces nuestra función de verosimilitud crear_log_verosim <- function(n, n_sosp){ # devolver la función log verosimilitud log_verosimilitud_pct <- function(pct){ # sup que pct es la proporcentaje de fraudes, # que es el parámetro que queremos estimar prob_sosp <- 0.98 * pct / 100 + 0.001 * (1 - pct / 100) log_prob <- n_sosp * log(prob_sosp) + (n - n_sosp) * log(1- prob_sosp) log_prob } log_verosimilitud_pct } La verosimilitud es una función de \\(p\\). log_verosim <- crear_log_verosim(n = 2000, n_sosp = 4) A continuación la mostramos de manera gráfica. No se ve muy claro dónde ocurre el máximo, pero podemos ampliar cerca de cero la misma gráfica: Vemos que alrededor de 0.1% maximiza la probabilidad de haber observado 4 transacciones sospechosas. Notamos sin embargo que varios valores alrededor de este valor tienen probabilidad similar, así que también son consistentes con los datos (por ejemplo, valores como 0.05 o 0.15 tienen probabilidad similar). Tendremos que considerar esto para evaluar la incertidumbre en nuestra estimación. Obsérvese adicionalmente que si no tomáramos en cuenta las probabilidades de falsos negativos y falsos positivos la estimación simple daría \\(4/2000 = 0.002\\) (0.2%), que es dos veces más grande que nuestra estimación puntual por máxima verosimilitud. Ejemplo. Este es un ejemplo donde mostramos que cuando el soporte de las densidades teóricas es acotado hay que tener cuidado en la definición de la verosimilitud. En este caso, el soporte de la variable aleatoria es el párametro de interés. Supongamos que nuestros datos son generados por medio de una distribución uniforme en el intervalo \\([0,b].\\) Contamos con una muestra de \\(n\\) observaciones generadas de manera independiente \\(X_i \\sim U[0,b]\\) para \\(i= 1, \\ldots, n.\\) Sin embargo, no conocemos el valor de \\(b\\). ¿Cómo es la función de log verosimilitud \\({\\mathcal L}_n(b)\\) para este caso? Nótese que cuando el parámetro \\(b\\) es menor que alguna \\(x_i\\), tenemos que \\({\\mathcal L}_n(b) = 0\\): la verosimilitud es cero si tomamos una \\(b\\) más chica que algún dato, pues este valor es incosistente del todo con los datos observados. En otro caso, \\[{\\mathcal L}_n(b) = \\frac{1}{b^n},\\] pues la función de densidad de una uniforme en \\([0,b]\\) es igual a \\(1/b\\) en el intervalo \\([0,b]\\), y 0 en otro caso. Podemos escribir entonces: crear_verosim <- function(x){ n <- length(x) verosim <- function(b){ indicadora <- ifelse(all(x <= b), 1, 0) indicadora / b^n } } Ahora podemos hacer máxima verosimilitud para un ejemplo: set.seed(234) x <- runif(10, 0, 3) verosim <- crear_verosim(x) res_opt <- optimize(verosim, c(-1000, 1000), maximum = TRUE) res_opt$maximum ## [1] 2.788167 Y nótese que, como esperaríamos, este valor es el máximo de la muestra: max(x) ## [1] 2.788158 La gráfica de la función de verosimilitud es: tibble(b = seq(-1, 5, 0.001)) %>% mutate(verosim_1 = map_dbl(b, ~ verosim(.x))) %>% ggplot() + geom_line(aes(x = b, y = verosim_1)) + geom_rug(data = tibble(x = x), aes(x = x), colour = "red") Podemos escribir en una fórmula como: \\[\\begin{align} \\mathcal{L}(b; x_1, \\ldots, x_n) = \\prod_{i = 1}^n 1_{[0,b]}(x_i) \\frac1b. \\end{align}\\] Y podríamos resolver analíticamente como sigue: Si consideramos \\[ \\hat b_{\\textsf{MLE}} = x_{\\max} = \\max\\{x_i\\},\\] notemos que cualquier valor observado necesariamente satisface \\[x_i \\leq \\hat b_{\\textsf{MLE}},\\] y por lo tanto todas las funciones indicadoras están encendidas. El valor de la verosimilitud es igual a \\[\\mathcal{L}(\\hat b_{\\textsf{MLE}}; x_1, \\ldots, x_n) = \\left(\\frac{1}{x_{\\max}}\\right)^n \\geq \\left (\\frac1b\\right )^n\\] para cualquier \\(b\\geq x_{\\max}\\). Como la verosimilitud para \\(b<x_{\\max}\\) es igual a cero, esto demuestra que el máximo de la muestra es el estimador de máxima verosimilitud de \\(b\\). Observación. Este ejemplo también tiene dificultades numéricas, pues la verosimilitud presenta discontinuidades y regiones con derivada igual a cero, y la mayoria de los algoritmos numéricos no tienen garantías buenas de covergencia al máximo en estos casos. Si aplicamos sin cuidado descenso en gradiente, por ejemplo, podríamos comenzar incorrectamente en un valor \\(b_0 < x_{\\max}\\) y el algoritmo no avanzaría al máximo. Máxima verosimilitud para más de un parámetro Si nuestro modelo contiene más de un parámetro desconocido podemos también usar máxima verosimilitud. En este caso, optimizamos sobre todos los parámetros usando cálculo o alguna rutina numérica. Ejemplo. Considera el caso de \\(n\\) muestras iid de un modelo Gaussiano. Es decir, \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2).\\) Consideremos que ambos parámetros son desconocidos y nos gustaria encontrar el \\(\\textsf{MLE}\\). Para este problema denotamos \\(\\theta \\in \\mathbb{R}^2\\), donde \\(\\theta_1 = \\mu\\) y \\(\\theta_2 = \\sigma^2.\\) La función de verosimiltud se puede calcular (ignorando algunas constantes multiplicativas) como \\[\\begin{align} \\mathcal{L}_n(\\theta) &= \\prod_{i = 1}^n \\frac{1}{\\sigma} \\, \\exp\\left( - \\frac{(x_i - \\mu)^2}{2\\sigma^2}\\right) \\\\ &= \\theta_2^{-\\frac{n}{2}}\\exp\\left( - \\frac{1}{2 \\theta_2} \\sum_{i = 1}^n (x_i - \\theta_1)^2 \\right). \\end{align}\\] A continuación mostramos la representación gráfica de la función de verosimilitud de este ejemplo. Notamos lo mismo que para los ejemplos anteriores. Conforme más datos tenemos, más nos acercamos a los valores reales que no conocemos. Ejemplo. Como ejercicio, podemos encontrar los estimadores de máxima verosimilitud cuando tenemos una muestra \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2).\\) (puedes derivar e igualar el cero para encontrar el mínimo). También podemos resolver numéricamente, por ejemplo: Supongamos que tenemos la siguiente muestra: set.seed(41852) muestra <- rnorm(150, mean = 1, sd = 2) La función generadora de la log verosimilitud para una muestra es (ve la expresión del ejercicio anterior y calcula su logaritmo), y generamos la función de verosimilitud para nuestra muestra: crear_log_p <- function(x){ log_p <- function(pars){ media = pars[1] desv_est = pars[2] # ve la ecuación del ejercicio anterior z <- (x - media) / desv_est log_verosim <- -(log(desv_est) + 0.5 * mean(z ^ 2)) log_verosim } log_p } log_p <- crear_log_p(muestra) Ahora optimizamos: res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mv <- tibble(parametro = c("media", "sigma"), estimador = res$par) %>% column_to_rownames(var = "parametro") est_mv ## estimador ## media 1.136001 ## sigma 1.838421 Verifica que el estimador de la media y de la desviación estándar es el que esperábamos (y que puedes derivar analíticamente): n <- length(muestra) sd_n <- function(x) sqrt(mean((x - mean(x))^2)) c(media = mean(muestra), sigma = sd_n(muestra)) %>% round(4) ## media sigma ## 1.1364 1.8392 Ejemplo. Supongamos que en una población de estudiantes tenemos dos tipos: unos llenaron un examen de opción múltiple al azar (1 de 5), y otros contestaron las preguntas intentando sacar una buena calificación. Suponemos que una vez que conocemos el tipo de estudiante, todas las preguntas tienen la misma probabilidad de ser contestadas correctamente, de manera independiente. El modelo teórico está representado por la siguiente simulación: sim_formas <- function(p_azar, p_corr){ tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } Y una muestra se ve como sigue: set.seed(12) muestra <- map_dbl(1:200, ~ sim_formas(0.3, 0.75)) qplot(muestra) Supongamos que no conocemos la probabildad de contestar correctamente ni la proporción de estudiantes que contestó al azar. ¿Como estimamos estas dos cantidades? Escribimos la verosimilitud: crear_log_p <- function(x){ log_p <- function(pars){ p_azar = pars[1] p_corr = pars[2] sum(log(p_azar * dbinom(x, 10, 1/5) + (1 - p_azar) * dbinom(x, 10, p_corr))) } log_p } Creamos la función de verosimilitud con los datos log_p <- crear_log_p(muestra) y optimizamos res <- optim(c(0.5, 0.5), log_p, control = list(fnscale = -1)) res$par ## [1] 0.2827061 0.7413276 En este caso, obtenemos estimaciones razonables de ambos parámetros. Nota: dependiendo de los datos, este problema puede estar mal condicionado. Por ejemplo, ¿qué pasa si la probabilidad de acertar cuando se contesta bien está cercano al azar? La siguiente pregunta qué nos interesa hacer es: ¿cómo estimamos la variabilidad de estos estimadores? Más adelante veremos una respuesta basada en teoría, pero también podemos resolver este problema usando el bootstrap. Referencias "],["bootstrap-paramétrico.html", "Sección 7 Bootstrap paramétrico Ventajas y desventajas de bootstrap paramétrico Verificando los supuestos distribucionales Modelos mal identificados", " Sección 7 Bootstrap paramétrico Cuando nuestras observaciones provienen de un modelo teórico parametrizado con algunos parámetros que queremos estimar, y utilizamos máxima verosimilitud para hacer nuestra estimación, no es adecuado aplicar directamente el bootstrap no paramétrico que vimos en las secciones anteriores. Sin embargo, suponiendo que el modelo paramétrico que estamos usando es apropiado, podemos remuestrear de tal modelo para estimar la varianza de nuestros estimadores. Este proceso se llama el bootstrap paramétrico. Antes de hacer una definición precisa, veamos cómo calcularíamos error estándar para los estimadores de máxima verosimilitud de la normal que vimos en la sección anterior. Ejemplo (sección máxima verosimilitud). Como ejercicio, podemos encontrar los estimadores de máxima verosimilitud cuando tenemos una muestra \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\mu, \\sigma^2)\\) (puedes derivar e igualar a cero para encontrar el mínimo). También podemos resolver numéricamente. Supongamos que tenemos la siguiente muestra: set.seed(41852) muestra <- rnorm(150, mean = 1, sd = 2) La función generadora de la log-verosimilitud para una muestra es (ve la expresión del ejercicio anterior y calcula su logaritmo), y generamos la función de verosimilitud para nuestra muestra: crear_log_p <- function(x){ log_p <- function(pars){ media = pars[1] desv_est = pars[2] # ve la ecuación del ejercicio anterior z <- (x - media) / desv_est log_verosim <- -(log(desv_est) + 0.5 * mean(z^2)) log_verosim } log_p } log_p <- crear_log_p(muestra) Ahora optimizamos (revisa que el método converge): res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mle <- tibble(parametro = c("media", "sigma"), estimador = res$par) |> column_to_rownames(var = "parametro") Una vez que tenemos nuestros estimadores puntuales, est_mle ## estimador ## media 1.136001 ## sigma 1.838421 Sustituimos estos parámetros en la distribución normal y simulamos una muestra del mismo tamaño que la original: simular_modelo <- function(n, media, sigma){ rnorm(n, media, sigma) } muestra_bootstrap <- simular_modelo(length(muestra), est_mle["media", "estimador"], est_mle["sigma", "estimador"]) head(muestra_bootstrap) ## [1] 1.8583885 2.2084326 2.5852895 2.5174462 -0.7428032 0.5995989 Una vez que tenemos esta muestra bootstrap recalculamos los estimadores de máxima verosimlitud. Esto se hace optimizando: # creamos nueva verosimilitud para muestra bootstrap log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0, 0.5), log_p_boot, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res_boot$convergence ## [1] 0 est_mle_boot <- tibble(parametro = c("media", "sigma"), estimador = res_boot$par) |> column_to_rownames(var = "parametro") est_mle_boot ## estimador ## media 1.235914 ## sigma 1.710042 Y esta es nuestra replicación bootstrap de los estimadores de máxima verosimilitud. La idea es la misma que el bootstrap no paramétrico, con la ventaja de que estamos simulando del modelo que suponemos es el correcto, es decir, estamos usando información adicional que no teníamos en el bootstrap no paramétrico. Ahora es necesario repetir un número grande de veces. Nótese que esta función envuelve el proceso de remuestreo, cálculo de la función de verosimilitud y optimización: rep_boot <- function(rep, crear_log_p, est_mle, n){ muestra_bootstrap <- simular_modelo(length(muestra), est_mle["media", "estimador"], est_mle["sigma", "estimador"]) log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0, 0.5), log_p_boot, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") try(if(res_boot$convergence != 0) stop("No se alcanzó convergencia.")) tibble(parametro = c("media", "sigma"), estimador_boot = res_boot$par) } reps_boot <- map_dfr(1:5000, ~ rep_boot(.x, crear_log_p, est_mle, n = length(muestra)), rep = ".id") reps_boot ## # A tibble: 10,000 × 2 ## parametro estimador_boot ## <chr> <dbl> ## 1 media 0.797 ## 2 sigma 1.90 ## 3 media 1.23 ## 4 sigma 1.96 ## 5 media 1.14 ## 6 sigma 1.89 ## 7 media 1.33 ## 8 sigma 1.73 ## 9 media 1.19 ## 10 sigma 1.73 ## # ℹ 9,990 more rows Ya ahora podemos estimar error estándar: error_est <- reps_boot |> group_by(parametro) |> summarise(ee_boot = sd(estimador_boot)) error_est ## # A tibble: 2 × 2 ## parametro ee_boot ## <chr> <dbl> ## 1 media 0.150 ## 2 sigma 0.106 Así que nuestra estimación final sería: bind_cols(est_mle, error_est) |> mutate(across(where(is.numeric), round, 3)) |> select(parametro, estimador, ee_boot) ## parametro estimador ee_boot ## media media 1.136 0.150 ## sigma sigma 1.838 0.106 Si usamos la rutina estándar de R (dejaremos para después explicar cómo calcula los errores estándar esta rutina —no es con bootstrap): broom::tidy(MASS::fitdistr(muestra, "normal")) ## # A tibble: 2 × 3 ## term estimate std.error ## <chr> <dbl> <dbl> ## 1 mean 1.14 0.150 ## 2 sd 1.84 0.106 Podemos revisar también la normalidad aproximada de las distribuciones bootstrap para construir nuestros intervalos: ggplot(reps_boot, aes(sample = estimador_boot)) + geom_qq() + geom_qq_line(colour = "red") + facet_wrap(~parametro, scales = "free_y") La distribuciones son aproximadamente normales. Nótese que esto no siempre sucede, especialmente con parámetros de dispersión como \\(\\sigma\\). Ejemplo. Supongamos que tenemos una muestra más chica. Repasa los pasos para asegurarte que entiendes el procedimiento: set.seed(4182) muestra <- rnorm(6, mean = 1, sd = 2) # función de verosimilitud log_p <- crear_log_p(muestra) # máxima verosimilitud res <- optim(c(0, 0.5), log_p, control = list(fnscale = -1, maxit = 1000), method = "Nelder-Mead") res$convergence ## [1] 0 est_mle <- tibble(parametro = c("media", "sigma"), estimador = res$par) |> column_to_rownames(var = "parametro") est_mle ## estimador ## media 0.3982829 ## sigma 2.3988969 Hacemos bootstrap paramétrico reps_boot <- map_dfr(1:5000, ~ rep_boot(.x, crear_log_p, est_mle, n = length(muestra)), .id = "rep") reps_boot ## # A tibble: 10,000 × 3 ## rep parametro estimador_boot ## <chr> <chr> <dbl> ## 1 1 media 0.789 ## 2 1 sigma 0.945 ## 3 2 media -0.103 ## 4 2 sigma 1.37 ## 5 3 media 1.96 ## 6 3 sigma 1.70 ## 7 4 media 1.55 ## 8 4 sigma 2.28 ## 9 5 media -0.228 ## 10 5 sigma 1.73 ## # ℹ 9,990 more rows ggplot(reps_boot, aes(sample = estimador_boot)) + geom_qq() + geom_qq_line(colour = "red") + facet_wrap(~parametro, scales = "free_y") ggplot(reps_boot, aes(x = estimador_boot)) + geom_histogram() +facet_wrap(~parametro) Donde vemos que la distribución de \\(\\sigma\\) es asimétrica pues en algunos casos obtenemos estimaciones muy cercanas a cero. Podemos usar intervalos de percentiles. Ejercicio (extra). Con más de un parámetro, podemos preguntarnos cómo dependen las estimaciones individuales - en algunos casos pueden estar correlacionadas. Podemos examinar este comportamiendo visualizando las replicaciones bootstrap ggplot(reps_boot |> pivot_wider(names_from = parametro, values_from = estimador_boot), aes(x = media, y = sigma)) + geom_point(alpha = 0.5) + coord_equal() Esta es nuestra aproximación a la distribución de remuestreo de nuestro par de estadísticas \\((\\mu_{\\mathsf{MLE}}, \\sigma_{\\mathsf{MLE}})\\). En este caso, parecen ser independientes (lo cual es posible demostrar). Bootstrap paramétrico. Supongamos que tenemos una muestra iid \\(X_1,X_2,\\ldots, X_n \\sim f(x;\\theta)\\) de un modelo paramétrico, y un estimador de máxima verosimilitud \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) para \\(\\theta\\). El error estándar estimado para \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) por medio del bootstrap paramétrico se calcula como sigue: Se calcula \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) para la muestra observada Se simula una muestra iid de tamaño \\(n\\) de \\(f(x; \\hat{\\theta}_{\\mathsf{MLE}})\\) (muestra bootstrap) Se recalcula el estimador de máxima verosimilitud para la muestra bootstrap \\(\\hat{\\theta^*}_{\\mathsf{MLE}}\\) Se repiten 2-3 una cantidad grande de veces (1000 - 10000) Se calcula la desviación estándar de los valores \\(\\hat{\\theta^*}_{\\mathsf{MLE}}\\) obtenidos. Este es el error estándar estimado para el estimador \\(\\hat{\\theta}_{\\mathsf{MLE}}\\) Ventajas y desventajas de bootstrap paramétrico Ventaja: el bootstrap paramétrico puede dar estimadores más precisos e intervalos más angostos y bien calibrados que el no paramétrico, siempre y cuando el modelo teórico sea razonable. Desventaja: Es necesario decidir el modelo teórico, que tendrá cierto grado de desajuste vs. el proceso generador real de los datos. Si el ajuste es muy malo, los resultados tienen poca utilidad. Para el no paramétrico no es necesario hacer supuestos teóricos. Ventaja: el bootstrap paramétrico puede ser más escalable que el no paramétrico, pues no es necesario cargar y remuestrear los datos originales, y tenemos mejoras adicionales cuando tenemos expresiones explícitas para los estimadores de máxima verosimilitud (como en el caso normal, donde es innecesario hacer optimización numérica). Desventaja: el bootstrap paramétrico es conceptualmente más complicado que el no paramétrico, y como vimos arriba, sus supuestos pueden ser más frágiles que los del no-paramétrico. Verificando los supuestos distribucionales Como hemos discutido antes, podemos hacer pruebas de hipótesis para revisar si una muestra dada proviene de una distribución conocida. Sin embargo, la herramienta más común es la de los qq-plots, donde podemos juzgar fácilmente el tamaño de las desviaciones y si estas tienen implicaciones prácticas importantes. El proceso es como sigue: si \\(X_1,X_,\\ldots, X_n\\) es una muestra de \\(f(x;\\theta)\\), calculamos el estimador de máxima verosimilitud \\(\\theta_{\\mathsf{MLE}}\\) con los datos observados. Enchufamos \\(\\hat{f} = f(x;\\theta_{\\mathsf{MLE}})\\), y hacemos una gráfica de los cuantiles teóricos de \\(\\hat{f}\\) contra los cuantiles muestrales. Ejemplo. Consideramos la siguiente muestra: set.seed(32) muestra <- rgamma(150, 0.4, 1) qplot(muestra) Y queremos usar un modelo exponencial. Encontramos los estimadores de maxima verosimilitud est_mle <- MASS::fitdistr(muestra, "exponential") rate_mle <- est_mle$estimate rate_mle ## rate ## 2.76054 g_exp <- ggplot(tibble(muestra = muestra), aes(sample = muestra)) + geom_qq(distribution = stats::qexp, dparams = list(rate = rate_mle)) + geom_abline() + labs(subtitle = "Gráfica de cuantiles exponenciales") g_exp Donde vemos que el desajuste es considerable, y los datos tienen una cola derecha considerablemente más larga que la de exponencial (datos son casi dos veces más grande de lo que esperaríamos), y la cola izquierda está más comprimida en los datos que en una exponencial. Sin embargo, si ajustamos una gamma: est_mle <- MASS::fitdistr(muestra, "gamma")$estimate g_gamma <- ggplot(tibble(muestra = muestra), aes(sample = muestra)) + geom_qq(distribution = stats::qgamma, dparams = list(shape = est_mle[1], rate = est_mle[2])) + geom_abline() + labs(subtitle = "Gráfica de cuantiles gamma") g_exp + g_gamma El ajuste es considerablemente mejor para la distribución gamma (puedes hacer el protocolo rorschach para afinar tu diagnóstico de este tipo de gráficas). Ejempĺo. Examinamos un modelo teórico para las cuentas totales del conjunto de datos de propinas. En primer lugar: Separamos comida y cena, pues sabemos que las cuentas tienden a ser más grandes en las cenas. En lugar de modelar la cuenta total, modelamos el gasto por persona, es decir, la cuenta total dividida por el numero de personas. Grupos grandes pueden producir colas largas que no tenemos necesidad de modelar de manera probabilística, pues conocemos el número de personas. En este caso intentaremos un modelo lognormal, es decir, el logaritmo de los valores observados se comporta aproximadamente normal. Puedes también intentar con una distribución gamma. Separamos por Cena y Comida, dividimos entre número de personas y probamos ajustando un modelo para cada horario: propinas <- read_csv("data/propinas.csv") |> mutate(cuenta_persona = cuenta_total / num_personas) propinas_mle <- propinas |> group_by(momento) |> summarise(est_mle = list(tidy(MASS::fitdistr(cuenta_persona, "lognormal")))) |> unnest(est_mle) propinas_mle ## # A tibble: 4 × 4 ## momento term estimate std.error ## <chr> <chr> <dbl> <dbl> ## 1 Cena meanlog 2.03 0.0273 ## 2 Cena sdlog 0.362 0.0193 ## 3 Comida meanlog 1.94 0.0366 ## 4 Comida sdlog 0.302 0.0259 Ojo: estos parámetros están en escala logarítmica. Puedes revisar aquí para ver cómo calcular media y desviación estándar de las distribuciones originales. Ahora verificamos el ajuste: g_1 <- ggplot(propinas |> filter(momento == "Cena"), aes(sample = cuenta_persona)) + geom_qq(dparams = list(mean = propinas_mle$estimate[1], sd = propinas_mle$estimate[2]), distribution = stats::qlnorm) + ylim(c(0, 20)) + geom_abline() + labs(subtitle = "Cena") g_2 <- ggplot(propinas |> filter(momento == "Comida"), aes(sample = cuenta_persona)) + geom_qq(dparams = list(mean = propinas_mle$estimate[3], sd = propinas_mle$estimate[4]), distribution = stats::qlnorm) + ylim(c(0, 20)) + geom_abline() + labs(subtitle = "Comida") g_1 + g_2 El ajuste es bueno, aunque podríamos revisar la cola de la derecha en la Comida: ¿por qué existen esos valores relativamente grandes (alrededor de 25% más altos de lo que esperaríamos). ¿Tiene sentido ajustar dos distribuciones con parámetros separados? ¿Crees que estas dos distribuciones podrían compartir algún parámetro? Para esto puedes revisar el error estándar de los estimadores de máxima verosimilitud que mostramos arriba. ¿Qué ventajas verías en usar menos parámetros? ¿Cómo implementarías la estimación? ¿Qué pasa si intentas ajustar un modelo normal a estos datos? Modelos mal identificados Para algunos modelos y algunos parámetros, puede suceder que existan varias configuraciones muy diferentes de los parámetros que sean consistentes con los datos (en términos de verosimilitud, tienen verosimilitud alta similar), y en estos casos decimos que el modelo (con los datos observados) está mal identificado. Esto presenta problemas múltiples: optimizar es más difícil, hay incertidumbre grande en la estimación, y los parámetros se acoplan, haciendo difícil su interpretación. Ejemplo. Consideremos el ejemplo donde queríamos estimar dos proporciones: la proporción de examenes contestados al azar y la tasa de correctos. Vamos a suponer que la probabilidad de tener respuesta correcta dado que el examen no fue contestado al azar no es muy lejano a 1/5, que es la probabilidad de acertar a al azar. Aquí está la función para simular y la log verosimilitud correspondiente. Aquí vamos a ver un problema más difícil, así que usaremos la transformación logit para las proporciones, y no obtener resultados fuera del rango 0-1 al optimizar: inv_logit <- function(theta){ exp(theta) / (1 + exp(theta)) } logit <- function(p){ log(p / (1-p)) } # Simular datos sim_formas <- function(probs){ p_azar <- probs[1] p_corr <- probs[2] tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } simular_modelo <- function(n, params){ muestra <- map_dbl(1:n, ~ sim_formas(probs = inv_logit(params))) muestra } # log verosimilitud crear_log_p <- function(x){ log_p <- function(pars){ p_azar = inv_logit(pars[1]) p_corr = inv_logit(pars[2]) sum(log(p_azar * dbinom(x, 10, 1/5) + (1 - p_azar) * dbinom(x, 10, p_corr))) } log_p } # simular datos set.seed(12) muestra <- simular_modelo(2000, params = logit(c(0.3, 0.29))) qplot(muestra) log_p <- crear_log_p(muestra) res <- optim(c(0.0, 0.0), log_p, control = list(fnscale = -1)) res$convergence ## [1] 0 est_mle <- res$par names(est_mle) <- c("p_azar_logit", "p_corr_logit") est_mle ## p_azar_logit p_corr_logit ## -0.9194029 -0.8896454 probs_mle <- inv_logit(est_mle) names(probs_mle) <- c("p_azar", "p_corr") probs_mle ## p_azar p_corr ## 0.2850796 0.2911830 En primer lugar, parece ser que nuestras estimaciones son menos precias. Vamos a hacer bootstrap paramétrico: rep_boot <- function(rep, simular, crear_log_p, pars, n){ muestra_bootstrap <- simular(n, pars) log_p_boot <- crear_log_p(muestra_bootstrap) # optimizamos res_boot <- optim(c(0.0, 0.0), log_p_boot, control = list(fnscale = -1)) try(if(res_boot$convergence != 0) stop("No se alcanzó convergencia.")) est_mle_boot <- res_boot$par names(est_mle_boot) <- names(pars) est_mle_boot["rep"] <- rep est_mle_boot["convergence"] <- res_boot$convergence est_mle_boot } set.seed(8934) reps_boot <- map(1:500, ~ rep_boot(.x, simular_modelo, crear_log_p, est_mle, n = length(muestra))) |> bind_rows() reps_boot |> mutate(across(everything(), round, 2)) |> head() ## # A tibble: 6 × 4 ## p_azar_logit p_corr_logit rep convergence ## <dbl> <dbl> <dbl> <dbl> ## 1 -1.14 -0.92 1 0 ## 2 -1.11 -0.85 2 0 ## 3 -1.17 -0.95 3 0 ## 4 -2.74 -1.01 4 0 ## 5 -1.05 -0.93 5 0 ## 6 -0.91 -0.87 6 0 El optimizador encontró resultados que no tienen sentido: ggplot(reps_boot, aes(x = inv_logit(p_azar_logit), y = inv_logit(p_corr_logit), colour = factor(convergence))) + geom_point(show.legend = FALSE) + xlab("p_azar") + ylab("p_corr") Y notamos un problema grave: Tenemos mucha variación en nuestros estimadores, y la correlación entre las estimaciones es alta. Esto deberíamos haberlo esperado, pues como las probabilidades de contestar correctamente son muy similares a las de contestar al azar: Existen muchas combinaciones de parámetros que son consistentes con los datos. Decimos entonces que este modelo está mal identificado con estos datos. La mala identificación, como vemos, es una propiedad tanto de modelo como datos. ¿Qué conclusiones acerca del examen obtienes al ver estas simulaciones bootstrap? ¿Cómo se deberían reportar estos resultados? Qué pasa en este ejemplo si la \\(p_{corr}\\) es más grande, o el tamaño de muestra es más grande? Repite el ejercicio con los parámetros del primer ejemplo (\\(p_{azar} = 0.3, p_{corr}=0.75\\)) y el mismo tamaño de muestra. ¿Qué sucede en este caso? En el caso extremo, decimos que el modelo no está indentificado, y eso generalmente sucede por un problema en el planteamiento del modelo, independientemente de los datos. ¿Puedes imaginar un modelo así? "],["propiedades-teóricas-de-mle.html", "Sección 8 Propiedades teóricas de MLE Consistencia Equivarianza del \\(\\textsf{MLE}\\) Normalidad asintótica Optimalidad del \\(\\textsf{MLE}\\)", " Sección 8 Propiedades teóricas de MLE El método de máxima verosimiltud es uno de los métodos más utilizados en la inferencia estadística paramétrica. En esta sección estudiaremos las propiedades teóricas que cumplen los estimadores de máxima verosimilitud (\\(\\textsf{MLE}\\)) y que han ayudado en su casi adopción universal. Estas propiedades de los \\(\\textsf{MLE}\\) son válidas siempre y cuando el modelo \\(f(x; \\theta)\\) satisfaga ciertas condiciones de regularidad. En particular veremos las condiciones para que los estimadores de máxima verosimilitud sean: consistentes, asintóticamente normales, asintóticamente insesgados, asintóticamente eficientes, y equivariantes. Los estimadores \\(\\textsf{MLE}\\) en ocasiones son malinterpretados como una estimación puntual en la inferencia, y por ende, incapaces de cuantificar incertidumbre. A lo largo de estas notas hemos visto cómo extraer intervalos de confianza por medio de simulación y por lo tanto incorporar incertidumbre en la estimación. Sin embargo, hay otros maneras de reportar incertidumbre para \\(\\textsf{MLE}\\). Y hablaremos de ello en esta sección. A lo largo de esta sección asumiremos muestras de la forma \\[\\begin{align} X_1, \\ldots, X_n \\overset{\\text{iid}}{\\sim} f(x; \\theta^*), \\end{align}\\] donde \\(\\theta^*\\) es el valor verdadero —que suponemos desconocido pero fijo— del parámetro \\(\\theta \\in \\Theta\\), y sea \\(\\hat \\theta_n\\) el estimador de máxima verosimilitud de \\(\\theta.\\) Ejemplo Usaremos este ejemplo para ilustrar los diferentes puntos teóricos a lo largo de esta sección. Consideremos el caso de una muestra de variables binarias que registran el éxito o fracaso de un experimento. Es decir, \\(X_1, \\ldots, X_n \\sim \\textsf{Bernoulli}(p),\\) donde el párametro desconocido es el procentaje de éxitos. Éste último denotado por \\(p.\\) Este ejemplo lo hemos estudiado en secciones pasadas, y sabemos que el \\(\\textsf{MLE}\\) es \\[\\begin{align} \\hat p_n = \\frac{S_n}{n} = \\bar X_n, \\end{align}\\] donde \\(S_n= \\sum_i X_i\\) es el número total de éxitos en la muestra. La figura siguiente ilustra el estimador \\(\\hat p_n\\) como función del número de observaciones en nuestra muestra. Podemos apreciar cómo el promedio parece estabilizarse alrededor del verdadero valor de \\(p^* = 0.25\\) cuando tenemos una cantidad suficientemente grande de observaciones. Como es de esperarse, diferentes muestras tendrán diferentes valores de \\(n\\) dónde las trayectorias parezca que se haya estabilizado (Ver figura siguiente). Sin embargo, se puede notar que este comportamiento parece estar controlado y son raras las trayectorias que se encuentran más lejos. Los conceptos siguientes nos permitirán cuantificar el porcentaje de trayectorias que se mantienen cercanas a \\(p^*,\\) en el caso límite de un número grande de observaciones, cuando trabajemos con estimadores de máxima verosimilitud. Más aún, nos permitirán cracterizar la distribución para dicho límite y aprenderemos de otras propiedades bajo este supuesto asintótico. Consistencia Es prudente pensar que para un estimador, lo que nos interesa es que conforme más información tengamos, más cerca esté del valor desconocido. Esta propiedad la representamos por medio del concepto de consistencia. Para hablar de esta propiedad necesitamos definir un tipo de convergencia para una secuencia de variables aleatorias, convergencia en probabilidad. Definición. Una sucesión de variables aleatorias \\(X_n\\) converge en probabilidad a la variable aleatoria \\(X,\\) lo cual denotamos por \\(X_n \\overset{P}{\\rightarrow} X\\), si para toda \\(\\epsilon \\gt 0\\), \\[\\lim_{n \\rightarrow \\infty} \\mathbb{P}(|X_n - X| > \\epsilon) = 0.\\] Ahora, definimos un estimador consistente como: Definición. Un estimador \\(\\tilde \\theta_n\\) es consistente si converge en probabilidad a \\(\\theta^*.\\) Donde \\(\\theta^*\\) denota el verdadero valor del parámetro, que asumimos fijo. En particular, los estimadores \\(\\textsf{MLE}\\) son consistentes. Teorema. Sea \\(X_n \\sim f(X; \\theta^*),\\) una muestra iid, tal que \\(f(X; \\theta)\\) cumple con ciertas condiciones de regularidad. Entonces, \\(\\hat \\theta_n,\\) el estimador de máxima verosimilitud, converge en probabilidad a \\(\\theta^*.\\) Es decir, \\(\\hat \\theta_n\\) es consistente. La demostración de este teorema la pueden encontrar en Wasserman (2013). Ejemplo El estimador \\(\\hat p_n\\) es consistente. Esto quiere decir que el estimador se vuelve más preciso conforme obtengamos más información. En general esta es una propiedad que los estimadores deben satisfacer para ser útiles en la práctica. La figura siguiente muestra el estimador \\(\\hat p_n\\) como función del número de observaciones utilizado. Distintas curvas corresponden a distintas realizaciones de muestras obtenidas del modelo (\\(B = 500\\)). Nota que la banda definida por \\(\\epsilon\\) se puede hacer tan pequeña como se requiera, lo único que sucederá es que necesitaremos un mayor número de observaciones para garantizar que las trayectorias de los estimadores \\(\\hat p_n\\) se mantengan dentro de las bandas con alta probabilidad. Equivarianza del \\(\\textsf{MLE}\\) Muchas veces nos interesa reparametrizar la función de verosimilitud con el motivo de simplificar el problema de optimización asociado, o simplemente por conveniencia interpretativa. Por ejemplo, si el parámetro de interés es tal que \\(\\theta \\in [a, b],\\) entonces encontrar el \\(\\textsf{MLE}\\) se traduce en optimizar la log-verosimilitud en el espacio restringido al intervalo \\([a,b].\\) En este caso, los métodos tradicionales de búsqueda local por descenso en gradiente podrían tener problemas de estabilidad cuando la búsqueda se realice cerca de las cotas. El concepto de equivarianza nos dice que si el cambio de coordenadas parametrales está definida, y si este cambio de variable se realiza por medio de una función bien comportada (derivable y cuya derivada no es cero), entonces la solución de encontrar el \\(\\textsf{MLE}\\) en las coordenadas originales y transformar, es igual a realizar la inferencia en las coordenadas fáciles. Teorema. Sea \\(\\tau = g(\\theta)\\) una función de \\(\\theta\\) bien comportada. Entonces si \\(\\hat \\theta_n\\) es el \\(\\textsf{MLE}\\) de \\(\\theta,\\) entonces \\(\\hat \\tau_n = g(\\hat \\theta_n)\\) es el \\(\\textsf{MLE}\\) de \\(\\tau.\\) Ejemplo El concepto de equivarianza lo ilustraremos para nuestro ejemplo de esta sección. En particular la parametrización la realizamos por cuestiones de interpretación como un factor de riesgo. Como hemos visto estimador \\(\\hat p_n\\) es equivariante. Es importante mencionar que esta propiedad es general para cualquier tamaño de muestra. Es decir, no descansa en supuestos de muestras grandes. Supongamos que nos interesa estimar el momio de éxitos (bastante común en casas de apuestas). El momio está definido como \\[ \\theta = \\frac{p}{1-p},\\] y podemos rescribir la función de verosimilitud en términos de este parámetro. Sustituyendo \\(p = \\frac{\\theta}{1+\\theta}\\) en \\(\\mathcal{L}_n(p)\\) obtenemos \\[\\begin{align} \\mathcal{L}_n(\\theta) = \\left( \\frac{\\theta}{1 + \\theta} \\right)^{S_n} \\left(\\frac{1}{1 + \\theta} \\right)^{n - S_n}, \\end{align}\\] cuya función encuentra su máximo en \\[\\begin{align} \\hat \\theta_n = \\frac{\\bar X_n}{ 1 - \\bar X_n}. \\end{align}\\] Comprueba que el estimador de arriba para \\(\\theta\\) es el MLE. Normalidad asintótica Está propiedad nos permite caracterizar la distribución asintótica del MLE. Es decir, nos permite caracterizar la incertidumbre asociada una muestra suficientemente grande por medio de una distribución Gaussiana. Esto es, bajo ciertas condiciones de regularidad, \\[\\hat \\theta_n \\overset{.}{\\sim} \\mathsf{N}( \\theta^*, \\mathsf{ee}^2),\\] donde \\(\\mathsf{ee}\\) denota el error estándar del \\(\\textsf{MLE},\\) \\(\\mathsf{ee} = \\mathsf{ee}(\\hat \\theta_n) = \\sqrt{\\mathbb{V}(\\hat \\theta_n)}\\). Esta distribución se puede caracterizar de manera aproximada por métodos analíticos. Para esto necesitamos las siguientes definiciones. Definición. La función de score está definida como \\[\\begin{align} s(X; \\theta) = \\frac{\\partial \\log f(X; \\theta)}{\\partial \\theta}. \\end{align}\\] La información de Fisher está definida como \\[\\begin{align} I_n(\\theta) &= \\mathbb{V}\\left( \\sum_{i = 1}^ns(X_i; \\theta) \\right) \\\\ &= \\sum_{i = 1}^n \\mathbb{V} \\left(s(X_i; \\theta) \\right) \\end{align}\\] Estas cantidades nos permiten evaluar qué tan fácil será identificar el mejor modelo dentro de la familia parámetrica \\(f(X; \\theta)\\). La función de score nos dice qué tanto cambia locamente la distribución cuando cambiamos el valor del parámetro. Calcular la varianza, nos habla de la dispersión de dicho cambio a lo largo del soporte de la variable aleatoria \\(X.\\) Si \\(I_n(\\theta)\\) es grande entonces el cambio de la distribución es muy importante. Esto quiere decir que la distribución es muy diferente de las distribuciones cercanas que se generen al evaluar en \\(\\theta\\)s diferentes. Por lo tanto, si \\(I_n(\\theta)\\) es grande, la distribución será fácil de identificar cuando hagamos observaciones. La información de Fisher también nos permite caracterizar de forma analítica la varianza asíntotica del \\(\\textsf{MLE}\\) pues la aproximación \\(\\mathsf{ee}^2 \\approx \\frac{1}{I_n(\\theta^*)}\\) es válida. El siguiente resultado utiliza la propiedad de la función de score: \\(\\mathbb{E}[s(X; \\theta)] = 0,\\) que implica que \\(\\mathbb{V} \\left(s(X_i; \\theta) \\right) = \\mathbb{E}[s^2(X; \\theta)],\\) y permite a su vez un cómputo más sencillo de la información de Fisher. Teorema. El cálculo de la información de Fisher para una muestra de tamaño \\(n\\) se puede calcular de manera simplificada como \\(I_n(\\theta) = n \\, I(\\theta).\\) Por otro lado, tenemos la siguiente igualdad \\[ I(\\theta) = - \\mathbb{E}\\left( \\frac{\\partial^2 \\log f(X; \\theta)}{\\partial \\theta^2} \\right).\\] Con estas herramientas podemos formular el teorema siguiente. Teorema. Bajo ciertas condiciones de regularidad se satisface que \\(\\mathsf{ee} \\approx \\sqrt{1/I_n(\\theta^*)}\\) y \\[ \\hat \\theta_n \\overset{d}{\\rightarrow} \\mathsf{N}( \\theta^*, \\mathsf{ee}^2).\\] El resultado anterior es teóricamente interesante y nos asegura un comportamiento controlado conforme tengamos más observaciones disponibles. Sin embargo, no es práctico pues no conocemos \\(\\theta^*\\) en la práctica y por consiguiente no conoceríamos la varianza. Sin embargo, también podemos aplicar el principio de plug-in y caracterizar la varianza de la distribución asintótica por medio de \\[\\hat{\\mathsf{ee}} = \\sqrt{1/I_n(\\hat \\theta_n)}.\\] Esto último nos permite constuir intervalos de confianza, por ejemplo al 95%, a través de \\[ \\hat \\theta_n \\pm 2 \\, \\hat{\\mathsf{ee}}.\\] Asimismo, el teorema de Normalidad asintótica nos permite establecer que el \\(\\textsf{MLE}\\) es asíntoticamente insesgado. Es decir, \\[\\lim_{n \\rightarrow \\infty}\\mathbb{E}[\\hat \\theta_n] = \\theta^*.\\] Definición. Sea una muestra \\(X_1, \\ldots, X_n \\overset{iid}{\\sim} f(X; \\theta^*)\\). Un estimador \\(\\tilde \\theta_n\\) es insesgado si satisface que \\[\\mathbb{E}[\\tilde \\theta_n] =\\theta^*.\\] El sesgo del estimador es precisamente la diferencia: \\(\\textsf{Sesgo} = \\mathbb{E}[\\tilde \\theta_n] - \\theta^*.\\) Ejemplo: Información de Fisher En el caso Bernoulli obtenemos \\(I_n(\\theta) = \\frac{n}{\\theta(1-\\theta)}\\), si \\(n = 20\\) podemos comparar con \\(\\theta=0.5, 0.7, 0.8\\), library(patchwork) # Verosimilitud X_1,...,X_n ~ Bernoulli(theta) L_bernoulli <- function(n, S){ function(theta){ theta ^ S * (1 - theta) ^ (n - S) } } xy <- data.frame(x = 0:1) l_b1 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 10)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 10") + ylim(0, 5e-05) l_b2 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 14)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 14") + ylim(0, 5e-05) l_b3 <- ggplot(xy, aes(x = x)) + stat_function(fun = L_bernoulli(n = 20, S = 16)) + xlab(expression(theta)) + ylab(expression(L(theta))) + labs(title = "Verosimilitud", subtitle = "n=20, S = 19") + ylim(0, 5e-05) l_b1 + l_b2 + l_b3 Ejemplo: Normalidad Regresando a nuestro ejemplo. Veremos empiricamente que el estimador \\(\\hat \\theta_n\\) es asintóticamente normal. Esta propiedad la hemos visto anteriormente para un caso muy particular. Lo vimos en el TLC para el caso de promedios, \\(\\bar X_n,\\) que en nuestro ejemplo corresponde a \\(\\hat p_n\\). Como hemos visto, esta propiedad la satisface cualquier otro estimador que sea máximo verosímil. Por ejemplo, podemos utilizar el \\(\\mathsf{MLE}\\) de los momios. La figura que sigue muestra la distribución de \\(\\hat \\theta_n\\) para distintas remuestras \\((B = 500)\\) con distintos valores de \\(n.\\) El gráfico anterior valida empíricamente la distribución asintótica para casos de muchas observaciones. A continuación ilustraremos cómo explotar este resultado para obtener intervalos de confianza. Para el caso de \\(\\hat p_n\\) hemos visto que el error estándar se calcula analíticamente como \\[\\textsf{ee}_p^2 = \\mathbb{V}(\\hat p_n) = \\mathbb{V}\\left(\\frac1n \\sum_{i = 1}^n x_i\\right) = \\frac{p^* (1 - p^*)}{n}.\\] Éste empata con el valor del error estándar asintótico \\[\\textsf{ee}_p^2 \\approx \\sqrt{\\frac{1}{I_n(p^*)}},\\] pues la información de Fisher es igual a \\[I_n(p) = n \\, I(p) = \\frac{n}{p ( 1- p)}.\\] En este caso podemos utilizar el estimador plug-in, \\(\\hat{\\textsf{ee}}_p = \\textsf{ee}_p(\\hat p_n).\\) Para estimar el momio, \\(\\theta,\\) el cálculo no es tan fácil pues tendríamos que calcular de manera analítica la varianza de un cociente \\[\\textsf{ee}_\\theta^2 = \\mathbb{V}\\left( \\frac{\\hat p_n}{1-\\hat p_n}\\right).\\] Utilizando la distirbución asintótica, el error estándar se puede calcular mediante \\[\\textsf{ee}_\\theta \\approx \\sqrt{\\frac{1}{I_n(\\theta^*)}} = \\sqrt{\\frac{\\theta (1 + \\theta)^2 }{n}}.\\] A continuación mostramos los errores estándar para nuestro ejemplo utilizando la distribución asintótica y por medio de la distribución de bootstrap. Como es de esperarse, ambos coinciden para muestras relativamente grandes. # Genero muestra muestras <- tibble(tamanos = 2**seq(4,7)) %>% mutate(obs = map(tamanos, ~rbernoulli(., p = p_true))) calcula_momio <- function(x){ x / (1 - x) } calcula_ee_momio <- function(x){ sqrt(((1+x)**2) * x) } # Calculo MLE muestras_est <- muestras %>% group_by(tamanos) %>% mutate(media_hat = map_dbl(obs, mean), media_ee = sqrt(media_hat * (1 - media_hat)/tamanos), momio_hat = calcula_momio(media_hat), momio_ee = calcula_ee_momio(momio_hat)/sqrt(tamanos)) # Calculo por bootstrap muestras_boot <- muestras_est %>% group_by(tamanos) %>% mutate(sims_muestras = map(tamanos, ~rerun(1000, sample(muestras %>% filter(tamanos == ..1) %>% unnest(obs) %>% pull(obs), size = ., replace = TRUE))), sims_medias = map(sims_muestras, ~map_dbl(., mean)), sims_momios = map(sims_medias, ~map_dbl(., calcula_momio)), media_boot = map_dbl(sims_medias, mean), momio_boot = map_dbl(sims_momios, mean), media_ee_boot = map_dbl(sims_medias, sd), momio_ee_boot = map_dbl(sims_momios, sd) ) ## # A tibble: 4 × 5 ## # Groups: tamanos [4] ## tamanos momio_hat momio_boot momio_ee momio_ee_boot ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 16 0.333 0.367 0.192 0.236 ## 2 32 0.333 0.342 0.136 0.140 ## 3 64 0.123 0.123 0.0492 0.0498 ## 4 128 0.407 0.417 0.0793 0.0800 Comprueba las fórmulas para los errores estándar tanto para la probabilidad de éxito como para los momios. El método delta El ejercicio anterior nos sugiere una pregunta natural: Cómo establecer la distribución asintótica de un estimador cuando ya se conoce la de una pre-imagen de él? Es decir, si ya conocemos la distribución de \\(\\theta,\\) podemos establecer la distribución de \\(\\tau = g(\\theta)?\\) La respuesta es afirmativa y la enunciamos por medio de un teorema. El resultado se conoce como el método delta. Teorema. Si \\(\\tau = g(\\theta)\\) es una función diferenciable y \\(g'(\\theta) \\neq 0\\), entonces \\[\\hat \\tau_n \\overset{d}{\\rightarrow} \\mathsf{N}( \\tau^*, \\hat{\\mathsf{ee}}^2_\\tau),\\] donde \\(\\hat \\tau_n = g(\\hat \\theta_n)\\) y \\[\\hat{\\mathsf{ee}}_\\tau = \\bigg| g'(\\hat \\theta_n) \\bigg| \\times \\hat{\\mathsf{ee}}_\\theta(\\hat \\theta_n).\\] Por ejemplo, este resultado lo podemos utilizar para nuestro experimento de Bernoullis. Pues \\(g(p) = \\frac{p}{1-p}\\) es una función diferenciable y por lo tanto \\[\\hat{\\mathsf{ee}}_\\theta = \\sqrt{\\frac1n} \\times \\left[ \\hat p_n^{1/2} (1-\\hat p_n)^{-3/2}\\right].\\] Comprueba la fórmula del método delta para el momio en función de la fracción de éxitos, y también comprueba que de el mismo resultado analítico que habías calculado en el ejercicio anterior. Optimalidad del \\(\\textsf{MLE}\\) Consideremos el caso de una muestra iid \\(X_1, \\ldots, X_n \\sim \\mathsf{N}(\\theta, \\sigma^2).\\) Y consideremos dos estimadores para \\(\\theta.\\) El primero será la media muestral \\(\\bar X_n\\) y el segundo la mediana muestral, la cual denotaremos por \\(\\tilde \\theta_n.\\) Sabemos que ambos son insesgados. Por lo tanto, en promedio emiten estimaciones correctas. Pero ¿cómo escogemos cual utilizar? Un criterio para comparar estimadores es el error cuadrático medio (\\(\\textsf{ECM}\\), por sus siglas en inglés). Definición. El error cuadrático medio de un estimador \\(\\tilde \\theta_n\\) se calcula como \\[\\textsf{ECM}[\\tilde \\theta_n] = \\mathbb{E}[(\\tilde \\theta_n - \\theta^*)^2].\\] Por lo tanto, el \\(\\textsf{ECM}\\) mide la distancia promedio entre el estimador y el valor verdadero valor del parámetro. La siguiente igualdad es bastante útil para comparar dos estimadores. \\[\\textsf{ECM}[\\tilde \\theta_n] = \\mathbb{V}\\left(\\tilde \\theta_n\\right) + \\textsf{Sesgo}\\left[\\tilde \\theta_n\\right]^2.\\] Por lo tanto si dos estimadores son insesgados, uno es más eficiente que el otro si su varianza es menor. La media sabemos que es el \\(\\textsf{MLE}\\) y por el TCL tenemos que \\[\\sqrt{n} \\left( \\bar X_n - \\theta \\right) \\overset{d}{\\rightarrow} \\mathsf{N}( 0, \\sigma^2).\\] La mediana, en contraste, tiene una distribución asintótica \\[\\sqrt{n} \\left( \\tilde X_n - \\theta \\right) \\overset{d}{\\rightarrow} \\mathsf{N}\\left( 0, \\sigma^2 \\frac{\\pi}{2}\\right),\\] es decir tiene una varianza ligeramente mayor. Por lo tanto, decimos que la mediana tiene una eficiencia relativa con respecto a la media del \\(.63 \\% (\\approx 2/\\pi)\\). Es decir, la mediana sólo utliza una fracción de los datos comparado con la media. El siguiente teorema, la desigualdad de Cramer-Rao, nos permite establecer esta resultado de manera mas general para cualquier estimador insesgado. Teorema. Sea \\(\\tilde \\theta_n\\) cualquier estimador insesgado de \\(\\theta\\) cuyo valor verdadero es \\(\\theta^*,\\) entonces \\[\\begin{align} \\mathbb{V}(\\tilde \\theta_n) \\geq \\frac{1}{n I(\\theta^*)}. \\end{align}\\] Un estimador insesgado que satisfaga esta desigualdad se dice que es eficiente. Nota que el lado derecho de la desigualdad es precisamente la varianza asintótica del \\(\\textsf{MLE}.\\) Por lo tanto, éste es asintóticamente eficiente. Es importante hacer enfásis en que la optimalidad del \\(\\textsf{MLE}\\) es un resultado asintótico. Es decir, sólo se satisface cuando tenemos un número suficiente de observaciones. Qué tan grande debe ser el tamaño de muestra varia de problema a problema. Es por esto que para muestras de tamaño finito se prefieren estimadores que minimicen el \\(\\textsf{ECM},\\) como cuando hacemos regresión ridge o utilizamos el estimador James–Stein para un vector de medias. Referencias "],["más-de-pruebas-de-hipótesis-e-intervalos.html", "Sección 9 Más de pruebas de hipótesis e intervalos Prueba de Wald Observación: pruebas \\(t\\) y práctica estadística Prueba de Wald para dos medias o proporciones Datos pareados Pruebas de cociente de verosimilitud Otro tipo de pruebas Errores tipo I y tipo II Consideraciones prácticas Pruebas múltiples", " Sección 9 Más de pruebas de hipótesis e intervalos En esta sección veremos enfoques más clásicos para analizar una prueba de hipótesis, en particular veremos situaciones donde podemos hacer algunos supuestos teóricos acerca de la distribución de las poblaciones. Esta es una sección complementaria para entender prácticas estadísticas usuales: recuerda que discutimos antes que hacer estimación por intervalos generalmente es más útil que hacer pruebas de hipótesis, y adicionalmente, tenemos también la técnica de pruebas de permutaciones que podemos aplicar en muchos de los casos que discutiremos a continuación. El enfoque básico es el mismo que cuando vimos pruebas de permutaciones: calculamos una estadística de prueba de los datos y luego, con una distribución de referencia (asociada a la hipótesis nula), calculamos un valor-\\(p\\). Si el valor-\\(p\\) es chico, entonces los resultados observados no pueden explicarse fácilmente por variación muestral, y rechazamos la hipótesis nula. Con esta idea básica, y supuestos distribucionales acerca de las poblaciones, podemos construir pruebas que requieren menos cómputo. La desventaja es que hay que checar con cuidado los supuestos distribucionales que hagamos. Si los supuestos son incorrectos, las valores-\\(p\\) no tienen mucho sentido y son difíciles de interpretar. Para esta sección seguiremos más a Wasserman (2013) (capítulo 10), pero puedes revisar también Chihara and Hesterberg (2018) (capítulo 8). Prueba de Wald Como hemos visto, existe normalidad asintótica en varios estimadores que hemos considerado, como medias y proporciones muestrales. También vimos que estimadores de máxima verosimilitud cumplen muchas veces un teorema central del límite. Así que supongamos que tenemos una estadística \\(\\hat{\\theta}_n\\) que estima \\(\\theta\\) y es asintóticamente insesgada y normal. Denotamos por \\(\\hat{\\textsf{ee}}\\) una estimación de su error estándar —hay distintas maneras de hacerlo: por ejemplo, con simulación (bootstrap), o por medios analíticos (teoría). Recuerda que el error estándar de una estadística es la desviación estándar de su distribución de muestreo. Si nos interesa probar la hipótesis de que \\(\\theta = 125\\), por ejemplo, y \\(\\hat{\\theta}_n\\) es aproximadamente normal, entonces podemos construir una distribución de referencia aproximada como sigue: Si la nula es cierta, entonces la distribución de muestreo de \\(\\hat{\\theta}\\) es aproximadamente \\(\\mathsf{N}(125, \\hat{\\textsf{ee}})\\). Esto implica que la siguiente estadística \\(W\\) es aproximadamente normal estándar bajo la nula: \\[W = \\frac{\\hat{\\theta} - 125}{\\hat{\\textsf{ee}}} \\sim \\mathsf{N}(0,1)\\] Por lo que valores lejanos de \\([-2,2]\\), por ejemplo, dan evidencia en contra de la hipótesis nula. Como \\(W\\) no depende de ningún parámetro desconocido, podemos usarla como distribución de referencia para comparar el valor de \\(W\\) que obtuvimos en la muestra. Si observamos para nuestra muestra un valor \\(W=w\\) entonces, el valor-\\(p\\) (dos colas) de esta prueba es, aproximadamente, \\[\\mathsf{valor-}p \\approx P(|Z| > |w|) = 2(1 - \\Phi(|w|))\\] donde \\(Z\\sim \\mathsf{N}(0,1)\\) y \\(\\Phi\\) es su función de distribución acumulada. Ejemplo: media muestral. La media nacional de las escuelas de enlace está alrededor de 454 (matemáticas en 6o. grado). Tomamos una muestra de 180 escuelas del Estado de México, y queremos saber si la media obtenida es consistente o no con la media nacional. Ya que estamos usando como estimador una media de una muestra iid, podemos estimar el error estándar de la media con \\[\\hat{\\textsf{ee}} = s / \\sqrt{n}\\] Obtenemos: set.seed(29) muestra_edomex <- read_csv("data/enlace.csv") |> filter(estado == "ESTADO DE MEXICO") |> sample_n(180) resumen <- muestra_edomex |> summarise(media = mean(mate_6), s = sd(mate_6), n = n()) |> mutate(ee = s / sqrt(n)) resumen ## # A tibble: 1 × 4 ## media s n ee ## <dbl> <dbl> <int> <dbl> ## 1 456. 155. 180 11.5 La hipótesis nula es que la media poblacional del Estado de México es igual a 454. Calculamos el valor-\\(p\\) usando la prueba de Wald: dif <- (resumen |> pull(media)) - 454 ee <- resumen |> pull(ee) w <- dif / ee p <- 2 * (1 - pt(abs(w), 179)) p ## [1] 0.8413082 y vemos que esta muestra es consistente con la media nacional. No tenemos evidencia en contra de que la media del estado de México es muy similar a la nacional. Repite esta prueba con una muestra de Chiapas. ¿Qué resultado obtienes? Tenemos entonces: Prueba de Wald. Consideramos probar la hipótesis nula \\(H_0: \\theta = \\theta_0\\) contra la alternativa \\(H_1: \\theta \\neq \\theta_0\\). Suponemos que \\(\\hat{\\theta}_n\\) es asintóticamente normal e insesgada, de modo que bajo la hipótesis nula \\[\\frac{\\hat{\\theta}_n - \\theta_0}{\\hat{\\textsf{ee}}} \\sim \\mathsf{N}(0,1).\\] Entonces el valor-\\(p\\) de la prueba de Wald para esta hipótesis nula es \\[\\mathsf{valor-}p \\approx P(|Z| > |w|) = 2(1 - \\Phi(|w|)).\\] Ejemplo. Podemos hacer la prueba de Wald para proporciones con el estimador usual \\(\\hat{p}_n\\) que estima una proporción poblacional \\(p\\). En este caso, utilizamos la estimación usual del error estándar de \\(\\hat{p}_n\\), que está dada por \\[\\hat{\\textsf{ee}} = \\sqrt{\\frac{\\hat{p}_n(1-\\hat{p}_n)}{n}}.\\] Supongamos por ejemplo que en nuestros datos observamos que en \\(n=80\\) muestras independientes, tenemos \\(x=47\\) éxitos. ¿Es esto consistente con la hipótesis nula \\(p = 0.5\\)? Calcuamos primero: p_hat <- 47 / 80 ee <- sqrt(p_hat * (1 - p_hat) / 80) y la estadística \\(W\\) de prueba es: w <- (p_hat - 0.5) / ee w ## [1] 1.58978 Calculamos su valor p: valor_p <- 2 * (1 - pnorm(abs(w))) valor_p ## [1] 0.1118843 Y vemos que en este caso tenemos evidencia baja de que la proporción poblacional es distinta de 0.5. Observación: pruebas \\(t\\) y práctica estadística Con más supuestos distribucionales podemos hacer otros tipos de pruebas donde no requerimos hacer supuestos asintóticos. Por ejemplo, si suponemos que la muestra obtenida \\(X_1,\\ldots, X_n\\) proviene de una distribución normal \\(\\mathsf{N}(\\mu, \\sigma)\\) (cosa que es necesario verificar), entonces es posible demostrar que la estadística \\[T = \\frac{\\bar{X} - \\mu}{S / \\sqrt{n}}\\] tiene una distribución exacta que es \\(t\\) de Student con \\(n-1\\) grados de libertad, y no depende de otros parámetros, de manera que podemos usarla como distribución de referencia y podemos calcular valores \\(p\\) exactos (revisa la sección 8.1 de Chihara and Hesterberg (2018)). La diferencia con usar una prueba de Wald está en que aquí consideramos también la variablidad del error estándar estimado, lo que correctamente sugiere que esperamos variaciones proporcionalmente más grandes en \\(T\\) comparado con lo que sucede si no consideramos esta variación (como en la prueba de Wald). Sin embargo: Si la muestra \\(n\\) es grande, la distribución \\(t\\) de Student con \\(n-1\\) grados de libertad es muy similar a la normal estándar, de manera que la aproximación de Wald es apropiada. Cuando la muestra \\(n\\) es chica, es difícil validar el supuesto de normalidad, a menos que tengamos alguna información adicional acerca de la distribución poblacional. La prueba tiene cierta robustez a desviaciones de normalidad de las observaciones, pero si el sesgo es muy grande, por ejemplo, el supuesto es incorrecto y da valores \\(p\\) distorsionados. Puedes ver aquí, o el apéndice B.11 de Chihara and Hesterberg (2018) para ver descripciones de la distribución \\(t\\) y cómo se compara con una normal estándar dependiendo de los grados de libertad. En muchas ocasiones, en la práctica es común no checar supuestos y saltar directamente a hacer pruebas \\(t\\), lo cual no es muy seguro. Si tenemos duda de esos supuestos, podemos hacer pruebas gráficas o de permutaciones, si son apropiadas. Prueba de Wald para dos medias o proporciones Cuando tenemos dos muestras extraidas de manera independiente de dos poblaciones distintas, y queremos ver si la hipótesis de medias poblacionales iguales es consistente con los datos, podemos usar también una prueba de Wald. Sea \\(\\bar{X}_1\\) y \\(\\bar{X}_2\\) las medias muestrales correspondientes. Si la hipótesis de normalidad aplica para ambas distribuciones muestrales (normalidad asintótica), la variable \\[\\hat{\\delta} = \\bar{X}_1 - \\bar{X}_2\\] es aproximadamente normal con media \\(\\mathsf{N}(\\mu_1 - \\mu_2, \\textsf{ee})\\), donde \\(\\mu_1\\) y \\(\\mu_2\\) son las medias poblacionales correspondientes, y donde el error estándar de \\(\\hat{\\delta}\\) es la raíz de la suma de los cuadrados de los errores estándar de \\(\\bar{X}\\) y \\(\\bar{Y}\\): \\[ \\textsf{ee} = \\sqrt{\\textsf{ee}_1^2 + \\textsf{ee}_{2}^2}.\\] Se sigue entonces que: \\[\\textsf{ee} =\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2} }\\] (Nota: usa probabilidad para explicar por qué es cierto esto). De esto se deduce que bajo la hipótesis nula de igualdad de medias \\(\\mu_1 = \\mu_2\\), tenemos que la estadística de Wald \\[W = \\frac{\\hat{\\delta} - 0}{\\sqrt{\\frac{s_1^2}{n_1}+\\frac{s_2^2}{n_2}} } \\sim \\mathsf{N}(0,1)\\] es aproximamente normal estándar. Procedemos entonces a calcular el valor \\(p\\) usando la función de distribución acumulada de la normal estándar. En el caso particular de proporciones, podemos simplificar, como hicimos arriba, a \\[W = \\frac{\\hat{p}_1 - \\hat{p}_2}{\\sqrt{\\frac{\\hat{p}_1(1-\\hat{p}_1)}{n_1}+\\frac{\\hat{p}_2(1-\\hat{p}_2)}{n_2}} } \\sim \\mathsf{N}(0,1)\\] Haz una prueba comparando las medias en enlace de la Ciudad de México vs Estado de México. ¿Hay evidencia de que tienen distintas medias? Ejemplo (Wasserman (2013)). Supongamos tenemos dos conjuntos de prueba para evaluar algoritmos de predicción, de tamaños \\(n_1=100\\) y \\(n_2=250\\) respectivamente, tenemos dos algoritmos para generar predicciones de clase (digamos positivo y negativo). Usaremos el primer conjunto para evaluar el algoritmo 1 y el segundo para evaluar el algoritmo 2. El algoritmo 1 corre en 1 hora, y el algoritmo 2 tarda 24 horas. Supón que obtenemos que la tasa de clasificación correcta del primer algoritmo es \\(\\hat{p}_1 = 0.85\\), y la tasa del segundo es de \\(\\hat{p}_2 = 0.91\\). ¿Estos datos son consistentes con la hipótesis de que los algoritmos tienen desempeño muy similar? Es decir, queremos probar la hipótesis \\(p_1 = p_2\\). Calculamos la estadística de Wald: n_1 <- 100 n_2 <- 250 p_hat_1 <- 0.86 p_hat_2 <- 0.90 ee <- sqrt(p_hat_1 * (1 - p_hat_1) / n_1 + p_hat_2 * (1 - p_hat_2) / n_2) delta = p_hat_1 - p_hat_2 w <- delta / ee w ## [1] -1.011443 que da un valor p de: 2 * (1 - pnorm(abs(w))) ## [1] 0.3118042 Y vemos que valor-\\(p\\) es grande, de forma que los datos son consistentes con la hipótesis de que los algoritmos tienen desempeño similar. ¿Cómo tomaríamos nuestra decisión final? Si la diferencia entre 1 hora y 24 horas no es muy importante, entonces preferíamos usar el algoritmo 2. Sin embargo, si el costo de 24 horas es más alto que 1 hora de corrida, los datos no tienen indicios fuertes de que vayamos a perder en desempeño, y podriamos seleccionar el algoritmo 1. Datos pareados Las pruebas que acabamos de ver para comparar medias requieren poblaciones independientes. Si las dos muestras están pareadas (es decir, son dos mediciones en una misma muestra), podemos tomar considerar las diferencias \\(D_i = X_i - Y_i\\) y utilizar la prueba para una sola muestra con la media \\(\\bar{D}\\). Esta es una prueba de Wald pareada. Ejemplo (Wasserman (2013)). Ahora supongamos que utilizamos la misma muestra de tamaño \\(n=300\\) para probar los dos algoritmos. En este caso, no debemos hacer la prueba para medias de muestras independientes. Sin embargo, esto podemos ponerlo en términos de una prueba para una sola muestra. Tenemos las observaciones \\(X_1,\\ldots, X_n\\) y \\(Y_1,\\dots, Y_n\\), donde \\(X_i=1\\) si el algoritmo 1 clasifica correctamente, y 0 en otro caso. Igualmente, \\(Y_i=1\\) si el algoritmo 2 clasifica correctamente, y 0 en otro caso. Definimos \\[D_i= X_i - Y_i\\] Y \\(D_1,\\ldots, D_n\\) es una muestra iid. Ahora observemos que la media \\(\\bar{D}\\) tiene valor esperado \\(p_1 - p_2\\), donde \\(p_1\\) y \\(p_2\\) son las tasas de correctos del algoritmo 1 y del algoritmo 2 respectivamente. Podemos hacer una prueba de Wald como al principio de la sección: \\[W = \\frac{\\bar{D} - 0}{{\\textsf{ee}}}\\] Y notemos que el error estándar no se calcula como en el ejemplo anterior. Podríamos usar bootstrap para estimarlo, pero en este caso podemos usar el estimador usual \\[\\hat{\\textsf{ee}} = S / \\sqrt{n}\\] donde \\[S = \\frac{1}{n}\\sum_{i=1}^n (D_i - \\bar{D})^2\\] y nótese que necesitamos las decisiones indiviudales de cada algoritmo para cada caso, en contraste al ejemplo anterior de muestras independientes donde los errores estándar se calculaban de manera independiente. Esto tiene sentido, pues la variablidad de \\(\\bar{D}\\) depende de cómo están correlacionados los aciertos de los dos algoritmos. Supongamos por ejemplo que los datos que obtenemos son: datos_clasif |> head() ## # A tibble: 6 × 3 ## caso x y ## <chr> <dbl> <dbl> ## 1 1 1 1 ## 2 2 0 1 ## 3 3 0 1 ## 4 4 0 1 ## 5 5 0 1 ## 6 6 1 0 Como explicamos arriba, nos interesa la diferencia. Calculamos \\(d\\): datos_clasif <- datos_clasif |> mutate(d = x - y) datos_clasif |> head() ## # A tibble: 6 × 4 ## caso x y d ## <chr> <dbl> <dbl> <dbl> ## 1 1 1 1 0 ## 2 2 0 1 -1 ## 3 3 0 1 -1 ## 4 4 0 1 -1 ## 5 5 0 1 -1 ## 6 6 1 0 1 datos_clasif |> summarise(sd_x = sd(x), sd_y = sd(y), sd_d = sd(d)) ## # A tibble: 1 × 3 ## sd_x sd_y sd_d ## <dbl> <dbl> <dbl> ## 1 0.393 0.309 0.539 Y ahora calculamos la media de \\(d\\) (y tasa de correctos de cada clasificador:) medias_tbl <- datos_clasif |> summarise(across(where(is.numeric), mean, .names = "{col}_hat")) d_hat <- pull(medias_tbl, d_hat) medias_tbl ## # A tibble: 1 × 3 ## x_hat y_hat d_hat ## <dbl> <dbl> <dbl> ## 1 0.81 0.893 -0.0833 Ahora necesitamos calcular el error estándar. Como explicamos arriba, hacemos ee <- datos_clasif |> mutate(d_hat = mean(d)) |> mutate(dif_2 = (d - d_hat)) |> summarise(ee = sd(dif_2) / sqrt(n())) |> pull(ee) ee ## [1] 0.03112829 Y ahora podemos calcular la estadística \\(W\\) y el valor p correspondiente: w <- d_hat / ee valor_p <- 2 * (1 - pnorm(abs(w))) c(w = w, valor_p = valor_p) |> round(3) ## w valor_p ## -2.677 0.007 Y vemos que tenemos evidencia considerable de que el desempeño no es el mismo: el algoritmo 2 parece ser mejor. ¿Qué pasaría si incorrectamente usaras la prueba de dos muestras para este ejemplo? ¿Qué cosa cambia en la fórmula de la estadística de Wald? Pruebas de cociente de verosimilitud Otra técnica clásica para hacer pruebas de hipótesis es el de cociente de verosimilitudes. Con esta técnica podemos hacer pruebas que involucren varios parámetros, y podemos contrastar hipótesis nulas contra alternativas especificas. Para aplicar este tipo de pruebas es necesario hacer supuestos distribucionales (modelos probabilísticos), pues estas pruebas se basan en la función de verosimilitud \\(\\mathcal{L}(\\theta; x_1,\\ldots, x_n)\\). Ejemplo. Supongamos que tenemos la hipótesis nula de que una moneda es justa (\\(p =0.5\\) de sol). En 120 tiros de la moneda (que suponemos independientes), observamos 75 soles. Recordemos la función de log-verosimilitud para el modelo binomial (ignorando constantes que no dependen de \\(p\\)) es \\[\\ell(p) = 75 \\log(p) + (120 - 75)\\log(1-p) \\] Primero calculamos el estimador de máxima verosimilitud de \\(p\\), que es \\(\\hat{p} = 75/120 = 0.625\\). Evaluamos la verosimilitud \\[\\ell(\\hat{p}) = \\ell(0.625) = 75\\log(0.625) + 45\\log(0.375) = -79.388\\] - Ahora evaluamos la verosimlitud según la hipótesis nula, donde asumimos que \\(p = 0.5\\): \\[\\ell(p_0) = \\ell(0.5) = 75\\log(0.5) + 45\\log(0.5) = -83.177\\] - Finalmente, contrastamos estos dos números con una estadística que denotamos con \\(\\lambda\\): \\[\\lambda = 2\\left[\\ell(\\hat{p}) - \\ell(p_0)\\right] = 2[\\ell(0.625)- \\ell(0.5)] = 2(3.79)=7.58\\] A \\(\\lambda\\) se le llama la estadística de cociente de verosimilitud. Tomamos la diferencia de log verosimilitudes, que es los mismo que tomar el logaritmo del cociente de verosimilitudes, y de ahí el nombre de la prueba. Nótese que cuando este número \\(\\lambda\\) es muy grande, esto implica que la hipótesis nula es menos creíble, o menos consistente con los datos, pues la nula tiene mucho menos verosimilitud de lo que los datos indican. Por otro lado, cuando este valor es cercano a 0, entonces tenemos menos evidencia en contra de la hipótesis nula. Esto se explica en la siguiente gráfica: log_verosim <- function(p){ 75 * log(p) + (120 - 75) * log(1 - p) } verosim_tbl <- tibble(p = seq(0.4, 0.7, 0.01)) |> mutate(log_verosim = log_verosim(p)) ggplot(verosim_tbl, aes(x = p, y = log_verosim)) + geom_line() + geom_segment(x = 75/120, xend = 75/120, y = -130, yend = log_verosim(75/120), colour = "red") + geom_segment(x = 0.5, xend = 0.5, y = -130, yend = log_verosim(0.5), colour = "gray") + geom_errorbar(aes(x = 0.5, ymin = log_verosim(0.5), ymax = log_verosim(75/120)), colour = "orange", width = 0.05) + annotate("text", x = 0.48, y = -81.5, label = "3.79") + annotate("text", x = 0.515, y = -91, label ="nula", colour = "gray20") + annotate("text", x = 0.665, y = -91, label ="max verosímil", colour = "red") + labs(subtitle = expression(paste(lambda, "=2(3.79)=7.58"))) Este método puede generalizarse para que no solo aplique a hipótesis nulas donde \\(\\theta = \\theta_0\\), sino en general, \\(\\theta \\in \\Theta_0\\). Por ejemplo, podemos construir pruebas para \\(\\theta < 0.4\\). Definición. Consideramos la hipótesis nula \\(\\theta= \\theta_0\\). La estadística del cociente de verosimilitudes está dada por: \\[\\lambda = 2\\log\\left( \\frac{\\max_{\\theta}\\mathcal{L}(\\theta)}{\\max_{\\theta=\\theta_0}\\mathcal{L}(\\theta)} \\right ) = 2\\log\\left( \\frac{\\mathcal{L}(\\hat{\\theta})}{\\mathcal{L}(\\theta_0)} \\right)\\] donde \\(\\hat{\\theta}\\) es el estimador de máxima verosimilitud. Para construir una prueba asociada, como siempre, necesitamos una distribución de referencia. Esto podemos hacerlo con simulación, o usando resultados asintóticos. Distribución de referencia para pruebas de cocientes Para nuestro ejemplo anterior, podemos simular datos bajo la hipótesis nula, y ver cómo se distribuye la estadística \\(\\lambda\\): Ejemplo. Simulamos bajo la hipótesis nula como sigue: n_volados <- 120 # número de volados simulados_nula <- rbinom(4000, n_volados, p = 0.5) lambda <- function(n, x, p_0 = 0.5){ # estimador de max verosim p_mv <- x / n # log verosimilitud bajo mv log_p_mv <- x * log(p_mv) + (n - x) * log(1 - p_mv) # log verosimllitud bajo nula log_p_nula <- x * log(p_0) + (n - x) * log(1 - p_0) lambda <- 2*(log_p_mv - log_p_nula) lambda } lambda_obs <- lambda(n_volados, 75, 0.5) sims_tbl <- tibble(sim_x = simulados_nula) |> mutate(lambda = map_dbl(sim_x, ~ lambda(n_volados, .x, p_0 = 0.5))) ggplot(sims_tbl, aes(x = lambda)) + geom_histogram(binwidth = 0.7) + geom_vline(xintercept = lambda_obs, color = "red") Con esta aproximación a la distribución de referencia podemos calcular el valor p en nuestro ejemplo anterior: valor_p <- mean(sims_tbl$lambda >= lambda_obs) valor_p ## [1] 0.00675 y observamos que tenemos evidencia fuerte en contra de la hipótesis nula: la moneda no está balanceada. Ejemplo. Este ejemplo es un poco artificial, pero lo usamos para entender mejor las pruebas de cocientes de verosimlitud. Supongamos que tenemos una muestra de \\(\\mathsf{N}(\\mu, 1)\\), y queremos probar si \\(\\mu = 8\\). Asumimos que el supuesto de normalidad y desviación estándar iugal a 1 se cumplen. set.seed(3341) n_muestra <- 100 muestra_1 <- rnorm(n_muestra, 7.9, 1) crear_log_p <- function(x){ # crear log verosim para dos muestras normales independientes. log_p <- function(params){ mu <- params[1] log_vero <- dnorm(x, mean = mu, sd = 1, log = TRUE) |> sum() log_vero } } lambda_calc <- function(muestra, crear_log_p){ log_p <- crear_log_p(muestra) res <- optim(c(0), log_p, control = list(fnscale = -1)) lambda_mv <- log_p(res$par) lambda_nula <- log_p(8.0) lambda <- 2 * (lambda_mv - lambda_nula) lambda } lambda <- lambda_calc(muestra_1, crear_log_p) lambda ## [1] 2.101775 Ahora construimos con simulación la distribución de referencia usando simulaciones bajo la nula sims_nula <- map(1:10000, ~ rnorm(n_muestra, 8, 1)) lambda_nula_sim <- map_dbl(sims_nula, ~ lambda_calc(.x, crear_log_p)) tibble(lambda = lambda_nula_sim) |> ggplot(aes(x = lambda)) + geom_histogram() + geom_vline(xintercept = lambda, colour = "red") valor_p <- mean(lambda_nula_sim >= lambda) valor_p ## [1] 0.1537 Estos datos muestran consistencia con la hipótesis \\(\\mu = 8\\). Discusión: Nota en los dos ejemplos anteriores la similitud entre las distribuciones de referencia. En ambos casos, estas distribuciones resultan ser aproximadamente \\(\\chi\\)-cuadrada con 1 grado de libertad (ji-cuadrada). Podemos checar para el último ejemplo: teorica <- tibble(x = seq(0.1, 10, 0.01)) |> mutate(f_chi_1 = dchisq(x, df = 1)) tibble(lambda = lambda_nula_sim) |> ggplot() + geom_histogram(aes(x = lambda, y = ..density..), binwidth = 0.1) + geom_line(data = teorica, aes(x = x, y = f_chi_1), colour = "red") O mejor, con una gráfica de cuantiles de las simulaciones vs la téorica: tibble(lambda = lambda_nula_sim) |> ggplot(aes(sample = lambda)) + geom_qq(distribution = stats::qchisq, dparams = list(df = 1)) + geom_qq_line(distribution = stats::qchisq, dparams = list(df = 1)) Este resultado asintótico no es trivial, y se usa comúnmente para calcular valores \\(p\\). Discutiremos más este punto más adelante. Otro tipo de pruebas Con cocientes de verosimlitud podemos diseñar pruebas para contrastar condiciones que sólo un subconjunto de parámetros cumple. Ejemplo. Supongamos que queremos hacer una prueba de igualdad de medias \\(\\mu_1 = \\mu_2\\) para dos poblaciones normales \\(\\mathsf{N}(\\mu_1, \\sigma_1)\\) y \\(\\mathsf{N}(\\mu_2, \\sigma_2)\\), donde extraemos las muestras de manera independiente, y no conocemos las desviaciones estándar. Obtenemos dos muestras (que supondremos provienen de distribuciones normales, pues ese es nuestro supuesto) set.seed(223) muestra_1 <- rnorm(80, 0.8, 0.2) muestra_2 <- rnorm(120, 0.8, 0.4) Necesitamos: 1) calcular el valor de la estadística \\(\\lambda\\) de cociente de verosimilitudes, 2) Calcular la distribución de referencia para \\(\\lambda\\) bajo la hipótesis nula y finalmente 3) Ver qué tan extremo es el valor obtenido de \\(\\lambda\\) en relación a la distribución de referencia. crear_log_p <- function(x, y){ # crear log verosim para dos muestras normales independientes. log_p <- function(params){ mu_1 <- params[1] mu_2 <- params[2] sigma_1 <- params[3] sigma_2 <- params[4] log_vero_1 <- dnorm(x, mean = mu_1, sd = sigma_1, log = TRUE) |> sum() log_vero_2 <- dnorm(y, mean = mu_2, sd = sigma_2, log = TRUE) |> sum() log_vero <- log_vero_1 + log_vero_2 #se suman por independiencia log_vero } } log_p <- crear_log_p(muestra_1, muestra_2) crear_log_p_nula <- function(x, y){ log_p <- function(params){ # misma media mu <- params[1] sigma_1 <- params[2] sigma_2 <- params[3] log_vero_1 <- dnorm(x, mean = mu, sd = sigma_1, log = TRUE) |> sum() log_vero_2 <- dnorm(y, mean = mu, sd = sigma_2, log = TRUE) |> sum() log_vero <- log_vero_1 + log_vero_2 #se suman por independiencia log_vero } } log_p_nula <- crear_log_p_nula(muestra_1, muestra_2) Ahora tenemos el problema de que no conocemos las sigma. Estas deben ser estimadas para después calcular el cociente de verosimilitud: res <- optim(c(0, 0, 1, 1), log_p, method = "Nelder-Mead", control = list(fnscale = -1)) res$convergence ## [1] 0 est_mv <- res$par names(est_mv) <- c("mu_1", "mu_2", "sigma_1", "sigma_2") est_mv ## mu_1 mu_2 sigma_1 sigma_2 ## 0.8153471 0.7819913 0.1987545 0.3940484 Y tenemos lambda_1 <- log_p(est_mv) lambda_1 ## [1] -42.76723 Ahora calculamos el máximo bajo el supuesto de la hipótesis nula: res <- optim(c(0, 1, 1), log_p_nula, method = "Nelder-Mead", control = list(fnscale = -1)) res$convergence ## [1] 0 est_mv_nula <- res$par names(est_mv) <- c("mu", "sigma_1", "sigma_2") est_mv_nula ## [1] 0.8062091 0.1989438 0.3948603 y evaluamos lambda_2 <- log_p_nula(est_mv_nula) lambda_2 ## [1] -43.07902 Finalmente, nuestra estadística \\(\\lambda\\) es lambda <- 2 * (lambda_1 - lambda_2) lambda ## [1] 0.6235661 Y ahora necesitamos calcular un valor-\\(p\\). El problema que tenemos en este punto es que bajo la hipótesis nula no están determinados todos los parámetros, así que no podemos simular de manera simple muestras para obtener la distribución de referencia. Podemos sin embargo usar bootstrap paramétrico usando los estimadores de máxima verosimilitud bajo la nula simular_boot <- function(n_1, n_2, est_mv_nula){ x <- rnorm(n_1, est_mv_nula[1], est_mv_nula[2]) y <- rnorm(n_2, est_mv_nula[1], est_mv_nula[3]) list(x = x, y = y) } lambda_nula_sim <- function(est_mv_nula){ muestras <- simular_boot(80, 120, est_mv_nula) x <- muestras$x y <- muestras$y log_p <- crear_log_p(x, y) log_p_nula <- crear_log_p_nula(x, y) est_1 <- optim(c(0,0,1,1), log_p, control = list(fnscale = -1)) est_2 <- optim(c(0,1,1), log_p_nula, control = list(fnscale = -1)) lambda <- 2*(log_p(est_1$par) - log_p_nula(est_2$par)) lambda } lambda_sim <- map_dbl(1:2000, ~ lambda_nula_sim(est_mv_nula = est_mv_nula)) Y graficamos la distribución de referencia junto con el valor de \\(\\lambda\\) que obtuvimos: tibble(lambda = lambda_sim) |> ggplot(aes(x = lambda)) + geom_histogram() + geom_vline(xintercept = lambda, colour = "red") Y claramente los datos son consistentes con medias iguales. El valor-\\(p\\) es mean(lambda_sim > lambda) ## [1] 0.4275 Verificamos una vez más que la distribución de referencia es cercana a una \\(\\chi\\)-cuadrada con un grado de libertad. tibble(lambda = lambda_sim) |> ggplot(aes(sample = lambda)) + geom_qq(distribution = stats::qchisq, dparams = list(df = 1)) + geom_qq_line(distribution = stats::qchisq, dparams = list(df = 1)) Esta es la definición generalizada de las pruebas de cociente de verosimilitudes Definición. Consideramos la hipótesis nula \\(\\theta \\in \\Theta_0\\). La estadística del cociente de verosimilitudes está dada por: \\[\\lambda = 2\\log\\left( \\frac{\\max_{\\theta}\\mathcal{L}(\\theta)}{\\max_{\\theta\\in\\Theta_0}\\mathcal{L}(\\theta)} \\right ) = 2\\log\\left( \\frac{ \\mathcal{L}(\\hat{\\theta})}{\\mathcal{L}(\\hat{\\theta}_0)} \\right)\\] donde \\(\\hat{\\theta}\\) es el estimador de máxima verosimilitud de \\(\\theta\\) y \\(\\hat{\\theta}_0\\) es el estimador de máxima verosimilitud de \\(\\theta\\) cuando restringimos a que \\(\\theta \\in \\Theta_0\\). En nuestro ejemplo anterior, el espacio \\(\\Theta_0\\) era \\(\\{ (\\mu,\\mu,\\sigma_1, \\sigma_2)\\}\\), que es un subconjunto de \\(\\{ (\\mu_1,\\mu_2,\\sigma_1, \\sigma_2)\\}\\). Nótese que el espacio \\(\\Theta_0\\) tiene tres parámetros libres, mientras que el espacio total tiene 4. Aunque podemos usar el bootstrap paramétrico para construir distribuciones de referencia para estas pruebas y calcular un valor-\\(p\\), el siguiente teorema, cuya demostración no es trivial, explica las observaciones que hicimos arriba. Este teorema enuncia la estrategia del enfoque clásico, que utiliza una aproximación asintótica. Valores p para pruebas de cocientes de verosimilitud. Supongamos que \\(\\theta = (\\theta_1,\\theta_2, \\ldots, \\theta_p)\\). Sea \\[\\Theta_0 = \\{\\theta : \\theta_1 = a_1, \\theta_2 = a_2, \\dots, \\theta_q = a_q \\},\\] es decir la hipótesis \\(\\theta \\in \\Theta_0\\) es que los primeros \\(q\\) parámetros de \\(\\theta\\) estan fijos en algún valor. Los otros parámetros no se consideran en esta prueba. Si \\(\\lambda\\) es la estadística de cociente de verosimilitudes de esta prueba, entonces, bajo la nula \\(\\theta \\in \\Theta_0\\) tenemos que la distribución de \\(\\lambda\\) es asintóticamente \\(\\chi\\)-cuadrada con \\(q\\) grados de libertad, denotada por \\(\\chi^2_q\\). El valor-\\(p\\) para esta prueba es \\[P(\\chi^2_{q} > \\lambda)\\] Observaciones: Para hacer cálculos con la distribución \\(\\chi\\)-cuadrada usamos rutinas numéricas (por ejemplo la función pchisq en R). Nótese que \\(p\\) es la dimensión del espacio \\(\\Theta\\) (\\(p\\) parámetros), y que \\(p-q\\) es la dimensión del espacio \\(\\Theta_0\\) (pues \\(q\\) parámetros están fijos), de modo que los grados de libertad son la dimensión de \\(\\Theta\\) menos la dimensión de \\(\\Theta_0\\). En nuestro primer ejemplo (proporción de éxitos) solo teníamos un parámetro. El espacio \\(\\Theta_0\\) es de dimensión 0, así que los grados de libertad son \\(1 = 1 - 0\\) En este último ejemplo donde probamos igualdad de medias, el espacio \\(\\Theta\\) tiene dimensión 4, y el espacio \\(\\Theta_0\\) es de dimensión 3 (tres parámetros libres), por lo tanto los grados de libertad son \\(1 = 4 -3\\). Ejemplo En nuestro ejemplo de prueba de igualdad de medias, usaríamos pchisq(lambda, df =1, lower.tail = FALSE) ## [1] 0.4297252 que es similar al que obtuvimos con la estrategia del bootstrap paramétrico. Errores tipo I y tipo II En algunas ocasiones, en lugar de solamente calcular un valor-\\(p\\) queremos tomar una decisión asociada a distintas hipótesis que consideramos posibles. Por ejemplo, nuestra hipótesis nula podría ser Hipótesis nula \\(H_0\\): Una medicina nueva que estamos probando no es efectiva en reducir el colesterol en pacientes. Y queremos contrastar con una alternativa: Hipótesis alternativa \\(H_A\\): la medicina nueva reduce los niveles de colesterol en los pacientes. La decisión que está detrás de estas pruebas es: si no podemos rechazar la nula, la medicina no sale al mercado. Si rechazamos la nula, entonces la medicina es aprobada para salir al mercado. Para diseñar esta prueba, procedemos como sigue: Definimos cómo recolectar datos \\(X\\) de interés Definimos una estádistica \\(T(X)\\) de los datos. Definimos una región de rechazo \\(R\\) de valores tales que si \\(T(X)\\in R\\), entonces rechazaremos la hipótesis nula (e implícitamente tomaríamos la decisión asociada a la alternativa). Ejecutamos la prueba observando datos \\(X=x\\), calculando \\(T(x)\\), y checando si \\(T(x) \\in R\\). Si esto sucede entonces decimos que rechazamos la hipótesis nula, y tomamos la decisión asociada a la alternativa. Ejemplo. Si tenemos la hipótesis nula \\(p_1=0.5\\) para una proporción, y al alternativa es \\(p_1\\neq 0.5\\), podemos usar la estadística de Wald \\(T(x) = \\frac{\\hat{p_1} - 0.5}{\\hat{\\textsf{ee}}}\\). Podríamos definir la región de rechazo como \\(R = \\{T(x) : |T(x)| > 3 \\}\\) (rechazamos si en valor absoluto la estadística de Wald es mayor que 3). Cuando diseñamos una prueba de este tipo, quisiéramos minimizar dos tipos de errores: Rechazar la hipótesis nula \\(H_0\\) cuando es cierta: Error tipo I No rechazar la hipótesis nula \\(H_0\\) cuando \\(H_0\\) es falsa: Error tipo II La gravedad de cada error depende del problema. En nuestro ejemplo de la medicina, por ejemplo: Un error tipo II resultaría en una medicina efectiva que no sale al mercado, lo que tiene consecuencias financieras (para la farmaceútica) y costos de oportunidad en salud (para la población). Por otra parte, Un error tipo I resultaría en salir al mercado con una medicina que no es efectiva. Esto tiene costos de oportunidad financieros que pueden ser grandes para la sociedad. Todos estos costos dependen, por ejempĺo, de qué tan grave es la enfermedad, qué tan costosa es la medicina, y así sucesivamente. En el enfoque más clásico, los errores tipo I y tipo II generalmente no se balancean según su severidad o probabilidad. En lugar de eso, generalmente se establece un límite para la probabilidad de cometer un error del tipo I (usualmente 5%, por una tradición que no tiene mucho fundamento) En vista de este ejemplo simple, y las observaciones de arriba: Reducir una decisión compleja a una prueba de hipótesis con resultados binarios (rechazar o no) es generalmente erróneo. Las pruebas de hipótesis se usan muchas veces incorrectamente cuando lo más apropiado es usar estimación por intervalos o algo similar que cuantifique la incertidumbre de las estimaciones. Consulta por ejemplo el comunicado de la ASA acerca de p-values y pruebas de hipótesis En el caso de la medicina, por ejemplo, realmente no nos interesa que la medicina sea mejor que un placebo. Nos importa que tenga un efecto considerable en los pacientes. Si estimamos este efecto, incluyendo incertidumbre, tenemos una mejor herramienta para hacer análisis costo-beneficio y tomar la decisión más apropiada. Como dijimos, típicamente se selecciona la región de rechazo de forma que bajo la hipótesis nula la probabilidad de cometer un error tipo I está acotada. Definición. Supongamos que los datos \\(X_1,X_2,\\ldots, X_n\\) provienen de una distribución \\(F_\\theta\\), donde no conocemos \\(\\theta\\). Supongamos que la hipótesis nula es que \\(\\theta = \\theta_0\\) (que llamamos una hipótesis simple). La función de potencia de una prueba con región de rechazo \\(R\\) se define como la probabilidad de rechazar para cada posible valor del parámetro \\(\\theta\\) \\[\\beta(\\theta) = P_\\theta (X\\in R).\\] El tamaño de una prueba se define como el valor \\[\\alpha = \\beta(\\theta_0),\\] es decir, la probabilidad de rechazar la nula (\\(\\theta = \\theta_0\\)) erróneamente. Observación. Esto se generaliza para hipótesis compuestas, donde la nula es que el parámetro \\(\\theta\\) está en un cierto conjunto \\(\\Theta_0\\). Por ejemplo, una hipótesis nula puede ser \\(\\theta < 0.5\\). En este caso, \\(\\alpha\\) se define como el valor más grande que \\(\\beta(\\theta)\\) toma cuando \\(\\theta\\) está en \\(\\Theta_0\\), es decir, la probabilidad de rechazo más grande cuando la hipótesis nula se cumple. Decimos que una prueba tiene nivel de significancia de \\(\\alpha\\) si su tamaño es menor o igual a \\(\\alpha\\). Decimos que la potencia de una prueba es la probabilidad de, correctamente, rechazar la hipótesis nula cuando la alterna es verdadera: \\[\\beta(\\theta_a) = P_{\\theta_a} (X \\in R).\\] Observación: Sería deseable encontrar la prueba con mayor potencia bajo \\(H_a\\), entre todas las pruebas con tamaño \\(\\alpha\\). Esto no es trivial y no siempre existe. Observación: El valor \\(p\\) es el menor tamaño con el que podemos rechazar \\(H_0\\). Ejemplo (Chihara and Hesterberg (2018)) Supongamos que las calificaciones de Enlace de alumnos en México se distribuye aproximadamente como una normal con media 515 y desviación estándar de 120. En una ciudad particular, se quiere decidir si es neceario pedir fondos porque la media de la ciudad es más baja que la nacional. Nuestra hipótesis nula es \\(H_0: \\mu \\geq 515\\) y la alternativa es \\(\\mu < 515\\), así que si rechazamos la nula se pedirían los fondos. Supondremos que la distribución de calificaciones en la ciudad es también aproximadamente normal con desviación estándar de 130. Se plantea tomar una muestra de 100 alumnos, y rechazar si la media muestral \\(\\bar{X}\\) es menor que 505. ¿Cuál es la probabilidad \\(\\alpha\\) de tener un error de tipo I? La función de potencia es \\[\\beta(\\mu) = P_\\mu(\\bar{X} < 505)\\] Restando la media \\(\\mu\\) y estandarizando obtenemos \\[\\beta(\\mu) = P \\left (\\frac{\\bar{X} - \\mu}{130/\\sqrt{100}} < \\frac{505 -\\mu}{130/\\sqrt{100}} \\right )\\] así que \\[\\beta(\\mu) = \\Phi \\left (\\frac{505 -\\mu}{130/\\sqrt{100}}\\right ),\\] donde \\(\\Phi\\) es la función acumulada de la normal estándar. La gráfica de la función potencia es entonces potencia_tbl <- tibble(mu = seq(450, 550, 0.5)) |> mutate(beta = pnorm((505 - mu)/13)) |> # probabilidad de rechazar mutate(nula_verdadera = factor(mu >= 515)) # nula verdadera ggplot(potencia_tbl, aes(x = mu, y = beta, colour = nula_verdadera)) + geom_line() Es decir, si la media \\(\\mu\\) de la ciudad es muy baja, con mucha seguridad rechazamos. Si es relativamente alta entonces no rechazamos. El tamaño de la prueba es el mayor valor de probabilidad de rechazo que se obtiene sobre los valores \\(\\mu\\geq 515\\) (la nula). Podemos calcularlo analíticamente como sigue: Si \\(\\mu \\geq 515\\), entonces \\[\\beta(\\mu) \\leq \\beta(515) = \\Phi\\left (\\frac{505 -515}{130/\\sqrt{100}}\\right ) = \\Phi( - 10 / 13) = \\Phi(-0.7692)\\] que es igual a pnorm(-0.7692) ## [1] 0.2208873 Y este es el tamaño de la prueba. En otras palabras: si la ciudad no está por debajo de la media nacional, hay una probabilidad de 22% de que erróneamente se pidan fondos (al rechazar \\(H_0\\)). Ejemplo Supongamos que los que programan el presupuesto deciden que se requiere tener una probabilidad de a lo más 5% de rechazar erróneamente la hipótesis nula (es decir, pedir fondos cuando en realidad su media no está debajo de la nacional) para poder recibir fondos. ¿Cuál es la región de rechazo que podríamos escoger? En el caso anterior usamos la región \\(\\bar{X}<505\\). Si el tamaño de muestra está fijo en \\(n=100\\) (por presupuesto), entonces tenemos que escoger un punto de corte más extremo. Si la región de rechazo es \\(\\bar{X} < C)\\) entonces tenemos, siguiendo los cálculos anteriores, que \\[0.05 = \\alpha = \\Phi \\left ( \\frac{C -515}{130/\\sqrt{100}}\\right) = \\Phi \\left( \\frac{C- 515}{13} \\right)\\] Buscamos el cuantil 0.05 de la normal estándar, que es z_alpha <- qnorm(0.05) z_alpha ## [1] -1.644854 Y entonces requerimos que \\[\\frac{C- 515}{13} = -1.6448.\\] Despejando obtenemos C <- 13*z_alpha + 515 C ## [1] 493.6169 Así que podemos usar la región \\(\\bar{X} < 493.5\\), que es más estricta que la anterior de \\(\\bar{X} < 505\\). Considera la potencia de la prueba \\(\\beta(\\mu)\\) que vimos arriba. Discute y corre algunos ejemplos para contestar las siguientes preguntas: Recuerda la definición: ¿qué significa \\(\\beta(\\mu)\\)? ¿Qué pasa con la potencia cuando \\(\\mu\\) está más lejos de los valores de la hipótesis nula? ¿Qué pasa con la potencia cuando hay menos variabilidad en la población? ¿Y cuando la muestra es más grande? ¿Qué pasa si hacemos más chico el nivel de significancia? Consideraciones prácticas Algunos recordatorios de lo que hemos visto: Rechazar la nula no quiere decir que la nula es falsa, ni que encotramos un “efecto”. Un valor-\\(p\\) chico tampoco quiere decir que la nula es falsa. Lo que quiere decir es que la nula es poco consistente con los datos que observamos, o que es muy poco probable que la nula produzca los datos que observamos. Rechazar la nula (encontrar un efecto “significativo”) no quiere decir que el efecto tiene importancia práctica. Si la potencia es alta (por ejemplo cuando el tamaño de muestra es grande), puede ser que la discrepancia de los datos con la nula es despreciable, entonces para fines prácticos podríamos trabajar bajo el supuesto de la nula. Por eso en general preferimos hacer estimación que pruebas de hipótesis para entender o resumir los datos y tamaños de las discrepancias. Adicionalmente, muchas de las hipótesis nulas que generalmente se utilizan se pueden rechazar sin datos (por ejemplo, igualdad de proporciones en dos poblaciones reales). Lo que importa es qué tan diferentes son, y qué tan bien podemos estimar sus diferencias. En la literatura, muchas veces parece que “encontrar una cosa interesante” es rechazar una hipótesis nulas con nivel 5% de significancia. Es más importante entender cómo se diseñó el estudio, cómo se recogieron los datos, cuáles fueron las decisiones de análisis que pasar el mítico nivel de 5% Cuando la potencia es baja (por ejemplo porque el tamaño de muestra es muy chico), tenemos que observar diferencias muy grandes para rechazar. Si probamos algo poco factible (por ejemplo, que la vitamina \\(C\\) aumenta la estatura a los adultos), entonces los rechazos generalmente se deben a variabilidad en la muestra (error tipo II). Cuando diseñamos y presentamos resultados de un estudio o análisis, es mejor pensar en describir los datos y su variabilidad, y mostrar estimaciones incluyendo fuentes de incertidumbre, en lugar de intentar resumir con un valor-\\(p\\) o con el resultado de una prueba de hipótesis. Pruebas múltiples En algunas ocasiones se hacen muchas pruebas para “filtrar” las cosas que son interesantes y las que no. Por ejemplo, cuando comparamos miles de genes entre dos muestras (la nula es que son similares). Si cada prueba se conduce a un nivel \\(\\alpha\\), la probablilidad de tener al menos un rechazo falso (un error tipo I) es considerablemente más alta que \\(\\alpha\\). Por ejemplo, si repetimos una prueba de hipótesis con nivel \\(\\alpha\\) con muestras independientes, la probabilidad de tener al menos un rechazo falso es \\(1-(1-\\alpha)^n\\), que es muy cercano a uno si \\(n\\) es grande (¿cómo derivas esta fórmula?). Por ejemplo, si \\(\\alpha = 0.05\\) y \\(n = 100\\), con más de 99% probabilidad tendremos al menos un rechazo falso, o un “hallazgo” falso. Sin \\(n\\) es muy grande, varios de los hallazgos que encontremos serán debidos a variabilidad muestral. Puedes ver en (Wasserman 2013), sección 10.7 métodos conservadores como corrección de Bonferroni (sólo rechazar cuando el valor-\\(p\\) es menor a \\(0.05/n\\)), o la técnica más moderna de control de tasa de descubrimientos falsos (FDR). Cuando estamos en una situación como esta (que es más retadora en cuanto a análisis), sin embargo, sugerimos usar estimaciones que tomen cuenta todos los datos con regularización apropiada: por ejemplo, en lugar de trabajar con cada muestra por separado, intentamos construir un modelo para el proceso completo de muestreo. Una posibilidad son modelos jerárquicos bayesianos. Ver por ejemplo (Gelman, Hill, and Yajima 2012). Referencias "],["introducción-a-inferencia-bayesiana-1.html", "Sección 10 Introducción a inferencia bayesiana Un primer ejemplo completo de inferencia bayesiana Ejemplo: estimando una proporción Ejemplo: observaciones uniformes Probabilidad a priori Análisis conjugado Pasos de un análisis de datos bayesiano Verificación predictiva posterior Predicción", " Sección 10 Introducción a inferencia bayesiana Para esta sección seguiremos principalmente Kruschke (2015). Adicionalmente puedes ver la sección correspondiente de Chihara and Hesterberg (2018). En las secciones anteriores estudiamos el método de máxima verosimilitud y métodos de remuestreo. Esto lo hemos hecho para estimar parámetros, y cuantificar la incertidumbre qué tenemos acerca de valores poblacionales. La inferencia bayesiana tiene objetivos similares. Igual que en máxima verosimilitud, la inferencia bayesiana comienza con modelos probabilísticos y observaciones. En contraste con máxima verosimilitud, la inferencia bayesiana está diseñada para incorporar información previa o de expertos que tengamos acerca de los parámetros de interés. La inferencia bayesiana cubre como caso particular métodos basados en máxima verosimilitud. El concepto probabilístico básico que utilizamos para construir estos modelos y la inferencia es el de probabilidad condicional: la probabilidad de que ocurran ciertos eventos dada la información disponible del fenómeno que nos interesa. Un primer ejemplo completo de inferencia bayesiana Consideremos el siguiente problema: Nos dan una moneda, y solo sabemos que la moneda puede tener probabilidad \\(3/5\\) de tirar sol (está cargada a sol) o puede ser una moneda cargada a águila, con probabilidad \\(2/5\\) de tirar sol. Vamos a lanzar la moneda dos veces y observamos su resultado (águila o sol). Queremos decir algo acerca de qué tan probable es que hayamos tirado la moneda cargada a sol o la moneda cargada a águila. En este caso, tenemos dos variables: \\(X\\), que cuenta el número de soles obtenidos en el experimento aleatorio, y \\(\\theta\\), que da la probabilidad de que un volado resulte en sol (por ejemplo, si la moneda es justa entonces \\(\\theta = 0.5\\)). ¿Qué cantidades podríamos usar para evaluar qué moneda es la que estamos usando? Si hacemos el experimento, y tiramos la moneda 2 veces, podríamos considerar la probabilidad \\[P(\\theta = 0.4 | X = x)\\] donde \\(x\\) es el número de soles que obtuvimos en el experimento. Esta es la probabilidad condicional de que estemos tirando la moneda con probabilidad de sol 2/5 dado que observamos \\(x\\) soles. Por ejemplo, si tiramos 2 soles, deberíamos calcular \\[P(\\theta=0.4|X=2).\\] ¿Cómo calculamos esta probabilidad? ¿Qué sentido tiene? Usando reglas de probabildad (regla de Bayes en particular), podríamos calcular \\[P(\\theta=0.4|X=2) = \\frac{P(X=2 | \\theta = 0.4) P(\\theta =0.4)}{P(X=2)}\\] Nota que en el numerador uno de los factores, \\(P(X=2 | \\theta = 0.4),\\) es la verosimilitud. Así que primero necesitamos la verosimilitud: \\[P(X=2|\\theta = 0.4) = (0.4)^2 = 0.16.\\] La novedad es que ahora tenemos que considerar la probabilidad \\(P(\\theta = 0.4)\\). Esta cantidad no la habíamos encontrado antes. Tenemos que pensar entonces que este parámetro es una cantidad aleatoria, y puede tomar dos valores \\(\\theta=0.4\\) ó \\(\\theta = 0.6\\). Considerar esta cantidad como aleatoria requiere pensar, en este caso, en cómo se escogió la moneda, o qué sabemos acerca de las monedas que se usan para este experimento. Supongamos que en este caso, nos dicen que la moneda se escoge al azar de una bolsa donde hay una proporción similar de los dos tipos de moneda (0.4 ó 0.6). Es decir el espacio parametral es \\(\\Theta = \\{0.4, 0.6\\},\\) y las probabilidades asociadas a cada posibilidad son las mismas. Es decir, tenemos \\[P(\\theta = 0.4) = P(\\theta = 0.6) =0.5,\\] que representa la probabilidad de escoger de manera aleatoria la moneda con una carga en particular. Ahora queremos calcular \\(P(X=2)\\), pero con el trabajo que hicimos esto es fácil. Pues requiere usar reglas de probabilidad usuales para hacerlo. Podemos utilizar probabilidad total \\[\\begin{align} P(X) &= \\sum_{\\theta \\in \\Theta} P(X, \\theta)\\\\ &= \\sum_{\\theta \\in \\Theta} P(X\\, |\\, \\theta) P(\\theta), \\end{align}\\] lo cual en nuestro ejemplo se traduce en escribir \\[ P(X=2) = P(X=2|\\theta = 0.4)P(\\theta = 0.4) + P(X=2|\\theta=0.6)P(\\theta =0.6),\\] por lo que obtenemos \\[P(X=2) = 0.16(0.5) + 0.36(0.5) = 0.26.\\] Finalmente la probabilidad de haber escogido la moneda con carga \\(2/5\\) dado que observamos dos soles en el lanzamiento es \\[P(\\theta=0.4|X=2) = \\frac{0.16(0.5)}{0.26} \\approx 0.31.\\] Es decir, la probabilidad posterior de que estemos tirando la moneda \\(2/5\\) baja de 0.5 (nuestra información inicial) a 0.31. Este es un ejemplo completo, aunque muy simple, de inferencia bayesiana. La estrategia de inferencia bayesiana implica tomar decisiones basadas en las probabilidades posteriores. Finalmente, podríamos hacer predicciones usando la posterior predictiva. Si \\({X}_{nv}\\) es una nueva tirada adicional de la moneda que estamos usando, nos interesaría saber: \\[P({X}_{nv}=\\mathsf{sol}\\, | \\, X=2)\\] Notemos que un volado adicional es un resultado binario. Por lo que podemos calcular observando que \\(P({X}_{nv}|X=2, \\theta)\\) es una variable Bernoulli con probabilidad \\(\\theta\\), que puede valer 0.4 ó 0.6. Como tenemos las probabilidades posteriores \\(P(\\theta|X=2)\\) podemos usar probabilidad total, condicionado en \\(X=2\\): \\[\\begin{align*} P({X}_{nv}=\\mathsf{sol}\\, | \\, X=2) & = \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}, \\theta \\, | \\, X=2) & \\text{(probabilidad total)}\\\\ &= \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}\\, | \\theta , X=2) P(\\theta \\, | \\, X=2) & \\text{(probabilidad condicional)}\\\\ &= \\sum_{\\theta \\in \\Theta} P({X}_{nv}=\\mathsf{sol}\\, | \\theta ) P(\\theta \\, | \\, X=2), & \\text{(independencia condicional)} \\end{align*}\\] lo que nos da el siguiente cálculo \\[P(X_{nv}=\\mathsf{sol}\\, |\\, \\theta=0.4) \\, P(\\theta=0.4|X=2) \\, +\\, P(X_{nv}=\\mathsf{sol}|\\theta = 0.6) \\, P(\\theta =0.6|X=2)\\] Es decir, promediamos ponderando con las probabilidades posteriores. Por lo tanto obtenemos \\[P(X_{nv} = \\mathsf{sol}|X=2) = 0.4 ( 0.31) + 0.6 (0.69) = 0.538.\\] Observación 0 Nótese que en contraste con máxima verosimilitud, en este ejemplo cuantificamos con probabilidad condicional la incertidumbre de los parámetros que no conocemos. En máxima verosimilitud esta probabilidad no tiene mucho sentido, pues nunca consideramos el parámetro desconocido como una cantidad aleatoria. Observación 1 Nótese el factor \\(P(X=2)\\) en la probabilidad posterior puede entenderse como un factor de normalización. Notemos que los denominadores en la distribución posterior son \\[P(X=2 | \\theta = 0.4) P(\\theta =0.4) = 0.16(0.5) = 0.08,\\] y \\[P(X=2 | \\theta = 0.6) P(\\theta =0.6) = 0.36(0.5) = 0.18.\\] Las probabilidades posteriores son proporcionales a estas dos cantidades, y como deben sumar uno, entonces normalizando estos dos números (dividiendo entre su suma) obtenemos las probabilidades. Observación 2 La nomenclatura que usamos es la siguiente: Como \\(X\\) son los datos observados, llamamos a \\(P(X|\\theta)\\) la verosimilitud, o modelo de los datos. A \\(P(\\theta)\\) le llamamos la distribución inicial o previa. La distribución que usamos para hacer inferencia \\(P(\\theta|X)\\) es la distribución final o posterior. Para utilizar inferencia bayesiana, hay que hacer supuestos para definir las primeras dos partes del modelo. La parte de iniciales o previas está ausente de enfoques como máxima verosimlitud usual. Observación 3 ¿Cómo decidimos las probabilidades iniciales, por ejemplo \\(P(\\theta=0.4)\\) ? Quizá es un supuesto y no tenemos razón para pensar que se hace de otra manera. O quizá conocemos el mecanismo concreto con el que se selecciona la moneda. Discutiremos esto más adelante. Observación 4 ¿Cómo decidimos el modelo de los datos? Aquí típicamente también tenemos que hacer algunos supuestos, aunque algunos de estos pueden estar basados en el diseño del estudio, por ejemplo. Igual que cuando usamos máxima verosimilitud, es necesario checar que nuestro modelo ajusta razonablemente a los datos. Ejercicio Cambia distintos parámetros del número de soles observados, las probabilidades de sol de las monedas, y las probabilidades iniciales de selección de las monedas. n_volados <- 2 # posible valores del parámetro desconocido theta = c(0.4, 0.6) # probabilidades iniciales probs_inicial <- tibble(moneda = c(1, 2), theta = theta, prob_inicial = c(0.5, 0.5)) probs_inicial ## # A tibble: 2 × 3 ## moneda theta prob_inicial ## <dbl> <dbl> <dbl> ## 1 1 0.4 0.5 ## 2 2 0.6 0.5 # verosimilitud crear_verosim <- function(no_soles){ verosim <- function(theta){ # prob de observar no_soles en 2 volados con probabilidad de sol theta dbinom(no_soles, n_volados, theta) } verosim } # evaluar verosimilitud verosim <- crear_verosim(2) # ahora usamos regla de bayes para hacer tabla de probabilidades tabla_inferencia <- probs_inicial |> mutate(verosimilitud = map_dbl(theta, verosim)) |> mutate(inicial_x_verosim = prob_inicial * verosimilitud) |> # normalizar mutate(prob_posterior = inicial_x_verosim / sum(inicial_x_verosim)) tabla_inferencia |> mutate(moneda_obs = moneda) |> select(moneda_obs, theta, prob_inicial, verosimilitud, prob_posterior) ## # A tibble: 2 × 5 ## moneda_obs theta prob_inicial verosimilitud prob_posterior ## <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1 0.4 0.5 0.16 0.308 ## 2 2 0.6 0.5 0.36 0.692 ¿Qué pasa cuando el número de soles es 0? ¿Cómo cambian las probabilidades posteriores de cada moneda? Incrementa el número de volados, por ejemplo a 10. ¿Qué pasa si observaste 8 soles, por ejemplo? ¿Y si observaste 0? ¿Qué pasa si cambias las probabilidades iniciales (por ejemplo incrementas la probabilidad inicial de la moneda 1 a 0.9)? Justifica las siguientes aseveraciones (para este ejemplo): Las probabilidades posteriores o finales son una especie de punto intermedio entre verosimilitud y probablidades iniciales. Si tenemos pocas observaciones, las probabilidades posteriores son similares a las iniciales. Cuando tenemos muchos datos, las probabilidades posteriores están más concentradas, y no es tan importante la inicial. Si la inicial está muy concentrada en algún valor, la posterior requiere de muchas observaciones para que se pueda concentrar en otros valores diferentes a los de la inicial. Ahora resumimos los elementos básicos de la inferencia bayesiana, que son relativamente simples: Inferencia bayesiana. Con la notación de arriba: Como \\(X\\) son los datos observados, llamamos a \\(P(X|\\theta)\\) la verosimilitud, proceso generador de datos o modelo de los datos. El factor \\(P(\\theta)\\) le llamamos la distribución inicial o previa. La distribución que usamos para hacer inferencia \\(P(\\theta|X)\\) es la distribución final o posterior Hacemos inferencia usando la ecuación \\[P(\\theta | X) = \\frac{P(X | \\theta) P(\\theta)}{P(X)}\\] que también escribimos: \\[P(\\theta | X) \\propto P(X | \\theta) P(\\theta)\\] donde \\(\\propto\\) significa “proporcional a”. No ponemos \\(P(X)\\) pues como vimos arriba, es una constante de normalización. En estadística Bayesiana, las probablidades posteriores \\(P(\\theta|X)\\) dan toda la información que necesitamos para hacer inferencia. ¿Cuándo damos probablidad alta a un parámetro particular \\(\\theta\\)? Cuando su verosimilitud es alta y/o cuando su probabilidad inicial es alta. De este modo, la posterior combina la información inicial que tenemos acerca de los parámetros con la información en la muestra acerca de los parámetros (verosimilitud). Podemos ilustrar como sigue: Ejemplo: estimando una proporción Consideremos ahora el problema de estimar una proporción \\(\\theta\\) de una población dada usando una muestra iid \\(X_1,X_2,\\ldots, X_n\\) de variables Bernoulli. Ya sabemos calcular la verosimilitud (el modelo de los datos): \\[P(X_1=x_1,X_2 =x_2,\\ldots, X_n=x_n|\\theta) = \\theta^k(1-\\theta)^{n-k},\\] donde \\(k = x_1 + x_2 +\\cdots + x_k\\) es el número de éxitos que observamos. Ahora necesitamos una distribución inicial o previa \\(P(\\theta)\\). Aunque esta distribución puede tener cualquier forma, supongamos que nuestro conocimiento actual podemos resumirlo con una distribución \\(\\mathsf{Beta}(3, 3)\\): \\[P(\\theta) \\propto \\theta^2(1-\\theta)^2.\\] La constante de normalización es 1/30, pero no la requerimos. Podemos simular para examinar su forma: sim_inicial <- tibble(theta = rbeta(10000, 3, 3)) ggplot(sim_inicial) + geom_histogram(aes(x = theta, y = ..density..), bins = 15) De modo que nuestra información inicial es que la proporción puede tomar cualquier valor entre 0 y 1, pero es probable que tome un valor no tan lejano de 0.5. Por ejemplo, con probabilidad 0.95 creemos que \\(\\theta\\) está en el intervalo quantile(sim_inicial$theta, c(0.025, 0.975)) |> round(2) ## 2.5% 97.5% ## 0.15 0.85 Es difícil justificar en abstracto por qué escogeriamos una inicial con esta forma. Aunque esto los detallaremos más adelante, puedes pensar, por el momento, que alguien observó algunos casos de esta población, y quizá vio tres éxitos y tres fracasos. Esto sugeriría que es poco probable que la probablidad \\(\\theta\\) sea muy cercana a 0 o muy cercana a 1. Ahora podemos construir nuestra posterior. Tenemos que \\[P(\\theta| X_1=x_1, \\ldots, X_n=x_n) \\propto P(X_1 = x_1,\\ldots X_n=x_n | \\theta)P(\\theta) = \\theta^{k+2}(1-\\theta)^{n-k + 2}\\] donde la constante de normalización no depende de \\(\\theta\\). Como \\(\\theta\\) es un parámetro continuo, la expresión de la derecha nos debe dar una densidad posterior. Supongamos entonces que hicimos la prueba con \\(n = 30\\) (número de prueba) y observamos 19 éxitos. Tendríamos entonces \\[P(\\theta | S_n = 19) \\propto \\theta^{19 + 2} (1-\\theta)^{30-19 +2} = \\theta^{21}(1-\\theta)^{13}\\] La cantidad de la derecha, una vez que normalizemos por el número \\(P(X=19)\\), nos dará una densidad posterior (tal cual, esta expresion no integra a 1). Podemos obtenerla usando cálculo, pero recordamos que una distribución \\(\\mathsf{\\mathsf{Beta}}(a,b)\\) tiene como fórmula \\[\\frac{1}{B(a,b)} \\theta^{a-1}(1-\\theta)^{b-1}\\] Concluimos entonces que la posterior tiene una distribución \\(\\mathsf{Beta}(22, 14)\\). Podemos simular de la posterior usando código estándar para ver cómo luce: sim_inicial <- sim_inicial |> mutate(dist = "inicial") sim_posterior <- tibble(theta = rbeta(10000, 22, 14)) |> mutate(dist = "posterior") sims <- bind_rows(sim_inicial, sim_posterior) ggplot(sims, aes(x = theta, fill = dist)) + geom_histogram(aes(x = theta), bins = 30, alpha = 0.5, position = "identity") La posterior nos dice cuáles son las posibilidades de dónde puede estar el parámetro \\(\\theta\\). Nótese que ahora excluye prácticamente valores más chicos que 0.25 o mayores que 0.9. Esta distribución posterior es el objeto con el que hacemos inferencia: nos dice dónde es creíble que esté el parámetro \\(\\theta\\). Podemos resumir de varias maneras. Por ejemplo, si queremos un estimador puntual usamos la media posterior: sims |> group_by(dist) |> summarise(theta_hat = mean(theta) |> round(3)) ## # A tibble: 2 × 2 ## dist theta_hat ## <chr> <dbl> ## 1 inicial 0.5 ## 2 posterior 0.61 Nota que el estimador de máxima verosimilitud es \\(\\hat{p} = 19/30 = 0.63\\), que es ligeramente diferente de la media posterior. ¿Por qué? Y podemos construir intervalos de percentiles, que en esta situación suelen llamarse intervalos de credibilidad, por ejemplo: f <- c(0.025, 0.975) sims |> group_by(dist) |> summarise(cuantiles = quantile(theta, f) |> round(2), f = f) |> pivot_wider(names_from = f, values_from = cuantiles) ## # A tibble: 2 × 3 ## # Groups: dist [2] ## dist `0.025` `0.975` ## <chr> <dbl> <dbl> ## 1 inicial 0.15 0.85 ## 2 posterior 0.45 0.76 El segundo renglón nos da un intervalo posterior para \\(\\theta\\) de credibilidad 95%. En inferencia bayesiana esto sustituye a los intervalos de confianza. El intervalo de la inicial expresa nuestras creencias a priori acerca de \\(\\theta\\). Este intervalo es muy amplio (va de 0.15 a 0.85) El intervalo de la posterior actualiza nuestras creencias acerca de \\(\\theta\\) una vez que observamos los datos, y es considerablemente más angosto y por lo tanto informativo. Puedes experimentar en esta shiny app con diferentes iniciales, número de volados y observación de éxitos. Observaciones: Nótese que escogimos una forma analítica fácil para la inicial, pues resultó así que la posterior es una distribución beta. No siempre es así, y veremos qué hacer cuando nuestra inicial no es de un tipo “conveniente”. Como tenemos la forma analítica de la posterior, es posible hacer los cálculos de la media posterior, por ejemplo, integrando la densidad posterior a mano. Esto generalmente no es factible, y en este ejemplo preferimos hacer una aproximación numérica. En este caso particular es posible usando cálculo, y sabemos que la media de una \\(\\mathsf{\\mathsf{Beta}}(a,b)\\) es \\(a/(a+b)\\), de modo que nuestra media posterior es \\[\\hat{\\mu} = (19 + 2)/(30 + 4) = 21/34 = 0.617 \\] que podemos interpretar como sigue: para calcular la media posterior, a nuestras \\(n\\) pruebas iniciales agregamos 4 pruebas adicionales fijas, con 2 éxitos y 2 fracasos, y calculamos la proporción usual de éxitos. Repite el análisis considerando en general \\(n\\) pruebas, con \\(k\\) éxitos. Utiliza la misma distribución inicial. Lo mismo aplica para el intervalo de 95% (¿cómo se calcularía integrando?). También puedes usar la aproximación de R, por ejemplo: qbeta(0.025, shape1 = 22, shape2 = 14) |> round(2) ## [1] 0.45 qbeta(0.975, shape1 = 22, shape2 = 14) |> round(2) ## [1] 0.76 Ejemplo: observaciones uniformes Ahora regresamos al problema de estimación del máximo de una distribución uniforme. En este caso, consideraremos un problema más concreto. Supongamos que hay una lotería (tipo tradicional) en México y no sabemos cuántos números hay. Obtendremos una muestra iid de \\(n\\) números, y haremos una aproximación continua, suponiendo que \\[X_i \\sim U[0,\\theta]\\] La verosimilitud es entonces \\[P(X_1,\\ldots, X_n|\\theta) = \\theta^{-n},\\] cuando \\(\\theta\\) es mayor que todas las \\(X_i\\), y cero en otro caso. Necesitaremos una inicial \\(P(\\theta)\\). Por la forma que tiene la verosimilitud, podemos intentar una distribución Pareto, que tiene la forma \\[P(\\theta) = \\frac{\\alpha \\theta_0^\\alpha}{\\theta^{\\alpha + 1}}\\] con soporte en \\([\\theta_0,\\infty]\\). Tenemos que escoger entonces el mínimo \\(\\theta_0\\) y el parámetro \\(\\alpha\\). En primer lugar, como sabemos que es una lotería nacional, creemos que no puede haber menos de unos 300 mil números, así que \\(\\theta_0 = 300\\). La función acumulada de la pareto es \\(1- (300/\\theta)^\\alpha\\), así que si \\(\\alpha = 1.1\\) el cuantil 99% es: alpha <- 1.1 (300/(0.01)^(1/alpha)) ## [1] 19738 es decir, alrededor de 20 millones de números. Creemos que es poco probable que el número de boletos sea mayor a esta cota. Nótese ahora que la posterior cumple (multiplicando verosimilitud por inicial): \\[P(\\theta|X_1,\\ldots, X_n |\\theta) \\propto \\theta^{-(n + 2.1)}\\] para \\(\\theta\\) mayor que el máximo de las \\(X_n\\)’s y 300, y cero en otro caso. Esta distribución es pareto con \\(\\theta_0' = \\max\\{300, X_1,\\ldots, X_n\\}\\) y \\(\\alpha' = n + 1.1\\) Una vez planteado nuestro modelo, veamos los datos. Obtuvimos la siguiente muestra de números: loteria_tbl <- read_csv("data/nums_loteria_avion.csv", col_names = c("id", "numero")) |> mutate(numero = as.integer(numero)) set.seed(334) muestra_loteria <- sample_n(loteria_tbl, 25) |> mutate(numero = numero/1000) muestra_loteria |> as.data.frame() |> head() ## id numero ## 1 87 348.341 ## 2 5 5851.982 ## 3 40 1891.786 ## 4 51 1815.455 ## 5 14 5732.907 ## 6 48 3158.414 Podemos simular de una Pareto como sigue: rpareto <- function(n, theta_0, alpha){ # usar el método de inverso de distribución acumulada u <- runif(n, 0, 1) theta_0 / (1 - u)^(1/alpha) } Simulamos de la inicial: sims_pareto_inicial <- tibble( theta = rpareto(20000, 300, 1.1 ), dist = "inicial") Y con los datos de la muestra, simulamos de la posterior: sims_pareto_posterior <- tibble( theta = rpareto(20000, max(c(300, muestra_loteria$numero)), nrow(muestra_loteria) + 1.1), dist = "posterior") sims_theta <- bind_rows(sims_pareto_inicial, sims_pareto_posterior) ggplot(sims_theta) + geom_histogram(aes(x = theta, fill = dist), bins = 70, alpha = 0.5, position = "identity", boundary = max(muestra_loteria$numero)) + xlim(0, 15000) + scale_y_sqrt() + geom_rug(data = muestra_loteria, aes(x = numero)) Nótese que cortamos algunos valores de la inicial en la cola derecha: un defecto de esta distribución inicial, con una cola tan larga a la derecha, es que pone cierto peso en valores que son poco creíbles y la vuelve poco apropiada para este problema. Regresaremos más adelante a este problema. Si obtenemos percentiles, obtenemos el intervalo f <- c(0.025, 0.5, 0.975) sims_theta |> group_by(dist) |> summarise(cuantiles = quantile(theta, f) |> round(2), f = f) |> pivot_wider(names_from = f, values_from = cuantiles) ## # A tibble: 2 × 4 ## # Groups: dist [2] ## dist `0.025` `0.5` `0.975` ## <chr> <dbl> <dbl> <dbl> ## 1 inicial 307. 569. 8449. ## 2 posterior 5858. 6010. 6732. Estimamos entre 5.8 millones y 6.7 millones de boletos. El máximo en la muestra es de max(muestra_loteria$numero) ## [1] 5851.982 Escoger la distribución pareto como inicial es conveniente y nos permitió resolver el problema sin dificultad, pero por su forma vemos que no necesariamente es apropiada para el problema por lo que señalamos arriba. Nos gustaría, por ejemplo, poner una inicial como la siguiente qplot(rgamma(2000, 5, 0.001), geom="histogram", bins = 20) + scale_x_continuous(breaks = seq(1000, 15000, by = 2000)) Sin embargo, los cálculos no son tan simples en este caso, pues la posterior no tiene un forma reconocible. Tendremos que usar otras estrategias de simulación para ejemplos como este (Monte Carlo por medio de Cadenas de Markov, que veremos más adelante). Probabilidad a priori La inferencia bayesiana es conceptualmente simple: siempre hay que calcular la posterior a partir de verosimilitud (modelo de datos) y distribución inicial o a priori. Sin embargo, una crítica usual que se hace de la inferencia bayesiana es precisamente que hay que tener esa información inicial, y que distintos analistas llegan a distintos resultados si tienen información inicial distinta. Eso realmente no es un defecto, es una ventaja de la inferencia bayesiana. Los datos y los problemas que queremos resolver no viven en un vacío donde podemos creer que la estatura de las personas, por ejemplo, puede variar de 0 a mil kilómetros, el número de boletos de una lotería puede ir de 2 o 3 boletos o también quizá 500 millones de boletos, o la proporción de personas infectadas de una enfermedad puede ser de unos cuantos hasta miles de millones. En todos estos casos tenemos cierta información inicial que podemos usar para informar nuestras estimaciones. Esta información debe usarse. Antes de tener datos, las probabilidades iniciales deben ser examinadas en términos del conocimiento de expertos. Las probabilidades iniciales son supuestos que hacemos acerca del problema de interés, y también están sujetas a críticas y confrontación con datos. Análisis conjugado Los dos ejemplos que hemos visto arriba son ejemplos de análisis conjugado: (Beta-bernoulli) Si las observaciones \\(X_i\\) son \\(\\mathsf{Bernoulli}(p)\\) (\\(n\\) fija) queremos estimar \\(p\\), y tomamos como distribución inicial para \\(p\\) una \\(\\mathsf{Beta}(a,b)\\), entonces la posterior para \\(p\\) cuando \\(S_n=k\\) es \\(\\mathsf{Beta}(k + a, n - k + b)\\), donde \\(S_n = X_1 + X_2 +\\cdots +X_n\\). Y más en general: (Beta-binomial) Si las observaciones \\(X_i, i=1,2,\\ldots, m\\) son \\(\\mathsf{Binomial}(n_i, p)\\) (\\(n_i\\)’s fijas) independientes, queremos estimar \\(p\\), y tomamos como distribución inicial para \\(p\\) una \\(\\mathsf{Beta}(a,b)\\), entonces la posterior para \\(p\\) cuando \\(S_m=k\\) es \\(\\mathsf{Beta}(k + a, n - k + b)\\), donde \\(S_m = X_1 + X_2 +\\cdots +X_m\\) y \\(n= n_1+n_2+\\cdots+n_m\\) También aplicamos: (Uniforme-Pareto) Si el modelo de datos \\(X_i\\) es uniforme \\(\\mathsf{U}[0,\\theta]\\) (\\(n\\) fija), queremos estimar \\(\\theta\\), y tomamos como distribución inicial para \\(\\theta\\) una Pareto \\((\\theta_0, \\alpha)\\), entonces la posterior para \\(p\\) si el máximo de las \\(X_i\\)’s es igual a \\(M\\) es Pareto con parámetros \\((\\max\\{\\theta_0, M\\}, \\alpha + n)\\). Nótese que en estos casos, dada una forma de la verosimilitud, tenemos una familia conocida de iniciales tales que las posteriores están en la misma familia. Estos modelos son convenientes porque podemos hacer simulaciones de la posterior de manera fácil, o usar sus propiedades teóricas. Otro ejemplo típico es el modelo normal-normal: (Normal-normal) Si \\(X_i\\sim \\mathsf{N}(\\mu,\\sigma)\\), con \\(\\sigma\\) conocida, y tomamos como distribución inicial para \\(\\mu \\sim \\mathsf{N}(\\mu_0,\\sigma_0)\\), y definimos la precisión \\(\\tau\\) como el inverso de la varianza \\(\\sigma^2\\), entonces la posterior de \\(\\mu\\) es Normal con media \\((1-\\lambda) \\mu_0 + \\lambda\\overline{x}\\), y precisión \\(\\tau_0 + n\\tau\\), donde \\(\\lambda = \\frac{n\\tau}{\\tau_0 + n\\tau}\\) Completa cuadrados para mostrar las fórmulas del modelo normal-normal con varianza conocida. Más útil es el siguiente modelo: (Normal-Gamma inverso) Sean \\(X_i\\sim \\mathsf{N}(\\mu, \\sigma)\\). Queremos estimar \\(\\mu\\) y \\(\\sigma\\). Tomamos como distribuciones iniciales (dadas por 4 parámetros: \\(\\mu_0, n_0, \\alpha,\\beta\\)): \\(\\tau = \\frac{1}{\\sigma^2} \\sim \\mathsf{Gamma}(\\alpha,\\beta)\\) \\(\\mu|\\sigma\\) es normal con media \\(\\mu_0\\) y varianza \\(\\sigma^2 / {n_0}\\) , y \\(p(\\mu, \\sigma) = p(\\mu|\\sigma)p(\\sigma)\\) Entonces la posterior es: \\(\\tau|x\\) es \\(\\mathsf{Gamma}(\\alpha', \\beta')\\), con \\(\\alpha' = \\alpha + n/2\\), \\(\\beta' = \\beta + \\frac{1}{2}\\sum_{i=1}^{n}(x_{i} - \\bar{x})^2 + \\frac{nn_0}{n+n_0}\\frac{({\\bar{x}}-\\mu_{0})^2}{2}\\) \\(\\mu|\\sigma,x\\) es normal con media \\(\\mu' = \\frac{n_0\\mu_{0}+n{\\bar{x}}}{n_0 +n}\\) y varianza \\(\\sigma^2/({n_0 +n})\\). \\(p(\\mu,\\sigma|x) = p(\\mu|x,\\sigma)p(\\sigma|x)\\) Observaciones Nótese que este último ejemplo tiene más de un parámetro. En estos casos, el objeto de interés es la posterior conjunta de los parámetros \\(p(\\theta_1,\\theta_2,\\cdots, \\theta_p|x)\\). Este último ejemplo es relativamente simple pues por la selección de iniciales, para simular de la conjunta de \\(\\mu\\) y \\(\\tau\\) podemos simular primero \\(\\tau\\) (o \\(\\sigma\\)), y después usar este valor para simular de \\(\\mu\\): el par de valores resultantes son una simulación de la conjunta. Los parámetros \\(\\alpha,\\beta\\) para la inicial de \\(\\tau\\) pueden interpretarse como sigue: \\(\\sqrt{\\beta/\\alpha}\\) es un valor “típico” a priori para la varianza poblacional, y \\(a\\) indica qué tan seguros estamos de este valor típico. Nótese que para que funcionen las fórmulas de la manera más simple, escogimos una dependencia a priori entre la media y la precisión: \\(\\tau = \\sigma^{-2}\\) indica la escala de variabilidad que hay en la población, la incial de la media tiene varianza \\(\\sigma^2/n_0\\). Si la escala de variabilidad de la población es más grande, tenemos más incertidumbre acerca de la localización de la media. Aunque esto tiene sentido en algunas aplicaciones, y por convenviencia usamos esta familia conjugada, muchas veces es preferible otro tipo de especificaciones para las iniciales: por ejemplo, la media normal y la desviación estándar uniforme, o media normal, con iniciales independientes. Sin embargo, estos casos no son tratables con análisis conjugado (veremos más adelante cómo tratarlos con MCMC). Ejemplo Supongamos que queremos estimar la estatura de los cantantes de tesitura tenor con una muestra iid de tenores de Estados Unidos. Usaremos el modelo normal de forma que \\(X_i\\sim \\mathsf{N}(\\mu, \\sigma^2)\\). Una vez decidido el modelo, tenemos que poner distribución inicial para los parámetros \\((\\mu, \\sigma^2)\\). Comenzamos con \\(\\sigma^2\\). Como está el modelo, esta inicial debe estar dada para la precisión \\(\\tau\\), pero podemos simular para ver cómo se ve nuestra inicial para la desviación estándar. En la población general la desviación estándar es alrededor de 7 centímetros # Comenzamos seleccionando un valor que creemos típico para la desviación estándar sigma_0 <- 7 # seleccionamos un valor para a, por ejemplo: si es más chico sigma tendrá más # disperisón a <- 3 # ponemos 7 = sqrt(b/a) -> b = a * 64 b <- a * sigma_0 ^ 2 c(a = a, b = b) ## a b ## 3 147 Ahora simulamos para calcular cuantiles tau <- rgamma(1000, a, b) quantile(tau, c(0.05, 0.95)) ## 5% 95% ## 0.005781607 0.042170161 sigma <- 1 / sqrt(tau) mean(sigma) ## [1] 8.002706 quantile(sigma, c(0.05, 0.95)) ## 5% 95% ## 4.869653 13.151520 Que es dispersión considerable: con poca probabilidad la desviación estándar es menor a 4 centímetros, y también creemos que es poco creíble la desviación estándar sea de más de 13 centímetros. Comenzamos con \\(\\mu\\). Sabemos, por ejemplo, que con alta probabilidad la media debe ser algún número entre 1.60 y 1.80. Podemos investigar: la media nacional en estados unidos está alrededor de 1.75, y el percentil 90% es 1.82. Esto es variabilidad en la población: debe ser muy poco probable, por ejemplo, que la media de tenores sea 1.82 Quizá los cantantes tienden a ser un poco más altos o bajos que la población general, así que podríamos agregar algo de dispersión. Podemos establecer parámetros y simular de la marginal a partir de las fórmulas de arriba para entender cómo se ve la inicial de \\(\\mu\\): mu_0 <- 175 # valor medio de inicial n_0 <- 5 # cuánta concentración en la inicial tau <- rgamma(1000, a,b) sigma <- 1/sqrt(tau) mu <- map_dbl(sigma, ~ rnorm(1, mu_0, .x / sqrt(n_0))) quantile(mu, c(0.05, 0.5, 0.95)) ## 5% 50% 95% ## 168.7275 174.8412 180.7905 Que consideramos un rango en el que con alta probabilidad debe estar la media poblacional de los cantantes. Podemos checar nuestros supuestos simulando posibles muestras usando sólo nuestra información previa: simular_normal_invgamma <- function(n, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular media tau <- rgamma(1, a, b) sigma <- 1 / sqrt(tau) mu <- rnorm(1, mu_0, sigma/sqrt(n_0)) # simular sigma rnorm(n, mu, sigma) } set.seed(3461) sims_tbl <- tibble(rep = 1:20) |> mutate(estatura = map(rep, ~ simular_normal_invgamma(500, c(mu_0, n_0, a, b)))) |> unnest(cols = c(estatura)) ggplot(sims_tbl, aes(x = estatura)) + geom_histogram() + facet_wrap(~ rep) + geom_vline(xintercept = c(150, 180), colour = "red") Pusimos líneas de referencia en 150 y 180. Vemos que nuestras iniciales no producen simulaciones totalmente fuera del contexto, y parecen cubrir apropiadamente el espacio de posiblidades para estaturas de los tenores. Quizá hay algunas realizaciones poco creíbles, pero no extremadamente. En este punto, podemos regresar y ajustar la inicial para \\(\\sigma\\), que parece tomar valores demasiado grandes (produciendo por ejemplo una simulación con estatura de 220 y 140, que deberían ser menos probables). Ahora podemos usar los datos para calcular nuestras posteriores. set.seed(3413) cantantes <- lattice::singer |> mutate(estatura_cm = round(2.54 * height)) |> filter(str_detect(voice.part, "Tenor")) |> sample_n(20) cantantes ## height voice.part estatura_cm ## 139 70 Tenor 1 178 ## 150 68 Tenor 2 173 ## 140 65 Tenor 1 165 ## 132 66 Tenor 1 168 ## 152 69 Tenor 2 175 ## 141 72 Tenor 1 183 ## 161 71 Tenor 2 180 ## 156 71 Tenor 2 180 ## 158 71 Tenor 2 180 ## 164 69 Tenor 2 175 ## 147 68 Tenor 1 173 ## 130 72 Tenor 1 183 ## 162 71 Tenor 2 180 ## 134 74 Tenor 1 188 ## 170 69 Tenor 2 175 ## 167 68 Tenor 2 173 ## 149 64 Tenor 1 163 ## 143 68 Tenor 1 173 ## 157 69 Tenor 2 175 ## 153 71 Tenor 2 180 Los cálculos son un poco tediosos, pero podemos construir una función apropiada: calcular_pars_posterior <- function(x, pars_inicial){ # iniciales mu_0 <- pars_inicial[1] n_0 <- pars_inicial[2] a_0 <- pars_inicial[3] b_0 <- pars_inicial[4] # muestra n <- length(x) media <- mean(x) S2 <- sum((x - media)^2) # sigma post a_1 <- a_0 + 0.5 * n b_1 <- b_0 + 0.5 * S2 + 0.5 * (n * n_0) / (n + n_0) * (media - mu_0)^2 # posterior mu mu_1 <- (n_0 * mu_0 + n * media) / (n + n_0) n_1 <- n + n_0 c(mu_1, n_1, a_1, b_1) } pars_posterior <- calcular_pars_posterior(cantantes$estatura_cm, c(mu_0, n_0, a, b)) pars_posterior ## [1] 175.8 25.0 13.0 509.0 ¿Cómo se ve nuestra posterior comparada con la inicial? Podemos hacer simulaciones: sim_params <- function(m, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular sigmas sims <- tibble(tau = rgamma(m, a, b)) |> mutate(sigma = 1 / sqrt(tau)) # simular mu sims <- sims |> mutate(mu = rnorm(m, mu_0, sigma / sqrt(n_0))) sims } sims_inicial <- sim_params(5000, c(mu_0, n_0, a, b)) |> mutate(dist = "inicial") sims_posterior <- sim_params(5000, pars_posterior) |> mutate(dist = "posterior") sims <- bind_rows(sims_inicial, sims_posterior) ggplot(sims, aes(x = mu, y = sigma, colour = dist)) + geom_point(alpha = 0.4) Y vemos que nuestra posterior es consistente con la información inicial que usamos, hemos aprendido considerablemente de la muestra. La posterior se ve como sigue. Hemos marcado también las medias posteriores de cada parámetro: media y desviación estándar. medias_post <- sims |> filter(dist == "posterior") |> select(-dist) |> summarise(across(everything(), mean)) ggplot(sims |> filter(dist == "posterior"), aes(x = mu, y = sigma)) + geom_point(colour = "#00BFC4") + geom_point(data = medias_post, size = 5, colour = "black") + coord_equal() Podemos construir intervalos creíbles del 90% para estos dos parámetros, por ejemplo haciendo intervalos de percentiles: f <- c(0.05, 0.5, 0.95) sims |> pivot_longer(cols = mu:sigma, names_to = "parametro") |> group_by(dist, parametro) |> reframe(cuantil = quantile(value, f) |> round(1), f = f) |> pivot_wider(names_from = f, values_from = cuantil) ## # A tibble: 4 × 5 ## dist parametro `0.05` `0.5` `0.95` ## <chr> <chr> <dbl> <dbl> <dbl> ## 1 inicial mu 169. 175. 181. ## 2 inicial sigma 4.8 7.4 13.3 ## 3 posterior mu 174. 176. 178. ## 4 posterior sigma 5.1 6.3 8.2 Como comparación, los estimadores de máxima verosimlitud son media_mv <- mean(cantantes$estatura_cm) sigma_mv <- mean((cantantes$estatura_cm - media_mv)^2) |> sqrt() c(media_mv, sigma_mv) ## [1] 176 6 Ahora solo resta checar que el modelo es razonable. Veremos más adelante cómo hacer esto, usando la distribución predictiva posterior. Pasos de un análisis de datos bayesiano Como vimos en los ejemplos, en general un análisis de datos bayesiano sigue los siguientes pasos: Identificar los datos releventes a nuestra pregunta de investigación, el tipo de datos que vamos a describir, que variables queremos estimar. Definir el modelo descriptivo para los datos. La forma matemática y los parámetros deben ser apropiados para los objetivos del análisis. Especificar la distribución inicial de los parámetros. Utilizar inferencia bayesiana para reubicar la credibilidad a lo largo de los posibles valores de los parámetros. Verificar que la distribución posterior replique los datos de manera razonable, de no ser el caso considerar otros modelos descriptivos para los datos. Elicitando probablidades subjetivas (opcional) No siempre es fácil elicitar probabilidades subjetivas de manera que capturemos el verdadero conocimiento de dominio que tenemos. Una manera clásica de hacerlo es con apuestas Considera una pregunta sencilla que puede afectar a un viajero: ¿Qué tanto crees que habrá una tormenta que ocasionará el cierre de la autopista México-Acapulco en el puente del \\(20\\) de noviembre? Como respuesta debes dar un número entre \\(0\\) y \\(1\\) que refleje tus creencias. Una manera de seleccionar dicho número es calibrar las creencias en relación a otros eventos cuyas probabilidades son claras. Como evento de comparación considera una experimento donde hay canicas en una urna: \\(5\\) rojas y \\(5\\) blancas. Seleccionamos una canica al azar. Usaremos esta urna como comparación para considerar la tormenta en la autopista. Ahora, considera el siguiente par de apuestas de las cuales puedes elegir una: A. Obtienes \\(\\$1000\\) si hay una tormenta que ocasiona el cierre de la autopista el próximo \\(20\\) de noviembre. B. Obtienes \\(\\$1000\\) si seleccionas una canica roja de la urna que contiene \\(5\\) canicas rojas y \\(5\\) blancas. Si prefieres la apuesta B, quiere decir que consideras que la probabilidad de tormenta es menor a \\(0.5\\), por lo que al menos sabes que tu creencia subjetiva de una la probabilidad de tormenta es menor a \\(0.5\\). Podemos continuar con el proceso para tener una mejor estimación de la creencia subjetiva. A. Obtienes \\(\\$1000\\) si hay una tormenta que ocasiona el cierre de la autopista el próximo \\(20\\) de noviembre. C. Obtienes \\(\\$1000\\) si seleccionas una canica roja de la urna que contiene \\(1\\) canica roja y \\(9\\) blancas. Si ahora seleccionas la apuesta \\(A\\), esto querría decir que consideras que la probabilidad de que ocurra una tormenta es mayor a \\(0.10\\). Si consideramos ambas comparaciones tenemos que tu probabilidad subjetiva se ubica entre \\(0.1\\) y \\(0.5\\). Verificación predictiva posterior Una vez que ajustamos un modelo bayesiano, podemos simular nuevas observaciones a partir del modelo. Esto tiene dos utilidades: Hacer predicciones acerca de datos no observados. Confirmar que nuevas observaciones, producidas simulando con el modelo son similares a las que de hecho observamos. Esto nos permite confirmar la calidad del ajuste del modelo, y se llama verificación predictiva posterior. Supongamos que tenemos la posterior \\(p(\\theta | x)\\). Podemos generar una nueva replicación de los datos como sigue: La distribución predictiva posterior genera nuevas observaciones a partir de la información observada. La denotamos como \\(p(\\tilde{x}|x)\\). Para simular de ella: Muestreamos un valor \\(\\tilde{\\theta}\\) de la posterior \\(p(\\theta|x)\\). Simulamos del modelo de las observaciones \\(\\tilde{x} \\sim p(\\tilde{x}|\\tilde{\\theta})\\). Repetimos el proceso hasta obtener una muestra grande. Usamos este método para producir, por ejemplo, intervalos de predicción para nuevos datos. Si queremos una replicación de las observaciones de la predictiva posterior, Muestreamos un valor \\(\\tilde{\\theta}\\) de la posterior \\(p(\\theta|x)\\). Simulamos del modelo de las observaciones \\(\\tilde{x}_1, \\tilde{x}_2,\\ldots, \\tilde{x}_n \\sim p(\\tilde{x}|\\tilde{\\theta})\\), done \\(n\\) es el tamaño de muestra de la muestra original \\(x\\). Usamos este método para producir conjuntos de datos simulados que comparamos con los observados para verificar nuestro modelo. Ejemplo: estaturas de tenores En este ejemplo, usaremos la posterior predictiva para checar nuestro modelo. Vamos a crear varias muestras, del mismo tamaño que la original, según nuestra predictiva posterior, y compararemos estas muestras con la observada. Y ahora simulamos otra muestra muestra_sim <- simular_normal_invgamma(20, pars_posterior) muestra_sim |> round(0) ## [1] 167 181 184 181 167 167 172 170 177 172 169 174 182 184 176 171 175 176 168 ## [20] 181 Podemos simular varias muestras y hacer una prueba de lineup: library(nullabor) set.seed(9921) sims_obs <- tibble(.n = 1:19) |> mutate(estatura_cm = map(.n, ~ simular_normal_invgamma(20, pars_posterior))) |> unnest(estatura_cm) pos <- sample(1:20, 1) lineup_tbl <- lineup(true = cantantes |> select(estatura_cm), samples = sims_obs, pos = pos) ggplot(lineup_tbl, aes(x = estatura_cm)) + geom_histogram(binwidth = 2.5) + facet_wrap(~.sample) Con este tipo de gráficas podemos checar desajustes potenciales de nuestro modelo. ¿Puedes encontrar los datos verdaderos? ¿Cuántos seleccionaron los datos correctos? Ejemplo: modelo Poisson Supongamos que pensamos el modelo para las observaciones es Poisson con parámetro \\(\\lambda\\). Pondremos como inicial para \\(\\lambda\\) una exponencial con media 10. Nótese que la posterior está dada por \\[p(\\lambda|x_1,\\ldots, x_n) \\propto e^{-n\\lambda}\\lambda^{\\sum_i x_i} e^{-0.1\\lambda} = \\lambda^{n\\overline{x}}e^{-\\lambda(n + 0.1)}\\] que es una distribución gamma con parámetros \\((n\\overline{x} + 1, n+0.1)\\) Ahora supongamos que observamos la siguiente muestra, ajustamos nuestro modelo y hacemos replicaciones posteriores de los datos observados: x <- rnbinom(250, mu = 20, size = 3) crear_sim_rep <- function(x){ n <- length(x) suma <- sum(x) sim_rep <- function(rep){ lambda <- rgamma(1, sum(x) + 1, n + 0.1) x_rep <- rpois(n, lambda) tibble(rep = rep, x_rep = x_rep) } } sim_rep <- crear_sim_rep(x) lineup_tbl <- map(1:5, ~ sim_rep(.x)) |> bind_rows() |> bind_rows(tibble(rep = 6, x_rep = x)) ggplot(lineup_tbl, aes(x = x_rep)) + geom_histogram(bins = 15) + facet_wrap(~rep) Y vemos claramente que nuestro modelo no explica apropiadamente la variación de los datos observados. Contrasta con: set.seed(223) x <- rpois(250, 15) crear_sim_rep <- function(x){ n <- length(x) suma <- sum(x) sim_rep <- function(rep){ lambda <- rgamma(1, sum(x) + 1, n + 0.1) x_rep <- rpois(n, lambda) tibble(rep = rep, x_rep = x_rep) } } sim_rep <- crear_sim_rep(x) lineup_tbl <- map(1:5, ~ sim_rep(.x)) |> bind_rows() |> bind_rows(tibble(rep = 6, x_rep = x)) ggplot(lineup_tbl, aes(x = x_rep)) + geom_histogram(bins = 15) + facet_wrap(~rep) Y verificamos que en este caso el ajuste del modelo es apropiado. Predicción Cuando queremos hacer predicciones particulares acerca de datos que observemos en el futuro, también podemos usar la posterior predictiva. En este caso, tenemos que considerar La variabilidad que produce la incertidumbre en la estimación de los parámetros La variabilidad de las observaciones dados los parámetros. Es decir, tenemos que simular sobre todos las combinaciones factibles de los parámetros. Ejemplo: cantantes Si un nuevo tenor llega a un coro, ¿cómo hacemos una predicción de su estatura? Como siempre, quisiéramos obtener un intervalo que exprese nuestra incertidumbre acerca del valor que vamos a observar. Entonces haríamos: sims_posterior <- sim_params(50000, pars_posterior) |> mutate(y_pred = rnorm(n(), mu, sigma)) sims_posterior |> head() ## # A tibble: 6 × 4 ## tau sigma mu y_pred ## <dbl> <dbl> <dbl> <dbl> ## 1 0.0286 5.91 175. 181. ## 2 0.0200 7.07 177. 178. ## 3 0.0257 6.23 176. 170. ## 4 0.0344 5.39 176. 174. ## 5 0.0297 5.80 175. 169. ## 6 0.0282 5.96 177. 170. f <- c(0.025, 0.5, 0.975) sims_posterior |> summarise(f = f, y_pred = quantile(y_pred, f)) ## # A tibble: 3 × 2 ## f y_pred ## <dbl> <dbl> ## 1 0.025 163. ## 2 0.5 176. ## 3 0.975 189. Y con esto obtenemos el intervalo (163, 189), al 95%, para una nueva observación. Nótese que este intervalo no puede construirse con una simulación particular de la posterior de los parámetros, pues sería demasiado corto. Es posible demostrar que en este caso, la posterior predictiva tiene una forma conocida: La posterior predictiva para el modelo normal-gamma inverso es una distribución \\(t\\) con \\(2\\alpha'\\) grados de libertad, centrada en \\(\\mu'\\), y con escala \\(s^2 = \\frac{\\beta'}{\\alpha'}\\frac{n + n_0 + 1}{n +n_0}\\) mu_post <- pars_posterior[1] n_post <- pars_posterior[2] alpha_post <- pars_posterior[3] beta_post <- pars_posterior[4] s <- sqrt(beta_post/alpha_post) * sqrt((n_post + 1)/n_post) qt(c(0.025, 0.5, 0.975), 2 * alpha_post) * s + mu_post ## [1] 162.6832 175.8000 188.9168 Calcula la posterior predictiva del modelo Beta-Bernoulli y Beta-Binomial. (Más difícil) Calcula la posterior predictiva del modelo Poisson-Gamma. Ejemplo: posterior predictiva de Pareto-Uniforme. La posterior predictiva del modelo Pareto-Uniforme no tiene un nombre estándar, pero podemos aproximarla usando simulación. Usando los mismos datos del ejercicio de la lotería, haríamos: rpareto <- function(n, theta_0, alpha){ # usar el método de inverso de distribución acumulada u <- runif(n, 0, 1) theta_0 / (1 - u)^(1/alpha) } # Simulamos de la posterior de los parámetros lim_inf_post <- max(c(300, muestra_loteria$numero)) k_posterior <- nrow(muestra_loteria) + 1.1 sims_pareto_posterior <- tibble( theta = rpareto(100000, lim_inf_post, k_posterior)) # Simulamos una observación para cada una de las anteriores: sims_post_pred <- sims_pareto_posterior |> mutate(x_pred = map_dbl(theta, ~ runif(1, 0, .x))) # Graficamos ggplot(sims_post_pred, aes(x = x_pred)) + geom_histogram(binwidth = 50) + geom_vline(xintercept = lim_inf_post, colour = "red") Que es una mezcla de una uniforme con una Pareto. Referencias "],["calibración-bayesiana-y-regularización.html", "Sección 11 Calibración bayesiana y Regularización Enfoque bayesiano y frecuentista Ejemplo: estimación de una proporción Intervalos de Agresti-Coull Incorporando información inicial Inferencia bayesiana y regularización Ejemplo: modelo normal y estaturas Ejemplo: estimación de proporciones Teoría de decisión Riesgo de Bayes", " Sección 11 Calibración bayesiana y Regularización El enfoque bayesiano se puede formalizar coherentemente en términos de probabilidades subjetivas, y como vimos, esta es una fortaleza del enfoque bayesiano. En la práctica, sin embargo, muchas veces puede ser difícil argumentar en términos exclusivos de probabilidad subjetiva, aunque hagamos los esfuerzos apropiados para incorporar la totalidad de información que distintos actores involucrados pueden tener. Consideremos, por ejemplo, que INEGI produjera un intervalo creíble del 95% para el ingreso mediano de los hogares de México. Aún cuando nuestra metodología sea transparente y correctamente informada, algunos investigadores interesados puede ser que tengan recelo en usar esta información, y quizá preferirían hacer estimaciones propias. Esto restaría valor al trabajo cuidadoso que pusimos en nuestras estimaciones oficiales. Por otra parte, el enfoque frecuentista provee de ciertas garantías mínimas para la utilización de las estimaciones, que no dependen de la interpretación subjetiva de la probabilidad, sino de las propiedades del muestreo. Consideremos la cobertura de los intervalos de confianza: Bajo ciertos supuestos de nuestros modelos, la probabilidad de que un intervalo de confianza del 95% cubra al verdadero valor poblacional es del 95%. Esta probabilidad es sobre las distintas muestras que se pueden obtener según el diseño del muestreo. Los intervalos creíbles en principio no tienen por qué cumplir esta propiedad, pero consideramos que en la práctica es una garantía mínima que deberían cumplir. El enfoque resultante se llama bayesiano calibrado, Little (2011) . La idea es seguir el enfoque bayesiano usual para construir nuestras estimaciones, pero verificar hasta donde sea posible que los intervalos resultantes satisfacen alguna garantía frecuentista básica. Observación. checar que la cobertura real es similar a la nominal es importante en los dos enfoques: frecuentista y bayesiano. Los intervalos frecuentistas, como hemos visto, generalmente son aproximados, y por lo tanto no cumplen automáticamente esta propiedad de calibración. Enfoque bayesiano y frecuentista Los métodos estadísticos clásicos toman el punto de vista frecuentista y se basa en los siguientes puntos (Wasserman (2013)): La probabilidad se interpreta como un límite de frecuencias relativas, donde las probabilidades son propiedades objetivas en el mundo real. En un modelo, los parámetros son constantes fijas (desconocidas). Como consecuencia, no se pueden realizar afirmaciones probabilísticas útiles en relación a éstos. Los procedimientos estadísticos deben diseñarse con el objetivo de tener propiedades frecuentistas bien definidas. Por ejemplo, un intervalo de confianza del \\(95\\%\\) debe contener el verdadero valor del parámetro con frecuencia límite de al menos el \\(95\\%\\). En contraste, el acercamiento Bayesiano muchas veces se describe por los siguientes postulados: La probabilidad describe grados de creencia, no frecuencias limite. Como tal uno puede hacer afirmaciones probabilísticas acerca de muchas cosas y no solo datos sujetos a variabilidad aleatoria. Por ejemplo, puedo decir: “La probabilidad de que Einstein tomara una taza de té el primero de agosto de \\(1948\\)” es \\(0.35\\), esto no hace referencia a ninguna frecuencia relativa sino que refleja la certeza que yo tengo de que la proposición sea verdadera. Podemos hacer afirmaciones probabilísticas de parámetros. Podemos hacer inferencia de un parámetro \\(\\theta\\) por medio de distribuciones de probabilidad. Las inferencias como estimaciones puntuales y estimaciones de intervalos se pueden extraer de dicha distribución. Finalmente, en el enfoque bayesiano calibrado (Little (2011)): Usamos el enfoque bayesiano para modelar y hacer afirmaciones probabilísticas de los parámetros. Buscamos cumplir las garantías frecuentistas del inciso 3). Ejemplo: estimación de una proporción Recordamos nuestro problema de estimación de una proporcion \\(\\theta\\). Usando la distribución inicial \\(p(\\theta)\\sim \\mathsf{Beta}(2,2)\\), y la verosimilitud estándar binomial, vimos que la posterior cuando observamos \\(k\\) éxitos es \\[p(\\theta|k) \\sim \\mathsf{Beta}(k + 2, n - k + 2)\\]. La media posterior es \\[\\frac{k + 2}{n + 4} \\] que podemos interpretar como: agrega 2 éxitos y 2 fracasos a los datos observados y calcula la proporción de éxitos. Un intervalo posterior de credibilidad del 95% se calcula encontrando los cuantiles 0.025 y 0.975 de una \\(\\mathsf{Beta}(k + 2, n - k + 2)\\) \\[I_a = \\left [q_{0.025}(k+2, n+4), q_{0.975}(k+2, n+4)\\right ]\\] Que compararemos con el intervalo usual de Wald: si \\(\\hat{\\theta} = \\frac{k}{n}\\), entonces \\[I_w = \\left [\\hat{\\theta} - 2 \\sqrt{\\frac{\\hat{\\theta}(1-\\hat{\\theta})}{n}}, \\hat{\\theta} + 2 \\sqrt{\\frac{\\hat{\\theta}(1-\\hat{\\theta})}{n}}\\right]\\] ¿Cómo podemos comparar la calibración de estos dos intervalos? Nominalmente, deben tener cobertura de 95%. Hagamos un ejercicio de simulación para distintos tamaños de muestra \\(n\\) y posibles valores \\(\\theta\\in (0,1)\\): set.seed(332) simular_muestras <- function(M, n, p){ k = rbinom(M, n, p) tibble(rep = 1:M, n = n, p = p, k = k) } intervalo_wald <- function(n, k){ p_hat <- k / n ee_hat <- sqrt(p_hat * (1 - p_hat) / n) tibble(inf = p_hat - 2 * ee_hat, sup = p_hat + 2 * ee_hat) } intervalo_bayes <- function(n, k, a = 2, b = 2){ a <- k + a b <- n - k + b tibble(inf = qbeta(0.025, a, b), sup = qbeta(0.975, a, b)) } set.seed(812) ejemplo <- simular_muestras(5, 20, 0.4) ejemplo |> mutate(intervalo = intervalo_wald(n, k)) |> pull(intervalo) |> bind_cols(ejemplo) |> select(-rep) ## # A tibble: 5 × 5 ## inf sup n p k ## <dbl> <dbl> <dbl> <dbl> <int> ## 1 0.0211 0.379 20 0.4 4 ## 2 0.228 0.672 20 0.4 9 ## 3 0.276 0.724 20 0.4 10 ## 4 0.228 0.672 20 0.4 9 ## 5 0.137 0.563 20 0.4 7 ejemplo |> mutate(intervalo = intervalo_bayes(n, k)) |> pull(intervalo) |> bind_cols(ejemplo) |> select(-rep) ## # A tibble: 5 × 5 ## inf sup n p k ## <dbl> <dbl> <dbl> <dbl> <int> ## 1 0.102 0.437 20 0.4 4 ## 2 0.268 0.655 20 0.4 9 ## 3 0.306 0.694 20 0.4 10 ## 4 0.268 0.655 20 0.4 9 ## 5 0.197 0.573 20 0.4 7 ¿Cuáles de estos intervalos cubren al verdadero valor? Nótese que no podemos descalificar a ningún método por no cubrir una vez. Es fácil producir un intervalo con 100% de cobertura: (0,1). Pero no nos informa dónde es probable que esté el parámetro. Sin embargo, podemos checar la cobertura frecuentista haciendo una cantidad grande de simulaciones: parametros <- crossing(n = c(5, 10, 30, 60, 100, 400), p = c(0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.05, 0.07, 0.1, 0.15)) set.seed(2343) # simulaciones simulaciones <- parametros |> mutate(muestra = map2(n, p, ~ simular_muestras(50000, .x, .y) |> select(rep, k))) |> unnest(muestra) # calcular_cobertura calcular_cobertura <- function(simulaciones, construir_intervalo){ # nombre de función intervalo_nombre <- substitute(construir_intervalo) |> as.character() cobertura_tbl <- simulaciones |> mutate(intervalo = construir_intervalo(n, k)) |> pull(intervalo) |> bind_cols(simulaciones) |> mutate(cubre = p >= inf & p <= sup) |> group_by(n, p) |> summarise(cobertura = mean(cubre), long_media = mean(sup - inf)) cobertura_tbl |> mutate(tipo = intervalo_nombre) } cobertura_wald <- calcular_cobertura(simulaciones, intervalo_wald) cobertura_wald ## # A tibble: 66 × 5 ## # Groups: n [6] ## n p cobertura long_media tipo ## <dbl> <dbl> <dbl> <dbl> <chr> ## 1 5 0.01 0.0483 0.0347 intervalo_wald ## 2 5 0.015 0.0733 0.0527 intervalo_wald ## 3 5 0.02 0.0954 0.0689 intervalo_wald ## 4 5 0.025 0.119 0.0862 intervalo_wald ## 5 5 0.03 0.140 0.102 intervalo_wald ## 6 5 0.035 0.165 0.120 intervalo_wald ## 7 5 0.04 0.187 0.137 intervalo_wald ## 8 5 0.05 0.227 0.167 intervalo_wald ## 9 5 0.07 0.299 0.223 intervalo_wald ## 10 5 0.1 0.398 0.303 intervalo_wald ## # ℹ 56 more rows graficar_cobertura <- function(cobertura_tbl){ ggplot(cobertura_tbl, aes(x = p, y = cobertura, colour = tipo)) + geom_hline(yintercept = 0.95, colour = "black") + geom_line() + geom_point() + facet_wrap(~n) + ylim(0, 1) } cobertura_wald |> graficar_cobertura() La cobertura real es mucho más baja que la nominal en muchos casos, especialmente cuando la \\(p\\) es baja y \\(n\\) es chica. Pero incluso para muestras relativamente grandes (100), la cobertura es mala si \\(p\\) es chica. Ahora probamos nuestro método alternativo: cobertura_bayes <- calcular_cobertura(simulaciones, intervalo_bayes) bind_rows(cobertura_wald, cobertura_bayes) |> mutate(tipo = factor(tipo, levels = c('intervalo_wald', 'intervalo_bayes'))) |> graficar_cobertura() Y vemos que en general el intervalo de Bayes es superior al de Wald, en sentido de que su cobertura real es más cercana a la nominal. El caso donde fallan los dos es para muestras muy chicas \\(n=5, 10\\), con probabilidades de éxito chicas \\(p\\leq 0.02\\). Sin embargo, si tenemos información previa acerca del tamaño de la proporción que estamos estimando, es posible obtener buena calibración con el método bayesiano. En este caso particular, tenemos argumentos frecuentistas para utilizar el método bayesiano. Por ejemplo, si el INEGI utilizara estos intervalos creíbles, un análisis de calibración de este tipo sostendría esa decisión. Intervalos de Agresti-Coull Un método intermedio que se usa para obtener mejores intervalos cuando estimamos proporciones es el siguiente: Agregar dos 1’s y dos 0’s a los datos. Utilizar el método de Wald con estos datos modificados. intervalo_agresti_coull <- function(n, k){ p_hat <- (k + 2)/ (n + 4) ee_hat <- sqrt(p_hat * (1 - p_hat) / n) tibble(inf = p_hat - 2 * ee_hat, sup = p_hat + 2 * ee_hat) } cobertura_ac <- calcular_cobertura(simulaciones, intervalo_agresti_coull) bind_rows(cobertura_wald, cobertura_bayes, cobertura_ac) |> mutate(tipo = factor(tipo, levels = c('intervalo_wald', 'intervalo_bayes', 'intervalo_agresti_coull'))) |> graficar_cobertura() Que tiende a ser demasiado conservador para proporciones chicas: graficar_cobertura(cobertura_ac) + ylim(c(0.9, 1)) Conclusión 1: Los intervalos de Agresti-Coull son una buena alternativa para estimar proporciones como sustituto de los intervalos clásicos de Wald, aunque tienden a ser muy conservadores para muestras chicas Idealmente podemos utilizar un método bayesiano pues normalmente tenemos información inicial acerca de las proporciones que queremos estimar. Incorporando información inicial Nótese que generalmente tenemos información acerca de la cantidad que queremos estimar: por ejemplo, que proporción de visitantes de un sitio web compra algo (usualmente muy baja, menos de 2%), qué proporción de personas tiene diabetes tipo 1 (una proporción muy baja, menos de 1 por millar), o qué proporción de hogares tienen ingresos trimestrales mayores a 150 mil pesos (menos de %5 con alta probabilidad). En este caso, tenemos que ajustar nuestra inicial. Por ejemplo, para el problema de ingresos, podríamos usar una \\(\\mathsf{Beta}(2, 100)\\), cuyos cuantiles son: # uno de cada 100 a <- 2 b <- 100 beta_sims <- rbeta(5000, a, b) quantile(beta_sims, c(0.01, 0.05, 0.50, 0.90, 0.99)) |> round(3) ## 1% 5% 50% 90% 99% ## 0.001 0.004 0.016 0.039 0.067 qplot(beta_sims) Veamos cómo se ven los intervalos bayesianos producidos con esta inicial: crear_intervalo_bayes <- function(a, b){ intervalo_fun <- function(n, k){ a_post <- k + a b_post <- n - k + b tibble(inf = qbeta(0.025, a_post, b_post), sup = qbeta(0.975, a_post, b_post)) } intervalo_fun } intervalo_bayes_2 <- crear_intervalo_bayes(a, b) cobertura_bayes <- calcular_cobertura(simulaciones, intervalo_bayes_2) graficar_cobertura(bind_rows(cobertura_bayes, cobertura_ac) |> filter(p < 0.05)) + ylim(c(0.5, 1)) Y vemos que la calibración es similar. Notemos sin embargo que la longitud del del intervalo bayesiano es mucho menor que el de Agresti-Coull cuando la muestra es chica: ggplot(bind_rows(cobertura_bayes, cobertura_ac), aes(x = p, y = long_media, colour = tipo)) + geom_point() + facet_wrap(~n) Cuando la muestra es chica, los intervalos de bayes son similares a los iniciales, y mucho más cortos que los de Agresti-Coull. Para muestras intermedias (50-100) los intervalos bayesianos son más informativos que los de Agresti-Coull, con calibración similar, y representan aprendizaje por encima de lo que sabíamos en la inicial. Para muestras grandes, obtenemos resultados simililares. Por ejemplo: set.seed(2131) k <- rbinom(1, 50, 0.03) k ## [1] 4 intervalo_agresti_coull(50, k) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.022 0.2 es un intervalo muy grande que puede incluir valores negativos. En contraste, el intervalo bayesiano es: intervalo_bayes_2(50, k) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.015 0.076 Aún quitando valores negativos, los intervalos de Agresti-Coull son mucho más anchos. La aproximación bayesiana, entonces, utiliza información previa para dar un resultado considerablemente más informativo, con calibración similar a Agresti-Coull. ¿Aprendimos algo? Comparemos la posterior con la inicial: beta_sims_inicial <- tibble(prop = rbeta(5000, a, b), dist = "inicial") beta_sims_posterior <- tibble(prop = rbeta(5000, a + k, b + 50), dist = "posterior") bind_rows(beta_sims_inicial, beta_sims_posterior) |> ggplot(aes(x = prop, fill = dist)) + geom_histogram(alpha = 0.5, position = "identity") Donde vemos que no aprendimos mucho en este caso, pero nuestras creencias sí cambiaron en comparación con la inicial. Conclusión 2: con el enfoque bayesiano podemos obtener intervalos informativos con calibración razonable, incluso con información inicial que no es muy precisa. Los intervalos de Agresti-Coull son poco informativos para muestras chicas y/o proporciones chicas. Ejemplo: porporción de hogares de ingresos grandes Usaremos los datos de ENIGH como ejemplo (ignorando el diseño, pero es posible hacer todas las estimaciones correctamente) para estimar el porcentaje de hogares que tienen ingreso corriente de más de 150 mil pesos al trimestre. Suponemos que la muestra del enigh es la población, y tomaremos una muestra iid de esta población. Usamos la misma inicial que mostramos arriba, que es una Beta con parámetros c(a,b) ## [1] 2 100 set.seed(2521) muestra_enigh <- read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) |> sample_n(120) |> mutate(mas_150mil = ing_cor > 150000) Un intervalo de 95% es entonces k <- sum(muestra_enigh$mas_150mil) k ## [1] 3 intervalo_bayes_2(120, sum(muestra_enigh$mas_150mil)) |> round(3) ## # A tibble: 1 × 2 ## inf sup ## <dbl> <dbl> ## 1 0.007 0.046 La media posterior es prop_post <- (a + k) / (120 + b) prop_post ## [1] 0.02272727 ¿Cuál es la verdadera proporción? read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) |> mutate(mas_150mil = ing_cor > 150000) |> summarise(prop_pob = mean(mas_150mil)) ## # A tibble: 1 × 1 ## prop_pob ## <dbl> ## 1 0.0277 En este caso, nuestro intervalo cubre a la proporción poblacional. Inferencia bayesiana y regularización Como hemos visto en análisis y modelos anteriores, la posterior que usamos para hacer inferencia combina aspectos de la inicial con la verosimilitud (los datos). Una manera de ver esta combinación y sus beneficios es pensando en término de regularización de estimaciones. En las muestras hay variación. Algunas muestras particulares nos dan estimaciones de máxima verosimilitud pobres de los parámetros de interés (estimaciones ruidosas). Cuando esas estimaciones pobres están en una zona de baja probabilidad de la inicial, la estimación posterior tiende a moverse (o encogerse) hacia las zonas de alta probabilidad de la inicial. Esto filtra ruido en las estimaciones. El mecanismo resulta en una reducción del error cuadrático medio, mediante una reducción de la varianza de los estimadores (aunque quizá el sesgo aumente). Esta es una técnica poderosa, especialmente para problemas complejos donde tenemos pocos datos para cada parámetro. En general, excluímos resultados que no concuerdan con el conocimiento previo, y esto resulta en mayor precisión en las estimaciones. Ejemplo: modelo normal y estaturas Haremos un experimento donde simularemos muestras de los datos de cantantes. Usaremos el modelo normal-gamma inverso que discutimos anteriormente, con la información inicial que elicitamos. ¿Cómo se compara la estimación de máxima verosimilitud con la media posterior? # inicial para media, ver sección anterior para discusión (normal) mu_0 <- 175 n_0 <- 5 # inicial para sigma^2 (gamma inversa) a <- 3 b <- 140 Para este ejemplo chico, usaremos muestras de tamaño 5: set.seed(3413) # ver sección anterior para explicación de esta función calcular_pars_posterior <- function(x, pars_inicial){ # iniciales mu_0 <- pars_inicial[1] n_0 <- pars_inicial[2] a_0 <- pars_inicial[3] b_0 <- pars_inicial[4] # muestra n <- length(x) media <- mean(x) S2 <- sum((x - media)^2) # sigma post a_1 <- a_0 + 0.5 * n b_1 <- b_0 + 0.5 * S2 + 0.5 * (n * n_0) / (n + n_0) * (media - mu_0)^2 # posterior mu mu_1 <- (n_0 * mu_0 + n * media) / (n + n_0) n_1 <- n + n_0 c(mu_1, n_1, a_1, b_1) } Y también de la sección anterior: sim_params <- function(m, pars){ mu_0 <- pars[1] n_0 <- pars[2] a <- pars[3] b <- pars[4] # simular sigmas sims <- tibble(tau = rgamma(m, a, b)) |> mutate(sigma = 1 / sqrt(tau)) # simular mu sims <- sims |> mutate(mu = rnorm(m, mu_0, sigma / sqrt(n_0))) sims } # simular muestras y calcular medias posteriores simular_muestra <- function(rep, mu_0, n_0, a_0, b_0){ cantantes <- lattice::singer |> mutate(estatura_cm = 2.54 * height) |> filter(str_detect(voice.part, "Tenor")) |> sample_n(5, replace = FALSE) pars_posterior <- calcular_pars_posterior(cantantes$estatura_cm, c(mu_0, n_0, a_0, b_0)) medias_post <- sim_params(1000, pars_posterior) |> summarise(across(everything(), mean)) |> select(mu, sigma) media <- mean(cantantes$estatura_cm) est_mv <- c("mu" = media, "sigma" = sqrt(mean((cantantes$estatura_cm - media)^2))) bind_rows(medias_post, est_mv) |> mutate(rep = rep, tipo = c("media_post", "max_verosim")) |> pivot_longer(mu:sigma, names_to = "parametro", values_to = "estimador") } poblacion <- lattice::singer |> mutate(estatura_cm = 2.54 * height) |> filter(str_detect(voice.part, "Tenor")) |> summarise(mu = mean(estatura_cm), sigma = sd(estatura_cm)) |> pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor_pob") errores <- map(1:2000, ~ simular_muestra(.x, mu_0, n_0, a, b)) |> bind_rows() |> left_join(poblacion) |> mutate(error = (estimador - valor_pob)) ggplot(errores, aes(x = error, fill = tipo)) + geom_histogram(bins = 20, position = "identity", alpha = 0.5) + facet_wrap(~parametro) Vemos claramente que la estimación de la desviación estándar de nuestro modelo es claramente superior a la de máxima verosimilitud. En resumen: errores |> group_by(tipo, parametro) |> summarise(recm = sqrt(mean(error^2)) |> round(2)) |> arrange(parametro) ## # A tibble: 4 × 3 ## # Groups: tipo [2] ## tipo parametro recm ## <chr> <chr> <dbl> ## 1 max_verosim mu 2.85 ## 2 media_post mu 1.55 ## 3 max_verosim sigma 2.45 ## 4 media_post sigma 1.04 Obtenemos una ganancia considerable en cuanto a la estimación de la desviación estandar de esta población. Los estimadores de la media posterior son superiores a los de máxima verosimilitud en términos de error cuadrático medio. Podemos graficar las dos estimaciones, muestra a muestra, para entender cómo sucede esto: errores |> select(-error) |> pivot_wider(names_from = tipo, values_from = estimador) |> filter(parametro == "sigma") |> ggplot(aes(x = max_verosim, y = media_post)) + geom_abline(colour = "red") + geom_hline(yintercept = sqrt(b/(a - 1)), lty = 2, color = 'black') + geom_point() + labs(subtitle = "Estimación de sigma") + xlab("Estimador MV de sigma") + ylab("Media posterior de sigma") + coord_fixed() + geom_segment(aes(x = 13, y = 11, xend = 13, yend = sqrt(b/(a - 1))), colour='red', size=1, arrow =arrow(length = unit(0.5, "cm"))) + geom_segment(aes(x = .5, y = 6, xend = .5, yend = sqrt(b/(a - 1))), colour='red', size=1, arrow =arrow(length = unit(0.5, "cm"))) Nótese como estimaciones demasiado bajas o demasiada altas son contraídas hacia valores más consistentes con la inicial, lo cual resulta en menor error. El valor esperado de \\(\\sigma\\) bajo la distribución inicial se muestra como una horizontal punteada. Ejemplo: estimación de proporciones Ahora repetimos el ejercicio de la estimación de la proporción de hogares con ingresos superiores a 150 mil. # inicial a <- 2 b <- 100 qbeta(c(0.01, 0.99), a, b) ## [1] 0.001477084 0.063921446 # datos datos <- read_csv("data/conjunto_de_datos_enigh_2018_ns_csv/conjunto_de_datos_concentradohogar_enigh_2018_ns/conjunto_de_datos/conjunto_de_datos_concentradohogar_enigh_2018_ns.csv") |> select(ing_cor) # estimaciones obtener_estimados <- function(datos){ muestra_enigh <- datos |> sample_n(120) |> mutate(mas_150mil = ing_cor > 150000) k <- sum(muestra_enigh$mas_150mil) tibble(k = k, est_mv = k/120, media_post = (a + k) / (120 + b), pob = 0.02769) } estimadores_sim <- map(1:200, ~obtener_estimados(datos)) |> bind_rows() # calculo de errores error_cm <- estimadores_sim |> summarise(error_mv = sqrt(mean((est_mv - pob)^2)), error_post = sqrt(mean((media_post - pob)^2))) error_cm ## # A tibble: 1 × 2 ## error_mv error_post ## <dbl> <dbl> ## 1 0.0147 0.00928 Podemos ver claramente que las medias posteriores están encogidas hacia valores más chicos (donde la inicial tiene densidad alta) comparadas con las estimaciones de máxima verosimilitud: estimadores_sim_ag <- estimadores_sim |> group_by(k, est_mv, media_post) |> summarise(n = n()) ggplot(estimadores_sim_ag, aes(x = est_mv, media_post, size = n)) + geom_point() + geom_abline() Teoría de decisión En esta parte (que sigue a Wasserman (2013) a grandes rasgos), discutimos brevemente teoría general que nos sirve para seleccionar estimadores puntuales, y que esperemos ponga en contexto la parte anterior que acabamos de discutir. Usaremos algunos conceptos que vimos en la parte de propiedades de estimadores de máxima verosimilitud. Definimos una función de pérdida \\(L(\\theta, \\hat{\\theta}_n)\\), que mide el costo de la discrepancia entre nuestro estimador \\[\\hat{\\theta}_n = t(X_1,\\ldots, X_n) = t(X)\\] y el verdadero valor \\(\\theta\\) poblacional. Es posible considerar distintas funciones de pérdida, pero como en secciones anteriores, usaremos la pérdida cuadrática, definida por: \\[L(\\theta, \\hat{\\theta}_n) = (\\theta - \\hat{\\theta}_n)^2\\] Esta función toma distintos valores dependiendo de la muestra y del parámetro \\(\\theta\\), y necesitamos resumirla para dar una evaluación de qué tan bueno es el estimador \\(\\hat{\\theta}_n\\). Ahora que hemos considerado tanto estadística bayesiana como frecuentista, podemos pensar en resumir esta función de distintas maneras. Comenzamos pensando de manera frecuentista. En este caso, consideramos a \\(\\theta\\) como un valor fijo, y nos preguntamos qué pasaría con la pérdida con distintas muestras potenciales que podríamos observar. Definimos como antes el riesgo (frecuentista) como: \\[R(\\theta, t) = \\mathbb{E}_X\\left[ (\\theta - \\hat{\\theta}_n)^2 \\, \\big| \\, \\theta\\right]\\] donde promediamos a lo largo de las muestras posibles, con \\(\\theta\\) fijo. Esta cantidad no nos dice necesariamente cómo escoger un buen estimador para \\(\\theta\\), pues dependiendo de dónde está \\(\\theta\\) puede tomar valores distintos. Ahora vamos a pensar de manera bayesiana: en este caso, los datos serán fijos una vez que los obervemos de manera que \\(\\hat{\\theta}_n\\) está fijo, y el parámetro \\(\\theta\\) es una cantidad aleatoria con distribución inicial \\(p(\\theta)\\). Entonces consideraríamos el promedio sobre la posterior dado por: \\[\\rho(t, X) = \\mathbb{E}_{p(\\theta|X)}\\left[(\\theta - \\hat{\\theta})^2 \\, \\big | \\, X \\right]\\] que llamamos riesgo posterior. Esta cantidad se calcula con la posterior de los parámetros dados los datos, y nos dice, una vez que vimos los datos, cómo es el error de nuestro estimador. Nótese que esta cantidad no es útil para escoger un estimador bueno \\(t\\) antes de ver los datos, pero nos sirve para evaluar a un estimador dados los datos. En el primer caso, promediamos sobre posibles muestras, y en el segundo por valores posibles de \\(\\theta\\) para una muestra dada. Ejemplo: riesgo frecuentista Para observaciones bernoulli, el estimador de máxima verosimilitud es \\(\\hat{p}_1 = k /n\\), donde \\(n\\) es el tamaño de muestra y \\(k\\) el número de éxitos observados. Podemos usar también como estimador la media posterior de un modelo Beta-Bernoulli con inicial \\(a=2, b=2\\), que nos daría \\(\\hat{p}_2 = \\frac{k + 2}{n + 4}\\). Aunque podemos hacer los cálculos analíticos, aproximaremos el riesgo bajo el error cuadrático usando simulación perdida_cuad <- function(p, p_hat){ (p - p_hat)^2 } # dos estimadores t_1 <- function(n, x) x / n t_2 <- function(n, x) (x + 2) / (n + 4) estimar_riesgo <- function(n = 20, theta, perdida, reps = 10000){ x <- rbinom(reps, n, theta) # calcular estimaciones theta_1 <- t_1(n, x) theta_2 <- t_2(n, x) # calcular pérdida media_perdida <- tibble( n = n, theta = theta, estimador = c("MLE", "Posterior"), riesgo = c(mean(perdida(theta, theta_1)), mean(perdida(theta, theta_2)))) media_perdida } estimar_riesgo(n = 20, theta = 0.1, perdida = perdida_cuad) ## # A tibble: 2 × 4 ## n theta estimador riesgo ## <dbl> <dbl> <chr> <dbl> ## 1 20 0.1 MLE 0.00449 ## 2 20 0.1 Posterior 0.00755 Como dijimos, esta cantidad depende de \\(\\theta\\) que no conocemos. Así que calculamos para cada valor de \\(\\theta:\\) Las funciones de riesgo \\(R(\\theta, t_1)\\) y \\(R(\\theta, t_2)\\) (dependen de \\(\\theta\\)) se ven aproximadamente como sigue: p_seq <- seq(0, 1, 0.001) riesgo_tbl <- map(p_seq, ~ estimar_riesgo(n = 20, theta = .x, perdida = perdida_cuad)) |> bind_rows() ggplot(riesgo_tbl, aes(x = theta, y = riesgo, colour = estimador)) + geom_line() Y vemos que el riesgo depende del verdadero valor del parametro: en los extremos, el estimador de máxima verosimilitud tiene menos riesgo, pero en el centro tiene más (esto es independiente del tipo de intervalos que construyamos y su cobertura). La razón es que las estimaciones de tipo Agresti-Coull (\\(\\theta_2\\)) están contraídas hacia 0.5 (agregamos dos éxitos y dos fracasos). Esto produce sesgo en la estimación para valores extremos de \\(\\theta\\). Sin embargo, para valores centrales de \\(\\theta\\) tiene menos variabilidad (por regularización) que el estimador de máxima verosimilitud, y sufre poco de sesgo. Ejemplo: riesgo posterior Supongamos que la inicial es \\(\\theta \\sim \\mathsf{Beta}(5,3)\\) estimar_riesgo_post <- function(n = 20, x, perdida, reps = 20000){ # calcular estimaciones theta_1 <- t_1(n, x) theta_2 <- t_2(n, x) # simular de posterior theta_post <- rbeta(reps, x + 5, n - x + 3) # calcular pérdida media_perdida <- tibble( n = n, x = x, estimador = c("MLE", "Posterior"), riesgo_post= c(mean(perdida(theta_post, theta_1)), mean(perdida(theta_post, theta_2)))) media_perdida } estimar_riesgo_post(n = 20, x = 8, perdida = perdida_cuad) ## # A tibble: 2 × 4 ## n x estimador riesgo_post ## <dbl> <dbl> <chr> <dbl> ## 1 20 8 MLE 0.0127 ## 2 20 8 Posterior 0.0109 Como dijimos, esta cantidad depende de los datos \\(x\\) que no hemos observado. Así que calculamos para cada valor de \\(x\\): Las funciones de pérdida promedio \\(\\rho(x, t_1)\\) y \\(\\rho(x, t_2)\\) (dependen de \\(x\\)) se ven aproximadamente como sigue: x_seq <- seq(0, 20, 1) riesgo_post_tbl <- map(x_seq, ~ estimar_riesgo_post(n = 20, x = .x, perdida = perdida_cuad)) |> bind_rows() ggplot(riesgo_post_tbl, aes(x = x, y = riesgo_post, colour = estimador)) + geom_line() + geom_point() Donde vemos que la pérdida del estimador bayesiano es mejor para valores extremos de número de éxitos observado \\(x\\), pero tiene más riesgo posterior para valores chicos de \\(x\\). En general es mejor el estimador \\(\\theta_2\\). El estimador de máxima verosimilitud tiene más riesgo en los extremos, lo que esperaríamos porque no tenemos la regularización que aporta la posterior. Igualmente, vemos más riesgo para valores chicos de \\(x\\) que para valores grandes: esto es porque la inicial está concentrada en valores reslativamente grandes de \\(\\theta\\). Riesgo de Bayes Finalmente, podemos crear un resumen unificado considerando: Si no conocemos el valor del parámetro \\(\\theta\\), podemos promediar el riesgo frecuentista con la inicial \\(p(\\theta)\\) Si no conocemos los datos observados, podemos promediar usando datos generados por la marginal \\(p(x)\\) de \\(x\\) bajo el modelo de datos \\(p(x|\\theta)\\) y la inicial \\(p(\\theta)\\). Por la ley de la esperanza iterada, estos dos resultados son iguales. La cantidad resultante \\[r(t) = \\int R(\\theta,t) p(\\theta)\\, d\\theta = \\int r(x, t)p(x|\\theta)p(\\theta)\\, d\\theta\\, dx\\] Se llama riesgo de Bayes para el estimador \\(t\\). Ejemplo Podemos calcular marginal_tbl <- function(n = 20, m = 5000){ theta <- rbeta(m, 5, 3) x <- rbinom(m, size = n, p = theta) tibble(x = x) |> group_by(x) |> summarise(n_x = n()) } riesgo_post_tbl |> left_join(marginal_tbl()) |> group_by(estimador) |> summarise(riesgo_bayes = sum(riesgo_post * n_x) / sum(n_x)) ## # A tibble: 2 × 2 ## estimador riesgo_bayes ## <chr> <dbl> ## 1 MLE 0.0104 ## 2 Posterior 0.00833 o también theta_tbl <- tibble(theta = rbeta(50000, 5, 3) |> round(3)) |> group_by(theta) |> summarise(n_x = n()) riesgo_tbl |> left_join(theta_tbl) |> mutate(n_x = ifelse(is.na(n_x), 0, n_x)) |> group_by(estimador) |> summarise(riesgo_bayes = sum(riesgo * n_x) / sum(n_x)) ## # A tibble: 2 × 2 ## estimador riesgo_bayes ## <chr> <dbl> ## 1 MLE 0.0104 ## 2 Posterior 0.00839 Ahora consideremos cómo decidiríamos, desde el punto de vista Bayesiano, qué estimador usar: (Estimador de Bayes) Si tenemos los datos \\(X\\), escogeríamos una función \\(t_X\\) que minimice el riesgo posterior \\(\\rho(t, X)\\), y nuestro estimador es \\(\\hat{\\theta}_n = t_X (X)\\). (Regla de Bayes) Si no tenemos los datos, escogeríamos el estimador una función \\(t\\) que minimice el riesgo de Bayes \\(r(t)\\), y estimaríamos usando \\(\\hat{\\theta}_n = t(X)\\) Pero como el riesgo de Bayes es el promedio del riesgo posterior, la solución de 1 nos da la solución de 2. Es decir, el estimador que escogemos condicional a los datos \\(X\\) es el mismo que escogeríamos antes de escoger los datos, dada una distribución inicial \\(p(\\theta).\\) Por ejemplo, es posible demostrar que bajo la pérdida cuadrática, la regla de Bayes es utilizar la media posterior, bajo la pérdida absoluta, la mediana posterior, etc. Este estimador de Bayes tiene sentido desde el punto de vista frecuentista, también, porque minimiza el riesgo frecuentista promedio, suponiendo la inicial \\(p(\\theta)\\). Por ejemplo, para la pérdida cuadrática podemos usar la descomposición de sesgo y varianza y obtenemos: \\[r(t) = \\mathbb{E}[R(\\theta,t)] = \\mathbb{E}[ \\mathsf{Sesgo}_\\theta^2(t)] +\\mathbb{E}[\\mathsf{Var}_\\theta(t)] \\] Podemos ver entonces que el estimador de Bayes, en este caso la media posterior, es resultado de minimizar la suma de estas dos cantidades: por eso puede incurrir en sesgo, si ese costo se subsana con una reducción considerable de la varianza. Los estimadores insesgados que vimos en esta sección fueron subóptimos en muchos casos justamente porque son insesgados, e incurren en varianza grande. Regresa a los ejemplos anteriores donde evaluamos el desempeño de la media posterior en varios ejemplos. Muestra en las gráficas dónde ves el balance entre sesgo y varianza que cumplen cuando los comparamos con estimadores insesgados. Desde el punto de vista frecuentista, la cuestión es más complicada y hay varias maneras de proceder. En primer lugar, comenzaríamos con el riesgo frecuentista \\(R(\\theta, t)\\). Una idea es,por ejemplo, calcular el riesgo máximo: \\[R_{\\max} (t) = \\underset{\\theta}{\\max} R(\\theta, t).\\] En nuestro ejemplo de arriba el máximo se alcanza en 0.5, y tomaríamos eso evaluación de los estimadores \\(\\theta_1\\) o \\(\\theta_2\\). Buscaríamos entonces estimadores que minimicen este máximo, es decir, estimadores minimax. Pero también es posible enfocar este problema considerando sólo estimadores insesgados, lo que nos lleva por ejemplo a buscar estimadores con mínima varianza. También podemos enfocarnos en buscar estimador admisibles, que son aquellos cuyo riesgo no está dominado para toda \\(\\theta\\) por otro estimador, y así sucesivamente. Finalmente, es posible demostrar (ver Wasserman (2013)) que típicamente, para muestras grandes, el estimador de máxima verosimilitud es cercano a ser minimax y además es una regla de Bayes. Estas son buenas propiedades, pero debemos contar con que el régimen asintótico se cumpla aproximadamente. Referencias "],["métodos-de-cadenas-de-markov-monte-carlo.html", "Sección 12 Métodos de Cadenas de Markov Monte Carlo Integrales mediante subdivisiones Métodos Monte Carlo Simulando de la posterior Ejemplo de islas ¿Por qué funciona Metrópolis? Método de Metrópolis Ajustando el tamaño de salto Metrópolis con varios parámetros Muestreador de Gibbs Conclusiones y observaciones Metrópolis y Gibbs HMC y Stan Diagnósticos generales para MCMC", " Sección 12 Métodos de Cadenas de Markov Monte Carlo Hasta ahora, hemos considerado modelos bayesianos conjugados, donde la posterior tiene una forma conocida. Esto nos permitió simular directamente de la posterior usando las rutinas estándar de R, o utilizar cálculos teóricos o funciones estándar de R para calcular resúmenes de interés, como medias o medianas posteriores o intervalos de credibilidad. Sin embargo, en aplicaciones rara vez es factible este tipo de análisis tan simple, pues: Los modelos que estamos considerando son más complejos y la distribución posterior conjunta de los parámetros no tiene una forma simple conocida. Queremos usar distribuciones iniciales que no son conjugadas para utilizar correctamente nuestra información inicial. Recordamos que tenemos expresiones explícitas para la inicial \\(p(\\theta)\\) y la verosimilitud \\(p(x|\\theta)\\), así que conocemos explícitamente la posterior, módulo la constante de normalización, \\[p(\\theta|x) \\propto p(x|\\theta) \\, p(\\theta).\\] Supongamos por ejemplo que quisiéramos calcular las medias posteriores de los parámetros \\(\\theta\\). En teoría, tendríamos que calcular \\[\\hat \\theta = \\mathbb{E}[{\\theta}\\, |\\, x] = \\int \\theta \\, p(\\theta|x) \\, d\\theta\\] Entonces es necesario calcular también \\(p(x)\\), que resulta de la integral \\[p(x) = \\int p(x|\\theta) \\, p(\\theta)\\, d\\theta\\] Si no tenemos expresiones analíticas simples, tendremos que aproximar numéricamente estas integrales de alguna forma. Si la posterior tiene una forma conocida, podemos calcular cantidades de interés usando fórmulas o rutinas de simulación de distribuciones conocidas que producen muestras independientes. Cuando la posterior no tiene una forma conocida, sin embargo: Podemos intentar usar integración numérica usual. Como veremos, este enfoque no es muy escalable. Podemos usar simulaciones bajo cadenas de Markov (Markov Chain Monte Carlo, MCMC), que es un enfoque más escalable. Mucho del uso generalizado actual de la estadística bayesiana se debe a que gracias al poder de cómputo disponible y los métodos MCMC, no estamos restringidos al uso de 1 y 2, que tienen desventajas grandes. Primero mostraremos cómo el método de integración por subdivisión no es escalable. Integrales mediante subdivisiones Como tenemos una expresión analítica para el integrando, podemos intentar una rutina numérica de integración. Una vez calculada, podríamos entonces usar otra rutina numérica para calcular las medias posteriores \\(\\hat{\\theta}\\). Las rutinas usuales de integración pueden sernos útiles cuando el número de parámetros es chico. Consideremos primero el caso de 1 dimensión, y supongamos que \\(a\\leq\\theta\\leq b\\). Si dividimos el rango de \\(\\theta\\) en intervalos determinados por \\(a = \\theta^1<\\theta^2<\\cdots \\theta^M =b\\), tales que \\(\\Delta\\theta = \\theta^{i+1} -\\theta^{i}\\), podríamos aproximar con \\[p(x) \\approx \\sum_{i=1}^M p(x|\\theta^i)p(\\theta^i) \\Delta\\theta\\] Lo que requiere \\(M\\) evaluaciones del factor \\(p(x|\\theta)p(\\theta)\\). Podríamos usar por ejemplo \\(M=100\\) para tener precisión razonable. Ejemplo: estimación de una proporción Teníamos que \\(p(S_n = k|\\theta) \\propto \\theta^k(1-\\theta)^{n-k}\\) cuando observamos \\(k\\) éxitos en \\(n\\) pruebas independientes. Supongamos que nuestra inicial es \\(p(\\theta) = 2\\theta\\) (checa que es una densidad), es decir, creemos que es más probable a priori observar proporciones altas. Podemos integrar numéricamente crear_log_post <- function(n, k){ function(theta){ verosim <- k * log(theta) + (n - k) * log(1 - theta) inicial <- log(theta) log_p_factor <- verosim + inicial log_p_factor } } # observamos 3 éxitos en 4 pruebas: log_post <- crear_log_post(4, 3) prob_post <- function(x) { exp(log_post(x))} # integramos numéricamente p_x <- integrate(prob_post, lower = 0, upper = 1, subdivisions = 100L) p_x ## 0.03333333 with absolute error < 3.7e-16 Y ahora podemos calcular la media posterior: media_funcion <- function(theta){ theta * prob_post(theta) / p_x$value } integral_media <- integrate(media_funcion, lower = 0, upper = 1, subdivisions = 100L) media_post <- integral_media$value media_post ## [1] 0.7142857 Podemos verificar nuestro trabajo pues sabemos que la posterior es \\(\\mathsf{Beta}(5, 2)\\) cuya media es 5/(2+5) ## [1] 0.7142857 Y podríamos intentar una estrategia similar, por ejemplo, para calcular intervalos de credibilidad. Sin embargo, veremos abajo que este método no escala con el número de parámetros. Más de un parámetro Ahora supongamos que tenemos \\(2\\) parámetros. Dividiríamos cada parámetro en 100 intervalos, y luego tendríamos que calcular \\[p(x) \\approx \\sum_{i=1}^M \\sum_{j=1}^M p(x|\\theta_1^i, \\theta_2^j)p(\\theta_1^i, \\theta_2^j) \\Delta\\theta_1\\Delta\\theta_2\\] Y esto requeriría \\(M^2 = 10,000\\) evaluaciones de \\(p(x|\\theta)p(\\theta)\\). Si tenemos \\(p\\) parámetros, entonces tendríamos que hacer \\(M^p\\) evaluaciones de la posterior. Incluso cuando \\(p=10\\), esta estrategia es infactible, pues tendríamos que hacer más de millones de millones de millones de evaluaciones de la posterior. Si sólo tenemos esta técnica disponible, el análisis bayesiano está considerablemente restringido. Regresión bayesiana con unas 10 covariables por ejemplo, no podría hacerse. De modo que tenemos que replantearnos cómo atacar el problema de calcular o aproximar estas integrales. Métodos Monte Carlo En varias ocasiones anteriormente hemos usado el método Monte Carlo para aproximar integrales: por ejemplo, para calcular medias posteriores. Supongamos que tenemos una densidad \\(p(\\theta)\\). Integración Monte Carlo. Supongamos que queremos calcular el valor esperado de \\(g(X)\\), donde \\(X\\sim p(X\\,|\\,\\theta).\\) Es decir, la variable aleatoria \\(X\\) se distribuye de acuerdo al modelo probabilistico \\(p(X \\, | \\, \\theta),\\) de tal forma que lo que nos interesa calcular es \\[\\mathbb{E}[g(X)] = \\int g(x) p(x|\\theta)\\, dx.\\] Si tomamos una muestra \\(x^{(1)},x^{(2)}, \\ldots x^{(N)} \\overset{iid}{\\sim} p(x|\\theta)\\), entonces \\[\\mathbb{E}[g(X)] \\approx \\, \\frac1N \\, \\sum_{n = 1}^N g(x^{(n)})\\] cuando \\(N\\) es grande. Esto es simplemente una manera de escribir la ley de los grandes números, y hemos aplicado este teorema en varias ocasiones. Nos ha sido útil cuando sabemos cómo simular de distribución \\(p(\\theta | x)\\) (usando alguna rutina de R, por ejemplo, o usando un método estándar como inversión de la función de distribución acumulada). Ejemplo En este ejemplo repetimos cosas que ya hemos visto. En el caso de estimación de una proporción \\(\\theta\\), tenemos como inicial \\(p(\\theta) \\propto \\theta\\), que es \\(\\mathsf{Beta}(2,1)\\). Si observamos 3 éxitos en 4 pruebas, entonces sabemos que la posterior es \\(p(\\theta|x)\\propto \\theta^4(1-\\theta)\\), que es \\(\\mathsf{Beta}(5, 2)\\). Si queremos calcular media y segundo momento posterior para \\(\\theta\\), en teoría necesitamos calcular \\[\\mu = \\int_0^1 \\theta p(\\theta|X = 3)\\, d\\theta,\\,\\, \\mu_2=\\int_0^1 \\theta^2 p(\\theta|X = 3)\\, d\\theta\\] integramos con Monte Carlo theta <- rbeta(10000, 5, 2) media_post <- mean(theta) momento_2_post <- mean(theta^2) c(media_post, momento_2_post) ## [1] 0.7147007 0.5364443 Y podemos aproximar de esta manera cualquier cantidad de interés que esté basada en integrales, como probabilidades asociadas a \\(\\theta\\) o cuantiles asociados. Por ejemplo, podemos aproximar fácilmente \\(P(e^{\\theta}> 2|x)\\) haciendo mean(exp(theta) > 2) ## [1] 0.5959 y así sucesivamente. Este enfoque, sin embargo, es mucho más flexible y poderoso. Ejemplo: varias pruebas independientes Supongamos que probamos el nivel de gusto para 4 sabores distintos de una paleta. Usamos 4 muestras de aproximadamente 50 personas diferentes para cada sabor, y cada uno evalúa si le gustó mucho o no. Obtenemos los siguientes resultados: datos <- tibble( sabor = c("fresa", "limón", "mango", "guanábana"), n = c(50, 45, 51, 50), gusto = c(36, 35, 42, 29)) %>% mutate(prop_gust = gusto / n) datos ## # A tibble: 4 × 4 ## sabor n gusto prop_gust ## <chr> <dbl> <dbl> <dbl> ## 1 fresa 50 36 0.72 ## 2 limón 45 35 0.778 ## 3 mango 51 42 0.824 ## 4 guanábana 50 29 0.58 Usaremos como inicial \\(\\mathsf{Beta}(2, 1)\\) (pues hemos obervado cierto sesgo de cortesía en la calificación de sabores, y no es tan probable tener valores muy bajos) para todos los sabores, es decir \\(p(\\theta_i)\\) es la funcion de densidad de una \\(\\mathsf{Beta}(2, 1)\\). La inicial conjunta la definimos entonces, usando idependiencia inicial, como \\[p(\\theta_1,\\theta_2, \\theta_3,\\theta_4) = p(\\theta_1)p(\\theta_2)p(\\theta_3)p(\\theta_4).\\] Pues inicialmente establecemos que ningún parámetro da información sobre otro: saber que mango es muy gustado no nos dice nada acerca del gusto por fresa. Bajo este supuesto, y el supuesto adicional de que las muestras de cada sabor son independientes, podemos mostrar que las posteriores son independientes: \\[p(\\theta_1,\\theta_2,\\theta_3, \\theta_4|k_1,k_2,k_3,k_4) = p(\\theta_4|k_1)p(\\theta_4|k_2)p(\\theta_4|k_3)p(\\theta_4|k_4)\\] De forma que podemos trabajar individualmente con cada muestra. Calculamos los parámetros de las posteriores individuales: datos <- datos %>% mutate(a_post = gusto + 2, b_post = n - gusto + 1) datos ## # A tibble: 4 × 6 ## sabor n gusto prop_gust a_post b_post ## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 fresa 50 36 0.72 38 15 ## 2 limón 45 35 0.778 37 11 ## 3 mango 51 42 0.824 44 10 ## 4 guanábana 50 29 0.58 31 22 Ahora nos preguntamos, ¿cuál es la probabilidad posterior de que mango sea el sabor más preferido de la población? Conocemos la posterior para cada parámetro, y sabemos que los parámetros son independientes para la posterior. Eso quiere decir que podemos simular de cada parámetro independientemente para obtener simulaciones de la conjunta posterior. simular_conjunta <- function(rep, datos){ datos %>% mutate(valor_sim = map2_dbl(a_post, b_post, ~ rbeta(1, .x, .y))) %>% select(sabor, valor_sim) } simular_conjunta(1, datos) ## # A tibble: 4 × 2 ## sabor valor_sim ## <chr> <dbl> ## 1 fresa 0.886 ## 2 limón 0.729 ## 3 mango 0.701 ## 4 guanábana 0.493 # esta no es una manera muy rápida, podríamos calcular todas las # simulaciones de cada parámetro de manera vectorizada sims_posterior <- tibble(rep = 1:5000) %>% mutate(sims = map(rep, ~ simular_conjunta(.x, datos))) %>% unnest(cols = sims) sims_posterior ## # A tibble: 20,000 × 3 ## rep sabor valor_sim ## <int> <chr> <dbl> ## 1 1 fresa 0.727 ## 2 1 limón 0.823 ## 3 1 mango 0.849 ## 4 1 guanábana 0.474 ## 5 2 fresa 0.659 ## 6 2 limón 0.785 ## 7 2 mango 0.866 ## 8 2 guanábana 0.631 ## 9 3 fresa 0.553 ## 10 3 limón 0.719 ## # ℹ 19,990 more rows Y ahora podemos aproximar fácilmente la probabilidad de interés: sims_posterior %>% group_by(rep) %>% mutate(sabor = sabor[which.max(valor_sim)]) %>% group_by(sabor) %>% count() %>% ungroup() %>% mutate(prop = n / sum(n)) ## # A tibble: 4 × 3 ## sabor n prop ## <chr> <int> <dbl> ## 1 fresa 1264 0.0632 ## 2 guanábana 20 0.001 ## 3 limón 5424 0.271 ## 4 mango 13292 0.665 Y vemos que los mejores sabores son mango y limón. La probabilidad posterior de que mango sea el sabor preferido por la población es de 66%. La integral correspondiente no es trivial. ¿Cuáles son las probabilidades a priori de que cada sabor sea el preferido por la población? ¿Cuál es la integral correspondiente a las probabilidades que acabamos de calcular? ¿Qué tan fácil es hacer esta integral de manera analítica? Calcula la probabilidad de que mango sea preferido a limón? ¿Qué conclusión práctica sacas de estos resultados? Simulando de la posterior Hemos establecido que podemos contestar varias preguntas de inferencia usando simulación Monte Carlo, y que este enfoque es potencialmente escalable (en contraste con métodos de integración numérica por cuadrícula). Ahora el problema que necesitamos resolver es el siguiente: Conocemos \\(p(\\theta |x)\\) módulo una constante de integración. En general, \\(p(\\theta|x)\\) no tiene una forma reconocible que corresponda a un simulador estándar. ¿Cómo simulamos de esta posterior cuando sólo sabemos calcular \\(p(x|\\theta)p(\\theta)\\)? Hay varias maneras de hacer esto. Presentaremos los algoritmos en términos de una distribución cualquiera \\(p(\\theta) = K f(\\theta)\\), donde sólo conocemos la función \\(f(\\theta)\\). Ejemplo de islas Comenzamos revisando el ejemplo de las islas en Kruschke (2015) (7.2) para tener más intuición de cómo funciona este algoritmo. ¿Por qué funciona Metrópolis? Supongamos que un vendedor de Yakult trabaja a lo largo de una cadena de islas: Constantemente viaja entre las islas ofreciendo sus productos; Al final de un día de trabajo decide si permanece en la misma isla o se transporta a una de las \\(2\\) islas vecinas; El vendedor ignora la distribución de la población en las islas y el número total de islas; sin embargo, una vez que se encuentra en una isla puede investigar la población de la misma y también de la isla a la que se propone viajar después. El objetivo del vendedor es visitar las islas de manera proporcional a la población de cada una. Con esto en mente el vendedor utiliza el siguiente proceso: Lanza un volado, si el resultado es águila se propone ir a la isla del lado izquierdo de su ubicación actual y si es sol a la del lado derecho. Si la isla propuesta en el paso anterior tiene población mayor a la población de la isla actual, el vendedor decide viajar a ella. Si la isla vecina tiene población menor, entonces visita la isla propuesta con una probabilidad que depende de la población de las islas. Sea \\(P^*\\) la población de la isla propuesta y \\(P_{t}\\) la población de la isla actual. Entonces el vendedor cambia de isla con probabilidad \\[q_{mover}=P^*/P_{t}\\] A la larga, si el vendedor sigue la heurística anterior la probabilidad de que el vendedor este en alguna de las islas coincide con la población relativa de la isla. islas <- tibble(islas = 1:10, pob = 1:10) camina_isla <- function(i){ # i: isla actual u <- runif(1) # volado v <- ifelse(u < 0.5, i - 1, i + 1) # isla vecina (índice) if (v < 1 | v > 10) { # si estás en los extremos y el volado indica salir return(i) } p_move = ifelse(islas$pob[v] > islas$pob[i], 1, islas$pob[v] / islas$pob[i]) u2 <- runif(1) if (p_move > u2) { return(v) # isla destino } else { return(i) # me quedo en la misma isla } } pasos <- 100000 iteraciones <- numeric(pasos) iteraciones[1] <- sample(1:10, 1) # isla inicial for (j in 2:pasos) { iteraciones[j] <- camina_isla(iteraciones[j - 1]) } caminata <- tibble(pasos = 1:pasos, isla = iteraciones) plot_caminata <- ggplot(caminata[1:1000, ], aes(x = pasos, y = isla)) + geom_point(size = 0.8) + geom_path(alpha = 0.5) + coord_flip() + labs(title = "Caminata aleatoria") + scale_y_continuous(expression(theta), breaks = 1:10) + scale_x_continuous("Tiempo") plot_dist <- ggplot(caminata, aes(x = isla)) + geom_histogram() + scale_x_continuous(expression(theta), breaks = 1:10) + labs(title = "Distribución objetivo", y = expression(P(theta))) plot_caminata / plot_dist Entonces: Para aproximar la distribución objetivo debemos permitir que el vendedor recorra las islas durante una sucesión larga de pasos y registramos sus visitas. Nuestra aproximación de la distribución es justamente el registro de sus visitas. Más aún, debemos tener cuidado y excluir la porción de las visitas que se encuentran bajo la influencia de la posición inicial. Esto es, debemos excluir el periodo de calentamiento. Una vez que tenemos un registro largo de los viajes del vendedor (excluyendo el calentamiento) podemos aproximar la distribución objetivo simplemente contando el número relativo de veces que el vendedor visitó dicha isla. t <- c(1:10, 20, 50, 100, 200, 1000, 5000) plots_list <- map(t, function(i){ ggplot(caminata[1:i, ], aes(x = isla)) + geom_histogram() + labs(y = "", x = "", title = paste("t = ", i, sep = "")) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) }) wrap_plots(plots_list) Escribamos el algoritmo, para esto indexamos las islas por el valor \\(\\theta\\), es así que la isla del extremo oeste corresponde a \\(\\theta=1\\) y la población relativa de cada isla es \\(P(\\theta)\\): El vendedor se ubica en \\(\\theta^{(i)}\\) y propone moverse a la izquierda o derecha con probabilidad \\(0.5\\). El rango de los posibles valores para moverse, y la probabilidad de proponer cada uno se conoce como distribución propuesta, en nuestro ejemplo sólo toma dos valores cada uno con probabilidad \\(0.5\\). Una vez que se propone un movimiento, decidimos si aceptarlo. La decisión de aceptar se basa en el valor de la distribución objetivo en la posición propuesta, relativo al valor de la distribución objetivo en la posición actual: \\[\\alpha=\\min\\bigg\\{\\frac{P(\\theta^*)}{P(\\theta^{(i)})},1\\bigg\\},\\] donde \\(\\alpha\\) denota la probabilidad de hacer el cambio de isla. Notemos que la distribución objetivo \\(P(\\theta)\\) no necesita estar normalizada, esto es porque lo que nos interesa es el cociente \\(P(\\theta^*)/P(\\theta^{(i)})\\). Una vez que propusimos un movimiento y calculamos la probabilidad de aceptar el movimiento aceptamos o rechazamos el movimiento generando un valor de una distribución uniforme, si dicho valor es menor a la probabilidad de cambio, \\(\\alpha,\\) entonces hacemos el movimiento. Entonces, para utilizar el algoritmo necesitamos ser capaces de: Generar un valor de la distribución propuesta, que hemos denotado por \\(q,\\) (para crear \\(\\theta^*\\)). Evaluar la distribución objetivo en cualquier valor propuesto (para calcular \\(P(\\theta^*)/P(\\theta^{(i)})\\)). Generar un valor uniforme (para movernos con probabilidad \\(\\alpha\\)). Las \\(3\\) puntos anteriores nos permiten generar muestras aleatorias de la distribución objetivo, sin importar si esta está normalizada. Esta técnica es particularmente útil cuando cuando la distribución objetivo es una posterior proporcional a \\(p(x|\\theta)p(\\theta)\\). Para entender porque funciona el algoritmo de Metrópolis hace falta entender \\(2\\) puntos, primero que la distribución objetivo es estable: si la probabilidad actual de ubicarse en una posición coincide con la probabilidad en la distribución objetivo, entonces el algoritmo preserva las probabilidades. library(expm) transMat <- function(P){ # recibe vector de probabilidades (o población) T <- matrix(0, 10, 10) n <- length(P - 1) # número de estados for (j in 2:n - 1) { # llenamos por fila T[j, j - 1] <- 0.5 * min(P[j - 1] / P[j], 1) T[j, j] <- 0.5 * (1 - min(P[j - 1] / P[j], 1)) + 0.5 * (1 - min(P[j + 1] / P[j], 1)) T[j, j + 1] <- 0.5 * min(P[j + 1] / P[j], 1) } # faltan los casos j = 1 y j = n T[1, 1] <- 0.5 + 0.5 * (1 - min(P[2] / P[1], 1)) T[1, 2] <- 0.5 * min(P[2] / P[1], 1) T[n, n] <- 0.5 + 0.5 * (1 - min(P[n - 1] / P[n], 1)) T[n, n - 1] <- 0.5 * min(P[n - 1] / P[n], 1) T } T <- transMat(islas$pob) w <- c(0, 1, rep(0, 8)) t <- c(1:10, 20, 50, 100, 200, 1000, 5000) expT <- map_df(t, ~data.frame(t = ., w %*% (T %^% .))) expT_long <- expT %>% gather(theta, P, -t) %>% mutate(theta = parse_number(theta)) ggplot(expT_long, aes(x = theta, y = P)) + geom_bar(stat = "identity", fill = "darkgray") + facet_wrap(~ t) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) El segundo punto es que el proceso converge a la distribución objetivo. Podemos ver, (en nuestro ejemplo sencillo) que sin importar el punto de inicio se alcanza la distribución objetivo. inicio_p <- function(i){ w <- rep(0, 10) w[i] <- 1 t <- c(1, 10, 50, 100) exp_t <- map_df(t, ~ data.frame(t = .x, inicio = i, w %*% (T %^% .))) %>% gather(theta, P, -t, -inicio) %>% mutate(theta = parse_number(theta)) exp_t } exp_t <- map_df(c(1, 3, 5, 9), inicio_p) ggplot(exp_t, aes(x = as.numeric(theta), y = P)) + geom_bar(stat = "identity", fill = "darkgray") + facet_grid(inicio ~ t) + scale_x_continuous(expression(theta), breaks = 1:10, limits = c(0, 11)) Método de Metrópolis En el método de Metrópolis, uno de los más antiguos, comenzamos con un valor inicial de los parámetros \\(\\theta^{(0)}\\) en el soporte de \\(p(\\theta)\\), es decir \\(p(\\theta^{(0)})>0.\\) Para \\(i=1, \\ldots, M\\), hacemos: Partiendo de \\(\\theta^{(i)}\\), hacemos un salto corto en una dirección al azar para obtener una propuesta \\(\\theta^* \\sim q(\\theta \\, |\\, \\theta^{(i)}).\\) Aceptamos or rechazamos el salto: Si \\(\\alpha = \\frac{f(\\theta^*)}{f(\\theta^{(i)})} \\geq 1\\), aceptamos el salto y ponemos \\(\\theta^{(i+1)}=\\theta^*\\). Regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1.\\) Si \\(\\alpha = \\frac{f(\\theta^*)}{f(\\theta^{(i)})} < 1\\), entonces aceptamos con probabilidad \\(\\alpha\\) el salto, ponemos \\(\\theta^{(i+1)}=\\theta^*\\) y regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1\\). Si rechazamos el salto, ponemos entonces \\(\\theta^{(i+1)}=\\theta^{(i)}\\) y regresamos a 1 para la siguiente iteración \\(i\\leftarrow i + 1.\\) Requerimos también que la función que propone los saltos sea simétrica: es decir, \\(q(\\theta^*|\\theta^{(i)})\\) debe ser igual a \\(q(\\theta^{(i)}|\\theta^*)\\). Se puede modificar el algoritmo para tratar con una propuesta que no sea simétrica. Una elección común es escoger \\(q(\\theta^* |\\theta^{(i)})\\) como una \\(\\mathsf{N}(\\theta^{(i)}, \\sigma_{salto})\\). En este curso, escribiremos varios métodos de cadenas de Markov para estimación Monte Carlo (Markov Chain Monte Carlo, MCMC) desde cero para entender los básicos de cómo funciona. Sin embargo, en la práctica no hacemos esto, sino que usamos software estándar (Stan, JAGS, BUGS, etc.) para hacer este trabajo. Expertos en MCMC, métodos numéricos, y estadística a veces escriben partes de sus rutinas de simulación, y pueden lograr mejoras de desempeño considerables. Excepto para modelos simples, esto no es trivial de hacer garantizando resultados correctos. En resumen, todo el código de esta sección es de carácter ilustrativo. Utiliza implementaciones establecidas en las aplicaciones. Abajo implementamos el algoritmo con un salto de tipo normal: crear_metropolis <- function(fun_log, sigma_salto = 0.1){ # la entrada es la log posterior iterar_metropolis <- function(theta_inicial, n){ p <- length(theta_inicial) nombres <- names(theta_inicial) iteraciones <- matrix(0, nrow = n, ncol = p) colnames(iteraciones) <- nombres iteraciones[1,] <- theta_inicial for(i in 2:n){ theta <- iteraciones[i - 1, ] theta_prop <- theta + rnorm(p, 0, sigma_salto) # exp(log(p) - log(q)) = p/q cociente <- exp(fun_log(theta_prop) - fun_log(theta)) if(cociente >= 1 || runif(1,0,1) < cociente){ iteraciones[i, ] <- theta_prop } else { iteraciones[i, ] <- theta } } iteraciones_tbl <- iteraciones %>% as_tibble() %>% mutate(iter_num = row_number()) %>% select(iter_num, everything()) iteraciones_tbl } iterar_metropolis } E intentamos simular de una exponencial no normalizada: exp_no_norm <- function(x) { z <- ifelse(x > 0, exp(-0.5 * x), 0) log(z) } iterador_metro <- crear_metropolis(exp_no_norm, sigma_salto = 0.25) sims_tbl <- iterador_metro(c(theta = 0.5), 50000) ggplot(sims_tbl, aes(x = theta)) + geom_histogram() Ahora probemos con una \\(\\mathsf{Beta}(3, 2):\\) beta_no_norm <- function(x) { z <- ifelse(x > 0 && x < 1, (x^2)*(1-x), 0) log(z) } iterador_metro <- crear_metropolis(beta_no_norm, sigma_salto = 0.04) sims_metro_tbl <- iterador_metro(c(theta = 0.5), 50000) sims_indep_tbl <- tibble(iter_num = 1:30000, theta = rbeta(30000, 3, 2)) g_1 <- ggplot(sims_metro_tbl, aes(x = theta)) + geom_histogram() + labs(subtitle = "Metrópolis") g_2 <- ggplot(sims_indep_tbl, aes(x = theta)) + geom_histogram() + labs(subtitle = "rbeta") g_1 + g_2 Y vemos que esto funciona. Nótese sin embargo un aspecto de estas simulaciones que no habíamos encontrado en el curso. Aunque la distribución final de las simulaciones es muy cercana a la de la distribución que queremos simular, lo cual era nuestro propósito, las simulaciones no son extracciones independientes de esa distribución. La construcción del algoritmo muestra eso, pero podemos también graficar las simulaciones: g_metropolis <- sims_metro_tbl %>% filter(iter_num < 500) %>% ggplot(aes(x = iter_num, y = theta)) + geom_line() + labs(subtitle = "Metrópolis") g_indep <- sims_indep_tbl %>% filter(iter_num < 500) %>% ggplot(aes(x = iter_num, y = theta)) + geom_line() + labs(subtitle = "Independientes") g_metropolis + g_indep Donde vemos claramente que las simulaciones de metropolis están autocorrelacionadas: la siguiente simulación depende de la anterior. Esto define una cadena de Markov. En cualquiera de los dos casos, como vimos en los histogramas de arriba, las simulaciones “visitan” cada parte [0,1] de manera proporcional a la densidad, de manera que podemos usar ambos tipos de simulaciones para aproximar la integral o cantidad que nos interesa. Por ejemplo, la media posterior es: media_1 <- sims_metro_tbl %>% summarise(media_post = mean(theta)) %>% pull(media_post) media_2 <- sims_indep_tbl %>% summarise(media_post = mean(theta)) %>% pull(media_post) media_exacta <- 3/(3 + 2) tibble(metodo = c("sim Metrópolis", "sim Independiente", "exacto"), media_post = c(media_1, media_2, media_exacta)) ## # A tibble: 3 × 2 ## metodo media_post ## <chr> <dbl> ## 1 sim Metrópolis 0.613 ## 2 sim Independiente 0.600 ## 3 exacto 0.6 Supongamos que queremos simular de una distribución \\(p(\\theta)\\), pero sólo conocemos \\(p(\\theta)\\) módulo una constante. Bajo ciertas condiciones de regularidad: El algoritmo Metrópolis para la distribución \\(p(\\theta)\\) define una cadena de Markov cuya distribución a largo plazo es \\(p(\\theta)\\). Esto implica que si \\(\\theta^{(1)},\\theta^{(2)}, \\ldots, \\theta^{(M)}\\) es una simulación de esta cadena, y \\(M\\) es suficientemente grande La distribución de las \\(\\theta^{(i)}\\) es aproximadamente \\(p(\\theta)\\), Tenemos que \\[ \\frac1M \\sum_{m = 1}^M h(\\theta^{(m)}) \\to \\int h(\\theta)p(\\theta)\\, d\\theta\\] cuando \\(M\\to \\infty\\) Observaciones: Aunque hay distintas condiciones de regularidad que pueden funcionar, generalmente el supuesto es que la cadena de Markov construída es ergódica, y hay varias condiciones que garantizan esta propiedad. Una condición simple, por ejemplo, es que el soporte de la distribución \\(p(\\theta)\\) es un conjunto conexo del espacio de parámetros. Más crucialmente, este resultado no dice qué tan grande debe ser \\(M\\) para que la aproximación sea buena. Esto depende de cómo es \\(p(\\theta)\\), y de la distribución que se utiliza para obtener los saltos propuestos. Dependiendo de estos dos factores, la convergencia puede ser rápida (exponencial) o tan lenta que es infactible usarla. Más adelante veremos diagnósticos para descartar los peores casos de falta de convergencia. Ajustando el tamaño de salto En el algoritmo Metrópolis, generalmente es importante escoger la dispersión de la distribución que genera propuestas con cuidado. Si la dispersión de la propuesta es demasiado grande, tenderemos a rechazar mucho, y la convergencia será lenta. Si la dispersión de la propuesta es demasiado chica, tardaremos mucho tiempo en explorar las distintas partes de la distribución objetivo. Ejemplo Supongamos que queremos simular usando metróplis de una distribución \\(\\textsf{Gamma}(20, 100)\\). Abajo vemos la forma de esta distribución: sim_indep <- tibble(theta = rgamma(10000, 20, 100)) ggplot(sim_indep, aes(x = theta)) + geom_histogram() # logaritmo de densidad no normalizada log_f_dist <- function(x) 210 + dgamma(x, 20, 100, log = TRUE) # iterar iterador_metro_chico <- crear_metropolis(log_f_dist, sigma_salto = 0.001) sims_chico_tbl <- iterador_metro_chico(c(theta = 0.02), 50000) g_sim <- ggplot(sims_chico_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) dist_bplot <- ggplot(tibble(x = rgamma(10000, 20, 100)), aes(y = x, x = "a")) + geom_violin() + ylab("") + ylim(0, 0.5) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) Nótese que después de 5 mil iteraciones estamos muy lejos de tener una muestra que se aproxime a la distribución objetivo. Empezamos en un lugar bajo, y la cadena sólo ha ido lentamente hacia las zonas de alta densidad. Cualquier resumen con esta cadena estaría fuertemente sesgado al valor donde iniciamos la iteración. Decimos que la cadena todavía no mezcla en las primeras 5 mil iteraciones. Ahora vemos qué pasa si ponemos el tamaño de salto demasiado grande: set.seed(831) iterador_metro_grande <- crear_metropolis(log_f_dist, sigma_salto = 20) sims_grande_tbl <- iterador_metro_grande(c(theta = 0.02), 50000) g_sim <- ggplot(sims_grande_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) En este caso, la cadena se atora muchas veces, pues las propuestas tienen probabilidad muy baja, y tendemos a tener una tasa de rechazos muy alta. Esto quiere decir que la información que tenemos acerca de la posterior es relativamente poca, pues muchos datos son repeticiones del mismo valor. Cualquier resumen con esta cadena podría estar muy lejos del verdadero valor, pues su varianza es alta - otra corrida se “atoraría” en otros valores distintos. Nótese que cualquiera de estas cadenas, si la corremos suficientemente tiempo, nos daría resultados buenos. Sin embargo, el número de simulaciones puede ser infactible. Un valor intermedio nos dará mucho mejores resultados: set.seed(831) iterador_metro_apropiada <- crear_metropolis(log_f_dist, sigma_salto = 0.1) sims_tbl <-iterador_metro_apropiada(c(theta = 0.02), 50000) g_sim <- ggplot(sims_tbl %>% filter(iter_num < 3000), aes(x = iter_num, y = theta)) + geom_line() + ylim(c(0, 0.5)) g_sim + dist_bplot + plot_layout(widths = c(5, 1)) Donde vemos que esta cadena parece mezclar bien (está explorando la totalidad de la distribución objetivo), y también parece estar en un estado estable. Comparemos cómo saldría por ejemplo la media posterior aproximada según los tres métodos: estimaciones_media <- map_dfr( list(sims_chico_tbl, sims_grande_tbl, sims_tbl), ~ filter(.x, iter_num < 3000) %>% summarise(media = mean(theta))) %>% mutate(tipo = c("salto chico", "salto grande", "salto apropiado")) estimaciones_media %>% bind_rows(tibble(tipo = "exacta", media = 20/100)) %>% select(tipo, media) ## # A tibble: 4 × 2 ## tipo media ## <chr> <dbl> ## 1 salto chico 0.132 ## 2 salto grande 0.190 ## 3 salto apropiado 0.203 ## 4 exacta 0.2 Veamos otra corrida: set.seed(6222131) sims_chica_tbl <- iterador_metro_chico(c(theta = 0.02), 5000) sims_grande_tbl <- iterador_metro_grande(c(theta = 0.02), 5000) estimaciones_media <- map_dfr( list(sims_chica_tbl, sims_grande_tbl, sims_tbl), ~ filter(.x, iter_num < 3000) %>% summarise(media = mean(theta))) %>% mutate(tipo = c("salto chico", "salto grande", "salto apropiado")) estimaciones_media %>% bind_rows(tibble(tipo = "exacta", media = 20/100)) %>% select(tipo, media) ## # A tibble: 4 × 2 ## tipo media ## <chr> <dbl> ## 1 salto chico 0.124 ## 2 salto grande 0.229 ## 3 salto apropiado 0.203 ## 4 exacta 0.2 Repite este proceso varias veces. Verifica que: Si el tamaño de paso es muy chico, las estimaciones de la media tienen sesgo alto. Si el tamaño de paso es muy grande, las estimaciones tienen varianza alta. Si el tamaño de paso es adecuado, obtenemos buena precisión en la estimación de la media posterior. Explica estos tres casos en términos de la convergencia de las realizaciones de la cadena de Markov. Explica cómo afecta a cada caso el valor inicial de las simulaciones de Metrópolis. Repite para otra estadística, como la desviación estándar o el rangon intercuartil. Metrópolis con varios parámetros Ahora aplicaremos el algoritmo Metrópolis cuando tenemos varios parámetros. La idea es la misma, pero nuestra distribución de salto debe ser multivariada. Una selección usual es usando saltos normales independientes para cada parámetro, es decir, la normal multivariada con matriz de varianza y covarianza diagonal. Ejemplo: el modelo normal Veremos cómo simular con Metrópolis para el problema de los cantantes. Sabemos como calcular la posterior: crear_log_posterior_norm <- function(x = datos, m_0, n_0, a, b){ # calcula log_posterior log_posterior <- function(mu, sigma){ log_verosim <- sum(dnorm(x, mu, sigma, log = TRUE)) tau <- 1 / sigma^2 log_inicial <- dgamma(tau, a, b, log = TRUE) + dnorm(mu, mu_0, sigma/sqrt(n_0), log = TRUE) log_p <- log_verosim + log_inicial log_p } log_posterior } # parametros de inicial y datos a <- 3 b <- 140 mu_0 <- 175 n_0 <- 5 set.seed(3413) cantantes <- lattice::singer %>% mutate(estatura_cm = round(2.54 * height)) %>% filter(str_detect(voice.part, "Tenor")) %>% sample_n(20) Vemos cómo se ven las primeras iteraciones de nuestra cadena de Markov: log_p <- crear_log_posterior_norm(cantantes$estatura_cm, mu_0, n_0, a, b) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(823) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 172, sigma = 3), 50000) ggplot(sim_tbl %>% filter(iter_num < 100), aes(x = mu, y = sigma)) + geom_path() + geom_point() Y ahora vemos todas las simulaciones: g_normal <- ggplot(sim_tbl, aes(x = mu, y = sigma)) + geom_point(alpha = 0.05)+ coord_equal() + ylim(c(0, 14)) g_normal Y las medias posteriores son: sim_tbl %>% summarise(across(is_double, mean)) ## # A tibble: 1 × 2 ## mu sigma ## <dbl> <dbl> ## 1 176. 6.80 Ejemplo: observaciones normales, no conjugado Arriba repetimos el análisis conjugado usando Metrópolis. Aunque ya no es necesario usar el modelo conjugado, y podemos poner iniciales que sean más intuitivas y acorde con nuestro conocimiento existente. Por ejemplo, podemos poner \\(p(\\mu, \\sigma) = p(\\mu)p(\\sigma)\\), donde la densidad de \\(\\mu \\sim \\mathsf{N}(175, 2)\\) y \\(\\sigma \\sim \\mathsf{U}[2, 20].\\) Igual que antes, la verosimilitud \\(p(x|\\mu, \\sigma)\\) es normal con media \\(\\mu\\) y desviación estándar \\(\\sigma.\\) Escribimos la posterior: crear_log_posterior <- function(x, m_0, sigma_0, inf, sup){ # calcula log_posterior log_posterior <- function(mu, sigma){ log_verosim <- sum(dnorm(x, mu, sigma, log = TRUE)) log_inicial <- dunif(sigma, inf, sup, log = TRUE) + dnorm(mu, mu_0, sigma_0, log = TRUE) log_p <- log_verosim + log_inicial log_p } log_posterior } log_p <- crear_log_posterior(cantantes$estatura_cm, 175, 3, 2, 20) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(8231) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 172, sigma = 5), 50000) g_normal_2 <- ggplot(sim_tbl, aes(x = mu, y = sigma)) + geom_point(alpha = 0.05) + coord_equal() + ylim(c(0, 14)) g_normal + g_normal_2 Los resultados son similares, pero en nuestras estimaciones bajo el segundo modelo, la \\(\\sigma\\) está concentrada en valores un poco más bajos que el modelo normal-gamma inversa. Las medias posteriores son: sim_tbl %>% summarise(across(is.numeric, mean)) ## # A tibble: 1 × 3 ## iter_num mu sigma ## <dbl> <dbl> <dbl> ## 1 25000. 176. 6.54 Nótese que la inicial para el modelo normal-gamma inversa pone muy poca probabilidad para valores bajos de \\(\\sigma\\), mientras que el segundo modelo hay un 10% de probabilidad de que la \\(\\sigma\\) sea menor que 4. tau <- rgamma(5000, 3, 150) sigma <- 1/sqrt(tau) quantile(sigma, c(0.01,0.1, 0.9, 0.99)) ## 1% 10% 90% 99% ## 4.219278 5.276228 11.579358 19.038529 quantile(runif(5000, 2, 25), c(0.01,0.1, 0.9, 0.99)) ## 1% 10% 90% 99% ## 2.261297 4.254128 22.691760 24.719630 Ejemplo: exámenes Recordamos un ejemplo que vimos en la sección de máxima verosimilitud. Supongamos que en una población de estudiantes tenemos dos tipos: unos llenaron un examen de opción múltiple al azar (1 de 5), y otros contestaron las preguntas intentando sacar una buena calificación. Suponemos que una vez que conocemos el tipo de estudiante, todas las preguntas tienen la misma probabilidad de ser contestadas correctamente, de manera independiente. El modelo teórico está representado por la siguiente simulación: sim_formas <- function(p_azar, p_corr){ tipo <- rbinom(1, 1, 1 - p_azar) if(tipo==0){ # al azar x <- rbinom(1, 10, 1/5) } else { # no al azar x <- rbinom(1, 10, p_corr) } x } Y una muestra se ve como sigue: set.seed(12) muestra <- map_dbl(1:200, ~ sim_formas(0.35, 0.5)) qplot(muestra) Supongamos que no conocemos la probabildad de contestar correctamente ni la proporción de estudiantes que contestó al azar. ¿Como estimamos estas dos cantidades? La verosimilitud la escribimos en el ejercicio anterior en la sección de máxima verosimilitud, está dada, para las repuestas de un estudiante, por: \\[p(X = k|\\theta_{azar}, \\theta_{corr}) \\propto \\theta_{azar}(1/5)^k(4/5)^{10-k} + (1-\\theta_{azar})\\theta_{corr}^k(1-\\theta_{corr})^{10-k}\\] Suponiendo que todas las preguntas tienen la misma dificultad, y que los estudiantes que estudiaron son homogéneos (podemos discutir qué haríamos para introducir heterogeneidad que típicamente observaríamos). Creemos que la mayoría de los estudiantes no contesta al azar, así que pondremos como inicial \\[\\theta_{azar} \\sim \\mathsf{Beta}(1, 5)\\] qbeta(c(0.1, 0.9), 1, 5) %>% round(2) ## [1] 0.02 0.37 Ahora tenemos que pensar en la probabilidad \\(\\theta_{corr}\\) para los estudiantes que sí estudiaron. Imaginemos que lo probamos con un estudiante que sabemos que sí estudió, y obtuvo un porcentaje de correctos de 7/10, Podríamos poner entonces (vimos 10 intentos, con 3 fracasos y 7 éxitos): \\[\\theta_{corr} \\sim \\mathsf{Beta}(7, 3)\\] Finalmente, necesitamos la conjunta inicial. Pondremos \\[p(\\theta_{azar},\\theta_{corr}) = p(\\theta_{azar})p(\\theta_{corr})\\] con lo que expresamos que inicialmente no creemos que estos dos parámetros estén relacionados. Si pensáramos, por ejemplo, que cuando hacemos exámenes difíciles menos estudiantes estudian, entonces deberíamos intentar otra conjunta. Escribimos el producto de la verosimilitud con la inicial: crear_log_posterior <- function(x){ log_posterior <- function(theta_azar, theta_corr){ log_verosim <- sum(log(theta_azar * dbinom(x, 10, 1/5) + (1 - theta_azar) * dbinom(x, 10, theta_corr))) log_inicial <- dbeta(theta_azar, 1, 5, log = TRUE) + dbeta(theta_corr, 7, 3, log = TRUE) log_post <- log_verosim + log_inicial log_post } log_posterior } Creamos la función de verosimilitud con los datos log_p <- crear_log_posterior(muestra) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(8231) metro_examenes <- crear_metropolis(log_post, sigma_salto = 0.02) sim_tbl <- metro_examenes(c(theta_azar = 0.5, theta_corr = 0.5), 20000) g_1 <- ggplot(sim_tbl, aes(x = theta_azar, y = theta_corr)) + geom_point(alpha = 0.05) + coord_equal() g_1 Nótese que hay cierta correlación entre las dos proporciones, y esto produce intervalos posteriores relativamente amplios. Esto es de esperarse, pues los datos son consistentes con una proporción relativamente chica de estudiantes que contestan al azar, y tasas de correctos más altas entre los que sí estudian, y una proporción más grande de respuestas al azar con tasas de correctos más altas. f <- c(0.05, 0.5, 0.95) sim_tbl %>% pivot_longer(-iter_num, names_to = "parametro", values_to = "valor") %>% group_by(parametro) %>% summarise(cuantil = quantile(valor, f), f = f) %>% mutate(cuantil = round(cuantil, 2)) %>% pivot_wider(names_from = f, values_from = cuantil) ## # A tibble: 2 × 4 ## # Groups: parametro [2] ## parametro `0.05` `0.5` `0.95` ## <chr> <dbl> <dbl> <dbl> ## 1 theta_azar 0.3 0.38 0.45 ## 2 theta_corr 0.5 0.52 0.56 Muestreador de Gibbs El algoritmo de Metrópolis es muy general y se puede aplicar a una gran variedad de problemas. Sin embargo, afinar los parámetros de la distribución propuesta para que el algoritmo funcione correctamente puede ser complicado. El muestredor de Gibbs no necesita de una distribución propuesta y por lo tanto no requiere afinar estos parámetros. Para implementar un muestreador de Gibbs se necesita ser capaz de generar muestras de la distribución posterior condicional a cada uno de los parámetros individuales. Esto es, el muestreador de Gibbs permite generar muestras de la posterior: \\[p(\\theta_1,...,\\theta_p|x)\\] siempre y cuando podamos generar valores de todas las distribuciones condicionales: \\[\\theta_k \\sim p(\\theta_k|\\theta_1,...,\\theta_{k-1},\\theta_{k+1},...,\\theta_p,x).\\] El proceso del muestreador de Gibbs es una caminata aleatoria a lo largo del espacio de parámetros. La caminata inicia en un punto arbitrario y en cada tiempo el siguiente paso depende únicamente de la posición actual. Por tanto el muestredor de Gibbs es un proceso cadena de Markov vía Monte Carlo. La diferencia entre Gibbs y Metrópolis radica en como se deciden los pasos. Muestreador Gibbs En cada punto de la caminata se selecciona uno de los componentes del vector de parámetros (típicamente se cicla en orden): Supongamos que se selecciona el parámetro \\(k\\)-ésimo después de haber modificado los \\(k-1\\) anteriores, entonces obtenemos un nuevo valor para este parámetro generando una simulación de la distribución condicional \\[\\theta_k^{(i+1)} \\sim p(\\theta_k|\\theta_1^{(i+1)},\\ldots,\\theta_{k-1}^{(i+1)},\\theta_{k+1}^{(i)},\\ldots,\\theta_p^{(i)},x)\\] El nuevo valor \\(\\theta_k^{(i+1)}\\) junto con los valores \\(\\theta_1^{(i+1)},\\ldots,\\theta_{k-1}^{(i+1)},\\theta_{k+1}^{(i)},\\ldots,\\theta_p^{(i)}\\) constituyen la nueva posición en la caminata aleatoria. Seleccionamos una nueva componente \\(\\theta_{k+1}^{(i+1)}\\) y repetimos el proceso. El muestreador de Gibbs es útil cuando no podemos determinar de manera analítica la distribución conjunta y no se puede simular directamente de ella, pero sí podemos determinar todas las distribuciones condicionales y simular de ellas. Ejemplo: dos proporciones Supongamos que queremos evaluar el balanceo de dos dados de 20 lados que produce una fábrica. En particular, evaluar la probabilidad de tirar un 20, y quizá escoger el dado que nos de mayor probabilidad de tirar un 20. Tiramos cada dado \\(n\\) veces, y denotamos por \\(X_1\\) y \\(X_2\\) el número de 20’s que tiramos en cada ocasión. El modelo de datos está dado por \\[p(x_1, x_2|\\theta_1, \\theta_2)\\propto \\theta_1^{x_1}(1-\\theta_1)^{n - x_1}\\theta_2^{x_2}(1-\\theta_2)^{n - x_2},\\] que es el producto de dos densidades binomiales, pues suponemos que las tiradas son independientes cuando conocemos los parámetros \\(\\theta_1\\) y \\(\\theta_2\\). Ahora ponemos una inicial \\[p(\\theta_i)\\sim \\mathsf{Beta}(100, 1900)\\] y aquí están las razones de nuestra elección: media <- 1/20 k <- 2000 a <- media * k b <- (1 - media) * k c(a,b) ## [1] 100 1900 qbeta(c(0.05, 0.95), a, b) %>% round(3) ## [1] 0.042 0.058 y suponemos que \\[p(\\theta_1,\\theta_2) = p (\\theta_1)p(\\theta_2)\\] es decir, apriori saber el desempeño de un dado no nos da información adicional del otro (esto podría no ser cierto, por ejemplo, si el defecto es provocado por la impresión del número 20). Por lo tanto, la posterior es \\[p(\\theta_1,\\theta_2|x_1, x_2)\\propto \\theta_1^{x_1+100-1}(1-\\theta_1)^{n - x_1 + 1900-1}\\theta_2^{x_2+100 -1}(1-\\theta_2)^{n - x_2 + 1900-1}\\] Ahora consideramoso qué pasa cuando conocemos \\(\\theta_2\\) y los datos. Pensamos en todo lo que no sea \\(\\theta_1\\) como constante de modo que nos queda: \\[p(\\theta_1 | \\theta_2, x) \\propto \\theta_1^{x_1+100 -1}(1-\\theta_1)^{n - x_1 + 1900 -1}\\] que es \\(\\mathsf{Beta}(x_1 + 100, n - x_1 + 1900)\\), y por la misma razón, \\[p(\\theta_2 | \\theta_1, x) \\propto \\theta_2^{x_2+100-1}(1-\\theta_2)^{n - x_2 + 1900-1}\\] que también es es \\(\\mathsf{Beta}(x_1 + 100, n - x_1 + 1900)\\) De hecho, estas condicionales son fáciles de deducir de otra manera: en realidad estamos haciendo dos experimentos separados (pues suponemos que las iniciales son independientes y las pruebas también), así que podriamos usar el análisis Beta-Binomial para cada uno de ellos. En realidad no es necesario usar MCMC para este ejemplo. Usaremos esta función para hacer nuestras iteraciones de Gibbs: iterar_gibbs <- function(pasos, n, x_1, x_2){ iteraciones <- matrix(0, nrow = pasos + 1, ncol = 2) # vector guardará las simulaciones iteraciones[1, 1] <- 0.5 # valor inicial media colnames(iteraciones) <- c("theta_1", "theta_2") # Generamos la caminata aleatoria for (j in seq(2, pasos, 2)) { # theta_1 a <- x_2 + 100 - 1 b <- n - x_2 + 1900 - 1 iteraciones[j, "theta_2"] <- rbeta(1, a, b) # Actualizar theta_1 iteraciones[j, "theta_1"] <- iteraciones[j-1, "theta_1"] # theta_2 a <- x_1 + 100 - 1 b <- n - x_1 + 1900 - 1 iteraciones[j + 1, "theta_1"] <- rbeta(1, a, b) # Actualizar theta_1 iteraciones[j + 1, "theta_2"] <- iteraciones[j, "theta_2"] } iteraciones } Y supongamos que estamos comparando los dados de dos compañías: Chessex y GameScience. Tiramos cada dado 10 mil veces, y obtenemos: # Datos de https://www.awesomedice.com/blogs/news/d20-dice-randomness-test-chessex-vs-gamescience n <- 10000 x_1 <- 408 # Chessex, alrededor de 0.85 dólares por dado x_2 <- 474 # GameScience, alrededor 1.60 dólares por dado E iteramos: iteraciones <- iterar_gibbs(20000, n, x_1, x_2) %>% as_tibble() %>% mutate(iter_num = row_number()) head(iteraciones) ## # A tibble: 6 × 3 ## theta_1 theta_2 iter_num ## <dbl> <dbl> <int> ## 1 0.5 0 1 ## 2 0.5 0.0479 2 ## 3 0.0442 0.0479 3 ## 4 0.0442 0.0452 4 ## 5 0.0411 0.0452 5 ## 6 0.0411 0.0505 6 ggplot(filter(iteraciones, iter_num > 1000, iter_num< 1050), aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() g_1 <- ggplot(iteraciones, aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() g_2 <- ggplot(iteraciones %>% filter(iter_num > 10), aes(x = theta_1, y = theta_2)) + geom_path(alpha = 0.3) + geom_point() + geom_abline(colour = "red") + geom_point(data= tibble(theta_1=1/20, theta_2=1/20), colour = "red", size = 5) g_1 + g_2 Notamos el dado de Cheesex no es consistente con 1/20 de tiros de 20s, pero el dado de GameScience sí lo es. De este gráfica vemos que Cheesex está sesgado hacia abajo, así que deberíamos escoger el dado de GameScience Podemos ver directamente cómo se distribuye la diferencia \\(\\theta_1 - \\theta_2\\). Cualquier estadística es fácil de evaluar, pues simplemente la calculamos para cada simulación y después resumimos: iteraciones <- iteraciones %>% mutate(dif = theta_1 - theta_2) ggplot(iteraciones %>% filter(iter_num > 10), aes(x = dif)) + geom_histogram(bins = 100) + geom_vline(xintercept = 0, colour = "red") Y vemos que es altamente probable que el dado de Cheesex produce más 20’s que el dado de GameScience. iteraciones %>% mutate(theta_1_mayor = dif > 0) %>% summarise(prob_theta_1_mayor = mean(theta_1_mayor)) ## # A tibble: 1 × 1 ## prob_theta_1_mayor ## <dbl> ## 1 0.0215 Finalmente, verificamos nuestro modelo y cuánto aprendimos. Podemos hacerlo simulando de la inicial y comparando con la posterior: inicial_tbl <- tibble(theta_1 = rbeta(20000, 100, 1900), theta_2 = rbeta(20000, 100, 1900), dist = "inicial") posterior_tbl <- iteraciones %>% filter(iter_num > 10) %>% mutate(dist = "posterior") sims_tbl <- bind_rows(inicial_tbl, posterior_tbl) ggplot(sims_tbl, aes(x = theta_1, y = theta_2, colour = dist)) + geom_point(alpha = 0.2) donde vemos que el resultado que obtuvimos es razonablemente consistente con nuestra información inicial, y las 10 mil tiradas de dado fueron altamente informativas. ¿Qué crees que pasaría si sólo hubieramos tirado 40 veces cada dado? ¿Qué tanto habríamos aprendido? Puedes usar datos simulados y repetir este ejercicio. Puedes examinar los resultados para cada cara con los datos originales. Un modelo apropiado es el Dirichlet-Multinomial. Ejemplo: Modelo normal no conjugado Retomemos el caso de observaciones normales, supongamos que tenemos una muestra \\(X_1,...,X_n\\) de observaciones independientes e identicamente distribuidas, con \\(X_i \\sim \\mathsf{N}(\\mu, \\sigma^2)\\). Usaremos iniciales distintas al modelo anterior: \\[p(\\mu, \\sigma^2) = p(\\sigma^2)p(\\mu)\\] con \\(\\mu\\) \\(\\mathsf{N}(\\mu_0, \\sigma_0)\\) y \\(\\tau = 1/\\sigma^2\\) con distribución \\(\\mathsf{Gamma}(a,b)\\). Esto no nos da el modelo conjugado que vimos antes (nota la diferencia de la especificación de la inicial conjunta). Comenzamos por escribir \\[p(\\mu, \\sigma^2|x) \\propto \\frac{1}{{\\sigma^{n/2}}} \\exp(-\\sum\\frac{(x_i-\\mu)²}{2\\sigma^2}) \\exp(- \\frac{(\\mu - \\mu_0)^2}{2\\sigma_0^2}) \\frac{1}{(\\sigma^2)^{a + 1}}\\exp (-\\beta/\\sigma^2 )\\] Comenzamos analizando \\(p(\\mu|\\sigma^2, x)\\). Por la ecuación de arriba, e ignorando los términos que no dependen de \\(\\mu\\): \\[p(\\mu|\\sigma^2, x) \\propto \\exp [ - \\sum_i (\\frac{(\\mu - x_i)^2}{2\\sigma^2} - \\frac{(\\mu - \\mu_0)^2}{2n\\sigma_0^2})]\\] que es una distribución normal (completa cuadrados): \\[\\mu|\\sigma^2,x \\sim \\mathsf{N}\\bigg(\\frac{\\sigma^2}{\\sigma^2 + n\\sigma_0^2}\\mu_0 + \\frac{n\\sigma_0^2}{\\sigma^2 + n \\sigma_0^2}\\bar{x}, \\frac{\\sigma \\sigma_0}{\\sqrt{\\sigma^2 + n\\sigma_0^2}}\\bigg)\\] Ahora consideramos \\(p(\\sigma^2|mu,x)\\). Ignoramos en \\(p(\\mu,\\sigma^2|x)\\) los términos que *no** dependen de \\(\\sigma^2\\): \\[p(\\sigma^2|\\mu, x) \\propto \\frac{1}{\\sigma^{n/2}} \\exp(-\\sum\\frac{(x_i-\\mu)²}{2\\sigma^2}) \\frac{1}{(\\sigma^2)^{a + 1}}\\exp (-\\beta/\\sigma^2)\\] que simplificando da \\[ = \\frac{1}{\\sigma^{n/2 + a + 1}}\\exp( -\\frac{\\beta +\\frac{1}{2}\\sum(x_i - \\mu)^2}{\\sigma^2} )\\] de modo que \\[\\sigma^2|\\mu, x \\sim \\mathsf{GI}(a +n/2, b + \\frac{1}{2}\\sum(x_i -\\mu)^2)\\] Ejemplo Usaremos este muestreador para el problema de la estaturas de los tenores. Comenzamos definiendo las distribuciones iniciales: \\(\\mu \\sim \\mathsf{N}(175, 3)\\) \\(\\tau = 1/\\sigma^2 \\sim \\mathsf{GI}(3, 150)\\), esto es \\(a = 3\\) y \\(b = 150\\). Escribimos el muestreador de Gibbs. n <- 20 x <- cantantes$estatura_cm m <- 175; sigma_0 <- 3; alpha <- 3; beta <- 150 # parámetros de iniciales pasos <- 20000 iteraciones <- matrix(0, nrow = pasos + 1, ncol = 2) # vector guardará las simulaciones iteraciones[1, 1] <- 0 # valor inicial media colnames(iteraciones) <- c("mu", "sigma") # Generamos la caminata aleatoria for (j in seq(2, pasos, 2)) { # sigma^2 mu <- iteraciones[j - 1, "mu"] a <- n / 2 + alpha b <- sum((x - mu) ^ 2) / 2 + beta iteraciones[j, "sigma"] <- sqrt(1/rgamma(1, a, b)) # Actualizar sigma iteraciones[j, "mu"] <- iteraciones[j-1, "mu"] # mu sigma <- iteraciones[j, "sigma"] media <- (n * sigma_0^2 * mean(x) + sigma^2 * m) / (n * sigma_0^2 + sigma^2) varianza <- sigma^2 * sigma_0^2 / (n * sigma_0^2 + sigma^2) iteraciones[j+1, "mu"] <- rnorm(1, media, sd = sqrt(varianza)) # actualizar mu iteraciones[j+1, "sigma"] <- iteraciones[j, "sigma"] } caminata <- data.frame(pasos = 1:pasos, mu = iteraciones[1:pasos, "mu"], sigma = iteraciones[1:pasos, "sigma"]) caminata_g <- caminata %>% gather(parametro, val, mu, sigma) %>% arrange(pasos) Veamos primero algunos pasos: ggplot(filter(caminata, pasos > 1000, pasos< 1010), aes(x = mu, y = sigma)) + geom_path(alpha = 0.3) + geom_point() Donde vemos cómo en cada iteración se actualiza un solo parámetro. Una alternativa es conservar únicamente ciclos completos de la caminata u esto es lo que hacen varios programas que implementan Gibbs, sin embargo ambas cadenas (cadenas completas y conservando únicamente ciclos completos) convergen a la misma distribución posterior. Si tomamos iteraciones completas: ggplot(filter(caminata, pasos > 1000, pasos< 1020, pasos %% 2 == 0), aes(x = mu, y = sigma)) + geom_path(alpha = 0.3) + geom_point() Y ahora vemos cómo se ven las simulaciones: ggplot(filter(caminata, pasos > 1000, pasos< 10000, pasos %% 2 == 0), aes(x = mu, y = sigma)) + geom_point(alpha = 0.1) Y el diagnóstico de cada cadena: ggplot(filter(caminata_g, pasos > 15000), aes(x = pasos, y = val)) + geom_path(alpha = 0.3) + facet_wrap(~parametro, ncol = 1, scales = "free") + scale_y_continuous("") Estas cadenas parecen estar mezclando bien. Podemos resumirlas: ggplot(filter(caminata_g, pasos > 5000), aes(x = val)) + geom_histogram(fill = "gray") + facet_wrap(~parametro, ncol = 1, scales = "free") caminata_g %>% filter(pasos > 1000) %>% # eliminamos la etapa de calentamiento group_by(parametro) %>% summarise( mean(val), sd(val), median(val) ) %>% mutate(across(is_double, round, 2)) ## # A tibble: 2 × 4 ## parametro `mean(val)` `sd(val)` `median(val)` ## <chr> <dbl> <dbl> <dbl> ## 1 mu 176. 1.32 176. ## 2 sigma 6.54 0.95 6.44 Y obtenemos un resultado similar a los anteriores. Conclusiones y observaciones Metrópolis y Gibbs Una generalización del algoritmo de Metrópolis es Metrópolis-Hastings. El algoritmo de Metrópolis es como sigue: Generamos un punto inicial tal que \\(p(\\theta)>0\\). Para \\(i = 1,2,...\\) Se propone un nuevo valor \\(\\theta^*\\) con una distribución propuesta \\(g(\\theta^*|\\theta^{(i)})\\) es común que \\(g(\\theta^*|\\theta^{(i)})\\) sea una normal centrada en \\(\\theta^{(i)}\\). Calculamos la probabilidad de aceptación \\[\\alpha=\\min\\bigg\\{\\frac{p(\\theta^*)}{p(\\theta^{(i)})},1\\bigg\\},\\] y aceptamos \\(\\theta^*\\) con probabilidad \\(p_{mover}\\). Es así que el algorito requiere que podamos calcular el cociente en \\(p_{mover}\\) para todo \\(\\theta^{(i)}\\) y \\(\\theta^*\\), así como simular de la distribución propuesta \\(g(\\theta^*|\\theta^{(i)})\\), adicionalmente debemos poder generar valores uniformes para decidir si aceptar/rechazar. En el caso de Metrópolis un requerimiento adicional es que la distribución propuesta \\(g(\\theta_{a}|\\theta_b)\\) debe ser simétrica, es decir \\(g(\\theta_{a}|\\theta_b) = g(\\theta_{b}|\\theta_a)\\) para todo \\(\\theta_{a}\\), \\(\\theta_{b}\\). Metrópolis-Hastings generaliza Metrópolis, eliminando la restricción de simetría en la distribución propuesta \\(g(\\theta_{a}|\\theta_b)\\), sin embargo para corregir por esta asimetría debemos calcular \\(\\alpha\\) como sigue: \\[\\alpha=\\min\\bigg\\{ \\frac{p(\\theta^*)}{g(\\theta^*|\\theta^{(i)})} \\cdot \\frac{g(\\theta^{(i)}|\\theta^*)}{p(\\theta^{(i)})},1\\bigg\\}\\] La generalización de Metrópolis-Hastings puede resultar en algoritmos más veloces. Se puede ver Gibbs como una generalización de Metrópolis-Hastings, cuando estamos actualizando un componente de los parámetros, la distribución propuesta es la distribución posterior para ese parámetro, por tanto siempre es aceptado. Comparado con Metrópolis, Gibbs tiene la ventaja de que no se necesita afinar los parámetros de una distribución propuesta (o seleccionar siquiera una distribución propuesta). Además que no hay pérdida de simulaciones debido a rechazo. Por su parte, la desventaja debemos conocer las distribuciones condicionales y poder simular de ellas. En el caso de modelos complicados se utilizan combinaciones de Gibbs y Metrópolis. Cuando se consideran estos dos algoritmos Gibbs es un método más simple y es la primera opción para modelos condicionalmente conjugados. Sí solo podemos simular de un subconjunto de las distribuciones condicionales posteriores, entonces podemos usar Gibbs siempre que se pueda y Metrópolis unidimensional para el resto, o de manera más general separamos en bloques, un bloque se actualiza con Gibbs y otro con Metrópolis. El algoritmo de Gibbs puede atorarse cuando hay correlación alta entre los parámetros, reparametrizar puede ayudar, o se pueden usar otros algoritmos. JAGS (Just Another Gibbs Sampler), WinBUGS y OpenBUGS son programas que implementan métodos MCMC para generar simulaciones de distribuciones posteriores. Los paquetes rjags y R2jags permiten ajustar modelos en JAGS desde R. Es muy fácil utilizar estos programas pues uno simplemente debe especificar las distribuciones iniciales, la verosimilitud y los datos observados. Para aprender a usar JAGS se puede revisar la sección correspondiente en las notas de 2018, ahora nos concentraremos en el uso de Stan. HMC y Stan It appears to be quite a general principle that, whenever there is a randomized way of doing something, then there is a nonrandomized way that delivers better performance but requires more thought. -E.T. Jaynes Stan es un programa para generar muestras de una distribución posterior de los parámetros de un modelo, el nombre del programa hace referencia a Stanislaw Ulam (1904-1984) que fue pionero en los métodos de Monte Carlo. A diferencia de JAGS y BUGS, los pasos de la cadena de Markov se generan con un método llamado Monte Carlo Hamiltoniano (HMC). HMC es computacionalmente más costoso que Metrópolis o Gibbs, sin embargo, sus propuestas suelen ser más eficientes, y por consiguiente no necesita muestras tan grandes. En particular cuando se ajustan modelos grandes y complejos (por ejemplo, con variables con correlación alta) HMC supera a otros. Diagnósticos generales para MCMC Cuando generamos una muestra de la distribución posterior usando MCMC, sin importar el método (Metrópolis, Gibbs, HMC), buscamos que: Los valores simulados sean representativos de la distribución posterior. Esto implica que no deben estar influenciados por el valor inicial (arbitrario) y deben explorar todo el rango de la posterior, con suficientes retornos para evaluar cuánta masa hay en cada región. Debemos tener suficientes simulaciones de tal manera que las estimaciones sean precisas y estables. Queremos tener un método eficiente para generar las simulaciones. En la práctica intentamos cumplir lo más posible estos objetivos, pues aunque en principio los métodos MCMC garantizan que una cadena infinitamente larga logrará una representación perfecta, siempre debemos tener un criterio para cortar la cadena y evaluar la calidad de las simulaciones. Representatividad Burn-in e iteraciones iniciales- En primer lugar, en muchas ocasiones las condiciones iniciales de las cadenas están en partes del espacio de parámetros que son “atípicos” en términos de la posterior. Así que es común quitar algunas observaciones iniciales (iteraciones de burn-in) para minimizar su efecto en resúmenes posteriores. Por ejemplo, para el ejemplo de los cantantes, podemos ver que las iteraciones iniciales tienen como función principal llegar a las regiones de probabilidad posterior alta: log_p <- crear_log_posterior_norm(cantantes$estatura_cm, mu_0, n_0, a, b) log_post <- function(pars) { log_p(pars[1], pars[2]) } set.seed(823) metro_normal <- crear_metropolis(log_post, sigma_salto = 0.5) sim_tbl <- metro_normal(c(mu = 162, sigma = 1), 5000) ggplot(sim_tbl %>% filter(iter_num < 500), aes(x = mu, y = sigma)) + geom_path(alpha = 0.5) + geom_point(aes(colour = iter_num)) De modo que puede ser buena idea eliminar las primeras iteraciones. En teoría, no es necesario hacer esto si hacemos suficientes iteraciones, pues la cadena va a terminar en su estado estable explorando la posterior. En la práctica, y con pocas iteraciones, puede ayudar un poco a mejorar la precisión numérica de las cantidades que queramos calcular. sim_g <- sim_tbl %>% pivot_longer(-iter_num, names_to = "parametro", values_to = "valor") todas <- ggplot(sim_g, aes(x = iter_num, y = valor)) + geom_line(alpha = 0.5) + facet_wrap(~ parametro, ncol = 1, scales = "free_y") + labs(subtitle = "Todas las simulaciones") sin_burnin <- sim_g %>% filter(iter_num > 200) %>% ggplot(aes(x = iter_num, y = valor)) + geom_line(alpha = 0.5) + facet_wrap(~ parametro, ncol = 1, scales = "free_y") + labs(subtitle = "Quitando 200 de burn-in") todas + sin_burnin Convergencia a estado límite. Para determinar la convergencia es conveniente realizar más de una cadena: buscamos ver si realmente se ha olvidado el estado inicial, si las distribuciones de cada cadena son consistentes unas con otras, y revisar que algunas cadenas no hayan quedado atoradas en regiones inusuales del espacio de parámetros. Inicializamos las cadenas con valores al azar en rangos razonables (por ejemplo simulando de la inicial): set.seed(8513) valores_iniciales <- tibble(mu_0 = rnorm(4, 160, 20), sigma_0 = runif(4, 0, 20), cadena = 1:4) sims_tbl <- valores_iniciales %>% mutate(sims = map2(mu_0, sigma_0, ~ metro_normal(c(mu = .x, sigma = .y), 300) )) %>% unnest(sims) ggplot(sims_tbl, aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() Y este es un ejemplo donde claramente las cadenas no han alcanzado un estado estable: tienen muy distintas medias y varianzas. Por ejemplo: set.seed(83243) sims_tbl <- valores_iniciales %>% mutate(sims = map2(mu_0, sigma_0, ~ metro_normal(c(mu = .x, sigma = .y), 20000) )) %>% unnest(sims) ggplot(sims_tbl, aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() Y este resultado se ve mejor. La parte transición hacia las zonas de alta probabilidad pasa antes de unas 1000 iteraciones. Podemos hacer más simulaciones, o eliminar como burn-in las primiras iteraciones: media_g <- ggplot(sims_tbl %>% filter(iter_num > 2000), aes(x = iter_num, y = mu, colour = factor(cadena))) + geom_line() sigma_g <- ggplot(sims_tbl %>% filter(iter_num > 2000), aes(x = iter_num, y = sigma, colour = factor(cadena))) + geom_line() media_g / sigma_g Las gráficas anteriores nos ayudan a determinar si elegimos un periodo de calentamiento adecuado o si alguna cadena está alejada del resto. Una vez que las cadenas están en estado estable, podemos usar todas las simulaciones juntas para resumir: head(sims_tbl) ## # A tibble: 6 × 6 ## mu_0 sigma_0 cadena iter_num mu sigma ## <dbl> <dbl> <int> <int> <dbl> <dbl> ## 1 155. 3.16 1 1 155. 3.16 ## 2 155. 3.16 1 2 155. 3.16 ## 3 155. 3.16 1 3 155. 3.16 ## 4 155. 3.16 1 4 155. 3.16 ## 5 155. 3.16 1 5 155. 3.50 ## 6 155. 3.16 1 6 155. 3.81 # medias posteriores sims_tbl %>% summarise(mu = mean(mu), sigma = mean(sigma)) ## # A tibble: 1 × 2 ## mu sigma ## <dbl> <dbl> ## 1 176. 6.77 Además de realizar gráficas podemos usar la medida de convergencia \\(\\hat{R}\\). La medida \\(\\hat{R}\\) se conoce como el factor de reducción potencial de escala o diagnóstico de convergencia de Gelman-Rubin, esta es una estimación de la posible reducción en la longitud de un intervalo de confianza si las simulaciones continuaran infinitamente. \\(\\hat{R}\\) es aproximadamente la raíz cuadrada de la varianza de todas las cadenas juntas dividida entre la varianza dentro de cada cadena. Si \\(\\hat{R}\\) es mucho mayor a 1 esto indica que las cadenas no se han mezclado bien. Una regla usual es iterar hasta alcanzar un valor \\(\\hat{R} \\leq 1.1\\) para todos los parámetros. \\[\\hat{R} \\approx \\sqrt{\\frac{\\hat{V}}{W}}\\] donde \\(B\\) es la varianza entre las cadenas, \\(W\\) es la varianza dentro de las cadenas \\[B = \\frac{N}{M-1}\\sum_m (\\hat{\\theta}_m - \\hat{\\theta})^2\\] \\[W = \\frac{1}{M}\\sum_m \\hat{\\sigma}_m^2\\] Y \\(\\hat{V}\\) es una estimación del varianza de posterior de \\(\\theta\\): \\[\\hat{V} = \\frac{N-1}{N}W + \\frac{M+1}{MN}B\\] #### Ejemplo {-} En nuestro ejemplo anterior, tenemos sims_tbl %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(media = mean(valor), num = n(), sigma2 = var(valor)) %>% summarise(N = first(num), M = n_distinct(cadena), B = N * var(media), W = mean(sigma2), V_hat = ((N - 1) / N) * W + (M + 1)/(M * N) * B, R_hat = sqrt(V_hat / W)) ## # A tibble: 2 × 7 ## parametro N M B W V_hat R_hat ## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> ## 1 mu 20000 4 1281. 4.29 4.37 1.01 ## 2 sigma 20000 4 121. 1.31 1.32 1.00 Y verificamos que los valores de \\(\\hat{R}\\) son cercanos a uno, lo cual indica que este diagnóstico es aceptable. Si hubiéramos trabajado con las primeras 300 iteraciones sims_tbl %>% filter(iter_num < 300) %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(media = mean(valor), num = n(), sigma2 = var(valor)) %>% summarise(N = first(num), M = n_distinct(cadena), B = N * var(media), W = mean(sigma2), V_hat = ((N - 1) / N) * W + (M + 1)/(M * N) * B, R_hat = sqrt(V_hat / W)) ## # A tibble: 2 × 7 ## parametro N M B W V_hat R_hat ## <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> ## 1 mu 299 4 32334. 40.4 175. 2.08 ## 2 sigma 299 4 7394. 11.9 42.8 1.89 Y estos valores indican problemas en la convergencia de las cadenas. Es necesario diagnosticar el problema, que en este caso resolvemos incrementando el número de iteraciones. Precisión Una vez que tenemos una muestra representativa de la distribución posterior, nuestro objetivo es asegurarnos de que la muestra es lo suficientemente grande para producir estimaciones estables y precisas de la distribución. Para ello usaremos el tamaño efectivo de muestra, Si las simulaciones fueran independientes \\(N_{eff}\\) sería el número total de simulaciones; sin embargo, las simulaciones de MCMC suelen estar correlacionadas, de modo que cada iteración de MCMC es menos informativa que si fueran independientes. Ejemplo: Si graficaramos simulaciones independientes, esperaríamos valores de autocorrelación chicos: acf(rgamma(1000,1,1)) Sin embargo, los valores que simulamos tienen el siguiente perfil de autocorrelación: sigma_metro_sims <- sims_tbl %>% filter(cadena==4) %>% pull(mu) acf(sigma_metro_sims) El tamaño efectivo de muestra nos dice qué tamaño de muestra de observaciones independientes nos daría la misma información que las simulaciones de la cadena. Una manera de manera relativamente simple de estimarlo es: \\[N_{eff} = \\frac{N}{1+2\\sum_{k=1}^\\infty ACF(k)} \\] Usualmente nos gustaría obtener un tamaño efectivo de al menos \\(100\\) (para cálculo de medias y varianzas posteriores). Esta cantidad usualmente se reporta en el software (con mejores estimaciones que la de la fórmula de arriba), y es necesario checarlo. En nuestro ejemplo hacemos una aproximación como sigue: calc_acf <- function(x){ valores_acf <- acf(x, lag.max = 1000, plot = FALSE)$acf %>% as.numeric() valores_acf[-1] } acf_tbl <- sims_tbl %>% pivot_longer(mu:sigma, names_to = "parametro", values_to = "valor") %>% group_by(parametro, cadena) %>% summarise(N = n_distinct(iter_num), k = 1:1000, acf = calc_acf(valor)) %>% summarise(N = first(N), N_eff = N / (1 + 2 * sum(acf))) acf_tbl ## # A tibble: 8 × 4 ## # Groups: parametro [2] ## parametro cadena N N_eff ## <chr> <int> <int> <dbl> ## 1 mu 1 20000 251. ## 2 mu 2 20000 700. ## 3 mu 3 20000 104. ## 4 mu 4 20000 394. ## 5 sigma 1 20000 421. ## 6 sigma 2 20000 411. ## 7 sigma 3 20000 93.9 ## 8 sigma 4 20000 724. Nótese que algunas cadenas tienen un tamaño efectivo de muestra relativamente bajo para el número de iteraciones que hicimos. De cualquier forma, el agregado sobre todas las cadenas es suficientemente grande para calcular resúmenes básicos: acf_tbl %>% group_by(parametro) %>% summarise(N = sum(N), N_eff = sum(N_eff)) ## # A tibble: 2 × 3 ## parametro N N_eff ## <chr> <int> <dbl> ## 1 mu 80000 1450. ## 2 sigma 80000 1650. Sin embargo, podemos hacer más simulaciones si es necesario, por ejemplo para aproximar de manera apropiada percentiles en las colas. Eficiencia Hay varias maneras para mejorar la eficiencia de un proceso MCMC: Paralelizar, no disminuimos el número de pasos en las simulaciones pero podemos disminuir el tiempo que tarda en correr. Cambiar la parametrización del modelo o transformar los datos. Adelgazar la muestra cuando tenemos problemas de uso de memoria, consiste en guardar únicamente los \\(k\\)-ésimos pasos de la cadena y resulta en cadenas con menos autocorrelación . Recomendaciones generales Gelman and Hill (2006) recomienda los siguientes pasos cuando uno esta simulando de la posterior: Cuando definimos un modelo por primera vez establecemos un valor bajo para el número de iteraciones. La razón es que la mayor parte de las veces los modelos no funcionan a la primera por lo que sería pérdida de tiempo dejarlo correr mucho tiempo antes de descubrir el problema. Si las simulaciones no han alcanzado convergencia aumentamos las iteraciones a \\(500\\) ó \\(1000\\) de tal forma que las corridas tarden segundos o unos cuantos minutos. Si tarda más que unos cuantos minutos (para problemas del tamaño que veremos en la clase) y aún así no alcanza convergencia entonces juega un poco con el modelo (por ejemplo intenta transformaciones lineales), para JAGS Gelman sugiere más técnicas para acelerar la convergencia en el capitulo \\(19\\) del libro Data Analysis Using Regression and Multilevel/Hierarchical models. En el caso de Stan veremos ejemplos de reparametrización, y se puede leer más en la guía. Otra técnica conveniente cuando se trabaja con bases de datos grandes (sobre todo en la parte exploratoria) es trabajar con un subconjunto de los datos, quizá la mitad o una quinta parte. Referencias "],["apéndice-principios-de-visualizacion.html", "Apéndice: Principios de visualizacion Introducción Visualización popular de datos Teoría de visualización de datos Ejemplo: gráfica de Minard", " Apéndice: Principios de visualizacion “The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey El cuarteto de Anscombe En 1971 un estadístico llamado Frank Anscombe (fundador del departamento de Estadística de la Universidad de Yale) publicó cuatro conjuntos de dato. Cada uno consiste de 11 observaciones. La peculariedad de estos conjuntos es que tienen las mismas propiedades estadísticas. Sin embargo, cuando analizamos los datos de manera gráfica en un histograma encontramos rápidamente que los conjuntos de datos son muy distintos. Media de \\(x\\): 9 Varianza muestral de \\(x\\): 11 Media de \\(y\\): 7.50 Varianza muestral de \\(y\\): 4.12 Correlación entre \\(x\\) y \\(y\\): 0.816 Línea de regresión lineal: \\(y = 3.00 + 0.500x\\) En la gráfica del primer conjunto de datos, se ve clara una relación lineal simple con un modelo que cumple los supuestos de normalidad. La segunda gráfica (arriba a la derecha) muestra unos datos que tienen una asociación pero definitivamente no es lineal. En la tercera gráfica (abajo a la izquierda) están puntos alineados perfectamente en una línea recta, excepto por uno de ellos. En la última gráfica podemos ver un ejemplo en el cual basta tener una observación atípica para que se produzca un coeficiente de correlación alto aún cuando en realidad no existe una asociación lineal entre las dos variables. El cuarteto de Ascombe inspiró una técnica reciente para crear datos que comparten las mismas propiedades estadísticas al igual que en el cuarteto, pero que producen gráficas muy distintas (Matejka, Fitzmaurice). Introducción La visualización de datos no trata de hacer gráficas “bonitas” o “divertidas”, ni de simplificar lo complejo o ayudar a una persona “que no entiende mucho” a entender ideas complejas. Más bien, trata de aprovechar nuestra gran capacidad de procesamiento visual para exhibir de manera clara aspectos importantes de los datos. El siguiente ejemplo de (Tufte 2006), ilustra claramente la diferencia entre estos dos enfoques. A la izquierda están gráficas (más o menos típicas de Powerpoint) basadas en la filosofía de simplificar, de intentar no “ahogar” al lector con datos. El resultado es una colección incoherente, de bajo contenido, que no tiene mucho qué decir y que es, “indeferente al contenido y la evidencia”. A la derecha está una variación del rediseño de Tufte en forma de tabla, que en este caso particular es una manera eficiente de mostrar claramente los patrones que hay en este conjunto simple de datos. ¿Qué principios son los que soportan la efectividad de esta tabla sobre la gráfica de la derecha? Veremos que hay dos conjuntos de principios importantes: unos relacionados con el diseño y otros con la naturaleza del análisis de datos, independientemente del método de visualización. Visualización popular de datos Publicaciones populares (periódicos, revistas, sitios internet) muchas veces incluyen visualización de datos como parte de sus artículos o reportajes. En general siguen el mismo patrón que en la visión tradicionalista de la estadística: sirven más para divertir que para explicar, tienden a explicar ideas simples y conjuntos chicos de datos, y se consideran como una “ayuda” para los “lectores menos sofisticados”. Casi siempre se trata de gráficas triviales (muchas veces con errores graves) que no aportan mucho a artículos que tienen un nivel de complejidad mucho mayor (es la filosofía: lo escrito para el adulto, lo graficado para el niño). Teoría de visualización de datos Existe teoría fundamentada acerca de la visualización. Después del trabajo pionero de Tukey, los principios e indicadores de Tufte se basan en un estudio de la historia de la graficación y ejercicios de muestreo de la práctica gráfica a lo largo de varias disciplinas (¿cuáles son las mejores gráficas? ¿por qué?) El trabajo de Cleveland es orientado a la práctica del análisis de datos (¿cuáles gráficas nos han ayudado a mostrar claramente los resultados del análisis?), por una parte, y a algunos estudios de percepción visual. En resumen, hablaremos de las siguientes guías: Principios generales del diseño analítico Aplicables a una presentación o análisis completos, y como guía para construir nuevas visualizaciones (Tufte 2006). Principio 1. Muestra comparaciones, contrastes, diferencias. Principio 2. Muestra causalidad, mecanismo, explicación, estructura sistemática. Principio 3. Muestra datos multivariados, es decir, más de una o dos variables. Principio 4. Integra palabras, números, imágenes y diagramas. Principio 5. Describe la totalidad de la evidencia. Muestra fuentes usadas y problemas relevantes. Principio 6. Las presentaciones analíticas, a fin de cuentas, se sostienen o caen dependiendo de la calidad, relevancia e integridad de su contenido. Técnicas de visualización Esta categoría incluye técnicas específicas que dependen de la forma de nuestros datos y el tipo de pregunta que queremos investigar (Tukey (1977), William S. Cleveland (1993), W. S. Cleveland (1994), Tufte (2006)). Tipos de gráficas: cuantiles, histogramas, caja y brazos, gráficas de dispersión, puntos/barras/ líneas, series de tiempo. Técnicas para mejorar gráficas: Transformación de datos, transparencia, vibración, banking 45, suavizamiento y bandas de confianza. Pequeños múltiplos Indicadores de calidad gráfica Aplicables a cualquier gráfica en particular. Estas son guías concretas y relativamente objetivas para evaluar la calidad de una gráfica (Tufte 1986). Integridad Gráfica. El factor de engaño, es decir, la distorsión gráfica de las cantidades representadas, debe ser mínimo. Chartjunk. Minimizar el uso de decoración gráfica que interfiera con la interpretación de los datos: 3D, rejillas, rellenos con patrones. Tinta de datos. Maximizar la proporción de tinta de datos vs. tinta total de la gráfica. For non-data- ink, less is more. For data-ink, less is a bore. Densidad de datos. Las mejores gráficas tienen mayor densidad de datos, que es la razón entre el tamaño del conjunto de datos y el área de la gráfica. Las gráficas se pueden encoger mucho. Percepción visual. Algunas tareas son más fáciles para el ojo humano que otras (W. S. Cleveland 1994). Factor de engaño y Chartjunk El factor de engaño es el cociente entre el efecto mostrado en una gráfica y el efecto correspondiente en los datos. Idealmente, el factor de engaño debe ser 1 (ninguna distorsión). El chartjunk son aquellos elementos gráficos que no corresponden a variación de datos, o que entorpecen la interpretación de una gráfica. Estos son los indicadores de calidad más fáciles de entender y aplicar, y afortunadamente cada vez son menos comunes. Un diseño popular que califica como chartjunk y además introduce factores de engaño es el pie de 3D. En la gráfica de la derecha, podemos ver como la rebanada C se ve más grande que la rebanada A, aunque claramente ese no es el caso (factor de engaño). La razón es la variación en la perspectiva que no corresponde a variación en los datos (chartjunk). Crítica gráfica: Gráfica de pie Todavía elementos que pueden mejorar la comprensión de nuestra gráfica de pie: se trata de la decodificiación que hay que hacer categoría - color - cuantificación. Podemos agregar las etiquetas como se muestra en la serie de la derecha, pero entonces: ¿por qué no mostrar simplemente la tabla de datos? ¿qué agrega el pie a la interpretación? La deficiencias en el pie se pueden ver claramente al intentar graficar más categorías (13) . En el primer pie no podemos distinguir realmente cuáles son las categorías grandes y cuáles las chicas, y es muy difícil tener una imagen mental clara de estos datos. Agregar los porcentajes ayuda, pero entonces, otra vez, preguntamos cuál es el propósito del pie. La tabla de la izquierda hace todo el trabajo (una vez que ordenamos las categrías de la más grande a la más chica). Es posible hacer una gráfica de barras como la de abajo a la izquierda. Hay otros tipos de chartjunk comunes: uno es la textura de barras, por ejemplo. El efecto es la producción de un efecto moiré que es desagradable y quita la atención de los datos, como en la gráfica de barras de abajo. Otro común son las rejillas, como mostramos en las gráficas de la izquierda. Nótese como en estos casos hay efectos ópticos no planeados que degradan la percepción de los patrones en los datos. Pequeños múltiplos y densidad gráfica La densidad de una gráfica es el tamaño del conjunto de datos que se grafica comparado con el área total de la gráfica. En el siguiente ejemplo, graficamos en logaritmo-10 de millones de cabezas de ganado en Francia (cerdos, res, ovejas y caballos). La gráfica de la izquierda es pobre en densidad pues sólo representa 4 datos. La manera más fácil de mejorar la densidad es hacer más chica la gráfica: La razón de este encogimiento es una que tiene qué ver con las oportunidades perdidas de una gráfica grande. Si repetimos este mismo patrón (misma escala, mismos tipos de ganado) para distintos países obtenemos la siguiente gráfica: Esta es una gráfica de puntos. Es útil como sustituto de una gráfica de barras, y es superior en el sentido de que una mayor proporción de la tinta que se usa es tinta de datos. Otra vez, mayor proporción de tinta de datos representa más oportunidades que se pueden capitalizar. Más pequeños múltiplos Los pequeños múltiplos presentan oportunidades para mostrar más acerca de nuestro problema de interés. Consideramos por ejemplo la relación de radiación solar y niveles de ozono: En el ejemplo anterior incluyendo una variable adicional (velocidad del viento) podemos entender más acerca de la relación de radiación solar y niveles de ozono: Tinta de datos Maximizar la proporción de tinta de datos en nuestras gráficas tiene beneficios inmediatos. La regla es: si hay tinta que no representa variación en los datos, o la eliminación de esa tinta no representa pérdidas de significado, esa tinta debe ser eliminada. El ejemplo más claro es el de las rejillas en gráficas y tablas: ¿Por qué usar grises en lugar de negros? La respuesta tiene qué ver con el principio de tinta de datos: si marcamos las diferencias sutil pero claramente, tenemos más oportunidades abiertas para hacer énfasis en lo que nos interesa: a una gráfica o tabla saturada no se le puede hacer más - es difícil agregar elementos adicionales que ayuden a la comprensión. Si comenzamos marcando con sutileza, entonces se puede hacer más. Los mapas geográficos son un buen ejemplo de este principio. El espacio en blanco es suficientemente bueno para indicar las fronteras en una tabla, y facilita la lectura: Para un ejemplo del proceso de rediseño de una tabla, ver aquí. Finalmente, podemos ver un ejemplo que intenta incorporar los elementos del diseño analítico, incluyendo pequeños múltiplos: Decoración Percepción de escala Entre la percepción visual y la interpretación de una gráfica están implícitas tareas visuales específicas que las personas debemos realizar para ver correctamente la gráfica. En la década de los ochenta, William S. Cleveland y Robert McGill realizaron algunos experimentos identificando y clasificando estas tareas para diferentes tipos de gráficos (William S. Cleveland and McGill 1984). En estos, se le pregunta a la persona que compare dos valores dentro de una gráfica, por ejemplo, en dos barras en una gráfica de barras, o dos rebanadas de una gráfica de pie. Los resultados de Cleveland y McGill fueron replicados por Heer y Bostock en 2010 y los resultados se muestran en las gráficas de la derecha: Ejemplo: gráfica de Minard Concluimos esta sección con una gráfica que, aunque poco común, ejemplifica los principios de una buena gráfica, y es reconocida como una de las mejores visualizaciones de la historia. Una gráfica excelente, presenta datos interesantes de forma bien diseñada: es una cuestión de fondo, de diseño, y estadística… [Se] compone de ideas complejas comunicadas con claridad, precisión y eficiencia. … [Es] lo que da al espectador la mayor cantidad de ideas, en el menor tiempo, con la menor cantidad de tinta, y en el espacio más pequeño. … Es casi siempre multivariado. … Una excelente gráfica debe decir la verdad acerca de los datos. (Tufte, 1983) La famosa visualización de Charles Joseph Minard de la marcha de Napoleón sobre Moscú, ilustra los principios de una buena gráfica. Tufte señala que esta imagen “bien podría ser el mejor gráfico estadístico jamás dibujado”, y sostiene que “cuenta una historia rica y coherente con sus datos multivariados, mucho más esclarecedora que un solo número que rebota en el tiempo”. Se representan seis variables: el tamaño del ejército, su ubicación en una superficie bidimensional, la dirección del movimiento del ejército y la temperatura en varias fechas durante la retirada de Moscú”. Hoy en día Minard es reconocido como uno de los principales contribuyentes a la teoría de análisis de datos y creación de infografías con un fundamento estadístico. Se grafican 6 variables: el número de tropas de Napoleón, la distancia, la temperatura, la latitud y la longitud, la dirección en que viajaban las tropas y la localización relativa a fechas específicas. La gráfica de Minard, como la describe E.J. Marey, parece “desafiar la pluma del historiador con su brutal elocuencia”, la combinación de datos del mapa, y la serie de tiempo, dibujados en 1869, “retratan una secuencia de pérdidas devastadoras que sufrieron las tropas de Napoleón en 1812”. Comienza en la izquierda, en la frontera de Polonia y Rusia, cerca del río Niemen. La línea gruesa dorada muestra el tamaño de la Gran Armada (422,000) en el momento en que invadía Rusia en junio de 1812. El ancho de esta banda indica el tamaño de la armada en cada punto del mapa. En septiembre, la armada llegó a Moscú, que ya había sido saqueada y dejada desértica, con sólo 100,000 hombres. El camino del retiro de Napoleón desde Moscú está representado por la línea oscura (gris) que está en la parte inferior, que está relacionada a su vez con la temperatura y las fechas en el diagrama de abajo. Fue un invierno muy frío, y muchos se congelaron en su salida de Rusia. Como se muestra en el mapa, cruzar el río Berezina fue un desastre, y el ejército de Napoleón logró regresar a Polonia con tan sólo 10,000 hombres. También se muestran los movimientos de las tropas auxiliaries, que buscaban proteger por atrás y por la delantera mientras la armada avanzaba hacia Moscú. La gráfica de Minard cuenta una historia rica y cohesiva, coherente con datos multivariados y con los hechos históricos, y que puede ser más ilustrativa que tan sólo representar un número rebotando a lo largo del tiempo. Referencias "],["apéndice-transformaciones.html", "Apéndice: Transformaciones", " Apéndice: Transformaciones En ocasiones es conveniente transformar los datos para el análisis, el objetivo de los ajustes es simplificar la interpretación y el análisis al eliminar fuentes de variación conocidas, también es común realizan transformaciones para simplificar los patrones. Algunos ejemplos donde eliminamos efectos conocidos: Cuando analizamos el precio de venta de las casas podemos eliminar la variación debida al tamaño de las casas al pasar de precio de venta a precio de venta por metro cuadrado. De manera similar al analizar las propinas puede convenir considerar la propina como porcentaje de la cuenta. En series de tiempo cuando los datos están relacionados con el tamaño de la población podemos ajustar a mediciones per capita (en series de tiempo PIB). También es común ajustar por inflación, o poner cantidades monetarias en valor presente. mex_dat <- global_economy |> filter(Code == "MEX") pib <- ggplot(mex_dat, aes(x = Year, y = GDP / 1e6)) + geom_line() pib_pc <- ggplot(mex_dat, aes(x = Year, y = GDP / Population)) + geom_line() pib / pib_pc Adicionalmente podemos recurrir a otras transformaciones matemáticas (e.g. logaritmo, raíz cuadrada) que simplifiquen el patrón en los datos y la interpretación. Veamos un ejemplo donde es apropiado la transformación logaritmo. Usamos los datos Animals con información de peso corporal promedio y peso cerebral promedio para 28 especies. Buscamos entender la relación entre estas dos variables, e inspeccionar que especies se desvían (residuales) del esperado. Comenzamos con un diagrama de dispersión usando las unidades originales animals_tbl <- as_tibble(Animals, rownames = "animal") p1 <- ggplot(animals_tbl, aes(x = body, y = brain, label = animal)) + geom_point() + labs(subtitle = "Unidades originales") p2 <- ggplot(animals_tbl, aes(x = body, y = brain, label = animal)) + geom_point() + xlim(0, 500) + ylim(0, 1500) + geom_text_repel() + labs(subtitle = "Unidades originales, eliminando 'grandes'") (p1 + p2) Incluso cuando nos limitamos a especies de menos de 500 kg de masa corporal, la relación no es fácil de descrubir.En la suguiente gráfica hacemos la transformación logaritmo y obtenemos una gráfica más fácil de leer, además los datos se modelarán con más facilidad. p3 <- ggplot(animals_tbl, aes(x = log(body), y = log(brain), label = animal)) + geom_smooth(method = "lm", se = FALSE, color = "red") + geom_point() + geom_text_repel() + stat_poly_eq(use_label(c("eq"))) p3 ## `geom_smooth()` using formula = 'y ~ x' La transformación logaritmo tiene también ventajas en interpretación, para diferencias chicas en escala log, las diferencias corresponden a diferencias porcentuales en la escala original, por ejempo consideremos la diferencia entre el peso en escala log de humano y borrego: 4.13 - 4.02 = 0.11. Confirmamos que el humano es aproximadamente 11% más pesado que el borrego en la escala original: 62/55.5 - 1 = 0.12 animals_tbl <- animals_tbl |> mutate(log_body = log(body), log_brain = log(brain)) animals_tbl |> filter(animal == "Human" | animal == "Sheep") |> arrange(body) |> gt::gt() |> gt::fmt_number() #ociqvanemt table { font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } #ociqvanemt thead, #ociqvanemt tbody, #ociqvanemt tfoot, #ociqvanemt tr, #ociqvanemt td, #ociqvanemt th { border-style: none; } #ociqvanemt p { margin: 0; padding: 0; } #ociqvanemt .gt_table { display: table; border-collapse: collapse; line-height: normal; margin-left: auto; margin-right: auto; color: #333333; font-size: 16px; font-weight: normal; font-style: normal; background-color: #FFFFFF; width: auto; border-top-style: solid; border-top-width: 2px; border-top-color: #A8A8A8; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #A8A8A8; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; } #ociqvanemt .gt_caption { padding-top: 4px; padding-bottom: 4px; } #ociqvanemt .gt_title { color: #333333; font-size: 125%; font-weight: initial; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; border-bottom-color: #FFFFFF; border-bottom-width: 0; } #ociqvanemt .gt_subtitle { color: #333333; font-size: 85%; font-weight: initial; padding-top: 3px; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; border-top-color: #FFFFFF; border-top-width: 0; } #ociqvanemt .gt_heading { background-color: #FFFFFF; text-align: center; border-bottom-color: #FFFFFF; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #ociqvanemt .gt_bottom_border { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ociqvanemt .gt_col_headings { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; } #ociqvanemt .gt_col_heading { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 6px; padding-left: 5px; padding-right: 5px; overflow-x: hidden; } #ociqvanemt .gt_column_spanner_outer { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: normal; text-transform: inherit; padding-top: 0; padding-bottom: 0; padding-left: 4px; padding-right: 4px; } #ociqvanemt .gt_column_spanner_outer:first-child { padding-left: 0; } #ociqvanemt .gt_column_spanner_outer:last-child { padding-right: 0; } #ociqvanemt .gt_column_spanner { border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: bottom; padding-top: 5px; padding-bottom: 5px; overflow-x: hidden; display: inline-block; width: 100%; } #ociqvanemt .gt_spanner_row { border-bottom-style: hidden; } #ociqvanemt .gt_group_heading { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; text-align: left; } #ociqvanemt .gt_empty_group_heading { padding: 0.5px; color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; vertical-align: middle; } #ociqvanemt .gt_from_md > :first-child { margin-top: 0; } #ociqvanemt .gt_from_md > :last-child { margin-bottom: 0; } #ociqvanemt .gt_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; margin: 10px; border-top-style: solid; border-top-width: 1px; border-top-color: #D3D3D3; border-left-style: none; border-left-width: 1px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 1px; border-right-color: #D3D3D3; vertical-align: middle; overflow-x: hidden; } #ociqvanemt .gt_stub { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; } #ociqvanemt .gt_stub_row_group { color: #333333; background-color: #FFFFFF; font-size: 100%; font-weight: initial; text-transform: inherit; border-right-style: solid; border-right-width: 2px; border-right-color: #D3D3D3; padding-left: 5px; padding-right: 5px; vertical-align: top; } #ociqvanemt .gt_row_group_first td { border-top-width: 2px; } #ociqvanemt .gt_row_group_first th { border-top-width: 2px; } #ociqvanemt .gt_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #ociqvanemt .gt_first_summary_row { border-top-style: solid; border-top-color: #D3D3D3; } #ociqvanemt .gt_first_summary_row.thick { border-top-width: 2px; } #ociqvanemt .gt_last_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ociqvanemt .gt_grand_summary_row { color: #333333; background-color: #FFFFFF; text-transform: inherit; padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; } #ociqvanemt .gt_first_grand_summary_row { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-top-style: double; border-top-width: 6px; border-top-color: #D3D3D3; } #ociqvanemt .gt_last_grand_summary_row_top { padding-top: 8px; padding-bottom: 8px; padding-left: 5px; padding-right: 5px; border-bottom-style: double; border-bottom-width: 6px; border-bottom-color: #D3D3D3; } #ociqvanemt .gt_striped { background-color: rgba(128, 128, 128, 0.05); } #ociqvanemt .gt_table_body { border-top-style: solid; border-top-width: 2px; border-top-color: #D3D3D3; border-bottom-style: solid; border-bottom-width: 2px; border-bottom-color: #D3D3D3; } #ociqvanemt .gt_footnotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #ociqvanemt .gt_footnote { margin: 0px; font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #ociqvanemt .gt_sourcenotes { color: #333333; background-color: #FFFFFF; border-bottom-style: none; border-bottom-width: 2px; border-bottom-color: #D3D3D3; border-left-style: none; border-left-width: 2px; border-left-color: #D3D3D3; border-right-style: none; border-right-width: 2px; border-right-color: #D3D3D3; } #ociqvanemt .gt_sourcenote { font-size: 90%; padding-top: 4px; padding-bottom: 4px; padding-left: 5px; padding-right: 5px; } #ociqvanemt .gt_left { text-align: left; } #ociqvanemt .gt_center { text-align: center; } #ociqvanemt .gt_right { text-align: right; font-variant-numeric: tabular-nums; } #ociqvanemt .gt_font_normal { font-weight: normal; } #ociqvanemt .gt_font_bold { font-weight: bold; } #ociqvanemt .gt_font_italic { font-style: italic; } #ociqvanemt .gt_super { font-size: 65%; } #ociqvanemt .gt_footnote_marks { font-size: 75%; vertical-align: 0.4em; position: initial; } #ociqvanemt .gt_asterisk { font-size: 100%; vertical-align: 0; } #ociqvanemt .gt_indent_1 { text-indent: 5px; } #ociqvanemt .gt_indent_2 { text-indent: 10px; } #ociqvanemt .gt_indent_3 { text-indent: 15px; } #ociqvanemt .gt_indent_4 { text-indent: 20px; } #ociqvanemt .gt_indent_5 { text-indent: 25px; } #ociqvanemt .katex-display { display: inline-flex !important; margin-bottom: 0.75em !important; } #ociqvanemt div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after { height: 0px !important; } animal body brain log_body log_brain Sheep 55.50 175.00 4.02 5.16 Human 62.00 1,320.00 4.13 7.19 Y podemos usarlo también para interpretar la recta de referencia \\(y = 2.55 + 0.5 x\\) , para cambios chicos: Un incremento de 10% en masa total corresponde en un incremento de 5% en masa cerebral. El coeficiente de la regresión log-log, en nuestro ejemplo 0.5, es la elasticidad y es un concepto común en economía. Justificación Para entender la interpretación como cambio porcentual recordemos primero que la representación con series de Taylor de la función exponencial es: \\[e^x = \\sum_{n=0}^\\infty \\frac{x^n}{n!}\\] Más aún podemos tener una aproximación usando polinomios de Taylor, en el caso de la exponencial el \\(k\\)-ésimo polinomio de Taylor está dado por: \\[e^\\delta \\approx 1 + \\delta + \\frac{1}{2!}\\delta^2 + \\dots + \\frac{1}{k!}\\delta^k\\] y si \\(\\delta\\) es chica (digamos menor a 0.15), entonces la aproximación de primer grado es razonable y tenemos: \\[Ae^{\\delta} \\approx A(1+\\delta)\\] dat <- tibble(delta = seq(0, 1, 0.01), exp_delta = exp(delta), uno_mas_delta = 1 + delta) ggplot(dat, aes(x = uno_mas_delta, y = exp_delta)) + geom_line() + geom_abline(color = "red") + annotate("text", x = 1.20, y = 1.18, label = "y = x", color = "red", size = 6) "],["referencias.html", "Referencias", " Referencias "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] diff --git a/temario.html b/temario.html index 37a7353..ada47e6 100644 --- a/temario.html +++ b/temario.html @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto diff --git a/tipos-de-estudio-y-experimentos.html b/tipos-de-estudio-y-experimentos.html index 8e61054..ad85efb 100644 --- a/tipos-de-estudio-y-experimentos.html +++ b/tipos-de-estudio-y-experimentos.html @@ -412,7 +412,7 @@
  • Ejemplo: varias pruebas independientes
  • Simulando de la posterior
  • -
  • 12.1 Ejemplo de islas
  • +
  • Ejemplo de islas
  • ¿Por qué funciona Metrópolis?
  • Método de Metrópolis
  • Ajustando el tamaño de salto