From 733c3acdcb0512b6737efc1c142aa26141cd76ca Mon Sep 17 00:00:00 2001 From: Kyle Belanger Date: Thu, 12 Oct 2023 11:26:16 -0400 Subject: [PATCH] update site --- _site/blog.html | 48 +- _site/listings.json | 1 + .../line-graphs-and-interactivity.html | 4 +- .../figure-html/unnamed-chunk-7-1.png | Bin 27842 -> 27979 bytes .../figure-html/c-g1-1.png | Bin 82970 -> 81902 bytes .../posts/2023-10-12_DHSC_Capstone/index.html | 420 ++++++++++++++++++ _site/search.json | 311 ++++++------- posts/2023-10-12_DHSC_Capstone/index.qmd | 21 + 8 files changed, 641 insertions(+), 164 deletions(-) create mode 100644 _site/posts/2023-10-12_DHSC_Capstone/index.html create mode 100644 posts/2023-10-12_DHSC_Capstone/index.qmd diff --git a/_site/blog.html b/_site/blog.html index d64b164..1c88b94 100644 --- a/_site/blog.html +++ b/_site/blog.html @@ -156,7 +156,7 @@ ul.task-list li input[type="checkbox"] { +
Categories
All (10)
Distill (1)
TidyTuesday (1)
@@ -169,7 +169,35 @@ ul.task-list li input[type="checkbox"] {
-
+
+
+

+
+ + +
+
@@ -204,7 +232,7 @@ Kyle Belanger
-
+
@@ -239,7 +267,7 @@ Kyle Belanger
-
+
@@ -267,7 +295,7 @@ Kyle Belanger
-
+
@@ -295,7 +323,7 @@ Kyle Belanger
-
+
@@ -323,7 +351,7 @@ Kyle Belanger
-
+
@@ -351,7 +379,7 @@ Kyle Belanger
-
+
@@ -379,7 +407,7 @@ Kyle Belanger
-
+
@@ -407,7 +435,7 @@ Kyle Belanger
-
+
diff --git a/_site/listings.json b/_site/listings.json index 244f892..824e3a9 100644 --- a/_site/listings.json +++ b/_site/listings.json @@ -2,6 +2,7 @@ { "listing": "/blog.html", "items": [ + "/posts/2023-10-12_DHSC_Capstone/index.html", "/posts/2021-02-26_tidytuesday-hbcu-enrollment/tidytuesday-2021-week-6-hbcu-enrolment.html", "/posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html", "/posts/2020-07-25_diabetes-data-collection-and-cleaning/diabetes-in-rural-north-carolina-data-collection-and-cleaning.html", diff --git a/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html b/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html index 702fb44..180360d 100644 --- a/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html +++ b/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html @@ -332,8 +332,8 @@ $ fiscal_year <fct> 2013, 2013, 2013, 2013, 2 g2
-
- +
+
diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-7-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-7-1.png index 0684d7dd877dbfd8ed781332d89bf4b0fceded34..0ac91775323466b87d6b237c1fb7132cd1d250ee 100644 GIT binary patch literal 27979 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 literal 27842 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 T4Q}A=RS>6rZVp9z{bK(H!5->o diff --git a/_site/posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends_files/figure-html/c-g1-1.png b/_site/posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends_files/figure-html/c-g1-1.png index 69fcf952a4e06169c998f76f4058d8f1a3e70c84..9332bd5b79a2966beea34296c72c19ba6d4cb128 100644 GIT binary patch literal 81902 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 Up2j%f!1;^~&9A=KzxVL}0Mn+D*#H0l literal 82970 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

wS6l^se6$-QZac{N%nh8T_#A?nFCa)aHNu;*+A zj!$EyvGkgJ4o61@d4bEV$zp*ki=X6i-Ji}*TgyMZKl08YFv5X6I8VsJ{=vQ_Vkf%l zlT*#enSpFx&>_p5NB?w2y%)pmnPUYY^mhqv=IyR(Wi9g)Ok>g-er!{|yBttsFf;Os z+84jJmc4b>uWIC-5Q#~7eVtL7g>$7oVWx_UDfzZjRMNAmS^R>xYA=*&sGvr=G?9{+ zsM*z*Wqc>cXyu-u((VM*dm=!+2PZDYSWptft9p=x$Ud3jNYuXz?~43f)-Eo{?f>xM zUxA;yZ7YxcD5QQZWVMTe78$^P;^=sGh12119%(RqwRW$2lXePQwKYlbHzPL;s~oxY z5RqZY_b0g%nyf{rrN8-wzEkd9`*Zq>K+O|Ms|82|v%SM|`4shgHnp+cQu#I1M7n|u zu0H>5&5?&i$8tjk9&OQ~W}u+E!q--Fjy$E;=Ket{ovsRU%0&1EM39K5A=gyE7QgFO zU`yfq2j2dFNU`XgfVG003F#z88t0O*UX^L2@=}Zz)N}ZPNK&hpVlc%1Mkd~6ApCoE zm&e9g6J#ts7T-#99Nvc_sI6am{1%L0*o?A<`xygd#isqElWly3Yy84`jHx#YE-W1R z?Zm0H;#ExTi5+TAzF+f}63%CqkLe-st_6}e*uZoYcdrYV7ns)+e#f|zC+Ch$t|?C-L<3UzomO`Hayon&Q6+>yr4BhPvDJ+pKtA!i;r8D5eR zkwNVePnBQbCl3b;)U(M#BW>6(ACG$^6nNRJMF47tNK5uuUgwSiG`?rm7d2$qa*mPd z*COsHdExd^d^%D1<$MEw&-L{_FB(d%SNVJ&dhLwEq9NLQKUd?bU1jcF27mv?Nh45> ze;k;K3rXuuu!oEHh%oh0jL*{0d8m*0q?mq~rcB7~VRuzk=`7Xmr}lVWKEMw=8>Tqn z3Z#QYtKrKdT=0|vm5mAyQjzRh!2qT04`0#y6X-JWUFStEgZ9IBj8cj&82;N+G&6^3 zAQpf4bOBQ2+&ldImpO^l11u^;_M?eb{Jb1C`v4ZnzgN3o6T9roD9vOWv$Xe&=nk}F zA=>3%tbTOX?=Y$n$CXn-rJ<-Q`Hmu;DXFX+^(SDT1XM|8?`}zkl0Q`5Iy|W{aiwa5 zSYMyG;9MW-(S~K%{IxH!0yXkQ+-#CgZa+HPKRlRJ1csf_9j@y+ zuXQYmL0*c{VmksPxbJPs!e;jE#{6z`0_K4IOu$jOVG4-h6&;P%l)V+;=n>!7 zqC?x89;rzSR|NA#)EBaH8(J7}^DZg0uq}7LZuf^+DdlSi_c&VjIsEja)YHGOd}g3?6>pmG zhm#N{;S_rG=#KS<{1QY<6|q%99eu`5431HbqjT&&i(-clS6yV)o>pbLlq$^-f&Mwi1yJ@YG}HMihd{@a5SqbV9K= zX`TO8Un~1-U;bwO-=bKrIF&cug-)zM2w*=J^hGv3$Yjgjkp&c)Vb3x%tt%(3DR$$mvyyaTDzKu9uWp?{b;@H$P-O$cf z3h7OGI8G1XG%>Z`p`tQHXt-yH>{Vw=S^O@OU=F8)(<l&ccSeQFC^=q2C)PB214i(wOJj)sH1-GD+hsQZJ!!-Uw6}FTfrLQ<=e?;fmX&Q#C$lnv zlg3U6wv{-2r#Hm!oOeQsaUt}%bch-iswHUv=x{yZ>jBGfcPJ1*=I(TRI(f9A*L#QK zl0&^v3ZS;Fll3Fcw2=DVAgnYF6HY;mXh(!t5bZ(FXfVpSgXMe(gdT?q{WTBCm+SBo zwPrz=FG1YGZaWa3Af`fs_aTKL5bY#zTL<_gg5_vE-SO_XgOn865aeP$mn%l*ZEuWU z!&JJ&#(Jaf)`#;-Tc1Vd!4aQ06~R4kNlb&cmq&nOV<^YrP)r|nYVkz(6y)_RlTK3q zIOy;G6b24ZfKL5$#kY=5CxBMczpJD1t(R6=IoQ6w)&WPWwO6`Y=evJXfp6+lTFc@$ z`9Jf5ko>gz0g-hAP{Qj9K@DOIDl*~p+8ui zL-Ad9BB}@uPQWJwcifa>Fx>@S85K&YSBUi?GGa;gXjQp=k%g`Ax?Mdim_@6p`N5K3 zWB;S3rOeMSobAN|!65Zg>dg^;HgZs z!YrmWN?x}+jut9C#vngug#;@Su?}0xhW4;w@x{rYef}LiyeR6bEV~;@X(lOX9DjP@ zMJ~rRYMmecq`Tuf{GmKBuqWT|!{XeOaTku-BM?5g5^M;g^O@p9b-FJZ=^bf4W-sM_ zlsTaN(m{>Lj=fI!rqNK+WSCOM`;m`A+as3MLJ6~`P@}lvqw#Agzl&~l1$WF@;OM*< zf|gi%PPDuacx}+^D%}LMrjHSQC=dm&dhK=4Ugc))91XL9Q((gVMuGd>Q z&yp@!B`HsGBGfi!EnzwOLX(Mnf+e`l51OtLE3!;UjFy|1Ihgdx5@$P~wBgc!Y2{SE>lH1@VLf(+*R&{P zZ)wW_BgJ|D>>3NlB;N=aU$2Ed|T)Hm?Tz`hFZxmcVDmK7Qp+XE3HWG@d@V!&7iu>vZx(66nS5e{mK!*r&Ux;KgkDt@> zTeQpOr6>8UJ+2gB&HRR8o>B-dU>rj%ulN1W?^Jv~r*(nn9mMj4&-EO}_sfPxAdtyn zp@njq<20jh(&rW|l;+V0j7Q?KMKW@FA?Rl@Cjz%_!H`peDW>g1(%za)d8fdO7MM+{ zT$yoK6mq1rT~U46z+xKz_2Yeq*!%UX{ ziL1IyU2}#$g#Ds&y2k+IU;PZ48F;ol=BCwD0s{OQ8sPU8xo)itcv`gQp=~6s_>@&z z6Tqap)&&M&KPv)0$%&UZeBKMomxFgG-r2N)!@tpx?aNQy&koBvgG1ft_y@wFCgfMv zTG0)eT(o2<5I2%DXzXz`2j^fqF!H>9B-XBZp9MBiqrse9zjixXjoY$qFcNHrlp732 z)9SwY#MDoJ>gQlQs8tO$>$@+BGoL)zbGOUfm>DJttmI!gext$K7$f=+zow00s!Fhk zseddSa&Fd#d>P$8s2M3}A`w`Bi0A~$(|)OW24@Exzt)0e=*Y1G$}~4^Jja9C0Af!g zJ${*T*0$r34{I;So z9-~OU>y67^ZQ52RANJU#D$xs!vm?lugc*Bh{ZI0+VP{#&09G`pRS*6XovXEIw#DBO zibwpeap~~Sh(!9f#(SAi5I|ZP*;e*j{iE!!s(^V6y%@bNrvGVVf3Ia4etg2Su!%>A zMw~~uuVTnUCB&$v~#D^dj0#D-OE#%t-Jb+d;;{Y1I4H=>#7@%^C* zJc+X03)*l%(tPhkq%-g|`hB@O0O^-tJt!l)em(jl0DJrrhZ836vqrQ-(|RmrE{ zy#nqV(0yM^53s@i2MB3Ae9JS`lr+Rs9Do=!H|h3B7?v+GZPU#WPpdyF0SF-Vx2Ywk&6!SrJiib+8TZVtbpCfe7|^mlk}u7~lE=sm zEB>JkFTbod#mo#(xbS^?$imdtLb9RL?O!iMv5(?rg+0gjoM866p7SzXfw8{vr_?}# zKG(j~FMqz;9*ig4?QDh^$RKw=5ti{G=)ium3;r+yj2T02ubM6&xER}&|7D1Wa~h0y ze!p$xKfESp;$EK#Rj2;eMXdvhC+#NAT32mYC46;b{z$8?7qS^j(i^^thIq z%(pp!8V&#;9J@>3jT`+W=w&j-g0=QPG}av(NW^a!@VxX+av42;SbR#39}D5h*-F0% zYrF!DeF8 z#eg1m$5HkS$4Y+&GG&0{T0Q)eXmbYldwfxpM|;Q^q{qPUo`}z=T0MC9tGrSRo4KKe zk)jSKJqHk&v<&1JN^qNwLIDtIENMsuep2{mUO%fZ*TFikw|D&xOX&GwVb0dZzv2S)UoZ0 z6D>>cz0*i~I%K;o;pN@SI%gB)eA`nu4h5fi7~qlYT1Yb40!)A1mOFwzzT_%A*dylP zvvM&zCA9*=QoEbpB5f#hLiQn(CCiD_;o1f>a^wZuF@? zT+P3Hr9}fjw0*hVGqnBLWpr{CDWm|03n6~2rQz_PSf-&jrZT6sz6`qOz)ARO6H1)1 zu;_m586t3r<&}dCK6lhb?H2-_^^f^S7bmUq^!XCq@^^nUFt7|1%)tjWiM8)d093Qr zU{8HfGHIf6K~j@5+-#K38hO{85Qd5DOx6mFu3AcBVxlQ?)nZ4CrU}+NgFv^{oOzxw zm_j`SJ!ys-m9MXt24kZsEvN!-8%;GC2)Od@F@v;H*SJ_(bWos4P9dA+ z?P=B1j9FmbX%a0Vj@|3Sv_^7;Fk#5)WygvESpY7FjqT66ZOQqQ&95UEj0X^cIU&GZfTrb3_lo>QygveEnLJP2;Ex zC0S%1bsC0eW9pwY5CN^ipU~(+0(xO#j^ESPO#_BIbBDO@s|s@V``xdeYRd+85U5`0fUv%YqT-tQ zHUhF1b*Q!zcbPVPYa&WIoH3B$6RpZ~KZc0DQzQEG>4(k0-Hn06gMCdfz{vKe3{5v_EYA*JUt|m0I$020XS(5R3PYfkYsFu zX3hUos3p@iuTnoRlJ>m^h0PBHLILFhFhD)T)%~fK_v&~U2j-1X86KlOK3$yVk+rW} zu?Lhp>;$^w!uco|weUOJVNv)aH3bBu?yzN@au!6M-74I|NjwyOEc-^+`5&&8w8tP1 zI~RegI#4Ay~$NX<(pi{|LILz2AMg$ax%>IF!LA zVi_GtVn{nempeUKXsrI>>COcD@MB}vFz5u4Q@5C})^$lyzP80LXRDEFGnuiFgJ-Vm zK;M@|WdF2&m)uUa?dfB!4_EtFL+d7So35l??y@n>9^T?aBnA-3Yw^)ZObGP$sOdrS zE^_bOan{I&A~p3X3@ug1rKOWZX_E=?uNyHyexAAmReB@4=~c%o9N9wHe30)gt-ZH)*m32Z}@Bjn#yt*mcby)w%mG0Bdq zHnFrEP$7naRwGbhh6n`=(qn;YvpQx)uc(>@R7c~jl5QI!1+W=2a|HPEAQi}d34r|# z1s#@fKjq<2*Q57S%E0d5K_W&voPjUOo*A@|j`f*l9R_u}O1z9u zF3*pCTyzEk$ZbgGvf7d7%hR`Nb*(g9CA%lCj?GXRCn}@m%!7%R_TE=%YNxPS>k|oK zA61aZ5+0;30IEfYmA(5NE^20)g-# zj;|3Dp&$xKPkj(&2o#j9qtzRpNOtjPr^@3CREuwt%5^AK-?}-{cJN&I8Wspg=wb{M zJM!LCm8+`HGOlQ$d`W(p5*%va?;mj`;7F?2=^?-6<8CWg-7Z&msldx{@Vp6LwZ#9H z<%@6w^VZU`gnJCs@YT>XiT=m0K<0H;TPYS2-U{o9kZ*cs8;pYAG;OWAWfOS6MWKT* ztIL|)Q?nP{u;=z0F)uAYu7Gi(FM4?zRELrby;2WKz098a|Gcp!?&CzGK#aPGY=a0`K zpLJRf#bF8?mYjaLVuK_9-oi!i~TP7<4D5>!hhvxJ8Mbd@I3+Y-$Bvfne`={_{(A7i^4X7zMv`bjcl{ueYXJ1cQ*ZxA zrLK42t}vM09346tyZp~9V%&T(&`49ba1mtpH`=vt>JyXPI;_VkwWo{#Ft&o73AL~+o4jXotV5BgfH?mmpw!cEScv-(R6 z(pjfMLml3E`A^qirPkoIW)5RsNbWCe%f{7(9LF);MV8kegcUISh`-Zfo|-Ie7*)hB z`+w+Tt?QxSVW5OdF{b6cE|VYo?36t6w^TK9H(wY+@JM{!cXgEx>4~!Ji5%c+m7{0Bth@T#*@AQ zBIWE)u(sh%?!53I7s8kLTHEMRy17`CQUnl)>H?7Y6*nzJLN#$kB+IS@qtEdBP(0x9 z$PgR~Y&H*oMhP|dA&agzQnKq6Em?0zav3LWj>)(FU@w?)7>&RcAQZgxse;hrYW7v& z77$+A#931}>rGlFQ8!}k+{g#398SjXd!pN8sro__E`SK53aH|Ys)W$C#Fx6HLd9kH zx)gPLm@6|TqqJH!BVx}Dl4VU5UYGxh`4=a>C6j}2_M?~O%PJXDS7B(-+O%Srq#cF` z-Dm0!@64S3LWM=yv-=^0`E;CDQcfr?v%YsG)Qw6ymTncC{1t|1f8)B&bHTBe1S5hO zmymcFRN3rQi?jvZgZufe%!%9yu8fPTd&XRDT;+Z)J2Z^1Dl16cj4cW9IezTD;NxEA z(r7A%HfZ7yRKnGR@pl1<*4Omcva@Dl=p*cTI7r#tblSd|=>_GRoc zdb!OTGr4;He1()_9xrz(_3M)y2Ecrfybkl~eSg*4<1^UG_RdhFeHmDq6-%<`0ud`Or#gw^UP`}uI4@|>PBQ@-5Vu;uInigj1; zDD(7sNqB1UymOc%;kEo|7Z-vLg?!Jb9EE20o4({ZB;WQs&Qo<)$j%(KeyILr4t-ycd`i^@+cjDorfSHR69-(8_!UUIEGr z^0a9S7INGtq`#Jj71mIKwKJyfc}Nt9_q5 zj7KlRl4Zp=06!?GuYA;Bbstc$!Uvl<*|kt3QiW01p_pN$H^t?TZ{QYrw10mQnQvFm zkwKx6^;L~~&GgonMxM8jeL})H2LywmQ}#;N0Z2FFM)I=|ctcRV!Bbyx*cC(&I& z$UViTo9`MNk+CZvo7ze))l72-)Fn4gM&<%@3+N=7qhWxv@$p^W`owvd)hlq8)L|IN z{b;<9={y33P2`a;+e~ClOWYH~3;O7&_HvvDKKum(0{v=bsuY>{PIRJ-T$T1=H)uP1 z*b;x{tN@G!8%evFt380gGab=n4(#Ad;;%tLX`Wd3u5?FGn969nFfav1@O{Cb*b3_| ztdLK{Bz@g~zkGNRQ|VUj9kUJkgR8s)0zGL9u8ff09=U@+H(_A}Vhw4%H6!y80}BYd zruOuHL}WAkU1HjATzXgA1BAZS`iLisRJp@9MTL^|3o*9Y2h z8LVP=k4T$Y{R*#J1vRr0jy=hnaBxSkj7(*@%=Mmm1Y`pQWGE^Ve^>&3`#1j~boDDO z2Pe?n97)H-Sq?|&^Y8Ob+ItPuH^lY|>|53&-V{O592d|1M*-b^lEdc#F^__(BVtBb zh4(6^9%j;y7f)Nee%iz|?=zcVo5xP5*beJT0K(9B$-k~-pepqdF9{!}!bH$iT&>zU zG@(?WHu~tg99+UQJ0|&^t7Y^c^)Kd|B7y#F0ioSr*!JNEq*wrnQa6$s@IP7r9~1xT zqXOXy+<4N9kakI6&TZ0;gHmB0htaH z?G*323@7Wvk@;6IJU3e?JW$6)QDwany~jNz#dQY48+SWA>MNDs0D5BS$Zvki~wd#^-O! zHa(Gej*U_dc-zG)JgmJIo({{hC#ngnUCwNn9JXYQCp!&Zh~2|?E2_wSyqA_bLebhb z29|nM*EMmA=k|bN?H?b(aeF)eCTWB|vjEIxbu!6eB8x>2K+!=m0{4d(IKpG{5yU=2 z=voed0TcmXs>)SX+owNyppuYp&r0&T6A8Sg?i#k^z;@<#tBwA$s2QmNt>~nPm=>40 z-vMa{*vH9hjD$4CWn>H2qN3QYZ+U^5FS57z^k_u0Cm>VxYok+Qg8j^KC|zCo`ZLwQ z>jIDS&lBE0gea`F<0&?IJKT1c{6T_(a^L^BudEIdLOA0HWc22MR{?mVCS;qG|DNrG zT~_$pyi6C#t@B8X_da)QQyzDRj?YiR;1%0Pr@!mLwOrR>n@Cavw$*hlHS+OFm9LM) zyi{##47c=&nfLpME%6+SCMPwX-s}OI3|^PjpkWQeWdG&uqoh8FrM;w@T-1-j(aWiRcabBTz(;?)qz$ zdiro8uAz)t*w&L1ptmsb6Y5N~d$a7Fr#CsIUEpQj>IAE+t+dHIeQ=m)au1$8&Q4~U zbu$`gbibEyMOeC(el6u%c)A&{-=BV+x^11Jwvkcl3*5<1^7tkaQaJd{1+wzB`J!Nr zP@gL{15hhRzjGPXxI(0Y0f@Q@|9OeS3#)}pCpQz1qW!=(Nt`X%fVb6!6P~&d0KG9+ zJLQ0gAxEV1dyNo>F3C+CHxojt*dr-a4B)ZgzEX4aan){wup|<8I_`HWu6-KA9+IzM zITk6Go0XM{lR*gO=WI56$s2y3cRm20h1p|UFmV=*Mvq~eHlh8*B-c8(1P{`i-iqMG zKya=&9rr5<-cSacKH+ta);cXz*Oz9}2GmeNNX%>O+*CU)CA#*Qkq&i*=K zVb3`i_4ogOu)JRvMtSg8Njd?5?V}3stLs7ne&s8R(`yfI(MQ-jYEvdAiRIMzij8%B zV$m1|JUTX@PVk{f)3NnpAoBRXK=O{5K;I7*4q(5uLJr_1fzQ#yU@~_Wa37g@)4T%u zub*(W!@Am*?n*X`zsS*#?BC76BGmyHN!JFS=N7;a(D?b=`Ou{Kj`& ztjC3h^-#UGIz2@8L6+Ei$HcF+Bdw0Etx21U-W4@vc7Oep4*x@GnWG;Ca08D3ZhazL zp_fd(i{ly@I)3|BYFKNOSIaZ7V}>OsmkWgX6EYypNLYUekl}KTruipup!5KChl#&x zrM4zZzq|nys~3Vzt1F#WPks>6JB;=3XK1&q4{hsh6>sD*f8FGX&jW86;@57_zMOMP z`upSL+5$P72bdJ~R1!I093YEr&QpOD6Cq?W8#PhACyx@kU`~JbtwR8$N5}j6A&uAJ zCy4#Qtp@8W~DLI)FDw9AT=BQ>|$pzDFm2U%l9`kXN%DJ7!2j^k%fMpCf)j zwlQv!(Ld6_?mVpeYqH#5xNir4ID$(+lkrqAlgJDx*!210n6TEui^M~eKwkvKpQQrb zdDClyxItHdo@rUy&w*cgKneo3rlzvhu}*!I;vf8J1Jf}5#yDw+iMzM{*ALU zfCvMZ^I!YYF7=;={O`rlfsey_x0nP20+IvQ-$_?oZa-i?!-}{?0K}MFcKfQEzZtu>=7Vg} zvg^?xUJHV}N{=dz%AkRHpA6hHUFj57l}P7S{*)8&V`T=s1{OpibJ=~aM_^MAmxeW9 z2LKIV6M)F`1WZMnXR%t1MTDf!1v=x_C0e^Zbi z;O0CW&!`cV^lD)Pbmk*2LAw?JX9copMh5y#2st<4w#B8-9?&=_~r(T`1v6aKUtoN{*g$J1qj4tfIihmoB$vSWaV=o`3O`=P; z1E%Pw)GP)ikisc~(l_ucuYeX1H-_$P7~RD}-^eUbE{+~ikgqO1*_ z-YejEqb|enmZ&qKmYu2k9ZOP7BEVKMSLMC=ip(%-9(@)rc$2VaU8v)utiNd`5N7Oo z6$$A)@78ZA2)LC7H^1vz?dn@q5GMM6QyYt)I-hM`Jov~$>BAiRoH7G$UFHSmp2B)@ zLkl%j)H00=8Abu3mJ?t7m);;#4I*xpSes?mK5>3j546mBw6UYXE60$8;oU!j)XT^M zH+fh~G0yD)_?=Fp*H?h%Kj`$G6Q#Kb*}s_eLF5@*cVL~;U4*S$P5?6*zNdO7&GpIC zniEO+DImU=b$=U|M%?ZI6f%JQD@R}=AFM!94slX7x#_5{b2DO31pVYDo*(?OnF(;eMJ+A)jU`-WOF*3_zAi2jofjhuYSm-iY=+3y|L~^>hnSA?- zm1h#Q?ubLcsE(`Q!eO2OyLSWwlA=K~zW6asa<%Y$7SrAk-tzJREVnu1(~H{|K7Zay zr~AcF%Ki8muwO;H+lAzFmbWdCr#)+5_}`NEHCwj4=X6~QRnPr*$!7B;*ZwSs*983b znk}b4I(|XU2E3)p+Vd4l0cAa)X)y;iwOO*wvBd)^YNgGTt#MaQ^5d>f1+! z{3S&w7bIYwU%@aHI%w7BtO@G>=`;`0DY)pU|GH%ejD@Chs^w`D9FW^=*KLeUe11M$ zE08}?VSuPKGiX|PzRN5q#_{I76)2y9=tRg3@It^AarxxJja)irEyFS`-vPrw>z8eB zIx?Gz+37cL`JBfO(c{sa`>UlH{B=(LA*v%WG8*ktI(nVadF;uhM^@T+a}o-9Jc5lK zu@P>wD4zXWU5vma2Ga=f9&4dh92;+8N!#5Zs!R1N=NA{B&v<>_KF$3l4)<|cm);!#@|^2pwqX7Bv*cFBX9c9Ipdp@7VG6X z%C*BB`qwXLwaV!30*ti6H53tet-18`W$pW+VESM*D6FvZzlHSou0<)xU@Zn37`#(c zY}qfd3i581$PJbsJQrjBvc$Eyj@(bWDp8?AEdUr(2DdQS8mVwoo=$oA$!4g#?NPbALATtEddj0^h~5GaJ^#G+)p&`e%lNXU{#9-Eib0xW z4Ia+=vw2;3)o0KedH7NPaf%-S61qE7xzo10>?4@RGTv*Tj<1!$_}XH%6+(?+)mzdC zx&~dpVlQa5-cX1FbBos zba*Nn$WyXENty;?;xtX@bIq&dz5ipD;KtpxkRGc2a$}{ICSb12{Arvz$mqt{w(bQ^ z_wo30M{qca`uhm5it2Q@m~r}Hj|~D%pNu&)K!e!hN+}UA(l?Hu)JV$^Ku+HiyUTPv z1p~jW{s(S0EhkftMg?6X#4$U_5(B7vtMM6PB5$GJayS3skK8bR3x0nakIyg9W+2dq zZv)R%Elct`kyynCOmU)4YWWK3Ck4;vp1ZQ}UJn;9&-rrcP<`ho8{4d>q(EIGc=v}! z`=L1;ifMm;%ChA$SngE>Uu^k&8t-ZUJH$Znm{|ualzs!9Q#F%^7B7YtuYg~IkwfQ- z0+5+hBV$)jYkScEIaX;$rO=!TF^fmFoi2H~CG?RHSd__oecu-Wy~3G<2AV6C2)ee7 zNP6)6O#s-LxCIFbTz@!he@h1QTmwMXUwPbkXgtIK+Td5*HQ`RC)U*{q6K>Qq@p<-E zaao;tO|fj)ElG{#nm42UX{H)D!xA2Kb{}qkwzAZBzu(r)DQ6h$^#^K^{)$e)xGN2M z4J8{!A>PtVc-nGp0nf+RA8rC4xWL(HyZX~n+@Cv6zAHeN3X8Qqt&0JS8%tdl)b3>7 zWNT6_5*zHGlTQAw-T8v{Lr?x|Hc$tOWKS04$82kzAQH%o`*g>0OS!9w{@t!_%ssSM z$4V#oW=B9f>pAD-&(Gr*-Ix2hV=2&h!>w#MnHnI16LEvN{WiH%)J+ZpGRUTZW0U!F zKzeTdDpM34Ly?@n6O3fp?X7!-is6@Bi~io6>g#X%A&^#jB0LYmVYm6I~e9<>QvQ6QIO z#hJ^ESY2!2aH>9En`}NmXhc%_NOOzYy4EJ*F7sA!Zg?GSo3ZG?d}%lKytXM_yic5O z_l;Gh**8#54|R&spmAC&170HHd!T$=OeMYKFqY)7O}v=Q9||EPmo-3fLj9^Jp%v8I zFzW4N8qsO9yM#LDLhz!vQNX<3O=hk1ENK>F-oSb-Kc~Ip0L?w~t0cHbj#FL9*kY%I z6+0?ww|6A@Y2`HE*g$LP*o5rR&z2@RFF0!5)?B`(d3pU4y6R=Vrzh8uFd}|ZS!WjE znZ>pT=;_aiNgKm!eST`4Pcu?i)BdbnzrqXPtJe5?-sAzYp`pp|eOK+X_B*5hY5BIge5}>MWQutn((lV6EunjM9ovuOX3a~!g%wnU%d}qzG`a@w_h!|8HX~AmJZRRmy@dj07+n&v;kcUZ8qGD0n!Mh~ zjO97)-2UgpJipp%vnbHf0rVzPf_7?%8?OJ138X!F#xyXX>7AFWzwc+2xOIyM70`m{ zat)yXpbUw-3m9u$*A!np96o``9oabgUbRm@Tt_)uo9SqN@D3y~IRCExmUynsp7yhe zhf6nFu*|~)WK|M(LymiHzvtciugypNnw%!Ux=P6WuT7?&lBFs>Bv8h4$D|XGtSBkE zFfqyNuk@JSmeBKxh7{ONsliLaX-8D70^~R`0db4xe~S`w0wWS(%}_g&x2nziPe zHGj_hmGvZfp1sfB`}}q}`#I;gx3;1WR8U`zo#4uSZXLTW9)LTPWaPdv^yQ??Cnt#m zz-CdL3X8WdoRhMNnpr!LBt@{IppN zB-3yK4z;9HV8GGgkWh;86&4d&%k*fWFjNFtELcg4`bI1ZL?u?2YuVa_)$R~ryUsV| z%0!d~?KlOlYvP{a^d`9qjf$!Xk$<(R6I-@fimkR3ySDOOB5QL4%zzsb!=m^o75uY@ z#UtoG!_50`N2K#5Up(xaNgKZL=nj})tKoD%ML%lQ8}E_A$yIB-#eO6;;y}$^1T8Y;xNR) z;hHD;!q)zv=)^JB@=rLkyQ?XLizBa4@`VWSB?qw3W`D4?c#%7jqirVeBgf-YI&+*r z75N`Sw{OQnR;>Sv+N1d++Z`r%#wVGRGco+faqaPb3=J0bA*{ahNr#qB?z0%6uu zUfvDhLV&Y+2w1rI^I&}2{>Q;k;7j1B`v2mtD0o>oaOgSX7ivYWyu2a>u-E`1L01gh zszkjAwh+@mVw)*Dd!4AGF#;VWl0>c6BO#(t#wNZ6c1(O_RuZbL-=$9{mB@ixcY{JI z5eRi;7PIiuTk>CdqjXZ5F^HHJ`o`k5$=s*Kf@=;@^9xxEH7UTA(9wvRuN1-zV`t&_ z%jIoHM^eh)4+M4vew5Bru)Us*^Nw%xiy3D#Kp5>5=pc=5ck_P+x904o4_24Z)-1sm zB}62PNhcz~kz1deUrjHmi$|9%m&6;lc-j@RQmI6g77?+z&82(txnm*YmmaBoVdX%a zt()w}nj&dy1XvToYBzZa)`acNq3#MvZM={oBmUTU0RbdIzjzrMN!q;`)Q~8>LB;7= z-g9emR73X{usQq0ffQ;I6bPq?f*7>53M7+;>kJPUk6v4Wuh@ky+6A_RZOv^~z^EQo zInBAS0VY)#_*D#c9_(a&nc~l6kc_or1jtZo-0#TCzO8KDPzxn%0%StLQ9c>viKAEW zxK|cLOJh;6i%c-7L2U!ojGC^IOgh(gxpbs%EVSmL)k!q2$i?jN~~Jwu5FBUd*| z1Q{nS=eE)Rlw-+0w>a;EyL=lo6=dsi@fk=c7BRa#hUXs?!yXoY#GHF$*_TXQoaLE&(T8E z3wDsU(<(;zuWU5_OSB|(I-q{VG!7&ua|0d3J8uNpeferpGB5u8SjkWb;WE-7;aqFu z!iwK|(D<7llaG|Oo z3k%xZ-i>me)x!U=k?vymGpOQ|E^tLBT?>~>hMdmUw?Ee}i8Cod$;PP{%J?({;RPVVk3 zii+6hL7jL-PO2-))O4=;7xQ6cNa(Zjydn{9P)Q%xV9DIV>D`u{0_nfWX5j7tMyB=> z7=Loc$#PLkL>q5yjXwE8VT5xAFZjXscIMOIFecE%|1CTA*0^MSZ%D`Js4m@VpRZyTWO>@dhhAoy??QI{%;mv0CUog^^v+j>X|Kvc{Arpc$)*`g50ud+IJ-a z8W;{_Bx5gOu{|ltZ`PlWcatQT$gi zTK!ixgyQ4<6aHZ1g3#ibP=6wZw7oKpGslz(XamY&OQXC381#}H%~Iq@1T<{q%)T85 z+5#~4Q6c-=)g9qEQralbU`2WCY?Z&8+#@hwtIk%CzwW?~xI|R4O=J^4G~PJa-^=}1 zOyKvJ{?MiQXQ!p{_bYNP70$xZRlJ2F%U3r}a2wo-;zylZI=|P=&7NdEU%B|jqrZd@ zaYN2CVnt?WLL>*Wb)t+vNV1{x74F`+&OTz{4(^iHuoCi>vaW-XsxzRYF=!LEKuSHU3`kX=+)j$$hc)j72 zufnjIvgC9#`Ac#kjh?OgtjJE!b-puK@HZ=R9*6}R4+K2g#0PuCc5s7~wR{KTx1odx zfT*J7S|6Wy5*INOr0NUR9Ej+*I?J7N%b1PEY*8oedkk*gjpmhLs*&kswB$Va&e{pr@EriOm8uge-cHk|1w;~zwdQg*O* z`)Hg;v@)ELojp9?4R7tsOum@jG+zXqqvkYGU@0nlJ9os0wY7MYmXm8m1lomr3q@WD zhSC~_S23!TStC`5X8|DPlz&NC@NX%fm>ZX) zCaeJB{gr|>I0i1-ZdpX$oR@$yzu7e~NfoeTljfSL48X5J5e{auvfAw<1j9hZaRl^M zaAVD_&0iQ;%CD4Rl}`h^%`1t5q2q6-FAIiF-JcVW#&PG&7(qy(b3U~UF8HTc(i`{w zWzmNFs=oTwYf-rkp9II!H`}+@)=Ikh%VU^J%L;hsCQ=-j01(ZldwFl!-{sAGxbG^8 zkXbQnEBsg(sP2^jK|=;)RE-7%U`ezQgVHvNc#I}f*?3G}*e>EH^1a<2GG< zn--z1D8LSp92{onqW<5&jB`H_{O!LLmvR0tzG=>F4GX--LBJxKu_B?sLH1!G9Pd2w zhBEFhG96Q1Ri4L6V@`zH2b3|M9jnWf_!exE5`}R9V(>uLk`}AC)|(>7q*1&kWlJZp zNP7L+)DCHu$!JpUCqq^+;a-!3dSqnlJ3Lo2iuXSWqyJ}umwCu2_z_|%wwo5rSlswR zF^-LuB#}$kdTmHw$W#Zi8xSHz81owsYzNoOohb9K)b7q3s?e1wFX`Y7F}_ zIZUx?Igqp>d4MG6$H;7%xJ^pYOUR1^f#;3(Ol!JdTcyOZu2(ouk#dOzyJ@Bkb>1_F zTi$ybxZ>U0FIx9HuKz_tZMqakSYU|ETz7nSUL=%Nlg{9e<>@X;0~iTlGvZ82SpZ%` zeyDas*11^@h4z=*; zp5A-;0$}KLs&x?>7bu&k%`09rNE8Fd2z&>QxCg#c%eKImUeI>817-LZj?!8u!I%$$ zqgLdSgvu`UY@;>cH{PXc3#MCh`1$W{4BN7|x3;%JSFaQTVuS)>ga!_?A7bs|I9xrS zJY=>uzMNMZ^6Ky=gXt0Qg?YJzzrS~(eQnXu&im(+abx{c3*jTQCYMa*Ru31OIfF?m z`G!RbT>>h_9^tWqDw+E=q;;~ z`*`B7JNXtuSoAa9ns;5xn!!IuK(Iie?{4s&ij}xAtjAjaOCpZe>oyohl3N$E)i7{e zw} zp&n<;Sx8w+nngi&ZeHH0ICw;K*!pZHed477BM!a%xc85T;gSZ@21_zRo5FU3cL0?t z>R15j_4KC9yH6q8K8>bcOUH(SI(vCK``1@fs<*x#M81}DX-*hl6gUzog~M2h#ph6y z^Y~^Nuj$qLl~X5Y54YSk%t019r%~E%mISo7>0{n&vsuf=@drbny7V^pUD=!5()FvO zrJzq|@A=*hS--d<)aziiz(ASnhv_}s_-m|cq9Hvo`^F`Y-`3K~KGlXK(@^am3eo!b zpNOB$$$LG@c!_jFJDF&c@~lzo0~Z_fw=%%VCup0O-S8?@(>fcdVGgbE(xvzR`;V9qEH?gfN?#a zlz7uGLVs_(KcRX-!OGh5qAgF=&0;R`Lj)uGlqZvDD2J0&$&YaW8<%ct*Sk-7 z9=`E2I~*RjVs#i~KP1jm~z+=wx{254$U#$7L2|q)k@frxv@;dTJlc zrU0wxap#{J!vv))J@e7&OPO{yb(Di3CpOZF2DZ&FDaH z&%|zBUCGw|GzG}cLHejp$-9{%F#yy23&(yP>&KbzTkwa;r0hQmLOwdD+l4Dwgyh!) z$4*{S+WEFteAcE8()t#2EmvZ&<@0u@ssDIj$@N)VbbhT%n$g@HYki6@GadGqTmv)c zst$Y7jP{5*r_&`yet&KmV902OJwUh@+&Y%9=y`eJ{@=sa=2gjL!rjl5AR;~P@%Ez$ z98W$yxFV9JOowGEKTC~C@lb|TN^MDI%8>;qrQjn9IHQLaAg?oG;e*NdZGx8%f(i>4 zTSsbF`8Q9fz?9i=;*9%IYlWe|6&$J=Q7e%JCO(q`r*^Asz6UGAloQxUMcuw; zoc=))(Igy6^d_R(a2HQCK0nkbc0)@hRX=}lyHI$&tZ3iZnMQ+Q>$fjT8lEjdJ0EVFS02jQuuppp2N7UPXpKK@F&D4W^eq34FNv&r<-s=_}H6lJ2K394k z-lhudn(^b1Tx7S_duHSmzHC8EqvA#`JL4!*Gq>(&EhKi5YT|>>;-l{@h2Z zUJ1x0|Gp9A+rO5^7IDcogDVydrak~5V&7GPeQIJr@6FQctEkm_`q@Tq7&^ymJOR@z z9?jZDQA(1osY_77+by?Yhz*up0mBo;hmWuXWcb)dDAQY$3 z>H`@?JOM3R%0{FVf|nlfsuLa{gal%hluzdBYpwj~d>5d)ym&CQZi0EgcKDa;Zg0gU zpvL^0BbSDaFAI@0a*&1LSN9hL-gN$wde5=DZW^|Y7pQ_C_8T8WhVE=tO)|#)8@Gnt z;17~?Bw=0vTxKcXDjcI;%7SgKDn@>7c?1&9lJX7pfvjabL6cHOHeJ{OU;cRszuz#u zx3_mb1fCz^CtFVWjw6MpeE&%6^;;pXPF#;9umAj`K=|_yH76n%*o~r^8i!;u5S{Sf$` z@{>?ubUe|Re(I|d-RlC_rmDQpyuTW^(T{SN=X3TNH$KjZq z!l}8J6N?6z;5%OvpZRvJ5B&9RZdket0$ zyja!anvc$^sL670*t_OLNkTCz2+2-Xc-t*-Gi}5ck*vY9>-ouVqEQB z&2jdr@!NumMw+C1P_N+{K3dVag}hY^D%P#3(?x(j>zl7bSF zyxj^{1B0w4L4K2}%C_#LuG(q*kY{ZNKRA-K)jY3Smn_h6VPVNj#*~9& zf-@(|Z9EWu0nUJ|>t)Q=%QL4yY|mC`N;|u=$hK2&#a;uT-6GzN^$bF^XMftPb9cY*FOY`ZN!@0%CR?bv7#Q8N=zA0!=zwAT z0oQE4asKE!#$$)hjxaB1ldrqTB0mCF{1o$hTXjGpNDpg()j+^gCD*`N%LwhO;X#;# zEcZYkgc3=@4ZQJDFgKFvzDK6oJrh&^xW1&a!6r`!$mcMARr_K!ZfK}hP=0r7hC<(i zj^|Ln?Re`7*6N4&AX01BBx8lVtT#R?6x3H2J)g%1tM6=wZtpNrZ4%R@l+Ka1l+6Pn zZ6TCuNZ8{E*4<{P{N5$Tk))%*BG=sH9UyX&=F3Ve>gFl@(f)*1up5t_60;2)AG4Wk z-*iy`qWd2@V>NSzNn+NNU^4o->8HTQ8+SCLzknH~$-V*hDLmb2{p=JVnIQyC1S;P$ z4BI@`8v@UOyyzP+nLW$6G}JwjQ>!(eZmIr|-xA*SrdC^*D1`r5ukZ;qPbjsT6l})b z*A*5|zr@i+2$rgmJeG}OtM_z+BMjn{);D1P9Poo(^y ztckEB;UQZrJHp22(YQr1!6ReEhCcLW+l06!IMIcWdNEe zJE^_B6G!XuPqk*rzGUQk<_B4bTKis&yGoys>`nN)OhHq5w_m0hnPHbHrmY}`rM6mH zsv7SDsaSSpL%aA#SgI#b9Vs@~<^|Ack!MqQ?3;)B*lbz5p9ZG#B^WaN`K0;utVqE4 zBGvc=E~3UP8znr4~iKyD1pem!{sh??YoAaD4@Z0QmWTQsf)3uR*QD$tOn zVV=|>r2ncdBPmh5;FdiOK3+9Zl@wVOXqH-Cy)}Wnd_W@M%_tE`4c3Ume_oduYwoTE ze2@RP_NMuz=krsL9h4Qs@fq^IkIWY*+?P3?`~(TB$X!D04E*dX^VEhZCgD9&Vi5MK zr`!uA?GE6xs|{;8i}LEUb-lRpT2A*3@oH5d>*_Kn_bIadEs*ES5zR|*CF|FZd<(}( z5KGoYc738tl>YT<_5~pDDgGggm2L^aabs&ZGk|1d+R)Q+>ARKBh_eW!R=M#su{+IM zr8vPXSmrQqT;}hAHJ`sukn3j+J^csHAI-TxtATV@+dIihcqye%a{w zIUpxF-s9s4U~AEn``M=Fh21fyw+wB5PTdu=I27>bpC;I237lOxK1Pj}qgPE@Q8qx{Mzqr2V@?}CvK86 zQ<`=N+ks}H$^3{X?VE1;=r^Sfvso8h?WzIVt-Qb58cXJ%P3^^Hp2{rhrWjXIpecgWLfeMg<|fd>COv=|+QGY< zUo*kxj$U+i2L~kx+3Yqwv!Yd)f%!zmSeC61`V2xU)Kk0WX5#3haa<`6Wg*=kZg7g) zt4bt%>bp@~2abH#nk6M7qX(rKySWIr?n=XJW0t=V?9$?o375N6x`@#?T#viGB8snD z3IoV9d>35&qoofTFb)XC>762nmbhWRjqu7_rZU_4xea_*L43ZACWmx$d2Yq;L)p!c zs`_>@a7LOc#n^igBIlRf6l~<=WVOBV7a+y*MA-Y4a~ zNlaBt?k$h+mfVi@k1018t9r=m@TnV{Ch=lO1D}}k4oHpKJ%BDHkA=$~pmf(1!HYIb z=k2Z>-JDwGfn0SJ3u>u(#JZ+|j`_<{yh4&x(O)x^;w9#;{4{O6X@al+iCDrZd1*<& z7AJmCI%I!UcIT1`s*kwYLik#R-LJ+i;kWr@+%@sroxgjqb$mx9g5-~N-VQ(tc;+T8 z)~`vThQbS#$pg5Sq|=|TOplQ3QT?7n(gf>-FSsz?kw3AwuSaRo$G$ z4u_rguRD+tY}i&&k7$O9=hZk;NSJCj=t|`GC%2^`Ce+eV7?(T(2xLY4{p>b(9DM=G zdMe?wHp!aZo<3nVo6+A@!9H1fjK$v~H|LM33=BTV&-0+G&+8~b2xhlwm;@~Xf>W}_ z1y0!-o6Y_pPC0Y}fcC!tXm_X9uf_;0H(=_*3nP#!q@ZRf7SUD5dQE9NJ-Nc*MoU%E z$NRmkyeGRs^)I(yQHq$@#jfDtw-U;v1w@)XJihf{xMSO+V4wB=mK$pc+tuU6yi-i0 z1}noH`sp`D6Tx9$qV_4vkIfRas^x)g;d;D}1BN{>k@)!@!dL}i=4YQpT+OqP;x~$n zd>k=#%qiCaIdwNp9WNI;c_F(iY~P7=Ydsu-s&NnZwERquZOo0s=VkJ>#{yyGe6pd} z=;OxnCgotTq?Sg|EiiEzvq>5>%~!6$6N`nh_e|Hr2S20AN-0v&Z<<cmQL;II&;&1%`fm*A-G=6FiF=2?DR`{d%SKP(5V7b@PJul_pqekKf5-=TCR zuMT;@_fg7<<{e;amgVv<|5) zGH9Q`Q)UTL-uYfz66o&}>@tPvr4Sup$%V>^z>G1MU2b>@)!8@k`8s~St}ro|(SoXx z4^9J&=@JmVzj~4?1Pm=RL~HR-3H&XPnBaDGjE!}@oHE~gYGh){zd1Yy9z6ZkqHbF$ z{S3QGz6>b;dO4Rt{>w^{AI=}Xu)EDT>L!O@q-$H{<;NMVIAYW*Eixv~ng9ismNP$` zEr8q&SV8>{t!;m=$=RP&w@0&MWgwOR(huDo1^WL4?Kz?JLDm<7EyqK(i~EgmQKsDn z!0taB_6tJ)w+#EAH46UERyf%`hX0?XZ{|2G_ qpCJA_J-Gj85&vvq{&&d4l$>tZIfmN!m + + + + + + + + + + +Kyle Belanger - Reflex Testing using Machine Learning in the Clinical Laboratory + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ +
+
+
+

Reflex Testing using Machine Learning in the Clinical Laboratory

+

This post contains the abstract of my Capstone for the Doctorate of Health Science program at Campbell University.

+
+
+ + +
+ +
+
Author
+ +
+ +
+
Published
+
+

October 12, 2023

+
+
+ + +
+ + +
+ + +
+ + + +
+ + + + +
+

Full Paper

+

To view the full paper please go to the following link

+
+
+

Abstract

+

Introduction: This research study focuses on developing and testing a machine learning algorithm to predict the FT4 result or diagnose hyper or hypothyroidism in clinical chemistry. The goal is to bridge the gap between hard-coded reflex testing and fully manual reflective testing using machine learning algorithms. The significance of this study lies in the increasing healthcare costs, where laboratory services contribute significantly to medical decisions and budgets. By implementing automated reflex testing with machine learning algorithms, unnecessary laboratory tests can be reduced, resulting in cost savings and improved efficiency in the healthcare system.

+

Methods: The study was performed using the Medical Information Mart for Intensive Care (MIMIC) database for data collection. The database consists of de-identified health-related data from critical care units. Eighteen variables, including patient demographics and lab values, were selected for the study. The data set was filtered based on specific criteria, and an outcome variable was created to determine if the Free T4 value was diagnostic. The data handling and modeling were performed using R and R Studio. Regression and classification models were screened using a random grid search to tune hyperparameters, and random forest models were selected as the final models based on their performance. The selected hyperparameters for both regression and classification models are specified.

+

Results: The study analyzed a dataset of 11,340 observations, randomly splitting it into a training set (9071 observations) and a testing set (2269 observations) based on the Free T4 laboratory diagnostic value stratification. Classification algorithms were used to predict whether Free T4 would be diagnostic, achieving an accuracy of 0.796 and an AUC of 0.918. The model had a sensitivity of 0.632 and a specificity of 0.892. The importance of individual analytes was assessed, with TSH being the most influential variable. The study also evaluated the predictability of Free T4 results using regression, achieving a Root Mean Square Error (RMSE) of 0.334. The predicted results had an accuracy of 0.790, similar to the classification model.

+

Discussion: The study found that the diagnostic value of Free T4 can be accurately predicted 80% of the time using machine learning algorithms. However, the model had limitations in terms of sensitivity, with a false negative rate of 16% for elevated TSH results and 20% for decreased TSH results. The model achieved a specificity of 89% but did not meet the threshold for clinical deployment. The importance of individual analytes was explored, revealing unexpected correlations between TSH and hematology results, which could be valuable for future algorithms. Real-world applications could use predictive models in clinical decision-making systems to determine the need for Free T4 lab tests based on predictions and patient signs and symptoms. However, implementing such algorithms in existing laboratory information systems poses challenges.

+ + +
+ +

Reuse

Citation

BibTeX citation:
@online{belanger2023,
+  author = {Belanger, Kyle},
+  title = {Reflex {Testing} Using {Machine} {Learning} in the {Clinical}
+    {Laboratory}},
+  date = {2023-10-12},
+  langid = {en}
+}
+
For attribution, please cite this work as:
+Belanger, Kyle. 2023. “Reflex Testing Using Machine Learning in +the Clinical Laboratory.” October 12, 2023. +
+ +
+ + + + \ No newline at end of file diff --git a/_site/search.json b/_site/search.json index aecdb0f..77f3142 100644 --- a/_site/search.json +++ b/_site/search.json @@ -1,157 +1,17 @@ [ { - "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html", - "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html", - "title": "Converting From Blogdown to Distill", + "objectID": "posts/2023-10-12_DHSC_Capstone/index.html", + "href": "posts/2023-10-12_DHSC_Capstone/index.html", + "title": "Reflex Testing using Machine Learning in the Clinical Laboratory", "section": "", - "text": "I have since converted this blog to a quarto blog, but am leaving this post up in case anyone finds it useful" + "text": "Full Paper\nTo view the full paper please go to the following link\n\n\nAbstract\nIntroduction: This research study focuses on developing and testing a machine learning algorithm to predict the FT4 result or diagnose hyper or hypothyroidism in clinical chemistry. The goal is to bridge the gap between hard-coded reflex testing and fully manual reflective testing using machine learning algorithms. The significance of this study lies in the increasing healthcare costs, where laboratory services contribute significantly to medical decisions and budgets. By implementing automated reflex testing with machine learning algorithms, unnecessary laboratory tests can be reduced, resulting in cost savings and improved efficiency in the healthcare system.\nMethods: The study was performed using the Medical Information Mart for Intensive Care (MIMIC) database for data collection. The database consists of de-identified health-related data from critical care units. Eighteen variables, including patient demographics and lab values, were selected for the study. The data set was filtered based on specific criteria, and an outcome variable was created to determine if the Free T4 value was diagnostic. The data handling and modeling were performed using R and R Studio. Regression and classification models were screened using a random grid search to tune hyperparameters, and random forest models were selected as the final models based on their performance. The selected hyperparameters for both regression and classification models are specified.\nResults: The study analyzed a dataset of 11,340 observations, randomly splitting it into a training set (9071 observations) and a testing set (2269 observations) based on the Free T4 laboratory diagnostic value stratification. Classification algorithms were used to predict whether Free T4 would be diagnostic, achieving an accuracy of 0.796 and an AUC of 0.918. The model had a sensitivity of 0.632 and a specificity of 0.892. The importance of individual analytes was assessed, with TSH being the most influential variable. The study also evaluated the predictability of Free T4 results using regression, achieving a Root Mean Square Error (RMSE) of 0.334. The predicted results had an accuracy of 0.790, similar to the classification model.\nDiscussion: The study found that the diagnostic value of Free T4 can be accurately predicted 80% of the time using machine learning algorithms. However, the model had limitations in terms of sensitivity, with a false negative rate of 16% for elevated TSH results and 20% for decreased TSH results. The model achieved a specificity of 89% but did not meet the threshold for clinical deployment. The importance of individual analytes was explored, revealing unexpected correlations between TSH and hematology results, which could be valuable for future algorithms. Real-world applications could use predictive models in clinical decision-making systems to determine the need for Free T4 lab tests based on predictions and patient signs and symptoms. However, implementing such algorithms in existing laboratory information systems poses challenges.\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2023,\n author = {Belanger, Kyle},\n title = {Reflex {Testing} Using {Machine} {Learning} in the {Clinical}\n {Laboratory}},\n date = {2023-10-12},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2023. “Reflex Testing Using Machine Learning in\nthe Clinical Laboratory.” October 12, 2023." }, { - "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#code-folding", - "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#code-folding", - "title": "Converting From Blogdown to Distill", - "section": "Code Folding", - "text": "Code Folding\nWhen I converted my blog on 12/30/2020, code folding was not included as an option by default in distill. At that time, an excellent package called Codefolder added the functionality. Since going live with the blog, code folding has been added to distill.1 Code folding is available for either the whole document or individual code sections. The default caption is “Show Code”, but instead of typing code_folding=TRUE, you can provide a string to change the caption.\n\n# Some awesome code \n# That does awesome things" - }, - { - "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#customizing-the-home-page", - "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#customizing-the-home-page", - "title": "Converting From Blogdown to Distill", - "section": "Customizing the Home Page", - "text": "Customizing the Home Page\nBy default, a distill blog’s home page will be the blog index page. I chose to edit my home page to be a landing page for myself and then have the blog index as a separate page. When creating a new blog, this is the default YAML header for your index page.\n---\ntitle: \"New Site\"\nsite: distill::distill_website\nlisting: posts\n---\nThe critical piece here is the line site: distill::distill_website. This line is what is needed to render the website. For my home page, I decided to use the package Postcard, which is used to generate simple landing pages. I won’t go into every step as there is already a great post by Alison Hill on how to do that. However, I will point out the most crucial part of the new index page the YAML header needs to contain these two lines.\noutput:\n postcards::trestles\nsite: distill::distill_website" - }, - { - "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#footnotes", - "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#footnotes", - "title": "Converting From Blogdown to Distill", - "section": "Footnotes", - "text": "Footnotes\n\n\nNote that as of publishing, code folding is only available in the development version of distill↩︎" - }, - { - "objectID": "posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends.html", - "href": "posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends.html", - "title": "Diabetes in Rural North Carolina : Exploring Prevalence Trends", + "objectID": "posts/2021-02-26_tidytuesday-hbcu-enrollment/tidytuesday-2021-week-6-hbcu-enrolment.html", + "href": "posts/2021-02-26_tidytuesday-hbcu-enrollment/tidytuesday-2021-week-6-hbcu-enrolment.html", + "title": "TidyTuesday 2021 Week 6: HBCU Enrollment", "section": "", - "text": "Update\n2022-15-03: Since this was posted the CDC has updated how county level diabetes prevalance is calculated. The data presented here is using previous calcualtions and may no longer be correct. More can be read here\n\n\nAbstract\nDiabetes is growing at an epidemic rate in the United States. In North Carolina alone, diabetes and prediabetes cost an estimated $10.9 billion each year (American Diabetes Asssociation, 2015). This post introduces the exploration of the Diabetes epidemic in North Carolina. Through a series of posts this project will examine various public data available on diabetes and explore possible solutions to address the rise of diabetes in North Carolina. This investigation stems from the Capstone project of my Health Care Informatics Masters program. This post will answer the following questions:\n\n\nWhat is the overall trend of diabetes prevalence in the United States?\n\n\n\n\nWhat is the trend of diabetes at a State Level and how does diabetes prevalence vary by state and region?\n\n\n\n\nHow do trends in diabetes prevalence vary across counties of North Carolina?\n\n\n\n\nIn which counties of North Carolina does the largest change in diabetes prevalence occur?\n\n\n\n\nHow does change in diabetes prevalence compare between rural and urban counties?\n\n\n\n\nEnviroment\nThis section contains technical information for deeper analysis and reproduction. Casual readers are invited to skip it.\nPackages used in this report.\n\n\nCode\n# Attach these packages so their functions don't need to be qualified: http://r-pkgs.had.co.nz/namespace.html#search-path\nlibrary(magrittr) # enables piping : %>%\nlibrary(dplyr) # data wrangling\nlibrary(ggplot2) # graphs\nlibrary(tidyr) # data tidying\nlibrary(maps)\nlibrary(mapdata)\nlibrary(sf)\nlibrary(readr)\n\n\nDefinitions of global object (file paths, factor levels, object groups ) used throughout the report.\n\n\nCode\n#set ggplot theme\nggplot2::theme_set(theme_bw())\n\n\n\n\nData\nThe data for this exploration comes from several sources:\n\nThe Diabetes data set for state and county levels were sourced from the US Diabetes Surveillance System; Division of Diabetes Translation - Centers for Disease Control and Prevention. The data was downloaded one year per file, and compiled into a single data set for analysis.\nThe Diabetes data set for National level data were sourced from the CDC’s National Health Interview Survey (NHIS)\nThe list of rural counties was taken from The Office of Rural Health Policy, the list is available here\n\n\n\n\nCode\n# load the data, and have all column names in lowercase\n\nnc_diabetes_data_raw <- read_csv(\"https://raw.githubusercontent.com/mmmmtoasty19/nc-diabetes-epidemic-2020/62bdaa6971fbdff09214de7c013d40122abbe40d/data-public/derived/nc-diabetes-data.csv\") %>% \n rename_all(tolower)\n\nus_diabetes_data_raw <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/62bdaa6971fbdff09214de7c013d40122abbe40d/data-public/raw/us_diabetes_totals.csv\"\n ,skip = 2)\n\nrural_counties <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/rural-counties.csv\")\n\ncounty_centers_raw <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/raw/nc_county_centers.csv\", col_names = c(\"county\", \"lat\",\"long\"))\n\ndiabetes_atlas_data_raw <- read_csv(\"https://raw.githubusercontent.com/mmmmtoasty19/nc-diabetes-epidemic-2020/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/raw/DiabetesAtlasData.csv\"\n ,col_types = cols(LowerLimit = col_skip(), \n UpperLimit = col_skip(),\n Percentage = col_double()), skip = 2)\n\n\n\n\n\nCode\n# load in both US State Map and NC County Map\n\nnc_counties_map_raw <- st_as_sf(map(\"county\",region = \"north carolina\", plot = FALSE,fill = TRUE)) %>% \n mutate_at(\"ID\", ~stringr::str_remove(.,\"north carolina,\"))\n\nstate_map_raw <- st_as_sf(map(\"state\",plot = FALSE,fill = TRUE ))\n\nnc_cities <- st_as_sf(read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/nc_cities.csv\"),\n coords = c(\"long\", \"lat\")\n ,remove = FALSE\n ,agr = \"constant\"\n ,crs = 4326)\n\n\n\n\nData Manipulation\nThe combined data used in this anaylsis can be downloaded here. The only tweaks done here are to combine the rural counties column, and the data for creating maps.\n\nTweaks\n\n\n\nCode\ncounty_centers <- county_centers_raw %>% \n mutate_all(~stringr::str_replace_all(.,\n c(\"\\\\°\" = \"\"\n ,\"\\\\+\" = \"\"\n ,\"\\\\–\" = \"-\"\n )\n ) \n ) %>%\n mutate(across(c(\"lat\",\"long\"), ~iconv(.,from = 'UTF-8', to = 'ASCII//TRANSLIT'))\n ,across(c(\"lat\",\"long\"),~stringr::str_remove_all(.,\"\\\\?\"))) %>% \n mutate_at(c(\"lat\",\"long\"),as.numeric) %>%\n mutate(across(\"long\", ~(. * -1))) %>% \n mutate_at(\"county\", tolower)\n\n\n\n\nus_diabetes_data <- us_diabetes_data_raw %>% \n filter(Year >= 2000) %>% \n select( \"Year\",\"Total - Percentage\") %>% \n rename(year = Year , us_pct = `Total - Percentage`)\n\ndiabetes_atlas_data <- diabetes_atlas_data_raw %>% \n mutate_at(\"State\", tolower) %>% \n filter(Year >= 2000)\n\nstate_map_abb <- state_map_raw %>% \n left_join(read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/state-abb.csv\") %>% \n mutate_at(\"state\", tolower)\n ,by = c(\"ID\" = \"state\") )\n\n\n\n\nMerge\n\n\n\nCode\n#join US totals to NC data \n\nnc_diabetes_data <- nc_diabetes_data_raw %>% \n mutate_at(\"county\", ~stringr::str_replace_all(.,\"Mcdowell\",\"McDowell\")) %>% \n mutate(\n rural = county %in% rural_counties$rural_counties\n ) %>% \n mutate_at(\"county\",tolower) %>% \n left_join(us_diabetes_data)\n\n\nnc_counties_map <- nc_counties_map_raw %>% \n left_join(nc_diabetes_data, by = c(\"ID\" = \"county\")) %>% \n left_join(county_centers, by = c(\"ID\" = \"county\")) %>% \n rename(\n center_long = long\n ,center_lat = lat)\n\nstate_map <- state_map_abb %>% \n left_join(diabetes_atlas_data, by = c(\"ID\" = \"State\")) %>% \n rename_all(tolower)\n\n\n\n\n\nOverall - National Level\n\n\nCode\nus_diabetes_data <- us_diabetes_data %>% \n mutate(\n change = lead(us_pct) - us_pct\n ,change = if_else(change > 0, TRUE, FALSE)\n ) %>% \n mutate_at(\"change\", ~stringr::str_replace_na(.,\"NA\"))\n\n\n\no_g1 <- us_diabetes_data %>% \n ggplot(aes(x = year, y = us_pct)) +\n geom_line(color= \"#D95F02\") +\n # geom_line(aes(color = change, group = 1)) +\n geom_point(shape = 21, size = 3,color= \"#D95F02\") +\n # geom_point(aes(color = change),shape = 21, size = 3) +\n scale_color_manual(values = c(\n \"TRUE\" = \"#D95F02\"\n ,\"FALSE\" = \"#7570B3\"\n ), guide = FALSE) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+), National Level\"\n ,x = NULL\n ,y = NULL\n ,caption = \"Note: Data from the CDC's National Health Interview Survey (NHIS)\"\n )\n\no_g1\n\n\n\n\n\nOverall, the national average for diagnosed diabetes sharply rose through the early 2000’s, leveling off around 2010. These numbers however, are estimates based on the self-reported response to the CDC’s National Health Interview Survey, and do not represent the actual confirmed diagnoses. The CDC estimates that 1 in 5 adults have undiagnosed diabetes, therefore the numbers reported by the NHIS are likely to underestimate the true prevalence (Centers for Disease Control and Prevention, 2020).\n\n\nOverall - State Level\nState and County level data on diabetes prevalence are taken from the CDC’s Behavioral Risk Factor Surveillance System (BRFSS). These results are based on the question “Has a doctor, nurse, or other health professional ever told you that you have diabetes?”. Women who only experienced diabetes during pregnancy were excluded from the counts. The BRFSS is an ongoing, monthly telephone survey of the non-institutionalized adults (aged 18 years or older) in each state. The year 2011 saw a major change to the methodology of the survey, which started to include homes without a landline phone. This change was expected to increase coverage of lower income, lower educational levels, and younger age groups, because these groups often exclusively rely on cellular telephones for personal communication.(Pierannunzi et al., 2012)\n\n\nCode\ns_g1 <- state_map %>% \n st_drop_geometry() %>% \n ggplot(aes(x = year, y = percentage, color = region)) +\n geom_line(aes(group = id ),alpha = 0.3,na.rm = TRUE) +\n geom_smooth(method = \"lm\", se = FALSE) +\n ggpmisc::stat_poly_eq(formula = y ~ + x ,\n aes(label = paste(..eq.label.., ..rr.label.., sep = \"~~~\")), \n parse = TRUE) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_color_brewer(palette = \"Dark2\"\n ,direction = -1\n ,labels = snakecase::to_title_case\n ) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+) \\nby State and Region\"\n ,x = NULL\n ,y = NULL\n ,color = \"Region\"\n ,caption = \"Regions from US Census Bureau\"\n ) \n\ns_g1\n\n\n\n\n\nThe above graph shows diabetes prevalence trends by state, grouped into regions based on the US Census classification regions. While all regions of the United states show positive growth in diabetes prevalence, the south exhibits a slightly higher growth rate, as well as the highest prevalence.\n\n\nCode\ns_g2 <- state_map %>% \n st_drop_geometry() %>% \n filter(region == \"south\") %>% \n mutate_at(\"id\", ~snakecase::to_title_case(.)) %>% \n ggplot(aes(x = year, y = percentage)) +\n geom_line(aes(group = id ),na.rm = TRUE, color= \"#D95F02\") +\n gghighlight::gghighlight(id == \"North Carolina\", label_params = list(vjust = 3)) +\n scale_y_continuous(breaks = seq(5,13,2)) +\n scale_x_continuous(minor_breaks = seq(2000,2016,1)) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+) \\nSouth Region\"\n ,x = NULL\n ,y = NULL\n ,caption = \"Regions from US Census Bureau\"\n ) +\n theme()\n\ns_g2\n\n\n\n\n\nWhen focusing on the south region, North Carolina falls close to the middle of diabetes prevalence.\n\n\nOverall - North Carolina\nWhen examining the trajectory for North Carolina, we can see that it has been consistently higher than national average . We see that in 2016 there was a large spike in diagnosed cases; unfortunately this is the last available year so it is unclear whether the upward trend continues. The graph below compares state-level average to the national average. Notice that the trend line is slightly higher than in the previous graphs: this is due to the age cut offs used for National and State level data vs County Level data. Previous data used 18 years of age as a cutoff for classifying adults, whereas the county level data uses 20. Due to removing 18- and 19-year-olds from the population, who typically have less diagnosed cases of diabetes than those of older ages, the computed prevalence increases slightly.\n\n\nCode\nd1 <- nc_diabetes_data %>% \n group_by(year) %>% \n summarise(\n pct = mean(percentage)\n ,us_pct = mean(us_pct)\n ) %>% \n pivot_longer(\n cols = c(\"pct\", \"us_pct\")\n ,names_to = \"metric\"\n ,values_to = \"values\"\n ) %>% \n mutate(\n metric = factor(metric\n ,levels = c(\"pct\",\"us_pct\")\n ,labels = c(\"NC\", \"National\"))\n )\n\nnc_g1 <- d1 %>% \n ggplot(aes(x = year, y = values, color = metric)) +\n geom_line() +\n geom_point(shape = 21, size = 3) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_y_continuous(labels = function(x) paste0(x, \"%\")) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n ,title = \"Percent of Adults (20+) with Diagnosed Diabetes\"\n )\n\nnc_g1 \n\n\n\n\n\nWe see a spike in 2016, the last year for which the data are available. However, we should be careful with our interpretation of this pattern, because the examination of the county-level trajectories reveals an aberration in the trend that requires a more rigorous investigation.\n\n\nCode\nnc_g1a <- nc_diabetes_data %>% \n ggplot(aes(x = year, y = percentage)) +\n geom_line(aes(group = county),alpha = 0.4) +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n )\n\nnc_g1a\n\n\n\n\n\nWhile all of North Carolina has a higher prevalence than the national average, rural counties have systematically higher prevalence of diabetes than urban counties. Note that after 2011 both Urban and Rural counties break the upward trend exhibited in the previous 5 years. This could be explained by the addition of cell phones to the BRFS Survey as many rural areas are often lower income areas and may only rely on a cell phone for communication. As mentioned previously there is an odd spike in case in 2016 that can’t be explained by current documentation. For the purpose of this evaluation 2016 will be excluded from the county level data since the odd trend can not be explained and no further data is available to determine if this is a real spike or could be attributed to methodology change or data quality.\n\n\nCode\nd2 <- nc_diabetes_data %>% \n select(-us_pct) %>% \n mutate(\n pct_rural = if_else(rural == TRUE, percentage, FALSE)\n ,pct_urban = if_else(rural == FALSE, percentage, FALSE)\n ) %>% \n select(-countyfips,-percentage) %>% \n group_by(year) %>% \n summarise(\n pct_rural = mean(pct_rural,na.rm = TRUE)\n ,pct_urban = mean(pct_urban,na.rm = TRUE)\n ) %>% left_join(us_diabetes_data) %>% \n pivot_longer(\n cols = c(\"us_pct\", \"pct_rural\",\"pct_urban\")\n ,names_to = \"metric\"\n ,values_to = \"value\"\n ,values_drop_na = TRUE\n ) %>% \n mutate(\n metric = factor(metric,\n levels = c(\"pct_rural\",\"pct_urban\",\"us_pct\")\n ,labels = c(\"Rural\",\"Urban\",\"US\")\n )\n )\n\nnc_g2 <- d2 %>% ggplot(aes(x = year, y = value, color = metric)) +\n geom_line() +\n geom_point(shape = 21, size = 3) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_y_continuous(labels = function(x) paste0(x, \"%\")) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n ,title = \"Percent of Adults (20+) with Diagnosed Diabetes \\nDisplaying Rural vs Urban\"\n )\n\nnc_g2\n\n\n\n\n\n\n\nBy County - Geographical\nCounty level data first became available in 2004, three years of data is used to arrive at these estimates. For example, the 2006 estimates were computed using the data from 2005, 2006, and 2007 BRFS survey rounds. The county-level estimates were based on indirect model-dependent estimates using Bayesian multilevel modeling techniques(JNK, 2003 ; Barker et al., 2013). This model-dependent approach employs a statistical model that “borrows strength” in making an estimate for one county from BRFSS data collected in other counties and states. Multilevel Binomial regression models with random effects of demographic variables (age 20-44, 45-64, >=65; race/ethnicity; sex) at the county-level were developed. Estimates were adjusted for age to the 2000 US standard population using age groups of 20-44, 45-64, and 65 or older(Klein & Schoenborn, 2001).\n\n\nCode\ng50 <- nc_diabetes_data %>% \n filter(year < 2015) %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )\n ) %>% \n ggplot(aes(x = year, y = percentage, color = rural)) +\n geom_line(aes(group = county),alpha = 0.3) +\n geom_smooth(aes(group = rural), method = \"loess\", se= FALSE, size = 1.1) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n title = \"Percent of Adults (20+) with Diagnosed Diabetes \\nAll North Carolina Counties\"\n ,x = NULL\n ,y = NULL\n ,color = NULL\n )\n\ng50\n\n\n\n\n\nWhen viewing all county trend lines together, we see that the loess line for both urban and rural follows a similar trend for the time period.\nThe following graphs displays the total estimated prevalence of Diabetes in each off the 100 North Carolina counties. To keep the scaling consistent between the graphs, we binned the estimates into 6 intervals of the same size. Rural counties are highlighted with a stronger border line as well as a letter “R” in respective geographic centers. These graphs allow us to view geographical clusters of diabetes prevalence.\n\n\nCode\nnc_counties_map_binned <- nc_counties_map %>% \n filter(year < 2015) %>% \n mutate(\n bin = dlookr::binning(.$percentage, nbins = 6 ,type = \"equal\")\n ,bin = forcats::fct_recode(bin\n ,\"6.5 - 7.9\" = \"[6.5,7.97]\"\n ,\"8.0 - 9.4\" = \"(7.97,9.43]\" \n ,\"9.5 - 10.9\" = \"(9.43,10.9]\" \n ,\"11.0 - 12.4\" = \"(10.9,12.4]\"\n ,\"12.5 - 13.8\" = \"(12.4,13.8]\" \n ,\"13.9 - 15.3\" = \"(13.8,15.3]\"\n )\n )\n\nc_g1 <- nc_counties_map_binned %>% \n filter(year %in% c(2006,2014)) %>% \n ggplot() +\n geom_sf() + #blank geom_sf keeps gridlines from overlapping map\n geom_sf(aes(fill = bin,color = rural)) +\n geom_sf(data = nc_cities) +\n ggrepel::geom_text_repel(data = nc_cities, \n aes(x = long, y = lat, label = city)\n ,nudge_y = c(-1,1,1,-1,1)\n ,nudge_x = c(0,0,0,-1,0)\n ) +\n geom_text(data = . %>% filter(rural == TRUE)\n ,aes(x = center_long, y = center_lat)\n ,label = \"R\"\n ,color = \"#696969\"\n ) +\n coord_sf(xlim = c(-84.5,-75.5), ylim = c(33.75,37)) +\n facet_wrap(~year) +\n scale_fill_viridis_d(alpha = 0.6, direction = -1) +\n scale_color_manual(\n values = c(\n \"FALSE\" = \"gray\"\n ,\"TRUE\" = \"black\"\n ),guide = 'none') +\n labs(\n title = \"Estimated Diabetes in Adults (20+) by County\"\n ,fill = \"Percentage\"\n ,y = NULL\n ,x = NULL\n ) +\n theme(\n panel.background = element_rect(fill = \"aliceblue\")\n ,panel.grid.major = element_line(color = \"#D4D4D4\", linetype = \"dashed\", \n size = 0.5)\n ,legend.position = \"bottom\"\n ,plot.title = element_text(hjust = 0.5)\n )\n\nc_g1\n\n\n\n\n\nThe following box plot displays the distribution of estimated cases by county from 2006 to 2014. For all years of current data the mean of rural counties is higher then that of their Urban counterparts.\n\n\nCode\nc_g1c <- nc_counties_map %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )) %>% \n filter(year < 2015) %>%\n ggplot(aes(x = year, y = percentage, group = interaction(year,rural), fill = rural)) +\n geom_boxplot(alpha = 0.5) +\n scale_fill_brewer(palette = \"Dark2\") +\n scale_x_continuous(breaks = seq(2004,2014,2)) +\n labs(\n x = NULL\n ,y = NULL\n ,fill = NULL\n ,title = \"Distribution of Estimated Cases by County 2006 - 2014\"\n )\n\nc_g1c\n\n\n\n\n\n\n\nBy County - Percent Change\nThe following graphs display the overall change in estimated prevalence between 2006 to 2014.\n\n\nCode\nd3 <- nc_counties_map %>% \n st_drop_geometry() %>% \n filter(year %in% c(2006,2014)) %>% \n select(-countyfips,-us_pct) %>% \n pivot_wider(names_from = \"year\"\n ,values_from = \"percentage\") %>% \n mutate(\n pct_p = `2014` - `2006`\n ,pct_c = ((`2014` - `2006`)/`2006`) * 100\n ) %>% \n left_join(nc_counties_map_raw) %>% \n st_as_sf()\n\n\nc_g4 <- d3 %>% \n ggplot() +\n geom_sf() + #blank geom_sf keeps gridlines from overlapping map\n geom_sf(aes(fill = pct_c ,color = rural)) +\n geom_sf(data = nc_cities) +\n ggrepel::geom_text_repel(data = nc_cities, \n aes(x = long, y = lat, label = city)\n ,nudge_y = c(-1,1,1,-1,1)\n ,nudge_x = c(0,0,0,-1,0)\n ) +\n geom_text(data = . %>% filter(rural == TRUE)\n ,aes(x = center_long, y = center_lat)\n ,label = \"R\"\n ,color = \"#696969\"\n ) +\n # scale_fill_viridis_c(alpha = 0.6, direction = -1) +\n scale_fill_gradient2(\n low = \"#d01c8b\"\n ,mid = \"#f7f7f7\"\n ,high = \"#4dac26\"\n ,midpoint = 0\n ) +\n scale_color_manual(\n values = c(\n \"FALSE\" = \"gray\"\n ,\"TRUE\" = \"black\"\n ),guide = 'none') +\n labs(\n title = \"Percentage Change of Diagnosed Diabetes 2006-2014\"\n ,fill = \"Percentage\"\n ,y = NULL\n ,x = NULL\n ) +\n theme(\n panel.background = element_rect(fill = \"aliceblue\")\n ,panel.grid.major = element_line(color = \"#D4D4D4\", linetype = \"dashed\", \n size = 0.5)\n )\n\nc_g4\n\n\n\n\n\nThe following chart displays the density curve of the percentage change for both rural and urban counties. It is notable that the mean of change for Urban counties is actually higher than the mean for rural counties. However, we also see that most change for both regions is positive growth. In fact only 16 rural, and 10 Urban counties experienced negative change in the given time frame. While 35 rural and 34 urban counties experience growth in the same period.\n\n\nCode\nd4 <- d3 %>% \n st_drop_geometry() %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )\n )\n\n\nmean_d4 <- d4 %>% \n group_by(rural) %>% \n summarise(.groups = \"keep\"\n ,pct_c = mean(pct_c)\n )\n\ng51 <- d4 %>% \n ggplot(aes(x = pct_c, fill = rural, y = ..density.., color = rural)) +\n geom_histogram(binwidth = 5, position = \"identity\", alpha = 0.3) +\n geom_density(alpha = 0.5) +\n facet_wrap(~rural, ncol = 1) +\n geom_vline(aes(xintercept = pct_c), data = mean_d4) +\n geom_text(aes(x = pct_c, y = 0.038, label = round(pct_c, 2))\n ,data = mean_d4\n ,hjust = -0.15\n ,size = 5\n ,color = \"#000000\") +\n geom_vline(xintercept = 0, linetype = \"dashed\", color = \"#696969\") +\n scale_color_brewer(palette = \"Dark2\", guide = NULL) +\n scale_fill_brewer(palette = \"Dark2\", guide = NULL) +\n labs(\n x = \"Percentage Change\"\n ,y = \"Density\"\n ,fill = NULL\n )\ng51\n\n\n\n\n\n\n\nConclusion and Next Steps\nThe original hypothesis of this report was that rural counties were growing at a higher rate then there urban counterparts. Through out this post it has been shown that this hypothesis is incorrect, just being a rural county does not indicate diabetes growth, in fact the growth rate throughout North Carolina has been consistent. Further posts will explore other reasons for these trends, as the current post merely explores the trends and differences using data visualizations, a more rigorous and formal evaluation of these comparison is in order.\n\n\nSession information\n===========================================================================\nFor the sake of documentation and reproducibility, the current report was rendered in the following environment. Click the line below to expand.\n\n\nEnvironment \n\n\n\nCode\nif( requireNamespace(\"devtools\", quietly = TRUE) ) {\n devtools::session_info()\n} else {\n sessionInfo()\n} \n\n\n─ Session info ───────────────────────────────────────────────────────────────\n setting value\n version R version 4.2.1 (2022-06-23 ucrt)\n os Windows 10 x64 (build 22621)\n system x86_64, mingw32\n ui RTerm\n language (EN)\n collate English_United States.utf8\n ctype English_United States.utf8\n tz America/New_York\n date 2023-10-12\n pandoc 3.1.8 @ C:/PROGRA~1/Pandoc/ (via rmarkdown)\n\n─ Packages ───────────────────────────────────────────────────────────────────\n package * version date (UTC) lib source\n bit 4.0.4 2020-08-04 [1] CRAN (R 4.2.2)\n bit64 4.0.5 2020-08-30 [1] CRAN (R 4.2.2)\n cachem 1.0.6 2021-08-19 [1] CRAN (R 4.2.2)\n callr 3.7.3 2022-11-02 [1] CRAN (R 4.2.2)\n class 7.3-20 2022-01-16 [2] CRAN (R 4.2.1)\n classInt 0.4-10 2023-09-05 [1] CRAN (R 4.2.3)\n cli 3.4.1 2022-09-23 [1] CRAN (R 4.2.2)\n colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.2.2)\n confintr 1.0.2 2023-06-04 [1] CRAN (R 4.2.3)\n crayon 1.5.2 2022-09-29 [1] CRAN (R 4.2.2)\n crul 1.4.0 2023-05-17 [1] CRAN (R 4.2.3)\n curl 4.3.3 2022-10-06 [1] CRAN (R 4.2.2)\n DBI 1.1.3 2022-06-18 [1] CRAN (R 4.2.2)\n devtools 2.4.5 2022-10-11 [1] CRAN (R 4.2.2)\n digest 0.6.30 2022-10-18 [1] CRAN (R 4.2.2)\n dlookr 0.6.2 2023-07-01 [1] CRAN (R 4.2.3)\n dplyr * 1.1.3 2023-09-03 [1] CRAN (R 4.2.3)\n e1071 1.7-13 2023-02-01 [1] CRAN (R 4.2.3)\n ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.2)\n evaluate 0.21 2023-05-05 [1] CRAN (R 4.2.3)\n extrafont 0.19 2023-01-18 [1] CRAN (R 4.2.2)\n extrafontdb 1.0 2012-06-11 [1] CRAN (R 4.2.0)\n fansi 1.0.3 2022-03-24 [1] CRAN (R 4.2.2)\n farver 2.1.1 2022-07-06 [1] CRAN (R 4.2.2)\n fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.2)\n fontBitstreamVera 0.1.1 2017-02-01 [1] CRAN (R 4.2.0)\n fontLiberation 0.1.0 2016-10-15 [1] CRAN (R 4.2.0)\n fontquiver 0.2.1 2017-02-01 [1] CRAN (R 4.2.3)\n forcats 1.0.0 2023-01-29 [1] CRAN (R 4.2.3)\n Formula 1.2-5 2023-02-24 [1] CRAN (R 4.2.2)\n fs 1.5.2 2021-12-08 [1] CRAN (R 4.2.2)\n gdtools 0.3.3 2023-03-27 [1] CRAN (R 4.2.3)\n generics 0.1.3 2022-07-05 [1] CRAN (R 4.2.2)\n gfonts 0.2.0 2023-01-08 [1] CRAN (R 4.2.3)\n gghighlight 0.4.0 2022-10-16 [1] CRAN (R 4.2.3)\n ggplot2 * 3.4.2 2023-04-03 [1] CRAN (R 4.2.3)\n ggpmisc 0.5.4-1 2023-08-13 [1] CRAN (R 4.2.3)\n ggpp 0.5.4 2023-08-12 [1] CRAN (R 4.2.3)\n ggrepel 0.9.3 2023-02-03 [1] CRAN (R 4.2.3)\n glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.2)\n gridExtra 2.3 2017-09-09 [1] CRAN (R 4.2.2)\n gtable 0.3.3 2023-03-21 [1] CRAN (R 4.2.3)\n hms 1.1.3 2023-03-21 [1] CRAN (R 4.2.3)\n hrbrthemes 0.8.0 2020-03-06 [1] CRAN (R 4.2.3)\n htmltools 0.5.4 2022-12-07 [1] CRAN (R 4.2.2)\n htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.2.3)\n httpcode 0.3.0 2020-04-10 [1] CRAN (R 4.2.3)\n httpuv 1.6.8 2023-01-12 [1] CRAN (R 4.2.2)\n httr 1.4.6 2023-05-08 [1] CRAN (R 4.2.3)\n inum 1.0-5 2023-03-09 [1] CRAN (R 4.2.3)\n jsonlite 1.8.3 2022-10-21 [1] CRAN (R 4.2.2)\n kableExtra 1.3.4 2021-02-20 [1] CRAN (R 4.2.2)\n KernSmooth 2.23-20 2021-05-03 [2] CRAN (R 4.2.1)\n knitr 1.43 2023-05-25 [1] CRAN (R 4.2.3)\n labeling 0.4.2 2020-10-20 [1] CRAN (R 4.2.0)\n later 1.3.0 2021-08-18 [1] CRAN (R 4.2.2)\n lattice 0.20-45 2021-09-22 [2] CRAN (R 4.2.1)\n libcoin 1.0-10 2023-09-27 [1] CRAN (R 4.2.3)\n lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.2)\n magrittr * 2.0.3 2022-03-30 [1] CRAN (R 4.2.2)\n mapdata * 2.3.1 2022-11-01 [1] CRAN (R 4.2.3)\n maps * 3.4.1 2022-10-30 [1] CRAN (R 4.2.3)\n MASS 7.3-60 2023-05-04 [1] CRAN (R 4.2.3)\n Matrix 1.5-4.1 2023-05-18 [1] CRAN (R 4.2.3)\n MatrixModels 0.5-1 2022-09-11 [1] CRAN (R 4.2.3)\n memoise 2.0.1 2021-11-26 [1] CRAN (R 4.2.2)\n mgcv 1.8-40 2022-03-29 [2] CRAN (R 4.2.1)\n mime 0.12 2021-09-28 [1] CRAN (R 4.2.0)\n miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.2.2)\n munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.2)\n mvtnorm 1.2-2 2023-06-08 [1] CRAN (R 4.2.3)\n nlme 3.1-157 2022-03-25 [2] CRAN (R 4.2.1)\n pagedown 0.20 2022-12-13 [1] CRAN (R 4.2.3)\n partykit 1.2-20 2023-04-14 [1] CRAN (R 4.2.3)\n pillar 1.9.0 2023-03-22 [1] CRAN (R 4.2.3)\n pkgbuild 1.4.2 2023-06-26 [1] CRAN (R 4.2.1)\n pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.2)\n pkgload 1.3.2 2022-11-16 [1] CRAN (R 4.2.2)\n polynom 1.4-1 2022-04-11 [1] CRAN (R 4.2.3)\n prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.2.2)\n processx 3.8.1 2023-04-18 [1] CRAN (R 4.2.3)\n profvis 0.3.8 2023-05-02 [1] CRAN (R 4.2.3)\n promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.2.2)\n proxy 0.4-27 2022-06-09 [1] CRAN (R 4.2.3)\n ps 1.7.5 2023-04-18 [1] CRAN (R 4.2.3)\n purrr 1.0.1 2023-01-10 [1] CRAN (R 4.2.3)\n quantreg 5.95 2023-04-08 [1] CRAN (R 4.2.3)\n R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.2)\n RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.2.0)\n Rcpp 1.0.9 2022-07-08 [1] CRAN (R 4.2.2)\n reactable 0.4.4 2023-03-12 [1] CRAN (R 4.2.3)\n readr * 2.1.3 2022-10-01 [1] CRAN (R 4.2.2)\n remotes 2.4.2 2021-11-30 [1] CRAN (R 4.2.2)\n rlang 1.1.0 2023-03-14 [1] CRAN (R 4.2.3)\n rmarkdown 2.22 2023-06-01 [1] CRAN (R 4.2.3)\n rpart 4.1.16 2022-01-24 [2] CRAN (R 4.2.1)\n rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.2)\n Rttf2pt1 1.3.12 2023-01-22 [1] CRAN (R 4.2.2)\n rvest 1.0.3 2022-08-19 [1] CRAN (R 4.2.3)\n scales 1.2.1 2022-08-20 [1] CRAN (R 4.2.2)\n sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.2)\n sf * 1.0-14 2023-07-11 [1] CRAN (R 4.2.3)\n shiny 1.7.4 2022-12-15 [1] CRAN (R 4.2.1)\n showtext 0.9-6 2023-05-03 [1] CRAN (R 4.2.3)\n showtextdb 3.0 2020-06-04 [1] CRAN (R 4.2.3)\n snakecase 0.11.0 2019-05-25 [1] CRAN (R 4.2.2)\n SparseM 1.81 2021-02-18 [1] CRAN (R 4.2.0)\n stringi 1.7.8 2022-07-11 [1] CRAN (R 4.2.1)\n stringr 1.5.0 2022-12-02 [1] CRAN (R 4.2.3)\n survival 3.3-1 2022-03-03 [2] CRAN (R 4.2.1)\n svglite 2.1.1 2023-01-10 [1] CRAN (R 4.2.2)\n sysfonts 0.8.8 2022-03-13 [1] CRAN (R 4.2.3)\n systemfonts 1.0.4 2022-02-11 [1] CRAN (R 4.2.2)\n tibble 3.2.1 2023-03-20 [1] CRAN (R 4.2.3)\n tidyr * 1.3.0 2023-01-24 [1] CRAN (R 4.2.3)\n tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.2.2)\n tzdb 0.3.0 2022-03-28 [1] CRAN (R 4.2.2)\n units 0.8-4 2023-09-13 [1] CRAN (R 4.2.3)\n urlchecker 1.0.1 2021-11-30 [1] CRAN (R 4.2.2)\n usethis 2.2.1 2023-06-23 [1] CRAN (R 4.2.3)\n utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.2)\n vctrs 0.6.2 2023-04-19 [1] CRAN (R 4.2.3)\n viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.2.3)\n vroom 1.6.0 2022-09-30 [1] CRAN (R 4.2.2)\n webshot 0.5.4 2022-09-26 [1] CRAN (R 4.2.2)\n withr 2.5.0 2022-03-03 [1] CRAN (R 4.2.2)\n xfun 0.39 2023-04-20 [1] CRAN (R 4.2.3)\n xml2 1.3.5 2023-07-06 [1] CRAN (R 4.2.3)\n xtable 1.8-4 2019-04-21 [1] CRAN (R 4.2.2)\n yaml 2.3.6 2022-10-18 [1] CRAN (R 4.2.1)\n\n [1] C:/Users/belangew/AppData/Local/R/win-library/4.2\n [2] C:/Program Files/R/R-4.2.1/library\n\n──────────────────────────────────────────────────────────────────────────────\n\n\n\n\n\n\n\n\n\n\n\nReferences\n\nAmerican Diabetes Asssociation. (2015). The burden of diabetes in north carolina. http://main.diabetes.org/dorg/PDFs/Advocacy/burden-of-diabetes/north-carolina.pdf\n\n\nBarker, L. E., Thompson, T. J., Kirtland, K. A., Boyle, J. P., Geiss, L. S., McCauley, M. M., & Albright, A. L. (2013). Bayesian small area estimates of diabetes incidence by united states county, 2009. Journal of Data Science, 11(1), 269–280. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4537395/\n\n\nCenters for Disease Control and Prevention. (2020). National diabetes statistics report. US Department of Health and Human Services. https://www.cdc.gov/diabetes/pdfs/data/statistics/national-diabetes-statistics-report.pdf\n\n\nJNK, R. (2003). Small area estimation. https://onlinelibrary.wiley.com/doi/pdf/10.1002/0471722189.fmatter\n\n\nKlein, R. J., & Schoenborn, C. A. (2001). Age adjustment using the 2000 projected u.s. population. Healthy People 2000 Stat Notes, 20, 1–9.\n\n\nPierannunzi, C., Town, M., Garvin, W., Shaw, F. E., & Balluz, L. (2012). Methodologic changes in the behavioral risk factor surveillance system in 2011 and potential effects on prevalence estimates. Morbidity and Mortality Weekly Report, 61(22), 410–413. https://www.cdc.gov/mmwr/pdf/wk/mm6122.pdf\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Diabetes in {Rural} {North} {Carolina} : {Exploring}\n {Prevalence} {Trends}},\n date = {2020-06-25},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, K. (2020, June 25). Diabetes in Rural North Carolina :\nExploring Prevalence Trends." - }, - { - "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", - "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", - "title": "Basic Exploration of WHO Tuberculosis Data", - "section": "", - "text": "Today I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables." - }, - { - "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", - "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", - "title": "Basic Exploration of WHO Tuberculosis Data", - "section": "A different way to look", - "text": "A different way to look\nCould there be any correlation between a countries population and the amount of TB cases? Maybe its just as simple as having more people means more people to get sick? Lets bring in another data set, again from World Bank Found Here, this contains total population data by country.\n\npop_raw <- read.csv(\"API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv\"\n ,skip = 4)\n#If this looks famialer its because it is, the data set looks very simalar to the GDP data\n#In the future this could be moved to a function to allow cleaning much easier\npop1 <- pop_raw %>% \n select(-(Indicator.Name:X2012)\n ,-X2019\n ,-X) %>% \n pivot_longer(cols = X2013:X2018\n ,names_to = \"year\" \n ,values_to = \"population\") %>% \n mutate_if(is.character\n ,str_remove_all\n ,pattern = \"X(?=\\\\d*)\")\n\n#now lets combine this into are overall data set\n\nwho_combined <- who_combined %>% \n mutate(year = as.character(year)) %>% \n left_join(y = pop1) %>% \n select(-Country.Name)\n\n#now lets Graph again\n\ng3 <- who_combined %>% \n filter(str_detect(age,\"014|15plus|u\"),year == 2018) %>% \n group_by(country) %>% \n summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)\n ,population = first(population)/1000000\n ,who_region = first(g_whoregion)) %>% \n mutate(\n label = ifelse((population>250), yes = as.character(country),no = \"\")) %>%\n ggplot(aes(x = population, y = sum_tb_cases )) +\n geom_point(aes(color = who_region)) +\n ggrepel::geom_text_repel(aes(x = population, y = sum_tb_cases, label = label)) +\n labs(\n title = \"Total TB Cases by Country compared to Gross Domestic Product (GDP)\"\n ,x = \"Population (in Millions)\"\n ,y = \"Total TB Case (per 10,000 cases)\"\n ,color = \"WHO Region\"\n ) +\n theme_bw() \n\n g3 \n\n\n\n\n\nFurther Exploration\nMaybe we are on to something, the more people, the more likely they are to get sick! However India seems to have a very large number of cases so lets break these cases down further by age group for 2018.\n\ng4 <- who_combined %>% \n filter(year == 2018\n ,country == \"India\"\n ,!(str_detect(age,\"15plus|ageunk|u|014\"))\n ,(str_detect(sex,\"m|f\"))\n ) %>% \n mutate(age_range = glue::glue(\"{age_start} -- {age_end}\")) %>% \n ggplot(aes(x = reorder(age_range, as.numeric(age_start)), y = (values/1000), fill = sex)) +\n geom_col(position = \"dodge\") +\n labs(\n title = \"TB Case in India by age and gender 2018\"\n ,x = NULL\n ,y = \"Total Cases (per 1000)\"\n ,fill = \"Gender\") +\n scale_fill_manual(labels = c(\"Female\",\"Male\"), values = c(\"#e9a3c9\",\"#67a9cf\") )\n \ng4\n\n\n\n\nThere seems to be a huge spike in cases after adolescences. Females have a sharp decline the older they get, where as male case stay elevated with a slight decrease at 55." - }, - { - "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", - "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", - "title": "Basic Exploration of WHO Tuberculosis Data", - "section": "Last Exploration", - "text": "Last Exploration\nLets look at overall cases in India, going back to 1980 and see if there as been any trends. To get these numbers we will go back to our raw data and strip everything out expect the total count\n\ng5 <- who_raw %>% \n filter(country == \"India\") %>% \n select(year, c_newinc) %>% \n ggplot(aes(x = year, y = c_newinc/1000000)) +\n geom_line() +\n geom_point() +\n labs(\n title = \"New and Relapse Tuberculosis Cases In India \\n1980 -- 2018\"\n ,x = NULL\n ,y = \"Total Cases (in millions)\") +\n theme_bw() +\n theme(plot.title = element_text(hjust = 0.5)) + #center title \n scale_x_continuous(breaks = seq(1980,2020,5)) +\n scale_y_continuous(breaks = scales::pretty_breaks(n=10)) #different way to add tick marks\ng5\n\n\n\n\nCases were steadily rising from 1980 to 1990, then suddenly feel off. Starting in the early 2010s there was a sharp increase and the amount of new and relapse cases just keep growing." - }, - { - "objectID": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", - "href": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", - "title": "Facets and a Lesson in Humility", - "section": "", - "text": "Todays post is a lesson in Facets, as well as humility. The task this week was to replicate the graph in Chapter 8 of Tableau for Healthcare in R. The graph in question is called a Table Lens (This is the name the book uses, however I did have trouble finding this name in Google searches), it is a collection of charts with a common theme, this time looking at countries in various WHO regions and some statistics associated with mortality as well as health expenditure. I say this is a lesson in humiltiy as I have read through the excellent book R for Data Science, and yet the idea of faceting a ggplot graph slipped my mind. This ended with hours of trying to find a package in R to line up graphs, and way more time then I care to admit spent on getting things prefect. I did find such a package called cowplots, which can be found here. While this is an excellent package, its use was unecessary and I reverted back to using the excellent facet feature of GGplot, which can be seen below! \n\nLoad Libraries\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr)\nlibrary(tidyr)\n\n\n\nImport Data\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"03 - WHO Life Expect & Mort\"\n )\n\n\n\nClean Names and Transform\n\nvarnames <- c(\"who_region\", \"country\", \"year\" , \"sex\" , \"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\")\nnames(ds) <- varnames\n\n# Order Countries based on Life Expectancy at Birth\n\nds$country <- factor(ds$country, levels = ds$country[order(ds$life_expect_birth)]) \n\n#To \"Long\" Form\n\nds1 <- ds %>% pivot_longer(5:8)#select columns 5 throuh 8, leave new columns at default names\n\n# Set up labels for Facet, as well as function for Facet Labeller\n\nfacet_labels <- list(\n\"life_expect_birth\" = \"Life Expectancy at Birth \" \n,\"neo_mort\" = \"Neonatal Mortality Rate\" \n,\"under_five_mort\" = \"Under-Five Mortality Rate\"\n,\"health_expenditure\" = \"Health Expenditure per Capita (US$)\" )\n\nvariable_labeller <- function(variable,value){\n return(facet_labels[value])\n}\n\n\n\nGraphs\n\nhightlight_countries <- (c(\"Mauritania\", \"South Africa\")) \n\ng1 <- ds1 %>% filter(who_region == \"Africa\") %>% \n mutate(name = factor(name, levels = c(\"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\"))\n ,highlight = country %in% hightlight_countries) %>% \n ggplot(aes(x = country, y = value, fill = highlight)) +\n geom_col(show.legend = FALSE) +\n coord_flip() +\n labs(\n title = \"World Bank Life Expectancy, Neonatal & Under-Five Mortality Rates, and Health Expenditure Analysis\"\n ,x = NULL\n ,y = NULL\n ) +\n facet_grid(~name, scales = \"free_x\",labeller = variable_labeller) +\n theme_bw() +\n geom_text(aes(label = round(value, 0)), hjust = 0) +\n scale_y_continuous(expand = expand_scale(mult = c(0,0.2))) +\n scale_fill_manual(values = c(\"TRUE\" = \"#fc8d59\", \"FALSE\" = \"#2b83ba\"))\ng1\n\n\n\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Facets and a {Lesson} in {Humility}},\n date = {2020-01-29},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “Facets and a Lesson in Humility.”\nJanuary 29, 2020." - }, - { - "objectID": "index.html", - "href": "index.html", - "title": "About", - "section": "", - "text": "I am a highly accomplished Medical Technologist with an extensive 14-year track record in the medical industry, consistently demonstrating the ability to effectively bridge the divide between medical professionals and information technologists. Proficient in the application of machine learning techniques to enhance medical data analysis and adept at developing innovative R Shiny apps to streamline healthcare processes and improve patient outcomes." - }, - { - "objectID": "index.html#bio", - "href": "index.html#bio", - "title": "About", - "section": "", - "text": "I am a highly accomplished Medical Technologist with an extensive 14-year track record in the medical industry, consistently demonstrating the ability to effectively bridge the divide between medical professionals and information technologists. Proficient in the application of machine learning techniques to enhance medical data analysis and adept at developing innovative R Shiny apps to streamline healthcare processes and improve patient outcomes." - }, - { - "objectID": "index.html#education", - "href": "index.html#education", - "title": "About", - "section": "Education", - "text": "Education\nCampbell University | Buies Creek, NC\nDoctorate of Health Sciences | August 2020 - May 2023\nUniversity of Central Florida | Orlando, FL\nM.S. in Healthcare Informatics | August 2018 - May 2020\nWestern Carolina University | Cullowhee, NC\nB.S. in Clinical Laboratory Science | August 2005 - May 2009" - }, - { - "objectID": "index.html#experience", - "href": "index.html#experience", - "title": "About", - "section": "Experience", - "text": "Experience\nRoche Diagnositcs | IT Workflow Consultant | Oct 2021 - Present\nRoche Diagnostics | Field Application Specialist | July 2012 - Sept 2021\nCape Fear Valley Hospital | Lead Medical Laboratory Scientist | June 2011 - July 2012\nCape Fear Valley Hospital | Medical Laboratory Scientist | June 2009 - June 2011" - }, - { - "objectID": "blog.html", - "href": "blog.html", - "title": "Posts", - "section": "", - "text": "TidyTuesday 2021 Week 6: HBCU Enrollment\n\n\nTidyTuesday 2021 Week 6: HBCU Enrollment. Posts looks at tidying the data ,as well as making some graphs about the data.\n\n\n\n\nTidyTuesday\n\n\n\n\n\n\n\n\n\n\n\nFeb 26, 2021\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nConverting From Blogdown to Distill\n\n\nA meta post on transferring from a blogdown to distill blog site\n\n\n\n\nDistill\n\n\n\n\n\n\n\n\n\n\n\nJan 12, 2021\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nDiabetes in Rural North Carolina : Data Collection and Cleaning\n\n\nThis is the second post in the series exploring Diabetes in rural North Carolina. This post will explore the data used for this project, from collection, cleaning, and analysis ready data.\n\n\n\n\n\n\n\n\n\nJul 25, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nDiabetes in Rural North Carolina : Exploring Prevalence Trends\n\n\nThis post introduces the exploration of the Diabetes epidemic in North Carolina\n\n\n\n\n\n\n\n\n\nJun 25, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nImporting Excel Data with Multiple Header Rows\n\n\nA solution for importing Excel Data that contains two header rows.\n\n\n\n\n\n\n\n\n\nJun 22, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nBasic Exploration of WHO Tuberculosis Data\n\n\nToday I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables.\n\n\n\n\n\n\n\n\n\nFeb 13, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nLine Graphs and Interactivity\n\n\nTableau for Healthcare Chapter 10. Static and Interactive examples\n\n\n\n\n\n\n\n\n\nFeb 10, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nFacets and a Lesson in Humility\n\n\nA look at Tableau for Healthcare Chapter 8. Table Lens graph.\n\n\n\n\n\n\n\n\n\nJan 29, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nMy Start to R\n\n\nA short introduction to my blog, and R journey.\n\n\n\n\n\n\n\n\n\nJan 24, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\nNo matching items" - }, - { - "objectID": "posts/2020-01-04_my-start-to-r/my-start-to-r.html", - "href": "posts/2020-01-04_my-start-to-r/my-start-to-r.html", - "title": "My Start to R", - "section": "", - "text": "Today starts my attempt at sharing my R journey with the world! I have been learning R off and on now since late 2019, I have begun to take it much more serious as I work through my Data Analytics class at UCF. My love for all things numbers and graphs has really blossomed, and I am choosing to share that love with anyone who cares to read. I will not claim to be the best at R, or any programming for that matter, but these are my attempts. Each post in this serious will be replicated a graph created in Tableau from the book Tableau for Healthcare. Todays graph is a simple horizontal bar chart, in transferring to both a new blog site and computer I have unfortunately lost the original bar graph, but trust me the one I created looks just like it.\n\nLoad Libraries\n\nlibrary(tidyr)\nlibrary(magrittr)\nlibrary(ggplot2)\nlibrary(stringr)\nlibrary(dplyr)\n\n\n\nImport Data\n\nds <- readxl::read_excel(\n path = \"Tableau 10 Training Practice Data.xlsx\" \n ,sheet = \"02 - Patient Falls-Single Hosp\"\n )\n\n\n\nClean Data Names\n\n#should make reusable forumla at later time\nnames(ds) <- tolower(names(ds))\nnames(ds) <- str_replace_all(names(ds),\" \", \"_\")\n\n\n\nConvert Data to ‘Long Form’\n\nds1 <- ds %>% \n gather(\"patient_falls_no_injury_rate\" , \"patient_falls_with_injury_rate\"\n ,key = \"injury\" \n ,value = \"rate\" ) %>% \n mutate(injury = (injury == \"patient_falls_with_injury_rate\"))\n\n\n\nGraph 5.1\n\nb1 <- ds %>% \n ggplot(mapping = aes(x = reorder(type_of_care,total_patient_falls_rate ) , y = total_patient_falls_rate)) +\n geom_col(fill = \"#2b83ba\") + \n coord_flip() +\n scale_y_continuous(breaks = NULL) +\n theme(axis.ticks = element_blank()) +\n labs(title = \"Rate of Patient Falls (per 1,000 Pateint Days)\\nby Type of Care for FY2017\"\n ,x = NULL\n ,y = NULL\n ) +\n theme_classic() +\n geom_text(aes(label = format(total_patient_falls_rate, digits = 2)), nudge_y = -.25, color = \"white\")\n \nb1\n\n\n\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {My {Start} to {R}},\n date = {2020-01-24},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “My Start to R.” January 24, 2020." - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", - "title": "Line Graphs and Interactivity", - "section": "", - "text": "Today’s post is all about line graphs using both ggplot for a static graph as well as a package called plotly for interactivity (more on this later). The example graph and data is again coming from Tableau for Healthcare, Chapter 10." - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", - "title": "Line Graphs and Interactivity", - "section": "Load Libraries", - "text": "Load Libraries\nAs always first step is to load in our libraries, I am using quite a few here, some are a bit overkill for this example but I wanted to play around with some fun features today.\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr) # data manipulation\nlibrary(tidyr) # tidy data\nlibrary(lubridate) #work with dates\nlibrary(stringr) # manipulate strings\nlibrary(plotly)" - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", - "title": "Line Graphs and Interactivity", - "section": "Import Data", - "text": "Import Data\nNext lets import our data, this week we are using the sheet Flu Occurrence FY2013-2016. I am unsure if this is form a real data set or not but it is good for demonstration purposes! After importing we can glimpse at our data to understand what is contained within.\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"05 - Flu Occurrence FY2013-2016\"\n )\nds %>% glimpse()\n\nRows: 48\nColumns: 4\n$ Date <dttm> 2012-10-27, 2012-11-24, …\n$ `Tests (+) for Influenza (count)` <dbl> 995, 3228, 22368, 24615, …\n$ `Total Respiratory Specimens Tested (count)` <dbl> 18986, 24757, 66683, 7561…\n$ `% Tests (+) for Influenza` <dbl> 0.05240704, 0.13038737, 0…" - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", - "title": "Line Graphs and Interactivity", - "section": "Transform Data", - "text": "Transform Data\nI went a bit overboard today with renaming the variables. I wanted to practice writing a function and while it might not be the prettiest or the best way to do this, it worked for what I was trying to accomplish. Note the use of sapply, which lets us run the function on each column name.\n\nformat_names <- function(x) {\n #Fucntion to set all names to lower case, and strip unneeded characters\n x <- tolower(x)\n x <- str_replace_all(x,c(#set each pattern equal to replacement\n \" \" = \"_\"\n ,\"\\\\(\\\\+\\\\)\" = \"pos\" #regualr experssion to match (+)\n ,\"\\\\(\" = \"\"\n ,\"\\\\)\" = \"\"\n ,\"\\\\%\" = \"pct\"\n )\n ) \n }\n\n#run the format name function on all names from DS\ncolnames(ds) <- sapply(colnames(ds),format_names) \n\nNow is were the fun really starts! For this particular data set there are a couple things we need to add to replicate the example. In the original data set the date is stored with month, day, and year; the day is irrelevant and we need to pull out the month as well as the year. For this we can use the lubridate package, first we pull out the month and set it as a factor. For this example our year actually starts in October, so we set our factor to start at October (10), and end with September (9). We then pull out the year, which presents us with a different problem. Again our year starts in October, instead of January. To solve this I have created a variable called date adjustment, in this column is our month is 10 or greater, we will place a 1, if not a 0. We then set our fiscal year to be the actual year plus the date adjustment, this allows us to have our dates in the right fiscal year. Last the percent column is currently listed as a decimal, so we will convert this to a percentage.\n\n# split date time\nds1 <- ds %>% mutate(\n #create month column, then set factors and labels to start fiscal year in Oct\n month = month(ds$date)\n ,month = factor(month\n ,levels = c(10:12, 1:9)\n ,labels = c(month.abb[10:12],month.abb[1:9]))\n ,year = year(ds$date)\n ,date_adjustment = ifelse(month(ds$date) >= 10, 1,0 )\n ,fiscal_year = factor(year + date_adjustment)\n #convert % Pos from decmial to pct\n ,pct_tests_pos_for_influenza = round(pct_tests_pos_for_influenza * 100, digits = 0)\n )\n\nds1 %>% glimpse()\n\nRows: 48\nColumns: 8\n$ date <dttm> 2012-10-27, 2012-11-24, 2012…\n$ tests_pos_for_influenza_count <dbl> 995, 3228, 22368, 24615, 1179…\n$ total_respiratory_specimens_tested_count <dbl> 18986, 24757, 66683, 75614, 5…\n$ pct_tests_pos_for_influenza <dbl> 5, 13, 34, 33, 23, 17, 11, 6,…\n$ month <fct> Oct, Nov, Dec, Jan, Feb, Mar,…\n$ year <dbl> 2012, 2012, 2012, 2013, 2013,…\n$ date_adjustment <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,…\n$ fiscal_year <fct> 2013, 2013, 2013, 2013, 2013,…" - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", - "title": "Line Graphs and Interactivity", - "section": "GGplot", - "text": "GGplot\nThe graph here is pretty straight forward with one exception, group! For this line graph we want ggplot to connect the lines of the same year, if we do not explicitly state this using the group mapping, ggplot will try to connect all the lines together, which of course is not at all what we want!\n\ng1 <- ds1 %>% \n ggplot(aes(x = month, y = pct_tests_pos_for_influenza, color = fiscal_year\n ,group = fiscal_year)) +\n geom_line() +\n labs(\n x = NULL\n ,y = \"% Tests (+) for Influenza\"\n ,color = NULL\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza \\nOctober - September \\nFor Flu Seasons 2013 - 2016\"\n ) +\n theme_classic() +\n scale_y_continuous(breaks = seq(0,40,5)) +\n scale_color_manual(values = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\"))\n\ng1" - }, - { - "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", - "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", - "title": "Line Graphs and Interactivity", - "section": "plotly", - "text": "plotly\nOne of the nice features of Tableau is the fact the graphs are interactive, while a good graph should speak for itself, end users love pretty things. I have been experimenting with Plotly, which has an open source package for R (as well as many other programming languages!). This example only just scratches the surface, but there will be many more to come!\n\ng2 <- ds1 %>% \n plot_ly(x = ~month, y = ~pct_tests_pos_for_influenza, type = \"scatter\", mode = \"lines\" \n ,color = ~fiscal_year\n ,colors = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\")\n , hoverinfo = 'y') %>% \n layout(xaxis = list(\n title = \"\"\n )\n ,yaxis = list(\n title = \"% Tests (+) for Influenza\"\n )\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza\"\n ,legend = list(\n x = 100\n ,y = 0.5\n ) \n \n )\n\ng2" - }, - { - "objectID": "posts/2020-06-22_excel-data-multiple-headers/importing-excel-data-with-multiple-header-rows.html", - "href": "posts/2020-06-22_excel-data-multiple-headers/importing-excel-data-with-multiple-header-rows.html", - "title": "Importing Excel Data with Multiple Header Rows", - "section": "", - "text": "Problem\nRecently I tried to important some Microsoft Excel data into R, and ran into an issue were the data actually had two different header rows. The top row listed a group, and then the second row listed a category within that group. Searching goggle I couldn’t really find a good example of what I was looking for, so I am putting it here in hopes of helping someone else!\n\n\nExample Data\nI have created a small Excel file to demonstrate what I am talking about. Download it here. This is the data from Excel. \n\n\nCheck Data\nFirst we will read the file in using the package readxl and view the data without doing anything special to it.\n\nlibrary(readxl) # load the readxl library\nlibrary(tidyverse) # load the tidyverse for manipulating the data\nfile_path <- \"example_data.xlsx\" # set the file path\nds0 <- read_excel(file_path) # read the file\nds0\n\n# A tibble: 7 × 7\n Name `Test 1` ...3 ...4 `Test 2` ...6 ...7 \n <chr> <chr> <chr> <chr> <chr> <chr> <chr>\n1 <NA> Run 1 Run 2 Run 3 Run 1 Run 2 Run 3\n2 Max 22 23 24 25 26 27 \n3 Phoebe 34 34 32 34 51 12 \n4 Scamp 35 36 21 22 23 24 \n5 Chance 1234 1235 1236 1267 173 1233 \n6 Aimee 420 123 690 42 45 12 \n7 Kyle 22 23 25 26 67 54 \n\n\n\n\nNew Header Names\n\nStep 1\nFirst lets read back the data, this time however with some options. We will set the n_max equal to 2, to only read the first two rows, and set col_names to FALSE so we do not read the first row as headers.\n\nds1 <- read_excel(file_path, n_max = 2, col_names = FALSE)\nds1\n\n# A tibble: 2 × 7\n ...1 ...2 ...3 ...4 ...5 ...6 ...7 \n <chr> <chr> <chr> <chr> <chr> <chr> <chr>\n1 Name Test 1 <NA> <NA> Test 2 <NA> <NA> \n2 <NA> Run 1 Run 2 Run 3 Run 1 Run 2 Run 3\n\n\n\n\nStep 2\nNow that we have our headers lets first transpose them to a vertical matrix using the base function t(), then we will turn it back into a tibble to allow us to use tidyr fill function.\n\nnames <- ds1 %>%\n t() %>% #transpose to a matrix\n as_tibble() #back to tibble\nnames\n\n# A tibble: 7 × 2\n V1 V2 \n <chr> <chr>\n1 Name <NA> \n2 Test 1 Run 1\n3 <NA> Run 2\n4 <NA> Run 3\n5 Test 2 Run 1\n6 <NA> Run 2\n7 <NA> Run 3\n\n\nNote that tidyr fill can not work row wise, thus the need to flip the tibble so it is long vs wide.\n\n\nStep 3\nNow we use tidyr fill function to fill the NA’s with whatever value it finds above.\n\nnames <- names %>% fill(V1) #use dplyr fill to fill in the NA's\nnames\n\n# A tibble: 7 × 2\n V1 V2 \n <chr> <chr>\n1 Name <NA> \n2 Test 1 Run 1\n3 Test 1 Run 2\n4 Test 1 Run 3\n5 Test 2 Run 1\n6 Test 2 Run 2\n7 Test 2 Run 3\n\n\n\n\nStep 4\nThis is where my data differed from many of the examples I could find online. Because the second row is also a header we can not just get rid of them. We can solve this using paste() combined with dplyr mutate to form a new column that combines the first and second column.\n\nnames <- names %>%\n mutate(\n new_names = paste(V1,V2, sep = \"_\")\n )\nnames\n\n# A tibble: 7 × 3\n V1 V2 new_names \n <chr> <chr> <chr> \n1 Name <NA> Name_NA \n2 Test 1 Run 1 Test 1_Run 1\n3 Test 1 Run 2 Test 1_Run 2\n4 Test 1 Run 3 Test 1_Run 3\n5 Test 2 Run 1 Test 2_Run 1\n6 Test 2 Run 2 Test 2_Run 2\n7 Test 2 Run 3 Test 2_Run 3\n\n\n\n\nStep 4a\nOne more small clean up task, in the example data the first column header Name, did not have a second label, this has created a name with an NA attached. We can use stringr to remove this NA.\n\nnames <- names %>% mutate(across(new_names, ~str_remove_all(.,\"_NA\")))\nnames\n\n# A tibble: 7 × 3\n V1 V2 new_names \n <chr> <chr> <chr> \n1 Name <NA> Name \n2 Test 1 Run 1 Test 1_Run 1\n3 Test 1 Run 2 Test 1_Run 2\n4 Test 1 Run 3 Test 1_Run 3\n5 Test 2 Run 1 Test 2_Run 1\n6 Test 2 Run 2 Test 2_Run 2\n7 Test 2 Run 3 Test 2_Run 3\n\n\n\n\nStep 5\nNow that are new name column is the way we want it, we can use dpylrs pull to return a vector of just that column\n\nnames <- names %>% pull(new_names)\n\n\n\n\nFinal Data\nNow that we have a vector of column names lets read in the original file using our new names. We set the skip argument to 2, to skip the first two rows, and set col_names equal to our vector of names. Note the last step I used the janitor package to provide names in snake case (the default for the clean names function.)\n\nexample_data <- readxl::read_excel(file_path, col_names = names, skip = 2) %>%\n janitor::clean_names()\nexample_data\n\n# A tibble: 6 × 7\n name test_1_run_1 test_1_run_2 test_1_run_3 test_2_run_1 test_2_run_2\n <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 Max 22 23 24 25 26\n2 Phoebe 34 34 32 34 51\n3 Scamp 35 36 21 22 23\n4 Chance 1234 1235 1236 1267 173\n5 Aimee 420 123 690 42 45\n6 Kyle 22 23 25 26 67\n# ℹ 1 more variable: test_2_run_3 <dbl>\n\n\n\n\nOther Help\nWhile searching for some solutions to my problem I found two good examples, however neither did exactly what I was trying to do.\n\nThis post by Lisa Deburine is pretty close to what I was trying to accomplish and gave me a good starting point. Read it here\nThis post by Alison Hill solves a simlar but slightly different problem. In her data the 2nd row is actually metadata not a second set of headers. Read it here\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Importing {Excel} {Data} with {Multiple} {Header} {Rows}},\n date = {2020-06-22},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “Importing Excel Data with Multiple Header\nRows.” June 22, 2020." + "text": "Introduction\nRecently I was struggling to find a data project to work on, I felt a bit stuck with some of my current projects, so I begun to scour the internet to find something to work on. I stumbled upon (TidyTuesday)[https://github.com/rfordatascience/tidytuesday] a weekly project where untidy data is posted from various sources, for the goal of practicing cleaning and visualizing. There is not right or wrong answers for TidyTuesday, this was exactly what I was looking for! This week (well by the time this was posted, a few weeks ago) the data set was about Historically Black Colleges and Universities. Within the posted data there were a few different data sets, I chose to work with the set dealing with High school Graduation rates, throughout this post I will explain my steps for cleaning and then present a few different graphs. It should also be noted that in the first section my code blocks will build upon themselves, so the same code will be duplicated as I add more steps to it.\n\n\nLoad Data\nIn this first block we will load some required libraries as well as load in the raw data. This dataset contains data for Highschool graduation rates by race. One thing to point out here is the use of import::from(), will its use here is a bit overkill, it was more for my practice. In this case I am importing the function %nin from the Hmisc package, which in the opposite of the function %in% from base R.\n\nlibrary(dplyr)\nlibrary(ggplot2)\n\nimport::from(Hmisc, `%nin%`)\n\nhs_students_raw <- readxl::read_xlsx(\"104.10.xlsx\", sheet = 1)\n\nglimpse(hs_students_raw)\n\nRows: 48\nColumns: 19\n$ Total <dbl> 1910…\n$ `Total, percent of all persons age 25 and over` <dbl> 13.5…\n$ `Standard Errors - Total, percent of all persons age 25 and over` <chr> \"(—)…\n$ White1 <chr> \"—\",…\n$ `Standard Errors - White1` <chr> \"(†)…\n$ Black1 <chr> \"—\",…\n$ `Standard Errors - Black1` <chr> \"(†)…\n$ Hispanic <chr> \"—\",…\n$ `Standard Errors - Hispanic` <chr> \"(†)…\n$ `Total - Asian/Pacific Islander` <chr> \"—\",…\n$ `Standard Errors - Total - Asian/Pacific Islander` <chr> \"(†)…\n$ `Asian/Pacific Islander - Asian` <chr> \"—\",…\n$ `Standard Errors - Asian/Pacific Islander - Asian` <chr> \"(†)…\n$ `Asian/Pacific Islander - Pacific Islander` <chr> \"—\",…\n$ `Standard Errors - Asian/Pacific Islander - Pacific Islander` <chr> \"(†)…\n$ `American Indian/\\r\\nAlaska Native` <chr> \"—\",…\n$ `Standard Errors - American Indian/\\r\\nAlaska Native` <chr> \"(†)…\n$ `Two or more race` <chr> \"—\",…\n$ `Standard Errors - Two or more race` <chr> \"(†)…\n\n\nNow we are going to start cleaning the data. First I am going to filter for years 1985 and up, prior to this year the data set is a bit spardic, so to keep it clean I am only going to look at 1985 and up. There are also 3 odd years (19103,19203,19303) that I am not sure what those are so I will remove that data as well.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303))\n\nNext I am going to convert all columns to be numeric, because of some blanks in the original import all of the columns read in as characters instead of numeric.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric))\n\nNext I am going to rename the columns. First I rename the column Total, into year, as this column holds the year! Then I use stringr::str_remove_all to remove the long phrase ‘percent of all persons age 25 and over’, as well as the number 1. For some reason the Black and White columns each have a number 1 at the end, I think this is for some sort of footnote but we will just remove it.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n )\n\nThen I am going to drop the column ‘Total - Asian/Pacific Islander’, each of these races is stored in a seperate column so if I needed the total later for some reason I could calculate it. I am also going to drop the string “Asian/Pacific Islander -”, from the begin of each of those columns, so they will now tell me just which race each column refers too.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n )\n\nI now simply pivot the data longer. A nice trick I learned since I want to pivot everything expect the year column is to use the minus sign to select every column expect the year column in the pivot.\n\nhs_students_long <- hs_students %>% \n tidyr::pivot_longer(-year)\n\nWith the data now in long form I am going to separate the automatically generate name column into two columns titled, stat and race. The data contains both the percent that graduated and the standard error. Then I replace all the NA’s in the stat column with Total, as these are the total percentage and the other rows will be the standard error. Last I dropped the s from standard errors to make it singular.\n\nhs_students_long <- hs_students %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n )\n\nI know pivot the date back to wide form, and use the Janitor package to clean the column names. This puts them in lowercase with _ for spaces.\n\nhs_students_wide <- hs_students_long %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names()\n\nTo make graphing a bit easier with the scales package, I divide both columns by 100. We will see why in the graphs.\n\nhs_students_wide <- hs_students_long %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names() %>% \n mutate(across(total:standard_error, ~.x/100))\n\nIt’s now time to graph. Notice the use scales::label_percent() as the labels value for the y axis. If the numbers were left as the default values (75 vs 0.75) the percentages would have been 750%, which is obviously very wrong! I also use geom_ribbon to draw the standard error bars around each line. Notice the use of color = NA, by default the ribbon has outlines, I did not like this so doing color = NA turns them off. (It should be noted there are a few other solutions to turning them off but this seemed the easiest to me). Last we see the use of the aesthetics argument in scale_color_brewer. By setting this we match the color and fill to be the same color, without setting this, the colors of the error bars and lines don’t match!\n\nhs_students_wide <- hs_students_wide %>% \n mutate(\n ymax = total - standard_error\n ,ymin = total + standard_error\n )\n\ng1 <- hs_students_wide %>% \n filter(race != \"Total\") %>% \n ggplot(aes(x = year, y = total, group = race, color = race)) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = race), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\")) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Race\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Race\" \n ,fill = \"Race\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n \ng1\n\n\n\n\n\n\nLoad Male/Female Data\nNow the file also contains the same information but split by male and female. I am going to load in that data.\n\nmale_hs_raw <- readxl::read_excel(\"104.10.xlsx\", sheet = 3)\nfemale_hs_raw <- readxl::read_excel(\"104.10.xlsx\", sheet = 5)\n\nHere I will use the same manipulations as above, the only addition is adding a column for sex.\n\nmale_hs <- male_hs_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n ) %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n ,sex = \"Male\"\n )\n\n\nfemale_hs <- female_hs_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n ) %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n ,sex = \"Female\"\n )\n\nHere we will combine the two data frames and then pivot to our final graphing form.\n\nmale_female_hs_wide <- male_hs %>% \n bind_rows(female_hs) %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names() %>% \n mutate(across(total:standard_error, ~.x/100)) %>% \n mutate(\n ymax = total - standard_error\n ,ymin = total + standard_error\n )\n\nLets first graph the total for Male and Female graduation rates.\n\ng2 <- male_female_hs_wide %>% \n filter(race == \"Total\") %>% \n ggplot(aes(x = year, y = total, group = sex, color = sex)) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = sex), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\")) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Sex\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Sex\" \n ,fill = \"Sex\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n\ng2\n\n\n\n\nNow I am going to graph by Sex and Race.\n\nrace_filter <- c(\"White\", \"Black\", \"Hispanic\")\n\nmake_label <- function(label){\n # browser()\n result <- stringr::str_split(label, \"\\\\.\")\n unlist(lapply(result, function(x) paste(x[2],x[1])))\n}\n\n\ng2 <- male_female_hs_wide %>% \n filter(race %in% race_filter) %>% \n ggplot(aes(x = year, y = total, group = interaction(sex,race), color = interaction(sex,race))) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = interaction(sex,race)), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\"), labels = make_label) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Race and Sex\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Race & Sex\" \n ,fill = \"Race & Sex\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n\ng2\n\n\n\n\n\n\nConclusion\nWhile I am sure there is much more that could be done with this data this is where I am going to stop for today. Our graphs clearly show a divide in graduation rates by race, however Sex does not seem to have much of an effect on graduation rates.\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2021,\n author = {Belanger, Kyle},\n title = {TidyTuesday 2021 {Week} 6: {HBCU} {Enrollment}},\n date = {2021-02-26},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2021. “TidyTuesday 2021 Week 6: HBCU\nEnrollment.” February 26, 2021." }, { "objectID": "posts/2020-07-25_diabetes-data-collection-and-cleaning/diabetes-in-rural-north-carolina-data-collection-and-cleaning.html", @@ -196,10 +56,157 @@ "text": "Diabetes Percentages\nThe final data set comes from the CDC Diabetes Atlas and contains the estimated prevalence of diabetes in each county of the United States, by year. The data set also includes the upper and lower estimated limits, see the previous post for an explanation of how these numbers are calculated. The data was downloaded by year, and then merged into one data set for the project.\nView greeter script here\n\n\n\nUS Diabetes Data\n\n\nYear\nCounty Fips\nDiabetes Percentage\nDiabetes Lower Limit\nDiabetes Upper Limit\n\n\n\n\n2010\n01001\n11.2\n8.8\n13.9\n\n\n2010\n01003\n10.2\n8.7\n11.9\n\n\n2010\n01005\n13.0\n10.6\n15.9\n\n\n2010\n01007\n10.6\n8.2\n13.3\n\n\n2010\n01009\n12.6\n9.8\n15.7\n\n\n2010\n01011\n16.1\n12.4\n20.4" }, { - "objectID": "posts/2021-02-26_tidytuesday-hbcu-enrollment/tidytuesday-2021-week-6-hbcu-enrolment.html", - "href": "posts/2021-02-26_tidytuesday-hbcu-enrollment/tidytuesday-2021-week-6-hbcu-enrolment.html", - "title": "TidyTuesday 2021 Week 6: HBCU Enrollment", + "objectID": "posts/2020-06-22_excel-data-multiple-headers/importing-excel-data-with-multiple-header-rows.html", + "href": "posts/2020-06-22_excel-data-multiple-headers/importing-excel-data-with-multiple-header-rows.html", + "title": "Importing Excel Data with Multiple Header Rows", "section": "", - "text": "Introduction\nRecently I was struggling to find a data project to work on, I felt a bit stuck with some of my current projects, so I begun to scour the internet to find something to work on. I stumbled upon (TidyTuesday)[https://github.com/rfordatascience/tidytuesday] a weekly project where untidy data is posted from various sources, for the goal of practicing cleaning and visualizing. There is not right or wrong answers for TidyTuesday, this was exactly what I was looking for! This week (well by the time this was posted, a few weeks ago) the data set was about Historically Black Colleges and Universities. Within the posted data there were a few different data sets, I chose to work with the set dealing with High school Graduation rates, throughout this post I will explain my steps for cleaning and then present a few different graphs. It should also be noted that in the first section my code blocks will build upon themselves, so the same code will be duplicated as I add more steps to it.\n\n\nLoad Data\nIn this first block we will load some required libraries as well as load in the raw data. This dataset contains data for Highschool graduation rates by race. One thing to point out here is the use of import::from(), will its use here is a bit overkill, it was more for my practice. In this case I am importing the function %nin from the Hmisc package, which in the opposite of the function %in% from base R.\n\nlibrary(dplyr)\nlibrary(ggplot2)\n\nimport::from(Hmisc, `%nin%`)\n\nhs_students_raw <- readxl::read_xlsx(\"104.10.xlsx\", sheet = 1)\n\nglimpse(hs_students_raw)\n\nRows: 48\nColumns: 19\n$ Total <dbl> 1910…\n$ `Total, percent of all persons age 25 and over` <dbl> 13.5…\n$ `Standard Errors - Total, percent of all persons age 25 and over` <chr> \"(—)…\n$ White1 <chr> \"—\",…\n$ `Standard Errors - White1` <chr> \"(†)…\n$ Black1 <chr> \"—\",…\n$ `Standard Errors - Black1` <chr> \"(†)…\n$ Hispanic <chr> \"—\",…\n$ `Standard Errors - Hispanic` <chr> \"(†)…\n$ `Total - Asian/Pacific Islander` <chr> \"—\",…\n$ `Standard Errors - Total - Asian/Pacific Islander` <chr> \"(†)…\n$ `Asian/Pacific Islander - Asian` <chr> \"—\",…\n$ `Standard Errors - Asian/Pacific Islander - Asian` <chr> \"(†)…\n$ `Asian/Pacific Islander - Pacific Islander` <chr> \"—\",…\n$ `Standard Errors - Asian/Pacific Islander - Pacific Islander` <chr> \"(†)…\n$ `American Indian/\\r\\nAlaska Native` <chr> \"—\",…\n$ `Standard Errors - American Indian/\\r\\nAlaska Native` <chr> \"(†)…\n$ `Two or more race` <chr> \"—\",…\n$ `Standard Errors - Two or more race` <chr> \"(†)…\n\n\nNow we are going to start cleaning the data. First I am going to filter for years 1985 and up, prior to this year the data set is a bit spardic, so to keep it clean I am only going to look at 1985 and up. There are also 3 odd years (19103,19203,19303) that I am not sure what those are so I will remove that data as well.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303))\n\nNext I am going to convert all columns to be numeric, because of some blanks in the original import all of the columns read in as characters instead of numeric.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric))\n\nNext I am going to rename the columns. First I rename the column Total, into year, as this column holds the year! Then I use stringr::str_remove_all to remove the long phrase ‘percent of all persons age 25 and over’, as well as the number 1. For some reason the Black and White columns each have a number 1 at the end, I think this is for some sort of footnote but we will just remove it.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n )\n\nThen I am going to drop the column ‘Total - Asian/Pacific Islander’, each of these races is stored in a seperate column so if I needed the total later for some reason I could calculate it. I am also going to drop the string “Asian/Pacific Islander -”, from the begin of each of those columns, so they will now tell me just which race each column refers too.\n\nhs_students <- hs_students_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n )\n\nI now simply pivot the data longer. A nice trick I learned since I want to pivot everything expect the year column is to use the minus sign to select every column expect the year column in the pivot.\n\nhs_students_long <- hs_students %>% \n tidyr::pivot_longer(-year)\n\nWith the data now in long form I am going to separate the automatically generate name column into two columns titled, stat and race. The data contains both the percent that graduated and the standard error. Then I replace all the NA’s in the stat column with Total, as these are the total percentage and the other rows will be the standard error. Last I dropped the s from standard errors to make it singular.\n\nhs_students_long <- hs_students %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n )\n\nI know pivot the date back to wide form, and use the Janitor package to clean the column names. This puts them in lowercase with _ for spaces.\n\nhs_students_wide <- hs_students_long %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names()\n\nTo make graphing a bit easier with the scales package, I divide both columns by 100. We will see why in the graphs.\n\nhs_students_wide <- hs_students_long %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names() %>% \n mutate(across(total:standard_error, ~.x/100))\n\nIt’s now time to graph. Notice the use scales::label_percent() as the labels value for the y axis. If the numbers were left as the default values (75 vs 0.75) the percentages would have been 750%, which is obviously very wrong! I also use geom_ribbon to draw the standard error bars around each line. Notice the use of color = NA, by default the ribbon has outlines, I did not like this so doing color = NA turns them off. (It should be noted there are a few other solutions to turning them off but this seemed the easiest to me). Last we see the use of the aesthetics argument in scale_color_brewer. By setting this we match the color and fill to be the same color, without setting this, the colors of the error bars and lines don’t match!\n\nhs_students_wide <- hs_students_wide %>% \n mutate(\n ymax = total - standard_error\n ,ymin = total + standard_error\n )\n\ng1 <- hs_students_wide %>% \n filter(race != \"Total\") %>% \n ggplot(aes(x = year, y = total, group = race, color = race)) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = race), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\")) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Race\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Race\" \n ,fill = \"Race\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n \ng1\n\n\n\n\n\n\nLoad Male/Female Data\nNow the file also contains the same information but split by male and female. I am going to load in that data.\n\nmale_hs_raw <- readxl::read_excel(\"104.10.xlsx\", sheet = 3)\nfemale_hs_raw <- readxl::read_excel(\"104.10.xlsx\", sheet = 5)\n\nHere I will use the same manipulations as above, the only addition is adding a column for sex.\n\nmale_hs <- male_hs_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n ) %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n ,sex = \"Male\"\n )\n\n\nfemale_hs <- female_hs_raw %>% \n filter(Total >= 1985) %>% \n filter(Total %nin% c(19103, 19203, 19303)) %>% \n mutate(across(everything(), as.numeric)) %>% \n rename(year = Total) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\", percent of all persons age 25 and over|1\"\n )\n ) %>% \n select(-contains(\"Total - Asian/Pacific Islander\")) %>% \n rename_with(\n ~stringr::str_remove_all(\n .\n ,\"Asian/Pacific Islander - \"\n )\n ) %>% \n tidyr::pivot_longer(-year) %>% \n tidyr::separate(name, c(\"stat\", \"race\"), sep = \"- \", fill = \"left\") %>% \n tidyr::replace_na(list(stat = \"Total\")) %>% \n mutate(\n across(\n stat\n ,~stringr::str_replace(\n .\n ,\"Standard Errors\"\n ,\"Standard Error\"\n )\n )\n ,sex = \"Female\"\n )\n\nHere we will combine the two data frames and then pivot to our final graphing form.\n\nmale_female_hs_wide <- male_hs %>% \n bind_rows(female_hs) %>% \n tidyr::pivot_wider(names_from = stat, values_from = value) %>% \n janitor::clean_names() %>% \n mutate(across(total:standard_error, ~.x/100)) %>% \n mutate(\n ymax = total - standard_error\n ,ymin = total + standard_error\n )\n\nLets first graph the total for Male and Female graduation rates.\n\ng2 <- male_female_hs_wide %>% \n filter(race == \"Total\") %>% \n ggplot(aes(x = year, y = total, group = sex, color = sex)) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = sex), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\")) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Sex\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Sex\" \n ,fill = \"Sex\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n\ng2\n\n\n\n\nNow I am going to graph by Sex and Race.\n\nrace_filter <- c(\"White\", \"Black\", \"Hispanic\")\n\nmake_label <- function(label){\n # browser()\n result <- stringr::str_split(label, \"\\\\.\")\n unlist(lapply(result, function(x) paste(x[2],x[1])))\n}\n\n\ng2 <- male_female_hs_wide %>% \n filter(race %in% race_filter) %>% \n ggplot(aes(x = year, y = total, group = interaction(sex,race), color = interaction(sex,race))) +\n geom_ribbon(aes(ymax = ymax, ymin = ymin, fill = interaction(sex,race)), alpha = 0.3, color = NA) +\n geom_line() +\n scale_x_continuous(breaks = seq(1985,2016,3)) +\n scale_y_continuous(labels = scales::label_percent()) +\n scale_color_brewer(palette = \"Dark2\", aesthetics = c(\"color\", \"fill\"), labels = make_label) +\n theme_bw() +\n labs(\n x = NULL\n ,y = NULL\n ,title = glue::glue(\"Percentage of High School Graduates by Race and Sex\"\n ,\"\\n\"\n ,\"1985 - 2016\")\n ,color = \"Race & Sex\" \n ,fill = \"Race & Sex\"\n ) +\n theme(\n plot.title = element_text(hjust = 0.5)\n ,legend.title = element_text(hjust = 0.5)\n )\n\ng2\n\n\n\n\n\n\nConclusion\nWhile I am sure there is much more that could be done with this data this is where I am going to stop for today. Our graphs clearly show a divide in graduation rates by race, however Sex does not seem to have much of an effect on graduation rates.\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2021,\n author = {Belanger, Kyle},\n title = {TidyTuesday 2021 {Week} 6: {HBCU} {Enrollment}},\n date = {2021-02-26},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2021. “TidyTuesday 2021 Week 6: HBCU\nEnrollment.” February 26, 2021." + "text": "Problem\nRecently I tried to important some Microsoft Excel data into R, and ran into an issue were the data actually had two different header rows. The top row listed a group, and then the second row listed a category within that group. Searching goggle I couldn’t really find a good example of what I was looking for, so I am putting it here in hopes of helping someone else!\n\n\nExample Data\nI have created a small Excel file to demonstrate what I am talking about. Download it here. This is the data from Excel. \n\n\nCheck Data\nFirst we will read the file in using the package readxl and view the data without doing anything special to it.\n\nlibrary(readxl) # load the readxl library\nlibrary(tidyverse) # load the tidyverse for manipulating the data\nfile_path <- \"example_data.xlsx\" # set the file path\nds0 <- read_excel(file_path) # read the file\nds0\n\n# A tibble: 7 × 7\n Name `Test 1` ...3 ...4 `Test 2` ...6 ...7 \n <chr> <chr> <chr> <chr> <chr> <chr> <chr>\n1 <NA> Run 1 Run 2 Run 3 Run 1 Run 2 Run 3\n2 Max 22 23 24 25 26 27 \n3 Phoebe 34 34 32 34 51 12 \n4 Scamp 35 36 21 22 23 24 \n5 Chance 1234 1235 1236 1267 173 1233 \n6 Aimee 420 123 690 42 45 12 \n7 Kyle 22 23 25 26 67 54 \n\n\n\n\nNew Header Names\n\nStep 1\nFirst lets read back the data, this time however with some options. We will set the n_max equal to 2, to only read the first two rows, and set col_names to FALSE so we do not read the first row as headers.\n\nds1 <- read_excel(file_path, n_max = 2, col_names = FALSE)\nds1\n\n# A tibble: 2 × 7\n ...1 ...2 ...3 ...4 ...5 ...6 ...7 \n <chr> <chr> <chr> <chr> <chr> <chr> <chr>\n1 Name Test 1 <NA> <NA> Test 2 <NA> <NA> \n2 <NA> Run 1 Run 2 Run 3 Run 1 Run 2 Run 3\n\n\n\n\nStep 2\nNow that we have our headers lets first transpose them to a vertical matrix using the base function t(), then we will turn it back into a tibble to allow us to use tidyr fill function.\n\nnames <- ds1 %>%\n t() %>% #transpose to a matrix\n as_tibble() #back to tibble\nnames\n\n# A tibble: 7 × 2\n V1 V2 \n <chr> <chr>\n1 Name <NA> \n2 Test 1 Run 1\n3 <NA> Run 2\n4 <NA> Run 3\n5 Test 2 Run 1\n6 <NA> Run 2\n7 <NA> Run 3\n\n\nNote that tidyr fill can not work row wise, thus the need to flip the tibble so it is long vs wide.\n\n\nStep 3\nNow we use tidyr fill function to fill the NA’s with whatever value it finds above.\n\nnames <- names %>% fill(V1) #use dplyr fill to fill in the NA's\nnames\n\n# A tibble: 7 × 2\n V1 V2 \n <chr> <chr>\n1 Name <NA> \n2 Test 1 Run 1\n3 Test 1 Run 2\n4 Test 1 Run 3\n5 Test 2 Run 1\n6 Test 2 Run 2\n7 Test 2 Run 3\n\n\n\n\nStep 4\nThis is where my data differed from many of the examples I could find online. Because the second row is also a header we can not just get rid of them. We can solve this using paste() combined with dplyr mutate to form a new column that combines the first and second column.\n\nnames <- names %>%\n mutate(\n new_names = paste(V1,V2, sep = \"_\")\n )\nnames\n\n# A tibble: 7 × 3\n V1 V2 new_names \n <chr> <chr> <chr> \n1 Name <NA> Name_NA \n2 Test 1 Run 1 Test 1_Run 1\n3 Test 1 Run 2 Test 1_Run 2\n4 Test 1 Run 3 Test 1_Run 3\n5 Test 2 Run 1 Test 2_Run 1\n6 Test 2 Run 2 Test 2_Run 2\n7 Test 2 Run 3 Test 2_Run 3\n\n\n\n\nStep 4a\nOne more small clean up task, in the example data the first column header Name, did not have a second label, this has created a name with an NA attached. We can use stringr to remove this NA.\n\nnames <- names %>% mutate(across(new_names, ~str_remove_all(.,\"_NA\")))\nnames\n\n# A tibble: 7 × 3\n V1 V2 new_names \n <chr> <chr> <chr> \n1 Name <NA> Name \n2 Test 1 Run 1 Test 1_Run 1\n3 Test 1 Run 2 Test 1_Run 2\n4 Test 1 Run 3 Test 1_Run 3\n5 Test 2 Run 1 Test 2_Run 1\n6 Test 2 Run 2 Test 2_Run 2\n7 Test 2 Run 3 Test 2_Run 3\n\n\n\n\nStep 5\nNow that are new name column is the way we want it, we can use dpylrs pull to return a vector of just that column\n\nnames <- names %>% pull(new_names)\n\n\n\n\nFinal Data\nNow that we have a vector of column names lets read in the original file using our new names. We set the skip argument to 2, to skip the first two rows, and set col_names equal to our vector of names. Note the last step I used the janitor package to provide names in snake case (the default for the clean names function.)\n\nexample_data <- readxl::read_excel(file_path, col_names = names, skip = 2) %>%\n janitor::clean_names()\nexample_data\n\n# A tibble: 6 × 7\n name test_1_run_1 test_1_run_2 test_1_run_3 test_2_run_1 test_2_run_2\n <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 Max 22 23 24 25 26\n2 Phoebe 34 34 32 34 51\n3 Scamp 35 36 21 22 23\n4 Chance 1234 1235 1236 1267 173\n5 Aimee 420 123 690 42 45\n6 Kyle 22 23 25 26 67\n# ℹ 1 more variable: test_2_run_3 <dbl>\n\n\n\n\nOther Help\nWhile searching for some solutions to my problem I found two good examples, however neither did exactly what I was trying to do.\n\nThis post by Lisa Deburine is pretty close to what I was trying to accomplish and gave me a good starting point. Read it here\nThis post by Alison Hill solves a simlar but slightly different problem. In her data the 2nd row is actually metadata not a second set of headers. Read it here\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Importing {Excel} {Data} with {Multiple} {Header} {Rows}},\n date = {2020-06-22},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “Importing Excel Data with Multiple Header\nRows.” June 22, 2020." + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", + "title": "Line Graphs and Interactivity", + "section": "", + "text": "Today’s post is all about line graphs using both ggplot for a static graph as well as a package called plotly for interactivity (more on this later). The example graph and data is again coming from Tableau for Healthcare, Chapter 10." + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", + "title": "Line Graphs and Interactivity", + "section": "Load Libraries", + "text": "Load Libraries\nAs always first step is to load in our libraries, I am using quite a few here, some are a bit overkill for this example but I wanted to play around with some fun features today.\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr) # data manipulation\nlibrary(tidyr) # tidy data\nlibrary(lubridate) #work with dates\nlibrary(stringr) # manipulate strings\nlibrary(plotly)" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", + "title": "Line Graphs and Interactivity", + "section": "Import Data", + "text": "Import Data\nNext lets import our data, this week we are using the sheet Flu Occurrence FY2013-2016. I am unsure if this is form a real data set or not but it is good for demonstration purposes! After importing we can glimpse at our data to understand what is contained within.\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"05 - Flu Occurrence FY2013-2016\"\n )\nds %>% glimpse()\n\nRows: 48\nColumns: 4\n$ Date <dttm> 2012-10-27, 2012-11-24, …\n$ `Tests (+) for Influenza (count)` <dbl> 995, 3228, 22368, 24615, …\n$ `Total Respiratory Specimens Tested (count)` <dbl> 18986, 24757, 66683, 7561…\n$ `% Tests (+) for Influenza` <dbl> 0.05240704, 0.13038737, 0…" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", + "title": "Line Graphs and Interactivity", + "section": "Transform Data", + "text": "Transform Data\nI went a bit overboard today with renaming the variables. I wanted to practice writing a function and while it might not be the prettiest or the best way to do this, it worked for what I was trying to accomplish. Note the use of sapply, which lets us run the function on each column name.\n\nformat_names <- function(x) {\n #Fucntion to set all names to lower case, and strip unneeded characters\n x <- tolower(x)\n x <- str_replace_all(x,c(#set each pattern equal to replacement\n \" \" = \"_\"\n ,\"\\\\(\\\\+\\\\)\" = \"pos\" #regualr experssion to match (+)\n ,\"\\\\(\" = \"\"\n ,\"\\\\)\" = \"\"\n ,\"\\\\%\" = \"pct\"\n )\n ) \n }\n\n#run the format name function on all names from DS\ncolnames(ds) <- sapply(colnames(ds),format_names) \n\nNow is were the fun really starts! For this particular data set there are a couple things we need to add to replicate the example. In the original data set the date is stored with month, day, and year; the day is irrelevant and we need to pull out the month as well as the year. For this we can use the lubridate package, first we pull out the month and set it as a factor. For this example our year actually starts in October, so we set our factor to start at October (10), and end with September (9). We then pull out the year, which presents us with a different problem. Again our year starts in October, instead of January. To solve this I have created a variable called date adjustment, in this column is our month is 10 or greater, we will place a 1, if not a 0. We then set our fiscal year to be the actual year plus the date adjustment, this allows us to have our dates in the right fiscal year. Last the percent column is currently listed as a decimal, so we will convert this to a percentage.\n\n# split date time\nds1 <- ds %>% mutate(\n #create month column, then set factors and labels to start fiscal year in Oct\n month = month(ds$date)\n ,month = factor(month\n ,levels = c(10:12, 1:9)\n ,labels = c(month.abb[10:12],month.abb[1:9]))\n ,year = year(ds$date)\n ,date_adjustment = ifelse(month(ds$date) >= 10, 1,0 )\n ,fiscal_year = factor(year + date_adjustment)\n #convert % Pos from decmial to pct\n ,pct_tests_pos_for_influenza = round(pct_tests_pos_for_influenza * 100, digits = 0)\n )\n\nds1 %>% glimpse()\n\nRows: 48\nColumns: 8\n$ date <dttm> 2012-10-27, 2012-11-24, 2012…\n$ tests_pos_for_influenza_count <dbl> 995, 3228, 22368, 24615, 1179…\n$ total_respiratory_specimens_tested_count <dbl> 18986, 24757, 66683, 75614, 5…\n$ pct_tests_pos_for_influenza <dbl> 5, 13, 34, 33, 23, 17, 11, 6,…\n$ month <fct> Oct, Nov, Dec, Jan, Feb, Mar,…\n$ year <dbl> 2012, 2012, 2012, 2013, 2013,…\n$ date_adjustment <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,…\n$ fiscal_year <fct> 2013, 2013, 2013, 2013, 2013,…" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", + "title": "Line Graphs and Interactivity", + "section": "GGplot", + "text": "GGplot\nThe graph here is pretty straight forward with one exception, group! For this line graph we want ggplot to connect the lines of the same year, if we do not explicitly state this using the group mapping, ggplot will try to connect all the lines together, which of course is not at all what we want!\n\ng1 <- ds1 %>% \n ggplot(aes(x = month, y = pct_tests_pos_for_influenza, color = fiscal_year\n ,group = fiscal_year)) +\n geom_line() +\n labs(\n x = NULL\n ,y = \"% Tests (+) for Influenza\"\n ,color = NULL\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza \\nOctober - September \\nFor Flu Seasons 2013 - 2016\"\n ) +\n theme_classic() +\n scale_y_continuous(breaks = seq(0,40,5)) +\n scale_color_manual(values = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\"))\n\ng1" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", + "title": "Line Graphs and Interactivity", + "section": "plotly", + "text": "plotly\nOne of the nice features of Tableau is the fact the graphs are interactive, while a good graph should speak for itself, end users love pretty things. I have been experimenting with Plotly, which has an open source package for R (as well as many other programming languages!). This example only just scratches the surface, but there will be many more to come!\n\ng2 <- ds1 %>% \n plot_ly(x = ~month, y = ~pct_tests_pos_for_influenza, type = \"scatter\", mode = \"lines\" \n ,color = ~fiscal_year\n ,colors = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\")\n , hoverinfo = 'y') %>% \n layout(xaxis = list(\n title = \"\"\n )\n ,yaxis = list(\n title = \"% Tests (+) for Influenza\"\n )\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza\"\n ,legend = list(\n x = 100\n ,y = 0.5\n ) \n \n )\n\ng2" + }, + { + "objectID": "posts/2020-01-04_my-start-to-r/my-start-to-r.html", + "href": "posts/2020-01-04_my-start-to-r/my-start-to-r.html", + "title": "My Start to R", + "section": "", + "text": "Today starts my attempt at sharing my R journey with the world! I have been learning R off and on now since late 2019, I have begun to take it much more serious as I work through my Data Analytics class at UCF. My love for all things numbers and graphs has really blossomed, and I am choosing to share that love with anyone who cares to read. I will not claim to be the best at R, or any programming for that matter, but these are my attempts. Each post in this serious will be replicated a graph created in Tableau from the book Tableau for Healthcare. Todays graph is a simple horizontal bar chart, in transferring to both a new blog site and computer I have unfortunately lost the original bar graph, but trust me the one I created looks just like it.\n\nLoad Libraries\n\nlibrary(tidyr)\nlibrary(magrittr)\nlibrary(ggplot2)\nlibrary(stringr)\nlibrary(dplyr)\n\n\n\nImport Data\n\nds <- readxl::read_excel(\n path = \"Tableau 10 Training Practice Data.xlsx\" \n ,sheet = \"02 - Patient Falls-Single Hosp\"\n )\n\n\n\nClean Data Names\n\n#should make reusable forumla at later time\nnames(ds) <- tolower(names(ds))\nnames(ds) <- str_replace_all(names(ds),\" \", \"_\")\n\n\n\nConvert Data to ‘Long Form’\n\nds1 <- ds %>% \n gather(\"patient_falls_no_injury_rate\" , \"patient_falls_with_injury_rate\"\n ,key = \"injury\" \n ,value = \"rate\" ) %>% \n mutate(injury = (injury == \"patient_falls_with_injury_rate\"))\n\n\n\nGraph 5.1\n\nb1 <- ds %>% \n ggplot(mapping = aes(x = reorder(type_of_care,total_patient_falls_rate ) , y = total_patient_falls_rate)) +\n geom_col(fill = \"#2b83ba\") + \n coord_flip() +\n scale_y_continuous(breaks = NULL) +\n theme(axis.ticks = element_blank()) +\n labs(title = \"Rate of Patient Falls (per 1,000 Pateint Days)\\nby Type of Care for FY2017\"\n ,x = NULL\n ,y = NULL\n ) +\n theme_classic() +\n geom_text(aes(label = format(total_patient_falls_rate, digits = 2)), nudge_y = -.25, color = \"white\")\n \nb1\n\n\n\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {My {Start} to {R}},\n date = {2020-01-24},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “My Start to R.” January 24, 2020." + }, + { + "objectID": "blog.html", + "href": "blog.html", + "title": "Posts", + "section": "", + "text": "Reflex Testing using Machine Learning in the Clinical Laboratory\n\n\nThis post contains the abstract of my Capstone for the Doctorate of Health Science program at Campbell University.\n\n\n\n\n\n\n\n\n\nOct 12, 2023\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nTidyTuesday 2021 Week 6: HBCU Enrollment\n\n\nTidyTuesday 2021 Week 6: HBCU Enrollment. Posts looks at tidying the data ,as well as making some graphs about the data.\n\n\n\n\nTidyTuesday\n\n\n\n\n\n\n\n\n\n\n\nFeb 26, 2021\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nConverting From Blogdown to Distill\n\n\nA meta post on transferring from a blogdown to distill blog site\n\n\n\n\nDistill\n\n\n\n\n\n\n\n\n\n\n\nJan 12, 2021\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nDiabetes in Rural North Carolina : Data Collection and Cleaning\n\n\nThis is the second post in the series exploring Diabetes in rural North Carolina. This post will explore the data used for this project, from collection, cleaning, and analysis ready data.\n\n\n\n\n\n\n\n\n\nJul 25, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nDiabetes in Rural North Carolina : Exploring Prevalence Trends\n\n\nThis post introduces the exploration of the Diabetes epidemic in North Carolina\n\n\n\n\n\n\n\n\n\nJun 25, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nImporting Excel Data with Multiple Header Rows\n\n\nA solution for importing Excel Data that contains two header rows.\n\n\n\n\n\n\n\n\n\nJun 22, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nBasic Exploration of WHO Tuberculosis Data\n\n\nToday I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables.\n\n\n\n\n\n\n\n\n\nFeb 13, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nLine Graphs and Interactivity\n\n\nTableau for Healthcare Chapter 10. Static and Interactive examples\n\n\n\n\n\n\n\n\n\nFeb 10, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nFacets and a Lesson in Humility\n\n\nA look at Tableau for Healthcare Chapter 8. Table Lens graph.\n\n\n\n\n\n\n\n\n\nJan 29, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nMy Start to R\n\n\nA short introduction to my blog, and R journey.\n\n\n\n\n\n\n\n\n\nJan 24, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\nNo matching items" + }, + { + "objectID": "index.html", + "href": "index.html", + "title": "About", + "section": "", + "text": "I am a highly accomplished Medical Technologist with an extensive 14-year track record in the medical industry, consistently demonstrating the ability to effectively bridge the divide between medical professionals and information technologists. Proficient in the application of machine learning techniques to enhance medical data analysis and adept at developing innovative R Shiny apps to streamline healthcare processes and improve patient outcomes." + }, + { + "objectID": "index.html#bio", + "href": "index.html#bio", + "title": "About", + "section": "", + "text": "I am a highly accomplished Medical Technologist with an extensive 14-year track record in the medical industry, consistently demonstrating the ability to effectively bridge the divide between medical professionals and information technologists. Proficient in the application of machine learning techniques to enhance medical data analysis and adept at developing innovative R Shiny apps to streamline healthcare processes and improve patient outcomes." + }, + { + "objectID": "index.html#education", + "href": "index.html#education", + "title": "About", + "section": "Education", + "text": "Education\nCampbell University | Buies Creek, NC\nDoctorate of Health Sciences | August 2020 - May 2023\nUniversity of Central Florida | Orlando, FL\nM.S. in Healthcare Informatics | August 2018 - May 2020\nWestern Carolina University | Cullowhee, NC\nB.S. in Clinical Laboratory Science | August 2005 - May 2009" + }, + { + "objectID": "index.html#experience", + "href": "index.html#experience", + "title": "About", + "section": "Experience", + "text": "Experience\nRoche Diagnositcs | IT Workflow Consultant | Oct 2021 - Present\nRoche Diagnostics | Field Application Specialist | July 2012 - Sept 2021\nCape Fear Valley Hospital | Lead Medical Laboratory Scientist | June 2011 - July 2012\nCape Fear Valley Hospital | Medical Laboratory Scientist | June 2009 - June 2011" + }, + { + "objectID": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", + "href": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", + "title": "Facets and a Lesson in Humility", + "section": "", + "text": "Todays post is a lesson in Facets, as well as humility. The task this week was to replicate the graph in Chapter 8 of Tableau for Healthcare in R. The graph in question is called a Table Lens (This is the name the book uses, however I did have trouble finding this name in Google searches), it is a collection of charts with a common theme, this time looking at countries in various WHO regions and some statistics associated with mortality as well as health expenditure. I say this is a lesson in humiltiy as I have read through the excellent book R for Data Science, and yet the idea of faceting a ggplot graph slipped my mind. This ended with hours of trying to find a package in R to line up graphs, and way more time then I care to admit spent on getting things prefect. I did find such a package called cowplots, which can be found here. While this is an excellent package, its use was unecessary and I reverted back to using the excellent facet feature of GGplot, which can be seen below! \n\nLoad Libraries\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr)\nlibrary(tidyr)\n\n\n\nImport Data\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"03 - WHO Life Expect & Mort\"\n )\n\n\n\nClean Names and Transform\n\nvarnames <- c(\"who_region\", \"country\", \"year\" , \"sex\" , \"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\")\nnames(ds) <- varnames\n\n# Order Countries based on Life Expectancy at Birth\n\nds$country <- factor(ds$country, levels = ds$country[order(ds$life_expect_birth)]) \n\n#To \"Long\" Form\n\nds1 <- ds %>% pivot_longer(5:8)#select columns 5 throuh 8, leave new columns at default names\n\n# Set up labels for Facet, as well as function for Facet Labeller\n\nfacet_labels <- list(\n\"life_expect_birth\" = \"Life Expectancy at Birth \" \n,\"neo_mort\" = \"Neonatal Mortality Rate\" \n,\"under_five_mort\" = \"Under-Five Mortality Rate\"\n,\"health_expenditure\" = \"Health Expenditure per Capita (US$)\" )\n\nvariable_labeller <- function(variable,value){\n return(facet_labels[value])\n}\n\n\n\nGraphs\n\nhightlight_countries <- (c(\"Mauritania\", \"South Africa\")) \n\ng1 <- ds1 %>% filter(who_region == \"Africa\") %>% \n mutate(name = factor(name, levels = c(\"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\"))\n ,highlight = country %in% hightlight_countries) %>% \n ggplot(aes(x = country, y = value, fill = highlight)) +\n geom_col(show.legend = FALSE) +\n coord_flip() +\n labs(\n title = \"World Bank Life Expectancy, Neonatal & Under-Five Mortality Rates, and Health Expenditure Analysis\"\n ,x = NULL\n ,y = NULL\n ) +\n facet_grid(~name, scales = \"free_x\",labeller = variable_labeller) +\n theme_bw() +\n geom_text(aes(label = round(value, 0)), hjust = 0) +\n scale_y_continuous(expand = expand_scale(mult = c(0,0.2))) +\n scale_fill_manual(values = c(\"TRUE\" = \"#fc8d59\", \"FALSE\" = \"#2b83ba\"))\ng1\n\n\n\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Facets and a {Lesson} in {Humility}},\n date = {2020-01-29},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “Facets and a Lesson in Humility.”\nJanuary 29, 2020." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "", + "text": "Today I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "A different way to look", + "text": "A different way to look\nCould there be any correlation between a countries population and the amount of TB cases? Maybe its just as simple as having more people means more people to get sick? Lets bring in another data set, again from World Bank Found Here, this contains total population data by country.\n\npop_raw <- read.csv(\"API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv\"\n ,skip = 4)\n#If this looks famialer its because it is, the data set looks very simalar to the GDP data\n#In the future this could be moved to a function to allow cleaning much easier\npop1 <- pop_raw %>% \n select(-(Indicator.Name:X2012)\n ,-X2019\n ,-X) %>% \n pivot_longer(cols = X2013:X2018\n ,names_to = \"year\" \n ,values_to = \"population\") %>% \n mutate_if(is.character\n ,str_remove_all\n ,pattern = \"X(?=\\\\d*)\")\n\n#now lets combine this into are overall data set\n\nwho_combined <- who_combined %>% \n mutate(year = as.character(year)) %>% \n left_join(y = pop1) %>% \n select(-Country.Name)\n\n#now lets Graph again\n\ng3 <- who_combined %>% \n filter(str_detect(age,\"014|15plus|u\"),year == 2018) %>% \n group_by(country) %>% \n summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)\n ,population = first(population)/1000000\n ,who_region = first(g_whoregion)) %>% \n mutate(\n label = ifelse((population>250), yes = as.character(country),no = \"\")) %>%\n ggplot(aes(x = population, y = sum_tb_cases )) +\n geom_point(aes(color = who_region)) +\n ggrepel::geom_text_repel(aes(x = population, y = sum_tb_cases, label = label)) +\n labs(\n title = \"Total TB Cases by Country compared to Gross Domestic Product (GDP)\"\n ,x = \"Population (in Millions)\"\n ,y = \"Total TB Case (per 10,000 cases)\"\n ,color = \"WHO Region\"\n ) +\n theme_bw() \n\n g3 \n\n\n\n\n\nFurther Exploration\nMaybe we are on to something, the more people, the more likely they are to get sick! However India seems to have a very large number of cases so lets break these cases down further by age group for 2018.\n\ng4 <- who_combined %>% \n filter(year == 2018\n ,country == \"India\"\n ,!(str_detect(age,\"15plus|ageunk|u|014\"))\n ,(str_detect(sex,\"m|f\"))\n ) %>% \n mutate(age_range = glue::glue(\"{age_start} -- {age_end}\")) %>% \n ggplot(aes(x = reorder(age_range, as.numeric(age_start)), y = (values/1000), fill = sex)) +\n geom_col(position = \"dodge\") +\n labs(\n title = \"TB Case in India by age and gender 2018\"\n ,x = NULL\n ,y = \"Total Cases (per 1000)\"\n ,fill = \"Gender\") +\n scale_fill_manual(labels = c(\"Female\",\"Male\"), values = c(\"#e9a3c9\",\"#67a9cf\") )\n \ng4\n\n\n\n\nThere seems to be a huge spike in cases after adolescences. Females have a sharp decline the older they get, where as male case stay elevated with a slight decrease at 55." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "Last Exploration", + "text": "Last Exploration\nLets look at overall cases in India, going back to 1980 and see if there as been any trends. To get these numbers we will go back to our raw data and strip everything out expect the total count\n\ng5 <- who_raw %>% \n filter(country == \"India\") %>% \n select(year, c_newinc) %>% \n ggplot(aes(x = year, y = c_newinc/1000000)) +\n geom_line() +\n geom_point() +\n labs(\n title = \"New and Relapse Tuberculosis Cases In India \\n1980 -- 2018\"\n ,x = NULL\n ,y = \"Total Cases (in millions)\") +\n theme_bw() +\n theme(plot.title = element_text(hjust = 0.5)) + #center title \n scale_x_continuous(breaks = seq(1980,2020,5)) +\n scale_y_continuous(breaks = scales::pretty_breaks(n=10)) #different way to add tick marks\ng5\n\n\n\n\nCases were steadily rising from 1980 to 1990, then suddenly feel off. Starting in the early 2010s there was a sharp increase and the amount of new and relapse cases just keep growing." + }, + { + "objectID": "posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends.html", + "href": "posts/2020-06-25_diabetes-prevalence-in-nc/diabetes-in-rural-north-carolina-exploring-prevalence-trends.html", + "title": "Diabetes in Rural North Carolina : Exploring Prevalence Trends", + "section": "", + "text": "Update\n2022-15-03: Since this was posted the CDC has updated how county level diabetes prevalance is calculated. The data presented here is using previous calcualtions and may no longer be correct. More can be read here\n\n\nAbstract\nDiabetes is growing at an epidemic rate in the United States. In North Carolina alone, diabetes and prediabetes cost an estimated $10.9 billion each year (American Diabetes Asssociation, 2015). This post introduces the exploration of the Diabetes epidemic in North Carolina. Through a series of posts this project will examine various public data available on diabetes and explore possible solutions to address the rise of diabetes in North Carolina. This investigation stems from the Capstone project of my Health Care Informatics Masters program. This post will answer the following questions:\n\n\nWhat is the overall trend of diabetes prevalence in the United States?\n\n\n\n\nWhat is the trend of diabetes at a State Level and how does diabetes prevalence vary by state and region?\n\n\n\n\nHow do trends in diabetes prevalence vary across counties of North Carolina?\n\n\n\n\nIn which counties of North Carolina does the largest change in diabetes prevalence occur?\n\n\n\n\nHow does change in diabetes prevalence compare between rural and urban counties?\n\n\n\n\nEnviroment\nThis section contains technical information for deeper analysis and reproduction. Casual readers are invited to skip it.\nPackages used in this report.\n\n\nCode\n# Attach these packages so their functions don't need to be qualified: http://r-pkgs.had.co.nz/namespace.html#search-path\nlibrary(magrittr) # enables piping : %>%\nlibrary(dplyr) # data wrangling\nlibrary(ggplot2) # graphs\nlibrary(tidyr) # data tidying\nlibrary(maps)\nlibrary(mapdata)\nlibrary(sf)\nlibrary(readr)\n\n\nDefinitions of global object (file paths, factor levels, object groups ) used throughout the report.\n\n\nCode\n#set ggplot theme\nggplot2::theme_set(theme_bw())\n\n\n\n\nData\nThe data for this exploration comes from several sources:\n\nThe Diabetes data set for state and county levels were sourced from the US Diabetes Surveillance System; Division of Diabetes Translation - Centers for Disease Control and Prevention. The data was downloaded one year per file, and compiled into a single data set for analysis.\nThe Diabetes data set for National level data were sourced from the CDC’s National Health Interview Survey (NHIS)\nThe list of rural counties was taken from The Office of Rural Health Policy, the list is available here\n\n\n\n\nCode\n# load the data, and have all column names in lowercase\n\nnc_diabetes_data_raw <- read_csv(\"https://raw.githubusercontent.com/mmmmtoasty19/nc-diabetes-epidemic-2020/62bdaa6971fbdff09214de7c013d40122abbe40d/data-public/derived/nc-diabetes-data.csv\") %>% \n rename_all(tolower)\n\nus_diabetes_data_raw <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/62bdaa6971fbdff09214de7c013d40122abbe40d/data-public/raw/us_diabetes_totals.csv\"\n ,skip = 2)\n\nrural_counties <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/rural-counties.csv\")\n\ncounty_centers_raw <- read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/raw/nc_county_centers.csv\", col_names = c(\"county\", \"lat\",\"long\"))\n\ndiabetes_atlas_data_raw <- read_csv(\"https://raw.githubusercontent.com/mmmmtoasty19/nc-diabetes-epidemic-2020/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/raw/DiabetesAtlasData.csv\"\n ,col_types = cols(LowerLimit = col_skip(), \n UpperLimit = col_skip(),\n Percentage = col_double()), skip = 2)\n\n\n\n\n\nCode\n# load in both US State Map and NC County Map\n\nnc_counties_map_raw <- st_as_sf(map(\"county\",region = \"north carolina\", plot = FALSE,fill = TRUE)) %>% \n mutate_at(\"ID\", ~stringr::str_remove(.,\"north carolina,\"))\n\nstate_map_raw <- st_as_sf(map(\"state\",plot = FALSE,fill = TRUE ))\n\nnc_cities <- st_as_sf(read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/nc_cities.csv\"),\n coords = c(\"long\", \"lat\")\n ,remove = FALSE\n ,agr = \"constant\"\n ,crs = 4326)\n\n\n\n\nData Manipulation\nThe combined data used in this anaylsis can be downloaded here. The only tweaks done here are to combine the rural counties column, and the data for creating maps.\n\nTweaks\n\n\n\nCode\ncounty_centers <- county_centers_raw %>% \n mutate_all(~stringr::str_replace_all(.,\n c(\"\\\\°\" = \"\"\n ,\"\\\\+\" = \"\"\n ,\"\\\\–\" = \"-\"\n )\n ) \n ) %>%\n mutate(across(c(\"lat\",\"long\"), ~iconv(.,from = 'UTF-8', to = 'ASCII//TRANSLIT'))\n ,across(c(\"lat\",\"long\"),~stringr::str_remove_all(.,\"\\\\?\"))) %>% \n mutate_at(c(\"lat\",\"long\"),as.numeric) %>%\n mutate(across(\"long\", ~(. * -1))) %>% \n mutate_at(\"county\", tolower)\n\n\n\n\nus_diabetes_data <- us_diabetes_data_raw %>% \n filter(Year >= 2000) %>% \n select( \"Year\",\"Total - Percentage\") %>% \n rename(year = Year , us_pct = `Total - Percentage`)\n\ndiabetes_atlas_data <- diabetes_atlas_data_raw %>% \n mutate_at(\"State\", tolower) %>% \n filter(Year >= 2000)\n\nstate_map_abb <- state_map_raw %>% \n left_join(read_csv(\"https://github.com/mmmmtoasty19/nc-diabetes-epidemic-2020/raw/b29bfd93b20b73a7000d349cb3b55fd0822afe76/data-public/metadata/state-abb.csv\") %>% \n mutate_at(\"state\", tolower)\n ,by = c(\"ID\" = \"state\") )\n\n\n\n\nMerge\n\n\n\nCode\n#join US totals to NC data \n\nnc_diabetes_data <- nc_diabetes_data_raw %>% \n mutate_at(\"county\", ~stringr::str_replace_all(.,\"Mcdowell\",\"McDowell\")) %>% \n mutate(\n rural = county %in% rural_counties$rural_counties\n ) %>% \n mutate_at(\"county\",tolower) %>% \n left_join(us_diabetes_data)\n\n\nnc_counties_map <- nc_counties_map_raw %>% \n left_join(nc_diabetes_data, by = c(\"ID\" = \"county\")) %>% \n left_join(county_centers, by = c(\"ID\" = \"county\")) %>% \n rename(\n center_long = long\n ,center_lat = lat)\n\nstate_map <- state_map_abb %>% \n left_join(diabetes_atlas_data, by = c(\"ID\" = \"State\")) %>% \n rename_all(tolower)\n\n\n\n\n\nOverall - National Level\n\n\nCode\nus_diabetes_data <- us_diabetes_data %>% \n mutate(\n change = lead(us_pct) - us_pct\n ,change = if_else(change > 0, TRUE, FALSE)\n ) %>% \n mutate_at(\"change\", ~stringr::str_replace_na(.,\"NA\"))\n\n\n\no_g1 <- us_diabetes_data %>% \n ggplot(aes(x = year, y = us_pct)) +\n geom_line(color= \"#D95F02\") +\n # geom_line(aes(color = change, group = 1)) +\n geom_point(shape = 21, size = 3,color= \"#D95F02\") +\n # geom_point(aes(color = change),shape = 21, size = 3) +\n scale_color_manual(values = c(\n \"TRUE\" = \"#D95F02\"\n ,\"FALSE\" = \"#7570B3\"\n ), guide = FALSE) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+), National Level\"\n ,x = NULL\n ,y = NULL\n ,caption = \"Note: Data from the CDC's National Health Interview Survey (NHIS)\"\n )\n\no_g1\n\n\n\n\n\nOverall, the national average for diagnosed diabetes sharply rose through the early 2000’s, leveling off around 2010. These numbers however, are estimates based on the self-reported response to the CDC’s National Health Interview Survey, and do not represent the actual confirmed diagnoses. The CDC estimates that 1 in 5 adults have undiagnosed diabetes, therefore the numbers reported by the NHIS are likely to underestimate the true prevalence (Centers for Disease Control and Prevention, 2020).\n\n\nOverall - State Level\nState and County level data on diabetes prevalence are taken from the CDC’s Behavioral Risk Factor Surveillance System (BRFSS). These results are based on the question “Has a doctor, nurse, or other health professional ever told you that you have diabetes?”. Women who only experienced diabetes during pregnancy were excluded from the counts. The BRFSS is an ongoing, monthly telephone survey of the non-institutionalized adults (aged 18 years or older) in each state. The year 2011 saw a major change to the methodology of the survey, which started to include homes without a landline phone. This change was expected to increase coverage of lower income, lower educational levels, and younger age groups, because these groups often exclusively rely on cellular telephones for personal communication.(Pierannunzi et al., 2012)\n\n\nCode\ns_g1 <- state_map %>% \n st_drop_geometry() %>% \n ggplot(aes(x = year, y = percentage, color = region)) +\n geom_line(aes(group = id ),alpha = 0.3,na.rm = TRUE) +\n geom_smooth(method = \"lm\", se = FALSE) +\n ggpmisc::stat_poly_eq(formula = y ~ + x ,\n aes(label = paste(..eq.label.., ..rr.label.., sep = \"~~~\")), \n parse = TRUE) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_color_brewer(palette = \"Dark2\"\n ,direction = -1\n ,labels = snakecase::to_title_case\n ) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+) \\nby State and Region\"\n ,x = NULL\n ,y = NULL\n ,color = \"Region\"\n ,caption = \"Regions from US Census Bureau\"\n ) \n\ns_g1\n\n\n\n\n\nThe above graph shows diabetes prevalence trends by state, grouped into regions based on the US Census classification regions. While all regions of the United states show positive growth in diabetes prevalence, the south exhibits a slightly higher growth rate, as well as the highest prevalence.\n\n\nCode\ns_g2 <- state_map %>% \n st_drop_geometry() %>% \n filter(region == \"south\") %>% \n mutate_at(\"id\", ~snakecase::to_title_case(.)) %>% \n ggplot(aes(x = year, y = percentage)) +\n geom_line(aes(group = id ),na.rm = TRUE, color= \"#D95F02\") +\n gghighlight::gghighlight(id == \"North Carolina\", label_params = list(vjust = 3)) +\n scale_y_continuous(breaks = seq(5,13,2)) +\n scale_x_continuous(minor_breaks = seq(2000,2016,1)) +\n labs(\n title = \"Percentage of Diagnosed Diabetes in Adults (18+) \\nSouth Region\"\n ,x = NULL\n ,y = NULL\n ,caption = \"Regions from US Census Bureau\"\n ) +\n theme()\n\ns_g2\n\n\n\n\n\nWhen focusing on the south region, North Carolina falls close to the middle of diabetes prevalence.\n\n\nOverall - North Carolina\nWhen examining the trajectory for North Carolina, we can see that it has been consistently higher than national average . We see that in 2016 there was a large spike in diagnosed cases; unfortunately this is the last available year so it is unclear whether the upward trend continues. The graph below compares state-level average to the national average. Notice that the trend line is slightly higher than in the previous graphs: this is due to the age cut offs used for National and State level data vs County Level data. Previous data used 18 years of age as a cutoff for classifying adults, whereas the county level data uses 20. Due to removing 18- and 19-year-olds from the population, who typically have less diagnosed cases of diabetes than those of older ages, the computed prevalence increases slightly.\n\n\nCode\nd1 <- nc_diabetes_data %>% \n group_by(year) %>% \n summarise(\n pct = mean(percentage)\n ,us_pct = mean(us_pct)\n ) %>% \n pivot_longer(\n cols = c(\"pct\", \"us_pct\")\n ,names_to = \"metric\"\n ,values_to = \"values\"\n ) %>% \n mutate(\n metric = factor(metric\n ,levels = c(\"pct\",\"us_pct\")\n ,labels = c(\"NC\", \"National\"))\n )\n\nnc_g1 <- d1 %>% \n ggplot(aes(x = year, y = values, color = metric)) +\n geom_line() +\n geom_point(shape = 21, size = 3) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_y_continuous(labels = function(x) paste0(x, \"%\")) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n ,title = \"Percent of Adults (20+) with Diagnosed Diabetes\"\n )\n\nnc_g1 \n\n\n\n\n\nWe see a spike in 2016, the last year for which the data are available. However, we should be careful with our interpretation of this pattern, because the examination of the county-level trajectories reveals an aberration in the trend that requires a more rigorous investigation.\n\n\nCode\nnc_g1a <- nc_diabetes_data %>% \n ggplot(aes(x = year, y = percentage)) +\n geom_line(aes(group = county),alpha = 0.4) +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n )\n\nnc_g1a\n\n\n\n\n\nWhile all of North Carolina has a higher prevalence than the national average, rural counties have systematically higher prevalence of diabetes than urban counties. Note that after 2011 both Urban and Rural counties break the upward trend exhibited in the previous 5 years. This could be explained by the addition of cell phones to the BRFS Survey as many rural areas are often lower income areas and may only rely on a cell phone for communication. As mentioned previously there is an odd spike in case in 2016 that can’t be explained by current documentation. For the purpose of this evaluation 2016 will be excluded from the county level data since the odd trend can not be explained and no further data is available to determine if this is a real spike or could be attributed to methodology change or data quality.\n\n\nCode\nd2 <- nc_diabetes_data %>% \n select(-us_pct) %>% \n mutate(\n pct_rural = if_else(rural == TRUE, percentage, FALSE)\n ,pct_urban = if_else(rural == FALSE, percentage, FALSE)\n ) %>% \n select(-countyfips,-percentage) %>% \n group_by(year) %>% \n summarise(\n pct_rural = mean(pct_rural,na.rm = TRUE)\n ,pct_urban = mean(pct_urban,na.rm = TRUE)\n ) %>% left_join(us_diabetes_data) %>% \n pivot_longer(\n cols = c(\"us_pct\", \"pct_rural\",\"pct_urban\")\n ,names_to = \"metric\"\n ,values_to = \"value\"\n ,values_drop_na = TRUE\n ) %>% \n mutate(\n metric = factor(metric,\n levels = c(\"pct_rural\",\"pct_urban\",\"us_pct\")\n ,labels = c(\"Rural\",\"Urban\",\"US\")\n )\n )\n\nnc_g2 <- d2 %>% ggplot(aes(x = year, y = value, color = metric)) +\n geom_line() +\n geom_point(shape = 21, size = 3) +\n geom_vline(xintercept = 2011, linetype = \"dashed\", color = \"gray\") +\n scale_y_continuous(labels = function(x) paste0(x, \"%\")) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n x = NULL\n ,y = NULL\n ,color = NULL\n ,title = \"Percent of Adults (20+) with Diagnosed Diabetes \\nDisplaying Rural vs Urban\"\n )\n\nnc_g2\n\n\n\n\n\n\n\nBy County - Geographical\nCounty level data first became available in 2004, three years of data is used to arrive at these estimates. For example, the 2006 estimates were computed using the data from 2005, 2006, and 2007 BRFS survey rounds. The county-level estimates were based on indirect model-dependent estimates using Bayesian multilevel modeling techniques(JNK, 2003 ; Barker et al., 2013). This model-dependent approach employs a statistical model that “borrows strength” in making an estimate for one county from BRFSS data collected in other counties and states. Multilevel Binomial regression models with random effects of demographic variables (age 20-44, 45-64, >=65; race/ethnicity; sex) at the county-level were developed. Estimates were adjusted for age to the 2000 US standard population using age groups of 20-44, 45-64, and 65 or older(Klein & Schoenborn, 2001).\n\n\nCode\ng50 <- nc_diabetes_data %>% \n filter(year < 2015) %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )\n ) %>% \n ggplot(aes(x = year, y = percentage, color = rural)) +\n geom_line(aes(group = county),alpha = 0.3) +\n geom_smooth(aes(group = rural), method = \"loess\", se= FALSE, size = 1.1) +\n scale_color_brewer(palette = \"Dark2\") +\n labs(\n title = \"Percent of Adults (20+) with Diagnosed Diabetes \\nAll North Carolina Counties\"\n ,x = NULL\n ,y = NULL\n ,color = NULL\n )\n\ng50\n\n\n\n\n\nWhen viewing all county trend lines together, we see that the loess line for both urban and rural follows a similar trend for the time period.\nThe following graphs displays the total estimated prevalence of Diabetes in each off the 100 North Carolina counties. To keep the scaling consistent between the graphs, we binned the estimates into 6 intervals of the same size. Rural counties are highlighted with a stronger border line as well as a letter “R” in respective geographic centers. These graphs allow us to view geographical clusters of diabetes prevalence.\n\n\nCode\nnc_counties_map_binned <- nc_counties_map %>% \n filter(year < 2015) %>% \n mutate(\n bin = dlookr::binning(.$percentage, nbins = 6 ,type = \"equal\")\n ,bin = forcats::fct_recode(bin\n ,\"6.5 - 7.9\" = \"[6.5,7.97]\"\n ,\"8.0 - 9.4\" = \"(7.97,9.43]\" \n ,\"9.5 - 10.9\" = \"(9.43,10.9]\" \n ,\"11.0 - 12.4\" = \"(10.9,12.4]\"\n ,\"12.5 - 13.8\" = \"(12.4,13.8]\" \n ,\"13.9 - 15.3\" = \"(13.8,15.3]\"\n )\n )\n\nc_g1 <- nc_counties_map_binned %>% \n filter(year %in% c(2006,2014)) %>% \n ggplot() +\n geom_sf() + #blank geom_sf keeps gridlines from overlapping map\n geom_sf(aes(fill = bin,color = rural)) +\n geom_sf(data = nc_cities) +\n ggrepel::geom_text_repel(data = nc_cities, \n aes(x = long, y = lat, label = city)\n ,nudge_y = c(-1,1,1,-1,1)\n ,nudge_x = c(0,0,0,-1,0)\n ) +\n geom_text(data = . %>% filter(rural == TRUE)\n ,aes(x = center_long, y = center_lat)\n ,label = \"R\"\n ,color = \"#696969\"\n ) +\n coord_sf(xlim = c(-84.5,-75.5), ylim = c(33.75,37)) +\n facet_wrap(~year) +\n scale_fill_viridis_d(alpha = 0.6, direction = -1) +\n scale_color_manual(\n values = c(\n \"FALSE\" = \"gray\"\n ,\"TRUE\" = \"black\"\n ),guide = 'none') +\n labs(\n title = \"Estimated Diabetes in Adults (20+) by County\"\n ,fill = \"Percentage\"\n ,y = NULL\n ,x = NULL\n ) +\n theme(\n panel.background = element_rect(fill = \"aliceblue\")\n ,panel.grid.major = element_line(color = \"#D4D4D4\", linetype = \"dashed\", \n size = 0.5)\n ,legend.position = \"bottom\"\n ,plot.title = element_text(hjust = 0.5)\n )\n\nc_g1\n\n\n\n\n\nThe following box plot displays the distribution of estimated cases by county from 2006 to 2014. For all years of current data the mean of rural counties is higher then that of their Urban counterparts.\n\n\nCode\nc_g1c <- nc_counties_map %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )) %>% \n filter(year < 2015) %>%\n ggplot(aes(x = year, y = percentage, group = interaction(year,rural), fill = rural)) +\n geom_boxplot(alpha = 0.5) +\n scale_fill_brewer(palette = \"Dark2\") +\n scale_x_continuous(breaks = seq(2004,2014,2)) +\n labs(\n x = NULL\n ,y = NULL\n ,fill = NULL\n ,title = \"Distribution of Estimated Cases by County 2006 - 2014\"\n )\n\nc_g1c\n\n\n\n\n\n\n\nBy County - Percent Change\nThe following graphs display the overall change in estimated prevalence between 2006 to 2014.\n\n\nCode\nd3 <- nc_counties_map %>% \n st_drop_geometry() %>% \n filter(year %in% c(2006,2014)) %>% \n select(-countyfips,-us_pct) %>% \n pivot_wider(names_from = \"year\"\n ,values_from = \"percentage\") %>% \n mutate(\n pct_p = `2014` - `2006`\n ,pct_c = ((`2014` - `2006`)/`2006`) * 100\n ) %>% \n left_join(nc_counties_map_raw) %>% \n st_as_sf()\n\n\nc_g4 <- d3 %>% \n ggplot() +\n geom_sf() + #blank geom_sf keeps gridlines from overlapping map\n geom_sf(aes(fill = pct_c ,color = rural)) +\n geom_sf(data = nc_cities) +\n ggrepel::geom_text_repel(data = nc_cities, \n aes(x = long, y = lat, label = city)\n ,nudge_y = c(-1,1,1,-1,1)\n ,nudge_x = c(0,0,0,-1,0)\n ) +\n geom_text(data = . %>% filter(rural == TRUE)\n ,aes(x = center_long, y = center_lat)\n ,label = \"R\"\n ,color = \"#696969\"\n ) +\n # scale_fill_viridis_c(alpha = 0.6, direction = -1) +\n scale_fill_gradient2(\n low = \"#d01c8b\"\n ,mid = \"#f7f7f7\"\n ,high = \"#4dac26\"\n ,midpoint = 0\n ) +\n scale_color_manual(\n values = c(\n \"FALSE\" = \"gray\"\n ,\"TRUE\" = \"black\"\n ),guide = 'none') +\n labs(\n title = \"Percentage Change of Diagnosed Diabetes 2006-2014\"\n ,fill = \"Percentage\"\n ,y = NULL\n ,x = NULL\n ) +\n theme(\n panel.background = element_rect(fill = \"aliceblue\")\n ,panel.grid.major = element_line(color = \"#D4D4D4\", linetype = \"dashed\", \n size = 0.5)\n )\n\nc_g4\n\n\n\n\n\nThe following chart displays the density curve of the percentage change for both rural and urban counties. It is notable that the mean of change for Urban counties is actually higher than the mean for rural counties. However, we also see that most change for both regions is positive growth. In fact only 16 rural, and 10 Urban counties experienced negative change in the given time frame. While 35 rural and 34 urban counties experience growth in the same period.\n\n\nCode\nd4 <- d3 %>% \n st_drop_geometry() %>% \n mutate(\n rural = factor(rural\n ,levels = c(TRUE,FALSE)\n ,labels = c(\"Rural\", \"Urban\")\n )\n )\n\n\nmean_d4 <- d4 %>% \n group_by(rural) %>% \n summarise(.groups = \"keep\"\n ,pct_c = mean(pct_c)\n )\n\ng51 <- d4 %>% \n ggplot(aes(x = pct_c, fill = rural, y = ..density.., color = rural)) +\n geom_histogram(binwidth = 5, position = \"identity\", alpha = 0.3) +\n geom_density(alpha = 0.5) +\n facet_wrap(~rural, ncol = 1) +\n geom_vline(aes(xintercept = pct_c), data = mean_d4) +\n geom_text(aes(x = pct_c, y = 0.038, label = round(pct_c, 2))\n ,data = mean_d4\n ,hjust = -0.15\n ,size = 5\n ,color = \"#000000\") +\n geom_vline(xintercept = 0, linetype = \"dashed\", color = \"#696969\") +\n scale_color_brewer(palette = \"Dark2\", guide = NULL) +\n scale_fill_brewer(palette = \"Dark2\", guide = NULL) +\n labs(\n x = \"Percentage Change\"\n ,y = \"Density\"\n ,fill = NULL\n )\ng51\n\n\n\n\n\n\n\nConclusion and Next Steps\nThe original hypothesis of this report was that rural counties were growing at a higher rate then there urban counterparts. Through out this post it has been shown that this hypothesis is incorrect, just being a rural county does not indicate diabetes growth, in fact the growth rate throughout North Carolina has been consistent. Further posts will explore other reasons for these trends, as the current post merely explores the trends and differences using data visualizations, a more rigorous and formal evaluation of these comparison is in order.\n\n\nSession information\n===========================================================================\nFor the sake of documentation and reproducibility, the current report was rendered in the following environment. Click the line below to expand.\n\n\nEnvironment \n\n\n\nCode\nif( requireNamespace(\"devtools\", quietly = TRUE) ) {\n devtools::session_info()\n} else {\n sessionInfo()\n} \n\n\n─ Session info ───────────────────────────────────────────────────────────────\n setting value\n version R version 4.2.1 (2022-06-23 ucrt)\n os Windows 10 x64 (build 22621)\n system x86_64, mingw32\n ui RTerm\n language (EN)\n collate English_United States.utf8\n ctype English_United States.utf8\n tz America/New_York\n date 2023-10-12\n pandoc 3.1.8 @ C:/PROGRA~1/Pandoc/ (via rmarkdown)\n\n─ Packages ───────────────────────────────────────────────────────────────────\n package * version date (UTC) lib source\n bit 4.0.4 2020-08-04 [1] CRAN (R 4.2.2)\n bit64 4.0.5 2020-08-30 [1] CRAN (R 4.2.2)\n cachem 1.0.6 2021-08-19 [1] CRAN (R 4.2.2)\n callr 3.7.3 2022-11-02 [1] CRAN (R 4.2.2)\n class 7.3-20 2022-01-16 [2] CRAN (R 4.2.1)\n classInt 0.4-10 2023-09-05 [1] CRAN (R 4.2.3)\n cli 3.4.1 2022-09-23 [1] CRAN (R 4.2.2)\n colorspace 2.0-3 2022-02-21 [1] CRAN (R 4.2.2)\n confintr 1.0.2 2023-06-04 [1] CRAN (R 4.2.3)\n crayon 1.5.2 2022-09-29 [1] CRAN (R 4.2.2)\n crul 1.4.0 2023-05-17 [1] CRAN (R 4.2.3)\n curl 4.3.3 2022-10-06 [1] CRAN (R 4.2.2)\n DBI 1.1.3 2022-06-18 [1] CRAN (R 4.2.2)\n devtools 2.4.5 2022-10-11 [1] CRAN (R 4.2.2)\n digest 0.6.30 2022-10-18 [1] CRAN (R 4.2.2)\n dlookr 0.6.2 2023-07-01 [1] CRAN (R 4.2.3)\n dplyr * 1.1.3 2023-09-03 [1] CRAN (R 4.2.3)\n e1071 1.7-13 2023-02-01 [1] CRAN (R 4.2.3)\n ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.2.2)\n evaluate 0.21 2023-05-05 [1] CRAN (R 4.2.3)\n extrafont 0.19 2023-01-18 [1] CRAN (R 4.2.2)\n extrafontdb 1.0 2012-06-11 [1] CRAN (R 4.2.0)\n fansi 1.0.3 2022-03-24 [1] CRAN (R 4.2.2)\n farver 2.1.1 2022-07-06 [1] CRAN (R 4.2.2)\n fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.2.2)\n fontBitstreamVera 0.1.1 2017-02-01 [1] CRAN (R 4.2.0)\n fontLiberation 0.1.0 2016-10-15 [1] CRAN (R 4.2.0)\n fontquiver 0.2.1 2017-02-01 [1] CRAN (R 4.2.3)\n forcats 1.0.0 2023-01-29 [1] CRAN (R 4.2.3)\n Formula 1.2-5 2023-02-24 [1] CRAN (R 4.2.2)\n fs 1.5.2 2021-12-08 [1] CRAN (R 4.2.2)\n gdtools 0.3.3 2023-03-27 [1] CRAN (R 4.2.3)\n generics 0.1.3 2022-07-05 [1] CRAN (R 4.2.2)\n gfonts 0.2.0 2023-01-08 [1] CRAN (R 4.2.3)\n gghighlight 0.4.0 2022-10-16 [1] CRAN (R 4.2.3)\n ggplot2 * 3.4.2 2023-04-03 [1] CRAN (R 4.2.3)\n ggpmisc 0.5.4-1 2023-08-13 [1] CRAN (R 4.2.3)\n ggpp 0.5.4 2023-08-12 [1] CRAN (R 4.2.3)\n ggrepel 0.9.3 2023-02-03 [1] CRAN (R 4.2.3)\n glue 1.6.2 2022-02-24 [1] CRAN (R 4.2.2)\n gridExtra 2.3 2017-09-09 [1] CRAN (R 4.2.2)\n gtable 0.3.3 2023-03-21 [1] CRAN (R 4.2.3)\n hms 1.1.3 2023-03-21 [1] CRAN (R 4.2.3)\n hrbrthemes 0.8.0 2020-03-06 [1] CRAN (R 4.2.3)\n htmltools 0.5.4 2022-12-07 [1] CRAN (R 4.2.2)\n htmlwidgets 1.6.2 2023-03-17 [1] CRAN (R 4.2.3)\n httpcode 0.3.0 2020-04-10 [1] CRAN (R 4.2.3)\n httpuv 1.6.8 2023-01-12 [1] CRAN (R 4.2.2)\n httr 1.4.6 2023-05-08 [1] CRAN (R 4.2.3)\n inum 1.0-5 2023-03-09 [1] CRAN (R 4.2.3)\n jsonlite 1.8.3 2022-10-21 [1] CRAN (R 4.2.2)\n kableExtra 1.3.4 2021-02-20 [1] CRAN (R 4.2.2)\n KernSmooth 2.23-20 2021-05-03 [2] CRAN (R 4.2.1)\n knitr 1.43 2023-05-25 [1] CRAN (R 4.2.3)\n labeling 0.4.2 2020-10-20 [1] CRAN (R 4.2.0)\n later 1.3.0 2021-08-18 [1] CRAN (R 4.2.2)\n lattice 0.20-45 2021-09-22 [2] CRAN (R 4.2.1)\n libcoin 1.0-10 2023-09-27 [1] CRAN (R 4.2.3)\n lifecycle 1.0.3 2022-10-07 [1] CRAN (R 4.2.2)\n magrittr * 2.0.3 2022-03-30 [1] CRAN (R 4.2.2)\n mapdata * 2.3.1 2022-11-01 [1] CRAN (R 4.2.3)\n maps * 3.4.1 2022-10-30 [1] CRAN (R 4.2.3)\n MASS 7.3-60 2023-05-04 [1] CRAN (R 4.2.3)\n Matrix 1.5-4.1 2023-05-18 [1] CRAN (R 4.2.3)\n MatrixModels 0.5-1 2022-09-11 [1] CRAN (R 4.2.3)\n memoise 2.0.1 2021-11-26 [1] CRAN (R 4.2.2)\n mgcv 1.8-40 2022-03-29 [2] CRAN (R 4.2.1)\n mime 0.12 2021-09-28 [1] CRAN (R 4.2.0)\n miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.2.2)\n munsell 0.5.0 2018-06-12 [1] CRAN (R 4.2.2)\n mvtnorm 1.2-2 2023-06-08 [1] CRAN (R 4.2.3)\n nlme 3.1-157 2022-03-25 [2] CRAN (R 4.2.1)\n pagedown 0.20 2022-12-13 [1] CRAN (R 4.2.3)\n partykit 1.2-20 2023-04-14 [1] CRAN (R 4.2.3)\n pillar 1.9.0 2023-03-22 [1] CRAN (R 4.2.3)\n pkgbuild 1.4.2 2023-06-26 [1] CRAN (R 4.2.1)\n pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.2.2)\n pkgload 1.3.2 2022-11-16 [1] CRAN (R 4.2.2)\n polynom 1.4-1 2022-04-11 [1] CRAN (R 4.2.3)\n prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.2.2)\n processx 3.8.1 2023-04-18 [1] CRAN (R 4.2.3)\n profvis 0.3.8 2023-05-02 [1] CRAN (R 4.2.3)\n promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.2.2)\n proxy 0.4-27 2022-06-09 [1] CRAN (R 4.2.3)\n ps 1.7.5 2023-04-18 [1] CRAN (R 4.2.3)\n purrr 1.0.1 2023-01-10 [1] CRAN (R 4.2.3)\n quantreg 5.95 2023-04-08 [1] CRAN (R 4.2.3)\n R6 2.5.1 2021-08-19 [1] CRAN (R 4.2.2)\n RColorBrewer 1.1-3 2022-04-03 [1] CRAN (R 4.2.0)\n Rcpp 1.0.9 2022-07-08 [1] CRAN (R 4.2.2)\n reactable 0.4.4 2023-03-12 [1] CRAN (R 4.2.3)\n readr * 2.1.3 2022-10-01 [1] CRAN (R 4.2.2)\n remotes 2.4.2 2021-11-30 [1] CRAN (R 4.2.2)\n rlang 1.1.0 2023-03-14 [1] CRAN (R 4.2.3)\n rmarkdown 2.22 2023-06-01 [1] CRAN (R 4.2.3)\n rpart 4.1.16 2022-01-24 [2] CRAN (R 4.2.1)\n rstudioapi 0.14 2022-08-22 [1] CRAN (R 4.2.2)\n Rttf2pt1 1.3.12 2023-01-22 [1] CRAN (R 4.2.2)\n rvest 1.0.3 2022-08-19 [1] CRAN (R 4.2.3)\n scales 1.2.1 2022-08-20 [1] CRAN (R 4.2.2)\n sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.2.2)\n sf * 1.0-14 2023-07-11 [1] CRAN (R 4.2.3)\n shiny 1.7.4 2022-12-15 [1] CRAN (R 4.2.1)\n showtext 0.9-6 2023-05-03 [1] CRAN (R 4.2.3)\n showtextdb 3.0 2020-06-04 [1] CRAN (R 4.2.3)\n snakecase 0.11.0 2019-05-25 [1] CRAN (R 4.2.2)\n SparseM 1.81 2021-02-18 [1] CRAN (R 4.2.0)\n stringi 1.7.8 2022-07-11 [1] CRAN (R 4.2.1)\n stringr 1.5.0 2022-12-02 [1] CRAN (R 4.2.3)\n survival 3.3-1 2022-03-03 [2] CRAN (R 4.2.1)\n svglite 2.1.1 2023-01-10 [1] CRAN (R 4.2.2)\n sysfonts 0.8.8 2022-03-13 [1] CRAN (R 4.2.3)\n systemfonts 1.0.4 2022-02-11 [1] CRAN (R 4.2.2)\n tibble 3.2.1 2023-03-20 [1] CRAN (R 4.2.3)\n tidyr * 1.3.0 2023-01-24 [1] CRAN (R 4.2.3)\n tidyselect 1.2.0 2022-10-10 [1] CRAN (R 4.2.2)\n tzdb 0.3.0 2022-03-28 [1] CRAN (R 4.2.2)\n units 0.8-4 2023-09-13 [1] CRAN (R 4.2.3)\n urlchecker 1.0.1 2021-11-30 [1] CRAN (R 4.2.2)\n usethis 2.2.1 2023-06-23 [1] CRAN (R 4.2.3)\n utf8 1.2.2 2021-07-24 [1] CRAN (R 4.2.2)\n vctrs 0.6.2 2023-04-19 [1] CRAN (R 4.2.3)\n viridisLite 0.4.2 2023-05-02 [1] CRAN (R 4.2.3)\n vroom 1.6.0 2022-09-30 [1] CRAN (R 4.2.2)\n webshot 0.5.4 2022-09-26 [1] CRAN (R 4.2.2)\n withr 2.5.0 2022-03-03 [1] CRAN (R 4.2.2)\n xfun 0.39 2023-04-20 [1] CRAN (R 4.2.3)\n xml2 1.3.5 2023-07-06 [1] CRAN (R 4.2.3)\n xtable 1.8-4 2019-04-21 [1] CRAN (R 4.2.2)\n yaml 2.3.6 2022-10-18 [1] CRAN (R 4.2.1)\n\n [1] C:/Users/belangew/AppData/Local/R/win-library/4.2\n [2] C:/Program Files/R/R-4.2.1/library\n\n──────────────────────────────────────────────────────────────────────────────\n\n\n\n\n\n\n\n\n\n\n\nReferences\n\nAmerican Diabetes Asssociation. (2015). The burden of diabetes in north carolina. http://main.diabetes.org/dorg/PDFs/Advocacy/burden-of-diabetes/north-carolina.pdf\n\n\nBarker, L. E., Thompson, T. J., Kirtland, K. A., Boyle, J. P., Geiss, L. S., McCauley, M. M., & Albright, A. L. (2013). Bayesian small area estimates of diabetes incidence by united states county, 2009. Journal of Data Science, 11(1), 269–280. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4537395/\n\n\nCenters for Disease Control and Prevention. (2020). National diabetes statistics report. US Department of Health and Human Services. https://www.cdc.gov/diabetes/pdfs/data/statistics/national-diabetes-statistics-report.pdf\n\n\nJNK, R. (2003). Small area estimation. https://onlinelibrary.wiley.com/doi/pdf/10.1002/0471722189.fmatter\n\n\nKlein, R. J., & Schoenborn, C. A. (2001). Age adjustment using the 2000 projected u.s. population. Healthy People 2000 Stat Notes, 20, 1–9.\n\n\nPierannunzi, C., Town, M., Garvin, W., Shaw, F. E., & Balluz, L. (2012). Methodologic changes in the behavioral risk factor surveillance system in 2011 and potential effects on prevalence estimates. Morbidity and Mortality Weekly Report, 61(22), 410–413. https://www.cdc.gov/mmwr/pdf/wk/mm6122.pdf\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Diabetes in {Rural} {North} {Carolina} : {Exploring}\n {Prevalence} {Trends}},\n date = {2020-06-25},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, K. (2020, June 25). Diabetes in Rural North Carolina :\nExploring Prevalence Trends." + }, + { + "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html", + "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html", + "title": "Converting From Blogdown to Distill", + "section": "", + "text": "I have since converted this blog to a quarto blog, but am leaving this post up in case anyone finds it useful" + }, + { + "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#code-folding", + "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#code-folding", + "title": "Converting From Blogdown to Distill", + "section": "Code Folding", + "text": "Code Folding\nWhen I converted my blog on 12/30/2020, code folding was not included as an option by default in distill. At that time, an excellent package called Codefolder added the functionality. Since going live with the blog, code folding has been added to distill.1 Code folding is available for either the whole document or individual code sections. The default caption is “Show Code”, but instead of typing code_folding=TRUE, you can provide a string to change the caption.\n\n# Some awesome code \n# That does awesome things" + }, + { + "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#customizing-the-home-page", + "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#customizing-the-home-page", + "title": "Converting From Blogdown to Distill", + "section": "Customizing the Home Page", + "text": "Customizing the Home Page\nBy default, a distill blog’s home page will be the blog index page. I chose to edit my home page to be a landing page for myself and then have the blog index as a separate page. When creating a new blog, this is the default YAML header for your index page.\n---\ntitle: \"New Site\"\nsite: distill::distill_website\nlisting: posts\n---\nThe critical piece here is the line site: distill::distill_website. This line is what is needed to render the website. For my home page, I decided to use the package Postcard, which is used to generate simple landing pages. I won’t go into every step as there is already a great post by Alison Hill on how to do that. However, I will point out the most crucial part of the new index page the YAML header needs to contain these two lines.\noutput:\n postcards::trestles\nsite: distill::distill_website" + }, + { + "objectID": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#footnotes", + "href": "posts/2021-01-12_blogdown-to-distill/creating-a-distill-blog.html#footnotes", + "title": "Converting From Blogdown to Distill", + "section": "Footnotes", + "text": "Footnotes\n\n\nNote that as of publishing, code folding is only available in the development version of distill↩︎" } ] \ No newline at end of file diff --git a/posts/2023-10-12_DHSC_Capstone/index.qmd b/posts/2023-10-12_DHSC_Capstone/index.qmd new file mode 100644 index 0000000..13acf8b --- /dev/null +++ b/posts/2023-10-12_DHSC_Capstone/index.qmd @@ -0,0 +1,21 @@ +--- +title: "Reflex Testing using Machine Learning in the Clinical Laboratory" +subtitle: | + This post contains the abstract of my Capstone for the Doctorate of Health Science program at + Campbell University. +date: 2023-10-12 +--- + +# Full Paper + +To view the full paper please go to the following [link](https://kyle-belanger.quarto.pub/reflex-testing-using-machine-learning-in-the-clinical-laboratory/) + +# Abstract + +**Introduction**: This research study focuses on developing and testing a machine learning algorithm to predict the FT4 result or diagnose hyper or hypothyroidism in clinical chemistry. The goal is to bridge the gap between hard-coded reflex testing and fully manual reflective testing using machine learning algorithms. The significance of this study lies in the increasing healthcare costs, where laboratory services contribute significantly to medical decisions and budgets. By implementing automated reflex testing with machine learning algorithms, unnecessary laboratory tests can be reduced, resulting in cost savings and improved efficiency in the healthcare system. + +**Methods:** The study was performed using the Medical Information Mart for Intensive Care (MIMIC) database for data collection. The database consists of de-identified health-related data from critical care units. Eighteen variables, including patient demographics and lab values, were selected for the study. The data set was filtered based on specific criteria, and an outcome variable was created to determine if the Free T4 value was diagnostic. The data handling and modeling were performed using R and R Studio. Regression and classification models were screened using a random grid search to tune hyperparameters, and random forest models were selected as the final models based on their performance. The selected hyperparameters for both regression and classification models are specified. + +**Results:** The study analyzed a dataset of 11,340 observations, randomly splitting it into a training set (9071 observations) and a testing set (2269 observations) based on the Free T4 laboratory diagnostic value stratification. Classification algorithms were used to predict whether Free T4 would be diagnostic, achieving an accuracy of 0.796 and an AUC of 0.918. The model had a sensitivity of 0.632 and a specificity of 0.892. The importance of individual analytes was assessed, with TSH being the most influential variable. The study also evaluated the predictability of Free T4 results using regression, achieving a Root Mean Square Error (RMSE) of 0.334. The predicted results had an accuracy of 0.790, similar to the classification model. + +**Discussion:** The study found that the diagnostic value of Free T4 can be accurately predicted 80% of the time using machine learning algorithms. However, the model had limitations in terms of sensitivity, with a false negative rate of 16% for elevated TSH results and 20% for decreased TSH results. The model achieved a specificity of 89% but did not meet the threshold for clinical deployment. The importance of individual analytes was explored, revealing unexpected correlations between TSH and hematology results, which could be valuable for future algorithms. Real-world applications could use predictive models in clinical decision-making systems to determine the need for Free T4 lab tests based on predictions and patient signs and symptoms. However, implementing such algorithms in existing laboratory information systems poses challenges. \ No newline at end of file