From 88990df54b51487b305dd7e0baa5dcadcf4a265f Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 30 Nov 2024 18:12:44 -0300 Subject: [PATCH] Logo --- App/Logo/Ayun.jpeg | Bin 0 -> 138255 bytes App/server.R | 36 +++- App/ui.R | 17 +- docs/app.json | 2 +- xtable.html | 328 ----------------------------- xtable.tex | 501 --------------------------------------------- 6 files changed, 48 insertions(+), 836 deletions(-) create mode 100644 App/Logo/Ayun.jpeg delete mode 100644 xtable.html delete mode 100644 xtable.tex diff --git a/App/Logo/Ayun.jpeg b/App/Logo/Ayun.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f638b1c219ee158404513e98241ef8be225d1dad GIT binary patch literal 138255 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

p!P4ZDkls1M1l)9Dr986U;i@ zMC8Z9&icTO;DJ=G4nh16`;m>zL+3-55VXM$l*?L*@foqfzgqkj3R4Fcp|cKTk6@9` z#xW)#5wZ`BX`-v54bAAz%F`nVzuX#DR{~FFU9fG3#3nF__*mOQWbcYQklQhy)E6C+ z(HYZW{zF%m4xUPg#=%&b3ur3JuV*+X26BZ?{{SRhokK&!&}llBObf3mm}`-hqg|J_ z+G1J=3in1WW$bjF>Sio|4ZjI{6?!R!$mvfH@K>a}V|6|}dmXD>^jU}X4}CvgD~Zrm zVrR*<+BuM#JG6L#Ef!iB$sHQeG2t0$mV3-B>zFVZU8{nerbn}{qG!-g+othQ#_};K z)2@fahFouBjRWk4WpAP4ifyIQVzfUO0t9Y^mJoaB-k@sqIL<>(=d!_2K7s9YV+LT+ zs5YJ52EZCr*wyIPG!jLT{0D>BvLnM1r0C+J1+IHzP}nSBpNk#sgSA{O7Fte!=1-o>rpd!gYmh<~xe*!Djo zG^-s~5fWD9b5bY_NJ`)qTv-?>cMnB+GHBpsaOx;Tn<+XK))?1AvFLMjq!#j3(R&`W zzRYVy?~!E_eonXJ2&-m;NuxybgV{BWIl=lgXVw*jzd3Op4WXl06R8QO{2^pF$*Oi4 zF!5JJEhR=|l4N4mOfWBkW$eJAmey=@V(k#c6%9t@9&ja*LyA&{dNCUG#8>knCat$( zqz2tk)UtT&Pi~0VI$R>cdm+@#=sRj-B31tY3`@ytYqCA!pF=Txi5(0CqWy(wv4K~X z@LFbvI36apOtLD$M^Ho3reCsMMhN!rAtRFy_)mzinTZR6(3C8_1L<6l{F#4LJxc+ zPQoTiSILlOgaH<~{gCpRkq=?&8;|H@))}7%Kx9~kh8QHwj4g!2HD35+H^G)84-KXU z&>Y@`Cm3mfhnGWez|METk6@doXM#3qf$-DWUrxp%0?itz%u=cZCc4b@z>=uZSYwF> z+Pxf9==GfyvmlY6-jvJlJQ|z`SWeuCm64%|^kzc0l(Dv-O}8(|lgg8R#l{h>D3NB= zJO2QnOVqYCUT%`;QlmPfY{3*HXW|+ofy}5mTnPr&mqu`DqO{LJo0ZuYGZl$fqcVXk z=feY>a4h^78Z2^13iWyDV+A*{A+n190NAc&BVci;*jFHVM8L4mh8ig#o2wxrD0@HY zOuZsTCEsM;Xbj+63$jye>w;T9Oz1H;QxuadX?S&CMrKLqB@W@SjG@3)YhiK;!)Shx zB{l-9(@bLFs#T4#l3N+^dL_sbap2zFlGBf)J&v7(tNljuz2V+&jS95suwo`q7r z$d)MtkPppXp>k6u13@HW8vg)I#h5|Q(^_Ij40aer8m{9!raHK0ly#OmW=VqfaBL>e zK4vTd|e9&tMrsnkEZMG33KoVhNpHN06k#kI#0)s$F*d!iagPYKccoKn|zL}AxV#;2B5D>A3$QxMjH{$!h##&jgQ2|!E9q#Vr()N7o&-=N$jne z9pMh8QgW&q3Z&SS$IH=dY*ffdpk{SotKxad5nyX?NqzBt00eA7Zk!T&xw> z{*xgOp&j6$hW(|sP=%yjy-F&{~G95u`&_ppt_abs{jy8}j%sKr~blvWbU!ioKhI=?tN$2xIk4vQgDD=+N2F z-_~94*l4s}u@$9S3oR!Ds{9LJBz3{VLTl9-`xeFJ+j$nTdWkzZ9NHz4u=q2qsq)Mz z_!*xJ1fML9u9+cHRxxgj{{W{B`VuEYLvNnOxOEy`u`CW!DWgae9hVUbWfp$}RqTfT zc0}YJC(Sl~l(oPG_5 zl_7o#@)CA8XMQ)55j92v>1~?!$W0AO%2sk``hz&~>MQ#ujKCw3yfM{F#q?x|s%n@b zzRyC7C8t56BSaqH!0`_FUPVZRFHH-CFWGKez}49Q0I?6o!)zt^F>ogGVVPeI4dk(w zzx&{mav~B0v9Y;CF;Yf7d?oZpn;I!#Qk)eBVW!5*Oe1zTM9r8G8EFRxe6ye$MnThpFaDUSR5o77 zLvmGttCrIoy03=p@J+ZD67)4=qH4~B#psfj*&ezv8WF`UB*<={&!BT8+9fCCSivu$ zE)bVNi`?!BkEm#)ddXFyci8WtqgfkQ1Jq(C>{OXnYc5$X{smk{J$UT!#_9bNBvXqspk&{RomZA1<0o?G~Hr82jWSaCM zsv+By>5g=tP5}h8NGtyUxI!e2Kj7`_f_Wj5MV?n0`Z_MXYKs$*0jH*=-G`iCNe9I39~JcZSgr0MfwO@OWGL~LTG@un)X6wE=`zm zM6x0;f6;c83FA>2TO5dZlnV62{HpzuCdAy6CruuGg3`Ae_O<52GSSHz4x5B+x+1(?48lA#9A1Fpact6CpPQsVt)* zU@!dxCWgt8N@!d5CBq#AkKov21_3Syufwp!?ruI05gUQjPehtBk16+zJ zbJ1mli2R0hlr|LhE<6}U8JoTGDuq;HXt;JgVPs%g{TcFx=I2=6Pi9of>`t@r$yPWe zRtQPo_mOF|kds>JAzKD!WA?=nZ0x+Y(3v)#hn5Q`1bM?~!&PB6+YPFXk}jC^899^4 zh^d3E4A8qnRwmoxGnvmUW@h=^v2+mgNMq6P%o9nGR#sR^dx6@IjGI25hyMVu*ZOCy zp<@>!52N%jMpzkr4#vkLIwm854j^JoW-Z`twuJ0f4Kl*vkBeF|WFcQfZU;v3PMF~h z{>CPf!INyuSuR#a;HM;AZ{$xm(KS;{Pk{)P9KiV7>_%9J`jDAfRG%Y-S zOTg^OAF>ju5T`a)l-a0|&hLfer_in3=?dG2LmnI<5x3~Kg>aD)QVmjk@=?B5ei3N1 z;bu?41)MVl*xiCdP~xMdN(s{B`eMcYg?R0I9Q5fE>mEd^H+gw0cVd<`q&dRLz-pxn z-i0X#q{PyE4xAtYJs{tac2ZdrthpcLMOEXyq%2R{@txw4FeI-xB}*90`jmSdR6 zOs>o%hTe#5a#o98Sm9Fzqa~rU=-?>kgDQiM`x93;pp}&cn%fuTk?ZtL6u^m$hO+*M zVrYVQ0l6KK%g16jlCOkaq!UI=ndVaqXk}Jl%WgPE^DN~*0orE4XlunZX;3m@oQqgY z%LS}jh+6*u26KhjoNOE@*RV-)8>eFUU4e%an8!W6h|>Q6qL>~%oG7|9BY9#|v=Oh# zRe@Y!?fP0E*f_~Mgwg0nF|x#F8JaL`M>nFEcy{(BC;-32?)))obX4Rn0*`>n3Ri)i3ZmlOoM_Gkp6oCZT*C zO4>r{Q)^4Wgs9e9A&8&Rn-P2ymPE?_jwv`wZ4(xxyi6F4oXC?OlTz3k*Iz@fmQ$E6 z)2P*>qa?8UFSu}ESZnBnmBQGWof?Do0}kGVQ8$d3HO9w#!0D^Bp!D&SXMrwHDWU8x zG+F&{WQ_1|CE&pvAAr?U@*+0cYa_7sqRh3UFX6T?sn63UEg(|cdBU&8i%1QP9%&MXZ}GCMin zLS}+ik8)xdlJv!7wwD6JpMry$$kkafi$;*6H=#Brazv#(jwex(Zi|RG){%Oy3>kJ{ zaO{M2)tiJP`~i~6{fC3`OfRdWSQu2xL+I1;_& zN#)?Gt&McyA+AbVWO$mdlr*a^V*0ny!HdwR3^5Zi5c3TtS=tiP8~8I_!^uR4+BidI zY>#%Bq^Y5=0C{e?B_j>K#EJC8Xyxo72JI=ypXNSnK>5SB#nPn#|Px5CQM!VswcrCo> z&{jU~6keipR1Q%aLr11v5b0>5Yt}$=~!tx#Aq5JVi=2BtgkqW4UNKJXl4^F@m8* zZrtE@`CXDT)MhHJinEhYtCQQwHvzR+WQMse@NT8Q41J-LlR+7=bTshD5U_4p_4}V zGOmWchJ=ea7G9X#FMq-?H~#?j4mjA-l0W@3B*`qE3yh_+V64Jg!iq!OTD_IksHCvK z%v#?=e`v}c1zT;r38SG>tPeq7Vv=K#4IB1i)E6LPwz(A}jBWuOK_b|4PQ4XXH|Q?x zDs>7AJZr?V$}g@i^+r| zP%Q-)Y*)ZS)|lQ4W-B{FD$>lX2_lQ~CMnedbvwxm3^RDw1G`%*5-Ipl1)AeSKYWr<&=Yh`kR zn53&Re*=gHxlW3}W>i7jTS&=uZ)9r?t{9H$ikdLc)gGuO+!Z(b66v3XJjd}2Yk#C` zS2(^Erz0&#@`#|D(AC1iH2VIRAMkbW=>GD4n;ev7p2HNy6Q*R-7Aj&!Ojf} zI!Z`7aRvyI?uNEwiX*I(Ie8O+QS`B=JLHVH5@~6a4KO(hCAv~(-a}_DhiR>eaFP!b zxAHY-KcU-c{6gY1d4fBJV6=Z1(nye>B;NGvOHuk7**bwB=iPJ)QM0`ZM5PF%4;=`j(eX=aAzK*cip^dCR z0;yEed=Q!{>(J{SjgKC6>}c9(Y9HXuQgEv{@ZeCi+A$8>H4Q6;QDlMi!?G~EQPnF$Ih0Iqm3m`Ic^jDVKE!F9 zFY-JvZu=X`Z}x{-9A%Nfr+VPzP`%KhOiWfLoU*H!(DtqHIsX74txFsRA`Y3R>Rb-1 z0+C1x$>^6#{Sg(0s=^XpmH2;~;7*%Ht0&o0DGjBj+hMau!#+pC^0DYjwJ{{#POb{t zP+-K1lNhW{%@A<0Oh{ItNZ!geppBVYDrt_)61Z5ApAd-q_GN%-vJHmgGeNq|@LFPA{?lc7p?Ldb_m@XZ_#cCmO6IEkl=u^v?R zP(&0d`4b1&t{Bx~VX0V64_?mE{Aes^ow3S-$!ou(xlKx-vX`JFmR?b{HYE0FnP_f& zEXDiqrG|2fIR?fsUbZlHc2qA07{174TZ~C*>_&x0k#80YKL+_KL1@HS8K2NsDt%*^ zkT$Uo(i=iFX{iy_zifD|AtAKSVip$j$w@RB^s+}W-v*jwTn1NJG%Gxf2p?jFk=8mv z{w<25IH{H5J{9^UMZkvK*2x4L)7aXVCb}wcAhGU4LMoZc9WR1b{{SWpvD0K8%|Fs$ zL-rtFe}i3-{{T?Ry9?)n9wDN%MF}d*f@fHQ!dHPXD$d}z9tJ_tf}7}xfac0y1R9oT z+}R2ALr~B1V3J)K{0|rns+PPQA*6HI*7q|n;R^6l+8PvSW;#@)SboSb>z1N4n?&H* zGFdA}q7tEGG)^Uw?njPz8Yzs@{1?J>C2V3UmmQFitDsLE2)hOgfg?mVIct;Hy|cje zMoah=w#-9Rv->kmB}Ch#kN?B~CJ+Gt0{{a700IL60RaI40RRC25g{=_QDJd`k)g4{ z(c$p%5dYc$2mt{A0Y4DpTc6}kcrw6JnA3Lo3llqRYepQ(6el-?0Z$3JF6?Jg_TZzj zmX~7%r|^uiz=@^|H1C(WX050FgH2s`a}(Rxp#?vrL15TA zGX=*Svj$ejgZBkRN00fPm}onD4Xf6lWlhmUP?}t3=8dR@tLZEb30y^it$@O5bvV36 zqTtK6rOQ(9>?|P1vcMt5$D%K|iCNSMv6(CZ(cCeh=EJg|sclp01Yj2b04y$rt+o{g zH=siFPsCm$h?fhu`GV!}{wDwd%uVnRXm+EBIuuw_LF9)`P+#&Gs;MiuI!;)ypBIEG z!1?U3xk<|s4en4&y{2QD`hH>%ieMC19Ym|YqzzU=gtMIaC=D(WDw^N2mf{F_3t7U< zvND_=QqvrbPG}$)o=S3!IFQG3`20!*rChiV!8U5{n0%1=6^5mvR}I*z5~D%XS2;%! z@nh@kS3$0cQ1=HI%{X2qWrg)b)|O{88>>=)*Yymj+`o{~A;JYM$mK;OS# zJ`N#G2h`Fn`#Az}L}(ti7LM!qCFaY3BCxc>HM+o*7XBwGfZ6Ru5PzmRj@UN#J7pYq z4J5B+gzVvk^8vvrMPE#`2aZbGC8zf?RMN_r+t(#+!FzL^cjN(7)(YDSh%4G7szj9! zCv^!*JJc<3=ko}lEpj{&u9;{ez1Wsh2jm;N2XP1$)E&NVvTanV8QO-d3{E2fR*Rs9 zwht_0HCC@t1k;;klvbLQHJ=EO;X8~3#?LgX^8wUqS1x`^SbFMTq8BhJgiq+rhFNB- zfIn;`F{>f08yEvS zOb*NLUUWBOY)~r-?j;8*q2y4baG`~3R~bW>E;@dtM+AA7HW%mFU^#yfWbv|=`98}| zb-8lXuPi88vro-2OxPB$Omd77qlGR%Gc|BZg}j+9@I4lY)Gh^qgRvAu>cMciWJN1- zpn8Q%`9?Kp{2oTU+tU4s0=HHYoU6r}%t(`J8n_4X5!UUd6tVh6Mn{(2a>g4P=_2;5 zKbgE;OK4s<2!n%&W{yVW`<*z(~ zSQK}OgjV(dyD3Wnsa#piq6Xc{#E*i#xFQBPoz&B}#$BCwhV}%gmc0E+K8JP0w?R*E zsp4u=%L$RFlVPWbnmpskThWe39j+Gw9?I*zrZYmdU=-YmZ9M+~GL3PZ$^tf@ zV@;9r$f&hR{lK@|7qusCY6;A+F4SxrAZ!>PN#^DSe) zAQx9_{K`jSEe(}=MM*U>8q-v6cedHX64!-_-vdz{9?o3jIXUpCD{h}6$J&W+2$p{H z2(vSvXI}eWViE*VoX4%}kIYtqb=PpEY3T(yDaKrK2(J!B0#cA+<#P1_F9(($Gz*@) zRC3e8GQajO=W%(Q6;}bUO~c|#f^<$m$GM+&CPS5S7rn6SPjWaGh+2(LhvGD*y(U}UxEPIs>2T)*hOu6pqBM8-Z+Ywm6Whs8k>iJF}3RCu3KqqOV zP2W(l!Q?K)ud@<`BrTuPcLN?7K&i~#hHEokbM`8h8!g_I#I?S}nA+AUmJ|p}F;p|^ z8+0|UW5`z9pVS*mym9g}VKg1G+=q2_9aXw(nN%;U}pU^I_5V_?x8WaU^Ut3g#ki-Wz0>T z5iNU9Pf_4@nRc1kGDoPW2nwrEpruz3tx{jfRyIAccTm7=?j zr~IU(Eq(^-WTxEs_5onxR6qjx*-JX+pu2v4!2wSgwgwgr{19s%o+S{y zL8?v;pf4DClnvD!fk2M)F6`Phi5B^q4rq!mm1F@xJ&VfVEo#>vBQM`8y3zg{g_-h zJNn8k(4Bh#za$J7UZxV|lJYq;Yfxz4;&4{0h$rCYBIv`$bSirwv2LHZsR-VYka^}6 zx~y(qAco{LNQx0L#S4F6;d@YGwCSA}_8N8LE?Kg=mKW0+$J7NI*O|_>tBD4lP6w(Y zP2<$Cus%c;f`5_Pb;ZPi(|$lGaE{ej;W^-3_6~-iEGSE`03FKEgOtk%W%((B>7ojA zmdtt+U=g-+0%HMMs2R#YuDgureA#Yc#~vaBV!evFv44qrASf_;iY`P_La-kR#WUEK zXYnXKZ%}kVuryBMJn%(k9Dh?v0}9d?o->(+Ewwd4-eNokkkb3?z^p|Zjo(<|tcyh* z{v!pk31H_q8MIQdQCWF1Eoj*wDx;#$rH zeo${&{h%#vR2B>QP~-+;Kct}ppVK=^YADf08IARv!G6lSYT+;#gR|Jd(^TrkHh#pQt2+n z2TS`sS(gZHqRPq-s)p@OiA7L&4&g<-%WIQo6=-2T9Ym78T&t9iKVM;TJ|CI+U!yJ}+!qSl3RRWFjbh|#uri;9kr zIz2=YX&>e~==g()Yz(kXY9CJ}l&bFGbWV1=iMi*f_BmA&)5N4jzFU|;^>Gj?7tBae z=zNa39GjTJTHoM;-Q{|SDya$zjiH4C=MvgE3f2t-vG>_p>v1^czCZ?Jx|&gd!OwA^ zLwcPmpO^{5(DG6%NYPmr&mSVRu3KT8N25ijAgXVFs0^TYkU?H0_&8+2Q*hWkw&yUj zOPJe0{{YC)tTQ4~%dsEocwt>Y9c5?6BEl1r`SzheQDFJ@SOM20RSkd>6?||`wGRlsodZjwb#ka5^IynfG>lA`$gtAsLKF>Kz_ePyeXG{RViyl zQ@;#8TCf9X;tIF4{-e9uy9~ZKV_h6(LFmRn_U~ilA@%?vMe8pHhlx!?%(L*AHMle? zc>rblL_sjBA?zzsfUYTsV5M4g7c=c|L+nkOnQ^Z5w<^eS@hk{f7kqHRYAaQrVtl>h zTjDtu7jmITk#J%y!Vv0P5Vciba?%CQu`uvu&AMHzmwIE==t-h^-oZ8Ma`i7oDsmhH z&Sfc&XJ;W_cgR;~d_f9%`x9!<#6z}kBhEa`)9%c$y1JWe8%b9}Z}Sp2&3Ihv(kVIJkD1;wSk@s^9% zkq@C0dM^0#FgOSw7)qU6UB1SYxs?oF#5K7h83nJ@LYm%__#HFQABk{n%t2{(Jt|E9 z0Q?{|ZN3Qbh!u+}$)yqHWnQfIWSXuMBf#?V?ipT(Y+=^T7rcP{GinseCniEkx!J!22uv#=)HFBykG}B1?W@QXt-k7PdYRS~>B;$korbhur;_{Z@`ZJc zcwk5b-_*JkFYy864bEjDvAj;oP@wio3%#c?tO{RBiJ)gG0h-;PNYUh`x2UU0s_Go4 z2DWV54k9Sa*nvkX7ViY^I;%S(I0|B|^J;O1eC>-zbBf^b9K<5Q%%xB0oX?kuqTA{$ zw~4@<{^5}}?i-_HxY>i6HY=dl;&P7g5r4^o31nO1Euy2QS_}v=I~XreG-MR#SspoX zLFho}k(>KMRXj=^PNmK*PDTM zmUFV3n(czMLsVZeb~uf^x2RfJS|wK(>=%LZA_s_D)(ga=LC!MDcwKoGwY#dRpu&di zjz3@G3fisg>N4aFu32EW@x~15Ia&O}YUAKVwR{+`_BA<5)4Wu+NdsJDJoWOte#!%y zHcMg1(8d|sQ!K%R54D`EN?TT)lbRaOjHan=UuCR_Myech5)@VO0~h$&iZzo>AE`p| z(-<_Tf63nD{^b-eV4+>n>5I~$j!F;n5ql>)5tnRC)S| zRNJs5(BUwGqo!9b<=hlFoTGe$u2%%pMw@~{6c7n4I-5H7Skr^du^ie*1ow!g9*JpB zatO<})>%_TM{KaTP|fw#mc?g)*`k_2Q5L{T3y-w#GCd#b^z)-OJ+d4$_sexocq_=$6ZNo z1-kxapTV-JU{fX)bq2-L{LU?l@MWgS0V$cqPiQ@+Fi!aT-)z_XW{v z-(U?EN_f>6MtZb{+k)YQt8R{=(;pIta+u?4yOqInk>_S?>jTjpsMm>X6X^lfyV+Ez2>lw{B_EfA{RZ`Rxej*#0)xv>CTk=&7 z*Om)ah6pBY(R@nZ-pQ*^6~xq9OP1LECII0708r5FTn19=AI!A@rmt{aRB;2dP^Z%<6M#J?)(-?1x;WN3!Hj3j3i^)HEqY<^7d>?a{kFhB`@!1fE|9!AF4P@r_a z#;qV7ODN-+O+VLBtFCz!@E%4gK&}8##k#oeS`LVXukeg)GJ(=6U~oiP1-bSSm9502%k>b!|YQ*tKDu4*cQ4ydY?YIViLtyW5yMdiwcbZaBh+x7wEK~jdjEEall ze1)2FBuB3v;}U}^4vu-2F@=e%yJqRW(irLySy{^yvmA6FvMnXy>Len8AaY*Y&1X9<%%enp^h^QZfWz8+_MKI5Q z5!xe_62C#W%&DD=u{tNQx;5~97%s^Ha9nX>;#fDxhU{`Ach@4ANfSeMdYn!H5D2WP zW0&7B`5Zck0DHzJwfz48CBf*S;CO;ZUPoi53sp0SinFEXID2#od+UtTy8a0A4JnE@B4Ky+Q@-ANqx*y>}Lr zOlKVB74lUXNKS!o6GgRE*Ks*~K|>bhMPQGgiBIhF6RfgY#oIay32o@7*@F3eoB)19 zL=EAbKH1Nb?Re{Bb$Wz&?#glGji__>SyqMdG1f5^rQvfbzrQ7uhGbN@=5Ds&cxsnk zMo``tJAfX2jKxBq)O=3jynu#}5xrao{f!oB%lQj|TrbEYnwc9cbURNt-?@#h+S$rL z<-lQD;-JJ9%Z1f1RXrXhof}J|k}(=jdxM2t6q$vCpRtyx=tiipwbZM7f0(qCaTkt* zkrRfb(q3Ok^f4XR5|V=0Y#JmIw}R#TAugqT_=Z4O+y4OUb8JJ{*14(MG3Aylr?~2C z^DSg=OkyuD^%)ws8Hl7z!^;qT%R+kM5`IR{ro@3H4Rc{y`Malq6 zHjIw03ljBN!|Y9V@+ce!Fka8aOwW3fxVHHk#TA@>V2XPjrHuDcQJkf+m_JOa$oPS2 zy@C`uM{`0Y*ca0rja}Nx+GW;;aR)1oqjb%be>Kz_b7rORUk=p@A=Uc%9GwbVnw$N`bNNIh#5;ury<`NOYn24OU7qpaGkvS z9lX9rtZIzDR<99R2E5wn~Dt*F-4`>wi(% z*U4>%zS*TjPd$L6hKQQAc{mpJ@^4SvQHFYnr+w7QU0P&X%N9KMEkbaV8sLR;i|LBA zx^M9*Va*pd-J#^Qrvc%H52O%TudK#}ZRTC)w=;uoq;W(%g-}rTz!=BSiaI$PTA`?I zC7z=J3S;O6(+;xquXhswU$iD5D>w*toN)TUYCe{7hR-0d459UuQvRVO(!N5D7Rt68 zG=r8#tMd^gmQ*Vq=pzD$jaB$B+K$nrMUYC6$G`&T;qXi>Rr*NANdFyxFv|$U1FfNii?A7T0-uiTRc8X z<8`ZnP(#R3QuYl+KHOH;0mZ|ycgniHJ%eraWYDAjut!0G+M#fzzUv|Or%A#p{!_O7)tz%f!CJOsF=!aZ-Q=&Lv^d)OG_>U^$5|Wt>0E7Wu2l!NDx+nN@|V zn&t2NC?zfa|-E?{O=oG1$_*#usD2N0xkCvJi&7>qF#X zD)jJ`1~*(sWu~qShB-VWtpsoa1u@zyh_<8h5!2YN{y+`cuzZ8U&Rf(4)fNiBRQm%< zLej=9se|Lg8+qYxZWJZGV}hl$z}ikowN||Rg)YN3R+@l8VTYycD4?o(c#2RH?7hL^ zRL@9I*pmn}c)H7lzNueCj!YqHi|%R_u0-@jzas*pONOq}69KC7yzI}C4mmhlt8SK4 zqjV&37_HbSj-eQf<-qV%O6Q4XyLJpJuDc*FDJsLsMO-N@5m0cJ0@)2ESFQ#B0I{By zzoAAz{}u@Wz3X?j<9YSg|U1ohCJ2#3g!EI0Ihbln-2z+c;X-1#4|{)WmJ;3Ao~r zTU@mjRpd9|K4fzX`Pdc4F&4)kHv{QQ>zFL$Jid3S6^nX za@`1Bj=Rcyl)cx*JBQ^8AKfKhQQf&BX6{lCrNW6xd7I=1iir;`vT=FyCAwsDZmVs$a0|+r3>LSzuell z;F;7mslaxxVW6jrjm_0<5CcvzsIFMDkFlm|IV>g9)k>HOa;2EUsx&C7;%bH!9>fPU z3oRVk0hA5KF^QXUFI77M`iAWZSvn5XbtsravzQ9PKk^*|H)k^4%3E{n8z_V{AW~~A z49}95>YH*QDN(sar&UlMM!rocSUZ$ZhW4gfTOW~`{{UoTT`3{5_)f@xoDlsnLuU_j zRpP2p1CiDMm)r#xr%~ikc>K$I;w zcPjitV9~tn@An3)UDZ+J4yanovg+|Zei=e_jx2(@9WRI27*!hiDQIB7q$6Ql4xoT& zeFu!-MXCvRF6DTY#wqxcz7Qel8&z!GL4d{4ehnQE7{>q<9 z{{S$FnWbj&lQ-4@)k<^_MANCu_?XpO+$*t8#859k#M8Pj5q}AoN47Mnq{(D&iO&+E zy1pO|*(&cihwaf?Bg@=Wy7ht)=Q5yIc^0i(Q>L)$ICft?OK@oBVDe7KlZ%$3R|fDD_Yg%M)^7C^BuY}_TsoJ^*GPrP@fl3Y^T5b9SA&Y zsYLOB!AZS1g8mM=hEz|3#8gR9?Kvx9I8NoErN2-vyAD%-$apPF7T`Tkl`X@F>0;W9 zfY;e@uDWVFfkL`3>?-OjuW{W{ZQfx%M~-YLa}g;JN8qXYQM~|rcl0_!nuAy71GePw(X7rrP-U~ zQvw4RuHYO%WBqD|@khJ}7k#hEQ@7GP{2}8~IZnRJm{}21he;8)Cs9#en!{M7HrNFP z^ov7YK;^u6xKaYs8{B&Jm%s3$I?~qR_70Y`gU@Zbc+mMC-cGJj;i#hqW{|q!-;uAu zd6dBb!mn3mNA*>OLPevW%pjO5zcTTm@ldV{4xo_a0{&wJcAc-2lY}beHO1{mg$9MF zR22oMv9T8PF2d}MS7TzUI)!)}a;WAMP2ZaUn6!? zIjeq6+p9RZ0%(8O1t;Z{Z;i=O6=h6|el8+BU1YyLMjOLX&k%ZRxCk~SQBHo$d>pK9 ztX{^8kkPksKx0HT~iy4VR<7Zn?)aP7g<>@bUA!c) zI6aR$@?-A$n_GV#&QjM?ST*8t0;{+iM`Ot8QQ6PRk3#h$Le(QpQaq#*aX(!dj6!`r zO0{cM>LF02Cz#P$baHl%>|1qvkQA(3g;{kc1V;*Y0E`Pr#z&Iy3-A#qIo0KlA%9zzQE!39g$j$g!~b#A)@?Tn>hgsXy5r&aUJ_I9OJc)kMc1>)J@-}C3y-S*a~(^h@oJz`z=wsFL;^(S$8t2tKp0-` zrauAZ7*||>5}uiiD#i^|1-oY_vtZ;1)7Dsdy{D*@XhTyA1b(`KX}W!iPmjIDc)l#^ z8lF^$A*-^L;>_hrGruF?`49@elo+f|*w_VxgO7oR`Z(Z0bJkxP6IO zv*9#Lei3m{tnO7v3oBG!fVZO_%8S>ri<|yCh9QSR)N)$9*+SB?@5mW#p~PD z7L8?89YH=rqT8vPR1O3ffQc)@+;!A#9l%ZEE2U2-zBpI zv{juDR}`#y*u_(yR|jFC3tx$V04mQDoIcRtfEow-CA)kks}=zgg4<(U!NJ*Hf<5Ex z0ej9MvN`ny&uFNL#6T+U*fLA$cZ!tKn#HuHEUGZhJLK3@b1j@N*~IAXU`MOrm!LLE zv6<|nrfN7(Uf7EqzO=KY6IrNz!1ywH;8E)rLnP67Zql{c!VfMk#+(TqTwlX=@xuHB~>ZqW=q z2JZg=s1S`CFNnUd1Z`ryO8gLe2m)9tx~^do=_<8?4kM^ZQHtTua8e6Ipn-;!4)&0Ub3e}ZWHFr5JBsi>Y{{T^9cIAai-eBU*aXAC* za7|1I-kP)I8@FKt^?I781|6plkXp_q8mVA%v0LGUO}IN<#ht(ADxx^=F)YQ-?iZ&= zY!Mzwbvgn0f~$P>P$KH(Y?)9?R`D6Tcf@!th*9BQT9RXwuX&u#g9E5ZrfzEBjVag2 z?ShPR3DzDSA__Ts4}iboE^7As6ioRGR7+>-R?xd9lYpB9YHW`wQH&peHH?daa4~+B zFCdEHTNH>N5erDgy9b;jiBZ<&l`OaVm5W&m;ED<%{4Q4MU&M7O`k3!De&wajIVONU z{v+me4fB3LplTkpfVs`vu8$*5?X7t>9UZW^)-X}+FC&F3+KiRe)pG?A_F~E$jtMA0 z$-p`#4+IqD!sL2FZF>&TIzl&+%_<{n#9pSC+!Y3mnlGq1bPbjeZV&2RQ`AbeDfR$K zjM6p2F<|H+%&FSoX`Qj4z;rZ1X7H!|jgrbenW_|PpRih25yLG3;#Mh>S`vVzZ0KLR zF9f3c?q~P+h=l?BiJ-V~oQCn~j-a#x6&_D9TPu1F;#P`fynhm^gN~yqvJil0E3RN# zYt(8BzaarmVpX*AHSTK)fsNl#1Uc2hz;|j5aJ6=igGVcgm=qOcOZCIPA0e9Q?r3a| z+x|*`@7b7qzh#?g`2g{itm0u%J+5OMF<Z65w(7ikoQSiInms|>ff$-+de zg>M7oq1+{X-xjU3VlrI@@g!V*=AZn)j3aZq3KG&Q}5vNkg zOaQ~=0OM`y3CMyp{DAE^CHJXPF97SgUQ5`mUw2SSZx>Jtv++@s z-~K^&tyxYEWtryH$MqnPQ-n||1Rf>TK@*brpE-U&2Djuf0w7FH&-oj8{nY2f#X>F8 zoD!JhGBdH4kO0qCFsjbdnUot{L3Azw)KFb{-liK(wcpVSkvl(N_?)70xlR1a3>*Go zqs?HdoQ=VRv`^wJ70KKa03bKEE4u2H>^pc!ezDYduf%X0Te6!j&5!Uc-w?n7l(EjQ zS2xv+oDAya7UnY5S6aY!2;10;+{U(1)KwSeDT$Xd0u{>!6g6G<2A438eocKg>MFF!X{$siJwy{I z;hSr*+1Fi!txiQs6Q)r`zTjO@js8Yi_en1iW3T|P%}dd}dh#??KFTzF$!!cO5Q9Ty zl7K?|Lqeb+UHIZ4#~b;MmR9p}t$F(Hb0{P9Tx(z4$R+;(6$f4iy~>Ri1^tvj1*rF8 zRj3C69|5tQ$~}O~VWOe@!MZrYiOL4$)Yn4Bh{Z+b!YFE%9>%lpb2ldXh0qD)5b?x1 zF5SPxYHOfh5VX{x{J;Q;om0M{Ca?bhWwdBNFg6w)nm2zk#f?rx{wf*;+R{~#PuUf7 z$R03wSYS|BC7v7hWi0cN6*$OXbP|9sVy&O1qAJT18JtZmfpnIsY2gZ@0jhSWfX>2x zAS(2rcE<+Vr+B$stQ0Q;CLb&$p)=ZSJX zpWNiUWkg)>kVd+i65}Y94;Kopg?fEAC_a~jAq+jl-S3cE_sg(x)k3xlN0wAe=5%?) zD#G`YG{Kk5@=p}YAFFxutzbEc zTKXZi1zf*pA=Osxhv;5k2w8)GBjRVb6xv;QWnTf^l%Nv7f_=1t+Ef8TxJi1q>NHmG z6GHNN86$Y}7_5HB;sPZXa~oW^H_1}#nad*3dk~RBn2+pzg)PA>>EVZ$f-$iR>OV65 zX<;>5r>iXE0aZ8czdEkq z@lv$7u8-!@I@b3Xq)c=xUyxT24qIV4tob;Z`ocY^s2*H#3Bhup2VfWT(-O$2+xUyg zY7t*Np{Ho9_7yv{iUX4W07!*z>4!E`>^*rZ>fzuv&~-kM5`%5YFoDH?5G8eA(J+O~ zsEsy;oKB{~)nn3^*fnuZ*De53ycvvngdk9rt)K@k zR>clyFKNV;Ke&L92dV3jX*O+}%zpeN>H?;57IhU9FAv0KpC(4P*sdk!MWq#0kVFch z{-dn&Ty3Wl_!7eWzhgkDyv`bt0L6>L0*A9p)Dg)JI8faw;;HbEj}l=)C;k8fpq zcxg5_KcxG9LM_Ywp(r-av=x=BGOg=*SeJLQyOk~5&5iNS%4B^?9gf5d1a*>GrL%8cZcfVY~BYVTiRg2CN_46wB! zXufL_)#Fjv;XRAQYah^Z%6NLIi1;p7@G4M+QQI261It3Gl5*oR;-6HqScY40B+eC zqH|2R;?~f`0goE5a-!E+s36W@fSTFO@cjK$Y7#RZHsyI@35Ho~)GFnfv(3B)+J9q`NLahvcL8UDPn@SjI>lNH|PV$~=at)JKF%l!J!n#w8R5Kxx|GR;8+49+;v$M&-8GeNVx65TU+CU;7bH z@*`n>=Ci~tD!844@VLb8p;aqzpn{Jk)!h$J=f|)Hriz6XsHoNjt|kc4(*PWo++@&R z+aCa}$__u#l$|x*%iSg!8B@K~xjPjriCGODgbRnO0_yXp*>_37Wb8NOYZBMvh$n@M z@??*J5TIcK#+E9u;!;XAWCd%%Wq{i?NCT~jUxpV&Rb!?pSfxAe4#j*YlP4~D2Jt-$ zgd+!H;kz%ag~x_V;A^fT!^*7_5Tr$=MXx2>EknwWuxTycDjm(KLjp6oz01+X72INk<;e9MmUoILhleL* zcm!x)Wk9mZlzO!tpRm`0%E2l{PN9roD@&Ekd87M?3YO$HgYhcD*Sm7e`n8uSPszj) zl;l+uE99mMf9V2gspqQ-mRTi)NpxO5={@?B>+VE%rB6II+G%Vf@0PgNffL z9=oYzh0@EG7un1eF#8&uwp(>q;S@{3I1uDH(NENN5m~1eiYZ{AFCG|V3Rix?2wDX8 zIDJEGws7oOD%>h0L=Hv}e(o!M{{SXf*G%76Vbmomil`iWIuH!4e^W}=WnxOi3(_F` zFUj&0vRrIthb#b6tF1)P#J*vos+Yow=FVVi58M$4hbXsjfmvJ^U;tNnJ^KsT4H?Pz z*dQf$j(+AS9itf61vSsef%ovqt{8w9Q2RDlERH@$X+Zv9wQ~0501rDU3PZ9jlwWjW zm+}NfV7DQbzp7vNH^<=?T;-#<^P;amu{##7i0G~lrAsmV8IY>75IxID>ii}2gjIP3 zpx&+$8>64GL!CwX;=6_uYBT{~VZi9|unL0jP=q!``#qRIHa}%`T@}!Dz$AnR`}mu| zZ7c(iJ;kaw3m}w4Y;rwATfFh=Ej41wP&wu)Zm}Zi0QAA)*mcT+ZC~7K)LmKf3v_*g z*7!kO0bp3HUSMz=@r7wRrI+%3N1?I(BYIcVY}Olu!l~w<@_sG_*|5Vp<%Q6FC2*Bd zjelc^@ynsiM0L0gK~J&pwa>%?-5|7e003Vnv@^SH$t46(XuPCNYPjgZu-ey=i*ceO ze86GyCAlrEu^u0+9KwbEAz(E)NuXP-=EHBAh*~1TU=dwD!~m9gC=hNgm4AFj9Ey0k z;y|1*q7t6TTdPiMKFxUjiX?mJI3rLm$Bar4w`6-;tELeXdsr7r@c?lU#b@Kk7RdjCy--ot}G$U5JY%pk1z*WFx$(g*>Ga& zs$RgbB&9`GzsV7Ta^{B7Emrd9T`y5vNI(G6ypX8>07**RQ-Sw@z}OA( z172h#uYXIIIyrtq`Z20y@=Mq6b*#8Wv{al2Z3Pf!P1MfOtu&b4u5b-8EsK+>YW7!W_Ngn^B$%gXBX;=HpG5uNwlI#3+`g4z?VVyjv==@(&~5GR5k; zij4DEET-({F{QM-z{fEi6dX%eI*d1I!7coRAH&G)ba*ieG`E2gbi0J13nR~7C#mu! zvsMM-Zm1ctksAdvydorIpaA|Rs;_1BYUf~;F~j8Ho|bKAZ4Y%6kcS4%fIUzBj5eXj zloGa#{Su`#8zVVQJ8%G$y*!#gmRw2-6z(-z^~)CY5`&~Pf>WPm)v}HcS?Cp8@+eHy z6+-@8+LqhuAZfS^ZNVDdCHf-ha<*97e+lHi0u-r!k}ClHqu*|p!rRN@xr&FNL#4aF zhzbQy2k`<~w}pFjLpd=LV!d_#uw+!89S2eXs2z{Jtd4TPIl9s8#-E9yvLP<@uPa#~Ue2RQ~`ZQH|#i0Pgcpt-I6pFr(xiO4Y@|?cBJb zZpbWfVR3B}4jY1v@b(CV6WAi@j4&~9V-aSO*5?y(1==$yqw^PgXak9#32h;fGrWLo zD!Yp|(A+||5Yk<6g4>FFCblZC$!WaSK^khjj+AOGXoJM(7|P>;+~0@sDG2Qn17L8G z(`Y$d#H6gbYOnU@@D2#i^3}`?1AL)26;7e~Q;)@ z5UaD#AZ$V#@KmT>mpwrcs$~-P?F9E#NXbzI4!tcr;Li9L^ zkYy(kV1V`VVA|N9AmD;pg3G0kkUdK84eA1jgy+hfc&SB+<(&jb}ib@mNyHsFEVfCm?ly+F<;MU?JWg&+R_ zRIOFg6P1+RR2C*_>}Zkj)B!fHV-z*h9JH?Mn59+@;FP#2i);S?608A!;ycT70(xAzn%qA6*?WzPd*s}G0S z%dUB%aoXQd=302DslkpwytwLQ3%vFqr(Owy2 z%3^lIe|?guR-4#ezB^%{yMN5fPv$BmaSlB@XFZn00yN?x*aprZy-ve>*;*&fh%McQ zw~RH5lddD>ufZ^B{Yx}ChX-qzbv^6>4f=-_Uy=vfsFpUr6LM(g7d5`fUaJ+v79}Cn z9FUunbL)mOlv9XC$1m<+?FKPuIv=@63LV%10O|ObuOwJ#bsI1adGTREqO19o30fZ~6fO5UB5_p0t!{wd+(aFFr|K>OMdacp1oXD&&j79tqE)(o z$Z2ZdXDW8>^&T%b+}l?8`x$Z*4}%82~U2;b%h9DRbbm!dX{r$|&=pJkUXNN^v_#I8w_txlE^c!Ss{aVz&8 zy(!!tmgHXGx?;hN1B-c^7T%z|hl35e*9z_)T~Xg+NjEb1B~Dvvmg>95zpoIXp^jNCwn(2ijcEoowo1a_qSBid0aA^AiTC4l1WmNlfNNv7KK}d6O3L!@j zyGqux1qBCaSzHdV>Rb(|K~RBeyCL6%A^!j+{Gh}eYnV{lN2d5Y-=OS zxGbDkXV_!`J7t(~MyQ}XsB$6X3S%Xn(&ME45E7U@K#jCKSCYc$?l_tDC~F>w1Kybh z#Gv8}%F&5H9Nbm|AZfELW!lQPGQ)X*RTZK$DxW2WYs7s{v2->$WrB14fk5}RRZclX zYySZ0I1>2C6xOZO*YbL`r5IgKGf zqqs7qtL_OJlq%@bC@%`OR2U789+R7b4K>C-?KcLy6;T1m?kxP$HCe;{K>(|M%5Nc% zG_|7{m#7=%8?PcQYfT=qp&oDHiiCCThyYz~#pP=G50Ex;J+Q`^RLfakNX-qv39#a$ zUbuBta2H%Je9l34?*!R)w|9X7>S0q2pm?@5!FQg=PCtjRe@@0Ng#oKtg$*gJ?q(>m zi=}?TfD7^(lmbzD?Rgy{r0jDHf{r)QE9h7wkP5N5uNux!uz9$BkU;kjAr^{b2V>yX z0)!3`HtR=z!pcl?L0#%EDL%V${{R73Xn`oO!8h28w5T>y&&hTI{>(l>J#Vu%aTi5$ z<|YrD9>K|12ue0pLy`!DGFy34?yG*maAs$0xlE!eqQ0_<$NZW`p2asPs{Fzi`dlx} zTns{mu6Z1=ehF(hwZ;W0dSwy+0Ft3iO|i!Qp{g7+cI^){DpO@QfBPQwBoM-7kaRU~ zFa;O8eT(G;&YLLC3@4HyEuB4xNkB4^$4G&Ut7U?ezA97Vb#t02b;L1k-yotZeoF+} z_dDkP#o%SYOE@wLBg)F^04<^%jc+iz>v-72QB~g(>MLfJ#EWbE3BYLa#Br4812|a#JA`91eMh z%m4>M%c`--kES>wwb4k%-61W^J3_UyWv8#Q)H%(1vDQ%b?slax`iqb*JcnqzAFy>w zC+=d@tt`9>esd}U6^G(km9Hr|Rc;Al8h|C%lG4{=_<$xjmE11_k+PmD-wqWhJHc-0 zmNEbr%k~O(@-@3d)IyD19bEe<^kkyZe>j3wgSk{z{{T{;-#CyI03Xaw_~~ zIhw;WWT`=6><5N?@p(V40P7Y3E zdI$!LRv;XyX@N>H{6Huyf3sH7p>3UU#1&=#0Ms3V{{U#h-=SdO3wwD7BabHmzB#FO zEXX*@qVgr{nO%DA2nvo}hIL_EjzA=+*<4*-!~(5AFac4+~fY#kH1e8fZuu zI$g+xDR16jDuDjkOjgwTz^(_#(tskU>Q+=7J3hvWV%lH-0Ek~=4gUbUidYZHecZOv zRkw$Pp$7Knm`y@yzMd*vl(UR|fO^2w+Ywu9x{8w&n{t7Xbt`cY78|Nj$MG>J{{Zz% z=|YOD`7BCs0)U*+^`(%Vu{Fi}06;^3lu#AAR$D3rR;~TS)n7<%G|Q=xRl@=S!N*XB z`7n!gRRvyH5u5078oDfZZ{)O9{L!)6IQ-;w;u>yR0KcB#9|xqyF3g)9D=w8IkdUGb zBL^!|DzG0GZ_?lx!*K&bCp8+7;-DJS_#hRkiHCOf%K<^*a*f^Fvcg?KP(PRw@5q93 z^zu9h*+qdpY8n;EWU$NYnWSZ8=mFt{xUtCyYH~ri0|0(ub;j0BsS0hFh318_CwNMCO=`u9~Z!~w}5DRdl?klPQcBp^Y=EK1`}L}(dsj`j<+b) zl$^oXKv8MccX#~Dt|k_a@=;ROxQQ#O#+L&ISwq3(K_oKzh61oM0^#Ky#mhxP0WfS_ zKO14@U+T@C*;rQESanj1>e9_cm^?*N6HU2(ODe}&`z^P;T}x|0;s}4`6w&;iV<5NG z0L8EB85~_?0H)35F?XtoOD*J_+NkA}T+>?-#T$l{-(Udjm!Ns?F&w{f4^AO=776}B z0mj9!a{Q1VG3Ur4@gBrA`Gbd!<&@EP#Io!bhCChLF_7yXrUE$z;jY(EEGXKg5)T8- z#3lAlg6hb=YgZId%G}}t0A*|eLedQ&WJdr(!cg_Hs0O*nGfjceh@}Gia~a+L0Eu~4 z{B;__x$N!~8+rbv)&TYFq5y)wmRL34UO|6&>eftPkGXDSv$kJ(MMye22<^CXb2AoU# z7f(QXfr{sa;tppZzGb+DX#diyY*H~C}p~-w48a}{kEgdUmYMH}(oWQ5{L^N9A zG@$3W;vjFVy;tox4g?Q$Oq%QPPhKglnkw!TTWWLc!tQV-c&mw&1@TZvq1z2jS>q~4 z9Lkkwc@JeAUOh(Am0#q&tOr0s(818k1qBYv09NiT6r^H^m0@*zEPP%HfFo+!g@{WP zOgj(Vy{PT5SC^>eis2t|8C5Q;WdOBGsAP>=3CFuPgKl9ocraBDock0drZem@S}!;{ zgO?kxNjCUs96wPl!=`25P&j~h-Z&+$^zEsgk-lSw)J*bNroZ7nmrVqsv?dJTvD8A^qaIx$q4E#%ty8$J-eka~wruABXx2asEsH6M&v<| zNmWe9UeB@6R-C;`YR1&PtIQ32E>@4~RTq52t)i1*e479(mzWczPW>lc+5SPWIIg9P zuqtv$&C%XBVLAg}AUlwjRwwZTM@C(MmioVEfc!y$=TLTJ6u7QgPzpxha0g-VfKpZj zEKSclmt!-=0pHCaQH&V3*WT0GIgctSlSTpdxpb)BgzM{Nj<)681YCD%vR0RVE6W`1@ur)~? zG?t{JpVdJ;{X$Sxu~7RcYcCo2lmp-MG*&N=jtnby;-g*y>*S+NW9P6zf!ym)#5mZ} zc2Q1=)9eg0n`@Q?;#fWWoFOeNuVsLC{ek>Kz^Q2l?QhDQ!M1<}w+6U{uEVLX9zdAN z+1u+6mrNSg6zCKs^8+EOg%N5f*lhXs1qie<<8Ywf2|-z}Wiv&bk*Zyc62Sr2y&LN@MPA*`R7QfalhHxhz zA}HB+LjhLexVQ(RH!RtC>&NPRj~B89*DE{KSn75kkKM zyOo!!XeuKpu3pE&yg#vOf-OA1VnH((sk}juu_(CdZ#(uF zE{VYNIi$LjeTN&A;y*BOYc1sXrXte$?l}oR8KPg< z(lNk~t++!zH(-uzAcG&<6T#2*2A+jVE`d~J0t$2hq7&HBWAYPk440$;KFn;`-;=Wy@17FNI6NSJOJLK0vWhEB% zZ3FBuGAuDG0xSUj1PB{k{f)>x zuz+g4HyQ%^e3_gFjOqXat&G&TmD?5hML3MY6pjw=R*G8j?0S)(_0A|DQ}#A{D8C{j zhTpVdPb}^HDk+0-4799sj$oWFhtHE{{ZaSwVa=X*LH=U zO9TdQQlI$59V<79_c`aQw<)TsH=>Nl?%k zIR}kWMk>aPn0gUso(lL`rG=N|Ez!%l*pK0F`2;kQAq*F9G?` ze-hYg%hN_~Df~ed(~s0BLreK3#brwrAP)Kb$58@4M0A_+a$RK#sg%0t2vIZ^*|H-5 z0zO~NLSPccUHJ;Z7x*_cJgf<$<7_Dtyg6`?OL<5Du{hEt3(H1P9ETMXIIq>3?9qH* zw-qfc7PKZv*0~r?Bb6gHHC&q+(92W^zL}Ay%XuZ8K!0$^xD3AGB7>9#ZK}#TjrZAF zpNML6T2bsw=vJ4mWxrP2PUwymyEIxo@>nr0nqn^RO9F#=BbuGSt+uY^2L9zv3TEhv z`wA>;m4FGloU?|+nou2*>7c@{Is%cMBblMFy~>HmZ2V)Hc2cq;`wk;`j}jTq&sl$E z9DvKLSU?8fkjO(G7agjDwGdd<0J%U$zc~(|yS*YEyVp^zr5>1#mbYu;^EL+XERQOu zb66B!+^TKC;&Qialq8xLeo9m-?75|n3oE#-WNWhd#G|Tf$<5W*3;@RLmd=~mQYzu5 zERk*vej&r!rjO$w15I?KDZHFlQBQ+-e#v+PWpC}=5g1yPEoCOUlxd^23Kx&W#3|#F zErohDq(~SsocR4kX>Z3F3*WW9cZ-2tNN&yMA#1l>J(HqIH@e6w3fjsC>>wG#f4HSn zXB5ByLejF%8*snp5!tI%|mjmA?g-X3qhn+iKO9u*uv7 z&*YAmQFA~xxu}dHwvHl2HhUAp`kq7%<0*s+aeol#pD1Qo5gxEbqiuhl8Fhn`{>5aai}$%``INQ!6VRY3sTJKXdWMiTXup4{#S~;4XxCEO6+|JotT_XV z*;ER}A@46P4n`4rv|b&?rZ;q~=G~M=KzFew8Qe70yj{!LQvU!0)GwuVFjeSr9r-+! zxJTb3U*vn3CGwUKsVz}TGo0TuCWRp>fntXZ==~s|!2bXVgsI(J&xtr!iN8aSVIBVf z(kPXeDMsD-5S<2D&+|FQM`!rBqPKOGm4epcg^R7k1YcaRsfg zGaz~&AwrEJh+-NKe$C3Uc^-H`V^5?qT99_Xbq0Xr^?x8Wi1gpY51p!4L<|=z;T_hd z0;8P)cj*5B*`ap-059SL%AQX$tP5DL{FML|&F(;}a{#Csi?rp`6j|UXzC@q~<;pu- z8_wZ}qh&sO4G3Mz{{SQo<%XjMG}&b+R7(=Lle}v9Hi=#ikrWY=wB3n-|wFNsILWq*=e(0fi9#>P~70glvr!=dJ28Pw5MK!a&rIBlEUWlm*;I$Tj z;up^_J4-_Hvt+fa0$pv*hQ3EcD%a&OC=$(A&mm1pmfp%Jm906L>7(;DhV5riX%|Jl z2v_HFC_*9&O_Td^IAK)iaPfPDf+*99mny+3Ej05Eww2hyiVk-eTi$*Q1_axhTSaFw z_Pt)#UTAP6TWQ-%ZOukJogv$g{J;Xo@n{vQP&J1Ku&5hQX8vKYerg*^m?LoM`4qUb zkr*_*lxiUlVM+1p4L0i=(W%P-p;yrhPgfN(HC)R##5WJwDyIbOUkuf3_F3y<{RAMZ(&1;Xe^u49t5Jj*+PAHE97)s;^2FIV<&Myj}9BNQUFH%I|Sw2QH)Ezf^)YCt8NM@xibVSU9+HEiGC zkX>p4HGeaq)k07eSxLm&y{;m%9QG;ZJn}KecPQw$ih=xC6A?|fT}LYM%j6iN^Deq` zn>G61r%9Wj~hHui|8^JB~G-K^mm# zk2L4(Q>V&b_bp1ZL~OMQtvNbTde|j8+x7)CP{s?e-s&hE7yY3@Iadg&#!p#e~58S8;!(l8o*#7{nnle{H>KK}|nkVF$FHmA%v!0C^Uy>vj zUUXv#N?iW{9|#pBP++6TDOz4MTu>8Bqk$?5z)U38sCGKJL`|z|a07L5Pzy*Z zrRU)&R_8$O7KE$z$_D`JE>h7(nq9^#roM=S0WH|+4OdNQxqj2T6|A)-RX4=GL?=wI zNUgOtIjU7=%4>v2OR{zB880NQ4`yYKZ8C-N=)p5Q@Vtrh&Qxmb2}F_ZNxeYGf3o9@se_$^eV zWcF)w<0k8@vY);=QSrx(D|f0IHW)G$qCXLq~NGBWFZ-m;k+T2rFDl ze@wh9zNg38NK=>vCR8unwjoFIDlM&)trrw9GKQ=YP?TpmIG}tmQ}RQ{8kG!G+wc}8 zZCoA?;s^${Lr|ct=*~R{cC!0qJE8vo*<}qq{{V0XwzJ_F!b_!hC|NX9zavj7(0ukF zKj=|#PzI0kRFnfpQAc9o;tw)74khwN#IS>VtNDGFqJiM+?B%Do0vr)IK1Hjlf{~`M zVHFs_LB@jZGSHM~AHTBfShM_NQB4gv{4wCKVbJgK1e7diKVs;l&@T+R71XWBXb85Q zo^hqreCrGSGVE33U;b2oKn^9V6Y~Xf2l)>-eQaxdbbBqKPpqjR6#a*nAy~%l^IS@| zso53{-y|9|U&t+xN%sv}8ul$7{Y00rlC>(KR=-l{YU zZ`o)XMq@R=H{=9-rV=cL#a z4dx(*k;%jcXa_3G)(DbT2aZ4r)3mV-A0zppfJDLT+e0XL3Il(b zuE{VBPq2o^vU%inq=JuefQk9k3Wy8jUS!V%QG6!gFKOIV-B{cFh`FV#Q8^eq4*sB2 zuN%8|2)a|Ad5a`yD98XRw@07-lpF@$QDDA@$dm#Vzi^V<3Q&j8*Fpz$v3=@O7^PUj zogxD7C5u2fQXm%rr=MXVvMwIroW~&`lP|7iF`7RYlBv{f1jcJ>*zWxdr2$?*OY0k$ z5bU@Oo*u_`@O9iEC@;=qiK6+A61zQ>%VESyq1y^wv zbo(52%YMXrw@*lo@G0VKLVNBiZXXF(n?2?YJ~*spQkrx-D^#?D7e%+%@if1NQ7ou* zl2|1a;fSmX>Ll*Y?l|49CSlwDqqOF`Acr*9Y&0AfDI=uV%VERs{G0|9@{WjQ|{11 z0-CpZ9+X>~feO3jnAELHKA=Tc*D#p6hkeSBg<}5zu)+e|^(IsfU_iQuyUaxjqSNW-xAwnT#M*)x2 zI1FifJ!DlyZwC2(N-e`0xx0p`31BXU)VnLly^xD}FBxzNW%0nlLa9k)iyEcl?0+S$ z?qgYQi7Y~oPN|oj9*!W8#Tc*RY7sx#LuEPgFghLa1-7dv;hY56)j&%^cOT&M7eBAW zSSW>z14gc`o%rjXrAL)n1+FJhPM6=}R`_H)MD%tOWey#(ULw=%gdVp>1gK6$n`1-F zOQKY84J(J((P4a*%uugS6&{WJmsK=yD&?o(jF-1+@Xl*>9e_6bD3@2%2DhQa2Dr|D zaaU84EuzK35MLy&Vpv`-jEY-vtt;+~7Qacv{7r={Qs2qkxx>Dd0h=!rxPwCdYFoc? z+?6cj0XAsi+AIimr$4z>x6XprJC@$k4Tig4a^$K_2F`I1Vk#FNh!G_&>=8>7n7oBf z{=gPN=z(a0j=5tS;P=cn?YRD z@jFwnSbU3zpdO)Xt(YnNKoWop3i!EVK(wsi%r6lUYkkTTjX>dP0jhI=1{-Xk)sYy_w{^G<7nwBDY;hWaY87mh)##X2- zR;7#bXd|86F7Ql&bP8iyaucyVm64&;1={K26>J_8sbNc%vV&ZmOjM;y5VgmZYj~)- z{B$La4#V77S!_Ds)}JOt1pCayMaiA)e4EE$@#M&@1rmb9c9cs((QZV5ryPgz7;9K{ zEu(-@PFRPN&49IjrGc$_f~@bjxvwyo4s0wX94>ExbJ1Qz_7}r*mddP$CcO+=M83-r zk*b~j&l;B!a55QC%<8PGfSb=3e^3Bz;nVRo&URGMvCON$eQ`1i2X$-~-Pk!2;qop6XC>o91mdo2`CQ85v z=h*30Z$71kJF&C$mMT9H-(#ZT4L^tEYJe?vD~&F@a!@2ic$+oovQ!2Y-*CW=F+7wj zKALP0fGMTP7cmrvNc!=`*D)5=*Khz<=W)YKCI%JKN>JjQ%b?`&RItjY@f8Yn3RH=g zgdw1DUr7&D~Y=6Vtvr%JM{-Drpprbp+yi*n%V9`Pzs2fhdnQnwG zn=$L{C7!RK$Ve&gGf>%EPhjei->^2p&8%pF!~`e{1#)uyf(lnH{{XOEfZkukqtJC) zu|@h9P`O`WM7dxN0d84hX*hl&&{BY*4`R$^;hd=c0aRF2X?Hj9dmj++F>Bey82$bx z4Jxn8_Hy2q_tQ;Q#>Q5I0qTVIHBHaTpg$Wq?c zJuw2<>M$zSKETs=aSKp#HLr4p?^Ylb@`|$lz&=lqD!fnbAz*(nWe!|NQs)Yq$-0(* zF$_%x%?I;2C0ubQ(p_#79e+&7Jl4&Of`Mz=GaUB@kKeE%P@HsM#Nhz01rpX+c5IDP z&o)6oQ89$tuamh&01qRV^8sKFK0kAOfY4=B?@X&86<)=G`-K5pqNULg8>w@d{cqbgM@f*ov5QcCG(gs>ZJk)&08lr*>Rv%q{YZ*!Hk5)k%`KZqTeadn5Z z?@tg=^7DPf4SGyKP^1w60i*jPLN?g-lrmm`B;x|c9T6_21+V^1^5-EB{=z`9P~jV4 zZuwp!C^-^~-yO=|5gXy6RquRD7~5PB3KL|e?UhwE(w;?6ZxK?Q(!X<0Bi-{lA@Kl3 zDXlF(`v#uc<`0ZDNn?jY5FQG8SS=`-s6fT8sYFHEIstF$R-*mK?rl&#T}q+HsmvM$ zuPaGo&b(-W+pz7T1x!4qva5^y@fc`a-jd{6+RYGe9+R4wtNlDcDCVq&kOP629Yy1p zDe@#hCr(QaBJh^i;uT@+uF`H0%d{%0hgUY~yR$mLG_%NT&zL0`8Iu%GW4?P#D%+fS-sG z)i}7@1qT~BTKz+@q3x(lxEu?}M11hJERKkRZMbnNNUGAzVbP|w#8{)HekKAU^Xvh@ z%Z9aUs_qhlf3!k^gzm+61!>8^tMC%2E=A=)Fq$}z$Wuie`u;D7)nQRlE5b z2X75^8hF35;{0tu2O`ekE8B2H6;86I7qZq}1Fv9USC5||oHg2ya_tL~E*u$phAZT|ozx&r3ZGO_1_V8?^xDY-dmhXf&`Vm3aIJNPenm?-u|V^j&) zQ*yKw^#1_aK%gJ~S99P787>OF;7b75*Qi*OI3MdQ*gC5Z*R~ixh+7dJcz^9FMm^So zCPv&ic@l<9H~h1K#+gC-h^ix!KB9*3KZt^H9tYR#T30OXHf z%e4?lHoZy**uYtSA0L>Sz_=ee{wFG__!ckbX+z(i{vx_9$#_1%1q7C!=N6QI{lrC5 ziF5cq62yh&m3)F&$xI%%_M*n4!BV4igro60%9JHcjR2tXk)MGN+;!}=H4dJ~lGXz( zSW7KFMQ9g?7wlhFyv9}A&9HPe`HgTshf<;|$dC~JT#m30%vfzmL2fr^7$7-+WN;0E z->~!!y@r}vkK76^Z!#j{VL}c%a9aLY3s+11RSm$Y1)UnPJ7tr5wtZUxgENfa^pXxczgR&P$6KW8LN4Fz4 zvx$5~^(y`ZUIJ5P{{YzCkFVLT;@+w3t6vE5t=F%I;x{LXc(3&k#=`sj5PV{AFnB$O zK@Bq2`M3%QYl`_OLE$a^ptW_tI6~A&wYJPf)}n*RSSWy3@DB)Pj>*CQ0I1gg03ZYy zh8iGi;C`i!Iq$BA^g_4-ep=bLm9o6@{{Ubrlkn}inw7}{O(=H|Go3W~_?7aqx<85h z+-73ZK~u5Y+*KQXMI)og$em|wut!)~*zPI^;fS?oK^RsF>MojZ*eC|~Z>f>^Sqk@2 z%s>cV&caYBJ7Ct8>=vgr#ml9geTdMn#1I2cKF7;H7m1O<;#B#g$2@^HvU-J9S5W2EksZnuhv|<8b$rQ ziw_%B56j#NQZyXDPUmm`0Fw~YjVt+&rcGQa#C}1IZTnz|`z~v*#44r4_gVUc;x%=h zKd4alHZ(2_jBRbAu>cKKaReH>PhL!FyKit3{vJT)#*h0E%L$7$i)U;M4B|FlsBEq} zCHrRzE(o0~NWIdB@edQdN>X&@8?F6V!Ct%(0Y4OF#+SXpdPXiJ4%d*dN=5j(OALak-`QWF^~3prrMOaz74F(aHTBcj z+cXD1Wmjku&Lv9oP*$;2;>t~!Sm#!}zyg;uA!~XB0B3b;3~1WqWmcTL&jvTl+}nTb z7_b}Q*+nXf_BynG5fBM)Yj`~$N+6bD4I(k= z@ldoUc)rW80lHVYdYk3K5P>PD{Ef#2oxacBUuI{jmRpzH2!-igOE9!fIE>^TkPcep z$Cg$B%!11IRl0y6!12_u=)YwgUv3R@G~?7XxB2-L0424N5jRyWo;#e$L(3Xoh*tSH zQHPfVXs0+3QU>$FKiD!kU2q>RBUX)1;0WSchZy`ll!JF8YWz;c;eYvzDvRF)%_{g7 zqQU}kS~8jdEy1a$Hj^+wat6mBsinCug)c7&M}^EcJb=JTzRKmQhEOs51RLG%e4O^? zJxd}(fyMn|PJaV~@hgN3w9@r7l8PvGl?WKsVfyWWh6!SpTvg?5e||$9qqhs(LXjxz z_ZSbL_26{_uQWVG+K=+fUjupqSryx(mR=vJ*X97^YTWZtgM>olmN`>B{I zdPKIYTDc%?*7)LFupM50;@;0MACNRpOCi(X=3pD!^Bk(sR3ifA-%x-^=91Mg=c{7> z03sxIaj;xd@lh=3*DDS!x`!WZ!dKuy4z`Zrg28a=4pa_Q(FzWD2x}?TF4;&PfC2q+ z8orNQ#|2lk)%A%B{W&w=KY|}JcrS=sLYwi5P*(n+w;}LwlA}=EhLglskFXI=`7Vmn z%q4?S-la4igRJpT15iwCpw7R@&ZMguclP|2tzS^M)p>aE`wnVHcaOwQ2;{sUVFgpQ zgIhH3i-@J5(VhH*(ENLPA!-_>ADEo98SeQoB@O8I6$_PjU%@%RbF<`FfI2-HmnyB= z{#}18MrwsU<%wYPy5#aukb_6&;9+rF%@J-z5$JOitt!*A*RuDNUY?+}SC8&C6Isrd z!cmEEG-{q;Qf$0};mMVppWJK@P25l>oJMKOgi#h%TM#M3zhQt_RuJ()za`4pwNobU zu2lePSUCXdn1vs| zCm=ZfUbPmY~mWI~CUz19sMMOJD|p)aveEf6Q5)s{TsB5}AQ)%oHu)AKd2q z*OYR(8Uc#{4P6rb()aNVYJ)Fw{>l=E2dKicaA2GY zN_Cd6Zwr$9G+XC{qGKR+FNrZ}Z-gdAH$#%j1v!0}h`WOAfvxP>F8dVgA7JIPOPzX0 zF#h3tfo+Y{5-1oxzQNBd4=;5nDx|26gFZfHz+oCMT8(~%UreA9w$rwwS^=(m@)<*C zbDo&GG9o-#v3a;ZColpf9=w+zyZ)uJwR-0JSGX; zHBt>e!Ew;l?q64&`x(6(e9X-bRJwX8@>2~wY_R}P#x@`yC2sI+wexQ><3r>|2;E=- z92{6IuZoAXLWXO&Z#OT4zjgqO_~d>il*Zs-eq!bN7BEsD&`F!;B9;8gFjb(vJ;NM1+#55mcA%BMRZ+!Wwoomr8Pl|#I+p? z;)t|bYy8a@k$?(8+on-c@S4A|)MBq!hjy$qpQQ}EBAY3WYeWQubRECkAVf++vQ(jN z&KOn0&|Xil)oY1!2;K{&wEV^a2%olEy*M`FHjm1J5`nSM)ulB7gN4Kt2mb)OipU_s z7eS=GvFS&V!3+Cms}#77UR>pvLj&srn6zIHgynKu6orA(0GKOkU1?7uIAm6su7_6y zwVcDzAHQK}vi|^x{!lsk5!5UCLjM5vC4O2Q@oJ^l-}UB{Gg58-O7M+XDmvt zj-5oc{A9+>)11SCFf8^tplndm#DwL~GdBX_gH^+bwF33{l+bw0z`q%7US$!ZR4`SR zyi@^>YM=*^`8VL5Tq2->=uI_O*nm=PjFk$G&l4!Xb`6+T-NocyP^yR0;ru0q8{vKb z0R91uO4h;@HUiS{nED-JhxSAwdE7K#Ik*&E4dBfI-w%;jGcx8V(IO63c@Qas+^spj z*~;+BhQ5k`yI1jXLkWtuG<9|+{VzGk(1Djg&#gsgL*xk#S3T}rzZE`69~vGto~*Ysi%{vBvREogIxLS z;s+sIMzf{-h`Z&(Qoyu<&Bo(X%n7}f{WmZUyGRlXwfa3BXOz_@*?>83If$|y`VWxSJ_bv95MKTp=p;plq7tY z0RS4s6h6{(Z~;igA;y3OpY}UTZP+r`mN+Q+QsA~U+`=@9{@C-Dk8;rE)k2RW+<6J+%I#ZTSenf= z^BO3I59%$V{7UkRT)}nc>{1>4n#p>uX34`zi(}L%rJvLnm27ngXK|`au82~wUMeH0 zeVW^L`x&C0?rsvgj}ngi9u)ZzT|)MA4#)u(^dDdfxi%=E7UWcy4G5^B-f}SmF19Kl zOS|osJOF?UjXuDQ9gYv&Y7u^5wQgaB1^Ib{`74f}sFQBqOcqK`ypG0;dy((g7W9?i zX`R%5W)z)1!aeL-m_gnu1_f8j#4x_liW6w@-Ao3K2?>e3eT=D~>)5H!;#Ib__B5?H z=4vgAQufO#hzeWys2Xj&5`d#1u7?bwA$Z~Z!){kr5AHJ-+i%E@3tWTdJlt4^nhfF0+nQ`D$;tWU(I5|0#fdho*1@+!b16!mu6dn;(bYfJ{ zP!6TN2a6%VMBu2EP8->R8%=is#<)wL#5_T-`kP+3PD{q}67PZpYh$4qLhJSkUkgvM zlq?p4=!pg`N#qPBa6x^~kp$(%5fB$w8qOx4{KR+?ju#k_Y0If<)lfQxjEJjByQnrTlpL|~uOi$K7$8n6 zSz0G}MB+OUi!K*d6$YsX4%p-cqSO`UgHn{Z17>V zKpKs*X|fa!mwFh~g}T@G7ein*wHg4}Ilfo3kT<^##qwYJ`fck;0lhWw-b;4!>|Cj@-5d> zo-SAwS#9E>!6`uPKt(}T^2LF*kqwUd_1g=B0zXyzvUB^%X%E$$F>JC3<={HwPS^ig1@zGn=?whY%Y)+zn9a z2U^ej9N~NHExN_zWP@GiL^kJTOTnV*kP5pzOIZ6D(j&ZQ5s;Mm0-aZ0P7n4w;y>)G zE2~!V230okP^Pu}%%a;BSJlH=A7Y@5SnMYj2OF~TcDtdee1*ilO2Fdqo1g~9=1^1+ zzOP~cS9UBtxGhINnNffR*N>AGc;AzNu}Y>cl%=<@WyK5KbtnpWuOTi~!CB&>P%Y9? z4OOR*(xz@yAQxc>DQ4WtRjn^@DcAE53WoOp^6>E(EoYg;!1MMUKrhSCgy=g%8e#tc zW~HNxhGDgN7YI}rYm+UJU4BSlx$Era7ko2ut}=!LmlHrohhZcv!LRCOE5AVkkE)pg zm&{o$?-GI1n(hYZTK4q-vSM;T0u&AjMRk13uFUEt-|GNJH5yW_^_HP^y+V??D&e2@ zOil8Ni>8!c^C&bA%o<`mLden5c?I3sJDE)m97kR0e{e?XzY?{Zc`AoI!wU*%fLYkr z6NA(dyc`g9&FWFp%1q+^ZcyN^;1wK`>Q6e08o5x^vw(O)#xGS-K>Wt87R9e@`ay-HI1vPjw%!vJ!%rltXBj#>4KQ)VZQQS)9iIBL{ zkn#(H?Rz;kt(DXN0Ft-cc?<{w{-qrnO(}p1?P2~QD2QD!FonN!##eD|4o_nm=^7!H zw$Ce%$FQQT4sV%i90SzRE{`H3)kVX3e0+^6w7gLoC8DbEAM#ep*X7szi@`SQsZn=L zXV^9e07#${(6}%GR3QaTI)?o#>z}XzKz)=#?x(mYp?bJ0UuG0%ZB4&C2^**C;%l~X zHo)((b#>{v!Hw2Hm0r7-I?LxLIvcnZ)r#1w3gRRWac&l>sYsW9A#Qqe6j-DEi-h=8 zp(_Bjyg8*`N#>#-* zi5|czrHz+c1FQTY61eqa$bU5oQ686nn4*|Uc@D2TcW`5af%^{9-iOE(R(W$^N!M8a z0QNY+(NB_;14!fZ8R@!rXW)8{idE~RuoU*x$wik#moQFC>D0MBxh+_;L)A)(kIXNyp=!BuM#|=J@p9Y> z^$3wJwzKb(b8l7bwBqGCaM+_|TQZA-2MR`n^L<2r;v}7ieBG=uxiz$0~uNsREP-4-i=}{{XR1J3{*iL(hY4_W2!I zZ>~vrU0)*?(@&WS;F`}-(9~u{Sur9<0mwtNT3@I<=pFC#5ISgGHO#$g7r_4jkQn5? z%Lri#Bn|^_>=cUqU=1tk17f%Ql~ljX(`ETCv=H)k3@IlL?TD0irBIB2*r&so2H!kE zBexhL@T#IvQrpaW@R^`g2gC|-UzkDLtAI@M=LpmKl|| znZ#=D`q{-tb+#NA0dcY5UMduR^81!sKS)#B9?a$22sEG7Lajbr(l1=Z8$w?^X0Z6k zAvEruV_$)MOg6r%0+;D=bdk4lxzOeu&V6UDqJ)TJ`RWh_tD_o*2GOJ{(;9##S*6AX&w=#saIF@qO#9)X~qw@gYH=N2QlEkK?>PEZqJjLCq-N#bg ztPl$9K$WLDmL(_b@WQro!=UmoQutUcOetODnJU&Fq)A%OB~=uWN=rUOxmIHfZt8L1 zuG!cM+mvW%C*r4wEh~0{nb(ER?L}^Da!rIu-*qw2$E`?Fk3mfB#)>_6eK>APwTh3oNc8 zcIT^#TTn3SAy>VmM$re^T`&7_RR+}Gkib#AL=i|{j^(b+V}1xXqd{Jbt3j&Z?Tys< z_;AG68wx4Uc^0k-vGEt&EAZ+VZtn6JIX|ct=6)ty0DOc82J)gFjBg+=QV-4h3>M#z z6fcelC4!f8mpaDA+#bX>(Jt;)1YM0lq3O(`a=&3ZuJ`0APmD#h?*+o*J zg4TbL3oDn8B?{PakVI30G`F`Tp)DD;ApM9nrMRWPlvM(+nCCn4BeK1gm&Y(wYhtCj zsm8+Cf!zE;V|P>`tF9fy3Lo4pIvueQy?#qz>Qfbqda9O%cuMk{b_Kpx3{h%R$tucS zKIIxUEM&*5f>1=(_4M77zInj9HrreBd#0IACH6o|P~xq6DE ztF(7y%WXmSU5CH^nAD|I&Jr#F)3Hpnbe7D`wNxx0Hl`Cqxh#e1N5D0pOaKx=Vwm8j%D3@E67AR_HhswN4`Wq4x*`cr-Y3ASMe|h0_6m^ z<^d~&O2UI1j8t2}4J!OgJJ=4fgGXdJGw~Xgq98j_=Pl}^6Ld7nF5d8E|qkNM(pOH2Fu7;wH~U? z`6|$SxZBq~Fb;9<%&z747M+-p=JjD&Npv`6f(l3)Q7U06>t#!!zgcPS_RedDwU{X4Y%@*WEcvDvc~BTDqE-y z<)z9NN;p~M6b(Irkk<$TDUcG&qqwHl53#AOyp%&i; zn*RWVewx;g;O+YnE#;V5mT7BoPo|~_h{GNf_eV^jqMX#Sn%Dp|rRxB1UV|U7TA<=3 zM@NuJzD2hNO3pM72%S({%AL&q#zmyrPeEgbU6pWO+o+tHwLC=u0To}-AOXF2m$LW# zmr%P5>G*-rIGIhj-y?mB&Lf%)tSxoBy+#li<^;P3sE+hsvhHCZ3suHNx#s?34I#Qm z+iztlRenYa?jS=)nt*KWMqyXZO6poSkkXG3cH!I{C;+h+h$Str9T3~Bj=|fRWEwhB zxu(d{w5p9u3^KJ}n7EjBcPJJ#{$NV67s+&R{KOL1#^S+V8iF)m$wkoWxR#`g{lv8Y z0AsvLUgn7dTuKIL*}&?uC$%1Zii|9(_EOsXz(%p^4d@BfMQs{5f;2S0Z^(9<4jxa`W*#bW z9ikt^WlOniZ4#8RUzztl(D^TFIV4okUtE#wyy4jV!Zv_s5D8BCmM+d4y zE126_x4A-!n}|IXE19ZSe4Ig^N?AfXC{thm0A*LfT}Fv45ghIq=MQ3rh3T*W92nfe zu3>9vtJ!9wiU!CV21Qzy6-&p;$eDC|P?kgQ$T;}u&n;#H1vgZm0iOA)pzU~1TTM4P1z5S62(TqC{zu9xPuNHoyP*X%Y$n)w#XKx zpWVSyU;eq+=+c5l%iY2S)0*ZAwjS!GDbkkGAC3`x=3T)GSSWIAN+Xe+9s*II6>+|0 z#GW181^!!UTHWfda zl*kO*>@7l@2Ub9VOS!-N5dQ!%4U}9*g_hcN4-4{gROWU~M+)XBKc2qCS;2aR%(`GC zU6vBQr7#Na>U14ppmfS&4G^!8NDY$FZI?7_QQIQd3N+2SgQ3^9pelbcGW67<6sO5R z8cOA!jESEKRxX}C!lN2?HJjhgAmE($>=CCT$xRKof;vs&&x}sS;s${-0-kcXfi(FL zTznWSUEh=G`BMnA^#!@E2mw{SOehNtaVye#4MpzP6I~5JqS`<$r^KNA{{V8p9;FOH zUUdMAD1zI2h4&Faa~m@FCEtL$g2K&pfE3s4x*%L;m$UhtHj7GIO%C@CH7$BT!AHeM zkZwxT7>yJ;tOD` z+#Fw595^_zN2V@7Pd7hFvc>B7VNCC~I=TmI9B^Bv&*X_rgGVk3kOM+!8FvH!0H?Ci zL3P6twmE7#ny#(_Q^^fEemadOiB#@&P&;DXR9_T0h14xf9I(2yyZ%v~4wnsJdCOQ(V$uM7fY%4#Z>Rr?ax%7mAE{{T|v?2dhjyZo8e<#jXD(kQc+ zWdmOqC^pNxC2IJXGn03@aj=CauVO{M`^6W3x`AE-8{vyte#~+}5~4>Br^xj<4Nu>Z z$z3q%LuW=1J^VE3{_G8PLl{}~%bIH_!I~?zXOq4}sft{{zhTVemiv_yRJ_KV352pU zg1lXyUn1-wXekILbV&{n0o|3o19_@1FZE@umf(G4P5YwhfDoVHmXXZBTM*#_l|B}FAW=pho$Um zyDWL(d?%d+ZJ;ysLUwgjlou1{{ViVz^e^q5B~sxDImA@32ImiYaTO~ zxbg=!4ggwH;SIhMnt%vAL@=sMzaz`yv3i*(y57nOo-R^?vzQiM8~I=bj$fH|mX08^ zaKbj%px}&KfaI4F(!ZH%0I`BQt9AJigNs|rB+lKy^X#Mp>^t;a_S2Bi_CAB5RGxN z&xY>Xm*tDxT{!Lm9xoVyPh;bI>Ii6OH7ixF>L!Oq%tvLpck*OK*D~of2Kz5E)f`s~ zGzN7R*T>k7YJ%=`INgbDxBSF)L4$)xw#^p-SlG4OdgculxzySeuI$;NJb+a>TjWzs z9!fA9I0%5d-#?fW9LE=g{$f${hzMA>keXc;%|NGZz%A)+7YlgWi0yL4y;{Xr*~tYB z^Bo}H;$AO+vMa0Oo@JUSrq(Qa&Xp3nv3H4z9<3RDtS(Tki}*}Zj@jhowJFz8c#v8= z{%3zsQz|+ShSA$13)fwP@QebR0hE05B9_}#dD)_u+zQm8pSXqw!AG#jYMpjNMWsK3 zE17?QzCooH+43qX!^Kb+Y-Qr>sDuIiN(z?y6t+K^gNyPd>;yQxRHdtT=_zuzUc}f{ z^AQ`VlnZaGgx)J|IuM$-JQnL^IDW}^e*)r2{{S>y(6go+3wm6(u}nl+7%8R%&*aT2 z$nD}3t7EwQ0s)rU#y}m}qMPb)MBVcXd!EW|M*L!I)l^$W-?0i6yr(vBBS~hs-XiH{ zaT+$!H{<{-RxkV`0uDKX+*8wX{iS33jd!gP<2+^k8!mVKjf zQ}WI4b!^v1!I^ubY9hk9S>(KHseZCJ8$W2dO3L2X<_l_(ZV&)j!M+AD=X|gJL=|6Y z$@UsF2n-&PoJDHDdO#~F&9dCWXXa~#YwRWjw&5$YxZE$PXf?cKTE6~EI0*Ij5V9C3 z<^eA{2*rMkO&55DvDD?~v)8=Gvj?6^)ed@Pl)3I5RThnovHqsZc;SZcY3?YFwcM>Y z^_P`!<|fDyCO~y~N1m4Z#JY}tKqzf%WdJICmM;p}6=v0sEu*W5N-5nygnkHKrGtpo zL1zS6;Ab;fkLD`$jv&E2f|vAbh+flz`GPD%mxy|i)QcJfIVC`GU))7jo>T`Fb4ttG zYS|z5%!yG1UUwfNSG6hXg1)N9ZD+Haw^yldPv!;J6P5n}>@R^oM@!RA;8=;zKM#rNL)+oTAAPx^As8;y}csBir zqnpI!4a{gNN(Tf04ZXC+=B^MPj(U|eZ&H@Cf9$2WQHQW8ij@*s(gDQ$c@|zitbak|aOn%}}7_68TC{7GnI{?#ohRkXk$^EEWQi|vMgKo<&o}gP*Q~dt` z@fg8ElA+dz0ovj|s;G25!5c96!9)?Sk$@$&@s+?`jq&<`0^i`C%i+_FDs8I{$fDQB zOlz4$DA=cy*adiej&s*C?JW=X1M67`h_+ZB_YdZ-SwaDQsEa%%g?uVF3$N}Iz&uE` zZrc|>V54QE0xj}aS6$2kfhfE`)H%+104c(E><*RFZYtlG9)$%*LK@x2HRasNd_2W& zkLoxr<|RPe4(@WM{&^aJKiB^N=U0Jrw^7iV{LTZ13|d`1j8kfbAj$lM{}>_qBtn@l(gFZq@^FLM=G_b7%L zG~=9`tCKG1?aL3YC0$^S>S>p=oq|+bk)>h%!0IdMH0G&@75ro;Ad$JX-z>UWQuDhx zgJ*+(V(vKN64Gyx7R31t0HP)EuKJ3o2scq2xNU;t*DQREGhsn_sa_gHt4hboi@J0h}93ts04~Uc-(@PQYo`o97L#i^DiF4Zp!kCqL`?~geTc+c#b<6 zO=grms3F7!@#Xo4`GMYYFwz9WxwFAD*o|%Z7KJe^prKhUQm!rlTew~e6?ZrX-6s(x zsk^tEoST{6{6l#TO8%mvi~AG>thUxU*q=POyctk6;PFu_RPro@4{;n0OV*YR$Wg~% z%wq=~ODq<~5tvslNnlkkV>EQ)P|@D%H5jXpAzs#A#=;A&7XJV{7%mS#Ae5?}rS_#6 z)sWaV>JSYz*RurPj^kk8##+A4V5-|gn9Bw5%@iRZTNQZIl@f?YOruw3fz!AZs(mYE zsJ8joHq^hdRk2_4A}Xj_fGys|vA(dF>|YFTW3~he2kMBFD`vs2xgjjA;X7eYF5JUi zT^3DBt}o}Fbn+Ml!luy?1{=3XmrMm z4jkx98h}{v?rxN4UN5M?3;YN)#x!{g7x^cG5{Lqx=jt$0p50A!rn#e`6ci%eKJgYr z;DWy#5VbjxCqeLocKX9G{Yn9Uc;Mv@G?Tsk&*%R+1N zI3=Ab3o5Y%{geqxj^2OSN~d3!GUQ5E;B zXY;vIj72osq8PEqiMCI$KriB1kN%+3vUe&}eZHnIY~~BAX512I=*r90b?j~)4y9PY zNvW4)tu$bY{{TcgKR?{pMU|@*-W#H$QiX+7r&nTRNteF$1XQUNT>>I=AG2l*1?(V* zc0@{2V#^(1tOP2hL1R}K(#pydT6ZjQQ+!9#q22jK0nf3)p~SoaU0f~b4x^Kqudxi; zqqqb%>RHflV$n^v5x%JT+yh#Dfunq=fNScZiKl>aqku{rkZ+Qf{GW#Z0FgZxcNJT> zv8WgV2^JJVK&t-$R|)_RZlEo4Q0~Z4uk9-ak#L@xcNI1rDhtt8TPRu!rln@Te#dkeg5cHy$!VFKa@V7#`j)@q!5_7bka zVCz`m?ps9}s+Tf@yp*2;dIbJV=gYMFp=QZ07#}FdMtR26%PQBPCGx*i^e& z1Xu$301Y0(su1C2IhMo{KT#~QS5uI+J7Sx<`xY0Ic{LtSA-hsh4p}5yHXDX0ZbLkS zuOQaocq7uwdAYla?I?q*zU9amnIUD`>Kw}o$?#k>maU>EcE0y1sw3}G#7u|x6jTi; zjo$?#HU9t-%Z&bnLd7eK>I0K@8>%j6*>N$z!EA7OfC6dQ0vF3XE;1~p>b>e%aI0_{ zFth&vvW=T{mZI}{mW9q$25&9AP8t6I6yj8=X?HAdHHwX|p2kcsypCOaA}OG{eT9L- zR8>Lp5Wg3V_6dl`+r*VbV+|wV{YQ$m!8R{GKoAsr7y#~XwBFPR4U7#A@?h08?OYb7 zyP6CpApTK2A1X8u7Syw1x2eV3Sz2!H_Gk;SP(q-D=Wq>W*YOJi8-ozn9x*DJ!zo~= zY^2xa#41*6D`Tl`O{^|2M-L(HMP6AORPYfNm+ujcAqR2GA~4 zqH_>sP;|jsRLhDBy0L*(4#5Gcy!jQn<&2LaYU;L!0hxE`B+eNO4W`_=4TGbL_pgrjw*aEm)^j*7QSUqQZ`#n?tzD z#nE;Bz$20R$N+RFgr-C_a@8s6@>a^oFjqg+x`UOm3w2$_xtwI8Wh3bq&87T6irYiU zI3<+V$V!W)9l)lp&{WoS$iW z9Im>EBDg9xu%yH`wJ1PWb}OX5SfNwcK?JD7nBFdOE;eO2`b2J*on4Ve=yd=q{{S#*7ON*;VQCuB-tij6?HEfP0t{8>`1T?DWznLBC`w>I%sLy; zB0&m?v93QLv|h7`*ijUYs^>81?;6Y*`gI#vvFS8sgtcG9?0o4INN(Jsf#{vezzyYk zm+18b+A^Q9=HOVSwF`(SM`Inr$WO5X>$&CZU; zP;x>-3Z*S{R3dOYdtkJ-sxU29^O)z9T6rA|juil*PdPZNTLQX@kw+0M4Er%n_hKN| zWU|?>CQ+*ug@?%AwPv%A4&Xg!Qi7~LMhqP9;e)KC@*ON$QCw;q%hPYkWG;Qdu*)4+ zH~q#KZ28Qh8XS?8ce@OrvE};+==iL+Di8K04fzD;9wDfhySUPj2}I8B4HiY0hhtjq zZ<;qAVgWPN&G@WAMF(ZHocRR?UtLQI_qH;_+43t?SKeT)t(q`9gjlPjaJHq%C_K)= z)oej0dC2hM9x{x)-*#qV4vRSjJg2ZI2TNrJk~lSRD^ht@)D=4|cs|TZX~73u0_fr} z1DB1LW&K}~!)R|ro+bGL8dAYSy4oQG1it#VvKd35yv3>@YVpswkN7Q*3K!ClJ@ zGpI}|iuzx78}T>a$zrK$#$lRsbDHv{_%ohk4XJp!Q4K&~r?n|v>BPt!-zP%1u%K4I zqB&~MWd*;B>URrz5imgZ*mZPDE$i|)-;Nj6mlx?T!Rzb^M&p&fvhR!oxBh*CvqOr= zrYWcY0H?{h3l0kCior$x50PG6sIR$o^(_lWFLy4$rm2tE{{W+jrf-cNi-A9;8A^K} zIe-noL+m~(e+M#{Xu8feAq@j=QH$GS>~4VTKFg@O;fdl0h)@Psai!&fa=;lyOb04C z@^BY-#1$&oPvTyH@G&t|wVxukx^Vy${(OpS4O|c1`5ZyZ_$C zx*M|&wCpI{dE5_UM@m@Ngy z;w$|``5Xuc1b8D@6qH&9)eu0d+c_FgSv3F1RDcVi=)uTF^V48KTsb zjUKP4&Q%}Osl{BqWiPBNzf1oBCPb*FkHoYZ8{+x+i*T~*IV0uAVnZ=w>ht}7ueWYeYcAQoCv*N_f%sPv>$p7-}1YjL3CZsK!^M!=}BQR>fS zLqZ3lJ1II{CTEb%2yGC34r&>`TG$#8UlXH22Zv(78h$_>y-GH&(UP=+)&Bqz*L90+ z!m#H50EvQytuPkG`-Rju#J1VYwO3fB=D0+)B>l&QnH2U^MLrzC(#q;neThdyiVJ`f zpDID(7UshVdd#U;EFx0Hgak@2V_8AKM==+H5>wjlQE$fts87^sa`hAv#tzy>pq5wU zL?K~Ic*MkGDiybcaN9UmFt&Q`H%)xz4B3BWm3m(>n}zuWppN9afY-4&FS5f{@x-7U zJB`9qyvs2Soy{68-q9(z*>0B_Dwq0hNd{3$L-Wj_@G-SxPU0iACM3%3ymI?kJwO}@>b!bzU~|Xdfh#sHzQ!e|J4QiEa#5G<@+oQ!q z#DjH_Z^jdJ3VVU8pUhpzTnCA;TYX}o8>w{t~5C=ZR+%;V9#;VR#U!ng)f#f~Hisi+QO-b`jX|yIAsu z-TN_$4oO}bT#*SwTtoaJEC^(EBL>*TRB3B@xve*CSz_0Nfr#u|YP2Oj$k9q2KG*gP zsw)jR2iV}c8FUmuwqAqt>_DJ=YU0?2+83e|brY24G;9M^bu!_-kcbr4H_zr%xHla5 zL(UXu9|`JUo{uLShiUkPfo)m-zyk_@hpBr&Wy{b?>bZsp(5{Z94KITX`Mx=qBCN!H zRWhRKyWqlTgJ0}RNQ06t2-go$)!UQgvuA{`(@kIy{{RS&SplR?+?>TJ*T00+GwjmP z_)DSGx@8w7^>7HC3a+A+RB{ol{@u%?emDu#PhkKD+UTvPxTI>amy2C@4Dh&FFr$H0`e4Fehg}jtF|L;`{eXH4gF;u5lf;f>kIQ>Xzu%KDZ7F?xI@QY0&-AifR*1)AN`h^%*5nAOa#&A*=emifHrbe zSHKVbmrt9)@>9$Y?GQExUs$%oS+j^+TEEN{03p=1oU<9gwT@COHko^5PwH~O+>7v8 zRxqhZ;ub<3E+TyD-oreC06PjZ3N(mo{)#hvsT`85``!40vcb9}}-=k);!?jRc;{C0(L%93*+qpeM&r9Uj~p)_i1qg1 zN?CZhq)v7M>b`X_ugj^cUnR1Z3cvFTw!f3HfWVvv#95_hWIBpHPQc%C?N$AVDqGyp z2A)jQZ$vhB_T~=zL$g5kwERo9D(sg`(y@Czjr7X9pjB2|Z z-0gY=^Br`f{KL1yU96-b<+)WaZyLYMq8g>Bk8yZL<$=w4_<&2;7z+@^tW~uuYkfgB zx(+7*#Ypz~ugPNIa-kP7vR56P#2BK+vQLWEMBO#%fn8&N7fh2n07#P$qnuQW@vkC3)7>F!!8SYI)r zRa;x)cL~wBT-v8<3tNeb92Qq1+0^3dxwx%0)ps`*H{8f*;VK6NiAA4wRl8Mlv9^{m z?R=L3N|D(C=qG+gwZqdJ0>21m%JN>3f2g1f;7h!%I>M~CxG+(eOJk1iam4mu5q~j= zj*N8v)Wnup9GrBl_Hzb?#iG7MLmp6|27HMc8!pxux(=S@sK>GzR~mw7;OagqSfR9? zFjZ5Qups67>H?`0RSWVJ20*TS{Yt<*$j`zNp~Qdj3v5=_p$nN=n#D%rfg2pLPTj=> zzqEgQzfokXe5zeU4$<0;gJ74s&V-Jv*zCcoFQ4KwZS>z{NnUB5#AA@X`xOI*$Ji<* zEm!Jtfq;ippc=g@W$htQ^l(Cr(}xke)!Gu4 zfPWmu+a~XLnk%d7Sg2*jNW-Y0nk8)H%=B{((4mm3UxW&YM-Q>QSM-LjA=E~>J7f2N zNu^d16g0o;SSXg!a56=8Q1$k8aPaO4nzLja8on%qDV%?Bw(GvwTc)2QU|#F?BB4(s zr)oc$VbR4AYLV?Q;CInTik#HzsPU5a3W3o_h^Bz9{D)u({jrcrxx$n>nzD+^oWy;W zr4PSlORZv^!fr~5dva8yUPbdtb11I4*eJVQRBRS5awYtVsAptqn;tKzKzV*5B8S*p zn0N6hf6)m|;oM$xrt~}sr=*(alrl9P%UialorRj;pAS0Yk>ip@=PTWEytv2O`NBgYL`eG7_OR#{g!(tvYIM`dF*#` z(AbGcy}nci)f_-GX<(M}%Npfr6F_pT`2|Z_v5r|RX3AZzlOG_RPskjt2b+K>k5`gPs1+80uxD}vIVyNfZ<}T-|m04eid?5$W-a>TviUb?-ROz3H zHEpXiscpjhxR9;i@(pbDT}1~I?{G67HYyGkY!HH+^D0q6>Rl|lxn-gUFd+R-VbG^Q z^(yQqD2O{h+a3@eLKTr$6;VvV;<}$Oi(x2#0Ri5HTNt>mgw(Rj)?%ul9FO}b;k$fFattW0s4Su@ADzeQ8k7-aG*ffkKZV02Zyde=#}^V!8N~#+xpirW!v( z$bO+ypAJ{#C%ys&M~>I9g9syqkBlzccbPsQ?x5iCz^PFjX05+SArK6uzeqOHtss@l z@-t(hJ2BqEsux%i)K|u(x8zg+*ax@(y}o6(yIsHt_bpYbSy4V7%bFOhPNiBc$gD1| z11$^5Yg&F1lj(8H9+)sUgM+z20aqSXPbz6e_`_7HZJRWu4>ln;1mdbQvio;3D8Jzh zAv&TBQ6J}s=Of2E`h)cX7F73gG$QO+^&IFskGORWp-s7uM!N`rr94a&we|(7zet=l zVie6UVU$L{iGFW}Em(U|8-&`Jr55H`7KYT~0VfK6st63`7fo5L6GJ#msA}+x1O)p% z8P#MDiNNtLIt^?03@+Vp57a?gzhBlA+Br@LiwXxm#{`4T+_wU_0vn=h6~YT})lUg% zvB!cetl7{<*;4$5;X)gBV(6$GtZ;L%NdoJ3`4tGITRLTB2+s&el7>VOLjCj`9fN#7 z5YT#T6`U{o5sfbY0GX(1-Q0SfO9t@)R5yYZ!Fc9sCEhAGu4j+|QqELf$K(pcdt_yD zn^9Av*<)tB5%uEh;4_Zbu&tK-qOA;g_EA;A#5}~Bb2Gc_$Zw_P)Nus&P)T)kH2}5# z>==Uzgy8)M6>MWzR#rwuH=iXWTZYxdRBL{quXK+U#3GYUASn7nR9kvNr6KFo6qzev z5lx!PfF1jHwBAD6D;MD?zSSTUQR4!lVrl z(g(Zd9Fj#=N$wK?#Ne8Qj^5#9%I6{gKiOrj;Yf0EJ<;#ULPbk+7* z#8(Kf1OPUigs|jZ`i&H;oRq7poG2=Dd_;5u@+z7a>ly-6Dl9gBd#H_vbd+)`C@hp2 zd`e$`(Fm$V?8>r3sn0rY4Wb(69S{Ei)B=@i zBIvKM!Bx(cskl;nev&kKjQN8~F$U;Skcx)waZZ2>Y*04>11DKCN9;zXr_`p(|3@Rs&!3Y^H6?A=+V$k4RA4vC! zWFQW2n3GGu83>uA$*!p!4CyJ3*N!_p_8eqp!ClN=ib#m3E&f`)xdr{>d zfffi)SBR}iWHiV(I+of$674)GilFO*$jPDbm~8S8Mt7#nB0Z#1#eGKh_H9QQsvpep z9GzDgDe5Nxnm`M;itQk(HdABgL8((t^%)e2AIXfW>o0FauN z^>V4f%q9ePmu^)xKUD<)O#`^>ZHogwh6W*Q3U~Ra>}~#M$OT9e$drc*>Q}&rr`Yv5 zdm~8y0QfEe!1Z}5IY$q*9XGFK{{YAe_`RC6={$s^L1f57$}&EcTbhdjyR*4SiaCGs z0mS-*3l2$0fJG1vj4@wtWacDzUZZeE)v+Bjc}kg-TU?Mu-^`B;jA*=m&>F6;$KEiPq6G(@O8wK3k=25C&U^en_vz!XL ziU_NwIv_XME$Dn@%UzD)Lif%^W~y@;%Y&$GX$9?;0ifxqKns5NHdOjS0an}UP}B%* z#>`uwbrDJ|VN_5!R4i2PmLK}dC7P1M>nl>Js=EA_lix5Qo$1R|Mad}b>L3EwiiU+( zLDF1{xl{hi1s1@9SlwG$aB98B1}Cqq;kUy)BLD+y9-;uk=zNZu!QZLeL!~-@$Qq#L z0nv~v=kq$0wEh18$PM%h8iq(iN#tb&_A;j!igrzvBiI6udqA=B<+uDof^~TESh5we zok0Hpf(WP$z4Z{NXr9%r1DFkYdBh5mc`9!HV8&DJPwy@jra)z#)+$huxL^ZKTvtqF zYrxk`L;nC{L~o%Ya__W5E<6O!tU)ZC1rl30v6U1WFaT8rQ5Cj+FexspX4nAYTISir zD0wnE`-(DIia3qC4@lQiE;x)=!*#?l3!U)`pJNGa(v?u4wqV9)7sDJx8+)Bocu8h^ zaw@w)$JlT$=Aw07H1=`2jUJ%eK^If$J)C#)g@W;ODO2AOj+M%u=VSRz0o-R`*iXMD ztw8Fal~>~*qZdeGzjvr3HK98eMXgF?K!f0S8Y6K}f!gjQP{M z6>wZdz^&l(1{*b|Shi<^3EXyGh)%3%c$Q{b-Ac*mJCsHJT|!kikFvUWUP=&Acvykj z1w-!)V~c9NjS5tm$h+rZ+G8Te$56Qb3m6hUE6KzuyO#)R;-nptgu@jtM`Y1u zrNPPSKwekUE0Vo1{22-! zwvHpP)>KM6@GuVIxH}>P0olYLijV-U3`Qu=xS1NAKmr1+U}$KZF;^8A5gRW2C7Gc( zgP5+48BUvjA#9JOA_Pz<3QCPjD(4608A7gg2%<}>*da#XfGRdSd$HkDO}4TyU0K}1)sTkVUA_O`k$Db)UM)d z0cY4Y74p;afLjYy-Au<*fSPa{{{RMNRQCL3Vgpl#SK(kcUq^-mUiHj{DC;k%YRnvT zK<(Lp_F^ou&Y?rWl`g?;&P67g=A(j^UZe08)k9)DBk6OV$RcyU%t637ijHO1lHMPr zI0fcru~Z^%lTTxo=MRv%NO}1jcAVV30!IliwoV3QCw863ArDAKi`~S0HEHo0>9>sP zUai-H3796*AnjcoL69QUiaUJH`Z!{OXx74xdNSZ?d7==oKF$>WQ7SR47@H^8@hpmz zwWxzKe3#aR^3D)y^qf&mph~bz5QQzgBTyB51DSBq;b@|R_Yu~6GFC62`vSTyxsKWA zZ?igNpkd%F9c%d*Fl6+!KQidZT|ep&Z4j!cBTL#<_?=j-THoeA;6ZS#@npbItL9cs zg+CGDM7#e02}czJ@*o_=9Fc-IwB#r&!k%he*<@FKFOG*K?2gfBUcfPnRb0QL*Qkar&3u&H~Z zFDc@sFc9*wtrfr!wW%pzaK64+p351nA+uW=0E#_qFLbA$++z+YNe;ye{fb-M@ z^)U0WJwtu67&ld~+J^;E2M-&lu~CCcE9NnZ$UmXXz$?ed zy054M0=k#7h4TvIP8ZZ$c(|xzRmV&Ws9+{Bu!VB8tY(7sOmtSC+*T6hP+50t02bHe zYAw+O7o;lT+9_#%enM@P(2)Iw0Vg+>FZ3t~A#Q6nbI8!>Mg{}0W5ZAR1@^vGFijjM zF)%oQcraN&p5q$f%ADttvhB0JVrhI^Kje9M0N*oKeA%gp%t2`EnCHRs{{Ub&YPI%u z+_wQ`_mKzctal8>i~V;f60}@?V7+hC)Y_CW*ovY&mma$R05H`SoGX~M324CMs_0ZC zC~10+hWBxB2k@4^8#poGZt@PJ&Vc@Yc^9}?9pM^ayWPV1Pc zNE~-6b&O&cvHKR+CGF-B2wws%5ZUaSf{NG*pjPYHDROE=e^=PxROcMaEfwrzYKkwY zq(!~NwyQd26=%e1mfk?6)bau5zr?#tq}MXGxS~dgQV?@WBS^ZgU))B$RSH5hs9V*P z066|3KD`}~4vz!eu0fI9b}Cxga}gQ%mKZDUReUT?n9Wt9Q`r$rS;Q5cvG=J#>|Ss& zkpBQ5h{I1Z6_sKtG;4=HVwU^f;t(AV!vd{jLQp`^th1q#0?uyOhd2!4Y5L z@wvQS(}`@^Z&7c`2~Rq?IhI>jxhcXUv^i<3;#B;Q$w#_ogi*xh<9R!Q%a5~$-)PFP zdAy8(j$^=EyFzaz0Cf^oZ;7pfjsvH*5n4T*hmjYH*>ad;TtO<73IQoAEwbJqIcwOI zVF$t{8`sqQiU3qd7hW|siSLmi`oRVOaehKeAml)mY1zyxhHxYvwEQ;}qRto^!riih zT08U{%FwjJri!=RI|a2gKq7wz8Y;J+AXoha2fVMu4%Yo#CR;tzDgdr4nP4s~s2k2? z_FK+Jw7y44bKp&Hh_C+up%5vmIDkWiOT6asi-WG^C>nXVf~{}$D-aZPAN_-uh+I0B zZ<|B(jxKUomn&QZRHKnB7YaEgnhhQz$x4-n5Y($m#-fl8t~{FU4817R50Sf@w?Zzj z7pPU8DMAN}dpv*_Va%*JckwD9x-MoWa{R;%ThR7BN0?^rXQCZc47H3tMA@LI69BOt z8u~%}p489^`RX;U>fJ?i4BUgzxmk>sjTvxKCmcOR1=olawbEC~>^#jh?Or95xvGFV z#hVe-lyEYQNgUk+$vRp3;x|If#p$ecLL(6Ji1aSJmF6bL!%x%N-1=ev9 zm%uPeEm$wi@q$rA&JhE0U1g9GI*wl@s-SR&7Ras{c)^$Xffzn?%MQG#`;Vkfc!F&Q z659k|d7wTHWVrPtW{vpy-Leod6Yem8}fHlD!$G+2qeT&P1{sd3O11&C|64D+W z3@WF34xA#20Y^WWjqtNHZm$stY8u0m5V7yrutSS%Gz%7`(G&qzK?zL+ z@hCbiPZ%313mB>5p27>f4eKA!T-jgDw*byrVIv*b%U`nq z)yiR`dY6cB8KxAs<`_9@ihyzGMPl$Q1DR@;t)!_^ju^@UFE=PCF8zYjwc20^L*olt zKOZ1rTvUp{dh#BqJu=2awC){&)njoCx)mk`t>Li6BIVPSg1kjCg@b^DQfH*KcAch1 zIN{%MM6$SLg$t$B)Y6=gMMZ46qicFxp-47jqGc45j}o|-0oRV=rLO+~F+OjnV< zrKCgY6<0cnD~BW8da+w?a){pW60X$pD2kw~`zqTHVAd_lDY70R3iDY@wuW08LH1LL zH>#Uof>*-%k^meoGzEe{cos(dHNo@;a0YZ^+iu%0rr8 z3^fH_q(Iopl_Qf{hSKbcLFri)q{n8!p>X_03(;UlYA&edScPe{%Krc{4p?rUVN0%n z?o)^sxlhY*j?-{U_%2ju;VT{%=yptl35Q(7g3yu&PmmCI~^(Ke1ivxul0e^5R9f=eD6eV!Inku~0W9F*X8s*I<MAL`J z8L9b;DAXxORwQR&PHlp#m%>gHUtl;>!a9f4E8^@BTfuFi9w54Z4rvU??4%M+v%d0-KkP zqH1FlSVy57B~!@HUG^H<4cIkAzbBH640ps9$;%H(F{W2+RseLw>|S%onupU66anCg zkfvOy@Zu%Qipgjzn6Uw1@2HqZO>$GHJ*8DZ;CPKl-jf2}nD6yhxlw_Jy@{a_)0&K; zY3-MlX?P{Xl)O0+tv|s5eu@o8X^$f%t5<#rb2g1aqBE5!Lo1Jv0%E-6jkFSYNXF3% zy*7l`dF_#lk*3H7{j7mqaixxuZS@F)_y{}}zk+D7e82=9{{SrKm-O;;bkmu_`C3FY zHB`Tt^u~=}$ePg1U}_4f*r?VlhWMTK@;w9T27z^2K}&5o`zQoEw<;^5F6Mr z@N+7`_%Q)R<6Xvvc`WWIDMkr$-7y>afD651w$yq2#S|KHF`y13elZZ6tJGSIVImo^sKm9Nl};pq=0epAwH7?g`l z8B_vL7aq=_HG%86pD{P=I&H{^Az4~W?t@}1H1w1WtLqkkohFRF1RfnZq=9eFK=%%t z8vag$eZWgW#c!e+$pA{D!pug=8sEs^EIA<=7z0Y3FB!_Ea6+~R?kj-W?OZJmIV^2}0RHB8w(~K1-4NE`GE_Cz zk=X)JF0_>uw<#ZT8`xD1D`AjbcOXCoZ95Vau(Khd0pgsNvh)mzvsv;y8%XNWJGO98 zMp4N2m&cnkxg1TUvy;J!zC%SGL?)Yo@1B zLYnnRJMGKJ*-}?Vk?I%6$OnR#a_Bn*5L#VhDCRVC8Vc7r4BVuuxFzlUgdx2znWDsV z?6Zd;cW?kubr$&$lI$lP$)cCyky>l^6FS?AfN=n|JBy$mSuhs0U8R_iaC0f`t>!Ad zyAcva7bt3>w4N#=oWU%#G>9Cf(8QJl?^2yMYVsaIoh3@BT0q86OxP&CN2Wei;!?mX z0u|c>!?=i$Y7vA|h~$C=v_CK=Lg{|>FbX*muKNlS!s1iH*6^a)L8x&m;Z+_{GlJ&_ z?255DXKbh^Qe^d*)u9kt2PJIFUznOJPm_c<`Pc;V4_?3&dF6f01-y14in8kBuG_L) z?!#dMIXPb7!}orZGPy(CM^O3HEE@Sz5vgY|K_!=wTDCWdfr`wHhSqlm~ZPcZ0Znxa5t0T?iq7aomj^Bi0IE-7DWn@rC?ovABVYl~;!wT2 z%o3HXq-EG{%Y>2sC4g;H&gVc2i0Is=5-Z-$Aduh$VW9C8Xb4q@5uOj1u<9dv5geBP z0LVSt8z^$x=VNP&IfC--nqsXOH=~;fQ=j66tO=JlC(33F_#0)oFzz7bOLOVR7 zp=~HMs8zyxd6z)aKxnU5)VC=GPPn)1L;`gsULmzPl%N(4c!4XA=eQb3C~WwaQayu( zMT$pKty5i27p6+Uq2nytPv$BI*1MFi)o0olV(vL_;~-GW>OZ+bP`KW)Zxr4Fb2fL! z$#|%GPQFXg0cnLDAZzy(6w!Z)ybD9jdQ}?wgRR?xm>XgFCXYqQ#Mh9~GIWZz@st=g z>@Yw|+L@8s&`534ukb<)LFN*${21LsVc!ZJLsa5yqy;&NOSgxl;qfhUPLzM#2-n5-RRuDtT@|v< zqJeJz05Zf|YdVc$1v~0A0Ro(tL0fBAG=P3aF>UhqEX;tQZ#3RZ(x*y6)dC1_F;->_s*HBvI34QTZalFg{& zXMv2=hzWDK=i*+kpCusOc%4D(w$>3xvi9CZ~H=Y&8s zI}hbkL%s`(R9?ALOTcmDM#=T^UYgHhxkotJV#l~auvTwzcscL!EG0R{z&%&*Fy~46 zQ-o5eGe}Qt;A&W6mCUzd(Z3)sfSibVC^2ris5Mdl03wiIpJ840J`#*8aa_W6{JM(e z$FCtu0DnKJaA{z59iTjq5CAuD#Y7bhQ@}7dVqvzW9wos8cK{nBciRDVAl7roFs+J; zEv0o0tKR&9SP);#pc1^qEHv~ZDGr!HY03^r8I*7va}a4Tj_o)Oj5b{E+`unJli%Zn zEngs17gYy{0ASSQ{mPZAw3aj|3i4aS6OSM@a4o3u0_Ml*1m}^6@PG>BlvFAg$jV}A zQH#{j<|niE{{RVgIltm{Y_AXi@_$eT7QfV`yTPg0J?%m1L(~mIcN5w@#NnXQC@lur z#yH`wBAAwA=`fRC5(xI5U>h3ru4Tgi018uMqbz~KDW3!*wGAn!Y~Jei27bTY$S{KO0cY372N?=1Z zP^w^8ql3jo?XR+Id+{zwz6{u@pm53w0OwZ`ffd6Wl?N>a6&{SNA#6-&PmtmT6$f#S ztNxhwp*@C0YJu!xMgowaI@T-=Wph8+n#!yzsPFU)5Duge#0h_4O#l~!eHiI=o#vU! z0#_!Jm8+|F3}VJ0J|`A(ZM65 zINR+7ESjVyjc8OttwLwv;Xymq7;U<7me^LgB?JuWXtg6Nxax9yL1kn(ixlJxOAb38 zM8)cSm}_oMDlH3V4a$lrq3MHoQWb=>$xI$vOFI(mnz2lUgqANpOH#@ioyNny+%;tO z!&+N;7QiLdOT=sbuxnL^y~n5Z5TygTP0As|I$fm)AmY4~fmxRE77OtW+^zN?z8oFY zI~BdCW{6M%N)}g>l(RLCOo$P~-e4$nKVVrF9i&02ZUkBfnZ!}b;eY{baVj60ja6#u zsfnv^E+^XgHG}UdB7hG<89^CT#!88;#v#bXp(CjYy!sRd3sZ# zHwwcGiI(Gs$L3v>=9X4v^U)P?`GD#njmI6v+!5e@BBUOp8>TIn18QFTO4gvHZpa)( zcb0zPu?B#>_9j~QlvHDu)A05d>D5?8%!jdB&>F$?n%w$v2h5fi8uK&J;c8wVR+!bkbUl{eN|dAFI+DzFHtD~d!+G)e;1ns+Ra5z<`1 z9Y-N|be%?;yBD%p1EX2gc4O__XIp$(5a4P(#3&8J$!aK{#6VGLDB<`)R)EgpXjBQH zlKh5Me^4M8lGia_!v_|72TI4dgK1AAW!N=ciqq+xK~ZlSuQKkATatEM_(8jof)&kk z9?(&DEUE*xCRJ;pd3$ zLg+QYt%zmcMW$M5uSjCCBV54KC&r^<1K+2 zAHs6D6+D7S9q-4u`cYa+QE~55+!r5&M&1F48EV;3uRedM#*AqE%2{pRkrq|dF5uC` zs?sXuJRxFj{h7h-?I*=F?8MKz>!^AZee*9OHiJ@E2MW8Jx6`yB+^bOBbl7@av|gXmH8VMv zE&c%ZJP6|A6l7^Ui?kKiA_Qhdgeq!eQ<=k?yK<)E92pmN&Xb7JsSRG{xVP96lDv5W zv-%<+C5_V;r%Y>RQ46?XtY&brk`D08A;-Mmf>E%*Td1tsV)qyil)H=Q1*}Jrv$T9x_GqZj|-^8TMcpoBb6C3Jn%y=LX&G!&TQJioK{j%(B z4E)4Z^8Wx+XcUf1U|O5J%Xk){4JTk?an4ZIQ5Q`7YL9KlO|OSE@V_`cXcKlvkdJzbzi+C~lf&Hau&Xn|>=n zx25?@w8c>hs}h6EQra#0Pu5@NG9~;`fhU1_j*Z%=N|VE$AYQ}p{fI@^Q;Sy~Mx?g> z6)W$Bja@||HLJo`2kDy`#4D4N^8&Swj$ku#l&4XhO%*Hwj!}$NVd4oWl^9dE`-?VZ+-N27W_9}+!g3(JwpzQ3-&w5J*jrAW4ndMx|V&5)6yDg z5Z}m#0cQUIP&Sthe1%BQ_8mtH;tO3$nU%UB5YQLnFU`?cAJ*D$*yBw*ZU>N9^8+jc zUdc>6)YAsJTo;jXl#C_hcKl}xHa;N$0LOccy{>pUg@f^Plo#&8rl@pj8Z1(0{{YC) zs{wV~G`%l)VpV_iMsR-*^8#bvA7$!WUF;1FcMPH*IcCi8P(yz@!l7H)#Kj8s_X?{- z=!5}5+Fn00!(cdQ)Lf6oOC_n5S8y7~1&(6+vf3dECoJTz(CjL~$y|tJu*N89L&8IW zYt(kR>N8-lLr@CrAVmWyH(*ot921hN;4zZ%US-HiyWBKhAeX>-Ozj*CDpPjosMApR z*3Fd>cEu47V%moWktHb{zzJrY_Yh!RTtK08GbBDHbq#)@3Ad^hbZN(l&z0x2vMhEj z{Y*FWW0 zkNYk-6l>T3)T}y`ftKqm0oD#6O|7es+9>e2N2L;vWrf5z^B=l$zQhY#PZ2DPbk`rK zySfR-Olrz#aVjL`5~n#D-T~=ZNg_d^}Vh>TmlQfxTYC(w+h#ez5Go zMHG2~EeBhdnqx1yV5OY$2vWSOh}h`2ECeOIh-`JQB1D87JBLcwj^feehN=Na+Rg9C zp@>`!0{;NTN=)lp*^n#79LE7CS8*9@$i4x~(q+IF0q9i__)F1?Yq3GkE) zj;gtwSe?6ZD{NrEq8lq1LtH@GffCL@a6qvR&Ms0{ELf~u?MP;BIgwh9${wO#^l}CU zV-+b3I$;}mpVW5jUt2GTcAVGZ7NBw#q=-p>Fa&n7ZH)qu&L7lfJ%RrKWnq4B;^pe1 z`AckNOsFwaft`g^-e&%RKypB>K}~&^^=1KD(oy&^{ln|hhxM26gUh~-KQUaVJun4= z^CDH;yOE_wY#o4fsdWQgY(8$3k5vc}=eGHE<|5l{tuBw84q!^(rN24>L{`70F+M7eT?qG%A&>G0-Z%68UlBC?$n%%h0S&h9Ky1`7g*cPRU?E zqH|E4L1lR=fb4yO+^V{E<=zXm7oacerd__@J;vq9t1Fs)RH5Wk+r**sR@HS7s-uo# zE`Rm`XjOI8J5$08b72Zfb<|aPd$^;vp42i)M?Yb)3O~4zmhK0MMy0!FX$=Bj5`a2h zB@DFGc#j2cIgaSti;F8ykd$fF@J?GRqdS4HyX$<+C*`c6cy!259!ld;ZB7!XNJr%m zEo;~L0}_jNcOCV2M#LMJ#hgLW9481u2sOl2pIU=atp}l!_dw)7*f`f1*Ak{xIZ^;N zohLRYJSPkjmB|X&EJrZF?*j*|8q_(+^N4Gt@QaQp6Y$O~rs`&Z<}e1vxI`qVzy8Re zQruIAxLLvKto|m59x22^KL#G|I2<5JQ>SOiY*VMcW#1@$ z#sTE*;h7D{Ts?9$y~=ieKgoAx{5?UsuPK6AqXbreWFB5u`js}#WmoC5v^3j{Z1KV{ zG{@L^Dr@pNbaq!v%W(=9h6J#OSikH&8NQOVzuomJV9@g11##&(sX%?If8?R1o^po` zuj7&=DqC1e6I9)d(a?VGXo1^_-x|wW#z<}hmJNpfH&UE`4`x7|8kk3tlBHPde#fG{ zoq}!nbp@4cs1+4vf9wc(tz{DEw`hjg#$$YU( zJ|)7kj;`UM>y@N2E)5bJ*IbZ1E0Mpne=*5IsD9zcB+<~A~_s0-T09YH);FOpJV|xR*3-ud^`?$9o+*h_n*zij> z+bqa%p?;xVs=}BmrpJ;LZ61LERKcA1#c>CNsc~^Ro&AJO2>7YG zEjg$SoBmEgN@)86X{+j8LeN%1==I%SU!CU*ea zQ(zdyvH8Zm$4-gciTcLztBbKHS&z~hS z4QUyskFa2_6!k0>2;jY`Q?x57xQsO!F*u|abuFN+o~VKn45BrhkO7F@;^pvBzG8#*@;xygE&xq({7U6VgHZ;8h`v(tP>5j0rlFKI zdfXhn+NYf`VPRDHEI}M!$VpXJMZI3I%)M*`{C%V17F<8MW=fo)?POqz_(u>&Oj?|M*U7< zS1DRbGe{f~?CG5014F5zp&d@YF`#It;Vo)uNXmque*~rq+Wg8kxOry?QS7hc7SGT} zY04l`3Pwi62DClJzLYijCCBUme82)c46TDprKwU0#n&Xbt^?^C8n;CnSL#$%w@>{_ z->S|TVU?L~Fyt|4Wkg)`w{e?Uz`y%0ZruAe2})mQ71K~ufl8F_TLkE1!sUv=AJz?y zPL1pcwWkK$HCiVMsIkj##gK-(QOS((X&OHE^*3wfRT>Tkz+8;gyuil?RK%|C7qPo; zjZh%08stU}!T}FJ@ft?`AV*_r5p1qlY;x@v1i99Rpw{2Oj)2Lx%3A?8hD?Csu9&x> zf|ODt$pHbq&6L?Ib8evp3E*?HL0aO-wU3Iya?u)93*xRLN_`MjbZZz01^X1jeYoMV zhRY?F;GCEbgxo>dV8x9o`3(uN&D)xECn&`=1JfT2uVB|zxVd0d@+ttem*I00>kg>)zrjgl{yeAB*jvh*}imm~}q}l!hguE~~=@VY}n~643Y20=rAeHi4pmD*I zk!iwP87*)`)C-PUAyi-3b)vMh0i&VZ2!bviWyl3Je8+Z_-Ibm}hYnRbBZ8!dvzVw}j|XVW?Zwcz~=Ud}J0T0DrOR$Z71lHH8wzsvwVw0;p?Azh{3Cwge?jABP=S8!NvZaKmwZH;jvVA`Pc|c zuF8qcarlb5)!`DxogOFt%i0z{u`Exn5Bfqn4fJ6aDNW#(1_kY8P^`Cu6XAw-O9*d* z`;Bcz$OotTFnj{=a{_D(2<_FU1A;GL9LuD4kd$4uGV;~qNLIA|$N;UmLU%*i)KVw= zOpDDQ9E|9u!+{7Y4Zn%X8FhkDcB^-8Sq?KpiEVSNJWgZGOup60Y1`iHizSLet|BUHFdx0|33_wPrMNNi)-+cz z(=VQ}L$0q<%t;DxzyjVXaK$_wLNY~A?0J=ZGNK()850h{D7%1LmRbJ*5y(SLDuP`A zXi9=RF~lo?I;a&(8iW>{z*_I8vjXGzQntRVt}d`b(0NJ39iT=b?dw5y#ILovjidlU zUTMigKkM-|8$K{;&2-!q60;v=g6A^$Wvg(ftL|7t7)lfzY0NOZ3PZ$iQG8#?WldPE zGQOjsa7wD$APZ=;GBDeDbf_BaJO2R4rlp?HN>Eckxl{!^L=%+(jC?xQH!7ALIUvD1 zdk|9g>~s^mUB+~Au?hOlOHy0~dBctKM`Gpy+6Uo$I z74{rPxM9TMbhnocwY3jp0p)oqXBLcgXW6ocVt^cG8%6dX$Ud-{l=wA|O_ zZbQmlk0r-3*YOC`RzRaRp2Hu^YeDo}D;UlH0FiC)7-?O(jKRR=iyTU*O{)ilF;0jX z1rIRoDSwHoDD(1GQs@$@-KuBt6d7)MAEoKbBo+ z4~y8^0Y*c3$E8OK6>uO5yW2gQfF`NQA9v~vlBxBL<R z2=Dck-CZ+@O48XF(N-7v0gI|tJo_9NE%S41(C{OQM{hlz@D;lKLusV>QA*Ra_HYf4 zIU(4DUL24dPu`*~g7|%xqvN{tLC33kGRoDxhuGFx*9^$-E@Zv6r%M5Yi&FV*AS$%UIbP(Py?J zAWvtgC{G34chY#<|H-BjVv}E4K`~q%PBn?p~{kUYG*PXzmIN zZ<1t{zbd1KfaTza7&V_R1#~LvJc7ipvfnw%Qx3S4*X9-!PSu}W%3aTG0U<>lfaLxO zKFv|Rl;8`qV9J7G*ZBnu4&22+75hL`kBQG#iY<+22HBAnT);x`GP>qDSJ5<||Jh}N Bwn_j1 literal 0 HcmV?d00001 diff --git a/App/server.R b/App/server.R index 0bbecb7..4209c40 100644 --- a/App/server.R +++ b/App/server.R @@ -1,5 +1,6 @@ library(shiny) library(shinydashboard) +library(shinydashboardPlus) library(Cairo) options(shiny.usecairo = T) library(kableExtra) @@ -28,6 +29,31 @@ function(input, output, session) { ### END CUSTOM URL FOR MENUITEM IN SIDEBARMENU + output$user <- renderUser({ + dashboardUser( + name = "Daniel Franzani", + image = "https://adminlte.io/themes/AdminLTE/dist/img/user2-160x160.jpg", + title = "Ciencia de Datos", + subtitle = "", + fluidRow( + dashboardUserItem( + width = 6, + socialButton( + href = "https://github.com", + icon = icon("github-square") + ) + ), + dashboardUserItem( + width = 6, + socialButton( + href = "https://dropbox.com", + icon = icon("blog") + ) + ) + ) + ) + }) + ### Distribuciones muestrales @@ -62,7 +88,7 @@ function(input, output, session) { } densidad_masa = function(x, valores, tipo, graph = "p"){ - plot(x, valores, main = paste("Función de ", tipo, " probabilidad"), + plot(x, valores, main = paste("Función de ", tipo, " probabilidad"), bty = "n", xlab = "Valores de X", ylab = "", las = 1, type = graph, pch = 16) } @@ -73,13 +99,15 @@ function(input, output, session) { "valores" = unlist(valores[1:cantidad]), "dominio" = rep(1:cantidad, rep(largo, cantidad)) ) - plot( - datos$dominio, datos$valores, + boxplot( + datos$valores ~ datos$dominio, frame = F, main = paste("Primeras ", cantidad, " simulaciones"), - xlab = "Simulación", ylab = "Valores de X simulados", xaxt = "n", + xlab = "Simulación", ylab = "Valores simulados", xaxt = "n", yaxt = "n", las = 1, pch = 16, ylim = c(min(datos$valores), max(datos$valores)*1.4) ) axis(side = 1, at = 1:cantidad, labels = paste0("S", 1:cantidad)) + axis(side = 2, at = seq(from = min(datos$valores), to = max(datos$valores), length.out = 5), + labels = round(seq(from = min(datos$valores), to = max(datos$valores), length.out = 5)), las = 1) legend( "top", legend = paste0(rep("S", cantidad), 1:cantidad, rep(": ", cantidad), diff --git a/App/ui.R b/App/ui.R index 18d0743..86968c4 100644 --- a/App/ui.R +++ b/App/ui.R @@ -1,11 +1,24 @@ library(shiny) library(shinydashboard) +library(shinydashboardPlus) library(Cairo) options(shiny.usecairo = T) +library(kableExtra) # Encabezado general -encabezado = dashboardHeader(title = "Estadística") +# encabezado = dashboardHeader(title = "Estadística", +# # tags$li(class = "dropdown", +# # tags$a(href = "https://www.linkedin.com/in/dfranzani/", +# # icon("linkedin"), "", target = "_blank")), +# tags$li(class = "dropdown", +# tags$a(href = "https://github.com/Dfranzani", +# icon("github"), "", target = "_blank")), +# tags$li(class = "dropdown", +# tags$a(href = "https://dfranzani.netlify.app/", +# icon("blog"), "", target = "_blank"))) + +encabezado = dashboardHeader(title = "Estadística", userOutput("user")) # Panel lateral general: filtro de temas @@ -165,6 +178,6 @@ cuerpo = dashboardBody( ) # Despliegue general -ui = dashboardPage(header = encabezado, sidebar = panelLateral, body = cuerpo, skin = "black") +ui = dashboardPage(header = encabezado, sidebar = panelLateral, body = cuerpo, skin = "black", title = "Hola") diff --git a/docs/app.json b/docs/app.json index 4788d1e..bf3a5d1 100644 --- a/docs/app.json +++ b/docs/app.json @@ -1 +1 @@ -[{"name":"server.R","content":"library(shiny)\nlibrary(shinydashboard)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\nlibrary(kableExtra)\n\nfunction(input, output, session) {\n \n ### CUSTOM URL FOR MENUITEM IN SIDEBARMENU\n ### NOT WORK IN GITHUB PAGES!\n \n # observeEvent(getQueryString(session)$tab, {\n # currentQueryString <- getQueryString(session)$tab # alternative: parseQueryString(session$clientData$url_search)$tab\n # if(is.null(input$sidebarID) || !is.null(currentQueryString) && currentQueryString != input$sidebarID){\n # freezeReactiveValue(input, \"sidebarID\")\n # updateTabItems(session, \"sidebarID\", selected = currentQueryString)\n # }\n # }, priority = 1)\n # \n # observeEvent(input$sidebarID, {\n # currentQueryString <- getQueryString(session)$tab # alternative: parseQueryString(session$clientData$url_search)$tab\n # pushQueryString <- paste0(\"?tab=\", input$sidebarID)\n # if(is.null(currentQueryString) || currentQueryString != input$sidebarID){\n # freezeReactiveValue(input, \"sidebarID\")\n # updateQueryString(pushQueryString, mode = \"push\", session)\n # }\n # }, priority = 0)\n \n ### END CUSTOM URL FOR MENUITEM IN SIDEBARMENU\n \n \n ### Distribuciones muestrales\n \n # observeEvent(input$distribucionDM1,{\n # output$Histograma_promedios = renderPlot({\n # plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n # })\n # \n # output$fdp_fmp_simulaciones = renderPlot({\n # plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n # })\n # })\n \n histTCL = function(valores, media, desviacion, simulaciones){\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n densidad_medias = density(medias)\n hist(x = medias, main = \"Distribución de las medias\", ylab = \"Función de densidad\",\n xlab = \"Valores de la media en las simulaciones\", freq = FALSE, las = 1, breaks = round(1 + log2(simulaciones)),\n xlim = c(lim_inf, lim_sup), ylim = c(0, max(densidad_medias$y, teoricos)*1.1))\n lines(densidad_medias , col = \"darkred\")\n lines(x = grilla, y = teoricos, col = \"darkblue\")\n legend(\n \"topright\", title = \"Distribución\", bty = \"n\",\n legend = c(\"Aproximada \", paste0(\"Teórica - TCL: N(\", media, \", \", round(desviacion^2,5), \")\")),\n lty = 1, col = c(\"darkred\", \"darkblue\")\n )\n }\n \n densidad_masa = function(x, valores, tipo, graph = \"p\"){\n plot(x, valores, main = paste(\"Función de \", tipo, \" probabilidad\"),\n xlab = \"Valores de X\", ylab = \"\", las = 1, type = graph, pch = 16)\n }\n \n plot_simulaciones = function(valores, dominio){\n largo = length(valores[[1]])\n cantidad = 4\n datos = data.frame(\n \"valores\" = unlist(valores[1:cantidad]),\n \"dominio\" = rep(1:cantidad, rep(largo, cantidad))\n )\n plot(\n datos$dominio, datos$valores,\n main = paste(\"Primeras \", cantidad, \" simulaciones\"),\n xlab = \"Simulación\", ylab = \"Valores de X simulados\", xaxt = \"n\",\n las = 1, pch = 16, ylim = c(min(datos$valores), max(datos$valores)*1.4)\n )\n axis(side = 1, at = 1:cantidad, labels = paste0(\"S\", 1:cantidad))\n legend(\n \"top\", \n legend = paste0(rep(\"S\", cantidad), 1:cantidad, rep(\": \", cantidad),\n unlist(lapply(X = valores[1: cantidad], FUN = function(x){return(round(mean(x), 4))}))),\n bty = \"n\", title = \"Media de la simulación\", ncol = 2)\n }\n\n observeEvent(list(input$go_DM1, input$distribucionDM1),{\n \n n = input$nDM1\n simulaciones = input$simulacionesDM1\n \n # set.seed(2024) # Bind cache\n \n if(input$distribucionDM1 == \"Normal\"){\n media = input$mediaDM1_normal\n sigma = sqrt(input$varianzaDM1_normal)\n desviacion = sigma/sqrt(n)\n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rnorm(n = n, mean = media, sd = sigma))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = grilla, valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Exponencial\"){\n tasa = input$tasaDM1_exponencial\n media = tasa\n desviacion = sqrt(tasa^2/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rexp(n = n, rate = 1/tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dexp(seq(from = 0, to = 30, by = 0.001), rate = 1/tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = seq(from = 0, to = 30, by = 0.001), valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Binomial\") {\n ensayos = input$nDM1_binomial\n p = input$pDM1_binomial\n media = ensayos*p\n desviacion = sqrt(ensayos*p*(1-p)/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rbinom(n = n, size = ensayos, prob = p))\n })\n\n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dbinom(x = 0:ensayos, size = ensayos, prob = p)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:ensayos, valores = teoricos,, tipo = \"masa\")\n })\n \n } else if(input$distribucionDM1 == \"Poisson\"){\n tasa = input$tasaDM1_poisson\n media = tasa\n desviacion = sqrt(tasa/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rpois(n = n, lambda = tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dpois(x = 0:30, lambda = tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:30, valores = teoricos, tipo = \"masa\")\n })\n }\n })\n \n \n ### Intervalos de confianza\n \n hist_muestra_IC = function(x, y = NULL, nombre_media = nombre_media, control_lanzamiento = FALSE, colores){\n \n color = ifelse(\"red\" %in% colores, \"red\", \"grey\")\n \n if(nombre_media == \"Una\") {\n titulo = ifelse(control_lanzamiento, \"Distribución de los datos de \\n la muestra del último IC\",\n paste(\"Distribución de los datos de la muestra \\n del IC número\", punto_seleccionado()))\n hist(x, main = titulo, xlab = \"Valores de la muestra\", ylab = \"Frecuencia\", las = 1, col = color)\n } else {\n titulo = ifelse(control_lanzamiento, \"Distribuciones de los datos \\n de las muestras del último IC\",\n paste(\"Distribuciones de los datos de las muestras \\n del IC número\", punto_seleccionado()))\n par(mfrow = c(2,1))\n h1 = hist(x)\n h2 = hist(y)\n par(mar = c(0,5,3,3))\n plot(h1, col = color, xlim = c(min(h1$breaks, h2$breaks), max(h1$breaks, h2$breaks)), ylim = c(0, max(h1$counts, h2$counts)),\n las = 1, ylab = \"Frecuencias de X\", xaxt = \"n\", main = titulo)\n par(mar = c(5,5,0,3))\n plot(h2, col = color, xlim = c(min(h1$breaks, h2$breaks), max(h1$breaks, h2$breaks)), ylim = c(max(h1$counts, h2$counts), 0),\n las = 1, main = \"\", ylab = \"Frecuencias de Y\", xlab = \"Valores de la muestra\")\n }\n }\n \n hist_medias_IC = function(x, nombre_media = nombre_media){\n if(nombre_media == \"Una\") {\n hist(x, main = \"Distribución de las medias muestrales\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n } else {\n hist(x, main = \"Distribución de las diferencias \\n de las medias muestrales (X-Y)\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n }\n }\n \n simulaciones_muestras = function(nombre_media = nombre_media){\n muestras = lapply(X = as.list(1:input$simulacionesIC), FUN = function(sim){\n if(nombre_media == \"Una\") {\n data1 = rnorm(n = input$nIC, mean = input$muIC, sd = sqrt(input$sigma2IC))\n } else {\n data1 = rnorm(n = input$nICX, mean = input$muICX, sd = sqrt(input$varianzaUnaMediaX))\n data2 = rnorm(n = input$nICY, mean = input$muICY, sd = sqrt(input$varianzaUnaMediaY))\n data1 = list(\"data1\" = data1, \"data2\" = data2)\n }\n return(data1)\n })\n return(muestras)\n }\n \n calculo_IC = function(data1, data2 = NULL, tipo, varianzas_conocidas, tipo_varianzas = FALSE, extremos,\n confianza, varianza = NA, varianzaX = NA, varianzaY = NA, tamanos_muestrales = NA, media = media){\n \n if(varianzas_conocidas == FALSE){\n limites = t.test(x = data1, y = data2, conf.level = confianza, alternative = tipo, var.equal = tipo_varianzas)$conf.int[extremos] \n } else {\n if (is.null(data2)) {\n if(tipo == \"two.sided\") {\n limites = mean(data1) + c(-1,1)*qnorm(1 - (1- confianza)/2)*sqrt(varianza/tamanos_muestrales[1])\n } else if(tipo == \"less\") {\n limites = mean(data1) + qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n } else {\n limites = mean(data1) - qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n }\n } else {\n if(tipo == \"two.sided\") {\n limites = c(mean(data1) - mean(data2) - qnorm(1 - (1- confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]),\n mean(data1) - mean(data2) + qnorm(1 - (1 - confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]))\n } else if(tipo == \"less\") {\n limites = mean(data1) - mean(data2) + qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n } else {\n limites = mean(data1) - mean(data2) - qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n }\n }\n }\n \n if(tipo == \"greater\") {\n limites = c(limites, limites[1] + 0.5*sqrt(varianza))\n colores = c(ifelse(limites[1] > media, \"red\", \"black\"), \"white\")\n } else if(tipo == \"less\") {\n limites = c(limites[1] - 0.5*sqrt(varianza), limites)\n colores = c(\"white\", ifelse(limites[2] < media, \"red\", \"black\"))\n } else {\n colores = rep(ifelse(limites[1] < media & limites[2] > media, \"black\", \"red\"), 2)\n }\n return(c(limites, colores))\n }\n \n grafico_IC = function(x, y, colores, limites_x, simulaciones, media, nombre_media, tipoIC){\n plot(\n x = x, y = 1:simulaciones, col = colores[,1], pch = 16, las = 1, bty = \"n\",\n ylim = c(-5, simulaciones + 5), xlim = limites_x, xaxt = \"n\", yaxt = \"n\",\n xlab = \"Valores del IC\", ylab = \"Número de simulación\",\n main = ifelse(nombre_media == \"Una\",\n \"IC para la media proveniente \\n de una distribución normal\",\n \"IC para la diferencia de medias (X-Y) \\n provenientes de distribuciones normales\")\n )\n axis(side = 1, at = c(limites_x[1], media, limites_x[2]), labels = c(limites_x[1], media, limites_x[2]), xlim = limites_x)\n axis(side = 2, at = round(seq(from = 1, to = simulaciones, length.out = 10), 0), las = 1)\n points(x = y, y = 1:simulaciones, pch = 16, col = colores[,2])\n if(tipoIC == \"less\"){\n arrows(x1 = x, x0 = y, y1 = 1:simulaciones, y0 = 1:simulaciones, length = 0.07, col = colores[,2])\n rojos = round(sum(colores[,2] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else if(tipoIC == \"greater\") {\n arrows(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, length = 0.07, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else {\n segments(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,1])*100, digits = 2)\n negros = 100 - rojos\n }\n rojos = paste(rojos, \"%\")\n negros = paste(negros, \"%\")\n # abline(v = media, col = \"black\", lty = 2)\n segments(x0 = media, y0 = 0, x1 = media, y1 = simulaciones+1, lty = 2)\n legend(\"topleft\", legend = c(negros, rojos), lty = 1, col = c(\"black\", \"red\"), title = \"Proporción de IC\", bty = \"n\")\n legend(\"bottomleft\", legend = c(\"Haga click en un IC (o cerca) \\n para ver la distribución de los \\n datos de la muestra. \\n \\n\"), bty = \"n\")\n }\n \n IC = function(tipo_varianzas, tipoIC, extremos, confianza, varianza, varianzaX = NA, varianzaY = NA,\n tamanos_muestrales, media = media, nombre_media = nombre_media){\n muestras_simuladas = simulaciones_muestras(nombre_media = nombre_media)\n ics = lapply(X = muestras_simuladas, FUN = function(muestra){\n if(input$VarianzasIC != \"Conocidas\") {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = FALSE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = FALSE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, media = media,\n varianza = varianza,)\n }\n } else {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = TRUE, tipo_varianzas = tipo_varianzas,\n extremos = extremos, confianza = confianza, varianza = varianza, tamanos_muestrales = tamanos_muestrales,\n media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = TRUE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, varianza = varianza,\n varianzaX = varianzaX, varianzaY = varianzaY, tamanos_muestrales = tamanos_muestrales, media = media)\n }\n }\n return(ic)\n })\n ics = as.data.frame(matrix(unlist(ics), ncol = 4, byrow = TRUE))\n ics[,1] = as.numeric(ics[,1])\n ics[,2] = as.numeric(ics[,2])\n return(list(ics, muestras_simuladas))\n }\n \n muestras = NULL\n ic = NULL\n nombre_media_global = NULL\n simulaciones_global = NULL\n \n observeEvent(list(input$go_IC),{\n confianza = input$ConfianzaIC/100\n simulaciones = input$simulacionesIC\n simulaciones_global <<- simulaciones\n media = ifelse(input$MediasIC == \"Una\", input$muIC, input$muICX - input$muICY)\n tipoIC = switch(input$tipoIC, \"Bilateral\" = \"two.sided\", \"Acotado por la derecha\" = \"less\", \"Acotado por la izquierda\" = \"greater\")\n extremos = switch(tipoIC, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = ifelse(input$MediasIC == \"Una\", input$sigma2IC, (input$varianzaUnaMediaX + input$varianzaUnaMediaY)/2)\n tipo_varianzas = switch(input$VarianzasICMedias, \"Iguales\" = TRUE, \"Distintas\" = FALSE)\n nombre_media = ifelse(input$MediasIC == \"Una\", \"Una\", \"Dos\")\n nombre_media_global <<- nombre_media\n varianzaX = input$varianzaUnaMediaX\n varianzaY = input$varianzaUnaMediaY\n tamanos_muestrales = c(input$nIC, input$nICX, input$nICY)\n \n ic_y_muestras = IC(tipo_varianzas = tipo_varianzas, tipoIC = tipoIC, extremos = extremos, confianza = confianza,\n varianza = varianza, varianzaX = varianzaX, varianzaY = varianzaY,\n tamanos_muestrales = tamanos_muestrales, media = media, nombre_media = nombre_media)\n ic <<- ic_y_muestras[[1]]\n muestras <<- ic_y_muestras[[2]]\n \n dif_maxima = max(abs(c(media - c(ic[,1], ic[,2]))))\n maximo = round(media + 1.5*dif_maxima, digits = 4)\n minimo = round(media - 1.5*dif_maxima, digits = 4)\n \n output$plot_ic = renderPlot({\n grafico_IC(x = ic[,1], y = ic[,2], colores = ic[,3:4], limites_x = c(minimo, maximo),\n simulaciones = simulaciones, media = media, nombre_media = nombre_media, tipoIC = tipoIC)\n }, height = 800)\n \n punto_seleccionado(NULL)\n output$histogramaIC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones]], nombre_media = nombre_media,\n control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones]]$data1, y = muestras[[simulaciones]]$data2,\n nombre_media = nombre_media, control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n }\n })\n \n output$histograma_medias_IC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_medias_IC(x = unlist(lapply(X = muestras, FUN = mean)), nombre_media = nombre_media)\n } else {\n hist_medias_IC(\n x = unlist(lapply(X = muestras, FUN = function(muestra){\n return(mean(muestra$data1) - mean(muestra$data2))\n })),\n nombre_media = nombre_media)\n }\n })\n })\n \n punto_seleccionado = reactiveVal(NULL)\n \n observeEvent(input$plot_click, {\n click_y = input$plot_click$y\n punto_seleccionado(round(click_y))\n if(punto_seleccionado() >= 1 & punto_seleccionado() <= simulaciones_global){\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[punto_seleccionado()]], nombre_media = nombre_media_global,\n control_lanzamiento = FALSE, colores = ic[punto_seleccionado(), 3:4])\n } else {\n hist_muestra_IC(x = muestras[[punto_seleccionado()]]$data1, y = muestras[[punto_seleccionado()]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = FALSE, colores = ic[punto_seleccionado(), 3:4])\n }\n })\n } else {\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones_global]], nombre_media = nombre_media_global,\n control_lanzamiento = TRUE, colores = ic[simulaciones_global, 3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones_global]]$data1, y = muestras[[simulaciones_global]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = TRUE, colores = ic[simulaciones_global, 3:4])\n }\n })\n }\n })\n \n ### Pruebas de hipótesis\n \n grafico_estadisticoPrueba = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra, est_prueba, valor_critico, confianza){\n \n max = max(abs(c(0 - c(est_prueba, valor_critico, 4))))\n limites = c(0 - max * 1.2, 0 + max * 1.2)\n \n # print(c(limites, est_prueba, valor_critico, max))\n \n valores_x = seq(from = limites[1], to = limites[2], by = 0.01)\n valores_x = c(valores_x, est_prueba, valor_critico, -est_prueba, -valor_critico)\n valores_x = valores_x[order(valores_x)]\n \n plot(x = valores_x, y = dnorm(x = valores_x),\n main = \"Distribución del estadístico de prueba\", xlab = \"Valores de Z\", ylab = \"Densidad\",\n las = 1, xaxt = \"n\", type = \"l\", bty = \"n\", xlim = limites, ylim = c(0, 0.5))\n axis(side = 1, at = c(limites[1], 0, limites[2]),\n labels = round(c(limites[1], 0, limites[2]), 2), cex.axis = 1, las = 1)\n \n if(tipoPH == \"two.sided\") {\n axis(side = 1, at = c(-est_prueba, est_prueba), labels = round(c(-est_prueba, est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(-valor_critico, valor_critico), labels = round(c(-valor_critico, valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(-abs(valor_critico), valores_x[valores_x <= -abs(valor_critico)]),\n y = c(min(dnorm(x = valores_x[valores_x <= -abs(valor_critico)])), dnorm(x = valores_x[valores_x <= -abs(valor_critico)])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(-abs(est_prueba), valores_x[valores_x <= -abs(est_prueba)]),\n y = c(min(dnorm(x = valores_x[valores_x <= -abs(est_prueba)])), dnorm(x = valores_x[valores_x <= -abs(est_prueba)])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n polygon(x = c(abs(valor_critico), valores_x[valores_x >= abs(valor_critico)]),\n y = c(min(dnorm(x = valores_x[valores_x >= abs(valor_critico)])), dnorm(x = valores_x[valores_x >= abs(valor_critico)])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(abs(est_prueba), valores_x[valores_x >= abs(est_prueba)]),\n y = c(min(dnorm(x = valores_x[valores_x >= abs(est_prueba)])), dnorm(x = valores_x[valores_x >= abs(est_prueba)])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = 2 - 2*pnorm(abs(est_prueba))\n } else if(tipoPH == \"less\") {\n axis(side = 1, at = c(est_prueba), labels = round(c(est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(valor_critico), labels = round(c(valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(valor_critico, valores_x[valores_x <= valor_critico]),\n y = c(min(dnorm(x = valores_x[valores_x <= valor_critico])), dnorm(x = valores_x[valores_x <= valor_critico])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(est_prueba, valores_x[valores_x <= est_prueba]),\n y = c(min(dnorm(x = valores_x[valores_x <= est_prueba])), dnorm(x = valores_x[valores_x <= est_prueba])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = pnorm(est_prueba)\n } else {\n axis(side = 1, at = c(est_prueba), labels = round(c(est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(valor_critico), labels = round(c(valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(valor_critico, valores_x[valores_x >= valor_critico]),\n y = c(min(dnorm(x = valores_x[valores_x >= valor_critico])), dnorm(x = valores_x[valores_x >= valor_critico])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(est_prueba, valores_x[valores_x >= est_prueba]),\n y = c(min(dnorm(x = valores_x[valores_x >= est_prueba])), dnorm(x = valores_x[valores_x >= est_prueba])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = 1 - pnorm(est_prueba)\n }\n legend(\"topright\", legend = paste(c(\"Valor-p:\", \"Significancia:\"), round(c(valor_p, 1 - confianza), 4)), bty = \"n\",\n lty = 2, col = c(\"red\", \"blue\"))\n legend(\"topleft\", legend = ifelse(valor_p <= 1 - confianza, \"Se rechaza\", \"No se rechaza\"), bty = \"n\", title = \"Estado:\", text.font = 4)\n }\n \n grafico_IC_PH = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra, est_prueba, valor_critico, confianza){\n \n max = max(abs(c(0 - c(est_prueba, valor_critico, 4))))\n limites = c(0 - max * 1.2, 0 + max * 1.2)\n \n valores_x = seq(from = limites[1], to = limites[2], by = 0.01)\n valores_x = c(valores_x, est_prueba, valor_critico, -est_prueba, -valor_critico)\n valores_x = valores_x[order(valores_x)]\n valores_y = dnorm(x = valores_x)\n \n transformacion = function(x.barra){\n return((x.barra - mu0)/sqrt(varianza/nMuestra))\n }\n \n transformacion_inversa = function(Z0){\n return(mu0 + Z0*sqrt(varianza/nMuestra))\n }\n \n plot(x = valores_x, y = valores_y,\n main = \"Distribución de la media muestral \\n e intervalo de confianza\", xlab = \"Valores del promedio\", ylab = \"Densidad\",\n las = 1, xaxt = \"n\", type = \"l\", bty = \"n\", xlim = limites, ylim = c(0, 0.5))\n axis(side = 1, at = c(limites[1], 0, limites[2]),\n labels = round(transformacion_inversa(c(limites[1], 0, limites[2])), 4), cex.axis = 1, las = 1)\n segments(x0 = 0, x1 = 0, y0 = 0, y1 = max(valores_y), col = \"black\", lty = 2)\n \n ic = as.numeric(ic[1:2])\n ic2 = transformacion(as.numeric(ic[1:2]))\n max_y = max(valores_y)*0.5\n \n if(tipoPH == \"two.sided\") {\n segments(x0 = ic2[1], x1 = ic2[2], y0 = max_y, y1 = max_y, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(\", round(ic[1], 4), \", \", round(ic[2], 4), \")\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n } else if(tipoPH == \"less\") {\n arrows(x1 = limites[1], x0 = ic2[2], y0 = max_y, y1 = max_y, length = 0.1, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(-Inf, \", round(ic[2], 4), \")\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n } else {\n arrows(x0 = ic2[1], x1 = limites[2], y0 = max_y, y1 = max_y, length = 0.1, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(\", round(ic[1], 4), \", Inf)\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n }\n legend(\"topright\", legend = mu0, bty = \"n\", title = \"mu_0\", lty = 2)\n }\n \n valor_critico = function(confianza, tipo, mu0, varianza, nMuestra, mediaMuestra){\n if(tipo == \"two.sided\") {\n valor_critico = qnorm(1 - (1 - confianza)/2)\n } else if(tipo == \"less\") {\n valor_critico = qnorm(1 - confianza)\n } else {\n valor_critico = qnorm(confianza)\n }\n estadistico_prueba = (mediaMuestra - mu0)/(sqrt(varianza/nMuestra))\n return(c(estadistico_prueba, valor_critico))\n }\n \n observeEvent(list(input$go_PH), {\n confianza = input$confianzaPH/100\n mu0 = input$mu0PH\n mediaMuestra = input$mediaMuestraPH\n tipoPH = switch(input$tipoPH, \"Bilateral\" = \"two.sided\", \"Unilateral derecha\" = \"greater\", \"Unilateral izquierda\" = \"less\")\n extremos = switch(tipoPH, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = input$sigma2PH\n nombre_media = \"Una\"\n nMuestra = input$nPH\n \n # Los argumentos data debe ser el promedio n veces para que calce con el cálculo del IC de la función \"calculo_IC\"\n ic = calculo_IC(data1 = rep(mediaMuestra, nMuestra), tipo = tipoPH, varianzas_conocidas = TRUE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = mediaMuestra, tamanos_muestrales = nMuestra)\n \n valor_critico = valor_critico(confianza = confianza, tipo = tipoPH, mu0 = mu0, varianza = varianza,\n nMuestra = nMuestra, mediaMuestra = mediaMuestra)\n \n output$plot_ph = renderPlot({\n grafico_estadisticoPrueba(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra,\n est_prueba = valor_critico[1], valor_critico = valor_critico[2], confianza = confianza)\n }, height = 400)\n \n output$plot_ic_ph = renderPlot({\n grafico_IC_PH(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra,\n est_prueba = valor_critico[1], valor_critico = valor_critico[2], confianza = confianza)\n }, height = 400)\n \n })\n \n ### Regresión Lineal (Simple)\n \n regresion = function(x, y){\n modelo = lm(y ~ x)\n return(modelo)\n }\n \n grafico_RL = function(x, y, modelo){\n betas = modelo$coefficients\n confidence_values = predict.lm(modelo, interval = \"confidence\")\n prediction_values = predict.lm(modelo, newdata = data.frame(\"x\" = x, \"y\" = y), interval = \"prediction\")\n y_confidence = confidence_values[order(confidence_values[,1]), 2:3]\n y_prediction = prediction_values[order(prediction_values[,1]), 2:3]\n plot(x = x, y = y, las = 1, bty = \"n\",\n main = \"Regresión Lineal Simple\", xlab = \"Valores de X\", ylab = \"Valores de Y\",\n ylim = c(min(c(y, y_confidence, y_prediction)), max(c(y, y_confidence, y_prediction))))\n segments(x0 = min(x), x1 = max(x), y0 = betas[1] + betas[2]*min(x), y1 = betas[1] + betas[2]*max(x), col = \"red\", lty = 1)\n lines(x = x[order(x)], y = y_confidence[,1], col = \"blue\", lty = 2)\n lines(x = x[order(x)], y = y_confidence[,2], col = \"blue\", lty = 2)\n lines(x = x[order(x)], y = y_prediction[,1], col = \"darkgreen\" ,lty = 2)\n lines(x = x[order(x)], y = y_prediction[,2], col = \"darkgreen\", lty = 2)\n legend(\"topleft\", legend = c(\"Recta de regresión ajustada\", \"IC del 95% para la media\", \"IC del 95% para la predicción\"),\n lty = c(1, 2, 2), col = c(\"red\", \"blue\", \"darkgreen\"), bty = \"n\")\n }\n \n grafico_supuestos = function(x, y, modelo){\n par(mfrow = c(2,2), bty = \"n\", las = 1)\n plot(x = modelo$fitted.values, y = residuals(modelo),\n main = \"Linealidad\", xlab = \"Valores ajustados\", ylab = \"Residuos\")\n acf(residuals(modelo),\n main = \"Independenica \\n (Función de Autocorrelación: ACF)\", xlab = \"Lag\", ylab = \"ACF\")\n plot(x = modelo$fitted.values, y = sqrt(abs(rstandard(modelo))),\n main = \"Homocedasticidad\", xlab = \"Valores ajustados\", ylab = \"Raíz de los residuos estandarizados\")\n qqnorm(modelo$residuals, main = \"Normalidad \\n (Cuantil - Cuantil)\", xlab = \"Cuantiles teóricos\", ylab = \"Cuantiles observados\")\n qqline(modelo$residuals)\n }\n \n violacion_supuestos = function(x, y){\n \n aux_y = y\n aux_x = x\n \n if(!is.null(input$violacionSupuestos)){\n \n if (\"Linealidad\" %in% input$violacionSupuestos){\n y = y + (x/70)^3\n }\n \n if (\"Independencia\" %in% input$violacionSupuestos ){\n y = apply(X = as.matrix(cbind(seq(from = 0, to = 45, length.out = length(y)), y)), MARGIN = 1, FUN = function(fila){\n recorrido = sin(fila[1])*200 + fila[2]\n return(recorrido)\n })\n } \n \n if (\"Homocedasticidad\" %in% input$violacionSupuestos){\n incrementos = cumsum(seq(from = 0.8, to = 1.2, length.out = length(y)))\n y = abs(y*incrementos - max(y)/2)\n }\n \n if (\"Normalidad\" %in% input$violacionSupuestos){\n n_min = y[order(y)][8]\n n_max = y[order(y)][(length(y)-8)]\n y[y <= n_min] = y[y <= n_min] - y[y == n_max]*0.5\n y[y >= n_max] = y[y >= n_max] + y[y == n_max]*0.5\n } \n }\n return(y)\n }\n \n observeEvent(list(input$go_RL), {\n \n set.seed(2024)\n desviacion_simulacion = 100\n x_poblacion = seq(from = 1, to = input$nPoblacionalRLS, by = 1)\n y_poblacion = apply(X = as.matrix(x_poblacion + 100), MARGIN = 1, FUN = function(media){\n return(rnorm(n = 1, mean = media, sd = desviacion_simulacion))\n })\n \n n_muestra = sample(x = 1:input$nPoblacionalRLS, size = input$nMuestralRLS, replace = FALSE)\n x_muestral = x_poblacion[n_muestra]\n y_muestral = y_poblacion[n_muestra]\n y_muestral = violacion_supuestos(x = x_muestral, y = y_muestral)\n RL = regresion(x = x_muestral, y = y_muestral)\n \n output$plot_rl = renderPlot({\n grafico_RL(x = x_muestral, y = y_muestral, modelo = RL)\n })\n \n output$plot_supuestos = renderPlot({\n grafico_supuestos(x = x_muestral, y = y_muestral, modelo = RL)\n })\n \n output$resumen_rl = function(){\n summary_RL = round(summary(RL)$coefficients, digits = 4)\n summary_RL = ifelse(summary_RL == 0, \"<2e-16\", summary_RL)\n rownames(summary_RL) <- c(\"β0<\/sub>\", \"β1<\/sub>\")\n kableExtra::kbl(summary_RL, escape = FALSE, booktabs = T, align = \"c\",\n caption = \"Resumen del modelo de regresión lineal\",\n col.names = c(\"Estimación\", \"Error estándar\", \"Estadístico de prueba t\", \"Valor-p\")) |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n \n output$resumen_rl_metricas = function(){\n summary_RL = summary(RL)\n metrics = round(unlist(summary_RL[c(\"fstatistic\", \"sigma\", \"r.squared\", \"adj.r.squared\")])[c(1,4:6)], digits = 4)\n kableExtra::kbl(t(as.matrix(metrics)), escape = FALSE, booktabs = T, align = \"c\",\n col.names = c(\"Estadístico F0<\/sub>\", \"Error estándar residual\", \"R2<\/sup>\", \"R2<\/sup> ajustado\")) |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n\n output$resumen_supuestos = function(){\n \n tests = list(\n lmtest::bptest(formula = formula(RL), data = data.frame(\"x\" = x_muestral, \"y\" = y_muestral)),\n lmtest::dwtest(formula = formula(RL), data = data.frame(\"x\" = x_muestral, \"y\" = y_muestral), alternative = \"two.sided\"),\n shapiro.test(x = rstandard(RL))\n ) |> lapply(FUN = function(test){\n valor_p = round(test$p.value, digits = 4)\n statistic = round(test$statistic, digits = 4)\n valor_p = ifelse(valor_p < 0.0001, \"<1e-4\", valor_p)\n statistic = ifelse(statistic < 0.0001, \"<1e-4\", statistic)\n return(c(statistic, valor_p))\n }) |> unlist() |> matrix(ncol = 2, byrow = TRUE) |> data.frame() |> setNames(c(\"Estadístico\", \"Valor-p\"))\n \n \n tests$Prueba = c(\"Breusch-Pagan\", \"Durbin-Watson\", \"Shapiro-Wilk\")\n tests$Supuesto = c(\"Homocedasticidad\", \"Independencia\", \"Normalidad\")\n tests = tests[, c(\"Supuesto\", \"Prueba\", \"Estadístico\", \"Valor-p\")]\n \n kableExtra::kbl(tests, escape = FALSE, booktabs = T, align = \"c\",\n caption = \"Prueba de hipótesis de los supuestos del modelo de regresión lineal\") |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n\n })\n \n# End general function \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","type":"text"},{"name":"ui.R","content":"library(shiny)\nlibrary(shinydashboard)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\n\n# Encabezado general\n\nencabezado = dashboardHeader(title = \"Estadística\")\n\n# Panel lateral general: filtro de temas\n\npanelLateral = dashboardSidebar(\n collapsed = FALSE,\n sidebarMenu(\n id = \"sidebarID\",\n menuItem(\"Teorema Central del Límite\", tabName = \"DM1\"),\n menuItem(\"IC: Intervalos de confianza\", tabName = \"IC\"),\n menuItem(\"Pruebas de Hipótesis\", tabName = \"PH\"),\n menuItem(\"Regresión Lineal\", tabName = \"RL\")\n )\n)\n\n# Paneles: cuerpo de cada panel del Panel lateral\n# Un cuerpo se puede volver a dividir en otro tipo de Layout\n\nsimulador = actionButton(inputId = \"go_DM1\", label = \"Simular\")\n\ncuerpo_DM1 = sidebarLayout(\n sidebarPanel(\n width = 3,\n selectInput(inputId = \"distribucionDM1\", label = \"Distribución\", choices = c(\"Normal\", \"Exponencial\", \"Binomial\", \"Poisson\")),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Normal'\",\n sliderInput(inputId = \"mediaDM1_normal\", label = \"Media poblacional\", min = 0, max = 20, value = 12, step = 0.2),\n sliderInput(inputId = \"varianzaDM1_normal\", label = \"Varianza poblacional\", min = 0, max = 20, value = 2, step = 0.1),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Binomial'\",\n sliderInput(inputId = \"nDM1_binomial\", label = \"Ensayos\", min = 1, max = 100, value = 12, step = 1),\n sliderInput(inputId = \"pDM1_binomial\", label = \"Probabilidad de éxito\", min = 0, max = 1, value = 0.4, step = 0.05),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Exponencial'\",\n sliderInput(inputId = \"tasaDM1_exponencial\", label = \"Tasa\", min = 0, max = 20, value = 5, step = 0.1)\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Poisson'\",\n sliderInput(inputId = \"tasaDM1_poisson\", label = \"Tasa\", min = 0, max = 20, value = 8, step = 0.1)\n ),\n sliderInput(inputId = \"nDM1\", label = \"Tamaño muestral\", min = 100, max = 1000, value = 200, step = 50),\n sliderInput(inputId = \"simulacionesDM1\", label = \"Cantidad de simulaciones\", min = 100, max = 7000, value = 1300, step = 100),\n simulador\n ),\n mainPanel(\n width = 9,\n plotOutput(\"Histograma_promedios\"), plotOutput(\"fdp_fmp_simulaciones\")\n )\n)\n\nsimulador2 = actionButton(inputId = \"go_IC\", label = \"Simular\")\n\ncuerpo_IC = sidebarLayout(\n sidebarPanel(\n width = 3,\n fluidRow(\n column(width = 4, radioButtons(inputId = \"MediasIC\", label = \"Medias\", choices = c(\"Una\", \"Dos\"))),\n column(width = 8, radioButtons(inputId = \"VarianzasIC\", label = \"Varianzas\", choices = c(\"Conocidas\", \"Desconocidas\")))\n ),\n conditionalPanel(\n condition = \"input.VarianzasIC == 'Desconocidas' && input.MediasIC == 'Dos'\",\n radioButtons(inputId = \"VarianzasICMedias\", label = \"Varianzas desconocidas\", choices = c(\"Iguales\", \"Distintas\"))\n ),\n sliderInput(inputId = \"ConfianzaIC\", label = \"% Confianza\", min = 10, max = 99, value = 90, step = 1),\n radioButtons(inputId = \"tipoIC\", label = \"Tipo de IC\", choices = c(\"Bilateral\", \"Acotado por la derecha\", \"Acotado por la izquierda\")),\n conditionalPanel(\n condition = \"input.MediasIC == 'Una'\",\n sliderInput(inputId = \"muIC\", label = \"Media poblacional\", min = -20, max = 20, value = 0, step = 0.1),\n sliderInput(inputId = \"sigma2IC\", label = \"Varianza poblacional\", min = 5, max = 30, value = 10, step = 0.1),\n sliderInput(inputId = \"nIC\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10)\n ),\n conditionalPanel(\n condition = \"input.MediasIC == 'Dos'\",\n fluidRow(\n column(width = 6, sliderInput(inputId = \"muICX\", label = \"Media poblacional X\", min = -10, max = 10, value = 0, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"muICY\", label = \"Media poblacional Y\", min = -10, max = 10, value = 7, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaX\", label = \"Varianza poblacional X\", min = 10, max = 25, value = 12, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaY\", label = \"Varianza poblacional Y\", min = 10, max = 25, value = 16, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"nICX\", label = \"Tamaño muestral X\", min = 50, max = 150, value = 120, step = 10)),\n column(width = 6, sliderInput(inputId = \"nICY\", label = \"Tamaño muestral Y\", min = 50, max = 150, value = 80, step = 10))\n ),\n ),\n sliderInput(inputId = \"simulacionesIC\", label = \"Cantidad de simulaciones\", min = 10, max = 100, value = 60, step = 1),\n simulador2\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 6, plotOutput(\"plot_ic\", click = \"plot_click\", height = \"800px\")),\n column(width = 6, plotOutput(\"histogramaIC\"), plotOutput(\"histograma_medias_IC\"))\n )\n )\n)\n\nsimulador3 = actionButton(inputId = \"go_PH\", label = \"Simular\")\n\ncuerpo_PH = sidebarLayout(\n sidebarPanel(\n width = 3,\n radioButtons(inputId = \"mediasPH\", label = \"Medias\", choices = c(\"Una\")),#, \"Dos\")),\n radioButtons(inputId = \"varianazasPH\", label = \"Varianzas\", choices = c(\"Conocidas\")),#, \"Desconocidas\")),\n radioButtons(inputId = \"tipoPH\", label = \"Tipo de prueba\", choices = c(\"Bilateral\", \"Unilateral derecha\", \"Unilateral izquierda\")),\n sliderInput(inputId = \"mu0PH\", label = \"Media bajo Hipótesis nula\", min = -5, max = 5, value = 0, step = 0.02),\n sliderInput(inputId = \"sigma2PH\", label = \"Varianza poblacional\", min = 1, max = 50, value = 10, step = 0.5),\n sliderInput(inputId = \"mediaMuestraPH\", label = \"Media muestral\", min = -5, max = 5, value = 0.6, step = 0.02),\n sliderInput(inputId = \"nPH\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10),\n sliderInput(inputId = \"confianzaPH\", label = \"% Confianza\", min = 10, max = 99, value = 87, step = 1),\n simulador3\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 12, plotOutput(\"plot_ph\"), plotOutput(\"plot_ic_ph\"))\n )#,\n # fluidRow(\n # column(width = 6, withMathJax(includeMarkdown(\"Regresion+Lineal/Prueba.md\")))\n # )\n )\n)\n\nsimulador4 = actionButton(inputId = \"go_RL\", label = \"Simular\")\ncuerpo_RL = sidebarLayout(\n sidebarPanel(\n width = 2,\n radioButtons(inputId = \"tipoRL\", label = \"Tipo de regresión\", choices = c(\"Simple\")),\n # radioButtons(inputId = \"tipoRL\", label = \"Tipo de regresión\", choices = c(\"Simple\", \"Múltiple\")),\n conditionalPanel(\n condition = \"input.tipoRL == 'Simple'\",\n sliderInput(inputId = \"nPoblacionalRLS\", label = \"Tamaño poblacional\", min = 600, max = 800, value = 700, step = 10),\n sliderInput(inputId = \"nMuestralRLS\", label = \"Tamaño muestral\", min = 100, max = 550, value = 240, step = 10)\n ),\n checkboxGroupInput(inputId = \"violacionSupuestos\", label = \"Violación de supuestos\",\n choices = c(\"Linealidad\", \"Normalidad\", \"Homocedasticidad\", \"Independencia\")),\n simulador4\n ),\n mainPanel(\n width = 10,\n fluidRow(\n column(width = 6, plotOutput(\"plot_rl\", height = \"500px\"), br(), tableOutput(\"resumen_rl\"), tableOutput(\"resumen_rl_metricas\")),\n column(width = 6, plotOutput(\"plot_supuestos\", height = \"500px\"), br(), tableOutput(\"resumen_supuestos\"))\n )\n )\n)\n# Asignando los cuerpos por filtro\nhoja_DM = tabItem(tabName = \"DM1\", fluidPage(cuerpo_DM1))\nhoja_IC = tabItem(tabName = \"IC\", fluidPage(cuerpo_IC))\nhoja_PH = tabItem(tabName = \"PH\", fluidPage(cuerpo_PH))\nhoja_RL = tabItem(tabName = \"RL\", fluidPage(cuerpo_RL))\n\ncuerpo = dashboardBody(\n tabItems(hoja_DM, hoja_IC, hoja_PH, hoja_RL)\n)\n\n# Despliegue general\nui = dashboardPage(header = encabezado, sidebar = panelLateral, body = cuerpo, skin = \"black\")\n\n\n","type":"text"},{"name":"Regresion+Lineal/Prueba.md","content":"# Probando elementos de inscrustación\n\n$$\nA + B = C\n$$\n\n1. Hola\n\n2. CHao\n\n**HOLA**S","type":"text"}] +[{"name":"server.R","content":"library(shiny)\nlibrary(shinydashboard)\n# library(shinydashboardPlus)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\nlibrary(kableExtra)\n\nfunction(input, output, session) {\n \n ### CUSTOM URL FOR MENUITEM IN SIDEBARMENU\n ### NOT WORK IN GITHUB PAGES!\n \n # observeEvent(getQueryString(session)$tab, {\n # currentQueryString <- getQueryString(session)$tab # alternative: parseQueryString(session$clientData$url_search)$tab\n # if(is.null(input$sidebarID) || !is.null(currentQueryString) && currentQueryString != input$sidebarID){\n # freezeReactiveValue(input, \"sidebarID\")\n # updateTabItems(session, \"sidebarID\", selected = currentQueryString)\n # }\n # }, priority = 1)\n # \n # observeEvent(input$sidebarID, {\n # currentQueryString <- getQueryString(session)$tab # alternative: parseQueryString(session$clientData$url_search)$tab\n # pushQueryString <- paste0(\"?tab=\", input$sidebarID)\n # if(is.null(currentQueryString) || currentQueryString != input$sidebarID){\n # freezeReactiveValue(input, \"sidebarID\")\n # updateQueryString(pushQueryString, mode = \"push\", session)\n # }\n # }, priority = 0)\n \n ### END CUSTOM URL FOR MENUITEM IN SIDEBARMENU\n \n \n # output$user <- renderUser({\n # dashboardUser(\n # name = \"Divad Nojnarg\", \n # image = \"https://adminlte.io/themes/AdminLTE/dist/img/user2-160x160.jpg\", \n # title = \"shinydashboardPlus\",\n # subtitle = \"Author\", \n # footer = p(\"The footer\", class = \"text-center\"),\n # fluidRow(\n # dashboardUserItem(\n # width = 6,\n # socialButton(\n # href = \"https://dropbox.com\",\n # icon = icon(\"dropbox\")\n # )\n # ),\n # dashboardUserItem(\n # width = 6,\n # socialButton(\n # href = \"https://github.com\",\n # icon = icon(\"github\")\n # )\n # )\n # )\n # )\n # })\n \n \n ### Distribuciones muestrales\n \n # observeEvent(input$distribucionDM1,{\n # output$Histograma_promedios = renderPlot({\n # plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n # })\n # \n # output$fdp_fmp_simulaciones = renderPlot({\n # plot(1, 1, col = \"white\", ylab = \"\", xlab = \"\", axes = F)\n # })\n # })\n \n histTCL = function(valores, media, desviacion, simulaciones){\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n densidad_medias = density(medias)\n hist(x = medias, main = \"Distribución de las medias\", ylab = \"Función de densidad\",\n xlab = \"Valores de la media en las simulaciones\", freq = FALSE, las = 1, breaks = round(1 + log2(simulaciones)),\n xlim = c(lim_inf, lim_sup), ylim = c(0, max(densidad_medias$y, teoricos)*1.1))\n lines(densidad_medias , col = \"darkred\")\n lines(x = grilla, y = teoricos, col = \"darkblue\")\n legend(\n \"topright\", title = \"Distribución\", bty = \"n\",\n legend = c(\"Aproximada \", paste0(\"Teórica - TCL: N(\", media, \", \", round(desviacion^2,5), \")\")),\n lty = 1, col = c(\"darkred\", \"darkblue\")\n )\n }\n \n densidad_masa = function(x, valores, tipo, graph = \"p\"){\n plot(x, valores, main = paste(\"Función de \", tipo, \" probabilidad\"), bty = \"n\",\n xlab = \"Valores de X\", ylab = \"\", las = 1, type = graph, pch = 16)\n }\n \n plot_simulaciones = function(valores, dominio){\n largo = length(valores[[1]])\n cantidad = 4\n datos = data.frame(\n \"valores\" = unlist(valores[1:cantidad]),\n \"dominio\" = rep(1:cantidad, rep(largo, cantidad))\n )\n boxplot(\n datos$valores ~ datos$dominio, frame = F,\n main = paste(\"Primeras \", cantidad, \" simulaciones\"),\n xlab = \"Simulación\", ylab = \"Valores simulados\", xaxt = \"n\", yaxt = \"n\",\n las = 1, pch = 16, ylim = c(min(datos$valores), max(datos$valores)*1.4)\n )\n axis(side = 1, at = 1:cantidad, labels = paste0(\"S\", 1:cantidad))\n axis(side = 2, at = seq(from = min(datos$valores), to = max(datos$valores), length.out = 5),\n labels = round(seq(from = min(datos$valores), to = max(datos$valores), length.out = 5)), las = 1)\n legend(\n \"top\", \n legend = paste0(rep(\"S\", cantidad), 1:cantidad, rep(\": \", cantidad),\n unlist(lapply(X = valores[1: cantidad], FUN = function(x){return(round(mean(x), 4))}))),\n bty = \"n\", title = \"Media de la simulación\", ncol = 2)\n }\n\n observeEvent(list(input$go_DM1, input$distribucionDM1),{\n \n n = input$nDM1\n simulaciones = input$simulacionesDM1\n \n # set.seed(2024) # Bind cache\n \n if(input$distribucionDM1 == \"Normal\"){\n media = input$mediaDM1_normal\n sigma = sqrt(input$varianzaDM1_normal)\n desviacion = sigma/sqrt(n)\n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rnorm(n = n, mean = media, sd = sigma))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n medias = unlist(lapply(X = valores, FUN = mean))\n factor = max(abs(media - c(min(medias), max(medias))))\n lim_inf = media - factor; lim_sup = media + factor\n grilla = seq(from = lim_inf, to = lim_sup, by = 0.001)\n teoricos = dnorm(x = grilla, mean = media, sd = desviacion)\n \n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = grilla, valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Exponencial\"){\n tasa = input$tasaDM1_exponencial\n media = tasa\n desviacion = sqrt(tasa^2/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rexp(n = n, rate = 1/tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dexp(seq(from = 0, to = 30, by = 0.001), rate = 1/tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = seq(from = 0, to = 30, by = 0.001), valores = teoricos, tipo = \"densidad\", graph = \"l\")\n })\n \n } else if(input$distribucionDM1 == \"Binomial\") {\n ensayos = input$nDM1_binomial\n p = input$pDM1_binomial\n media = ensayos*p\n desviacion = sqrt(ensayos*p*(1-p)/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rbinom(n = n, size = ensayos, prob = p))\n })\n\n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dbinom(x = 0:ensayos, size = ensayos, prob = p)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:ensayos, valores = teoricos,, tipo = \"masa\")\n })\n \n } else if(input$distribucionDM1 == \"Poisson\"){\n tasa = input$tasaDM1_poisson\n media = tasa\n desviacion = sqrt(tasa/n)\n \n valores = lapply(X = as.list(1:simulaciones), FUN = function(sim){\n return(rpois(n = n, lambda = tasa))\n })\n \n output$Histograma_promedios = renderPlot({\n histTCL(valores, media, desviacion, simulaciones)\n })\n \n output$fdp_fmp_simulaciones = renderPlot({\n teoricos = dpois(x = 0:30, lambda = tasa)\n par(mfrow = c(1,2))\n plot_simulaciones(valores)\n densidad_masa(x = 0:30, valores = teoricos, tipo = \"masa\")\n })\n }\n })\n \n \n ### Intervalos de confianza\n \n hist_muestra_IC = function(x, y = NULL, nombre_media = nombre_media, control_lanzamiento = FALSE, colores){\n \n color = ifelse(\"red\" %in% colores, \"red\", \"grey\")\n \n if(nombre_media == \"Una\") {\n titulo = ifelse(control_lanzamiento, \"Distribución de los datos de \\n la muestra del último IC\",\n paste(\"Distribución de los datos de la muestra \\n del IC número\", punto_seleccionado()))\n hist(x, main = titulo, xlab = \"Valores de la muestra\", ylab = \"Frecuencia\", las = 1, col = color)\n } else {\n titulo = ifelse(control_lanzamiento, \"Distribuciones de los datos \\n de las muestras del último IC\",\n paste(\"Distribuciones de los datos de las muestras \\n del IC número\", punto_seleccionado()))\n par(mfrow = c(2,1))\n h1 = hist(x)\n h2 = hist(y)\n par(mar = c(0,5,3,3))\n plot(h1, col = color, xlim = c(min(h1$breaks, h2$breaks), max(h1$breaks, h2$breaks)), ylim = c(0, max(h1$counts, h2$counts)),\n las = 1, ylab = \"Frecuencias de X\", xaxt = \"n\", main = titulo)\n par(mar = c(5,5,0,3))\n plot(h2, col = color, xlim = c(min(h1$breaks, h2$breaks), max(h1$breaks, h2$breaks)), ylim = c(max(h1$counts, h2$counts), 0),\n las = 1, main = \"\", ylab = \"Frecuencias de Y\", xlab = \"Valores de la muestra\")\n }\n }\n \n hist_medias_IC = function(x, nombre_media = nombre_media){\n if(nombre_media == \"Una\") {\n hist(x, main = \"Distribución de las medias muestrales\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n } else {\n hist(x, main = \"Distribución de las diferencias \\n de las medias muestrales (X-Y)\", xlab = \"Valores de la muestra\",\n ylab = \"Frecuencia\", las = 1)\n }\n }\n \n simulaciones_muestras = function(nombre_media = nombre_media){\n muestras = lapply(X = as.list(1:input$simulacionesIC), FUN = function(sim){\n if(nombre_media == \"Una\") {\n data1 = rnorm(n = input$nIC, mean = input$muIC, sd = sqrt(input$sigma2IC))\n } else {\n data1 = rnorm(n = input$nICX, mean = input$muICX, sd = sqrt(input$varianzaUnaMediaX))\n data2 = rnorm(n = input$nICY, mean = input$muICY, sd = sqrt(input$varianzaUnaMediaY))\n data1 = list(\"data1\" = data1, \"data2\" = data2)\n }\n return(data1)\n })\n return(muestras)\n }\n \n calculo_IC = function(data1, data2 = NULL, tipo, varianzas_conocidas, tipo_varianzas = FALSE, extremos,\n confianza, varianza = NA, varianzaX = NA, varianzaY = NA, tamanos_muestrales = NA, media = media){\n \n if(varianzas_conocidas == FALSE){\n limites = t.test(x = data1, y = data2, conf.level = confianza, alternative = tipo, var.equal = tipo_varianzas)$conf.int[extremos] \n } else {\n if (is.null(data2)) {\n if(tipo == \"two.sided\") {\n limites = mean(data1) + c(-1,1)*qnorm(1 - (1- confianza)/2)*sqrt(varianza/tamanos_muestrales[1])\n } else if(tipo == \"less\") {\n limites = mean(data1) + qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n } else {\n limites = mean(data1) - qnorm(confianza)*sqrt(varianza/tamanos_muestrales[1])\n }\n } else {\n if(tipo == \"two.sided\") {\n limites = c(mean(data1) - mean(data2) - qnorm(1 - (1- confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]),\n mean(data1) - mean(data2) + qnorm(1 - (1 - confianza)/2)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2]))\n } else if(tipo == \"less\") {\n limites = mean(data1) - mean(data2) + qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n } else {\n limites = mean(data1) - mean(data2) - qnorm(confianza)*sqrt(varianzaX/tamanos_muestrales[1] + varianzaY/tamanos_muestrales[2])\n }\n }\n }\n \n if(tipo == \"greater\") {\n limites = c(limites, limites[1] + 0.5*sqrt(varianza))\n colores = c(ifelse(limites[1] > media, \"red\", \"black\"), \"white\")\n } else if(tipo == \"less\") {\n limites = c(limites[1] - 0.5*sqrt(varianza), limites)\n colores = c(\"white\", ifelse(limites[2] < media, \"red\", \"black\"))\n } else {\n colores = rep(ifelse(limites[1] < media & limites[2] > media, \"black\", \"red\"), 2)\n }\n return(c(limites, colores))\n }\n \n grafico_IC = function(x, y, colores, limites_x, simulaciones, media, nombre_media, tipoIC){\n plot(\n x = x, y = 1:simulaciones, col = colores[,1], pch = 16, las = 1, bty = \"n\",\n ylim = c(-5, simulaciones + 5), xlim = limites_x, xaxt = \"n\", yaxt = \"n\",\n xlab = \"Valores del IC\", ylab = \"Número de simulación\",\n main = ifelse(nombre_media == \"Una\",\n \"IC para la media proveniente \\n de una distribución normal\",\n \"IC para la diferencia de medias (X-Y) \\n provenientes de distribuciones normales\")\n )\n axis(side = 1, at = c(limites_x[1], media, limites_x[2]), labels = c(limites_x[1], media, limites_x[2]), xlim = limites_x)\n axis(side = 2, at = round(seq(from = 1, to = simulaciones, length.out = 10), 0), las = 1)\n points(x = y, y = 1:simulaciones, pch = 16, col = colores[,2])\n if(tipoIC == \"less\"){\n arrows(x1 = x, x0 = y, y1 = 1:simulaciones, y0 = 1:simulaciones, length = 0.07, col = colores[,2])\n rojos = round(sum(colores[,2] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else if(tipoIC == \"greater\") {\n arrows(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, length = 0.07, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,2])*100, digits = 2)\n negros = 100 - rojos\n } else {\n segments(x0 = x, x1 = y, y0 = 1:simulaciones, y1 = 1:simulaciones, col = colores[,1])\n rojos = round(sum(colores[,1] == \"red\")/length(colores[,1])*100, digits = 2)\n negros = 100 - rojos\n }\n rojos = paste(rojos, \"%\")\n negros = paste(negros, \"%\")\n # abline(v = media, col = \"black\", lty = 2)\n segments(x0 = media, y0 = 0, x1 = media, y1 = simulaciones+1, lty = 2)\n legend(\"topleft\", legend = c(negros, rojos), lty = 1, col = c(\"black\", \"red\"), title = \"Proporción de IC\", bty = \"n\")\n legend(\"bottomleft\", legend = c(\"Haga click en un IC (o cerca) \\n para ver la distribución de los \\n datos de la muestra. \\n \\n\"), bty = \"n\")\n }\n \n IC = function(tipo_varianzas, tipoIC, extremos, confianza, varianza, varianzaX = NA, varianzaY = NA,\n tamanos_muestrales, media = media, nombre_media = nombre_media){\n muestras_simuladas = simulaciones_muestras(nombre_media = nombre_media)\n ics = lapply(X = muestras_simuladas, FUN = function(muestra){\n if(input$VarianzasIC != \"Conocidas\") {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = FALSE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = FALSE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, media = media,\n varianza = varianza,)\n }\n } else {\n if(input$MediasIC == \"Una\") {\n ic = calculo_IC(data1 = muestra, tipo = tipoIC, varianzas_conocidas = TRUE, tipo_varianzas = tipo_varianzas,\n extremos = extremos, confianza = confianza, varianza = varianza, tamanos_muestrales = tamanos_muestrales,\n media = media)\n } else {\n ic = calculo_IC(data1 = muestra$data1, data2 = muestra$data2, tipo = tipoIC, varianzas_conocidas = TRUE,\n tipo_varianzas = tipo_varianzas, extremos = extremos, confianza = confianza, varianza = varianza,\n varianzaX = varianzaX, varianzaY = varianzaY, tamanos_muestrales = tamanos_muestrales, media = media)\n }\n }\n return(ic)\n })\n ics = as.data.frame(matrix(unlist(ics), ncol = 4, byrow = TRUE))\n ics[,1] = as.numeric(ics[,1])\n ics[,2] = as.numeric(ics[,2])\n return(list(ics, muestras_simuladas))\n }\n \n muestras = NULL\n ic = NULL\n nombre_media_global = NULL\n simulaciones_global = NULL\n \n observeEvent(list(input$go_IC),{\n confianza = input$ConfianzaIC/100\n simulaciones = input$simulacionesIC\n simulaciones_global <<- simulaciones\n media = ifelse(input$MediasIC == \"Una\", input$muIC, input$muICX - input$muICY)\n tipoIC = switch(input$tipoIC, \"Bilateral\" = \"two.sided\", \"Acotado por la derecha\" = \"less\", \"Acotado por la izquierda\" = \"greater\")\n extremos = switch(tipoIC, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = ifelse(input$MediasIC == \"Una\", input$sigma2IC, (input$varianzaUnaMediaX + input$varianzaUnaMediaY)/2)\n tipo_varianzas = switch(input$VarianzasICMedias, \"Iguales\" = TRUE, \"Distintas\" = FALSE)\n nombre_media = ifelse(input$MediasIC == \"Una\", \"Una\", \"Dos\")\n nombre_media_global <<- nombre_media\n varianzaX = input$varianzaUnaMediaX\n varianzaY = input$varianzaUnaMediaY\n tamanos_muestrales = c(input$nIC, input$nICX, input$nICY)\n \n ic_y_muestras = IC(tipo_varianzas = tipo_varianzas, tipoIC = tipoIC, extremos = extremos, confianza = confianza,\n varianza = varianza, varianzaX = varianzaX, varianzaY = varianzaY,\n tamanos_muestrales = tamanos_muestrales, media = media, nombre_media = nombre_media)\n ic <<- ic_y_muestras[[1]]\n muestras <<- ic_y_muestras[[2]]\n \n dif_maxima = max(abs(c(media - c(ic[,1], ic[,2]))))\n maximo = round(media + 1.5*dif_maxima, digits = 4)\n minimo = round(media - 1.5*dif_maxima, digits = 4)\n \n output$plot_ic = renderPlot({\n grafico_IC(x = ic[,1], y = ic[,2], colores = ic[,3:4], limites_x = c(minimo, maximo),\n simulaciones = simulaciones, media = media, nombre_media = nombre_media, tipoIC = tipoIC)\n }, height = 800)\n \n punto_seleccionado(NULL)\n output$histogramaIC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones]], nombre_media = nombre_media,\n control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones]]$data1, y = muestras[[simulaciones]]$data2,\n nombre_media = nombre_media, control_lanzamiento = TRUE, colores = ic[simulaciones,3:4])\n }\n })\n \n output$histograma_medias_IC = renderPlot({\n if(nombre_media == \"Una\"){\n hist_medias_IC(x = unlist(lapply(X = muestras, FUN = mean)), nombre_media = nombre_media)\n } else {\n hist_medias_IC(\n x = unlist(lapply(X = muestras, FUN = function(muestra){\n return(mean(muestra$data1) - mean(muestra$data2))\n })),\n nombre_media = nombre_media)\n }\n })\n })\n \n punto_seleccionado = reactiveVal(NULL)\n \n observeEvent(input$plot_click, {\n click_y = input$plot_click$y\n punto_seleccionado(round(click_y))\n if(punto_seleccionado() >= 1 & punto_seleccionado() <= simulaciones_global){\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[punto_seleccionado()]], nombre_media = nombre_media_global,\n control_lanzamiento = FALSE, colores = ic[punto_seleccionado(), 3:4])\n } else {\n hist_muestra_IC(x = muestras[[punto_seleccionado()]]$data1, y = muestras[[punto_seleccionado()]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = FALSE, colores = ic[punto_seleccionado(), 3:4])\n }\n })\n } else {\n output$histogramaIC = renderPlot({\n if(nombre_media_global == \"Una\"){\n hist_muestra_IC(x = muestras[[simulaciones_global]], nombre_media = nombre_media_global,\n control_lanzamiento = TRUE, colores = ic[simulaciones_global, 3:4])\n } else {\n hist_muestra_IC(x = muestras[[simulaciones_global]]$data1, y = muestras[[simulaciones_global]]$data2,\n nombre_media = nombre_media_global, control_lanzamiento = TRUE, colores = ic[simulaciones_global, 3:4])\n }\n })\n }\n })\n \n ### Pruebas de hipótesis\n \n grafico_estadisticoPrueba = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra, est_prueba, valor_critico, confianza){\n \n max = max(abs(c(0 - c(est_prueba, valor_critico, 4))))\n limites = c(0 - max * 1.2, 0 + max * 1.2)\n \n # print(c(limites, est_prueba, valor_critico, max))\n \n valores_x = seq(from = limites[1], to = limites[2], by = 0.01)\n valores_x = c(valores_x, est_prueba, valor_critico, -est_prueba, -valor_critico)\n valores_x = valores_x[order(valores_x)]\n \n plot(x = valores_x, y = dnorm(x = valores_x),\n main = \"Distribución del estadístico de prueba\", xlab = \"Valores de Z\", ylab = \"Densidad\",\n las = 1, xaxt = \"n\", type = \"l\", bty = \"n\", xlim = limites, ylim = c(0, 0.5))\n axis(side = 1, at = c(limites[1], 0, limites[2]),\n labels = round(c(limites[1], 0, limites[2]), 2), cex.axis = 1, las = 1)\n \n if(tipoPH == \"two.sided\") {\n axis(side = 1, at = c(-est_prueba, est_prueba), labels = round(c(-est_prueba, est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(-valor_critico, valor_critico), labels = round(c(-valor_critico, valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(-abs(valor_critico), valores_x[valores_x <= -abs(valor_critico)]),\n y = c(min(dnorm(x = valores_x[valores_x <= -abs(valor_critico)])), dnorm(x = valores_x[valores_x <= -abs(valor_critico)])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(-abs(est_prueba), valores_x[valores_x <= -abs(est_prueba)]),\n y = c(min(dnorm(x = valores_x[valores_x <= -abs(est_prueba)])), dnorm(x = valores_x[valores_x <= -abs(est_prueba)])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n polygon(x = c(abs(valor_critico), valores_x[valores_x >= abs(valor_critico)]),\n y = c(min(dnorm(x = valores_x[valores_x >= abs(valor_critico)])), dnorm(x = valores_x[valores_x >= abs(valor_critico)])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(abs(est_prueba), valores_x[valores_x >= abs(est_prueba)]),\n y = c(min(dnorm(x = valores_x[valores_x >= abs(est_prueba)])), dnorm(x = valores_x[valores_x >= abs(est_prueba)])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = 2 - 2*pnorm(abs(est_prueba))\n } else if(tipoPH == \"less\") {\n axis(side = 1, at = c(est_prueba), labels = round(c(est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(valor_critico), labels = round(c(valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(valor_critico, valores_x[valores_x <= valor_critico]),\n y = c(min(dnorm(x = valores_x[valores_x <= valor_critico])), dnorm(x = valores_x[valores_x <= valor_critico])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(est_prueba, valores_x[valores_x <= est_prueba]),\n y = c(min(dnorm(x = valores_x[valores_x <= est_prueba])), dnorm(x = valores_x[valores_x <= est_prueba])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = pnorm(est_prueba)\n } else {\n axis(side = 1, at = c(est_prueba), labels = round(c(est_prueba), 2),\n col.axis = \"red\", cex.axis = 1, las = 1)\n axis(side = 1, at = c(valor_critico), labels = round(c(valor_critico), 2),\n col.axis = \"blue\", cex.axis = 1, las = 1)\n polygon(x = c(valor_critico, valores_x[valores_x >= valor_critico]),\n y = c(min(dnorm(x = valores_x[valores_x >= valor_critico])), dnorm(x = valores_x[valores_x >= valor_critico])),\n lty = 2, density = 5, col = \"blue\")\n polygon(x = c(est_prueba, valores_x[valores_x >= est_prueba]),\n y = c(min(dnorm(x = valores_x[valores_x >= est_prueba])), dnorm(x = valores_x[valores_x >= est_prueba])),\n lty = 2, density = 5, col = \"red\", angle = 135)\n valor_p = 1 - pnorm(est_prueba)\n }\n legend(\"topright\", legend = paste(c(\"Valor-p:\", \"Significancia:\"), round(c(valor_p, 1 - confianza), 4)), bty = \"n\",\n lty = 2, col = c(\"red\", \"blue\"))\n legend(\"topleft\", legend = ifelse(valor_p <= 1 - confianza, \"Se rechaza\", \"No se rechaza\"), bty = \"n\", title = \"Estado:\", text.font = 4)\n }\n \n grafico_IC_PH = function(ic, mediaMuestra, varianza, mu0, tipoPH, nMuestra, est_prueba, valor_critico, confianza){\n \n max = max(abs(c(0 - c(est_prueba, valor_critico, 4))))\n limites = c(0 - max * 1.2, 0 + max * 1.2)\n \n valores_x = seq(from = limites[1], to = limites[2], by = 0.01)\n valores_x = c(valores_x, est_prueba, valor_critico, -est_prueba, -valor_critico)\n valores_x = valores_x[order(valores_x)]\n valores_y = dnorm(x = valores_x)\n \n transformacion = function(x.barra){\n return((x.barra - mu0)/sqrt(varianza/nMuestra))\n }\n \n transformacion_inversa = function(Z0){\n return(mu0 + Z0*sqrt(varianza/nMuestra))\n }\n \n plot(x = valores_x, y = valores_y,\n main = \"Distribución de la media muestral \\n e intervalo de confianza\", xlab = \"Valores del promedio\", ylab = \"Densidad\",\n las = 1, xaxt = \"n\", type = \"l\", bty = \"n\", xlim = limites, ylim = c(0, 0.5))\n axis(side = 1, at = c(limites[1], 0, limites[2]),\n labels = round(transformacion_inversa(c(limites[1], 0, limites[2])), 4), cex.axis = 1, las = 1)\n segments(x0 = 0, x1 = 0, y0 = 0, y1 = max(valores_y), col = \"black\", lty = 2)\n \n ic = as.numeric(ic[1:2])\n ic2 = transformacion(as.numeric(ic[1:2]))\n max_y = max(valores_y)*0.5\n \n if(tipoPH == \"two.sided\") {\n segments(x0 = ic2[1], x1 = ic2[2], y0 = max_y, y1 = max_y, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(\", round(ic[1], 4), \", \", round(ic[2], 4), \")\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n } else if(tipoPH == \"less\") {\n arrows(x1 = limites[1], x0 = ic2[2], y0 = max_y, y1 = max_y, length = 0.1, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(-Inf, \", round(ic[2], 4), \")\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n } else {\n arrows(x0 = ic2[1], x1 = limites[2], y0 = max_y, y1 = max_y, length = 0.1, col = \"red\", lty = 2)\n legend(\"topleft\", legend = paste0(\"(\", round(ic[1], 4), \", Inf)\"),\n bty = \"n\", title = \"IC\", lty = 2, col = \"red\")\n }\n legend(\"topright\", legend = mu0, bty = \"n\", title = \"mu_0\", lty = 2)\n }\n \n valor_critico = function(confianza, tipo, mu0, varianza, nMuestra, mediaMuestra){\n if(tipo == \"two.sided\") {\n valor_critico = qnorm(1 - (1 - confianza)/2)\n } else if(tipo == \"less\") {\n valor_critico = qnorm(1 - confianza)\n } else {\n valor_critico = qnorm(confianza)\n }\n estadistico_prueba = (mediaMuestra - mu0)/(sqrt(varianza/nMuestra))\n return(c(estadistico_prueba, valor_critico))\n }\n \n observeEvent(list(input$go_PH), {\n confianza = input$confianzaPH/100\n mu0 = input$mu0PH\n mediaMuestra = input$mediaMuestraPH\n tipoPH = switch(input$tipoPH, \"Bilateral\" = \"two.sided\", \"Unilateral derecha\" = \"greater\", \"Unilateral izquierda\" = \"less\")\n extremos = switch(tipoPH, \"two.sided\" = 1:2, \"less\" = 2, \"greater\" = 1)\n varianza = input$sigma2PH\n nombre_media = \"Una\"\n nMuestra = input$nPH\n \n # Los argumentos data debe ser el promedio n veces para que calce con el cálculo del IC de la función \"calculo_IC\"\n ic = calculo_IC(data1 = rep(mediaMuestra, nMuestra), tipo = tipoPH, varianzas_conocidas = TRUE, varianza = varianza,\n extremos = extremos, confianza = confianza, media = mediaMuestra, tamanos_muestrales = nMuestra)\n \n valor_critico = valor_critico(confianza = confianza, tipo = tipoPH, mu0 = mu0, varianza = varianza,\n nMuestra = nMuestra, mediaMuestra = mediaMuestra)\n \n output$plot_ph = renderPlot({\n grafico_estadisticoPrueba(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra,\n est_prueba = valor_critico[1], valor_critico = valor_critico[2], confianza = confianza)\n }, height = 400)\n \n output$plot_ic_ph = renderPlot({\n grafico_IC_PH(ic = ic, media = mediaMuestra, varianza = varianza, mu0 = mu0, tipoPH = tipoPH, nMuestra = nMuestra,\n est_prueba = valor_critico[1], valor_critico = valor_critico[2], confianza = confianza)\n }, height = 400)\n \n })\n \n ### Regresión Lineal (Simple)\n \n regresion = function(x, y){\n modelo = lm(y ~ x)\n return(modelo)\n }\n \n grafico_RL = function(x, y, modelo){\n betas = modelo$coefficients\n confidence_values = predict.lm(modelo, interval = \"confidence\")\n prediction_values = predict.lm(modelo, newdata = data.frame(\"x\" = x, \"y\" = y), interval = \"prediction\")\n y_confidence = confidence_values[order(confidence_values[,1]), 2:3]\n y_prediction = prediction_values[order(prediction_values[,1]), 2:3]\n plot(x = x, y = y, las = 1, bty = \"n\",\n main = \"Regresión Lineal Simple\", xlab = \"Valores de X\", ylab = \"Valores de Y\",\n ylim = c(min(c(y, y_confidence, y_prediction)), max(c(y, y_confidence, y_prediction))))\n segments(x0 = min(x), x1 = max(x), y0 = betas[1] + betas[2]*min(x), y1 = betas[1] + betas[2]*max(x), col = \"red\", lty = 1)\n lines(x = x[order(x)], y = y_confidence[,1], col = \"blue\", lty = 2)\n lines(x = x[order(x)], y = y_confidence[,2], col = \"blue\", lty = 2)\n lines(x = x[order(x)], y = y_prediction[,1], col = \"darkgreen\" ,lty = 2)\n lines(x = x[order(x)], y = y_prediction[,2], col = \"darkgreen\", lty = 2)\n legend(\"topleft\", legend = c(\"Recta de regresión ajustada\", \"IC del 95% para la media\", \"IC del 95% para la predicción\"),\n lty = c(1, 2, 2), col = c(\"red\", \"blue\", \"darkgreen\"), bty = \"n\")\n }\n \n grafico_supuestos = function(x, y, modelo){\n par(mfrow = c(2,2), bty = \"n\", las = 1)\n plot(x = modelo$fitted.values, y = residuals(modelo),\n main = \"Linealidad\", xlab = \"Valores ajustados\", ylab = \"Residuos\")\n acf(residuals(modelo),\n main = \"Independenica \\n (Función de Autocorrelación: ACF)\", xlab = \"Lag\", ylab = \"ACF\")\n plot(x = modelo$fitted.values, y = sqrt(abs(rstandard(modelo))),\n main = \"Homocedasticidad\", xlab = \"Valores ajustados\", ylab = \"Raíz de los residuos estandarizados\")\n qqnorm(modelo$residuals, main = \"Normalidad \\n (Cuantil - Cuantil)\", xlab = \"Cuantiles teóricos\", ylab = \"Cuantiles observados\")\n qqline(modelo$residuals)\n }\n \n violacion_supuestos = function(x, y){\n \n aux_y = y\n aux_x = x\n \n if(!is.null(input$violacionSupuestos)){\n \n if (\"Linealidad\" %in% input$violacionSupuestos){\n y = y + (x/70)^3\n }\n \n if (\"Independencia\" %in% input$violacionSupuestos ){\n y = apply(X = as.matrix(cbind(seq(from = 0, to = 45, length.out = length(y)), y)), MARGIN = 1, FUN = function(fila){\n recorrido = sin(fila[1])*200 + fila[2]\n return(recorrido)\n })\n } \n \n if (\"Homocedasticidad\" %in% input$violacionSupuestos){\n incrementos = cumsum(seq(from = 0.8, to = 1.2, length.out = length(y)))\n y = abs(y*incrementos - max(y)/2)\n }\n \n if (\"Normalidad\" %in% input$violacionSupuestos){\n n_min = y[order(y)][8]\n n_max = y[order(y)][(length(y)-8)]\n y[y <= n_min] = y[y <= n_min] - y[y == n_max]*0.5\n y[y >= n_max] = y[y >= n_max] + y[y == n_max]*0.5\n } \n }\n return(y)\n }\n \n observeEvent(list(input$go_RL), {\n \n set.seed(2024)\n desviacion_simulacion = 100\n x_poblacion = seq(from = 1, to = input$nPoblacionalRLS, by = 1)\n y_poblacion = apply(X = as.matrix(x_poblacion + 100), MARGIN = 1, FUN = function(media){\n return(rnorm(n = 1, mean = media, sd = desviacion_simulacion))\n })\n \n n_muestra = sample(x = 1:input$nPoblacionalRLS, size = input$nMuestralRLS, replace = FALSE)\n x_muestral = x_poblacion[n_muestra]\n y_muestral = y_poblacion[n_muestra]\n y_muestral = violacion_supuestos(x = x_muestral, y = y_muestral)\n RL = regresion(x = x_muestral, y = y_muestral)\n \n output$plot_rl = renderPlot({\n grafico_RL(x = x_muestral, y = y_muestral, modelo = RL)\n })\n \n output$plot_supuestos = renderPlot({\n grafico_supuestos(x = x_muestral, y = y_muestral, modelo = RL)\n })\n \n output$resumen_rl = function(){\n summary_RL = round(summary(RL)$coefficients, digits = 4)\n summary_RL = ifelse(summary_RL == 0, \"<2e-16\", summary_RL)\n rownames(summary_RL) <- c(\"β0<\/sub>\", \"β1<\/sub>\")\n kableExtra::kbl(summary_RL, escape = FALSE, booktabs = T, align = \"c\",\n caption = \"Resumen del modelo de regresión lineal\",\n col.names = c(\"Estimación\", \"Error estándar\", \"Estadístico de prueba t\", \"Valor-p\")) |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n \n output$resumen_rl_metricas = function(){\n summary_RL = summary(RL)\n metrics = round(unlist(summary_RL[c(\"fstatistic\", \"sigma\", \"r.squared\", \"adj.r.squared\")])[c(1,4:6)], digits = 4)\n kableExtra::kbl(t(as.matrix(metrics)), escape = FALSE, booktabs = T, align = \"c\",\n col.names = c(\"Estadístico F0<\/sub>\", \"Error estándar residual\", \"R2<\/sup>\", \"R2<\/sup> ajustado\")) |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n\n output$resumen_supuestos = function(){\n \n tests = list(\n lmtest::bptest(formula = formula(RL), data = data.frame(\"x\" = x_muestral, \"y\" = y_muestral)),\n lmtest::dwtest(formula = formula(RL), data = data.frame(\"x\" = x_muestral, \"y\" = y_muestral), alternative = \"two.sided\"),\n shapiro.test(x = rstandard(RL))\n ) |> lapply(FUN = function(test){\n valor_p = round(test$p.value, digits = 4)\n statistic = round(test$statistic, digits = 4)\n valor_p = ifelse(valor_p < 0.0001, \"<1e-4\", valor_p)\n statistic = ifelse(statistic < 0.0001, \"<1e-4\", statistic)\n return(c(statistic, valor_p))\n }) |> unlist() |> matrix(ncol = 2, byrow = TRUE) |> data.frame() |> setNames(c(\"Estadístico\", \"Valor-p\"))\n \n \n tests$Prueba = c(\"Breusch-Pagan\", \"Durbin-Watson\", \"Shapiro-Wilk\")\n tests$Supuesto = c(\"Homocedasticidad\", \"Independencia\", \"Normalidad\")\n tests = tests[, c(\"Supuesto\", \"Prueba\", \"Estadístico\", \"Valor-p\")]\n \n kableExtra::kbl(tests, escape = FALSE, booktabs = T, align = \"c\",\n caption = \"Prueba de hipótesis de los supuestos del modelo de regresión lineal\") |>\n kableExtra::kable_styling(full_width = TRUE, bootstrap_options = c(\"condensed\", \"striped\"))\n }\n\n })\n \n# End general function \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","type":"text"},{"name":"ui.R","content":"library(shiny)\nlibrary(shinydashboard)\n# library(shinydashboardPlus)\nlibrary(Cairo)\noptions(shiny.usecairo = T)\nlibrary(kableExtra)\n\n# Encabezado general\n\nencabezado = dashboardHeader(title = \"Estadística\",\n # tags$li(class = \"dropdown\",\n # tags$a(href = \"https://www.linkedin.com/in/dfranzani/\",\n # icon(\"linkedin\"), \"\", target = \"_blank\")),\n tags$li(class = \"dropdown\",\n tags$a(href = \"https://github.com/Dfranzani\",\n icon(\"github\"), \"\", target = \"_blank\")),\n tags$li(class = \"dropdown\",\n tags$a(href = \"https://dfranzani.netlify.app/\",\n icon(\"blog\"), \"\", target = \"_blank\")))\n\n# encabezado = dashboardHeader(userOutput(\"user\"))\n\n# Panel lateral general: filtro de temas\n\npanelLateral = dashboardSidebar(\n collapsed = FALSE,\n sidebarMenu(\n id = \"sidebarID\",\n menuItem(\"Teorema Central del Límite\", tabName = \"DM1\"),\n menuItem(\"IC: Intervalos de confianza\", tabName = \"IC\"),\n menuItem(\"Pruebas de Hipótesis\", tabName = \"PH\"),\n menuItem(\"Regresión Lineal\", tabName = \"RL\")\n )\n)\n\n# Paneles: cuerpo de cada panel del Panel lateral\n# Un cuerpo se puede volver a dividir en otro tipo de Layout\n\nsimulador = actionButton(inputId = \"go_DM1\", label = \"Simular\")\n\ncuerpo_DM1 = sidebarLayout(\n sidebarPanel(\n width = 3,\n selectInput(inputId = \"distribucionDM1\", label = \"Distribución\", choices = c(\"Normal\", \"Exponencial\", \"Binomial\", \"Poisson\")),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Normal'\",\n sliderInput(inputId = \"mediaDM1_normal\", label = \"Media poblacional\", min = 0, max = 20, value = 12, step = 0.2),\n sliderInput(inputId = \"varianzaDM1_normal\", label = \"Varianza poblacional\", min = 0, max = 20, value = 2, step = 0.1),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Binomial'\",\n sliderInput(inputId = \"nDM1_binomial\", label = \"Ensayos\", min = 1, max = 100, value = 12, step = 1),\n sliderInput(inputId = \"pDM1_binomial\", label = \"Probabilidad de éxito\", min = 0, max = 1, value = 0.4, step = 0.05),\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Exponencial'\",\n sliderInput(inputId = \"tasaDM1_exponencial\", label = \"Tasa\", min = 0, max = 20, value = 5, step = 0.1)\n ),\n conditionalPanel(\n condition = \"input.distribucionDM1 == 'Poisson'\",\n sliderInput(inputId = \"tasaDM1_poisson\", label = \"Tasa\", min = 0, max = 20, value = 8, step = 0.1)\n ),\n sliderInput(inputId = \"nDM1\", label = \"Tamaño muestral\", min = 100, max = 1000, value = 200, step = 50),\n sliderInput(inputId = \"simulacionesDM1\", label = \"Cantidad de simulaciones\", min = 100, max = 7000, value = 1300, step = 100),\n simulador\n ),\n mainPanel(\n width = 9,\n plotOutput(\"Histograma_promedios\"), plotOutput(\"fdp_fmp_simulaciones\")\n )\n)\n\nsimulador2 = actionButton(inputId = \"go_IC\", label = \"Simular\")\n\ncuerpo_IC = sidebarLayout(\n sidebarPanel(\n width = 3,\n fluidRow(\n column(width = 4, radioButtons(inputId = \"MediasIC\", label = \"Medias\", choices = c(\"Una\", \"Dos\"))),\n column(width = 8, radioButtons(inputId = \"VarianzasIC\", label = \"Varianzas\", choices = c(\"Conocidas\", \"Desconocidas\")))\n ),\n conditionalPanel(\n condition = \"input.VarianzasIC == 'Desconocidas' && input.MediasIC == 'Dos'\",\n radioButtons(inputId = \"VarianzasICMedias\", label = \"Varianzas desconocidas\", choices = c(\"Iguales\", \"Distintas\"))\n ),\n sliderInput(inputId = \"ConfianzaIC\", label = \"% Confianza\", min = 10, max = 99, value = 90, step = 1),\n radioButtons(inputId = \"tipoIC\", label = \"Tipo de IC\", choices = c(\"Bilateral\", \"Acotado por la derecha\", \"Acotado por la izquierda\")),\n conditionalPanel(\n condition = \"input.MediasIC == 'Una'\",\n sliderInput(inputId = \"muIC\", label = \"Media poblacional\", min = -20, max = 20, value = 0, step = 0.1),\n sliderInput(inputId = \"sigma2IC\", label = \"Varianza poblacional\", min = 5, max = 30, value = 10, step = 0.1),\n sliderInput(inputId = \"nIC\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10)\n ),\n conditionalPanel(\n condition = \"input.MediasIC == 'Dos'\",\n fluidRow(\n column(width = 6, sliderInput(inputId = \"muICX\", label = \"Media poblacional X\", min = -10, max = 10, value = 0, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"muICY\", label = \"Media poblacional Y\", min = -10, max = 10, value = 7, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaX\", label = \"Varianza poblacional X\", min = 10, max = 25, value = 12, step = 0.5)),\n column(width = 6, sliderInput(inputId = \"varianzaUnaMediaY\", label = \"Varianza poblacional Y\", min = 10, max = 25, value = 16, step = 0.5))\n ),\n fluidRow(\n column(width = 6, sliderInput(inputId = \"nICX\", label = \"Tamaño muestral X\", min = 50, max = 150, value = 120, step = 10)),\n column(width = 6, sliderInput(inputId = \"nICY\", label = \"Tamaño muestral Y\", min = 50, max = 150, value = 80, step = 10))\n ),\n ),\n sliderInput(inputId = \"simulacionesIC\", label = \"Cantidad de simulaciones\", min = 10, max = 100, value = 60, step = 1),\n simulador2\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 6, plotOutput(\"plot_ic\", click = \"plot_click\", height = \"800px\")),\n column(width = 6, plotOutput(\"histogramaIC\"), plotOutput(\"histograma_medias_IC\"))\n )\n )\n)\n\nsimulador3 = actionButton(inputId = \"go_PH\", label = \"Simular\")\n\ncuerpo_PH = sidebarLayout(\n sidebarPanel(\n width = 3,\n radioButtons(inputId = \"mediasPH\", label = \"Medias\", choices = c(\"Una\")),#, \"Dos\")),\n radioButtons(inputId = \"varianazasPH\", label = \"Varianzas\", choices = c(\"Conocidas\")),#, \"Desconocidas\")),\n radioButtons(inputId = \"tipoPH\", label = \"Tipo de prueba\", choices = c(\"Bilateral\", \"Unilateral derecha\", \"Unilateral izquierda\")),\n sliderInput(inputId = \"mu0PH\", label = \"Media bajo Hipótesis nula\", min = -5, max = 5, value = 0, step = 0.02),\n sliderInput(inputId = \"sigma2PH\", label = \"Varianza poblacional\", min = 1, max = 50, value = 10, step = 0.5),\n sliderInput(inputId = \"mediaMuestraPH\", label = \"Media muestral\", min = -5, max = 5, value = 0.6, step = 0.02),\n sliderInput(inputId = \"nPH\", label = \"Tamaño muestral\", min = 10, max = 200, value = 120, step = 10),\n sliderInput(inputId = \"confianzaPH\", label = \"% Confianza\", min = 10, max = 99, value = 87, step = 1),\n simulador3\n ),\n mainPanel(\n width = 9,\n fluidRow(\n column(width = 12, plotOutput(\"plot_ph\"), plotOutput(\"plot_ic_ph\"))\n )#,\n # fluidRow(\n # column(width = 6, withMathJax(includeMarkdown(\"Regresion+Lineal/Prueba.md\")))\n # )\n )\n)\n\nsimulador4 = actionButton(inputId = \"go_RL\", label = \"Simular\")\ncuerpo_RL = sidebarLayout(\n sidebarPanel(\n width = 2,\n radioButtons(inputId = \"tipoRL\", label = \"Tipo de regresión\", choices = c(\"Simple\")),\n # radioButtons(inputId = \"tipoRL\", label = \"Tipo de regresión\", choices = c(\"Simple\", \"Múltiple\")),\n conditionalPanel(\n condition = \"input.tipoRL == 'Simple'\",\n sliderInput(inputId = \"nPoblacionalRLS\", label = \"Tamaño poblacional\", min = 600, max = 800, value = 700, step = 10),\n sliderInput(inputId = \"nMuestralRLS\", label = \"Tamaño muestral\", min = 100, max = 550, value = 240, step = 10)\n ),\n checkboxGroupInput(inputId = \"violacionSupuestos\", label = \"Violación de supuestos\",\n choices = c(\"Linealidad\", \"Normalidad\", \"Homocedasticidad\", \"Independencia\")),\n simulador4\n ),\n mainPanel(\n width = 10,\n fluidRow(\n column(width = 6, plotOutput(\"plot_rl\", height = \"500px\"), br(), tableOutput(\"resumen_rl\"), tableOutput(\"resumen_rl_metricas\")),\n column(width = 6, plotOutput(\"plot_supuestos\", height = \"500px\"), br(), tableOutput(\"resumen_supuestos\"))\n )\n )\n)\n# Asignando los cuerpos por filtro\nhoja_DM = tabItem(tabName = \"DM1\", fluidPage(cuerpo_DM1))\nhoja_IC = tabItem(tabName = \"IC\", fluidPage(cuerpo_IC))\nhoja_PH = tabItem(tabName = \"PH\", fluidPage(cuerpo_PH))\nhoja_RL = tabItem(tabName = \"RL\", fluidPage(cuerpo_RL))\n\ncuerpo = dashboardBody(\n tabItems(hoja_DM, hoja_IC, hoja_PH, hoja_RL)\n)\n\n# Despliegue general\nui = dashboardPage(header = encabezado, sidebar = panelLateral, body = cuerpo, skin = \"black\", title = \"Hola\")\n\n\n","type":"text"},{"name":"Regresion+Lineal/Prueba.md","content":"# Probando elementos de inscrustación\n\n$$\nA + B = C\n$$\n\n1. Hola\n\n2. CHao\n\n**HOLA**S","type":"text"}] diff --git a/xtable.html b/xtable.html deleted file mode 100644 index 04b8ddc..0000000 --- a/xtable.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
grade sex disadvg ethnicty tlimth
1 6 M YES HISPANIC 43
2 7.0 M NO BLACK 88.0
3 5.00 F YES HISPANIC 34.00
4 3.000 M YES HISPANIC 65.000
5 8.0000 M YES WHITE 75.0000
6 5 M NO BLACK 74
7 8.0 F YES HISPANIC 72.0
8 4.00 M YES BLACK 79.00
9 6.000 M NO WHITE 88.000
10 7.0000 M YES HISPANIC 87.0000
11 3 M NO WHITE 79
12 6.0 F NO WHITE 84.0
13 8.00 M NO WHITE 90.00
14 5.000 M NO WHITE 73.000
15 8.0000 F NO WHITE 72.0000
16 6 F NO BLACK 82
17 4.0 M NO WHITE 69.0
18 3.00 F YES HISPANIC 17.00
19 3.000 M NO HISPANIC 37.000
20 5.0000 M NO WHITE 70.0000
- - - - - - - - - - - - - - - - - - - - - - - - -
(Intercept) sexM grade sexM:grade
1 1 1 6 6
2 1 1 7 7
3 1 0 5 0
4 1 1 3 3
5 1 1 8 8
6 1 1 5 5
7 1 0 8 0
8 1 1 4 4
9 1 1 6 6
10 1 1 7 7
11 1 1 3 3
12 1 0 6 0
13 1 1 8 8
14 1 1 5 5
15 1 0 8 0
16 1 0 6 0
17 1 1 4 4
18 1 0 3 0
19 1 1 3 3
20 1 1 5 5
- - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 75.37 75.37 0.38 0.5417
ethnicty 3 2572.15 857.38 4.27 0.0072
grade 1 36.31 36.31 0.18 0.6717
disadvg 1 59.30 59.30 0.30 0.5882
Residuals 93 18682.87 200.89
- - - - - - - - - - - -
Estimate Std. Error t value Pr(>|t|)
(Intercept) 73.6364 4.2502 17.33 0.0000
sexM -1.6364 5.8842 -0.28 0.7816
ethnictyHISPANIC -9.7614 6.5501 -1.49 0.1395
ethnictyOTHER 15.8636 10.8360 1.46 0.1466
ethnictyWHITE 4.7970 4.9687 0.97 0.3368
sexM:ethnictyHISPANIC 10.6780 8.7190 1.22 0.2238
sexM:ethnictyWHITE 5.1230 7.0140 0.73 0.4670
- - - - - - - - - - - -
Estimate Std. Error t value Pr(>|t|)
(Intercept) 73.6364 4.2502 17.33 0.0000
sexM -1.6364 5.8842 -0.28 0.7816
ethnictyHISPANIC -9.7614 6.5501 -1.49 0.1395
ethnictyOTHER 15.8636 10.8360 1.46 0.1466
ethnictyWHITE 4.7970 4.9687 0.97 0.3368
sexM:ethnictyHISPANIC 10.6780 8.7190 1.22 0.2238
sexM:ethnictyWHITE 5.1230 7.0140 0.73 0.4670
- - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 75.37 75.37 0.38 0.5395
ethnicty 3 2572.15 857.38 4.31 0.0068
sex:ethnicty 2 298.43 149.22 0.75 0.4748
Residuals 93 18480.04 198.71
- - - - - - -
Res.Df RSS Df Sum of Sq F Pr(>F)
1 96 19053.59
2 93 18480.04 3 573.55 0.96 0.4141
- - - - - - - - - - - - -
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.1888 1.5966 2.00 0.0458
ethnictyHISPANIC -0.2848 2.4808 -0.11 0.9086
ethnictyOTHER 212.1701 22122.7093 0.01 0.9923
ethnictyWHITE -8.8150 3.3355 -2.64 0.0082
grade -0.5308 0.2892 -1.84 0.0665
ethnictyHISPANIC:grade 0.2448 0.4357 0.56 0.5742
ethnictyOTHER:grade -32.6014 3393.4687 -0.01 0.9923
ethnictyWHITE:grade 1.0171 0.5185 1.96 0.0498
- - - - - - - - -
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 99 129.49
ethnicty 3 47.24 96 82.25 0.0000
grade 1 1.73 95 80.52 0.1884
ethnicty:grade 3 7.20 92 73.32 0.0657
- - - - - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
block 5 343.30 68.66 4.45 0.0159
N 1 189.28 189.28 12.26 0.0044
P 1 8.40 8.40 0.54 0.4749
K 1 95.20 95.20 6.17 0.0288
N:P 1 21.28 21.28 1.38 0.2632
N:K 1 33.14 33.14 2.15 0.1686
P:K 1 0.48 0.48 0.03 0.8628
Residuals 12 185.29 15.44
- - - - - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
block 5 343.30 68.66 4.45 0.0159
N 1 189.28 189.28 12.26 0.0044
P 1 8.40 8.40 0.54 0.4749
K 1 95.20 95.20 6.17 0.0288
N:P 1 21.28 21.28 1.38 0.2632
N:K 1 33.14 33.14 2.15 0.1686
P:K 1 0.48 0.48 0.03 0.8628
Residuals 12 185.29 15.44
- - - - - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
block 5 343.30 68.66 4.45 0.0159
N 1 189.28 189.28 12.26 0.0044
P 1 8.40 8.40 0.54 0.4749
K 1 95.20 95.20 6.17 0.0288
N:P 1 21.28 21.28 1.38 0.2632
N:K 1 33.14 33.14 2.15 0.1686
P:K 1 0.48 0.48 0.03 0.8628
Residuals 12 185.29 15.44
- - - - - - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
N:P:K 1 37.00 37.00 0.48 0.5252
Residuals 4 306.29 76.57
N 1 189.28 189.28 12.26 0.0044
P 1 8.40 8.40 0.54 0.4749
K 1 95.20 95.20 6.17 0.0288
N:P 1 21.28 21.28 1.38 0.2632
N:K 1 33.13 33.13 2.15 0.1686
P:K 1 0.48 0.48 0.03 0.8628
Residuals1 12 185.29 15.44
- - - - - - - - - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
N:P:K 1 37.00 37.00 0.48 0.5252
Residuals 4 306.29 76.57
N 1 189.28 189.28 12.26 0.0044
P 1 8.40 8.40 0.54 0.4749
K 1 95.20 95.20 6.17 0.0288
N:P 1 21.28 21.28 1.38 0.2632
N:K 1 33.13 33.13 2.15 0.1686
P:K 1 0.48 0.48 0.03 0.8628
Residuals1 12 185.29 15.44
- - - - - - -
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.0320 0.2202 22.85 0.0000
groupTrt -0.3710 0.3114 -1.19 0.2490
- - - - - - -
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.0320 0.2202 22.85 0.0000
groupTrt -0.3710 0.3114 -1.19 0.2490
- - - - - - -
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.0320 0.2202 22.85 0.0000
groupTrt -0.3710 0.3114 -1.19 0.2490
- - - - - - -
Df Sum Sq Mean Sq F value Pr(>F)
group 1 0.69 0.69 1.42 0.2490
Residuals 18 8.73 0.48
- - - - - - - - - -
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.0445 0.1709 17.81 0.0000
outcome2 -0.4543 0.2022 -2.25 0.0246
outcome3 -0.2930 0.1927 -1.52 0.1285
treatment2 0.0000 0.2000 0.00 1.0000
treatment3 0.0000 0.2000 0.00 1.0000
- - - - - - - -
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 8 10.58
outcome 2 5.45 6 5.13 0.0655
treatment 2 0.00 4 5.13 1.0000
- - - - - - - - - -
Estimate Std. Error z value Pr(>|z|)
3.0445 0.1709 17.81 0.0000
-0.4543 0.2022 -2.25 0.0246
-0.2930 0.1927 -1.52 0.1285
0.0000 0.2000 0.00 1.0000
0.0000 0.2000 0.00 1.0000
- - - - - - - - -
(Intercept) 3.0445 0.1709 17.81 0.0000
outcome2 -0.4543 0.2022 -2.25 0.0246
outcome3 -0.2930 0.1927 -1.52 0.1285
treatment2 0.0000 0.2000 0.00 1.0000
treatment3 0.0000 0.2000 0.00 1.0000
- - - - - - - - -
3.0445 0.1709 17.81 0.0000
-0.4543 0.2022 -2.25 0.0246
-0.2930 0.1927 -1.52 0.1285
0.0000 0.2000 0.00 1.0000
0.0000 0.2000 0.00 1.0000
- - - - - - - - - -
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.0445 0.1709 17.81 0.0000
outcome2 -0.4543 0.2022 -2.25 0.0246
outcome3 -0.2930 0.1927 -1.52 0.1285
treatment2 0.0000 0.2000 0.00 1.0000
treatment3 0.0000 0.2000 0.00 1.0000
- - - - - - - -
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 8 10.58
outcome 2 5.45 6 5.13 0.0655
treatment 2 0.00 4 5.13 1.0000
- - - - - - - - -
PC1 PC2 PC3 PC4
Murder 0.0417 -0.0448 0.0799 -0.9949
Assault 0.9952 -0.0588 -0.0676 0.0389
UrbanPop 0.0463 0.9769 -0.2005 -0.0582
Rape 0.0752 0.2007 0.9741 0.0723
- - - - - - - -
PC1 PC2 PC3 PC4
Standard deviation 83.7324 14.2124 6.4894 2.4828
Proportion of Variance 0.9655 0.0278 0.0058 0.0008
Cumulative Proportion 0.9655 0.9933 0.9991 1.0000
- - - - - - - - - - - - - - -
Time series example
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1954 0.38 0.47 1.51 3.05 1.73 2.85
1955 3.41 5.19 6.30 9.05 10.15 11.30 13.54 14.06 14.44 15.02 16.36 18.34
1956 18.67 19.40 21.24 20.57 21.57 22.03 22.87 24.95 26.46 27.89 30.84 31.93
1957 34.05 35.22 36.28 35.23 37.96 37.57 38.96 40.35 42.42 42.60 45.85 46.37
1958 49.21 50.30 51.65 52.08 52.02 55.52 55.89 57.20 58.64 61.40 62.51 63.32
1959 64.03 64.23 64.28 67.00 67.35 67.05 70.36 71.41 72.19 73.59 75.01 75.50
1960 76.72 76.80 77.96 77.98 78.77 81.12 81.84 83.19 85.80 86.85 89.68 91.00
1961 91.79 92.63 92.84 94.27 93.54 94.56 95.53 95.78 96.86 99.43 101.54 103.07
1962 104.12 105.51 106.33 107.78 107.84 107.71 108.67 109.27 111.17 112.05
- - - - - - - - - - - - - - -
Time series example
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1954 0.38 0.47 1.51 3.05 1.73 2.85
1955 3.41 5.19 6.30 9.05 10.15 11.30 13.54 14.06 14.44 15.02 16.36 18.34
1956 18.67 19.40 21.24 20.57 21.57 22.03 22.87 24.95 26.46 27.89 30.84 31.93
1957 34.05 35.22 36.28 35.23 37.96 37.57 38.96 40.35 42.42 42.60 45.85 46.37
1958 49.21 50.30 51.65 52.08 52.02 55.52 55.89 57.20 58.64 61.40 62.51 63.32
1959 64.03 64.23 64.28 67.00 67.35 67.05 70.36 71.41 72.19 73.59 75.01 75.50
1960 76.72 76.80 77.96 77.98 78.77 81.12 81.84 83.19 85.80 86.85 89.68 91.00
1961 91.79 92.63 92.84 94.27 93.54 94.56 95.53 95.78 96.86 99.43 101.54 103.07
1962 104.12 105.51 106.33 107.78 107.84 107.71 108.67 109.27 111.17 112.05
diff --git a/xtable.tex b/xtable.tex deleted file mode 100644 index 6cc4b38..0000000 --- a/xtable.tex +++ /dev/null @@ -1,501 +0,0 @@ -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrlllr} - \hline - & grade & sex & disadvg & ethnicty & tlimth \\ - \hline -1 & 6 & M & YES & HISPANIC & 43 \\ - 2 & 7.0 & M & NO & BLACK & 88.0 \\ - 3 & 5.00 & F & YES & HISPANIC & 34.00 \\ - 4 & 3.000 & M & YES & HISPANIC & 65.000 \\ - 5 & 8.0000 & M & YES & WHITE & 75.0000 \\ - 6 & 5 & M & NO & BLACK & 74 \\ - 7 & 8.0 & F & YES & HISPANIC & 72.0 \\ - 8 & 4.00 & M & YES & BLACK & 79.00 \\ - 9 & 6.000 & M & NO & WHITE & 88.000 \\ - 10 & 7.0000 & M & YES & HISPANIC & 87.0000 \\ - 11 & 3 & M & NO & WHITE & 79 \\ - 12 & 6.0 & F & NO & WHITE & 84.0 \\ - 13 & 8.00 & M & NO & WHITE & 90.00 \\ - 14 & 5.000 & M & NO & WHITE & 73.000 \\ - 15 & 8.0000 & F & NO & WHITE & 72.0000 \\ - 16 & 6 & F & NO & BLACK & 82 \\ - 17 & 4.0 & M & NO & WHITE & 69.0 \\ - 18 & 3.00 & F & YES & HISPANIC & 17.00 \\ - 19 & 3.000 & M & NO & HISPANIC & 37.000 \\ - 20 & 5.0000 & M & NO & WHITE & 70.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrr} - \hline - & (Intercept) & sexM & grade & sexM:grade \\ - \hline -1 & 1 & 1 & 6 & 6 \\ - 2 & 1 & 1 & 7 & 7 \\ - 3 & 1 & 0 & 5 & 0 \\ - 4 & 1 & 1 & 3 & 3 \\ - 5 & 1 & 1 & 8 & 8 \\ - 6 & 1 & 1 & 5 & 5 \\ - 7 & 1 & 0 & 8 & 0 \\ - 8 & 1 & 1 & 4 & 4 \\ - 9 & 1 & 1 & 6 & 6 \\ - 10 & 1 & 1 & 7 & 7 \\ - 11 & 1 & 1 & 3 & 3 \\ - 12 & 1 & 0 & 6 & 0 \\ - 13 & 1 & 1 & 8 & 8 \\ - 14 & 1 & 1 & 5 & 5 \\ - 15 & 1 & 0 & 8 & 0 \\ - 16 & 1 & 0 & 6 & 0 \\ - 17 & 1 & 1 & 4 & 4 \\ - 18 & 1 & 0 & 3 & 0 \\ - 19 & 1 & 1 & 3 & 3 \\ - 20 & 1 & 1 & 5 & 5 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -sex & 1 & 75.37 & 75.37 & 0.38 & 0.5417 \\ - ethnicty & 3 & 2572.15 & 857.38 & 4.27 & 0.0072 \\ - grade & 1 & 36.31 & 36.31 & 0.18 & 0.6717 \\ - disadvg & 1 & 59.30 & 59.30 & 0.30 & 0.5882 \\ - Residuals & 93 & 18682.87 & 200.89 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ - \hline -(Intercept) & 73.6364 & 4.2502 & 17.33 & 0.0000 \\ - sexM & -1.6364 & 5.8842 & -0.28 & 0.7816 \\ - ethnictyHISPANIC & -9.7614 & 6.5501 & -1.49 & 0.1395 \\ - ethnictyOTHER & 15.8636 & 10.8360 & 1.46 & 0.1466 \\ - ethnictyWHITE & 4.7970 & 4.9687 & 0.97 & 0.3368 \\ - sexM:ethnictyHISPANIC & 10.6780 & 8.7190 & 1.22 & 0.2238 \\ - sexM:ethnictyWHITE & 5.1230 & 7.0140 & 0.73 & 0.4670 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ - \hline -(Intercept) & 73.6364 & 4.2502 & 17.33 & 0.0000 \\ - sexM & $-$1.6364 & 5.8842 & $-$0.28 & 0.7816 \\ - ethnictyHISPANIC & $-$9.7614 & 6.5501 & $-$1.49 & 0.1395 \\ - ethnictyOTHER & 15.8636 & 10.8360 & 1.46 & 0.1466 \\ - ethnictyWHITE & 4.7970 & 4.9687 & 0.97 & 0.3368 \\ - sexM:ethnictyHISPANIC & 10.6780 & 8.7190 & 1.22 & 0.2238 \\ - sexM:ethnictyWHITE & 5.1230 & 7.0140 & 0.73 & 0.4670 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -sex & 1 & 75.37 & 75.37 & 0.38 & 0.5395 \\ - ethnicty & 3 & 2572.15 & 857.38 & 4.31 & 0.0068 \\ - sex:ethnicty & 2 & 298.43 & 149.22 & 0.75 & 0.4748 \\ - Residuals & 93 & 18480.04 & 198.71 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrrr} - \hline - & Res.Df & RSS & Df & Sum of Sq & F & Pr($>$F) \\ - \hline -1 & 96 & 19053.59 & & & & \\ - 2 & 93 & 18480.04 & 3 & 573.55 & 0.96 & 0.4141 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & z value & Pr($>$$|$z$|$) \\ - \hline -(Intercept) & 3.1888 & 1.5966 & 2.00 & 0.0458 \\ - ethnictyHISPANIC & -0.2848 & 2.4808 & -0.11 & 0.9086 \\ - ethnictyOTHER & 212.1701 & 22122.7093 & 0.01 & 0.9923 \\ - ethnictyWHITE & -8.8150 & 3.3355 & -2.64 & 0.0082 \\ - grade & -0.5308 & 0.2892 & -1.84 & 0.0665 \\ - ethnictyHISPANIC:grade & 0.2448 & 0.4357 & 0.56 & 0.5742 \\ - ethnictyOTHER:grade & -32.6014 & 3393.4687 & -0.01 & 0.9923 \\ - ethnictyWHITE:grade & 1.0171 & 0.5185 & 1.96 & 0.0498 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Deviance & Resid. Df & Resid. Dev & Pr($>$Chi) \\ - \hline -NULL & & & 99 & 129.49 & \\ - ethnicty & 3 & 47.24 & 96 & 82.25 & 0.0000 \\ - grade & 1 & 1.73 & 95 & 80.52 & 0.1884 \\ - ethnicty:grade & 3 & 7.20 & 92 & 73.32 & 0.0657 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -block & 5 & 343.30 & 68.66 & 4.45 & 0.0159 \\ - N & 1 & 189.28 & 189.28 & 12.26 & 0.0044 \\ - P & 1 & 8.40 & 8.40 & 0.54 & 0.4749 \\ - K & 1 & 95.20 & 95.20 & 6.17 & 0.0288 \\ - N:P & 1 & 21.28 & 21.28 & 1.38 & 0.2632 \\ - N:K & 1 & 33.14 & 33.14 & 2.15 & 0.1686 \\ - P:K & 1 & 0.48 & 0.48 & 0.03 & 0.8628 \\ - Residuals & 12 & 185.29 & 15.44 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -block & 5 & 343.30 & 68.66 & 4.45 & 0.0159 \\ - N & 1 & 189.28 & 189.28 & 12.26 & 0.0044 \\ - P & 1 & 8.40 & 8.40 & 0.54 & 0.4749 \\ - K & 1 & 95.20 & 95.20 & 6.17 & 0.0288 \\ - N:P & 1 & 21.28 & 21.28 & 1.38 & 0.2632 \\ - N:K & 1 & 33.14 & 33.14 & 2.15 & 0.1686 \\ - P:K & 1 & 0.48 & 0.48 & 0.03 & 0.8628 \\ - Residuals & 12 & 185.29 & 15.44 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -block & 5 & 343.30 & 68.66 & 4.45 & 0.0159 \\ - N & 1 & 189.28 & 189.28 & 12.26 & 0.0044 \\ - P & 1 & 8.40 & 8.40 & 0.54 & 0.4749 \\ - K & 1 & 95.20 & 95.20 & 6.17 & 0.0288 \\ - N:P & 1 & 21.28 & 21.28 & 1.38 & 0.2632 \\ - N:K & 1 & 33.14 & 33.14 & 2.15 & 0.1686 \\ - P:K & 1 & 0.48 & 0.48 & 0.03 & 0.8628 \\ - Residuals & 12 & 185.29 & 15.44 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -N:P:K & 1 & 37.00 & 37.00 & 0.48 & 0.5252 \\ - Residuals & 4 & 306.29 & 76.57 & & \\ - N & 1 & 189.28 & 189.28 & 12.26 & 0.0044 \\ - P & 1 & 8.40 & 8.40 & 0.54 & 0.4749 \\ - K & 1 & 95.20 & 95.20 & 6.17 & 0.0288 \\ - N:P & 1 & 21.28 & 21.28 & 1.38 & 0.2632 \\ - N:K & 1 & 33.13 & 33.13 & 2.15 & 0.1686 \\ - P:K & 1 & 0.48 & 0.48 & 0.03 & 0.8628 \\ - Residuals1 & 12 & 185.29 & 15.44 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -N:P:K & 1 & 37.00 & 37.00 & 0.48 & 0.5252 \\ - Residuals & 4 & 306.29 & 76.57 & & \\ - N & 1 & 189.28 & 189.28 & 12.26 & 0.0044 \\ - P & 1 & 8.40 & 8.40 & 0.54 & 0.4749 \\ - K & 1 & 95.20 & 95.20 & 6.17 & 0.0288 \\ - N:P & 1 & 21.28 & 21.28 & 1.38 & 0.2632 \\ - N:K & 1 & 33.13 & 33.13 & 2.15 & 0.1686 \\ - P:K & 1 & 0.48 & 0.48 & 0.03 & 0.8628 \\ - Residuals1 & 12 & 185.29 & 15.44 & & \\ - \hline -\end{tabular} -\end{table} -\clearpage -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ - \hline -(Intercept) & 5.0320 & 0.2202 & 22.85 & 0.0000 \\ - groupTrt & -0.3710 & 0.3114 & -1.19 & 0.2490 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ - \hline -(Intercept) & 5.0320 & 0.2202 & 22.85 & 0.0000 \\ - groupTrt & -0.3710 & 0.3114 & -1.19 & 0.2490 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ - \hline -(Intercept) & 5.0320 & 0.2202 & 22.85 & 0.0000 \\ - groupTrt & -0.3710 & 0.3114 & -1.19 & 0.2490 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Sum Sq & Mean Sq & F value & Pr($>$F) \\ - \hline -group & 1 & 0.69 & 0.69 & 1.42 & 0.2490 \\ - Residuals & 18 & 8.73 & 0.48 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & Estimate & Std. Error & z value & Pr($>$$|$z$|$) \\ - \hline -(Intercept) & 3.0445 & 0.1709 & 17.81 & 0.0000 \\ - outcome2 & -0.4543 & 0.2022 & -2.25 & 0.0246 \\ - outcome3 & -0.2930 & 0.1927 & -1.52 & 0.1285 \\ - treatment2 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - treatment3 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{lrrrrr} - \hline - & Df & Deviance & Resid. Df & Resid. Dev & Pr($>$Chi) \\ - \hline -NULL & & & 8 & 10.58 & \\ - outcome & 2 & 5.45 & 6 & 5.13 & 0.0655 \\ - treatment & 2 & 0.00 & 4 & 5.13 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{|llrc} - \hline -Estimate & Std. Error & z value & Pr($>$$|$z$|$) \\ - \hline -3.0445 & 0.1709 & 17.81 & 0.0000 \\ - -0.4543 & 0.2022 & -2.25 & 0.0246 \\ - -0.2930 & 0.1927 & -1.52 & 0.1285 \\ - 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{r||llrc} - \hline - \hline -(Intercept) & 3.0445 & 0.1709 & 17.81 & 0.0000 \\ - outcome2 & -0.4543 & 0.2022 & -2.25 & 0.0246 \\ - outcome3 & -0.2930 & 0.1927 & -1.52 & 0.1285 \\ - treatment2 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - treatment3 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{||llrc} - \hline - \hline -3.0445 & 0.1709 & 17.81 & 0.0000 \\ - -0.4543 & 0.2022 & -2.25 & 0.0246 \\ - -0.2930 & 0.1927 & -1.52 & 0.1285 \\ - 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{|r||llrc|} - \hline - & Estimate & Std. Error & z value & Pr($>$$|$z$|$) \\ - \hline -(Intercept) & 3.0445 & 0.1709 & 17.81 & 0.0000 \\ - outcome2 & -0.4543 & 0.2022 & -2.25 & 0.0246 \\ - outcome3 & -0.2930 & 0.1927 & -1.52 & 0.1285 \\ - treatment2 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - treatment3 & 0.0000 & 0.2000 & 0.00 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begingroup\small -\begin{tabular}{lrrrrr} - & Df & Deviance & Resid. Df & Resid. Dev & Pr($>$Chi) \\ - NULL & & & 8 & 10.58 & \\ - \hline -outcome & 2 & 5.45 & 6 & 5.13 & 0.0655 \\ - treatment & 2 & 0.00 & 4 & 5.13 & 1.0000 \\ - \end{tabular} -\endgroup -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & PC1 & PC2 & PC3 & PC4 \\ - \hline -Murder & 0.0417 & -0.0448 & 0.0799 & -0.9949 \\ - Assault & 0.9952 & -0.0588 & -0.0676 & 0.0389 \\ - UrbanPop & 0.0463 & 0.9769 & -0.2005 & -0.0582 \\ - Rape & 0.0752 & 0.2007 & 0.9741 & 0.0723 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[ht] -\centering -\begin{tabular}{rrrrr} - \hline - & PC1 & PC2 & PC3 & PC4 \\ - \hline -Standard deviation & 83.7324 & 14.2124 & 6.4894 & 2.4828 \\ - Proportion of Variance & 0.9655 & 0.0278 & 0.0058 & 0.0008 \\ - Cumulative Proportion & 0.9655 & 0.9933 & 0.9991 & 1.0000 \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[h] -\centering -\caption{Time series example} -\begin{tabular}{rrrrrrrrrrrrr} - \hline - & Jan & Feb & Mar & Apr & May & Jun & Jul & Aug & Sep & Oct & Nov & Dec \\ - \hline -1954 & & & & & & & 0.66 & 1.59 & 1.95 & 4.14 & 5.68 & 8.83 \\ - 1955 & 8.20 & 7.16 & 7.80 & 9.57 & 9.87 & 12.45 & 14.02 & 17.17 & 18.69 & 18.43 & 19.84 & 20.50 \\ - 1956 & 23.17 & 23.45 & 25.57 & 25.10 & 26.85 & 27.50 & 29.36 & 31.18 & 31.48 & 31.79 & 32.99 & 34.06 \\ - 1957 & 35.48 & 36.17 & 38.56 & 40.20 & 40.68 & 42.89 & 43.98 & 45.28 & 47.61 & 48.80 & 50.60 & 52.23 \\ - 1958 & 53.09 & 53.50 & 56.32 & 57.35 & 58.53 & 58.66 & 60.83 & 61.35 & 61.84 & 60.36 & 61.77 & 62.69 \\ - 1959 & 63.70 & 66.14 & 66.54 & 67.75 & 69.33 & 69.84 & 70.52 & 72.26 & 72.90 & 73.34 & 74.00 & 72.85 \\ - 1960 & 75.48 & 76.96 & 76.86 & 77.80 & 78.61 & 80.79 & 81.84 & 83.19 & 86.19 & 88.13 & 89.47 & 91.29 \\ - 1961 & 93.62 & 94.15 & 95.85 & 96.35 & 96.97 & 98.54 & 98.28 & 99.44 & 99.30 & 100.71 & 102.13 & 103.45 \\ - 1962 & 103.86 & 105.09 & 104.57 & 106.13 & 106.24 & 106.59 & 108.23 & 108.20 & 108.30 & 108.04 & & \\ - \hline -\end{tabular} -\end{table} -% latex table generated in R 4.4.2 by xtable 1.8-4 package -% Thu Nov 28 15:09:15 2024 -\begin{table}[htb] -\centering -\begin{tabular}{rrrrrrrrrrrrr} - \hline - & Jan & Feb & Mar & Apr & May & Jun & Jul & Aug & Sep & Oct & Nov & Dec \\ - \hline -1954 & & & & & & & 0.66 & 1.59 & 1.95 & 4.14 & 5.68 & 8.83 \\ - 1955 & 8.20 & 7.16 & 7.80 & 9.57 & 9.87 & 12.45 & 14.02 & 17.17 & 18.69 & 18.43 & 19.84 & 20.50 \\ - 1956 & 23.17 & 23.45 & 25.57 & 25.10 & 26.85 & 27.50 & 29.36 & 31.18 & 31.48 & 31.79 & 32.99 & 34.06 \\ - 1957 & 35.48 & 36.17 & 38.56 & 40.20 & 40.68 & 42.89 & 43.98 & 45.28 & 47.61 & 48.80 & 50.60 & 52.23 \\ - 1958 & 53.09 & 53.50 & 56.32 & 57.35 & 58.53 & 58.66 & 60.83 & 61.35 & 61.84 & 60.36 & 61.77 & 62.69 \\ - 1959 & 63.70 & 66.14 & 66.54 & 67.75 & 69.33 & 69.84 & 70.52 & 72.26 & 72.90 & 73.34 & 74.00 & 72.85 \\ - 1960 & 75.48 & 76.96 & 76.86 & 77.80 & 78.61 & 80.79 & 81.84 & 83.19 & 86.19 & 88.13 & 89.47 & 91.29 \\ - 1961 & 93.62 & 94.15 & 95.85 & 96.35 & 96.97 & 98.54 & 98.28 & 99.44 & 99.30 & 100.71 & 102.13 & 103.45 \\ - 1962 & 103.86 & 105.09 & 104.57 & 106.13 & 106.24 & 106.59 & 108.23 & 108.20 & 108.30 & 108.04 & & \\ - \hline -\end{tabular} -\caption{Time series example} -\end{table}