From 18868c2b2bdfbb34005e2d2cf741e551ad2c5c24 Mon Sep 17 00:00:00 2001 From: Stephen Roecker Date: Mon, 26 Feb 2024 11:05:38 -0600 Subject: [PATCH] updating model-evaluation.Rmd --- Part2/002-uncertainty.Rmd | 22 +- Part2/packages.bib | 6 +- Part2/s4ssbook.rds | Bin 786 -> 785 bytes book2/002-uncertainty.md | 128 +- .../figure-html/unnamed-chunk-10-1.png | Bin 23442 -> 23086 bytes .../figure-html/unnamed-chunk-11-1.png | Bin 29117 -> 30961 bytes .../figure-html/unnamed-chunk-12-1.png | Bin 23054 -> 25031 bytes .../figure-html/unnamed-chunk-16-1.png | Bin 21575 -> 21555 bytes .../figure-html/unnamed-chunk-2-1.png | Bin 38503 -> 38925 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 5246 -> 5578 bytes .../figure-html/unnamed-chunk-12-1.svg | 16 +- .../figure-html/unnamed-chunk-13-1.svg | 42 +- .../figure-html/unnamed-chunk-14-1.svg | 774 +++--- .../figure-html/unnamed-chunk-34-1.svg | 2214 ++++++++--------- .../figure-html/unnamed-chunk-35-1.svg | 2214 ++++++++--------- .../figure-html/unnamed-chunk-36-1.svg | 1386 +++++------ .../figure-html/unnamed-chunk-43-1.svg | 30 +- .../figure-html/unnamed-chunk-44-1.svg | 66 +- .../figure-html/unnamed-chunk-45-1.svg | 36 +- .../figure-html/unnamed-chunk-46-1.svg | 84 +- .../figure-html/unnamed-chunk-52-1.svg | 68 +- book2/004-linear-models.md | 14 +- .../figure-html/unnamed-chunk-18-2.png | Bin 29682 -> 29666 bytes .../figure-html/unnamed-chunk-3-1.png | Bin 21392 -> 21380 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 38862 -> 38840 bytes book2/005-glm.md | 32 +- book2/005-glm_files/figure-html/spatial-1.png | Bin 134239 -> 135215 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 38009 -> 43365 bytes .../figure-html/unnamed-chunk-6-2.png | Bin 33998 -> 34493 bytes book2/404.html | 39 +- book2/acc-unc-categorical-data.html | 146 +- book2/appdx-class-accuracy.md | 52 +- .../figure-html/unnamed-chunk-2-1.svg | 54 +- .../figure-html/unnamed-chunk-3-1.svg | 54 +- ...entary-selecting-a-modeling-framework.html | 2 +- book2/glm.html | 606 ++--- book2/index.html | 4 +- book2/intro.html | 2 +- book2/linear-regression.html | 284 +-- book2/model-evaluation.html | 536 ++-- book2/numerical-tax.html | 6 +- book2/references.html | 2 +- book2/search_index.json | 2 +- book2/tree-based-models.html | 388 +-- 44 files changed, 4575 insertions(+), 4734 deletions(-) diff --git a/Part2/002-uncertainty.Rmd b/Part2/002-uncertainty.Rmd index 0e8a2996..53a03cea 100644 --- a/Part2/002-uncertainty.Rmd +++ b/Part2/002-uncertainty.Rmd @@ -47,7 +47,7 @@ Errors are simply the difference between reality and our representation of reali Below is a simulated example demonstrating the affect of sample size and standard deviation on quantile estimates. -```{r eval = TRUE, fig.height=8, fig.width=8} +```{r eval = TRUE, echo=FALSE, fig.height=8, fig.width=8} library(dplyr) library(ggplot2) @@ -103,23 +103,23 @@ test$S <- (test$pH - mu)^2 # calculate overall sum of squares SS <- sum(test$S) -# calculate sample variance (length gives us the total number of sample/observations) -SS / (length(test$pH) - 1) +# calculate standard deviation (length gives us the total number of sample/observations) +sqrt(SS / (length(test$pH) - 1)) ``` Note below how our estimate of the variance can vary widely, particularly for simulated datasets with a inherent standard deviation of 2. -```{r eval = TRUE} +```{r eval = TRUE, echo=FALSE} test %>% group_by(iteration, n, sd) %>% - summarize(var = var(pH)) %>% + summarize(sd2 = sd(pH)) %>% group_by(sd, n) %>% - summarize(across(var, list(min = min, mean = mean, max = max))) + summarize(across(sd2, list(min = min, mean = mean, max = max))) ``` Now let's see Standard Error (standard deviation / square root of n) below. The results show how our estimates become more precise as the sample size increases. -```{r eval = TRUE} +```{r eval = TRUE, echo=FALSE} SE <- function(x) sd(x, na.rm = TRUE) / sqrt(length(!is.na(x))) test %>% @@ -306,12 +306,12 @@ rmse <- caret::RMSE(pred = df$pred, obs = df$y) me <- mean(df$pred - df$y) ggplot() + - geom_point(data = df, aes(x = x, y = avg + sqrt(res^2))) + + geom_point(data = df, aes(x = x, y = avg + sqrt(res^2), shape = "Squared Errors")) + geom_line(aes(y = df$ref, x = x, lty = "Reference")) + geom_line(aes(y = df$avg + rmse, x = x, lty = "RMSE")) + - geom_line(aes(y = df$avg, x = x, lty = "Bias")) + - scale_linetype_manual(values = c("Reference"="solid", "RMSE"="dashed", "Bias"="dotted"), name = NULL) + - ylab("y") + + geom_line(aes(y = df$avg, x = x, lty = "Bias/Mean")) + + scale_shape_manual(values = c("Squared Errors"="circle"), name = NULL) + + scale_linetype_manual(values = c("Reference"="solid", "RMSE"="dashed", "Bias/Mean"="dotted"), name = NULL) +ylab("y") + ggtitle("Example of RMSE & Bias") diff --git a/Part2/packages.bib b/Part2/packages.bib index 8ea41a79..1542ed4c 100644 --- a/Part2/packages.bib +++ b/Part2/packages.bib @@ -11,7 +11,8 @@ @Manual{R-bookdown title = {bookdown: Authoring Books and Technical Documents with R Markdown}, author = {Yihui Xie}, year = {2023}, - note = {R package version 0.37}, + note = {R package version 0.37, +https://pkgs.rstudio.com/bookdown/}, url = {https://github.com/rstudio/bookdown}, } @@ -27,7 +28,8 @@ @Manual{R-rmarkdown title = {rmarkdown: Dynamic Documents for R}, author = {JJ Allaire and Yihui Xie and Christophe Dervieux and Jonathan McPherson and Javier Luraschi and Kevin Ushey and Aron Atkins and Hadley Wickham and Joe Cheng and Winston Chang and Richard Iannone}, year = {2023}, - note = {R package version 2.25}, + note = {R package version 2.25, +https://pkgs.rstudio.com/rmarkdown/}, url = {https://github.com/rstudio/rmarkdown}, } diff --git a/Part2/s4ssbook.rds b/Part2/s4ssbook.rds index 07debb295849bb64253b97d196740e2cdb54801d..10cf668911aea0f1c940e5e39fc99f75aa4aa487 100644 GIT binary patch literal 785 zcmV+s1Md7EiwFP!000002JKl}Z<{a_CJ9-Wv{AcW)~(uKFt}}6Eqj}GdD_F)t3^LA|{P}ez!CV~DfwqScfrP;4`1rHW=L1K_-}{=Tbu_)x);eABs&%iweFU#H zt$iRGLfPIE&z7cZJ@I^MQ;WP*XeH+Aaylmd!*XJL2|Y z#PLF{*bHpS3G;|$BOWOicG2}qnbi)2r$BUOeloMxLw+Ld2L*RGvB_e09v*?&hwuzc zDJF~~VL2}kcBELAhI|R(IiORIFdHKma5VF&@8yvtQJwgiL*8=8XC@#OaTglUIE`&v zit@|5H|BLnSZIcv1QS9H<`e7?X1)!A_lP6&lP_jtUYYkc1+IO=5SyDr;oFhE(2$kBc0AUB+Nyr{@-NOCd z#V!g}H|$Qh=Z-BB5D^y?&zEZ~>#1I{XmFCQ20<;CZ)n*3r|Q9fELPkgdcUVBws zB`aNJJA`m3b}uD}0nfLH8)urQZB#vH@Jr?^E-m*<>P{P^>$HO(@on$f)ZR*;Ox2&4!i4 z7wg39^Qn`fpLppM;9zNe%LLlJ&zuTb$8*)Re4;ZNjQ}IJgb81gDv3_s@G-!`ZPr_! zh+lbfXAIKA=u~*19v!EulQl=YX^*4T^fXm&%Oo-t?JG%Ns(DeEou&H273wmhDjtqB P!Y#i6`X=&fKp+4BP-}Io literal 786 zcmV+t1MU1DiwFP!000002JKnhZ__XkPup~(-Kvd!FqrrkoOoL|QQm;T6Av($#9QSh z-s&}RBFAOzKhJR5I3I3062Swh5-Cc2=kw3LpD#I`e{?lXYiW9`p|#rLRcl{={{-G> zT614CgtECSo()acI^y|^P#aGT*VZ(>nUZ(Ll<=X8ITDS~P*XeH5(fuEn=sKxkGM4- zaX42iHa$W)W-hh~;-PYG7hb=VS#3jj0z_x##WQO>W+&2oRB(42Ro@d=nc2v5O; zT9|PpEN8{R4i(G7kgp&-19akIMl9q2j;0><+$^#rsuevm$eUyQg$YPS+=d1;P9oce zqWt>dt$7__7MPba2T|iaMiU!zj?H(ze~CCUKYL;}=9T$CC~(LPLu_XDjWctMZXEn^ z${8{vTo3_eh;38k#)L|t9{ObAg87}+b)(UY`ykar-rZ;ojRlM@9om&6hj7v#KgGI; zN26vdV3zDP-@S|Xjlg2W=Mp{OGeOq~V=2)`7}-*bI7imV#Z+oHePoT%orLTl$I0E_ zZOcJ{>V};Wcb%b)eJtXFTC>F(bGhv}zGbttY0k##6moxwU3*M!JA6syi) z9g5W>GE*$rjw@_KVk^trnb2^7Hn2t$ItHhu#1~JCceCO%SWbT4FDW0al*c|I!7rU2Y#DMGB*a?c4_Kucp3&VCHJO_7;Ip z20TK(Z%@IzvIUT3O&GFr%9VQkqe%yFHNQ{wk7k{TtV6Nt4A!AoJtD)d8?vjOpPKbc ziO*MwSLaj5c|Y;ODZu{1`j!c_2akY(O9Y06B_r$^ZZW diff --git a/book2/002-uncertainty.md b/book2/002-uncertainty.md index bedca0a0..2a917845 100644 --- a/book2/002-uncertainty.md +++ b/book2/002-uncertainty.md @@ -45,59 +45,19 @@ Below is a simulated example demonstrating the affect of sample size and standar -```r -library(dplyr) -library(ggplot2) - -# create 50 random pH samples of 10, 30, 60, and 100 -y <- c(10, 30, 60, 100) -lab <- paste0("n = ", y) - -f <- function(x, n, sd) { - idx <- rnorm(n, mean = 7, sd = sd) - tmp <- data.frame(iteration = factor(x, levels = 1:30), n = factor(n, levels = y, labels = lab), sd = paste0("sd = ", sd), pH = idx) - return(tmp) -} - -# standard deviation of 1 -test <- mapply(FUN = f, rep(1:30, times = 4), rep(y, each = 30), sd = 1, SIMPLIFY = FALSE) -test <- do.call("rbind", test) - -# standard deviation of 1 -test2 <- mapply(FUN = f, rep(1:30, times = 4), rep(y, each = 30), sd = 2, SIMPLIFY = FALSE) -test2 <- do.call("rbind", test2) - -test <- rbind(test, test2) - - -# examine summary statistics -test %>% - group_by(iteration, n, sd) %>% - summarize(med = median(pH)) %>% - group_by(sd, n) %>% - summarize(across(med, list(min = min, mean = mean, max = max))) -``` - ``` ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n med_min med_mean med_max ## -## 1 sd = 1 n = 10 6.40 6.99 7.71 -## 2 sd = 1 n = 30 6.64 7.02 7.52 -## 3 sd = 1 n = 60 6.59 7.01 7.39 -## 4 sd = 1 n = 100 6.81 7.02 7.24 -## 5 sd = 2 n = 10 4.73 6.91 9.02 -## 6 sd = 2 n = 30 6.21 7.07 8.69 -## 7 sd = 2 n = 60 6.54 6.97 7.41 -## 8 sd = 2 n = 100 6.40 6.99 7.51 -``` - -```r -# examine box plots -ggplot(test, aes(x = iteration, y = pH)) + - geom_boxplot() + - facet_wrap(~ n + sd, ncol = 2, ) +## 1 sd = 1 n = 10 6.12 6.92 7.74 +## 2 sd = 1 n = 30 6.67 7.02 7.41 +## 3 sd = 1 n = 60 6.67 6.96 7.37 +## 4 sd = 1 n = 100 6.75 7.00 7.17 +## 5 sd = 2 n = 10 4.66 6.95 8.07 +## 6 sd = 2 n = 30 5.63 6.79 7.67 +## 7 sd = 2 n = 60 6.44 7.03 7.67 +## 8 sd = 2 n = 100 6.54 7.02 7.63 ``` @@ -119,66 +79,48 @@ test$S <- (test$pH - mu)^2 # calculate overall sum of squares SS <- sum(test$S) -# calculate sample variance (length gives us the total number of sample/observations) -SS / (length(test$pH) - 1) +# calculate standard deviation (length gives us the total number of sample/observations) +sqrt(SS / (length(test$pH) - 1)) ``` ``` -## [1] 2.562981 +## [1] 1.569779 ``` Note below how our estimate of the variance can vary widely, particularly for simulated datasets with a inherent standard deviation of 2. -```r -test %>% - group_by(iteration, n, sd) %>% - summarize(var = var(pH)) %>% - group_by(sd, n) %>% - summarize(across(var, list(min = min, mean = mean, max = max))) -``` - ``` ## # A tibble: 8 × 5 ## # Groups: sd [2] -## sd n var_min var_mean var_max +## sd n sd2_min sd2_mean sd2_max ## -## 1 sd = 1 n = 10 0.272 1.10 2.12 -## 2 sd = 1 n = 30 0.571 1.00 1.90 -## 3 sd = 1 n = 60 0.678 1.09 1.54 -## 4 sd = 1 n = 100 0.800 1.04 1.28 -## 5 sd = 2 n = 10 1.25 3.86 8.82 -## 6 sd = 2 n = 30 1.93 4.07 7.38 -## 7 sd = 2 n = 60 2.29 3.94 5.91 -## 8 sd = 2 n = 100 3.29 4.15 5.16 +## 1 sd = 1 n = 10 0.604 1.00 1.59 +## 2 sd = 1 n = 30 0.736 0.970 1.34 +## 3 sd = 1 n = 60 0.763 1.00 1.17 +## 4 sd = 1 n = 100 0.876 0.994 1.09 +## 5 sd = 2 n = 10 1.19 1.94 2.98 +## 6 sd = 2 n = 30 1.61 2.06 2.58 +## 7 sd = 2 n = 60 1.52 1.93 2.21 +## 8 sd = 2 n = 100 1.75 1.98 2.38 ``` Now let's see Standard Error (standard deviation / square root of n) below. The results show how our estimates become more precise as the sample size increases. -```r -SE <- function(x) sd(x, na.rm = TRUE) / sqrt(length(!is.na(x))) - -test %>% - group_by(iteration, n, sd) %>% - summarize(SE = SE(pH)) %>% - group_by(sd, n) %>% - summarize(across(SE, list(min = min, mean = mean, max = max))) -``` - ``` ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n SE_min SE_mean SE_max ## -## 1 sd = 1 n = 10 0.165 0.324 0.461 -## 2 sd = 1 n = 30 0.138 0.181 0.252 -## 3 sd = 1 n = 60 0.106 0.134 0.160 -## 4 sd = 1 n = 100 0.0895 0.102 0.113 -## 5 sd = 2 n = 10 0.353 0.609 0.939 -## 6 sd = 2 n = 30 0.254 0.364 0.496 -## 7 sd = 2 n = 60 0.196 0.255 0.314 -## 8 sd = 2 n = 100 0.181 0.204 0.227 +## 1 sd = 1 n = 10 0.191 0.317 0.502 +## 2 sd = 1 n = 30 0.134 0.177 0.244 +## 3 sd = 1 n = 60 0.0985 0.129 0.151 +## 4 sd = 1 n = 100 0.0876 0.0994 0.109 +## 5 sd = 2 n = 10 0.376 0.614 0.942 +## 6 sd = 2 n = 30 0.294 0.376 0.471 +## 7 sd = 2 n = 60 0.197 0.249 0.285 +## 8 sd = 2 n = 100 0.175 0.198 0.238 ``` ## Theory of Uncertainty @@ -244,7 +186,7 @@ quantile(boot_stats$vars) ``` ## 0% 25% 50% 75% 100% -## 0.8275478 1.0378832 1.1479694 1.2571935 1.5796813 +## 0.8815688 1.0457885 1.1422593 1.2261761 1.5571980 ``` ```r @@ -268,7 +210,7 @@ quantile(boot_stats$means, c(0.025, 0.975)) ``` ## 2.5% 97.5% -## 5.830171 6.228177 +## 5.792807 6.178015 ``` ```r @@ -922,12 +864,12 @@ summary(lm_cv) ``` ## RMSE R2 -## Min. :0.4526 Min. :0.8455 -## 1st Qu.:0.4669 1st Qu.:0.8483 -## Median :0.4702 Median :0.8517 +## Min. :0.4551 Min. :0.8453 +## 1st Qu.:0.4630 1st Qu.:0.8485 +## Median :0.4662 Median :0.8531 ## Mean :0.4690 Mean :0.8527 -## 3rd Qu.:0.4763 3rd Qu.:0.8565 -## Max. :0.4788 Max. :0.8616 +## 3rd Qu.:0.4753 3rd Qu.:0.8556 +## Max. :0.4847 Max. :0.8620 ``` #### Subsample (Resampling or sample simulation) diff --git a/book2/002-uncertainty_files/figure-html/unnamed-chunk-10-1.png b/book2/002-uncertainty_files/figure-html/unnamed-chunk-10-1.png index d1ea124d4b123cc04d0a3b628f8e12711ee19e5a..01103cbdb5248f25bb8197e7d772d4f99b1e99f3 100644 GIT binary patch literal 23086 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 qUl$ijl=v_H@ZGPXzGI^GvD? zP&E{ws-`Rsd{R;ZQiuU5^Z+6;fC&65fC>oZCkc_1he)bK}DRg=YU6F_I%tIjZk`Q^7oq3%KV!#Aq zfGsfv_y!PDRKF&@fOI zXdCziJ_?``@IzN9I`a^nl}VkId7Yg=B}H#<@8IAd&>zqiP+!?9P^vRe(OIeJ1nw(4 z0U8GCDHMu=^&u~Tk=8!$x+i?Xg!$){|9(mC8aO&(!omq|n;dsU-{FvD_xDv4Woqu- ze)RLruFWom`OS|Qd%wRhZ$Gx+V*Kk)HvhLmky|B0@2J$qa6#Wuw|62g*jGoh_)vqFcanibdOmE4eGczY)r#rbG z{ICBh1))}N_)v9|%1X2eh(hmQEtK1^GW~_{NSpZBs4x7pNZGftVS}5{_l@#(^U%M) zWLH4-3G(c{Rm0Z+itGKV;s$G>!H9{F(+i@ z4atMu2cqR^eTW!-AEL7cgW7Os{ZI#To~Rv?OeLDpVkq+^C$tw0*O6h3!{=BxTtJN9 zaPt}<%Z8iiaceA5>pH6-ih(xTMZz?e{*py$wc+|bw`M=ir7a1!XNVf)p5fR&L#X7d zWM6PK=DI;&UlG6bdyS1XXun+s=BTJeW?6N+(RvLFEiDiJ?vB}=`3EIN+EuZEWl;8K=V&qH@gc5pp23g{a;&rgjNd{b*}Gn0`0%^iCiM#Y%zjJ zPZntg75K19oi0?#>;Ac!a zajksoHJHI4r5blFBWv3rwJaiNznp9-|JLu~8T(!qEeubNKQR=(f&?xhiniTsb%>;L zR!44j*Lrj#kvyr`A)oGmh5HfZ15!zrjME*DTza}ZoTEFNTek;2+{FF7%WuzMxhVV- zG%RvT*yZObA4#m*0L5V6_nxk5&5(9nB>i#?d6GDdDtjCH`xSPME{XM9RbW499~QAA zlC@7U1f6og4YXgjuEOj?)pzbha)Cn?L;BK1KyP2LUn(VGM2vy?Fs(RkabD&& z;uYBiF>c84Uyk0tqghbu|Ncthf+v)hRy9@bZ7U+Dn0pm|-rS_g!C^U(hGFNtw0R4A zqqOqV!w9p@vr2Wrv6Am;bgVCFpS!nAShj+6C94D+DfG&|5#WMpDc`?l-9h_-=PMRv zZ?`a`mETn~Csd1?zHSN|nitdivVnvMHo_u0Uq)6oFWDG8&%XivyC5yJHojJe*PweI zBjSTk4NO5Vp_Q}0Me@qwYzQW;E99nSi@hjb(x2%XN5C#P4wJ$>4@=4NA%ge1y#Jrc*@3*FV^SfTMil@q+z~I6*{+18#cV)2pfw7a& z%JU)8A>@-uQGvC4@rgbI5Y)?(6e~e%s?2u+LI5lpzu;y{K>YE>d@iXA9t~b}X3oiX zD7QY$W;%2z{43qBhSDJKP-iPSAsU*l~lB=za@~lWT+DcD(nwK>RDtv zo-FS$uKU{YotZU1?Dup`S=G>6I!c0MPHVkd+`8ToAD8>8qSd?>=F&%E)K+cY>Qqv6 z2bLDN9XBnqnrbb5&56Mx9`>45ZMYw*C@%B1F^uPYuzuj!;T>gk*&6y@iiF2ssO%QF z(|-Rb=I-?}wL1%;kkD_UB_M{>zCz*uq>ogFF$Js~#m@sDl8_Iz2|vDB6#Q+cusTbK zxlllk+f~T*O zTaXDDQ+`do_M(RHRoFg@UoA0=5|b06Ngp<0`U8MmrCQA4MQ)GfX35a$B+-6;y1B{D;n&E+Uun0Sic}H|W@*!N- zpa{s%F7Rz@?B1i$T^R)lBr)EEOM?;cP#amOLy?Iio^Ceqs^DEkLECbzjK+DbkT0P_ z!PzVg+m*~bNRl1LL9Zu~9yVE0+`>eX6p{NnYARX1`c97lLu4QAD}L>j=k4e(g*Sb! z-BXJ^yfdAEPrA?>>J#8}LSMz-(CwWb=XHp&yO#U?e1tV3@Da-pm zbZdTHw$(|iDE>bz_n#~9)|{4nWuT4~Z<)!z#LcPqADDQbp@G$*q21tA$%jRYm=6IkTWEoA>KI{HiRfY7;Vt zW1+R9Us+VurtalP1Mo7TvZ$&}&CRbSgJ%6pyLSf3qy!`afgWUjy=mE6yr-LaKLMFf zdU80gD?2KFPBsmAP5;(&-LGBBs!$ao^`>4JYe1I852zqZ|P;gMW5*`f(kw zm?tN@kP-tq2|l#*Hc%r)cWjj{aj#cw#d${^)!38hlueHHURYRTV8+mlkMK~0_*-V% zkm%qy^WHDV*0bkBCM{KsA`>B5t?jw~R1J(8-}_3@&9bq<3^PCeUEf{C>Bo!-*gk)L zi{HlP%v3ZgbD633qU`ePerFZmxM|O&?0&<#c5emS=GF2ct?POxhnF_LxPv>l0KQIqR=%)nBsoRlzDt1-5afK^g?*i+M%!{NO%n53LXV4Q_RaY-LpPOM~)A0Ah z_*g6Al_^g+)ou9Zsn8d|1L-ErR4pVV3AM?&-Xk-&AL!*X!RN1Cq$LJDUK(pw_t81K z;Z#m71|2a~8=Lh&`2eG<_eW-4{UmndBq-JzZC$l0D1@^{G*0le zc8tA}N-*^wju%{$t>XooWqfUXfr2Y;<6CHQ1?1y@rfmN=tCoMd|8Lam{|x>=gRgW` z{u^A1|G$?W0s!DD8_uoypY8Vj|2;?ly!}7Q@gL>*zsWRg6gJrf3iYK;R`IPFVRZ+_ zqGmGY4jVHL*aJ_B`x&cOTL-TMbX)~;GagbepVI1% zB>iYdSgpl7+>C3BV{?c$^z2d~3W8AQV$mLwHL8Gov{5qz%Xm7cwqF^5jy)WRek+I| zQi1`a9eAV9Uf~s{saO2JiCxUp<_%FPMMa`_ab+14akZ>0iiF8w4JqU?arCl|j9q`z?%~zxhsLmp)EdUpo=VT& zPin!pPY`BMHZ3&>lMbK`hjcxyH9)e??zlvFx7j`Fmloc~Zx2KS=mw!Wnt=jwyr~_L zIvfoE{ZJwh-|k=?{9Z+HK0B&G89Y8cu{QoTEY2AS-k+WSHKQ^F-%4jZk7U6+7#lZSXGz z(*E%&{_!dPO`ifREn4`43-B+%b4>v2*dTlX>)_?R;^qyiDeX9Rg|O+#J;zt}7krc= z_yeGZv;`KVPYUZ?Xd%TK2E*TvgW4eNfd!8zg>@{nkYSsH;2*}_6fC5*;~rk*ca78f zv6>)r#nrt*5CGgBGc1BS0A6GHzP}4^G|9CdvzPPzHaX#E|Fj}x-ZbK>MO!BW3USo> z_{ZuRv5PKr;z@L7XzHW{CB)9XXHUO1<)=A{W1|WKO;9MccK(|eAn#XtZeJX-0JR#> zJ3rhB-fX%Vb?Es!J{x$tF(1Mx6en+jm=kO9YDopAzvQwvF64LAH1+!YW)s@p@napw z(GN1Gq%je31)hdelnDYd8Box()$BZQ_duM5@lF7|RGW@{p|#czY{xg2%4u?ipXKJL z4fVg7&9E|2z<2qbz63ZV>e%h&g|zGHc5xKjUw;gSU-~z8HT=_WFrU8xx>*l@!9K|T zE2dn#Z6e6i?XQ^z-2F-5^lNHnN~P{ebO)EIT2`iigMud+>IH34v$Cr70+{Z3Yya20 zfD=f@>-(l~2xr}Zu8<3(`FqzM?fO$n>hcc#9y=t{m{#|vWXt+vS~|QOT?4ATi_z35 z-(9^+V|=#C%4DaKLcr--+Ef0gyw>J#T0DMfdy_=GRH_NR1hb0;AiH~R&lWuQDSQ@66e%!fSDmtp{BxNjcgveXb1K5ASu=YIq5>0JS7?ZjM6!H` zGMG4qX!v!W;s{!z8O5TK{=DA68pTCgiuOa0`t5k#U9}x)tZaBmn>EY!PfxK}I1_C` z+mM*Ho;BhDnX)SMH@H-Fb@Wk}F z&)6{W3WVit24B;XAJFJzZuqCI&OnCTfkoY?6LDf!Eb9hDj(+isEkmx@FAghk(pTpC z3_>8OW$9>!K=y6ZgFA4$+nbOAO6|6drdagA+eZ1znLW}ylBz^Hal=NOjB&^;Rb;+J z`5rv?7rO5cdQ!hh&_m+AtEdqxuQ2;ixcldtK@2||ar+gj@%? z3%>mR+(#xf0T;o%SQx7Vg|hDC%lqpf2qZL)PEK8*94H_pYIRq|N!6}f@$|KZ0Aoca zikcjZptLy;xmv{_A94?{7$`q>I6k zv|nkPqRe{MD4SGfSTr}UnLa&ejcSy`^_2-0;;N-xcHt*ThDbIQ)}?9gTKLiRhoU=!`e;J>$#*tU)3Kr^ZYLcS8x8M z^m65^@m2xR*2MejZTBABT8?WGq$_pv|7e|t+H$`1%jax%A*5?G3%>cMqMczoWwT9% z_XF9w(UkU@(_`8nS95Tsod4lbA#@~1j{T@+O3cFN+!6kkaN#?Fhi+K#c+d;qL=waxZW1Db2QmrUAcBLujy6Q#KCg- z+4*~wc~JNGXRmXod3LUZ;YFhp)3|~bBj+V_trEQ_9FnTcOD=U+N4RC~$vJ+5#@jP% zBMsX&;5Wp+(%EuXH8Z{zv>1oo>v;`O@W^v{p&z|BBY1bOeA#0CU<=N|_O;DQOrOy8mt^=9jvvY$gv4V`{MI7cHei~g>coutDGg>xyh{1Zq9^zFnw+CZZv`a^h{Wb2B^r=C2t(n+mVjefn47xJ?>K0IDHHBYc!cQ&dq|NSmo0S+c zfQcdf?yVfn{CapV+qh19R1K)!;xvd6G?ehFAT9Yza-e17mov9hd_eoD;v)J~@e%%Z zw~@DMPnLLk?|`f-F-(tRphx04Yr&Tdalj|i@$Mo5wUziB5}2P`aLvzgvPM` z*zTYcH>WS91#$`g6Ekr`C`lPTkV=2q|DueZ^9)=Zz-)7R^6>EI9FviDK=P-|(JH$c8c#YJ}{H1sEwa~t8&zo)PrJpXL* z!GMbAiC!lg=*08+Tat%{D$h<&Yo}AgP_yC{Z#9>1vxpac=QQy};$Ozsebw4caZ0^^ zPKSW4!5t=ek|^KFG4|o+w6?H)*lEc4-)+nMw0Ma&pC2AhS6Pi8AvKA*Z~fvxE0bB^ z;*$QM?r*gfAO@B5?%R=Y#anx9pI;2@r_lriOWti`bn(dLfb2^!mX4o1AX*;%YF1A_ zF&}o`CTrb9d;BAHo(x9T+qc?N90WKW5$NYH^*Z`zeV{XZgr#92*uK_vdOh+Gd_jRE z?emyjR(2t7bkm9$S}Y$BXI{%ov$gSU(bWa`I+R8W4l zvpevfrK~NIoD)vcjfkRe#>d%A(ecWRnN3AW*`VA`AjlJ4A%>@{zDf**NKSk$bz{rCu8K8 zpfl`gNdNjiPMr-$OaRAT*8 zb1OMDye&eXn&qXr@HO3(G$49ZQ|zkSw!+k!<$nZz-`n}Ox0ea)YpN<(CCGCUf2C^r zX*pHYqL8m=hx8r-QQlw8+nBcaQw*UZY;cI`wpqnKV%~ujUD$C2GN)Q=e6YZ5ab8SZ zwX*~8F@72z6~Bf=x^nRf?*%~OQnNZLa?(^pwzsZ;-1*l!N=l4MfBYvxl}BX@1qoqL z#AB59Uris9y|PjcUmoAGU1B`STv2lsn6!f_&&p2xQEPtPh1*53>`;braAbRz4M>1poqnyOrDQ3cquu=V*cK{Q*v24+lCoSjj_EaiUaK7!Qj|zL#TQ zU>WV;?{FTch{|uQrBH=~%P|GldcH1;cTP2?`MABT)8A62B<>};0<1}uaF^!xXJ~$$ z4E5(s%-lEduHBECM=R1l1TQbA~?jw^)tP|w#9qBYz?k1{)s-E0vE?jr$%%Zkhs$NavWth zGP^atHsS0M{hk3}&4nJm2AHeSh-Jt0p7!}%2!crxMV}%E0p{n#MR@_dCVDwbs4SbE zHm>ZUxVjJ{Yz?q0=qM7>V;99NVJNH~#4b}sfJ*TJN-G1W7vSRJq{8Vv(g@y*QePYj za2~uqHqfu?sh&WcEje%P8F2GBWAj%XIyMad4*?fA{oqzX*e@*tK(+kIKrG)dWf^tV z4Zx)QSr?=CpLgUWZ*HTE`m>an;l@ zVsNI`^((xMKe&QHmY{r((WR)&#C1+qrlqWl1VP~)X~_A^=Uyt$+jbs!FKo1!rNPG? zK5lq#uJ>-dz2BzCUh3E7Gv#bqBj%N?%*>|MNbyt^CcJRo(lm z`=9=(=48@(4Et z{tF{Bc>&!0vEa?2@1oNH{dC5&nZ=rL*+%cTWhhG#z{%eJD~-UMO92&EVSSPM5ApT# zby`+u0ffLf!^8F{2o)O0e6j82V{Y1|Pf2wF7ogXf_ zEZ_Y^4O}eNrjjpomJ)t+y_j|%HKgm?J})M?Pz}qBYHMWSW`t2yiC4>1+I1hm#I+U+ zg1F~$1qJ{}q7Z#tyBHjs?j`y7`&Ic0U>=T6Pd|AHY#aS3Tz1tMk`KMi?#Xvm>sj1M z-vAHd@F~d;gVL8y?>RuK>t1u)LD8F$(TGt?fVF;>!|%-N_iR~9W=JT0n|!9?TrEe# z4(hP~cP^izTz`I4Se0(7GE@^6(lbczr{YwZ_NV@MY+1H49CP6C0mB2N@4A{b4A*-V zD^t<+h~$w}`BOjq-HAEliUC0iy3}J5nW3yZ!1voUeKh?5UzzHt%6@y30ZiX(Xe2}b zv#f|8nhkviBc>lJW2j@M=9^pa2o;YV_r{np(WrI zjxg+H>q&%H!_P7#3$OuKMoIWe7gRm*uW~&{MnDyR0d^Jh{cU2&=_=>!JEI!`lxS9R zOXMP1!IhwB@NByFMeJvo)2?<@C8j5 zjXp^$_N)TdGtl4%o_N!WtK1xVza*(YyH+B1#peo-3cE&kX^=iSNc_q^J8^+c^N>qw>&|Zf-xUzi|RlzuL>@%Q;Q4dWDDh)@RmmJoY0S8!|+fXnO$aGCu}0L;6}rB>%!qH7=^sKYM^!UH4S!X0Ae zQ&Ph`03cKqOenYDphZEieIg2=l5u%W$Sr%tOfulekNQlb`7vo_e^YJ`5D$2(nOooy zbUkr#mza@~0%epdsIzLu0aL4%E(^A-sWYf6L?_BD@BV zICW!5xlAA@cX?c)|LFgIo0i>IliXZDJHGExe;~ywBX*+t6~cWod(F0&TqT?2NAgs> zvoH#^3?d+_r%$Qp_{7??-4p}$CFo0YXglofE_#8L0Evw+wGnK-<5-T8fR~kn4W-L# znSxTtW4cSy2onjILk&)y2fj_bZU z!{OOxJVPZaXdO6v{RuCLl)AFlcsn*}heSA869_p+3;@tF2;RH1{PK*J)6|uLMm`sl zmEeHn1DJ5a2RgLR(uAfjE!VK+zex1o^d7yfqo1xHWCJX3xPcAbzzqtr zH!1l@@Q*a|=|1}6K5hawat09N?F=qB=uktxaNY9qIq0K z&EaTA+$_5C=IY>;U9xC4XfWi4gKu9yorFH^_5#{HqKl>POYAZJUih8cx8X(fTdyC< zD%VT3A2i4>jH--~iGni;Fw$H{4-ZF8Xz80~$dBomSZx1k3-KOH>O5n5&m5}5NmpFE zNuZ0Gy2_%?vQNhOnyonun1siLcO{fF<4jL2^HSEkS_%IH_0$m~pN7PE*lMb41^i4`>RIiaw@;2xR zwLFTcT?9?LcB7jc=c!(8Q{2IlBiI@z(0oX58^!X0nxrA`lDGRmhV=@=-y^&1RL<(y zqB9C2r6Bo{V3T#fO{GTkZ%Uo0ELOnWAj?^Woqhez1z0%dHL*ER>HTy))-bevp0{Aq z;Y%;22lbA_*J8cejJNZXzwD62tJ*1m-9H~m9(1vvjR8skS;scg!Yf`jISaw*cB(yv zX;(~VUYu)YK9J~o4PAI;DQ?vrXnR`6^po>Jr|i$^sVr{Vl}yX&_JQtOqK#4?KoHrM z2VBudnZL*k!N=mJEK;d`OQQ|@7B??9Z@a=vXZF=s&J@q`+ccLiR(uK-rnG9x)xxFA+e(7 z8@g02o$0)gAf&{1&Zxyzg`%Y$HIxH;k)k{ZUveZlrC2hfLTx(g~ zNeOto-38-*Pb>xqr=wY=5%-2S!J!KkKZ4?@@ofIQpA1N#j_X2&&8Rs}BbdpUnWLoD zSpWJX{Wanu2Ace@-D^5NJ3s1W|GQgVHuVmK<8kRpy$bFNwa-!Nh; zY)qvDt7~k|0sz1!(s7d3%tD5I-cJ+hLdurbwu}~dK*z}-eQO!2m}}IGxsVpp%w;je zT5?&f#dH-Ctc(++_xI`b+?3CwvzQ$$--{|tTj`Aej=WZcI|j`u;GP5<0I6OZMwn4Pej1G{|jX9@@O6+Pt1szrl>Q zB!fIror|_QB4bQsF}9#tj`+Fkt@wAk_AVj@JV_a6;I>OvVNdEmy1_G}MVRe*k5n83 zP6ME%Ippx~gN_>c0K3Ug!%usQC27jsJ#hUI|9rBqb)C&j;Bicaoj^<*5r1;`(Y>Jg zO>d7(RmrV%di+U4JXj6JJx8&g1rbO3?v9ACmk#WHr!ypNV z5B8}xG^I_`hX* z(-2*dy}A+ek_;@Qg{#|<8AvYu*mcSDAXDrvDYh8Zsfsj|5lcM+9{Y=(X^cVJ^8K40 zizc3uR4PLaz_k$6`Ls@kzqh>O?*8o6H8$IPP-G%NH9#I>UA)fx@XmSQ_|98I>dwkw z+9&?msYzT(F_hK?S-)t^>8kD6SP@|WVk|Du2HhBA>*2~PrhUr-r|;9iZW$}8|Il@p z0j0QA@=s(fS`jC3ONzGAKbU&B z0|nYWaL{ARrU7u0(Js_F-SoXm3rT$;eoN3&X-_T1*9T91!8 z&!}cjmGrh9fU2mwyBk7qf+y4${M+NA;o_;(x*dl(YX}?Ges)M3=YasQOZu@#vd~*r z=xuqQ`YW%Fy=z9lk@wn9=yR|<^8Psbi@a+ z>neX8uufE+uEq1Q3j*nXy>`@Bd$b&SKd8&NE(O!w>n3P;hy1+|V%Gw=98b65Urak} zVXPhd+4=zpZCax(&QY*Ec`PBIUeDE~zzTG!GkC`|2Xl1Wzv$M{HjAgD&1vgobs&2T z{36CdKWJmH3tm(_C$}+fSZ><5D_cNE+i|g7_AiuiC z4rxA9=8($Huq?I$wDg==*qhP1*exUGdqx%&*7SCVQXd^Woo$2Bb64UV9xs1`0R+hD zJ&Xvd7$c`A@>6j4_dcg1V`IBTKy>-}2LpQ5?7BwgyX z>hW?wc!`QP1OF+)WAbP5+fTMmR)ceRY!Wob75q&d55mPuQj<2})wXevdEwrt?@PZ* z=Zf>A@6N!+jt0R$5$UL2WFLU;c9QRNpN?$6fDf*GI1sQbD(zGYhgU^Hpr1+V z%Z4EidlDnkRJgg9_zc)qoS#O2yQAzeW7!fVc`j)$pVz;*Wg^FWlAk$7;pYHSM?a`X3=TT(TLRwrhpZbhBBk>t)^4!*v=#`y= zYpBrFtdgtfq1_I${KIhSR*BE4lcKxq0$wBzoC_d7@PO2%xgNkN8f)S;BEJ9Fjlpi+ zchbY=qx2_ z(AIfh`aY@-CVofmypCssETPtp9FSA?LG>cKy8Ji#m}l_TRl@=YDY+}qf$S&UX19$7uILHiiV_8zPQ&#x+8vD4J8%2i4b8J zw|eSw)!-RxdfEbKjSS`kgMko!%go>wO8tc_3)&g#Ldh&Y+3;cXYRY1kgZr}0F8FJ} zXe&?ga0boyTfP^QUCFwFF|5BB*gr!*=<2lx@p{0d0|`y##u#Jlv`8$%A(cJU`avd2 zEgPy00LLDmZnGA9^T>P6RiGPy7FQl`!S0^H79_vT?wEnqDK_8^n+eFu2-)2RWbgWZ zpy|DH_Hz%(LZUcT;;;12a(uDPHg&kQFl8c>!C`PK%?xXZ-Ri{Aa$&PchEWejqafk)p;fIg}~l2@Ls4YN3jh17;$)u zY{}Pis?BV=WzLI#+&Xr386q2c$~MkpWDlHtN$6oGe8cF$B$jatGvghHZ!r%@rr2_l z%QnZ3u-v7m=YscMREwU_rBgupZ`97=p&poo-KBn92YmG#=WKxQ{u3ZgeDLM%4uI`G z7Ga^A<`}ULzT!_=`{A z7O2LEJQIRVlH0bt{X~L6nOS3ZJbXaaKuRBV&-*msz+_(GU4m_N1#c`N_NX zk7j~nAN|+=y1sPsbv-8wL+}=@MQ0uHz=4l*{+&N>KTw|H6xZ8|8qSc|*g#{r_rgvV zgkXf{mmcvILKNce?%{V#fkHSGBT>j}4Z>10WSUj=K)k<87V^PLL);%AgNX<8Go1VE zix1rX9!iJE4(c?`mP@+!V}`^?OS+jQoe#-x#;`t`(mMmVrGpI{Y_xdox9`EIvC#!F z3++dI6z^|Wt%5N9s%}#=8Wk1vaukO9(RA|Bqm4k;{ip=z&1OQQfB&G+zC|mO?_J}F zwaAJK(@ls=Mi{W})~}yxSO^uC&3wMx4yq89w>OHye*?~)^ogAmB`C|lnWOhWfBW@n zg7Vq53b7vE_#sR*Mhy9^o1IJqJeX@YR<91FDuC{{3adzc_IsK9Rv^ea)9Y*QL#2CY#{(lEVaM>)D@3w!JxL+Vs*KFm^+`tg`Se+n~klx%C;8LSh!yO z9+w##6n2zX(A%GO;ZI3&1!+;LM@e^^9C6yW&7jB-E0=XjV*y;0jdxxm?U zw}K}}6ez-NB`|}c=~(pe@k7Wnen%uNM`hlYAk(`Z`|vY>Qvo>*TD-RGEZNh7xW4C# zUaRMd1GjGi$Wi_59_gm`4L)&}(id91`@sx$?{_(yEMnu3)buZjdRm1=Kno(t_i&px)`LjbY{BjWXa z55bf~7>rz`L?1p_6Nn_(ZK*t^iM>|5$03TPZO1mzy8fwJ+Bp=WsK0F1pPjgH>-P0H zW@dFX$Xl!hGJUZIBd?heUFV{=vu$JgorLu{(=fN{ zC(L(6(i>(2o#F)Ge|BHKABcVJzqQWsKX;bj|E+V8<(NhGrq=FIVgYdA^8`0%uT4*# H4xIi!0d&ao diff --git a/book2/002-uncertainty_files/figure-html/unnamed-chunk-11-1.png b/book2/002-uncertainty_files/figure-html/unnamed-chunk-11-1.png index 9770f2b02be1d2551a150676807458f0d92b8c11..ad4616c6224c0bd7a739e80f5ad03c6f24f9f436 100644 GIT binary patch literal 30961 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 z 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 N+}LXG3&X$u{x4;O92x)s literal 29117 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�a(ZJsE+}BE6Z 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 literal 23054 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 literal 21575 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≤9c0~|OBsUrrrAG^?^h8M3t|HPQR<)O^i%YI$! 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 EH)WC6cK`qY diff --git a/book2/002-uncertainty_files/figure-html/unnamed-chunk-6-1.png b/book2/002-uncertainty_files/figure-html/unnamed-chunk-6-1.png index 8a9f786364544d52edd419e46cc1d2a75b22fddb..39cf4ae58aaecd40e8ecbf58256b3e69e8ff7f99 100644 GIT binary patch literal 5578 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 literal 5246 zcmeHL3s)2A8J+}Di7c_AW{(JAx4U(Btx!Y+Lv9L+)Ln2zMTCHggd%rAAc0)mb(<id@xu`oWh}SI6xhka47f=5dW$IxjxkIcwiweS^Hyh0Kk*6bV8V;vq=Ep zUKJj?`*1g@8;VA&}G-?&`>CBt;-kq&$z&qW$;1tfRKlW1Cq;;uV*lB^WCpj z#+MJ5Y-*8QVGl!``nExw|FUAe_qv1h{dmZy%V4<&%kRPau@-WZD(>?<($aPesY0+R z8<^3-$|B44>dALce~jh_HB@Xto|0#hkk%*uF3GkNy2ws=6$3VDsE7te$Z# zK<3D8nD{x0U6+1p3C?kicIxHC|PgYK;!;8^5PtD`OLe*QT{zvWEUZ&Y4IS|X0 zHCd?M5K4X9O-N6w$uU0r38((j&u=0Em7>v<;J4`c7aPa&^-n`w`%CE5kz3&GuBfkD z>YF*{_^QbZ%U?7eJ zKG**nA1J~xJk6>?FeDYej>6HqNPZ@H)NZIqu*zOAB0DF}#d6viVyihT$l8r2+D&c4 zaNO8&pC`}o*dki<9;&Six6e!a6Vz-wvaWQ<+Bm#1yyU!9uY;N1s3qTIeG8$`1P#^)Vu~Oo+1ZwLZenY% zAcD{<;@?kV2(p`JiC)4c{LWgY$F$M7NS<)ht1DDnF$t~| zx4du&CEwVWRoUA6vLb^M-8|SEB^MKL8CcQM9gZk&v|B7%RS?q?<2=}et@XV9xPi_V zNCv1gHhDD{v0h$tz@clDym6PBc8OZV<2JSqiHpZ@P(>z1d#~hvOv|YXeSt;pq8H>8 zZJUX-z%)_1Ka}CzvUWpS$j!~dIb@Y8!pW>#Olt2>9jPW7E~QHoPi?;yJw1=E&9F&? z6zAL=?`U|9tgK`WOtYgT6TvaQEuXP8emc}*nn2bl52FKWqSJD`+=VdBeNtS2O3N%< zqq!K|sc)8_i-EM@+DFH1i)W;Uz$^Bkg~C4}bk(Z+Y@t_PF7j<<`%|_kbXNeg2A(h& zm6w~nIo<6Y*{yfF(mom(!YtSgsiM{*F(=~00zW$;j`Mw&cDRR!5yann1(ttruxsn4 zz@6%B{oi|~P;z>@cY8{6;pnsz#`6c2$Bk0afJ`rog`)DebK3(UI<%v7lGQZxLcG*?0GPjAtOy1<=9m;pck5DXC&Lfqly1LcZ z5O)ZVbX+%BENxwxI|s&OXCvwujDwR4f!%e|M0BUf&342{=j-f=9> z(hv@rOfpVeT-YVG^B!fdijkfPJgT0}I=341osE*qwv-vLO>?wcmGN+#RcF2{7QOC{ z@9gnBUFX<3_5yu3fxB8WzYjwBxFeEgV%DUpaP1r4J%PezOl#kdUy~1PKSARF3J{zA V98$}=yR?rOzBeMYcF&3L{sl=G6;1#E diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-12-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-12-1.svg index 1058dab9..6dc11726 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-12-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-12-1.svg @@ -65,18 +65,18 @@ - - - - - - - - + + + + + + + + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-13-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-13-1.svg index 0b36339a..230348ab 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-13-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-13-1.svg @@ -205,44 +205,44 @@ NMDS2 - - - - + + + + - + - + - - - - + + + + - - + + - + - - + + - - - - + + + + - + - + Ordination of Distance Matrix (nMDS) diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-14-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-14-1.svg index 6603e526..e0d03d9d 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-14-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-14-1.svg @@ -37,47 +37,47 @@ - + - + - + - + - + - + - - - - + + + + - + - + - - - + + + - + - - - - - - + + + + + + @@ -87,277 +87,277 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + - - - - - + + + + + - - + + - - - - + + + + - - + + - - - + + + @@ -366,8 +366,8 @@ - - + + @@ -376,13 +376,13 @@ - - - - + + + + - - + + @@ -392,52 +392,52 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Influence of Clay Content (%) @@ -462,62 +462,62 @@ NMDS2 - + - + - + - + - + - + - - - - + + + + - + - + - - + + - - - - + + + + - - + + - + - + @@ -532,30 +532,30 @@ - - + + - - + + - - + + - - - - + + + + - - - + + + @@ -574,20 +574,20 @@ - - + + - - + + - - + + @@ -615,19 +615,19 @@ - - + + - - + + - - + + @@ -644,35 +644,35 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + @@ -684,7 +684,7 @@ - + @@ -694,21 +694,21 @@ - - - + + + - - + + - + - + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-34-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-34-1.svg index 1013f954..0216c6e7 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-34-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-34-1.svg @@ -28,106 +28,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -139,30 +139,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -173,106 +171,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -284,30 +282,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -318,106 +314,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -429,30 +425,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -463,106 +457,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -574,30 +568,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -608,106 +600,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -719,30 +711,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -753,106 +743,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -864,30 +854,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -898,106 +886,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1009,30 +997,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1043,106 +1029,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1154,30 +1140,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1188,106 +1172,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1299,30 +1283,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-35-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-35-1.svg index e79a67a8..e8137a53 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-35-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-35-1.svg @@ -28,106 +28,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -139,30 +139,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -173,106 +171,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -284,30 +282,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -318,106 +314,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -429,30 +425,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -463,106 +457,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -574,30 +568,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -608,106 +600,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -719,30 +711,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -753,106 +743,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -864,30 +854,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -898,106 +886,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1009,30 +997,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1043,106 +1029,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1154,30 +1140,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -1188,106 +1172,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1299,30 +1283,28 @@ y - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-36-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-36-1.svg index 72a7f13a..85909708 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-36-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-36-1.svg @@ -28,106 +28,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -139,20 +139,18 @@ y - - - - - - - - - - - - - - + + + + + + + + + + + + @@ -163,106 +161,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -274,21 +272,19 @@ y - - - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -299,106 +295,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -410,22 +406,20 @@ y - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -436,106 +430,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -547,23 +541,21 @@ y - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -574,106 +566,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -685,24 +677,22 @@ y - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -713,106 +703,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -824,25 +814,23 @@ y - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-43-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-43-1.svg index 2989bc11..3a930882 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-43-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-43-1.svg @@ -31,36 +31,36 @@ -A +A ABt Bt1 Bt2 -A -Bt +A +Bt A Bt1 -Bt2 -A -Bt +Bt2 +A +Bt A Bt A Bt -A -Bt1 -Bt2 +A +Bt1 +Bt2 A Bt1 Bt2 -Bt3 +Bt3 A -Bt1 +Bt1 Bt2 -A1 -A2 -AB +A1 +A2 +AB Bt1 -Bt2 +Bt2 diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-44-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-44-1.svg index 98d4d15a..904fb4a6 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-44-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-44-1.svg @@ -38,62 +38,62 @@ -A +A ABt Bt1 Bt2 -A -Bt +A +Bt A Bt1 -Bt2 -A -Bt +Bt2 +A +Bt A Bt A Bt -A -Bt1 -Bt2 +A +Bt1 +Bt2 A Bt1 Bt2 -Bt3 +Bt3 A -Bt1 +Bt1 Bt2 -A1 -A2 -AB +A1 +A2 +AB Bt1 -Bt2 +Bt2 - + - - + + - - - - - - - - + + + + + + + + - - + + - + - - + + - - + + diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-45-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-45-1.svg index ef698301..96a5617c 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-45-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-45-1.svg @@ -31,34 +31,34 @@ -A +A ABt -Bt1 +Bt1 Bt2 -A -Bt +A +Bt A -Bt1 -Bt2 -A -Bt -A +Bt1 +Bt2 +A +Bt +A Bt A Bt -A -Bt1 -Bt2 -A +A +Bt1 +Bt2 +A Bt1 Bt2 -Bt3 -A -Bt1 +Bt3 +A +Bt1 Bt2 -A1 +A1 A2 -AB +AB Bt1 Bt2 diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-46-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-46-1.svg index ca542162..67c554ed 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-46-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-46-1.svg @@ -66,10 +66,10 @@ - + - + @@ -77,10 +77,10 @@ - + - + @@ -99,7 +99,7 @@ - + @@ -107,18 +107,18 @@ - + - + - + @@ -126,7 +126,7 @@ - + @@ -156,7 +156,7 @@ - + @@ -185,7 +185,7 @@ - + @@ -197,7 +197,7 @@ - + @@ -214,14 +214,14 @@ - + - + @@ -230,14 +230,14 @@ - + - + @@ -250,7 +250,7 @@ - + @@ -274,24 +274,24 @@ - - - + + + - + - + - - + + @@ -312,14 +312,14 @@ - + - + @@ -331,12 +331,12 @@ - + - + @@ -349,7 +349,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -380,22 +380,22 @@ - - + + - + - + - + - + @@ -410,7 +410,7 @@ - + @@ -419,7 +419,7 @@ - + @@ -433,10 +433,10 @@ - + - - + + @@ -496,7 +496,7 @@ Ordination Distance - + Non-metric fit, R 2 diff --git a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-52-1.svg b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-52-1.svg index d22ba9fa..fcde56b9 100644 --- a/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-52-1.svg +++ b/book2/003-numerical-taxonomy_files/figure-html/unnamed-chunk-52-1.svg @@ -127,40 +127,40 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/book2/004-linear-models.md b/book2/004-linear-models.md index 3318801d..b30a8f61 100644 --- a/book2/004-linear-models.md +++ b/book2/004-linear-models.md @@ -142,7 +142,8 @@ ms_df %>% ``` ``` -## Warning: Removed 649 rows containing missing values (`geom_line()`). +## Warning: Removed 649 rows containing missing values or values outside the scale range +## (`geom_line()`). ``` @@ -242,18 +243,10 @@ As you can see below their are numerous variables we could inspect. library(raster) ``` -``` -## Warning: package 'raster' was built under R version 4.3.2 -``` - ``` ## Loading required package: sp ``` -``` -## Warning: package 'sp' was built under R version 4.3.2 -``` - ``` ## ## Attaching package: 'raster' @@ -397,7 +390,8 @@ ggplot(geodata_l, aes(x = value, fill = source)) + ``` ``` -## Warning: Removed 1266 rows containing non-finite values (`stat_density()`). +## Warning: Removed 1266 rows containing non-finite outside the scale range +## (`stat_density()`). ``` diff --git a/book2/004-linear-models_files/figure-html/unnamed-chunk-18-2.png b/book2/004-linear-models_files/figure-html/unnamed-chunk-18-2.png index 1c471e7b185f9b25693f13f489feeae6d58f6381..7d5dab3d916d2a6a6f1a2e076a850fc3b2897f28 100644 GIT binary patch literal 29666 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μ}N_359l1TTq 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 Q%OzoECYC45PW%-4pSxiK-v9sr diff --git a/book2/004-linear-models_files/figure-html/unnamed-chunk-3-1.png b/book2/004-linear-models_files/figure-html/unnamed-chunk-3-1.png index f0b38070e7e951fb626ad714ef7bb5ac752fe0e8..483f78d51a70fa16fbce45977a1f80a339dbac8c 100644 GIT binary patch literal 21380 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 z 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 literal 21392 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 diff --git a/book2/004-linear-models_files/figure-html/unnamed-chunk-9-1.png b/book2/004-linear-models_files/figure-html/unnamed-chunk-9-1.png index d4c0b5e2e917c6ab90325c30d2c1fa8a3faaadee..e84c3cde2a85b04ab7839941a98ca6f567128a2f 100644 GIT binary patch literal 38840 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𝒫=jI3MaQor_Dd50bu-1?V&Hdv5n^6H2K zLMM2V3F`&$53F3XzP@ccB|@ngRfb2{wpYRVv+ujf6!;P(oFg~?L!c#QeQ|yrV}SG( zGqoHGGZ&vU-`T@9&g&U!F0Mtaa>a~0Nyb@S#kv;myeac&qggX(vQBcjul4dx&mz;{ zLeG6ay+Vu>|25T*hoy&czn0F%YU8ZUDV$V26t}-m+HCV@2%2_JzagFDm@y=4<;;z-dU*#4ns!cxn^) zp+S7P{8V-k8?0V%(}3kTzsmae73?-WX*Zp0AX3+T?R#aC1pDY4LAvR+si2js*$Inp zt(nNfZOWa~p{We_YF>PIFuqvFHdi~gEXSrx);3p)WeR-v-;xk-=L2VL>uZiFM~6H9 z74k9X=kBdee!Uoqe2uqoKGWTZA1_rtW_T^_FlEM|Ct=}#F#Mf@?ju*^nd3gu_7+_d zK+JDGRYVQ$p}ebW9nr#Z{^E5iTktd z<=o&opLVIA$`Y(PAU<=|Ca)$oGDbpe=Vh%{9ffMHK}BNdJLj3Jd72M=rtjIwk_YWV z_F|D&k2wZEsR(yqQ0BMdDR1IAjaJy^kI5ue87t7U+wwhwdB1rKIi+)A)AEy^=XMp zVqR@?$j;MBj=~4e62ra*r~DW>v5g@b6AmapxvoDwe6B{j1e0I4@7(z3Ya!ES^27HM zv=^|cAr}9ZQEQs?R<9@qMD+9Dc`3@*-I!DU+wk<)35};m^=Sn@0ztBg1C? zUn%FeU+NKOfA(NN~mPP^jjzCSgpk)!J94pwkbcK zhmhaM($;1ccf->qbt74|=SZD}GLgMC5|7W(FD(psEl*6Zep>TI2UA})jmudsx-@0K z_-@N9OdV-Qa9Oeq|D9R;J3O;YXP-6o%U=09d%wKaLp?#+F?xHG%_DlV9v9`jZJ+oK z?o8|MSV)h}6Z({DcPpRaEPrckCUeU*0aoRZLYwx?<7xZm2V0rFl)djhAEz;R(__}+ za8$IuI(Kh|oepjMK(C_bMEaMEpSNa(NqL7S#zKxiQF0dB?OfRYZCL0KpS@!3sfyx8 z@w(&3U>HC2`#c`>We`+5#mKJTzcA}t?#f+45@u?Wcf_9;t%zeFA*BI*9m*BkGY?4E zUr}laOjx}eMZTO<{HA9tEUxHiiY%Sgi_W{N3*Eb}J`Lb3QUN1Xp30Qfpr(Om&Qcu* z&Fas1x6{umM6(^q`1?#P2O;{ z%R5bYpdjX3%|1*}tlyYdUbvrn`=jPPw<;I9m8f);l!1!xRpG01Yd_{QVnQoB_+Ja^ zKYV?zC#>TTKQ!-;H1HBPFP$+Q93EJ0ZJK{uMR7T-9aVpPsMzi^Z_-OPWLYvOmM`X8 zePea1`cihH5L(`}iF7q_{8Qr5svwUfEpqu~TfS+8zExY6e7;G(WkFA@RW(pF%t#i0 zuV?9T2|Pp->=_~Qxc#G+#`NB_(byjbyTd~VOKZ<%bedbumtIwmdyvf{ebw#QdAH5P zDRZBQU~`4gzI&p`6VHj8{e#XoZ+zbsq7e0$9xaJ%J9i>GJ;>vhR!aGYiOM~u?t6i- z&aOlLp+^VpJ*5v+y=!=MQO1SGZcr(}jJYh+Y-c5lXV8rrO>rTvDXghYC}q|xFDIWg za)zHL%m9OauUuWsp1HSjrybw)E+}8X>AmIh-YZwKG&p?oO>$oP>OZ{aYS|{NytTS9 zU`n^7^eR0`?)-f|eE$J~QjUF!!rS?FuM&<;2kAFFYB?@ZUzxKFLuOBYTNS$ft&`Ar z6sa*k%3tGhkIJKBm%+qp?#b!B=HhO>9X4hbEjEulW^6Z?bL+$+k5OIj9M$vylt3;x@(PhdS>I-@63E6k4A({;?PBrprcM10`Qkd;vg?x~HWA(zW zUq46Dv>E-rIx4qD5ID4j!8+NQnf!hAQc1@I`>b4J-&&IxD^#=l6L%u^au@r(SX3C; z50IkYhnv@<%X4x7Z*dlSReSV0*m=f9g+@ zc{TB%R;fy@=WCGn84(%{j0ec?;h`brIG6rV>HP~ev%H^ztxm};{`mfyS-Ii=>g~lR#`~|~+>|9u` z9!Y?tvtOT>viZwJO_DzPIH=T-WDWP-I)2b$tgo%{LsVt$ip$*lgc@P=;srlhU%uK? zPdU8k65e42!wZaH-zfS#m<`)ak%F&t4^FNTS0+1pKk=_Ah3R35f%nUFvIihp@mZ*C ztE;=Ha=D@`(lCe#EY?mNWk0Jh>eBc&P<1k~QaA)(yKC)qL zFk*uG;~3aSy9v!}$vZ=Bow}EbGvuxGN-C+iu`qLqC2=u;HH0=5kJ*}U+q4~~NygES zLa>|>FKT^yTwHzWBTwyyH9HcH-h$Rc6Tk1o))g+<*4v8qMSIoPlX3W~+zq}l6>!P3 z^%&o$)iZESIlN#Z?KJlE#dR&we_QDElWW85=U7zggwdsRZk>&twU{X!^~!sF&)=fA zPhPxuw!Z#>!JLCRiTm6zZp1Za>{IMR(~p2+?VX|x?VWT8_NIa9#U65wGkv5@c>_&`SzgDsnDMa-A0dVV@|%EeytLea6@{uQXj59 zoe{R^YY05wTbSrI$VMbCKtb+7-v zs(ZIjtv*ZUd1d@1c4uApb4IbyMtIJT4=T9>SUjG4|9<tL5e|@l`5@_r7;ju43L04Fx=llPUDbJun#SEu+eCJKgwl^N1NfWX; z#}jfaItBwUY82vs0Nr;%MOMx>4!$+oQVn3QTh@*Gx^HAOd%FcCKTc#}DgS$hm=P0W zXPCJKU|yJg4M8W4_*@LtMTS@=l@y{)jAC|tS9Ia-!0Ic5yAWvV^IbDzfP!KA8dawL`)>SI)c^MwJr z>!0XA>hNlo=W+jw2MSj2o6hk=69#X&XT6}`4=%} zA*t0jd^s<>dzBg$G1jRt5ao@EDbiYZrKlRpKy{XGLskE^u@crdV-fgbwEvkp_@XO82 z!7 z&C~=;Uga0sW(vGpuZqW~J=<8zQ`1@d`m}4iaMt&Ii+OGGR@g87y0A$P=cXbL51skZ zipbT|b7QO&^&@vX3fwGzTE@OLwv7rhf@)j~WKfI1KuPt>LhJpOjZpT=zN%}@Qm=l` zeGhforpF+k2fsV$d~*9Gy^*x^WH2;nHhk^sB)%aQ1?DaZEj$04XJ<{*u5EiX`|~Ei zY!UA`w%%1jw{XHdd;Qy6L*;i}+E)|@AAWVK5pw*6hXQSe`v+^zteGjkb=y9+^D5ld z7FBxb{q@m^lP&f2g|Z$z?VFh&bR4SqA%TXaw&BSB(yQh#)YA%gnaxl z-IT4F&IO^hsO#=10P&i-hwuu+ED;yx1}S9CW$RoCMry1&+q!BO6NKCqBbVOpc&n1| zB$kIP@Q?McrPG$zb}3Z3!YE~Zu_4Ykkg6x3}t>qZ;_CuLnmx5a0NhUnj~9zN-OGm3`$ ztSc+dFl8%+r?HBA3dwl*h(V`6K-Wzk$PQNs3d+j~MO!z(8=XH?9 zMjm2%)^OyK%Bju6z;8I4+uHiK{_wT3eW32ZpR2)l0ZXiW;Fl9@-s+>4OZoR_F{piV z`##WV{h>VSH-qg7x`Mw2e;X|XJU<4FoiUi}J%eg0gHcqJsyW^mOZsfRYd$CWKZUjO zU&3oV{@1Rh(~ghuhv9P}GYzg+vQ=*Z?3aJe8C_ECN@aL&OI~w~+Ct1m?Op%LBWuXCN1BXJ|22GV!x(#QLQQ#B#Jd;e1H zGy^XvRY@WF z^74cx>tcW1#+ifEOjQ}7PYw@P&Z8#A&rO*@+JEBq6J`Rwx~H}#GnMkj(=|1@; z{EvcDtA4X%7nC=JznX|E% zHbw+w1dnz$qznd2)kvGSoe77CN~e4i-M1fG2!5`ID0WUZqJ2AC569Cd$-ZfABh}DW zc#S;eOk6-ke6N3I4h9Y`a38v0tiRp9Ti>MR|H^TxlPMtUjCXo-^Zy=ByX(#9WOwuM z%%oa&)ApK*rmOfKQMacp8(B_F-UD@CO1=v~RhEZkySI--d4bD&=I2lp_1BcYZX;h_ ztKVDm*iZj!8&umbn5dzB;*Q~oZ8x;O7dl59nK3{Lnk!5DEMj|2Sgrkv1&Y&tJ%Yo_ zB@_Oz2n`SCVM(bGn=ysHQDIvJlb&r!cwp}TMHOFcUGuD!fLXH3n1rosK zE#={0%fDu8d?=mDJVH>9ar?c;>AFvnulgT=ygIdXy$e(R-s|*owfLj?m6Edmy~Z+_ z)VZKr8G;Nxp+lrJ$Gb1|6mU)z_C&-=boAO-G#kR}#@4&_%C_$Uof_`IpJycUEtv19Akx0dME=Yh+8a33sDy`Xw{KyJnvj?=z0z zwbuaMUiYbihaQp8r6pC%j9fKU_pA;vR1P6^M!lGtc1*tkvi{q6Q3yA$My}QkZWd}r zw&~63bOC5WcldIIX=j9kDQ!f#U7`Xe?6u&Pm7G6AnWX;$B`cMdej1RpT{Cz%gOa5{ z`piMyvrTaaOpHZ{H)#3XcAn$34D%@!4p7zQRCQFCc%SxnkH-d>WN*^^?ofE+%D1hJ zn1I`1<18dIM<)E(c5O6x@@Uv3$ONy2j59vq6cPil8v&r81tbdGM1c~7JQiws6ACGz zCZa%X$ub`bK(e5b%bF5-7*b-HE9n_7viJ|3hIUmZ>x_R1>l`Ib&n=8V)F;~*(Gw98yDxw;D)#l&{%ufS(0Kt&PXMd7)eSV7Ptf@`{fMf zFr>PhDMm#F4$fD)P@=uGTY&kWh+s+-_m`pA&&$q$KRD9-=J$M%ZDa9i7)((*6PiV_+rabDDokvCYPZ`#J&H z$z|D$Lc9pxE_i!+-L|VOSBjOSXrGXbdcOr^u4onARp_CVnt^jQk>AWNIAjspT7e_(9v zX=P)X>D-LeSF-+)8y{i-Qjq|I54!2I>ZrguatWOZ2ZFJ8yuhR3XJ?3*hhiipwyfMO zCTBClKJ*h1^~Md4YVQGH@4)-#?Pu{_D1u`8F!2G@#|dT3LXP9IhaoTa9#uC>+J<$V z_;kVK>OE7<((&RMn|lZ2j1$hk0$~Y(f-9v4Y*2u>!d|40dyE^(?>GxE5`Zvvo#;BG zlcm&?rVPqkYVYTID1PUD)O`sBWoD-`P#;PzC{Uj&)UwW`3P3$dZs#y6TCg@KFwX?} zCbXiVhim;7hv)s9psCL;XjtlxoC`y$YOn*zo=ruA6u`Ue3wxdfRYO((53kw6=2QHb{aB)!col}EnkvRE*Xs^ zfpjN`0uoFp2E?>vkA8Ft=$82kRDZM^4WPUl%(;={(Pn7G9VD-?GeIdeXdLW0vSG*z zS%1GWP&NNYut25=$f~loI!{}%eiMCV*#Sa>%UvHIyS9nQHVY2{KdgcPn`(Z*;;(*;b2$n3*Lz;d(`mRWjKF=)Z zD z$KPP7;o08~NCKw)_w*S%{Y97UYO!$BME~bCFODr}KR#c=5(zN6OffhhG=!HLKVuZNXuDUK;D7*6X_N`^(N;X{N0p2`h0DSUD*HRQD?3y7)G;7&VJCqA{J7E|HSyKB{F_!x_L*M?L#;s%lUhV z0VV0-L3slhIXb$Y|6JjOI5h?kI?X70a8LLl%l4Gr=xWDedujrYW>HlyLFXz z&d+2PAA-w(V#m>peC4M{nl9z|{N?9IID+?ht>5{cVn*8n2k@zbX?N#K(|@e!wcU>M z^H9bR&CKP+eFPZ>9*g0s(3v2ibj#SDw2R-l4xU!bvum^3 zEIQ{7DbZa){2}5-#fD!XAC#HT%>*jOZsL)A&qbVWNc3k6Vyaq@dlijXc0{8>d7+Ne z$CT@Qo8q~N4Xv+)b6Kdzw&%y@-JpP;T`w&bOUcJOFZgpqDXQ=x(uH)8hk3j(2MtUU zCHxPGM&0d@8$%C@as|;xw+p-T`~J;2Giag3fA6TcfyIRpk9JMC;yffvE9>HZU??Mp z>e+i@6H>jTcQ8V+D5gQ86qd?&L#cS?-Gq=i$m-ygcTlMWEx!#y{J(yMnyg$P6>bu! z4=D&i2V`ePo@v(ucq!CtW%8tH2@@qo=q45!5q!msfD}aru-eR|R2Kn`EjLdmQ0vcxZ#f`GX^HPWKG6?x!1K_d1h6^1Z%ss! z=!m15SI!Gy;XDcs6`(Xe-9W@r9`7E}<*XUv%93bA+yjlA^VFkJ?oFfI(2kLsUItqi z!D||nU4xX0A-ur*vJxKHV}O86#WX>(qaJz$8JG)ulLhJF26|zjz>MTK70?m$XnDYw z%UNZ8$sl!9Ad)eV4a&>{Bg}CD+olA2^nl}cG;bIxJuQzXfpRsKx)V)tSO7IRl5^0F z6y!uZ(Ysuro^g=L4nX4L@gTLBj~_NwAapPH1%1ZCAHF6+886YvMV+)0fAWqpDc^}~ zwjbOo;%Rf;=f+TLj#Z}Ilp4XPB(a{*k8j zCMMFvUV0=>igXxjde>Cl1w~2BhQ@}<_L72}$reykhZoJE@Odp>DUPESR~(44xwNf+!BC z+3w@Dqlw`jSX28F6mW?Yw89Sxz*@~Y;gv@?%8l$q4e8$c-Zwv>v6J>}a7zjgFgs%? zWMCG16E9|(*=|meMCVW%@{bzPZz!2E+GqB`|2@i%$N%z9J^}3 z3#BXpw18o66~KRcKgB1`IKNR1sN=TC6I5v2u*YR6<)(-XD&u3~7XV@|VAzbJm=33) ztl4ekf)pVef ze>TV&YgqN!ZLT!YV)us%omg zr9jPR$hg)xw#iJoB~Ekf0zE5oM1qY%YgS_-{7egjfTPmIir7rvK@l=zYaEb4HuJxW zd(nZou}+&&36Rq*k)pN{96B&H624OPwZ3ITj0>Q#xPeRNaiGN0k6XFwOrq{Uw1%>nw5w+44~kpxWKF$&#N^9vuO(6nuS`y9Dpi)jAm$VH?Rvzj6ErL( z8;FuMas7IU+#g%yThwFK^yUXBkbI1?2XW0F#jq!sHSs${6gcFTv6PSIIJjl=JmVD+ z;sP^U5e=TnYyWq&RXtEr<6W(SNI~1DjX&SLUc>|YsQHcQv5U&W4Bq3IwLedFKrWuGRDB0*@yQ1wTx9 z?8l?QHWI}#N=`)eY)25j$La(B4YfB?g5ywFWZpDBPRZaG4ZB4G%WXM5Um{HW%7ozb z)FXqOqnl=qi2*R97(uy&`%qKBphR|ju&e;2LIMut+)Ux~{dWOyu5SMYr%QqtM%wP) zdKUElPIT}d5OG1U9Yn~+PWxr#hXrUC933qXSuVbHFz+(vKYk?c#TM^gq^WL4g`_Mu z2@(8>+ZUxtLA(4(dF)rz-L-sXxKk6}dap2if2Pym_$?6Y?qi2dD4DgboQ}CNRP)9uSr8K`0QRbDrDK(pR+G z?h!r0It;Zix;LQPKXTaB&t{0g-j``*O}BEoF;=c@SGzZ=rMvO#!vlW2ez@SxR{a z5mJqKdwat|X#AeX+Zv2D#;O?UiLKw9TcijyXQ-MW=iiLqLs%VwljvFaXx zO{?*K&J$u&<=pyArIHlfiM=>6;``kyECFMP^5AQEO7MPC#&Xd}ZTskAV-{6bhe7<* z4<+lyhT+3MPsAqYOmKl)ERDs}kfWxVNIDDLt+Zsi2SKf>dy{C;WCB_7B=c7B$rt<`Biesz*C{lnt3K=nKw(1jfzd}cuHS~m3FqBdTzUOq! zuYU4_A{ZKF%g|CstPm6O{?w{H?$EjYv3OV;9bjDhf*v>+prCWu#w53ipA}~QG5f2o z{lxl6_W{WIw;K-|(s&;wOS}EhT8;9oT98t?)QVG1eotE$JrnnM&_kMZp#`9-nQ4J0 zBg`NSE4Cw;_+tJ&hR~+A`BG^q0mzUdoCNBaHR)&2)O=CNH`-qq4Y<%yju)V+6YaA; ztM4o60z?6DrAe*zJ)Ja8v?`i?uMn&n{0kxg@CYE@!KA9~r8G>b@E8?Rje2`~%R*@2 zo(Dvk;gg>`DhzBl4mgLeQ2G4&87wr=rGDU7XC&V|can^fy?01GIR=BWI!a@f0h$UM zg+Hrsdiv}P??oTPdDp=IsvM91C==;0X&j;Q|*f1MVM4>N?6$5(|7dL6$pNUhNt8d zATOb+wXTm)ii+M<|Jj~)P~Ahw`lByXay}lvlUzrXQC?Xmz>(OviE65$15D(Aj40rW z8#uNuG-3z93aYrc;IiO0rrks0g^DjA_!xL6F#ya-Hs^(y>8MoLhr#7IN6~a2*;{hWn)_Z&8v`F@bO#brePpaJ!+~B^yc_H$6ACw=~ zAG!;amTVlN4q0E)`vFY>EDX)Lo-QMo2gIWY&WH;#dQ!>^SN||j$zUKUvLROl!=p%t zXNDD=V$cXm#hE0jhXU}DHs?Sf*bM?PUxiQuT3-mUYT-pT`cd}nogCoclhA*4Os@J1 zT4Q&OP00$mWI7apriz6EtTF8{xKxlvn5Z?cp{MLk=k@~Rv~u3dcsLBCt4pD%>|mZN zV{aB9HxaMH{^^kF%1;!vw&K2Z(|TE=>4UM|*|?DoGtmdA9+!4kNvP^1iEsM794IRV zIK=c&j&)CYaS)r=0ZveqUmg4lgE*|Y5}t8;F&XdxO>ANSUWr=U;-=}a%<|7mnhJ}n za`AV;izbgcJXyC5N#6tc5A?wN+RKk)Va!MHhRkU!Ze;d1{_4Fwummlh>5GO;OWo1n z%DZww3u6W1$||J)=@|p$(Z}Y*bEzN>wFoHyv#2cNO*fzqbef1GkY(PgU-IG8p9j$a z(^uu7OqlKt%?mE*97^{!G@t7V{(8NN7KA*3B`Ryd*TLmWS;j#X2Ho4R0-x)}AgeCg zQo%cNwe>x}3Inm=c+De~?_XPRlq6QJeuVm1(bVPGnoU(8XOH)g_*QuV^b~*J9Y$Wr zZ5X2NeotWhzCVEYrM>A^X5_Z^TfHlERn+n0iNun;)XE)&VSpdp)^`ciVci3_OFlS& zbl9iqZOgi~WN>_)(`}LAvE+B*6pPmCFFDA z+Z8m0dYGA+`o$iZ$gD>ZLNEakY2HBjeoT_98^~S?7-ZCDbS^kMa`w@z1bB6*|7W26 z3~+GA16EFT}QaA7%nOQf&0Fc$JM$Sf?dyX_)*s#7~WhRgj zP_IfPWvtJFMYpgcVPsICO<7+kZpMH}u0Be|P9Amxp$}$69jy`oD)v>cme15*#f){n zq&*Geh*to51wT|exjU+{B^`Woa}PbiPy%Q%@fl?L9!uF|Zhr&CbC3OmR8_!H3uP$5 zH&a+4W(ET7#cr?$+|RrtAyZL^vd9cRmP`toOw4vjg-RXpw8j8wPak7dlEDc*wYY^s z(&WUrF@y*j2ZW*IGoC1LST2{`r9(+O?AHenWscD!c&c{L9#45vQ$LJCzS50BP@l6n zthu|0HB@pKj*lJ$3(<&m6DZwFNJjlIh|kJKvM>dPlL zMwHxB4+L)|26nMAC(s}yOWV^uhzqOEKG+&aDHFRB`8|%Bxw+8m{VeY@cy9u?=>pI7 z-=+s$x-iffhl(a?8iN?osPiw5&86W^(QeJy;r~LOGLiW;Ix)Y`{^>InBhipo9);;4 zM|QX`<%;u`W;JnHPl3-tK>tEb^(+pZqa&UPyqFsQt{%jK^Klv1&Yc{vN8%-kz38b| zZ%!};SU^ulW#;lGcphfHc>D}+^DB5@P2-wkIMl+73?2eT9LTWMFV_OvHorlaib_XG zdGUhx50-BsX3F^6bcChdqhJI_t+@-y*1id*qx|LbX`PnB#5-}6H^w~BteovHHUOsV z<3RDlOZ^SN%xD_k!i2Q+c-(91qM<0zK@?A)Pt6j_%^$vpKDbez$0y}*?Q6_!#$AVY zzo`U^S)wtGL2{(>uoK^`YM(&u&kv9MNk<|aXxr`MCDlu;0;`GgTY!6ke7LHl9690( zpn{mFg;38_{Z%Z$W8Fr1o#waH{c86}Wv9$Z`rPc3_l<|+X*cXO%`YEIIXv^Q9vF+1 z7=M!eHxODd0)mPHvj%;*;|>wt_T2q7m0wY-??CI=13FT0Mp)wU_a#TevNZ!=rkkJB zsFJ-Uf_5JUI-Yp<3C) zWH%mJ3tkhPehER2mq)PF++Ro7U^na%3!(S#f#R#4H3UgY{_q}U=I8J92!HLVUwt&0 zzVVqS@+s7m)xBV7-6k*7QNn#pp2TpZcQUz|=vb?F8)YbNM&{v#?09NznccM@lA=B& zUHSDE9l?}_Ik`to_WT*?bMsG{8g0JTVscV2IcJAtl-PD5B~U72q-kbWP&)qsHFiOE zPwhSKrhO6l0mZQ#s<6c79%gDZvYC1L&R8@TR7Kwc0<5lkJlCNz-q!ya1Duw=rKR!qmUn~i*rX?aLfl;NYikIcEu$~htX#h)KA zw6qQ&Sa{^C;3fb|noG$lFY~M>ydSenN%FZ2LfKXOX#aTdF%_C(YuANMz0U<%UPuzI zj#WOMEqnj`qgTQ%Anl&8Z5G|}vl9=E9aZ6{z2Kh1BxfEQq^E6v=uVYM$geg(8kK%h zy`aLs1}7^)a~5d)@f!J#Ls24qKIt`~+Aln~(GA)-7`CBPop#XjmQ4w-mRX+f)<;$Xz(_<^xNYf~!1H_4|pcWS7&3_bk!d318&i*!#NTxfS zz>KMjMa`f83Jp(845IA0FYl*uLmj>NbroPo-{%BIorjcB>vw!-D7{PZmCx`39ijYL z5Y+Se4F=BH+z%mIdT%vX!6f@Cq4wF7Ls!kSwsxj6n{Nv=a9!m`r}+pcz`u(UT7*c1 zWP`^CjBa?$em-V+jYH;WQ~$w(qSvKeb*0@8#oav)L3`H?kLg)?iafZ63Y*2cyBu0* z9bR6r3GDiHe0~~vI8)%!WGldMC%whWyed+PJ_qLQ^kSO)M*uW`T$dO z&QhQ(*~XBbEJ;!#{1AxL7YsSPo}k@lc_}w)#O$rRfA3L|0jn3UP05u$fmbbr3HHvG zi~-NFu`uU>1X%mF7QY;IZHs|yQ+m}x{sa70;?0Y=2P2F3Dte+}aw;9InGy0n?|v*; z%5TM2OKfAV)w5IPb5|T!m&FrRf4|Yh#d8tAeG?(nn-rs$bmq@*-ac7w@Hqhel)35x znOl);zsW#8zE2se!DC4e>MBbl3SsYhe(%XW(%*;rZJR9vizyPR`Ayn&1 zaS=TUN$|a-lQzOsG+M#)^DZB#AxK4O)P^q(kRpP%Rx-4I1g~_pJ##|d)#h>$XM!)$ ztDxeFj)?*y78PGjv5mb$3+TAApkrY}?fq)5(J87&x6p3FsQ zK-k8fOxc*!UhW;>Gor!s-k8C70eyX1RZ|&qyASN+Kk@Mnb zB>YuFdHQQ_nkf;I^gwau8yPCsQ&^2{%IvHZsm2JuS60 zU_ZL$VZ>nWX#{_!9zq9(TGj^3esf2JT1kSt4UO3-jfgQ1k<3NBE>6x@+qeS%DuKv4 zsgi^Rj(|0^b|8KGv^lMVCwfT`_h+~%#`a4O2jtNLe4vHGcXZiIy*|Qz#iZ&b1_8KL8N>9TGmq6 z9i8J7=Q$FuB^ob!y;=&meXrZ+v_W3$@dsYhA;a|KiI1E_)oT5ibsMByDitT`xCaQg zk#W;y)QB&m&y8S*A3l>O=`?4zxG4T8pf;C9!X~>*&5fx`-G`*HO~Bz+ivQ)C3HoDB` z@gc@i59)cG{Z8a#Mk}G~_1O_*4KyA3{XXREn1*apc{A?r+Io6KtCa1*aM z?8;%*4fIqd%P($<2a1uVsgDHT1_YKcfRW{>S$Z{cgrIo|9?Avk8JzuHY?T`2OLjgS zv3(g9+mmj2`y2x!xtLv^(1(n879>8OX?7j}%Ep$)cCmIng%{4E>Fs zDp#RTHXT7nd}jmDkB5xvgIbnIwnc7@8ek{lM$*rh0REqExf&6T?A73+WTtY{VNP zc=~o%0)27|2X>;z-he(JDGz3P1an0Q+8sW2Yj@O3DPNFhHxO6TH}uWocry2hXD@)ZVk%W3`m=qx|40-UN?~ZvH+NsX zGZ zmF_A`9g!^=;O<{-OV_r*hPG?9HMp_O%U#z2T~kzywYU9MLR-^yST$y1`;#G(sW(Lv&v&K|97y?6N_xm5 z)V3je3TfGTTgU za0086!)RqmY<<8+F)~9xEmMERKy*hd`1|`4w`|P!osEZsw|eeQS7ZN7e1_a<=Vbww z!68m<4#W3OwctA|t|{%Mp!;?nTiwmeOi(FdC{>lVMg|6^ad(BOo!PHW9eVR~k4bR` z?>#lSo)Ov_Pb1c;(_B@-v~fhK9>L`jzTp=_uCE@Am7*S9@Q4IHqord^6_!tMI+C=J zui{ea^U)sL6kjeu+eGd$_(7Sz2;n9hSt)r;>YBNao7{7;jK+v|)QB`yR=wpz zis+SUp|jbVa#2@qWUyZe@yhk>FC;pk0r$?6?e|X9*+&{+=@&PV_4SCL(VibSeA%6e z2e3U|9=T|RB>$+|Vtud%LG0<3yn*M}CI>7g*`(!q%4y^~A}0=C)sUFDG5dy|ZLD#* zW#os$d%y*iYiJ+I+X>pyxTg+{U^mnRrhXck~P*rTtLc2-- zE4we{xV!yb@<7SdOCw(u7PItW$QG5adVkm47b^WgE(L^4Bs|m*N-QW&3Xm03|6Dz$h`0^nCFH_U}vWOBWzDr z^Me|L@CUZ}({CJZ6&%?fT6Z}80y|7;co-YD@9cZwkiORZ5n|&M^MT>ZLQMzgh2kvD zOT9YZev+ed?=0#ef5{P4U*FK1ugbP=`I6Ynf0jOA4Mr?eV&K^J{R)*es4H;V?bpr& z-EHMWvg9gPmhwrbm6CjQC%+B!9AQP3mt#ta4O7G(UA zs8D*%Ha5?GNrEG+Csl#EYAbq*u5mKbM)ia71!s~7b(m9_+Fac`S<_4|qixJ)TZKLO z%GEHo|4@FZaf;~xwkrJS=O0ys3n%>}2@zZczNefit9iayU0a1-S&FpZ z$#9-5p3L|pqzckUn(^q&{QX$j$0Osk6${Y^IYF9Rm+`$9eQtMv{;py-Kh! zVZ4PwR-yh!Kc4cR*JmM*uwZ3t)J29U>T4ob zVShY2rT;#gU;F*dJNiham>~i|cevQ3Aqa~mqaj%M|KpFM$C0!Zmh#?vtYf&Wj@C3E z!2`x}+rK~G%N=k{P*}@1bQop9g`wy4?>Sz_g^lWrs10eo7WOzUYh$nC zlWJVeC*tAk?yP;j!<(?-K9{*)PqTcMMz_ESi^p{fbWiK@q;=ny|D?x%U0dgz`V;S3 zMa^$79(tLXa*yY_;7+oS%`Lx=DY#zU%m3Eny~7djLs!pi&R^@=zc2El_125cw2u4o=k@sG#B|Pi=2D(n5}%(l=t#}j&tcZU z$0kZml4LgfXm>HhHr>T&t}m;v+BrDeQfEe{FjY)#{kK^OYk(G!tlQ4}g3d?$*6Oi` z7xdg|17u|E|7zaw5N!Uhb%#4Igyw&Lz8N)B8x^%hvfmt9KhgK2tTl|WVEEh3PP;}= zGwx2L!DV0e$@@adnh%s?1myBN+xLieTgmhBqNi$gCQI|Ef`^o(?w@&O$TYQ({KiM) z1^?5a*l#V3Z}yg+4rKks`DCz&^>o}pZNN#R7U4wGhT=vW#G|?|?S$=4b;YpB#%Xdf z|I_7b!UVautH+)!U#hNI{?d_;&Chjbi_3Kxzs4!Ov>BIlfoF`nX7zygkJbAYFIy}w zJo2#CD7lvuD?|K}FZfRCcv)K1R!9AE&&=0Fb&lP+o`)uyGz_v!5vF;5bf><^=dVV) z9S#k;I2Che#5Lgp&MV&hen!!=TA7sr9A0yoF;bL0@i9bVb7acD%F;3 z6y9^;58KbYS$EIOvO+UEXyj(bONi+sVv(B#?iu!4L$;UNvQOTO>=d}wv|_uOXjS*d zVUUx_#>K?Ekiut~WIXufwDM74{eq6`Y!zy6Rb+X3&26E?h8Hfs>GLD^j}8CrfABBZ zzxV*1k4oq2ji(ivkDA2&XuN*kK9t}kYeQxu&nuCR*l=F850CncpZSVx`H{bmz3`Kl z{Uw+1OkR)wrmD^_Ihzrq3$!i1o1q2ROp}qmSI(o3(P5Eb0@F4% z2E99O-X2^DwrOAKi*LUUrH0;8)b)Rw~sWe;IEaohB3(v6K`huloh&y5sazFJIAlJo>pw{bueNMDx}z3Bw6ac zd2(9E1UPC?xpjq)sF8Gkgy_~^j&)Tz4EN|drh!d##B6(Q4)>D zHDk~?P82zM82lecg6ro=u%7%hPwP&>dMj%b#c^#|$XPLdP^xYgRV zYF<0idb)CgP#+oS_a6IY`1Exq=Z|qGE1jpQ8Sdnu6Gxj{YgCLYQ1oB~F%KRmdk72!SldCS~z*bvd(S%^AQJv-sYMfwfca%`HXsN%}`&n{KPf|!~g`!Nk< z^E*mlhL1^u4N4Q*t2MmAP3<^)CG~qkqcg!$O7%IrOG?P|)!r$wzY`{)(|(H_G@~oi zvjE>~4dhWq-C+jZ8@C>IoGoG68SbqP&Np!PKOeBNeLdT0Yj!2=`n1tw9-Z%TOG#)Z z!tQDslcw_)^L*8GpVqA#PFYQT$jMaD9d~A8jf$qxXtG?#KE<70l&ogA?h*E_MBBVJ zbmv5!)y#XVteM3&R*wl~XaELh5F0&B$jJXc{BctV5*_A0)U7rMf&UB*%#J-fdN%t1 E02r0pH~;_u literal 38862 zcmdqJc|4Tw_dkBkjCEv5mZ*@Bwapg7P%4DUnk7ovL)pnPh>AkCN-=j-#$ML!rO1*@ zWeFj&%f4m*UL(EUuil@}@A3Hk^Zn!Zo7deuUgo}*bDeXpbDrm%>%MQ}wNEi(xv>BM zM)lJtbOE5o0f2c;hk?JmeYI~40JI|hjJ_KD699Pttbx2dkcZz<;DRNvF681;=HjyC zQdZ_thTnl)mX=(WL~d?wNl8iAn$ni?v6h#QlDD>&w}#(^@=@^Wgxz2tNiExU@aEhpP%IJ4*Y4d*d z%KK}lUwL^zPj8?ySD>XbWs*Q*AhA5KygdTa9q4%NJT(7e>h!M!|157^EG3!%t^nC%iTaH#W)xmCFMy%Zcy`EGNS8 z0?W(W;gImFyuH0PLaR2ysW!u@wib@MQM<9xPPA+<4{R?dZr+E}!dC5_QSzNp)}4j$ zit2=;Q-+714LC#R#zudJQ-5tle=Q_xV{B|}=0)br%*=d#&Pqukq;jJ+Vxu!^qqA@W zcIeO8=&#-AhYcZVa5hTsjg1XVVf$OCKJ-^l8@mFq=O*PJDso`j3IIN!enLgx>+#R> zyF}jiemzBp>Uaeo&2MKDtGm2QHjHB%PSo+SiPU_qS)Jg)y*M+JTmiESf4XiWiTy|6 zwYvngm|(#?K27JC2H&$=h*|?S@?9ds?mC6(tCf{mD`k>-vvY}w?TKA$zUHg}U%R}2 zO?X=O$mY$ysN)XeqjS+cQix)qQqf}vSQVCjVZau|S9=x+Q>jFy06bj~-zgLVZ%3eU zd+CC9QxjBKsN}F91a@Tmf75}T5jQE2JW&+>>rG5uT24%!Yq(%rlTx(t^`?#2#IhA< zWmkFSwNE+a10uT=QhF2{m&pzbDg${qK3ic4CdAo)aE$4tn@`${c%AVH&2hiS%YMpB zuYlB-^6eMWTuLUm0aoiQ17^7Epi$tOVoqFd<;;1dU51O^_SEtyH{S!&+HL1CxF;f_ zLWGiQp>zGzUT1o0S>~mCzs=tf;&vmEQ#bv6J{Zdu?y49hzm8V=9lW zd0dm&Z(&X68Y*3KtC_n?gBGt8EfD-|#%7|zOR zJ3GxwfB3SDf9Dkm`GpX3J?V$48r28m+Ix&o`!iDweBP*-Z znfv#;?>eP=RSq{BxRffmD4bvp=I)L*?;HP?dTR7>QreJ^?@x&Z!-vMYyqtc|C#u5l z32?E2a`PVV{hZb=t>w}o)ra;hUIWtXw=!Qh8rP!T9plb1t0+Q#G}O>=@?Fp5X4i?N zK`hVFu$yCoGd{hZ5w}L-sQ2R(ul@ z;CkIhbFbpD+q$kkoU}h_<+R_|#sQz}$t4%K?UgLRt5Rm6Yn1(w@wn_#?gD&XNyXP7d8|jkFP|+|d18_ZTz0(&IzgtFa%- zfgeA!%Q>rOBSb(oqIC7$@|tsQueYYaghS7<2MkY5zZ)8#`%00(GSthN^v_B|9!W;egRhs{-#2sS$vLL9fv5**qDm@O;s%wJ40TxJ9();e-><&2 zUP>ZorN>e-bPP4#gXHJHxXzq7W!r+^p)zRYv<+o7w zaGnP;`W_ALn3uPWtUvqdJSffTJniJ(H1z6;!+~f4j0cT_tm@el-%RN#Gu1s86~S(D z^Xu0RMT|;0`wpDdEN-mebKlq6p4CYU#l)|uSb8y~oNp=TjS1BEjTt%FO+=)C4=F=+n{L9w-=|5T2W=^wMNMc{u((N?(sJ z5nWVYRbyDkMK_xD6=hN+|Dbq8d87XLe2gU(iN(WozcOL=PS7xoh_R z;Kz}LWC2JzBaS+OJxB2J#ce>Et=2^RYKHigD{+Z|NJSVAGSHB_aM9U@Rp=yCNG1&a zut|;7Mb^uz)TC_cbSm3V4&^%C=h#s8R|4Zl%G#JB6#D@FQlK058yAwCH6zK=tn&$z zZckPxUT7>VCfKraPtf9B17k%FQ9H$j+|8vR^PcZQt<7&M z>Oc9aU!{Kd^}2V;2Qy1JfxBpnCL#M%Uxi?wZD;BHg}W5CUd$EXRau>#zSYdS2Pc8O zEWz>0fPx1vl# z)~vxvtm_$IHIeXerv4}1C^%B`EWy*8xeMySSA~g_7Y-S8-Fe5#h;zg~z0=0=>O6-` zp+^%A@2mxo>JK%`z3H474u^%Kgu&*L#emFH*oph0j=X!GcXgbvPfOCVFOJPKyYg$i zXw>eEw1k@L9pET={p2Beiy-67TWsR7nIX<5^}Yh?G<|p6lvK@G2Cy5)RP%&y6`km- zs2P!==BLc~drcK#^hnUFQ@2JOuqs~{w4OC3I`Q!DEfyt9YGpECestS*e?P;UXQ2H0 zd6)gHa7m7fAHMUwjgSu)h#IeHM#91c>IkJjoDMj@ke#}9><$_U`QnH@A%0bt!{oP- zd=AJ8^vY&t=ht&8KV&<9SU=l%Pj3E0sUWWO;@B0Qks3=`O+8HhF0*N+ahq*oql%)X zgF8?4X6*Tz&U{@au;bZ6;@$QWgu+Cx!%#Zw5v9ee2Chb_NrpG>73X-A7zAd9porgW^w* za%irD#ApS&S2aGBt<(;6RtN8K{qW_%Oiq>b%0bCMfAgQ3t5-c$y=ajSr;qWfM+bVn zPc-Y^FubP6ENMDVfAQ%=#$zXAKGncZtBaR1-ucjtKC=Z_`p-Ixk5y?{q^_fomk`?^ z!_QXrjkCs}_9!{yHf5xY(VWKiB~GqyNAC zGSdLoH9ylKXe>@hk45%udNi^)$!l>bk|~KUu(fb|EaXQcP-Y&S1r^ylkOhA1zT$< zFVXJWwJTt#C?i<8mTCQfUR*$w#hSqrmQX!NXIeFS?tS~d#F68~Y==FreFdzKa{?~@ z`0{p_j3aI3i)qskURTjfe=Q0x@))4(fAa>2J>9N-=ZKVHjBsOxrYhz__Y{Pz^g0TIB!!F+C zx8mf**&SMYx1}B8iO|!ew(U}ABK9V?zT7|KG|+g@XG%5|G6{RcI=dmMqb+RzgGF~g zyw|H4_g$A*v^w8}_%FY^*`ee;-p!fYlPqfFjMOvfpQk%63Z>DkidtUgOt+u^af;VV zF30`b?ObMMZRYjC{5@uhWd@q03;aVSAJhIrsrPi-y8FuH=ak~oT?f}!HfD+b_9;}u z-x7;$nIu8yfXGlywD!Lif5?yWj( zI4%V}bulxy(%~=~$lpzbaRJLW0Dj^>-DiQs?yuACJ9Yy1*2Rr4RZoas#f~Mi zpz+iLrMX9y^Env@R;LP%QWj&0sy~)()%YW+=jSJ$G}-{y4yJf??5wm2;y<^%vC14) zw=I#w*6>9cw9%7EL9f!bDbxU@l@W{S=^%?vJFLZDRbYQwL9M& zywbn+-iOC_>8DG!#8BY+_p{dAdRxNGHME)dMD*RecvX&hu4h92zxix`6b9|wHeZsc~vkKaL(LsjbY#X7FoXX4rk&uyE<*|yE=MG z`0m)$uQ;f(_6322R~!{HQx3c4V+R8_hbabk4Ze6xG4v-LRXnK!6;TiW+fK;9{|CZs zwQsLs!CkE{9)|#ydgkh5H15)u{5{(Us)5ILrvmabEi!N31X9!9G~62C z|L$LDr$I?um_k%N8(%2fw-~y?3wde_p6|~&>}ghN;kzx9M&tS-&#KHXR`{CrcDVns zfH4LQI`$cWW*Lpg#y6%ZYkB(=5Ef3egMz!PHXIi>S9C}OAd0%wILDNC57mCJ3)cfs3- zzY&X_?pzrXxGAcdefVOoZPG4h<2&a$j*CXqzSpmTm-CfP2Q&>e0J&lMc9F+mZoKF2G&469QUTf;kmVnyIx2haz_~c@*9$ zie!Bjz(Ef>H1kly)!~dPD12IQ3x`!V2DhT{wf#u9l1A*hv0Huj@l62@qR3Q0T45*1 z3c$$ya~mLQQk(?yvahUcAWr_jZuUn;L_o65^MEayU~=@YyWPeDz*e~tja+9`4zC9U z4XE0!m4Ul|Ug2`)71ZbvX9fAG)|5F5t{ws=8>(?G{@DjCYK~w%)%xT=fBCW|>9hU6 z>G3ya(|cgpxN7ITsb&d#a0dqiw9`at?Nut-0ABs;*&Wn4LC|#&q>sJDAU=%%p$GN@ z7eM|xWB&!42Co(2v&&Xz(QYv5K^6yaf`Y3rJ||BcMT614t@}P!_u!(XF@y;eV#q{; z8|%US;ieG>wK9tApMb)BLKnEc;6PR-sR$)Ux0vN`+z+};tf;7QiPC-q?5a4OhNg-+ z!}2q@_^OBmVIb-l=;Vk({G|LSV|)BPwhjju9J@P=3Q>#|xbJ<@LA> zFTVl$$MHZv=k$dX(aWw6J$$BY14VcL#nv2gfM-tFi<|FsHEzLzW7}Paas$r{rP}K|piT9u044^suITOB4430nXmo$7X zqX<5qno(gKq=H}+d093pI8oxqc*=>97-}$jdTvGqVZ&XX7NPNruydaY3MOuqgqPo+;dIGy-e^3Q0F1AEXA&%b~Oy zY%qC_vCRf8JJ^5~6~V`4YgbJe=jXtEq?90ogBqpfI)cKV1f>023+hXPw4KtUCEeJh z?cbbyWrHFtZwKk=)P*v?wD}+WwWezy`BAtvI$+R(Hr?gBfBOfD5X46NJFF9uDxVx{ zDfWNmJz?0kC6uE!Z|>|JvH1-3m_qXfhu}$pZAsC`em;yS;?3E($Kms{C4w@3(T}o- zhF5xtWBZNtfPPHK6Ks=)BsD1z`9e+Vzt~g|V+a(#QQ;WVJbX)Hl1g7H^&z#1qh>u? zHnjKw42CdDO-Q#7%wnvFAuDLiys(i-PRyqnR#}V8ri^~St=D?GZP07wgY45(`L7_QzKbyNv?*;#p;o}o)fWNe*67={ew>f zQVN`<-5O!X&1;eC(3Gh>n<~EU=5;2noNeXtGu(X{jf(@05VGm_!`YZ~ClnaSw3^#R zuW!?c?ktMw*G+4|@?ty<1f2FMD#}QZy(xp-Pe++V?lpLPzVld*x{F+!E|HHP7hbeK zh89{fA6)?_SN_N#q9)`*Yhq;qq%41=4ujAfR?12}a5eSDSheP0oo8<`&#{szMYcM< zePWm0xugp&ya5A4B73AJPmV3RRh^6ONbU$9uIkLkd4^AW0{urJOWwptfH#nMk@qHm zRbH0M6d8Xxbt6LpjiZMm5@!N5*2aP9O=|J(={l--hfg)ZtwtIp@R(+*D2p6g!- zvF;T6JX8PJ-S8YwLt?ZUEv~@$+_9;=O*J=^p*pQPw!iMJ*{z4PKE18W!x}bOg&oP& z7&pInSID||Szo693a)SbLIXLwtZP9?D$9NNJYYk!goWdghXgnFI@>6MSO!{K&5gF%~HYnQ5@IK`G+`=Dw|KqC{QwB+1V-ZO9YUxrk7xJasT z5=58eoC)$8j@!X#!=G(u4K0$MGJ!{5qTzh?f!M-FB535wI~HA2D#G#~`w(FaknUy% zr0>Gy+4Yi`9{O4*Ni`6Acc&_(9B;AZFsctj!}rJsHRtu{k(QYwwOeRNdY5&W3P|58 z3_74~AK0?ZyYm39JdG3Q%2u%!`DN~B_|m6o52cX7{+mC2nHw6}&dXpjWVU~{Ofr(xHl;~ogNJ6(w=>%TW0oRd0|sdQy!aiUC4=)4(`U<-x)`IGvtA=7 zIpZO--Fn%3j;nH-A1F`*q=SEqS$xP*M*TMEw&q6}$hj{c=I|XW7HzkA0~xfRkPa=q z#?wN&|Iqpk0*foSr0dY zJHIE>kOr*7fbg!vH<~$6NW~Ts2s7o_bVzwVA2C@E9x`WpdV+eZqKB3{3F-7$LgD`y zP!?bQ)<4Lm$mHTXKkX{Wc6priC1@y4{Ka_*$a&&2YVN9Jk4@U{kfxzPX!y)4%j*hH zjLYb`p-9otbf3@&H#vny6t}zzBn6O^=O2rDzdoRp&h#tmVWy1UHX8i$4P6#kL_CKdd~nO`I>pXVA!AxwYy{OZly zLRfs)PF5i5N!evIe-z9KD%iS|F(G~Fzddc39!Hn=9Cr|U%Pr*Z#X}7GZxjGq0MaQf zHl&`pej2!US<-+4cF-aJ8>g_PLb*gH2;(G7q2K)Rmp6V4WvghP09s~tfVjV);O|~& zoI%0s%g0FqL2?wZ$C)iqoG7Ax;IK*73si9o|1{Ug$X?KV&4~us!-|vpmNV5hMyN;6 zexV|HY@`2QhfNTIfXaOn2L8hUZO8x~X?4Qr|H^<6DDXUrB|UWG5DmadIC~){Q1~6V zXUq&Bz3m%nbioG39{;`QP4Zc)c0!9-)*Hx5jmr?f4Bb55Xw$#a!Av*7qjJKq6=(hl>(!%yRnMUG7d( zppM?XW0ID89n>(SOcQZtL?is1jZBg%Lv!_(S$YM5(lQ$bScJ0FfGQrSI^J#?F&fc^79g;zaah&cF0L?R-C`TIIJn;W?kAi?uAWokFj_-mu7OM4hS&y{{1uL{-GmazfoRU?8NlzNkeow`ad>3svmQFb<~j8-PD*jM$w~c> zO*#%2Xr#3h5rd$weG{Y&dnq)|f6WNf`}W3ZdUEb(hARJ-Z>d#f#?Qps8FO4rzxp^~ zH!cQ?2p%2F9b)OACY{Dpcv@mU`E-HfD} zjEBMKi@_7|Y7azrrwY-L!|#jvx;$%Q`4e?{?{VUAZ1^!Q*%Ou2$K>&O=mD7FKC>C* zRqutiE<=bOzn$nloq-Z<-bR@;!M&b0$DbIJ6m8aID}S7zv8m5mOvv@yRK#POvEU}S z(_Z$SzE1XNDAtP}GiI23eCST|drD{sIi?Q`?(m}!A2nw3(|ue@azXW=-iVPhxQ|PL zOFT`(pR)j?B}MptZT0M&p6*N}VdRbO#V`p%bpOJ5r@Bj8N(*+!^O3N37wc0`RW)U4 z9`Qc{ea$n9CA83XgOG9LA?KrCdQ_W0KZgI>gV7Q7`VgC}nTnfegi+-g7@)%vTG2Qz zTWRt}ytV#hG-=*)lLSy?QB?R4E z!cggdbL6e3{h`g6m(7Qx-Utc1O$i>(V)7fBGJm#!uFvRLL1AFR0Nl~T%Y5u7?=7FB z#PX_5P`b-CR?*^s+$$K16Xa5M2U(Dy-{EYT*~#A0w^P40;Ryx$8+-t9Qn>KwHk8{l z8eu&-K-Q>gC4^JiDptlkqOE^y$*i4iC`FBHf#&V4rf{Hc7!8RAF$JU!ikdZqzhX_h z5;}3qL2l*G{IvLXVOEfC^bW*Tprk=Q9|?;rq>~SI zvWgGJZxH-29ehINQpb%9a@d+P0GKm?dScZ4sbJgfq3{J5B`(BzO;v9rt`0s?Wfa=X zc&IidKc-1X311sJrOp9{r&u-k?ne`S2u=eGqWU0<9z`%j;}rk+AIN|2xv;YWFx0d~ zr8^N8P__ojkWbKOZ9x*%CN!AOxP=nEj=>U2{`NyYaBEsk(zGs;rGz1Rmr+bEt+R(=pU#6YbR;P0P%hk?_OMy5hO1hw$0WYYm1qM7) z@1vyJ9nAAIDw10|kgWYO>~$ja!KnfkQD#GVWxQ?Xv@keS1X2V`>S6Ok1oKQ(!WUNy zZL$|ibSda^w)Mq3ee%#MO&FtN7nTlf@dUA8n2WxLT;VtpR0C<`6v#6i(l){9`}i?Z z@&Rfb33kZLCRk1maL$Nl%<3|s2=6ttA13joP`_w7U>!6lY6PeI&dM1>PUq&RzH&^X%6 zI>b3luHi{ol*1j0v26u?I-oo4_!W+LD5Wa6{KpTDcp z3)e)^!5n~FLC0qql}pqlm)Nc^!pFd9rqX75Bq~oBq{n z-W80Sv@t=Wg3ovu_h4h>C^H*yH{{*SHPsqF043Cf&&|BZ%}4SCkNBF}UR1; zuYUWy(3?U{vVZm|kQhh7Gk*kHMMstZu}`}}qfdW;S>;uQdJ9jbhH)x^19vY5OZI8v zitZ=U5(XK`5{^5hOg3jG(U3+<&J4zprQCbv;!omg%hDQHcjR4oA#Kl z`^lTDlXF!31J%Jf#4X7)`rCx4SevH6K+i&yhy!8p{?ZvC$q=&{>N;r!+jo8{xh)jW zY=Vh}!A`o7juYF#PEr1PnOqi7Pjm1DTKF!Jn-JetY$k-kpMu!f4DpQn#t)iPw@}bt zn|s67f%VHUEjHT1jFeViP-7(Lb100&JQLmZ`2M+C6siP`+l4}uwg5j?jzN=9sDpvz z9V8eY>>Ztu!;ph#c$-|oK+r5J)>t95c^Bf2wTDm;1|p_^%+p6`o-)lrmll_`iz~AO z!6jwN?5dLBlPD|DwI8FeL59E+Mt37y(OoUH^+^NFh%x87w{et*-5F)VXHx`Aa6(Za z5^)P6L4ir&9;Kq79{;fBFKzibj`83qx@>pHlru@h(}AEtS7Hg$g@pft*8So?K?yUV zqkbPQvS`+7a;!+UJ)U&g?n5oG(ghIOM*e4XO4uCc>ty4J&px4X@C9e7=A|=0nz3pJ z=-4}q1y%zcT5^pkzKVm~1lCi4GftQnoZ z1k>U~!Y((WENXTAZhoDTIM<-~(dPh$-`!h45xaR;6AZ`K>IhNG{f{O0?U#+= zf%%#3U_2Dy82%a-h1|Xbo#jqTO?Z&^?=Xzin?+$nhaET20_63-g2oVT9#~*b1Nsq_ z>zmLB#;<>d!`RiQAhx8)!-^Hihkj)RxVM`)oqD{V_jrHB z^;)7OGt*~D3zH$*1ZLOY@a`q!gD?L3MU#*4>#a+EE`hl=-`H> zNEW|&n-+Idcg^gj$v4-xAeYB@2mv4S!FiUBH@!lY457(>p!sABATb53 zp+xN{rYu1TSC=xCQ~Qfc8kcAS_ez`)ptK6#%=a28Zfru;z8vDur#2SsG3QP(k_#W8 z@RJDu#_6yiLCMvs8Q<2=94ixi&eyyZ!x%mRWCHZ$T{$cO(cZ-O=KGDl;2X~J{N+bpL;{I5L5N90iZdbsZJ}&5abT z`KRRal?shJF6u)_riPiv|9Qh>v&K@gnP&M@j$?a-1GcA8$R5JPQ20F`qw}D70Y>+3 zX%tUs}M}Gs)To@3*aN&>9b7cWinU=I9!S!Ebfb=^b z{HNaaAQ&JQ;gMdeFT*#%up^~j)%hE5qLIsliI{ZN>ztILbsxnmpo6M*oeScyj%WZGw zj{y7z8rRAFg>|m*9+HBZ+o~YRyO$;Yt_s15$S-47sh8*KG+t@_U}TOJhER+K4}(*k z6lQ92mO98s3pAXXXzmr_LbfS8z{xNF#*NiGtGJN)6O=;WE0o4--s^rfpi8}}>m2WS zt){MMqWo!IBe`>o_*MokNEPj$PH4cG`2ZzKJXvW=;Bn&6`kksEcBm8ei3C|8##U)&LG;PztoCZd)7 zGf6Tp&QZoA_8aB&Kw1Ux8-l6+P~I;r&0OLNw$EBG|CQ9FRULWn7^Xbj}~+ipdT9Wqo>ojf1G`9+fEoGkzbF_lP=$_OMVtp zaD-??HFC$N-|?wPK8$nr>_O&<;_Lcrs`--f0xwBkh3{mMxP4~|cQ}3VdW#VZJ8%qe zU*16wm%(|}CTS>pDuqX3YdUEvxfPnuIyMAnVy*xONN}2hb!o%?pC#puHK72 zhP1yGbS4af0+?g@Cl9R$fK+}NF8ODw=AdvGkT~r?54YNQ`htWkbH1WMW$eU()37Tw zj=hNqXc+vCO3t8`G0p4lUcdLJFRl;SIUBbi7;-i;Im5Xv#Axw*uzPQ(l5clN+hXsj z1X_EO+xdDyc_@*w3)cy(FmdxA1|YP!N8=}kJt+y(dJK+PCcG%A{kUm(;#{4sd(qAg zfGbe9^-Gjn%6!3*q~QMQVdY7=lFtu^`Jgyx(_L;zsG$Bqm=DkZdD6m*l(sy6>$9%_ zjnKBZIWfVYuR3s?kCi=O++7*87$)5VB}$g9g8J*1bq4aTgk!FWM8D&AWN2QfL;Vw7 zSYiPo)Xc+LcYrx*O(BwTxz`VQh@GDhDcDkrO) zZ-t?SniNKClyz+UPoVO9C>=r)^y81Xx^mm+ezMR~Bi#N6b|Deb=VFU+(iGPI$YbEOhl3EIC>F^mhX@TRP+DvZ=1(~m9aN?MCnUEHfUz|(0Z!D({>>`Z*lG}}w zZlMJQ&{@{OemV{Z!&bFp*WZM&aMy*H&nYEGp$q8vR{M?DYvCL_b2n zu&|}(_rhMdWk(0UAHYek8?)lHEab<{dhYoa=loXw&@o_pRSio%ZGw!B=Ft&Mjw!kV z(uihi)qG4M%szB)rf&PFNb#_;^k@@F-M0%s^)AD#jTLByfCubRyF!15o{Zhy07$LM z@sw-^oMj+q^7%+e5eh$ko+|ClJuFPcCvYJ3%XusWZX%HjH0Qq;4e(q18Q#^1ZUe&C zIaTbhK1JgM<7mKn7Mxb;s%Ew;FbF7c_Ko8;FBjifPVZWHb$B9d7fhxyn>L}yhnPIj zB$)5CeFw(hH*q8P`1p0z`t}qi4H4OR7-6>Bgpdx7coXdXK7i&qN0J;$fBBhS-F%u` zZ#7SuCg-}$OXkP}tD8J}f`Tqq?m;WsDgo)Z`)r5`pUUyi5tF(5DDqSoE7D;%2MhPX zb`tmoh`j&V@M~5;sw|mG*aX?T`-Ab*0L?0te&xZ@ew4=U5Kh(HEz6`9zy%m{cB1UR z+nghCw1lEaXkJY;$-^jp1k*eP>2e490i4|q&hOATs}}2Z&{BbxSi96h;pT0zd#z9= z2deZb5UoC)kpVBK1P`9LGBjt?%VP)$6>c5nN{WPRGhm{G1ti1m=;lMWMWk@E_LA2L zLQ(|#_6v#{w0RA16WFHmweDjBrhUQ#J-#0MCzWVZd4g{Oo=05XCnr{Mz{& zq}MM+RSDe@+Ynu^GrN&@2gmX9!_N#BL*JVG%Y6BvN2F0;KK)uYvrNwwBlbGt@quoz`z298$tPbKVd( z@I2^5NH7mlljuCtL8zoEk^V0@6uGU1>;G4El`ZwL!;!Q*PkF9Wx&D$s3-S zCccE<^`LPwTNWpFHuBTa1hF5b_bY; zM;?5-zEUM}q?4?`AztF;P=TPheB})GeB*?x)`YR`) z4jaOAQ^N;@&Tw`w*L{zRojnWi1+Xe5woIFeIsJJd!A&pxIxY)kvR&$I@SM!WBtBqo z1&=RGST3>)!^|8Yso%o|N(AmSK_GGOOp!w3xY#%R9gZ}V{hAOPD9DXuRr7q=2~#U; z48Y*&1-{{@D0_Rtk#!LpUndcIlL_t%r(klk9+qmls-2j-+5ckxuJDC4(4||+m{oZG zB}}sXo;$gc1ELZRkbYX_vGL{NK;~2ABQEEd`02o0Nx!dA0(RYR8{+Of!6g92LIN- zUU#FG-hO>GX&TDw1tS+TE=4bz5?n7mU{)MaC+}syZSmEIM-I1R-qrMK-fEt+3i&Kb zV=CFA}7W6c(Q!Jnb z9&g;_xNBBsxEKr^0A36GdE`gS$*O2coqNf|3a_X#)Q)c9+alzs_05A~1XkiUt27MafN0Gg@x3kk0cdT^V<9JH&Yr{DoA>Xp%kO?SgYb(B{K4SB!|R(P>mV z-*3vXp0QFfGBLR*QCK*I+n_lr$dWIu;OM=XJQ`9cA_*fLN@4(N!%r1cy@rU@^tU>m z1QV?*P80l_&oS6*s7SI^roOXbz)PzPZNrOft?w(Q&`XpsI$H4TfMfeX#tET&u?}g6UPbO{jG_y3q(uCxcHYla1Z;6%EBqn2LO@*_V#OXiC#+8eg-_d z$|(%VPOxl0!Gmse8~)(faT{j*r$w3h4soHHdi%C3z-=2e$@_3c4`fxc4DJ1Mfq`4! zDJoJ%KnYa~O8;j~DO!JJnGr}_ZlS;r1|azK^$SVn7bbRe^=N%jKw2^dKh56oaWrO!r=zHGr?#7-r_uUnR8HZU5M6MF1sPw6l2%~^1KdxX zfP_WtoCUAE9ziDHvsz_oi-RLP=Ua-#U4MoML60q+bwd^{B~tOljvCMLL>pvTNbMLp zVynwIxRqV5SKD2<`jZjQ@Z0nT!g5X*-2kket?%zdYdx5BOF(sKS9zdpKRdlhr*n8T zERITOzJ9>C96io}e*`zJeArjk2W&98sj*!Y=%WeKz`jK8Za}n;A)<)ebweJ+J{%@{ z-i($*OWDb;vC)s7%b7QLlf0#5&#Ce3s%iue)FE!1*5dPdoyMjx#1Leq`n9_RCSHB! z$B?{`EYxxVdiOK092^9HKCi1f=JVdikp%s(Fvt(UigBqbfN_=!3BW2=IX50WI~DPGPc!s6Zzd6WfT*CbtS%iPVs9Z2tY+)ps0a4aImaFZpQ5oX zU4DJ*X2)kL5U2TlzaCE@O4Kn(2n-Kfj(ws+ne2@XvE@YgRXAzMof5|xug~X<(duom zp7^2Wp8kc_R&F?{Qlq$8B8m*gS@Xq(77kQ-9o0r5-MXYwJu!A1b&xg>vV_s367FP) z3s<@QN|ysjG|%KQkgXH4lg+MUV(o&28bjqdQRJ7^ttn|}DI?6MxNXQWOgt99>yFTX zxkN~l32~w0vKu_D9qn@<`|0Da4xe4dnaN>DqORrEJ{eUGF-TQDC^$TaN>F_95e(=n z-sLwk3c6gr5rWDefM**_9e?PXXY+uL1Gd>3WBg$B`R|hqG$Ic~nM@;vn8{`up@rZo zhV(92hNqhWO@55@bTb%&l zsF|JJ_w)R4##C896FG72+uiw3Epy)_RxZ>Zy`mTf0{lVx@P~%(#cNI5KaCl}wP5f| zsq%KfD(Tl#3_>+0 zA@!3@x9hqpvg}U^e!Ft5UE!=G;zo~;$0X%2n|WplymxFRm(Rk<>+^EzhxRhqtGKbd{d!mT+v|bA z=Qa*sy}w^hU#1M--`3^Tm5?k-i1tl)J*1<=jZ={QT>bo=)g_dhrnmrz%}ktI>RUue zXJKgh=!s;Lk8nwj1^q*D>Q1_B>Jo=M(0d zWcMq>x`HRiwzx#0g4?L(x=Z*&-eCAr4%S^ftNQ$QreFO6iV_89P?o3PDAGIRj4`NA zy@=a-#zg9K6L*Yn`k$Een)Q>6D%Y6%9HiH0M+~wJ=esp|g3&yS72t*VE99c=i|F6sH(&?M~IB0s#We z&X81-t%o)!vYUTEyKFZ5XugAZ-(nzWn)dPOkg^K|jbpY$7sbMVPDZ?JmAB0Vf)q9Q z{WL+}2g=b}A!V_99vN|twDZ^^C9!+_uPySyd@gHUrW#7BBknZE*{x5Hb@!U#<8j~^PB|5fWFL5h6xGl-BLxHM% zG46|c^s!axiC@j{EA)2zPF9P0yl2g2=EEZ$!8%2Yoa3VWOahDER;PXz zO3@BzJe>CE=;2TcerJjcF?C#V?m6z0~hPwaHa3a-K86Lh5i!^t^=bInbo zBH8fa{G^mhMp@#KxS#jqKz8zKv>`k+f$cZx^3x%MEi|H}s3j2?_YL`;Od& z6QccsnArIX^Dj)jzt;1wlwQg#VB(g**(n+PdF141-XZ;q=95X<6Ac}AJS!gxEDpWr zqM2M<@L8M9j9dC(f+hDix3x|BWzjvXE?d#n4XtIGtr=Q5$f!X+Z736k_5K9h|2`~v z&0599tgiY@TX?|b*JYDgtB3Ykxqm|qOIBaolZ$;2_-kGMds@zlh(4^qU4&)P>+qEY z9Va16qkm9+E4azEo%bF(A3c$n@YFL*nDN#u-{PW(Ml>M*`-vs$x@(>@*ND!tH`{hG zSr3<4V9B{5^(>N{nvG-bQ79@xs5%Oa-xCG)yPzuCCS6b4`Kx$nwz8JlM9FX?7Uo+8 zBkRO>@8ih2Nd0%)TiMrVC0m47+XNWZL2UZEX-;)iP^7>yv0G|i)TOFed!-3}pRA{6 zbChCTCm)(ikbBL2k5HblV(I-Mzo!+2Fnr)AzK`90c8zJyhZZrY?PELM4RidV>U*o+ zyUS-{aQ9=Vzt|kS_3NZ!VN&D)#j1SqjNU~VUrFr7#KGn%0K==ScVC?Fsy zH9B&~chW$z|6$zed31_z`KKc7aL}kCl6gWj^hv!D>bN?Jynoi4`cj$hEzG}r@6GjE zbW`*&ulU*DR>i3q>C&|b4_ek2OdYS-7KfRe&}=CS+P;$;vku5hg4`ExPlZK09lv~S z(UiAte~?UKw~OAh!KsNNp89O1F0K#@O^-`Hw>n$x=-^|F>t&B0OJ_2Uu= zspIfHv?*Ae z`64-ZTE4WqI9hPJ$!T7lzwFphwuhYEAf{K0|Fc;3O|bYysXb6j1HixZaEFbCP^n?CyN z8jJDp<^5R>{G3L9uSfV4XP>$IrwLo!XPcS)KB#Uc(s)(F5-c^I|52D!zs?<3_e(=+ z-%R^1=vd;JmtTdvKG$N{8NAF}?Ax-Fc|IXtEvodv4Yo;Kp^h=tsm;IHyM1ocCCf>ac=6^lKVB04R`guIebk8?WKa-&HY{5US*}ugr1px>a974 z*suH?Y`OeR)wWu{vt*rZ#^91~vx6>&%7i7iu6ysp?J2#XkscW)1r2OBm3)1A$Ay@7 zP?q3TI%@oLc%SiC1EChN+k}}%r8SOgv5Ij4W)+zEINPSrJdCM|!|iI($Yc@^7Ev&89FnKv9#8UnN#9Uyz)L#fpKXI3_ z(KH$j#pUE2rHF@fIgrd7<>9Yd90R*Y&~6Ch%qfiRr>5b1RoV$jBgdX>H+YIG_UvjE zEABI%V`G?P+I1uiM1lv937=APOaA@UO)JS3( zb0vv`^uf{ZbEia2k75yy`Lq2LKhcv*&-JwL{s)y6Q)ZXSnjJF4m%ml_ME75|!W*Bt z#C_%ma4Sk+_?DMEGWKy5h`O6b&N0b`yOnwNrif6P^W#DW6KF3fwm3Z6?B~(5GhLdC z5Fv1XZ)pWAjZ4KLJ+@Y7kH<@5bFMxrO{YHJlFn{HBdhqnk9RvGy(cO?OUZ31z0J_L z+2s`jRvA99TWYa(rS;c`^#*&=psk|uog;Rceh=ThGvK9@Z%=EzQ1YC7MoN4%;?efr z0R_)zo!_c4&G+AEF$hoc-7%wkoDi{tVP}B!bI)=it4~7*qWd@US_A+z5=%vsH;T_3 zFK2N#E+l`Xy=Ho{-AVMe_!VU%yLy3f3~1zLWmE!!YLnj~K_aSNdV|QE3r|#Zvf)%cwAM!8d7U@r9p4 zBitibuN9kok5avMx69{~#Oho!BKiY<3qeKhBUdm?9yji>L3JntB6847CS{*h|_ zCHHDM!|(TfNzx8?Rj!9u?yg~>3yM!|N6(dStY^(H2d_4`Ec*MM4(6jXi5SF^Wy78< zjs-JS9cRfu)X0W-Vy{$OmoJ{oT18JU!FdaviKd%9t}d2rJV6L944&9|npC6juQf4Y6rH<= z@9!qnDK{3CC~N6z$j?wxbMoHa3L5t=Tl2|NN+01ifV9 zCF9Ar^U7Adi%B$^{@boqB5`Pk%_LleuJEiWkw^ZM+CuxRT3%U7@1o<%Ejsel(Q6?( zA5j*kzw5l%EGTmHp7C_uzV(X-AhZ<)qKm)VeXWm+ns)6G_tslr@u?2oE!Z8)y^SM1 ze!qQFEMoiaV*O^<)7of^9=Wi~k4<{FF(*Il_hl6u(k*B2r;Oy)48tjdlT2_uCiOJ! z=6KF}K@%1CE%Ko*(JJ8xdTFrJz-wxxEo8G<6kf-GLZDc&@>TD!v(t(Z1t%)#yKhC% zFtV`7-yNp)40pC)-W;~|8x9Y251&ZESCQ?Ucmq!Sr$ulTO~`8Ts30L!4?|#XdKI4^ zg6n5Qm}8?l{?-?I^nDNZBxbY>2+HRs#+F9f_7q0_w1-$qx|qxJK&~1|7#BLD?)&JJ z*wLeJzJDh_Tg#u*B0HBltH&;G7x=um;ru)}aC<13^EG4GYMKF-{G_-=i!2eIVeelI zH*g3DoV$LVaCWPQ6Umf6SiH&2cAxcqBI?sHD?Fti5hu|LF z84SPrOZ36%>(?)Q`0!MJ-fmd$`K!c$w$AZKZxX7@AA0`fGv_y}-1&GYSf)`iF}AH% zV-Sb|A`BNvP&&EPmb(9YR%*gozwMH@c6t^TxuZvmr9x@oYQle$F`$Lgc=uUh;jjPnLm>{z|IHQmj7*i+ zK7MaPe*KSTt-Q#3)bY^qO5v@qlTm9g=Kq_#vT`(V4aX_%I8%vLmN$9c|KpSAQGwb9 zv)cs=#wI(J&(9|dTm6rPb!H%6LWP$9ZXEq+xUJ&DUb~|kQnzm+$8>80O7c<0;RfFM zDYt(3@ap;3ouSW?QDx70>OJZ8J5hwUT*dwIja5R$wRaRodsSPm2Y(Pf1A(Thvx3In z*AL0&7NN-D&j(_2(S*0MS1&Nzf0~foTIN-SsI^8kGCD5iTPtN^kL=aq4nufFzEYy&Zr#bqh9~j08v}!E!vlY>eOg7~ z)kEr53u(I-s;m89(4&sgA=H$)s-!YtKK`tw^yR z_%^K@x)h!)*%`Szkm5VC7@l?ai68C0JHn;JG|8X}(GeNa0QBK=eGHW9ES9jLh z>#Bt}mRbdpYb^yr79vNxgiBoRtSl@Ew&Z#FuJlrzXFG5X3WqiJ6TdDB64b9-pnV>) zwt$%zScc`P?F==m)z;3B=vqhZKkt40`p=3?owxJR$(}VkIgw#X9-*V-zlH(W%S@W? z`ms=L%|!qWvbB>{pQVdTe7|5-kZ2rk%EO{)zx`7hwN(4II|165{W6wAICI*^TE@YcO)O1xl_GsAR*AQyv$$Gx+cE) zdWvqluKaMfB_y9QKN=ux23GrJQy*3(Y`Wbvd6pK&#d*nZIi|mM)B=M%-y5X6^A)pF z)x`Jj8*}FQzebW!#cPY**L|g^qSX|*acrWVS7)nMXTC8m9iqTyo)QZ?Wjb-~ix~_2 zMo)oUT7&A|5Fiznv*W1L9~{tfL16}f==qtcGyi^fGtyCUo1Vz>JaQIymxq8i_{K=Q zW2P;#(fBJ&&C&n+u5>CEjB0xXo@Y@`5SvXzfn7dqOKK>5#mvSONEOX++xe~jsNG~& zh!qk%AxNy*RkM#Awho|(PTYyEm6Q|*dGP(!<7*n7Lt`l0^H%=4PpC^`sU0%%aW`OM zKzLVjSAT>6`G`bA+&Yrht{$?F@+9A-;x=gN&zyj|Y_fyGHcsfY7p4A`rlEW;sJ$0} zR9k9jZZ?J~Wm;bY=WM-VJaOXM<-3hS{8J@|KqkD*YK_(F6a8Px?BY>N!ZJPKk=+6U zdva!8qn6vh3{gZlP=TujyU)mK@ncdWi3Px{Qhrq$p2RrM^lr*0Ar z4}!Hj&zPwgoXjeErPVZX_2X3@7H9DN<1SxYrdp2xTwJb*(>BM8Gj`UCP<+VrJcFi& z{O1pMu@^p+?87~fxH}9C#dOQky1EBR;4KeGfAo3%Y|R~*do_#KOS3=AXFhY4{O8vI zL|`z}yiAzz*A^FF*}DaK?%=JpmX!b%i2VNUlwka>F)! z5E%Y{HYFV5SNmk^WY4qUMIVzdnvJMqZXwe%A`q|kf+*+zAs@y``6bEn5w4;AnV*R}Aate20z zeB5hfR`Y1P5+Z0Q;eGp`P8ss#pxV|9|2;3_Ifih*p5YBQ%!r@(-LgB} z;xnh&EC{f6{<9?(_#x}b193sS`UdY;GxCPiWgy$CUo9VO&|RHY1`xsRKb!wXY~Aj! zr?`f0)tWoqNk|ARk5R<%7u+sR|iR#n8N47S`v`h{V+iQ+EU(HM{>2+~R5^%6xM^(|d`)JabHk3(j{+w6*FTI%K(2Qu@FG0VhQwO846?PJM4<3R8&I*s zFM~;UwsHrRtAG0jOn?J?J}*V9y#GjY^8Y?u;Ooe? z-lF8@;a*Rj#O=kazF$u7JJDpDwyIUl(^D6g?^3P_`Q*4+6mH+x=>mmNn(51Eq+wt( zG(p8AbNo&wLrM%Qz!I4akCkYDT%cxO|KNqoWq+4{~- zAAZhImLl|O?6T%%#fDSiYi`D(KpMcxfrJ!OdPshA4QDgF(*tldI$lV!5?RFlN23w~ zv8U*fSdKqYDB;U1$3)+TxR&}Tg|- z!`e5=uZ%ARPDiD!E5FE+O+WnnEXr1nvXCGM@kxxkPM=hyQkaUtkkF{&F_&bJ?p(k1Mp|vFgb)SjLaSvPG?2Z z6i>LAX9YRqh#RIUBQEWgEt>2@9jeYyJ~hyRl*)9FU;%X*Izbk7 zZMihX`Cbr3uJ|%Fzr7mNHv@bfsS%ULpAd3cem`<8JX3CO@QY?i^GY-%ZM}mSijb}+ z3zS}w#Dsqf(!ZwU1O$){T1pox6+#v}ZlU_eC6ANKQ9gl9YXLS-#o}z6n_eIJYw#Z8&)%5 zQ{F*?>~~p^@+GbtL9=x38(&qI$#!(=M`Nh#NsAYTNKHUCYgx@GjLZB0GK4cYYpjbD zYVMt*Dc;mOQ4+xn4YuJvx_NwD{)ZVnNHiDH+Q0(=R@azYsli4>TaGRi5~nEfnhJN* zxpFYN&EQ~v018S^<6$BLQUOcjscjdPlwrTL2M2T-o){@s*{AE4H^p^-|3hOysE6g= zjDk#TIw59ea{5%vfSV~b!LN1x-+gnpvZeG`;(g0|vS^XGB)eP3>=p7Bv(Fd3>fSk=!#XH= zMNqfl|AuE1V)#hFrkd%!PmXbl0(Qa25By#TGhjg6v?|Vyk zPL}BF`uv4dU;{GW^U!aSsHGS#FCx*( z1x*5Q3N4}i4}Z_}kt0}{@jnfp-(+kNL_N0!SB8tA?BFU9WV+c~%0k@x7vZFVl1S4m40LHkAAxdb$))jY|iMF?Wjr+Q&>jexFf9HsECyRT< zuS#HtM$N?d6@5^F19=DB*)foy0YFDA!-BF;SCxJ6@)i>d70Kq_15iAj&4f&6Q8#$T zvQGq62MC_bxq>bxH3l>KT#K3eSa}6(_C|ewL(Ht8ZjTn81j%W2fWd^CvV_>JCr9AQ zqQ?-qkr5=K>K~3ku8;0*1N()78*RnlcoRl0NaZR>Xvc{*sO z3ex4oze%eLf=g(9v=1w!vd>6)*u05{8BdEi-!efVJTZ?T@-BBp`M!7mK>PyrOexfiR*(ZqMes;n4>hBOxyvrTdtLQMupm-GCP*FU z=BLj1;SpOTZ{W~*>!CgRBv*=&9!NST^o) zVoUubGh(c*0Oft3>=9qK*a%0t`uHukJyQV?4~u2dH~t-}u?=K8HMdo;@CiJxeO2>^ z1uW3u&rrTJ-IAac{RyQvEr1Dz6Qle>h|Db(CVW<E)U_Smf&DKI@&SoC z-edx)0AUq>K|_qw#}PWesDFFq_`$$Luxq%@`Ss~r+UFYkLM!6Nd|$qDylL=M0HI0E zj!Uof8z`7fa;>q|sfri`2zi2B`t00Cp3y?-*-1FE3L|;IFw}$rX&oR(DDS$hD;8uM zn}*6j_B6;W5Ry~oio_o8D`GhnP{=P!gEzLobLfn;UjAOBu$AO0v;D^2U)E2!>&JX$ zYZ~W>yiz+@ZXq+@nY!uk5eiy|sWSh_4k-cbVnp1v6;!?Ozl$K!s5pfHSypV0xei<@ z7*zCsOx@ykqz4v27TS(D<;33F^Sy=0`=R22XLC;ufce*kH9@2aRVEgTKeG6WE$jEM zT2X;WPuYS?+-4R~$qm2W%yiwe)D1D{^nS>4_|8z+l%{wNVAr@Z>yrAcb>I~IIPY95 z&CI7)m#MoeUPbpHniN@?rj}vsSQBCK3@raV(g?uXL>GHxe*fD_^lTcTSL%GgdrxSo4Yt(G_gC98??Q zm2%4OlN+nW%*7jGv-`T14wTELUjWQ3J4Z|%Y_0kIEnn4%BUzMvujBYQO1TkBG;uKD zeDvV;l{U({EA;M{&XF9362*~svX`i9x46QRkY5LEK>OggC)s~Y>c1ZzuSY3MgZ}o9 zUX2~%&D`Z7-OoIW>Pm~4`9qfqY@ITJBQHGgGXcrS{kHpH&SqKy3SSS3(p=e7lL`YB zE4vLvNOX8Xy(}!je08d5?vhP!&06HU{3O}!j_#B#?S>!I;b*nwK8VK!Z~?Znk7*9_V%yKp~DH>^5naj0eWWy zk?5`Q_G}}FQj7)rk`)6z-jcOuVp0y0xkhw`29E%n9eWO-9$x~vPk%^ED9lAQaTL>l zl+q{+Nv}n9XjEdTKHFbaHS+Y`=ige|NPa|*KFFd6Y=iR0;?1nk#nSiJP_DmkUD`PB zfQvCAgqv72qX``*{3!Sbigbx78U@Ot8)=kL@Z|GsR6_12h#&_gmciDG7>bVO_B&F9 z1n@uDuh~F@Mvol;yf;1Es_icicVl8Xz-%=ne$t0B{eR3c_Tk zFNCr~=`VP&lgA_FD9Wvu z!-BVA>>`6H9PD`pRV2T;xetovLtd(*EIzcoU~vUi8-!1`T=2BMFsRc6>bh-~gti#V z;XxQyPSAmBRv!mj4mbd0F+YMV-X^Ehfh;=?qD&gXj<#q=w>n0k5%Vq%l#G=FGkhfr zz%S?%j-9I%+R}n#X7!pOi^07wk3zu5<@wCfI+s{z&l)-bb*q5FlD|Oa(5(1*Zdy18 zOO69+vj6U-9B^}^C`5_``WKX41schsfFEFD_6YK!vmCf%FDfmp&o^*g*ejUpueK!f zrX$4Hr$G|0vJNrN4oL;Mn0#+VpGK6gZIr>0)Wr8cHLjw?A^4vnRrfN*^(2|eU;UW+ zH0X#XXBp8HhmOIRb~?NPwXmDcU0B)R@)-61&&#^!yN=by!2ML_?u;o^Zky8^i zQ-ub*PeDCYOa%!zh@xC!g%UZHRf(y#Na0N7%oBRz{cLfR@(rw%V?Nan=s9o&vaCj@ zAB8KoxTe9k)a7XbW|5cdVR^U`ln-=?7T-K=%b2hZZwXKh5LGM>L&o47MM$KvAiHMU z*$&V<5SFlIFPbDn0Bt4?PQ8_2TbiaPd$5MuKzp|CR8t%e=>^IaxR$#r{GP#5`rq>~a(&{|y2!KcU31+s(gDLOycx7$i=p zN*>m{$wyr}emok#EGEHEwBl4yQ3c0eAtdgw8053Ccc!WDKvzFMNa&dDe_9%F6sK7N zS1J`kKn(X00SGJr+<|6h)w-~xj7$mQ>?ub4eqHgK_|k~7NPsE+s91!UDhmK{-;!zI zKK6x)d#8x1%s?4BF@zjo#ZJDe2Ngz-00u@fjwmr6irLDIu^{FR-Qw{X0vXrhdunh5 zl9~R%2{rW+sQe#0Z&u4N_Vp%|Cw$zDW=XWUjSeNlf7}eM{75`&Q4P|FOQON2HOXR0 zfA3i!qp$NcTFdI5^5nl!hJdnRJ5(_ai=&tu|RTmOM*0%pb$&BX|v-pB4 zy_5gTMN7!(kBEPHHNU~ZzTiRGK$!OtUPn`6s+t$5&zoWl%7Pav7xZ_`y1 zIX}%0sLnhi-e)8hNTN^4l(L>Z zwQsp^M?*=kHkw+(t$e8*@{!c`a|-cM(e^V6HT2rPzSyExm>E&QcNctrSfT35cp^;# zwF-c}BFIocw7^887|w?51JI=B3(hmd^y1g$9n%cB#W~mjxpOg}n$^uKC1>6{j*g%5^M< z16j9W@9-fS%6R57JdT^5;Cmug=Gp0bVSOa7(YivMKu1(nyvI^lL(X6RrHM^>Vh1brSLdZEmaE7Kr(DT;#dL)I}Cb@&}nclqY2u{5t`lAp?FrCS=DWk8*+_X z_f{x%%?%Gv+xwS-Lbob?!u)MAda$5uu8Puw9!J^ET~u5d2?8f!5>T>3j|_fb19@v| zs$I>c8N;#|b>nCW;Th-MD}QCPjK#yxuoNDspA#I)xFMCrBI$j1kXALg3f)zT&AV}( z5sw83Q}TO?hl2Xoo#fS>6lxrxlEE)eH=pz@r=(k=iK)jK8w80-n3+=e=C3iv7vh8% z`=_kB_C&8eZG^IZ5B4pl_w$A^E{Q^hbaFrI>`)10G(b;Tpu>+#1+|^^#}P}ZZIe2+ z$dm6J=M(&^1Ag=^jaQyl;my>9xxtAl>sq+&@A%#R;k@@Q{4bU6iq&$)iX~Q(!w>Do zA7usQTq|=CqY46sIEWefE&J$k-=gMC-P6I+e7eB2Nga6e*ef{`s~7J8$7j1G_ zgi7+|TJZ@kor@mB;9qbmu3J=@gQyZ}3?knPbBP>(|4n)X$kSro;&r9W&ptlcN_V)b z7)@VQiBjeM5LEpIlv?QdU;XgvwiH0B$o&@SO3Zt`iQ6l{I_H&g)%TOzY4aJ5x{OiQ zcf1+YqxVAV`&%V2J-_F~zkQVe&jMQbpL!_g*jP3bQKrhQHf#pZs` zp@Gv@!HF3QH^g;X3}#)k;nr|uew%#rp1Qceb?>D6HIHAoDEu|khCr4(+c~HN8yg&0 zi^ZtpsNy~TH53CD!|)>=l*$PTe^hj%p+t7c3(QG@A2?+9flG? zgh$Y*2uCVV*g6NP+^_4EdA$Dz6|syRv0I4MhsbZ0y@@hqmyTEt`9rR2cZ7Gdbvo4A zKr!tl#Y!S%Ji&wqXhnOiG-}@`ql;g?dz24eZ|dS5F%;w0J&y9ZwgM&kj8dC;5+xel z*H<6jOH>mA6|^G_A-NBhT8nO=Qsronem#F)q80aH_StAFsXR7F$`Vjj#zW|g5)M>i zr;38&@>#$YRaly>o%P69#*7-w!C2!CTYtg_V zy%(Z+(I^WL%+^SnUxUKK&h|cc6FAPmgztOO_*6iE4&k6OOPYg7Yc}d# zz3h5(eSvt5X1i(rtcZ?XTtckV=^<1<$I^;>UlQ_B{iqbI{-?djX%ch@e3iyWdJ(b)oRwJ%WJ@xgl4_ zt0?>?xwZBrE$KPE#*>KN7bbXC;=&(&0e{tW$`n&drpGU8ZHRznX2s8{P?-qfk7a|X z;ql(xLu~*RfSgZ)@~YDuAoo2p695PnF~gFZsfr)m1Q8AqdyMfvx++Ybl8!@&MeBYf zV5Zvw$ovUvht9ou{RaN++zKZ>R=mlM-Vf<5~H`q27onf(Z!qF2v}GF#F*1!)7C(a z%lIFb`tgE84vYP^?Y#q7T0$8;-{%hu>)%YzmNZ;?-8frx^rrr(-=Y$TFApyE&>&RE zw)0KRC{i8c1}$NZhcFo3TVut+sLzR($LB$K!)$k`e_P=hxG3@ohg6onZ-PQTMbCLY zfJTd~qm}6yK-E+sA0yFAng)4_a&4F0>kDPOeuV~CS;)^ylfcF&vwu|Fwl9{4{AZ3Y z+zvB?z^u_N1q||%51|D#pp+envw+@MyigV-l~&kF1=(CoO49)69_n{a@Mhqo7|#}^ zG-F8RI9B3H_4q5Zo`OU-27O)tyy033<@<8bgGg_dgc6FZkM6pz=74eqiopj%Qu!UF zi6s&Eh!hCaMpyF-1CSNT2(J>nom2%?6aRC$ECoPk8wRdEZE&!p20ClLplo-Sad2M( zimV6BZ`UOQNiZI8m>-`LJ?nK>6M(5eGSN0o=Yu&R!ZQ_45OA*a`>`LfrA}xJ{a=+@ z>(aB|MMBQ=Qv;dLa0CMo@i(whq7&u=IxS0NIJ5ujhijet;uMLh*G5ay{lO+F00q9Y zDUoOkJ|1|twkBRDC&s4nd@zu!k2J-kDo856(2_=38P+r=j|ga?;hVtHQae@Hl}P*9 zDSPF-1BU@7IdN(f>H!mZTLf}<{JWWYnm+^LYT=nEXsWoKIrkxWfC5A(4Kfu&Q@*PE zfhi5?tY*nx-T1|v3jxT1Vh|mXsWRLl97%R8tRAB=6l056V7i zsaH$kAuY`9E`TWYUVBYqDmDBAmA5?7ytHDW@lDP){+IO5g|hy8KTl3FfCJT8$X2TY zA~bx!WOlS9ztGZw<8Po`g>JKA@c~q3e7PDo4=!bHO~zPV{s+-kS=(FBH}X;W+9--5 zE(pxM#Q0lOg^CVr>~tEaoEud*xEh=GgTYa$_h|8!I0m2>ntq&gNC$|=(2@mEsnkb9 z@IC*0l!=H&7JId*NPbO!cxlr#rMLDJ1Z?HTA7!F|$9x;` zq?H?Kd<-SlhJ(OnI~v?%+@Xe*;6*Iy?E(rpfXbTyEUfYaN8DCc!~m4a)`Wu?1KGoV z!MmA*=nEn)e6Tl$5=tPtT6v=p%cjH7lG&9{0D6)dYXN?1oUA-J^!A7Hbc#S%Vw|MF zrJ50W3#w?ie;^i%@8g$(Ecziq2-%DQ0fxOv=n}mOU>X$FX(~3{4+#RVVUMOF8mVCr z6tV%*kmpyZUc7wlYahDHc`sy*LdFcQVeyUpq(~Hawc-FuMo|BV|G!VAP=T%tSBq!f ziTudvvx0o4&~Rg7Y0)Ax)X%JKLlp8`-I_2F^f<{3Vz?+Wl*$jT)GcN%+%hdODW!AQ zr4!x{`*nDaTD!b6A5?6jzM-RVY>`H4_u+k7vIkh#L{<0)n)EX!dcSe~zkm0}lJv)E zU~nON=nfYbvV2Kw$3(e5pYQQEwaOH8No!5V1k0oTVnkQq+R&0)Aeoi#0GbTM+ltvn zxC!T>!A9NM>WRRqZ@E8aymc$$UbGFd9rV?Phzfc|G!z{u&*#vG91Tf3LLTJK_c$tT z*$BU5p?$|fPo*;=`%?laCsBxf+CAl!B^K8Z^f@&pYSA;?#V}59I`{n9ZU?A~6%@Ns>IdMKib*MhyKaoM94vcl!S7kpTdeIgF?~|Z`!~4us0AJX z4FRB_#?XUUV6Y33ujlit;q^NtVwL{%@hyyf!AK6=k)*;#-So0NX&xQ1NGnCv69!~ZDEKtdkbX)S zxl?j@`Cz(=;iBVo%eKvVrs{{bhoU(K)wRe`LdR5@oKsGKbC3~V5zuHkEC2RffAR#p8|mb z+9^8xK$#ctyLg)(2j}?|#>S16re@xtzKl}kpz}>`N8oKvp|0(CIA!EMBSh9Gm_Y6t z_kpII#Lqz`g1ibrk9!!e+{&~4D$)rV31GNCv)$9JNGhKT9_eL3e&zlW$y~fXlC&>Y zvF-91V&0zMJ%KcQ7?ov+NrQo4o_Z=*i5hnm+b*#QLH0yv3^+%AL|YsKI0Re!2%f~I z-p>gdQje}y<3EEJ2;=jg|E!zy3;g})=15TYh0in)ZX9!StF~G-ayPj3|Ir4}^ zX5JGw@fl6Ltva6JWX1w|4^x5cfXG##H&Ap2NjuV-(F=@JiGUO~3s^-g z9C1|@a#w@EGZ8EjYZkMY`Rj3H`5Shx$Sewhzki^CPykP80*$|uNkfxRkS7YK*!VM| zC_<2JEI45>l7B%mTK_0+wn-_6EwT(GvI0^^buA?-El9S3hm>BwRuDq2=zRg!^myt) zSn)n9zOg|aSV%7v>8GsA638N*sT;7;@r15SPwfs5m2drh_WX@^2d?+ga?pR;;p^K% z(dpZqV95I9f70LOnb?VFt^-%*9`Adk&s8YQRaE>C|B0y0k@5bFoAXZTw@{oe_7nth z;|xydSq$aP20k&j?+(e^Ty_5yG}$xV^>fZ@b*2GEHj93X;Inik*+?GbC6vx>*!uWi zu(qi>qyL!AkSy8$wTB3qHW_AKEnIA+ak=zMrNAD!$#D#!r(+|{_16(kWyJCjF4nMI z6%7~CL*%hm$T5t@`CES)OiH^Pc%T&{f^SyUh=o@h8NxGcv92qVTxji%Q*j#aqn2&X zuu&MOL+!YtK+89bo_$77P9yfEEZF|^&rIR34Upm*6LGQ({Q)xOH+HJ>qvw}{Z6|dL zbAlM!mfF5u{oBpMPD<>F49`31LuL81cm|B&^fkk9mL!CYfR^AOO+IpQ!fMp&9w6Uc z!QUOF1D-Q7w81n^bPp zk2`>qPeY9ozZ=|vRnVBJpeCF52iuYg(Ixu;yGsV|Hu9Q&{dCl|hsyX%7}s}MUntb3 z$G)ER(H)l?d*t#1Gxd9N3?0(uN*-q{{!OPWmhmL|M%SwcVmFBg$jfX#ab=6rF4kb3 z>>k3g*T^^Ne8P^T1n}zoSG#e#gsXVEgxK3JFTXxHS2s}B{uAqZgrb45J&LV(#!aC` z+cO)nkzR3AT(Nm;og(;`y1deOSI2lpi^{&TUNDt3EM2iwO^Iig5?$8?JY81}jy3$` zz9Se7UN$MstMq7<{XRd@@^8@YkHqlH&ckekU>*^2LkGsy;g*6UlEV_-zfDi=V2li9 z{WF|>IG?HV6Mf`(1ZWXyhpcG((<#?IG~o4v5&AEV$apn86Z0eh0|+g|=52aM%Hk7S zonKdWq~hl+WJiaJV~(AMw+Ey!8anUC9;fQqS^VuX(j|_M(&ZJ!mtX@ObIyh5JxH6E z(|e1)5?>1otD#jKWsb(fINDZwL_cb#jg5e-E{LZqHa=;Oyy&|P_l+r%pK(elt;aER zUB>rQIA|XWm>+)_^KAc}MkFL`1?yVPGQ|I9y-ucUy#4vPK zq=qFuYI?ablfq8+}DhSTZB$2iVtBzDBjTaJsc^qR3}0`n({P_*=$fzk3oNmvM=fXOI79K`B#eAkVo(Y1SfUUAyl;UJ-jl|M zX*yX7cY6o7^81&RXq0x9V*{Tvba~*PqUGJtgBGTOyoDsC;*Lf9>?>P(D{=u(S z)q+_Er8#LIS4vCmSYY~pE|R{n7&DAhIMK0($Dr_3CWi1rn_IBG-AlS~j|DEmMK02_ zwu8-gzO?U+x)mrwJ~}1`^p1dEFcv2t)JIe!7`Q1TFjArO;0|s6^8Od<9XS!MCba=C z<;j~GnQ$ysYESc0c4U+~X=m+;ciDhp*QfLO-qwUf9n)@l3_L@x0CONeS{L5qyM>5d*X1n*Y2Q?cdhk8?APr9=taItD!7~Y0|HP zD_^#p;rCyxrVsBxxAb%Qgw0mezFjj{BIyQK`E$_xda1rWkzWeWO+P`a@O34!C%iJ) zcQIv5gj}cPzKJFIhbPgxvxug8TRewZRl;qT8<~U^GamhC8ZY6fJ>}!2(DI z&}5`h#6j>xHFZd03}>dR(A^IlGp!^s8fLd1sz@J{i)X_0pTDB|t&TrTqv+IK_(7^m zpbeAES>zy)7miI}IW`#pXD-WxrebvVL@R!6IYv zHvJoRsgXlcn7p`1_+^Y3t(|`*)T)mtL^N>{!d3;**|^6;*7WGXO#QQrT`qV!3vtJA zUq-SUrhm4+nU_=nxw8PVTY@?_WsW1Ks=Wj3y>7!d7uYD@xg2kzQXjxGw29*Q`pm(C zQ*2V&z`)*RCtzEjv5^cV&@+Om(%|i@lW2D)jWecK(Uwc)2kxbE>Udw^=-qQ1kX6eh zc-l3XhdL*Ak~4lVQ=Pt8iKI;x&v(*3jQHg-ak>Pd3xST}48`SPkGr3OfmP9#CT}R~ zO0wa$Ofm*YzV5QO?g4xt@n=Y)G?woTrX-I4SgV@ud+F-2~A5C`Z1hBT^IqUDtK3!j>`Q`00-uCdUQr#ib z)}_`oZg(Rp_vG<0$F{AT3;u$_GlVT1YujeeZ>G)5k1{gffj2i=ERZW+vu)PCbYKn< z(DaV70M8BW^R9yEEBXUGfc$L6r7sisoD=En4*O7O?Y^46t)S*Lzy;c~NbA_)!c%Wx zKQ}rwGwZ6z`*c`7O8-3TL5FB6`Pj!py+Bo@d=%RUR=j^5z%w)qu;zuerJkRv)enBE z$3`eS?{wvXTey%4@7Hn+pU|uxk$>Z5;I#{lSg@k5bt&c0JZpV%q44nO}|;Y~<@2fWpb%l=YaGVHeZZ@$6Z zka<3gQ8oz?C^=Vrot36#pIE`BO}Bu2c{S?Ali$bp(~caxF%@mq8u&N>+drDAL#OP9 z&7*yM__V`nQJ%W3R}c+TxPma9Po5VW>0xS?c$wOJHp&9~nygk(KMw$HudOquZJZ9Z zQfV;qa0JfdIH!*gMSf;@$L{(ibcdWCR?WItdRL9DVE3Wzbeox)Ezk4 z^vk*(Zxi#?udI0mmzL$H7`bo8)T7y(CiY1va}OcQQm$%5uKTlAq4#){FfRHw5z{ZGeZ7+dy0(>L$EQj{fc`wX_d zojCVt>f-ajG29seHqz3>?T1<5{ZRpQt00|4p!cyaXT2AWvxHBuU}UP*4~&u2*AGO& z-Z*sP&=WSVt|wa$k0a$Y;f9_jbn31qpOCY{I-xf&Sr{Csg~{WLp8X@K)b z{u5y-`r~q;RozATJ5{w{gdvK{GH!Zu^hjEKq&mUrZG(%PzLni`Lvm(Lsw> zkThC*XvqKi%^Q9}PHQdxj4tjI4`UpKJO_^SPliM$dX1fIEA0&pv)p;xbi&HJ@D0{o z?Ec!lu`MKTeY>LfScIT#UTN3ZLl2oAA{#If%GWA3u05=qU*Re6FL&t`OIZnUyqGOe z-rig}!1_8*H)*#pH9k_FaPY<_7r9oh?wbtEzOP9AX7R`Ca?jBm!vuCb|3I(Ks4ypE zenz@xpeSf{de*yXQaiF6P?9-#btU{hPX2e4#=#yW_7i*N=`Q&%Oke<8^Z4T%x#yI@ z06_bWtQ^l6ET5knT%9Wr#>Zry-z9BUt^}A~ED@+|*N|0jZLH%fKF9QfGkP(?OVYym zjgx+NYO0=C+FkvF$C1Ham-H2`ey54?+wn1KSD%Jtn7uQW^v&vi%~q*y^Y|9e%h`*; zqLy3BDA~g=B&{rrbN8Pp%sr>t$FSs9wz)u=3R^9Ga#dIs54s4kV_dK7%arN{>Gr)k z6}E|RH^7-_w~!OOfzHm*z0om)9(=|t>^#GtY0gk))8xMN%FxBvyYLWJ-nKhp?GtHb zp`cddZ--6$RGm|zd*8A$jmtf!HHvB49@QK;Vs+EW8fiJ%#_~FZt>cMYM?P#kA8o$a z-K{pRQ}z8qgG2bNBd$B%ONPgI1wE5L^@3e0zdhdBj{&XXbk8&))#%*ttIl{syJqYVQV;&Q=#o)QYncLo0@$u~X4ufOdl(oN6@TCui_kKomTRORV8EA1E zo%{%6gy%C7`YMB|=%dm;!cd%>?uA}&vxwiH1_I$;T3J>|Ut?uhz2^Q~26enc8{p=E4-*mo_ zDkFU6@uvWrfs9n7txi`NU2kJ;>Qq%2Dlo*yl=Zy`$-tje@4NpuC3-`lOx^!Ydg@R zl>kp5==tqM`ALb?5$OBBXb6HKA_IerazEVXwls3}k~w{pyZO{T7zK%_{lA)r{|^lg zv9HGP)}~gnLZ7f`EGH`b);RcyCc+;Uz|RR7xex$;L`Cp#v_$ZS*x97c39(82RlhyD z9%i|_KEhfeTf6n6S^w5h;iEew$e^7=TJA7}p#d#^eOohI&Wx(}4$J+t*8lbKaJ7AxryZtZ z^IZAb){fIYt}z^j;aR)D_^Z|Ln(4DU=GE>z6pxY(v(1Vw1rW^(zeUi><$mWqsyP_b zl+$h2DMy|?O;|5acK)dfeSi@WK27x`oZhO*tMWNElB@C78P-A?Gb?VeJYai}<2m!Kd{;VGi+*V`Z0Er> zUI+Wv=!b%UEnl`rmwO(9aFKP76SA7-gdF`%zW~_E9$;3rreBS#Rr_I*QUOnkyDa|L z+MXQ~f44U!(S;>YO=`vHRq!#Y|1f!WTT(wrh_F~bdrSfV%N>jP+ @@ -554,18 +555,18 @@ validate(final_lrm, method = "crossvalidation", B = 10) ``` ```{.outputBlock} -## index.orig training test optimism index.corrected n -## Dxy 0.7068 0.7075 0.6958 0.0117 0.6951 10 -## R2 0.3202 0.3211 0.3150 0.0061 0.3141 10 -## Intercept 0.0000 0.0000 -0.0636 0.0636 -0.0636 10 -## Slope 1.0000 1.0000 1.0183 -0.0183 1.0183 10 -## Emax 0.0000 0.0000 0.0169 0.0169 0.0169 10 -## D 0.1684 0.1688 0.1572 0.0115 0.1569 10 -## U -0.0017 -0.0019 0.0017 -0.0037 0.0019 10 -## Q 0.1701 0.1707 0.1555 0.0152 0.1549 10 -## B 0.0755 0.0754 0.0772 -0.0018 0.0773 10 -## g 3.7232 3.7299 3.7470 -0.0171 3.7403 10 -## gp 0.1311 0.1311 0.1279 0.0032 0.1278 10 +## index.orig training test optimism index.corrected n +## Dxy 0.7068 0.7070 0.6954 0.0116 0.6952 10 +## R2 0.3202 0.3208 0.3238 -0.0031 0.3233 10 +## Intercept 0.0000 0.0000 0.0498 -0.0498 0.0498 10 +## Slope 1.0000 1.0000 1.0942 -0.0942 1.0942 10 +## Emax 0.0000 0.0000 0.0277 0.0277 0.0277 10 +## D 0.1684 0.1686 0.1646 0.0040 0.1644 10 +## U -0.0017 -0.0019 0.0041 -0.0060 0.0043 10 +## Q 0.1701 0.1705 0.1605 0.0101 0.1601 10 +## B 0.0755 0.0754 0.0771 -0.0017 0.0772 10 +## g 3.7232 3.7355 4.0677 -0.3322 4.0554 10 +## gp 0.1311 0.1311 0.1300 0.0011 0.1300 10 ``` ```{.r .codeBlock} @@ -743,16 +744,13 @@ summary(final_lrm) ```{.r .codeBlock} plot(summary(final_lrm)) -``` - -```{.r .codeBlock} # Plot Effects ggplot(Predict(final_lrm, fun = plogis)) ``` - + - View the results in ArcGIS and examine the accuracy at individual points - Discuss the effects of data quality, including both NASIS and GIS diff --git a/book2/005-glm_files/figure-html/spatial-1.png b/book2/005-glm_files/figure-html/spatial-1.png index d20431ac113b069873cb0a48a2022b9a1fd08ee8..8728cf8146c0f2f909a3fb651cab59eca970a673 100644 GIT binary patch literal 135215 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

    6A2dP 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 literal 134239 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

    L0wJgz+h)YRgj|kwVb-Fr1 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 z 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�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%0Ai!A(*^wrx zz@yxLVl3P2l-$_{?<*`d)+2@I7ee(IzgeikXi@2lw)1drmqx~q&t9zjo2FHj!jUZ8 zp5M6ln-+v<8h$jf&aT0EXY@sS9rZmCHsz*YwWaI<@R@QGrm9>~19s4s>FP7Z!u(;r zwr$;wsmYJHZ|`|N$AyreMxuf9LL~sVLqJ|sb!B?fdpXIh`3a$3hBr2PK-c=5Yjqze zYbskj40pp|l&uc)SP5gQhY4h$vray$Hp)+#x09)IM%;ZeiyvAe)uo07G?sbE+>a43 zqpx-^^tEk=#9CHv>P2aCk-`;8i_i{KMOAMeFY>sM@S&iU-pSd?X-VBJAyC)4aGDB} z9n?fE1En!mQ{C~?$0SRv5UG}@)~e~n?rL#>8XEeQtHTV)1!UU|>h~Z-1q>2*^_G`F zwEcC!f|{GC_0Rl-9GB(t`f+_e3f2@(Sp=VSJ6?;k&wij`T8?q}!2GCr9dy1L2$sZCm1zLc?9m%nZM#7I5IbtEag>5eH@msz|) z>!Q`79zzT8As@Rt!eJYIoPO~5fhV7gY#w>F481H~95dTp9M;0Uc_L?`?LJfVd9IOh zr_Xlqsu_jqd#tk2ElbTFg6-tzIeH$py+mhao!m$(wSw)56Xm5NoFths{FPKo2MNq+ zo2(;Yb(0?`T25_8x*AHJb?#$2H~rL>-#7iaP29MiRd@^fFpYa@(j^_w)c$j}zMda{aqI+{R=YjlQ<%D`<$2khfzY50%?0odt z0i}~^;2k`dMI)RwzmO99AO__1%RR>!y6M{`KgnkLy;q9~En* zS*z6Eu6sYBj<8*TMIpB93a1os6gH6}C2U_XDHwz8 zUbz#honm()FWg4u{yc2-Jrp3{PRsrjLbr*>T zSaQJNFk@Q$cJQ^PQ}}LhyE#2{Z|4#;8x=~t>RTvcd(`yb5~S{~ADaL|i&t4*R@Y)S z+gzKjHtTM;_3|8-#&3?tRu&(oO+bmRmz3rnxOC2>KI<2`<%e*+7X8G@NAzTy(6k;R z5nJ0@B+>7oTRXRn$uofN#3xdWfbuIk8`ZcH@w$j~W^eOFo;o|!fD>fNBP7g2@+xLjD-5~ZSK|aRAEL=_>J}bD-Vhd+_PS|>Vjhdkbl^37T2z%;`)sxQ( zV_xSI9rdltS@=4P81^xvm|8X8-^Ht*vd(@s^G)B6g1MTawm50Hjf*Li2X~ve?g(Bf zV#yC5-a;l2og?{v3$oNhH%gJ&0NE+PA2i2i;c691IXkD?xqSfQQb_RgQVj1z`YJY( zvzDB&{mK>V^#pnVv&QLEAj~UoefG9)r`CvV`K@%%G|$YzF*SYlEzj=@c}099P&fY6 zxRF8hl(xC|oF8hu4df_MhJWu#=wEnIskXh*OVixOxHB|10m?8PL%W*eHUh~~^Ow;!G zqg8?7XBDs&kNZIsx2*dL1on$~{e`hU0=$DX|EB)f0y8vzc)$MDUl{b@4FCS%XQeR* z`}LZmOEMORev~aUy4tzJ1dSj1*>23xDuwt(mY{VDD0SBV%t?wAUR<+ZkBSK@?jPj3 zoMc6=l@BVI39+GJgsNFTijn=_3}gRqXn5`@8wQP{0ZwU};T)kjiF?jPC;+T+G@0|x zB~`8Aii)C2k6nfIEj;GENk3!lKPtVE+PmOVMNt*)vHpyeHxZ&`L|vl*1yI6F&oZyI zu$qH7k?SAT-uxhw6wLIRnmVET!nkP{XC*<`+q$P3Vsmp@51><5VI3Y}8uF=5^PKyQ-QC^_YRPp59S8$5&M*AEoY|5bcW zzasbfL`|E#*P-DAzw~spzBh7~_F`;Z9NDg-WOKjkkF`bR#j4S7(R?M>Q`O?;1P>#xNWLj{m|7$%+Qud%96#rTT4yxy;Q-G_?Q0M+=|_EKH&QRM zo|V&SQ_*|Hp#6+iR|fRl3X8w^LTsVM1ht)Htdz1=y&fPX%IL^Q~dQR}kf1|I2x z3kN2a64uROpo3uHTOEQ?cvmbo!DdUabZPY6Y~JG%#MoUNfcrI@eKh61NzM)STaLr3GJVE-Oc5|_VJH^bqCWZFf=>5rGxf?< zvv+dau{ZYK=*&HG2vI6hnH$WSF^GdWv!T@ixCx2L?KAU17v?zfx%aiw+bIpSm3v9V2JUOGO#ca3(9!SE_cr;6Q*kE(1_8I znag77RZbh9AW6I+cSmd<-P=lXQt@^B!=O2nwyCyeM4CJW=gga!jvJeeLSdhz3CX@d zB=<&^zK8Woobb1wTVVIh0WxyhsxQ^R`!VEUKV+QXX!kNMeaao0H6HK%KNm&VuQFUiLCeGflNM%arI|DSdEd~t-5Bpr-Xxn38S5pv=|!Os z>As9iaD@)x+VDF;Iw(46pJYiOS0N)yfE{wT9dx$A33ftJ}GnO2jtOz(ecREes5IitO z^*SBT$ADM%kI_x@-^%qk2Z|;S7^RHlj99)0h4zSw8QvL)Eg;yuae`5yYsEaT4`J^= zd;=mN&v;hQvRB2T=5%NHqjn&tkaztFT{js4p&cZy)$SA8ijNWFsCPvMx;eI}fSf#zv|>aKEa407Pc2&VpvGk_6_GlZRhSlB^xfq9pN9cccs?Cg{!P^f;r1J1!Hv zCIS|>`Y;Uuex2x*pe-2d; zU{pYRkH_(ohG2e6^Hm!ile>9or#~WJ;ymR_*A-K*l)X-S2njrGcApR{8wK3FTeHNr z0w#8~B5lAlCX9|tfid(6q8MzWhq;;KQlqSOWs$0Am+REyJBeHXaL7TTT{zPq0n{ry zJ8&zq_MnYk^NxB8tj^^KITxhDE^Hijd7 zI5t|}v~9<-)pj1J@Y%HE224qm`<$n^C35@+&3rjJU*8GNIg&MpS{}=r?RuNyt>Oo|<_GB~$0Rr*P3$D;jb~1T zs%OUB6K(I-R+vEH86wtl;!ycuftf1<;M;JvB?t6C4oNb7^QrKx^EJ{aW^kiL7ihy) zK>4qt!|*)yK+H9gM1;hF*~dV3CwJ0J303bIdpzSNX5uk^c!c1LYu8U6ja?Qrvce|E ze*^JL(4kOk*!gFg9)GS$a4zNm)7QLO7h|G!q=ee6MdP?fRK7Q!IpTQ|Ip9V77oGQL zYkSR&}-S_AN=FMy`%9>D~-Vtm`{~AM}f{A zQa^c#bF=kEK*pE^R_V)~WboI|X8kHG=&>A|oaIorXl|ECDL>e_LwY^u`-qA|8y@_z zqk`A&zoYWK!rVvX)g=m4#MiKkpMX9ps!EQInl10ibCfy2pM123(>?l}n%ME@ds zK2Kk#=M_2yGI-}nl0+;GEFIgFuwo;ETP$9?FzIkXvu71~Apnr4BLCzxaiZO)Rrp8& z!wavVXwCx5qrL%T4#PIFr7@%Y_a?cJ{>q|EePB1Rv#JwD74lr1kL1!pawntr8=WAS zqVrohd(_w1&8~WIO}r2tXU2SqJ<+b~`e(2L*J*Q|pyoj;-$P;CS~OiYcp*N8oqxFn z8sw70)%%Oxx6t#u^)05$qg&y981IhfOgs!>U{&+qmr5wWcnh9p#QmQ9$n;WTKfkpY zPgr%o>uW>;#1@2rL@RZWCDbnWcu=!lu&wO)7x;F0xg`vs9il)Eq<@@x{QBhr^GPgs z0fq{UD8Xjk#_47w93#gXRA7xKai34@XQuqMq^E0Fk`(*u3r-gUsr^_{nj{HOtgT^W znUC@_eKK_0*9Po6bR0F68unNh8GMV(xVNI9LpRlFy5yA$D_#KlU5mN{AvQ&8Gv8rJ zNxgMTT!w*G7PuTJ%BB(XS?LX$^V}+N(orf6!wcA4sTR13gx9Y{<^k7-Jc#aTAa9Mk{twf-&KriJMxl+_xm9_jEO>IR*;1- zeoH^~a#i#qh1Yyyp!6(?!tzAR`$$TT#g_u~7j$VN8N7q(;=K1&=&W>!6FRX|qbkIb zmhUaVwLB3e8R>fMQZsZ**?)s`6=zFykZDa-G3=xpd&n9KpcMI8uLEQdCpm+T+r-~WQ zGi03$)ATrudjn+K_{KjZg_j)Oqtn`;6`#(SJ~sM+}G<9??=N;FiP zK(XHi=#-bCeX?7ntIk;pShF}rhZPm*TTbxwz!X3nuF!@(#DF?Wyhq@H{73tGT9A4g z>v7!;Xw+8WNzHh_R6y2f%2KPqxaFv#dD;(OHA%x)|F!*CSdi2(s(DjgAKR_Q^LdjY z0?%*8Y?47?O-!w7lGuVr4lvwa@=Bcc0wBtfv(-8Ddza0{)n4%jPVTgKhEv`GdMZLRH&b#1a`Q6M}TXrk06i$`J}cfV*I2*5?OVL1}Y0!SWiKXnlAO67X) zQbq>KQZ<=9;R&n`O9@WYS}>a9KSr}wp?Zp06CmyhhKI&37&b9MI&6tm^%^Yv#+S|; zxpQwNF9S{NZy=U?kcqYvbq>YEUjrC!+714gBLPi$3N6h2+*aUm*Ir!gPWgy1^g-g#h{%VY7>hS~JIaFNRe^0P zp`Ie~giRlPd|9QF=1-bMuRr+!42cCYxY|aDosV%ZRTul~|DJ!$1S%nYnK|7?2B+ExMdLIH7r?0@nw;N?})c zY_@ou-gkD4AJ1`_r@LzUV)+GkV6(eni8R(h;v^Dp^<|Ot$8(%QVFDb>up$ete)4_v z>m_b?ad(t??801ZND79ZR&LNt(&*!fVFfb1`=5j9C zOtJL2%(*zeTYvSvfFWwNZe{#AbbQq#MAEa>BV?igoC-fgOdMI%av&PjrP9L{v^7`% zB}|kAHzW7RCAL`n>23BF-Co*CG~KjBvUsMPsYH-4+T)mhLrj(g{-pRZeFjud$A>{G zdKblpxbCmJFBV+Z^=v-!G=0kOqLh2o1PM41G}{*)@APPXR&gw9^*q`MC-2+ZvKv|S z(ZukFIyhCA*Af9v8Ip7vo3_%_(9odoBXS4mF({j0@e0Sa`!ftvdX?@UaB15eQ#3~J z7^9fI*!gBPOQv6Q609|4#T)Nn6!sO%ubyU=g~+BnH94^P-OO^>aaO(Bb#*kx#HSO> zbe17Did%@J_+@8mDRETwjhaQ5iz{qZBD-cDUOGRzkP z;HQ3eWneuyA@#+)vTWRKth!{zvN}*NPFDd{AuS8>!AA^>Ax-iEERXUvFNRy$7xya@Zuy8HcqQ1k1+(+ z8uqJ1!e~<)+$eRGr}~3&wclm_ zUGS*+9J?6bW-%l-TrhOXj!$s>?vuknQ7$3)MNltiFP}seZ^8ry)8%xte7tjw-AfWW zO0UN4fFx{|{P-xCE$q4qp_A@LC;cSIjR$E$k8EQa2Y!zCs$|BfA5^JG^HaEBbw z1mm=-5Q0lAkXR-pg2VPFMVV!>H0506^stJ8g{OBGosJM(I|-~^w|gG#?#HSqee-hh z$|Vjc7Z#K$U(tm=|BFb+Wk&si1=m##6&{-5r{&u3ylmTDR>;{}ch7GeH3RQPmp|5` z{MVjCAs#>4CxG_f22CA)w$GLtTo~l3vgr>g$E6DDs4n+HuxVl@1Hgrmub9h|@({Qo z4D{oblPaL)4FvzdPg-g)Vpx~yL)vzIG|JsD>GK|}lZu=W88GYzC~RRRDulNdwh;%I zIIhH6;~gsguaHsOh^AGhV9d~VdgxkfdU>>T7p~OmixapG}f zv9d|WCAO;Fpv%waqsZK^59-FXg32eQ!fgz6(aS?Q=KjmFSBT1M9wnjLMm!zvLiinsIT^1eik~FX;t~Gd@Y5%!|~uUU{?lRbqp! z3gM;Jz7rYKK?Q$|`gs(DS@ZibLl?|I z{%E6++M}O4tXmcv0g7&s1}>A2xR}xO^OU-WuZldn^l<&tb0{jo$HPwgO{ReuULN{Q z6>@*bQ^KHm0l==RZ}z>+(2_=iXul-IGIJ1$}Jr$MDwlf5e@%zs3nEJC?1iZcS{j z+{nrvRdTw=X)A?>y1nJJCg)expwHXAt1C#_DCc^i-9E}dr*!BYtxo`vYN19pcc93y z-0<0Q-J$oFqkvvMS07CduwPB?et&<-3TiX%54i%R&1*;js1@{V0~CQ9JK*3vF2!IS zO0~bTl3~g=gaZ4z5~I{hr?L4DvlUiS*x~ZSCF<^(NJoFZ3rROLo(P@>__Uu3#?re`b}sh`HAo()Gb1PtG1hRnG$y|2g3whV3)4k`%0%G%8q93Nu9sHmX@6pn32y8 z$+Sh&8}9eOTMezum;&5f*YaneDZ@1%@qQP|kH`~r%w={VoN?h%#ECP88s&lDiu6aT zVrXSzKypXi8aO{}T}YEd7U657v{y}aa-ZUy>zL!9vET)XUHszHLFFo7K2 z3EU)ER`@9cWSLW7A*Y=@DyyyMS1&pTz}_&no#C5(g4oVxr2xu@rYCY}wk!YK{6Yz5 zFCLX2?||ms+301?pC?WfDckj*(c#5pz9}Ku>dW3UM9QsSUUaUrmX?aYVcdHhwV@|R z2OJd?x=$s)<&8uwBYGP>v5(c`7h42N)5kMYtN zi&(v~v8;30mNB8S#X;2PNfP6T=-yfrT4J`(`M@Rl_6u~2e#(IXAzh3@6 zb+*yG<3Yl(!dO5fp06)^qmH0JAb(HLMagZ;$|O35&}`)K_}E|==z!oPe$9Hm1eUoYx6>{Jyl3@P-ME({p>Ptl!C3p*hX&1bOb=arOV7X~G-Ie&_&}0iW~C`` z%8>DD;ad_Pfj7+7E75=TuK^qF#@GjWl92(F_;T)f^6q znDAZLyw!XbqVJ*rB9gecr0)@N5xFEKOV|07A~curWqO>m6huEEBW}0jFsGNbzvz0K zyC;4$1(|I?J`OR$kaA>3r*TGjnH0D-tF1B_(6-Z;FppdCPpMV$RnPdBmfVon$8JjR zGoIr84D7*(?NG4837=gIQQ7`}hEv`zInb_uy-I(QCC0~^u)Ru)_qGbXL4M0U=DvuU zhEX#Vkv~HE18^K|FanX34Q%j)HHD}QnVQ9CPBYW3N#yhwe`1IV#GD~X9DS}wf^5i7 zwn_=f889t-W~K0TbSWR>S1-h(1^m~01HY{`st7bO3%%enF%ZpQsO=9sAx1O6x{PP& zt+;uSUG0{WOH(Vg-`}%lAZdBVqHk{8^R)Ib$bI^$m)r=|B=uI}!%CVI&;ZH7Gcys^ zqjS0Si>-&MV zMO)|dYb-Z#t-E)wWqYT0shjDi>z}bMO@*f(quKhAOLb}=0gg< zU)MY8sSM-IswPQ~E8X`koN~Ctc8lLO;ZlViq9;R97sRK0!w*6yixrIpY}A}G5J56b zTDd>6Czm|xTf;X?}y{FS_F;m>KT| zz@v;KJ~AD;x0)!5aV%R-5nWc(AxgJ7BzmFb)$7s+M*Xi=24Tg?FJbYlo$LDQI$Gs7 z{l}(9NX&ek6iSq7dwRGAIDV0Xbe<=8h5|S~1eI+058kLsC&9KmMgg9WOq6I~C%JQ1 z@qL{Lj^_TK>FZr(i#0Z|fAn!85hnk#PHZ`n49?-aBUKiU81TqRE7U2yS*x_U4$tC> z%L@527kXX3i0f^MC_CymcdK_E+(7TGcBLo^;oL4U@|Rl)rdKyiOzQ90=}9r#eSW(^#z?n=lQ5 ztV=rBcdF~8;+&LIYlAyl5>D>#>|rl^%-64YFeU}$13l6;Qh%Q1-%tvyZjPw6QfkD( zgH%$BP?a%`!2<1{l%I89OaS8*aSYEtB_EpnN5Aw2*!dUJ#DJ5i``NaTn$&%#RVSY# zyIapkjjoXa4E~bY_F@u6Gaa?V@DXv34~(6R;vyu?sAVEoqGG=4#>iv+_2*fCO$12r zH|jTPe4B`gqrSsl1KZkhPwj{kPvowO9zYR|Il*2ks~N?n(0tg+C^A0-C0*LQ8SU?V zFn9HmUf0!Nt3{Bud?Mv2Ad)SAQB14EnI3~``~{@nJuUzvxjE!-($h_f$>G0Pc~c5v z7x~rrv50aVUjJyNGC2ICrWo4By-$nIjOlJ&?<|}3dgCO+`SfJj)bO2#k$Jhrpyh1^ zB4KUk-OKLJd6Gn?%#Lb>lEHUBJeXnDa0RZZROX%XF67Ru8(swnMvgUtGcRK7)N;_Q zZ#{A{qQUJtVYy&;NxZ8QeXl^?>3b3z$qt?2EHA+)#v)aTv3;q1SLs?ZOOm*g`&NW2 zqFwD8SO0uihr}IS^M$vfqg!iiPGX|zH`AW;u!~Gh?vMUk;z8R}_r}h2xS8L~L31W} z`>aQ|3d^I5os*-(*tGD@)Vt!eR-jQ=mX zjXzkEOskcj+L&%O=G0SgY;R*iGW^x}lm0>hV*Xw#1v0Qe4NY-lM5-Ed^trPJGOq2% zlw;C$FS91hMtD>a;V=uSR7u?k)xYf`B9^(DOy`jd-@aEu>bEsB8f1ZN%8;I!V zu^xSWDYPWq+2=S!H^bF+oMTz#QpQ&1WkQeFYWag(wMG>F&3SKIBp1>8m&7B~Cq0DF zwS;PKnzKvuFrM?(-@#VsnV1)NQj{6x$4#aB<~fgMk9vcM!-`$#owzK^dEFCvrv7th z@vpD*z{~+93xtevGPhjbL;F7q7_*9k6mc(Hdry6ZIF>Uk#fcL8`}P>E1`sq6UWi#~)~` zQO#56aKr8k2)>4>s?ebqsXw~HjdYL&B{blg;B!6LL z`;{y_7u(Bp9EUwpz!oXONangd;`Y70d{`X8V=lE>h(Vu@n;27kK)wYKC`d<%T1nR1 zd#?W5W)~oJwKL8O#*%HMP9H?JzKLWDaO!<_X>a&-7x<+RT2O+M^?fm6LTA=pcSwk@oyONSlY0ckHVNt4L z&A_re;H1`B>(8s+?jllxz!2!uAMNv|=VKNIV-6C0YQgWo zt4LI{z>n4&!i$Vrlglp{v_h$bb|&o2B->l36Dh$x_V6Pda^5bu^LswRxrSG4pqeA@8_a*E)%sm40yTR5f{wr ztX?Ur9bLkpUX#K3!ToEjv_0@ya#mRKhWHZGYvXxh1*w_-_ri)c8}=)xQ6y@6+ZF)>K-dJHV!WXGXI?h|<>J zzg+o&R)T;!VJG#Y$o@ESR6#GDVO63Mcl{ihrXym9<)$ec%tLRMT;8|ta)BZ6cqPM; zY6Sz{I9XjG8FQ&L`|FV9C)XIw$+|ZtXri3!p|`)#T@z(bS-;_4$2<5o!Um8AZ=KEs zYOAqG%t{_utLMULSJGigT0vslD3Wmu~jp8l26C1A+yywGn-TQnM+;Pa!Krs zTAn^o3OZd}QSFinkNZVcphG=IQe)Ab!We{J$~N(_6>j`?r!TGF!8c1}* zfM8rW8Rl)oqs(PuCIC%kfSuEJIYls~eB4&l_FS?1cMvSow9~mRN3;5i|AspiZxtHTc+9;&Zal?H=IjNyt@zuID zq20*8m_aot$3=-hbR>sOfV-h)?LtFwHM8eE^#?@l`zOS4U*zO-@uHZPw_!3~VB$b_ z^BCJs{yBq^B>a6w^%@72ppO`4)i_@cLd=nmRA5}lgZ*NPR*0kj)s4lp zLnMh(_ey4C`vy4QOkB<$eV+hkl|gH!)58bCrH=31leKrL)6duni$XWZdD8 zrE~sY7;1qJUFAAt*5IUYJ=D=3-`82-|CYiWIdAD9#*)wB&S)R&9C-|NXZ32<`!hSU z5kJUGY&Ln}px4<>PP45_W3VRDdEVd|ZtP<3zNWCZ$?+o3J_|yJK}3^gzPc+35^sjQ zUA8R_j#YXMgxCVYs=s zD|RmNkif?kC7cA9JyB_-30`CHy|!oQk@zp0)PN>l|7@bB{~t!VgNN)lzN>I~D>iBu z`)N81Z}xnL*^#$~;1$c{8#>>?^(IW$_0{7B`W=wfM@@}F{Nj#Ff;W$2ACZARYd738 z@DSO27ucD+T9t4_KRQWkv*Z2U35fd|IprEpw&n28PFNDZV`;EFpZ21P3ciUL{P#K> z8#yp>0M#sxcl)Pkv8{P_2hR$&k>!VW8nuAZ4dE7C1k;YDTa57Qq4@dsc?LAuyC|g? zUlF4jhn(!6ZtQ@q`ZwiG3O|)jM15I{92;*VlTxkEbSex6z|5`5P9AHE!Iq4CitX{CS5ZuIiHl{5sydFB~-$>B(2$sLZ)`ovb(RmOzJ6Vce*Rzfm zyP_e%neocIb3l%M1Ds3cRj_!^N$qYskLzz5=M29+mkh>ojkvV1T4~^h5|tD!x?iv$ zmrnFu>Z5=MN^~@!cW_m281mOnKDWCTAJ|-C=z$8}#!P#*l}rX4?@|%Prs{aPd_8F< zd0J0kWt})N&JZ%ZjoNsOC_64lwesaS!~u&7-E-XEwzSqEHlHWeS&z->s9-@F*^9N& zk;Begb_~`Z1#pcD+M`+;J1~@uYf`^o-xIU1gkr|lnFHTgY!!*oGDFwk0m+j z`YLki%|fn_oG3ggb)x7QEuRSqQ}XJ%!Pk_cWB84G$d;P#!v2<@MIS%CTm-?GlecOEme=wH`eI@7&x6&Cj^RAl}SM*kP&i7yE=MI29#HQ_^xv z_*%h&_}8e?sPlPV@)ES)0-XnyR(PZC5w*K4y7$$;nW?J-SN)7(dA?Iyqo-HM4kk)3 zED5KTE_P`>&NmWeCxfShIK$VdW(4-@h&t7h8!)pJ=ZCSQGvP*Y&HxFJAXW66WVCjH z)Cs+WRu31Sr;ImQqPKI7Z0KJhlB=^Pt_k_Yw&E5$s z!^-*mcZC6gWd<2WFC7? zOaB5cVe%lp!gx#jn~<7B@X}<<&Li!2fCu{YZ$!C$K04NTE6Habp%7nm7D>~JO5Muc zu>uf}$);Ni%>0+WGY*UXrgG$m7VCAnfn_4v$Jgu3Zn=U!-btcs9cv_&&SciK*57c^ zzY*Cd+;~k`l*z3~NTdtL?%-|=B(-#|Rx9ZDlKjAu0&(8wX4ph26K2Pq zFq^j^rtv|Xp9~F~z*N@}xYDdt3_By*9YEV~$wPOaDkU_bOlOGZH&tV%q&?-kF}zGM ziq9l3VQ#OZba9@RH$t6k$`sfkH`e{#gTEC~`MQ9d-#KIys&)xU<$Kffh}h#2iNQ#% z>r%_HIV9Z0*+S*pmvT~Jz*?b}*YWDoU1LmTc^eEBJo$!`mDsOD+< z)O^CDNRRV$8Dt96-V6x@&flEDIjWV2rkt{`T2Tg8k-qW+SgP&q-xw(I2 zWK~%3U}Z;JUY>?PML-*9(pa;)6?>Fn4HM3@Z z%#UY1N4o9`d+(~+Rr}gkH9g}y^;^Ctk0I{eU-mUrvW*eSUn*J6ZZx@)3=F2s15zA# zSmj?w-x=0<59#{joi0kPVP7I)IXn^FhL# zg&CDiAQQU>Q_3`ni=Fcu%a;v3$o$wq;Dt}n2f8@{%}!qqcS^*!HGR~FdJ>z6y^gZs z$H2Y=7Q3yb$LIqoX506KJAGa`?u_RckW1~%k`#yemL2abYw1QzQ(TD^$NzJ2NI^XG{asd0l8pJ8uSfRXW5Dv+N#jc84Y z?3QOh1^jgDRA|rFKGl$K1|ob%@Zb&Vc;%mtFotb+_u5H7NDpHWJA$s~BGi*kTMkL6 zK8mJ4#V96yz?PmLbD$0&MoE8}!H@o`G!7`yha=uJGZML0Ipj zjQ6i!()j_TqYB&oy)Qs6>}Y*Z%^4{Wg&zHnY5-dRfW_4=Lb$eMO90A@Uidn$ScJ)j*>qDk~7ixx~L!qv4{AFYfPPL z8GzXZxhgj zY(IiAFu}?fI*dc4daJIrwY5ebxJr%DrvM3IiCx;sfD)BIA>fCAC&MYrvCEx!%lwt) zvc3%z-v6qsC{*EBuF%rUtc)X#^k3S=b%PqC2gp}n5FUNd%hl|fbg6x~6HE&;h@y+` z3fxMAXw91IdMn6`-CQ+0l7d;NF|Q~EY0kz>At*(?X5V(gxR#+NI_;1o$hGI!@(6cW zM6UE;(fq8mDd$9fB;^D6;$Vw@^n{^=Z*VpoSSl&Yd=tF$`T78Gwsy$E;Wxf2JDY0Q~M;TB@A9^H9+cUHYf)(?3 zDufKYW{&ATN!wHHafQ^zgIAv^yglK3@$hDv%`aQ!A!j{}PzimUTn|w5x!58&nTTQx zHW%|B1sG_kC#july#ZkHU1k8s336<4=R5rTO^ua(+CrK*zw{5QWhKSRY(U1G7$)-7 z&z1r_IyceIcoMLsPY1NJpzKCxmV`RBHMuwNeZ?{#V8G{*ew7K$Af>sZ4`vKiBqspy z_gOWm=jm!H9j0TdM+;%y&eL07yLc)3Gz9~xGhw7g$i)PKw!5Z{GIJR4)w-gY|JHsh@wv>abtq)(Tow9+fNX6Bz3htGvEam>jyb zqu%fnieXB*WgQO3IcpabHv7AD(B#pqjm^DDl@HUaFztTMg9_43Qy7)p>icXeq2AdAM~=DmuxG|!7pi|$N%B-K5WD3u+~3yuz(GQ|tN zo>ly|419X^4wr3!gkv?-nkct)L z2?Gou@QeHHYts+WEITcUhE>p)J?o0#*#rBhRh2hDTn;fni&fpFYlcoJ%c3n&sfTl( zKhXu_Jv8!emvcv}K6!sx6d@)!EUN`y44Dt)P3I(_5#w*ko{8m-5mWi_oyJMugI$ir z!Wy8N?o0UNVPkDiX)(K8PM(G#m*73c*QSzp&N%kLCvGKs(W{W+^n>_fY1!IE3VXmc z6|NHZC-AYY+(_$m?FG#@ex-?T7x;eH@B!42u(bwX$QH}%&X3l0VuJGt9iM5R-bjf) z;Pey{K7I6M>*9oe+ABCqm*+4%)FW|<=hMB zP998pxREt#&@W+d-Pf3VsQtBaD4L=gUtoKV%9IO(jnqg0x?A$hz23v1aO44;Na_xN zw*=#;JL!iiB_HW%iY?80nGLRSS9wYdJavmS)`mqlxskK@88N;*+!=_UW%T!S?2YW) zTel&FQh+cdO4fa7-#zg3?uvQa_V5<)0+!Xp#oEjiSjLN*lzcXDW#sR;c$0zLG7*vz zqBiMtCJIO(YZ`zd{WbDn<9Ky^$t*T2@ro1|8SX&SKRbZvrztAQg2T0K$38e4Cp9qt z^tUg8FZ}>wce+rRi8A^ZtFPUhr@ySg%Tyv*riv3cjx>~I^s7@4$YWysQ6QT3+EuxA z&mO7B4MQjdaxg2}tOC<>Z6S+S5qo-;w?13MbhzUZEc?~h?>W~~-c`zjTd9~7HE>#$ zEIsA;iDIbh;EqR4;{#nh2RDq@>{Hka7^B5fC+MRogbuAfd&>&ZYH4VOY~=<}N_$u2(2RojQ#mgS&{ zzupyylz`24M7ML7JuWDKDuR#kym3^zA5url-Qj(aq2WBn ze|!cQfca&j{C%5?I=ymFg>}klMtjCJ5X+WW-;l{U=eCD59p(S$2XUJ2pMNxn#tnHD z;D(}{(nP{vbN{?f=HmV6ylA60QbZKu4=BU=k*jihNWsbyU4G0X{V7(#HFvxmFL?%^a?9|jYhg`>y|jolvGC%MGo(=2z3^k*OKC&{QVK*3-5b7 z!W^5drY@g*Wv$iAs~WjPcWK~rp_xm}WKRrBeQ9(cHsy=Sp9}-_esJoM9<%)mE~{ce?e)BWbX*V!C! zguJoE1jHZBlc541VqIN#&Hj9Yib|USR*!*Wsh;b3SLRscQbY{2k51wOw@T0q1@+)7 zv-skDW?sf99+l?rB90m@9`d`D_-2C0$#2iB;S#6J@kbN+ki~mk&2zKuVT^x^+WabT z?_-tjh_hYY_K&|lB_>&@h*<0XJsNfaTTv z_ZIsx1h+3BeRj9t%!8yP^%@%IN&@PgH+PHy2!u{6Dd<{9j+j!VIaJv%f(_ zC)qb{Q4q&pQJn&><~io@Mr~dd(eLLK*iVmg4#r2^-ni&N=}bTuz|(^~_94PBLO;-r zD(D>DJw~KX?^Pw?&08c^T}6~GEBZSvPLPs%Akc@#v?5*rCRDjD=Cg2S0M!I7^%G{+ zoz$4O?>*Eh$q?#t0;z83Q~{`J`~Tmie@cltfSldG@*aC6Ogix*gfk9kgO;!quaL6g3cu_M9qRxp2b&*nrPI4#75wq5r zt*~F%&?-*&=`ixD)hb;W=>Ar*|nxubd&r zf|~9IA)CEYTEA2|cZIgwjB8XM9~YZdA>;d=*H2D}k$K{{AZWbyXe6#pDNIEDsKY zm+nPf=p|Hr#^}hnaAsn}&{;t%X!Tlv9D&HWJv5rq`|tFqr10K{>`@%A2o-vfsU(%J z1EAK3lgqO+jb?dT#JG;rb4*Cqcl$qYLlI5C4r<`WX4ay~1T)^HgEi_hi56)I4NBxb zGO05`WYzP$u)PnUf)qnG2iy}NC+|kD_Fqo9y{h!c5pwyVI*Cp1vAvS!{LCb^B3YrW z-~qgxz4!vT-9iriB$M5+#&4GNYeLP3fJ7!{i^-isSEe`xnL8P9i41`49?~@pcP@W- zgmvQVj8A%Ei=rv})Qn6iQJ}^;o16ub3VeqqB?iS0qV+hq(UU*tLT$&~Yfq%$UYLfz zPvR#o4_@m}5(t^P?a&11Q;tI}1L5oshm#2vyonF3rF<4WxY-fozBOzJ`l~zd&|GNNN=ax@Yc@LfX7W zS|GO)(bbrQnr}+jog&w8M-);LKMNtmr$Fibw%hQwF)vJ>d^# zcOOH`yrRWSmN#J?U)!x`wrN!R<8+3j4HxT=o8jT=oH$WV<);N8CLR3G$4K!BRNT0O3%O;+1JRcb`q_;a@ zrL3Hh>MCy)4dzmZLiy92ejnfda@H^IEILySDVe5*1m!z(uxVzB-T}{L(xd*G*k(5s z@}51apWu-@oO5Pk242Iwz>DvPb%C)fK43&G+9b_~r7m7f9LlP7-?0#|-eQx|W-?9= z<#+ecWK0H?1(3_mq+`i))R=D|E2?GQW7d0l$RLfR^|G6;feFg-?s!%17ie=I-{ zLS+1v0WG9sm#v8F)mZtpTa|=lMJ}1KS62cEDOf$chd(jA(Pk_rV6}-^2puLd!K++_l&9OiGTlGL68d|hO|d7ke3J6o==5a?)ZPl6GA*Gj=P(lWRAOo#;X|; zly*fp{&L*n7Wd5nOlEAoH?BTs+EZeSZ#Jb_>39Br`lYgaZCS~_$-Dx8nGb-+>U1gsX5zAqY*%guDKR(mOIF84imVDO0(*PlJ3!6}TK5fu zf!R9^tNJWm*Xw4*m!~UGER7ji$n*%F1MrOy2$%p?D%dGa4zy>{&+RK17ZyP3$ZV2! zf>4R$hJIm2&-7FP%^oxW0gm)IO@fE@|5VN{bu`f5jg+e_0#+sN;pzwQolc~qj@*W4 z3tzm5Ux6{$`--zD*Lwx{;6Jz~nFX+aecHHdrp0iua z+-=v%j+^?ArYMD){pak;y32{K_S*lc6n16#;)1)Ab=gDW7{6WIB{cN7%%>9nLv8xb z#ohK<>CZ7{y$=(i4<6|vOv4>l;OjULkLKB!Trv^k?@L~}_a>Ur$hy$67U3j~0PEUd zL#ObhndOs6W|)d_yRi37M;j5d__?M<4SVh4VN0A>TrGV2;+M6SDzZeH(oQeVRwg%= zsCNZyuQ8Xl(C3 zWW*m$d8A8?#Gl$zRDWw{H84&kC?REMs@B{wMai@#n!W@_1%AWiK`e;4avn~9=!SNK zBaAJwlr ztXu%T)@j!pEuyan>4y9Ej8gIOg7M`Ts!)!#&YKcTC;pH)1I{t1tKTYqDh9u;%}?M5 zig?4WCW&sB_;U83;g36C_V48t0KPr9`ogzf_M$%O-1SwK#A!uQ=c09=*l^Jx<~`c$ z+axajH2av_#q?b7v?8h$@LRz87O^j5urA|4^R>I~k=-F!w26q_A!&9v>4k}gn!phY zaAx?ez#RNO3|>F+jiZg@sQlV;*^pC{=$%R9M7muG0#G*~)%sUqM`)EWrohZ1ZiUlU zq6*bwMcYSm9i|pQyVV_qp8UM(ajb}G8){Le*+82>CM=59yaAMV;({ABfu}F`o7+|z z+Q)EjaAN9jDvJP3o0<;Xc7@= ztzSl{rU8Q|!|E2{xok&OfrKIl!fxNOiq!B@*S*tiTJ9IEuSN!KvB^7NkvqlGD0vO1 ziNXPOce0=WtXZ2e!78ZIB>5Zm?!U~V%VS5g2SIOlOw7AmoX=1i?<0(EBvU0b0f_E> zzIfvgMRDjNW3JZ^WK)b|!{v^fm9MV5IAU<5`Xjgh+YXRDj!B=o&%_Pw%-qk!`$BW^ z^KwdxYDR!Uj(Y!p%s7g|0JxlZE6G}gRFp_RyW7EWs?)qTpv0zeX`2K);omm#YPqDq zp+d#h&2i|B)^xo5m2Eyg{tDF-w0{9GyhSzRzozx~n!^xHW_Lw+i5KT&d(y%#Q>>dr z=_$*MzYV#B7O?PavjN-?pY;_sM+_T0(N1xY#T3xrp;pc!Y8`-x*lyv& zigiFnWWsIJ>b7QfBA}`5Mbvf#Y)8;fFc~AocKq?j z8uN`V0Gfwiw1r1WoGv&3&Q?*cMjuQH(FK{ivLw5Vuqqe#NEJYEN%6?`A;$T&oFdn( z7x2(wTv1j3Sy}qqD=1;&p06c0yAKwPtaq}a8Ka~+gW(exSpYbtI?~4=zkM(UH&nuS+f&0Rl%k z16AI&1J51eAerzkZwHv0`OkI_vY__LA?oaL)EKW%9d_vejs@&P5ZWmWSj^ySxjQQ& zIUWEa^V!0-u5kF$Y~U@`0;4h(5!fQO7OT^2Zn%+cdm3|Q3|yx?H2jYu4cC9xTtc-o z0B46fqc4OVZU3h>tc5;JjS+3E*9YPxd}SgF%q)V}Pol7zSW;C54Wf zrWThd)9kW?(h`foa|(htaGVUB)R-5)ba&8;XKgx8n=m`}aV&%w=)!~=` zz9XnL*&e6ECH7|eoG`5bIJ({d)_H$z--!%BeHt-7S$P0F1aqS3kpSc+cnIpQf|4IP zfERl8b^}&V*7>!5Ku^uig(IoI{l;#1;nyf`v!L+#Dk~M+3QuRz34NXk$SYZ$Z;5t5 zPMw1;huj7%4!?_beW7ym1zwQm?jH%4B{MCPj;Qird&F|Gs4?#9Zv~*8BEMAjULl*bVdnuisa(q9#pS9X`ryzM)8)f9vhB5ods_MiLPymb=@CH^J2iWQ3^-pG4! z`Nc}Yp?rSy<@eXzA2~7`_4VfEo$Y_%gR;!nI(@$H8+SOu_I-3H7aQ4K)UAYP9_v=& z@&2YIBj5Fj6{*9sMP1L1(R2u728}QWfUcIbLPWo%^E5D^*!CXLr$@n9n&Yt3du<*j z5do9Thd)4x#CaGe>yxs7dCwK)^gV#@?`*+{aWte0I{$la;=It+l(vt~p!6yjN~_;_ z$dNM~9SiYy=$|cbN2H4VnmiQH)z!=z{Dk85M1)wYT=q(yf5U+-jl*kI7TtlPm6dO# z(QIhT+}0)Yj%+XRaQW{UxKYWg>JBQ;qvhTmRp)S_k%pdIlmxG~Q}53`0)%My?4?gz z;u-!P+^_m~v7y&MDS6-gyqw1OK+A4d(%U>#0}Ku=H2ziZ|ne+W{KOe z0mR%quz<0Ng@>4dB@(q>{B`b!qkkw18scx-@%^ zPMscX3tMoa*D{NF0O9?IRs{Qo%r}AJ)*~YCi ze7s6C+5zUJ^erwUyO7HWp4UUa6Pz9+sHebOhW7|mN;)L|`}7hA(8>W)D?LkP7<&&Ap ztoykQkNk0$qtwsxX>|xG2GB{H78?Bmyjwr03rZ-M0{#yO*penisI6WcAM`nEC92_ zx%a9Fb(%kImIKh)q?Ku^sE`BJX&Xn!hR!#~gkJoq4P6X`s6o{1*Q^&+11Tk(anqX0 zVFT$7LcYi8E_J0 z42n;wI{2@&MFOjB5{4A+XU>z7BF<~T`bKP#^<_kAEV+bmzH^g=an!!)-HYY_5&}4O z9O}E`m+t!Hfg%$vXVnZyEeVfA|8OGWyS-z)K=~iyDcMBn(~7CaErEo#Z2BhE-7u>;xx75cu3& zCx8dXLI$i(=2PYT6D;14&+kFp&BYIbk)5$mAnaW~&T@6*J(P`wTX}5e+Bmp8L_;UZ~mre%0Ui7Ijmn8S*&-+e>1Ld<(#-o$r5Pe-|H;#{#Uf3=^ zLCT?|jJ~%R2Qf6EjWzj;18xtKOnS8olsJUFY@86)MuM}_L0;*5IJNxlvzzk@{EU^sF1@2%`$k%PNL>M!!KHVVN&W25mlZ@{|7xN+YK zH2JQps67|6nyF=w07y)z3n#fTWCk(_Mn4V zH_Cw^xft{k=2p~nKku)w3f{4lMOZhbS4>jz`;9roQQc&Pc@qMx#=y!(bCn(3#PG7z z#htkxAe8R_An;{nnjgb!*qg1rnBN`0*Km@JbRDP&HXB1~3^6G_ye{d{+M_Q;noth_ zB6pjp4&W=vA0p+>)Vo5=C+ztiz~mUNskR89jzo_>>lfUJ2fKLFWvofUm$AYMyN*GlxX*15MHJLUyJyaX3!)eW-A{U>dH z^&N0Nka@s-zq$=zfL1IYy(xZq4UW#~tlFtAcud!XnI1aIiv~EwPI;FM@ zsP2{&`c~Q$kC`2;jQjb%;$zFnEV{h!CDf-O#Sgi=CuqSzO2`-L2}x{8iEMm0v(NYD z%*_Shm|&K14WoW$xTiJ9V34Mq0_acJYQBrTf>q2AfgA)Wa%=Lv=Du=+REX5UIBlt! zKu6xl)8r@9Dqa&#i<8`kR%cE1 zx~FHl*Ia2II~pViYru>G>;g34yoB?EyyxqjxiR5NHN(HY($T)Vd`-@&G1p<|sfmQR>Nx`4T!oUFw9)L(6T&CHpE zfQp-`SvD?YusD1rY1n+f^{k)8F&|@}Y3!aPM#Un(!!<#B;YrKmyUiQj+(nJ?G?P_5 z!qRM^aq*!xjq>Hh>&Ge91vF%K8yq4JmQZ&j(pg(LR?ha_29R@EJl8YJo>4>A+dw&k zfKr505S$0kBXwN)UM#-2%T(>T12D-+wX>K}@klo13j8t<=@TF*|LhoTK;@5-0QIFH z=qm_wPvi=0GJ2?~gShff#CRAq+#U58Pcw#--$gCBqPVh*UA@kW zs3)_IJng1-KH^#|zb5QNsN>jBI+KpXAeGKeZ!Igow=ny!oddr%LXUtVs<>KloT5ib z{%3jj9nFUpb$ zGM#La#Sd**)NeiIy@9uUf&eZj^s`U+srZt^T}}U|wxXc|oS$h$+&nb0r|WrW*pNE)!CG}TWLmIng|Qlsg+_oo^3w?GC|LQ^ykUGU%3uZjQ-&}b z0Y$r%O(`(fA&lnNs^iPH8C@`8dFbFOLH}!Up;SvP;I%Ki;MP_9xGg5v<8B6TB&}b1 zCcad6$~wiw`te^r!OQ$Rz_#U9s`v;d++aZEx^H$=f{Rul*e?$- zY23-hPr%$5u@?ZL$=**LD?(s71Fq37Br8I_3vd;LRc$KwI23gUpdHwkvM)tlcm6F^ z3m8ms8xRQ$8}8Xu31F_c%`yv|_0CS*dT0p1PX>z)6z=j{pYU%9Y3d6dT^%#b0Q>Kz zUXmk~s{%n5n{r`apS^9CzxU;Z(deNUQ!!y``RlF{9bnU^Ok*H;kcV=8Cwf|TdkXc! zl5_reUsAYK>`c=2T(C7$EbutQzOPQ>>fv$xyO$ZpB5~;{Ai2w|*IrgNE8D4Wnp3%3 zdew#Bvwz@`mL1OxfrsZFlh>`I8}?Dg2Gt zJ%(Rv6yn`F61R+=9>tL4v?FUu#KA}9rE6LDu~=;FN7Wj0;CE2WOQ-}UUZzK-i%CF* zb6<)`vn0`!eC3dN<@Ou7foduwgR%6@aC7L3*jlYQPUFkSVJOonM29!~*YkwHc_QN$7;M6w8 z%bhjdly_mUDewMS&+V|6@Z&Qa1zF+wf!6s=$MI@<`?w8Z3`pjtXA`bw z%!sAw$Z<2NKQtr&9lghUX5>2yLd@Qj--^l#eT%c}^VSs=sT2Hd7S~NR^K>E7s51}n z^D3h_v+0yTnse<(GL>HMx%H5iJ>L~})%==^sUQO|3KXombTx!OU34gkZ&#l~*er-3 zY&xZzmcQ9MU7A>c2lbm?S&eR(Q0#PAzx>75P0jIqc5(BC}wXv?<%mt7ls|?h8<%D~CZsqLSO_tT4Q)eQi4)6*97K`oE715lHe7A~|!@ra= zGRna3*o6dyRcTmjzx~upr3By?^kAff{yHWrmU83PGnS?_G~D3+821s|Zmmr;EO$s) zG?FI@Bj_;@s1Af*cWP7n0BFqvc>UB+*agUDuh28E`X*BeBLP8F8&oiP|LSiBT5*K+ zQ~<*lfN6rGVBB-tP*aKYz?mrEfcbfLv7^%l2Pzp#-6hYxMq|WHCln>AKxS&HU=vg@ zy`>sK#Q3y%^A0qG0et=uH=xTar*gpU>noUk28KXQso*QPVY-v-zz-8A z8KD5j*$3IgfbTpDMj-ad0Laq-zvo|~L60WS^(?)I8H!fG5iqfMYIbeM0H*1TOTJhRv`f{Yo?_I`u#ZOqKOT1w2ysF!5)GQNEFfW?jMKU^jFDynqS5JrHekR>$U? zHnr#l1LiSQtN3#ts7Jp|_3a!BV*H-gS@=%j2|GHalvdpr_!Qluz^|3j zEl~!OxtJ-Uz++{M3@96Aw)j(~3h`8DQ!M%s)@9u$$_dMHN8@gE0=|wqV0+-XXD)n&1vd1t- z2!K#adxLZ5Ld*Dd?#2pgL~Wa=3ot6cYAs>zgJ^67l9Gq?Vtg)bN70taf|$0rIU9Pq zk@&jhql>){1KAYteX>{X@D=Jxf884*dd-KSaeCsh8`F`r1D9TuBEcKq6?V}ehAu>l zNbONIg^x>~%4w6m8sixTSqQNz(Vz-jcJ!_YXDGHVHn8=mNEgF%mpxwkf$X5PT=9h(ZIXD}WfZe8wIUa|`Cpb7+b z#RL1wfj({Avs*zIUw+R>SUazeyK*l-81N*Oo|E4NvQ%K=9HVv$ECL)gz)N8^{2&Bi zr}Sie$9uk=uJovv<6$0v@}zkpQktDA0-}yM{CXb3hc}uaUGs}B-3KOo0h~OV4!^^9+Izu@4=6KDz5<|@6EAv(PCz8R^vfEpW%ASo`PFAm@3>t|2YttR1vu5VX$82 ze&+hI(56wHgHsuX z??Y}E+MR_i&INQIH|m(Q%}hS8;jB&&8ot^2hH`iPtbALc7nLm_nQq)}W>v+gBAj8W z@oI0n(_ni8@FoY%j*vK%dQy^o*xcTxZ-8Nd)+aNXW;tL+$8apq+JUjV+4<%){OlcB zuUaG9^XFDOK7hL)ZRl{sG!3v$({0m;w0(h<{*~G%vK?iwivrr7Gj65cbv=c`kobxy z#HCIMf=9he?s!0px6)W!B-R<&Lb@JhggrC@-JTJ5awTUr;;xh^00^uUDOV+>=K@zi z5vC{vZQp>>coJYkQlHZ7Wg?f^sbXo-XaKS@7@dp zJRC!CR{?neZ%p#;?*Q*+xB+-2p@P3c!8Dr?IIzK*12+l|ME{N$z&rcy%}DU?$b+qz zJd_FCAfs&XKru+Q2Jz|5m;~71L1P8X&vW4mgoeR!baicp`!WyCm00w=6p0pa+C~&c#$+g1Ck%6N!SQMkb*xE&3dq=@?!=EPiTnX_Z`I#};CwB# zx#`0akp+>9*->!W)u?(DxbOfSa}t{Sg}b3Ne{MV6znNl}22wyAT}4=mKkYvuH?UR! z*m$YMD#@`Ck?Qwo>X`@at_16q%Y=zSp2s%gk4g`0;#~l{CD7|7Yp7J2I#vtv#;(_& z3Em2bp%i#}{doXLYCF^m0Bl7`a9vx0HL&ye?jYHa2IKcr!K6D_1TfMC zaodQfco{d*- zmX@UN6-OzAs(&qKh*W-CAYWlOkpC`kY{oENxJinM_wJMqQ?q{GE=>Lyewxqy$XugK z#>;^|!Lq0+K4D&_X)W3EHVL)Gqc2ny-7lS4QQ9T?Iluly$lyibgv=mp!wO!uG3xl4 zVtOXeHOIv%)?vSIt@t_1+H`!yH#b*A0^dI@P>N;HY{a}PK?aO?By zwUy3)enb>QwFMU-3vlX0i!upWxqZ>#xn9wlB(0~}OYwQ)KBS|6%Ub7yPG4_3A7k@J z8}bFT2amW>KBTAS>Nwj!c1iX|6L$31ur(0pcBjRa_4pxHlQeeFSa(K7WhV44{+ulT zVN&i@{kr#`{ji!U;CkV^{C?pZ@j8ul4Je+}=fAdsYkO;k?Vu+<)_gvnt*}e9Zd2^+ zceyPPY5jMUyzGeLT?(yIrO=HCs~O(VJCz|*EGREG?pc9NYKzw4PkB%Gl)%fxdUAp)ITrr7`L_uE z7avc4Xx2|D@_7SQjhfBlq&7tJ_!-g-m~eF6@FNzbHQza|^ft$y=^MHT7r{^au=wpy zpPAm+#!I^|8B#7+d}CT(g5T%Ghtp5#E9k4wK@Pt>$h}sSZD{WCRN8HK>^#6rZuDu}&czb8J$=@m7o$B4I4~j_U#7j+-@iM~AckU*(%d)mrLt7j^tFoO`sv?&s72~p zJ$6c__gdJbu@?41Vog!IjhqAFBH}>ztS&0%ucW<0|^@-@WCC3y_>FUjH^%{3*GXLvfo9nP$A@NqcB(Lw4uLuWs(d zbgkJjHph$XQ+wTf4ZSK2`j@Ho#aczrIA$!@!M#TlSD}kGpU)OYxjucy@%%&xViF4- zHH+>yOyCY_KIS^YW3zjHIvvlQ25aLIdQ{@jJE;?l&6A(LE*6W0S-Nw_7ST!3h{=*; zkunA!*st3JFM(D(eM}O%G;vfhNRBwN?acf`j-yVm^=VcL>ARolLWM^{J6U|Lh$%!76Zs2lUL}f1kpVOd4sMG~RKJfUC5)f0mcw zGY84$r*xwKOW$xj+yt&(`&7>(uxj9llok(YYn=ZMT0|okzO`DoI4rdVMWJZyns!csPBhn@3lQ575qZkSp&gSM)q@t9sc=Yt-l}bO#y1Je$NzOn0`2%~j zEc;{e7m#x4VI#vz1LsSXH6DqS0gFccQE6Vzr{qV}Hy((gL|L*MIa5OAiu;5It}DT^ zU7Dw=E6%29CaGW~phMlu&^+pN(BV5AnCPLVfy6A$Y%`_xg@@;US3VZ`N9BieKP5i| zm5ZbN?w3lKJ&&P!>>;s2$Evt31}XE}>-t%xr)yO7ymvJa+->E#$-Ek8@>mHFM89_S z)Nx%B;x_ZgSI{Gye#6!<5i&&a6RKsLBy4J;0wBt6eLYt0X~Fe6Rdn;Uw;Y&54Llk> zxx@S@iaYac^pObOaE?X5ZMPJS_4)bgsQ-1-l;)03BdMXAj5PFslK}h|#~B0?dhilL z0A@opU_lT=0S*LkUxJZmWCi>O{~N^`YZ;p#)eR>^hwz)kp1-nOS25Bd-Jj_A_UC9r zZ$8jc$R1LhF zYPZ45v=UbaUf%Lt*?()XAZLa2X~l;lCa!6=xYc%Iq#7fit#kR$o~|k^rjqen zPilW+F8auii)zzitshoE?rY3dD@J}LZbNG+Tg$Lxz9hkXK9ow6l5lH2XuW7?zI4YSjp*y^T7Z_Wmp z(`IPJ3N61^{s!O8zu6XrViO(L+h4U$-kSYr>zC$n)g5VFz8E8^7hX|&=g{qr|;3$TYF=aK=-6dL*GC1tZxe0?F_>9rML4cjY0qT{S9ILrS!i$ng6vk zpap%_JkOjNBMp{ek%nNsIQbev_*_7v1uvn|6=JA&5#p$KS2zT&?)l0m5QwCH7>uMA z)Wi2>L*?S>6v98o8_+uW+vo3VN+NXU-0==RL7NL{^sou{ew!7nm;JY{k1UiNWvZR{JGoilE7tpcNf{0f@*E(huZf?mC z!Vmnn`r;i{t48ul6M5Y`gr+v>9eO7X{XI87eZMO!#pKfb<&HQ^ARiDkrke?somn|> z5uKMrOCDJ<@b7N-L*4}jfpjP@$e$FSqOo2t8`Wbcl(BxVrb!K)gFkwNbn~l^!{7oq zsxu2&u+RJoo@t-F69r^~DP$S(K1P&TE`4Ut0se6^vnkGL_F5_rzYHx0fU6-Jyz5Fj z)0##~*QeLKQ7Jnyt7=K2{biT>rme%ZgR|-636oa!Oe{y6_EW)|Ut|`)Uwy`N`(2ps zP+2>Q5i~Lc=fTpic1Neh+#fVs)Y$~qa>{shxh;bG-f zNi1e;{?29?=3BI;0I7k&T50|7?#|B_GPYb8I%z3yExs}#-l>) zPgpo`yc0Hd+cc{ydI6YQV5%I8OJZh;0HdJ&wwkX>&X~oIS_LD7FQUo>3#xt!zl3>Q7j*+T<9KJi2en1de@PCIF@UMmAUp_@VnQrywSZ&4vM=hXO Pg3hXGoyt0KHR%5Uc^fn< diff --git a/book2/005-glm_files/figure-html/unnamed-chunk-6-1.png b/book2/005-glm_files/figure-html/unnamed-chunk-6-1.png index 252e24aec1988c72baeb97ef0dc4d7a3d15d4b3b..2100232c9210f1fa4aa8512dc1e65b8c53bf7ee2 100644 GIT binary patch literal 43365 zcmeFa30RD6-#?yKHDwTm)Nos(MF`P0vSmy5D4J~L77da~O*5Kqx{2Zr*;=ecGDtPP*uj9SD&gFZ4&(C)~zvtPB z)vKKKbjIkYsHo^ITe@hiii#GbqN0&7SWQJmWpmQqD=I33!d9Z@(H~4$T);rzy4ES5_BL3s&;u7iN=jY-F z{!Mm?eCaJ2%iC7P8+7ni5%&=PIRpOZeFprS?tP}*J01KLfu7=i;y;mok;#6MFa45h z13r}3M+r;9`{BVArb`n^mBf5C*cFKb0FMWXUEw&m&G<>_b2K_Adu{6|zS64fUA)xL}r zPXZd&iopMBMWUvrruGN-c$r{GZ!jF_EFKtis7)5tg2BX-fFVI|kw~<>GV(0g1nvDx zH~XuoSS%O+-yl-ZAr}>uaVpCeIjs-8+ME;NzxPPMt*7)O>i3~9TgHAi*_~A|>SXuA z4=*Z*rE57yU4bWT(T$vX{ZivWqpT^qBOG>+)?`2Z81J~earx``b5mnei*0>kbIN*u z`?_^YV{K(t>3dFc^zvKZ9Cn&uXK<|D);pKx_JoQ9E?wys%#2=cDXdCb{Ad zfi#Ds;6Hc3>cJ}F4v==Y3i!`cEdAy|;&x%C{|f`;z7#D|2~IG3nPQ$XJ(y;>Ccyu0#&)~IW9k}M83y|#Q4=e6SFw=^h`;PZWW^PnY3dS($7nFlecrk{tW z1zIAFWtX0+2Ok}_C+zia8TTumHEX9Yvh>7IdIP+tu}r-F_?qxYHb)sPo)UX$#s7`r z3(BwTW!Rf*{bE~R$cGPXYGjqUl4`k=O`d*m2b{EYdcW|21uCpF)e%rd$J-!77N575nx%GMg z+n%>|PrhPRy!<@C!-S8T=NJ2JeR}MR{@xQcEiQ8iap%ndKIGW{|NH{d0&9kM>w5g9 zh#UVrh=8!Ys~Z>Ct$W*CB8i6{LT`h_d+@`5zI1c08_?sg{~rSBKO|!RKX(5U!ngUB z(*eEOholp(e^%{INj4yIQX9uhb<5@(PQxno=mFzikDhNqNDK79xtPA}R~RpK^mH(c z(GRY#ckW!pkXLvuzC$a`+|$-=A6+C<&%47~@eA4AyAHc+UB5c$c{>=n{?eg1 z>B#eqI!ib%QeHHnRr~HR3nVW04Nab0qMSqs=RjXaaRMM=l_oi$paW6w#t0$TcW{CH3uJ${l0gLr5+03%ZKKAPuRo{{? zM3x6!7y2vRr3oDrBBF@yO<^X($V`vG_@O!PBwE8F4n-#bTqA)jzJ6Z=6IM+E6(84b6C3s?`&F~EyZ-BY5@BK2ODLHg~G8>Rr5ool!DjqN&^QEr)C8al;CyqTJSgw!@6H>1;;LS1;W&LD^qM|SBFvHFflvar0k%lHvEoa#~BUw=)V1P z&(0~jo``0J0okX21LcWL&~zD2j;EWYsI4hd+1?`&C>i@rHP}rCRi=xGk4pn24w;m< z(g7t7-_NBDn*EZ-(M2KrCr1)AH^Z?gs7fc0Emz`>{bcabF|%CYeYz+?mUc);)L{Sk zpQI?^1dX#DEg{k+xC|vH%E^xO%imnwP8O+e3;XngbboK_Fiup5Ea+S!wpqNZ3qJt8 zFXi_-b#{XR3UTwoZ=XeB!vZPlQhwHz|Y%&EEYN#H)BFGd6PyN){=B;=aghCzK$(eC$GfB`8gwcYHFi zs#4~l7P!w}*JUDVfi8yR2rJ8<00xV!8*zC#YLS;GBXiKgSU7dodDKFsy8$e9%(~rX zs6|S_3>4F}#FF(&7PxiQwL7Q=;~i}+5mC&S7+zKj^l%F{8aAJ4wuc4$r%d2NY&$jq5c`kPuNVO6BWyu0XgcQ zl{2uj5fgT6qIPz798^d>BJ=Qun3jx1?QY2-R>l*Q(K23@Fb}oEGOd*sXm@qKKUz+u z+}YE1cy8$TGm0VHvS0P>coc-C8U(<%TK)1u6nv%I0KBI>?OEX{=+0UQ8|%tkV570~ zQjrncJv#cQ+_X=;^Np!h69 zv3s`Okc7<&c`Pp{vz%c)g_c3KDe@hpl>N^LmUO@WTXrzv3yr={p)|Z5P8R&L((rfr z;GSI<6@Lk}H3>a5E5W4O($Fh8-q9be#XHmqLX@f6h!6R$M3bjbdf!Y^j6DxQ=cN@& zu-DsY9n*)sqfuRX^%JOpoEl<9NW(g6aPN3|zpk(8{B_#HatneMz)XI!1BTIFc2VjS zT2hcVz;!EGzd#*+*oqOl7GOo+Rs@eEcXUh~^EMK*DnLq5s?nid#=b4-2p9TRg-{o(5y zLil4eOvGp3p{gW-U`pz!8Q{s@(Qgecr|NA#t>r+@5QG+Di@%B*?-V;~Di|#y{ha2* z7h!QhG@+Nk-zp_bO6BMl&Iq`7FI{-c9M*CyxB?azSuRGztFSl zZhX)*VM{6}bO*}_KAMQ0L;5WOm?o6G2_3TECc82_61NM*UnV$ z9psv`tmRJeJi&xEl(QpoWEZ)S7;6AEi8T&qT%sGAX z<~-gX4W~;pC0gp??X}|{V7V6|Hjih-r1my*A~a_2WQOG&X0*!XMt=3-|9igdze3pnLhCdL?-dgITAR`Qe~D1bq2$GAF_i|@ zQ>G$!`+aox?8VqvSuz0?aRcGH9=_@_3Pe(c1e~&W3r&FqlWr2)t8BOyElXaYROsD& zkIs^1=nRB382R+gGN|Du+UQF+Wlx)d!=d*m*dq8i~>X zpefd-5WUzH>I4|I*it*<1tp73Ayru@$yIr9vNtQtRsHwU5tasIONB~y_gSc^67By; z)vpv00}RW52G#DNB2hM!y}C6L@3eZ26lT5l<0rU!=Ejb znYZQ#n^!84r_b9`FDj9zhk4#JQ1Uc*JhFgrNS5p`-JE(A)${RsINuL-+?SH-JrC7e z3NB#2-F@C3M6pJ;ZSL7=MVIT8u*ElacA*lsl-l}UP{u1&Td%7u+KctqR2J;**8y-NXXT11Re2hH5cu>#O-k*n5@~j)W6yBgv{m7II$e4|tIUTi8 zGIoQ2XvpYMN+ADRxb7*GE=C7LXBTQJbT5Ehz8tTn%qgio6RO0Ou{`)PR|)n4I+cK4^l58NXC-p}Vsx0YMc15S zDOq&Nffta%MJw?f&|sN>3N;7B1xXNB@!1edolx^XdHO3u+`kv`JfN|26dvdOp-(>X zpHAD4Ts2Bo(;%NH&@t7O)iWF&qi(>jVhUwyFH}tveS)g0!+0iDdm!}RpF3ZP!(lMj zD?tg;F=MB%R)S@XA)}@!5nxp<-E&F=cmR9GrIcX z@o|Vm#>mPqxWV`DDT!!E%=*{1D0z^%8EJw4P&aoMn8#oKQCer2<*;!hI*pj}8zQJe zMP`*I=H^PAy2_S^kA^GSt$)*d`Jo^%>h_1CC?yxh}NZ?W;{mM3uOa;(cBRDTCXQ+xL`&0RK?8gbf-@CVh!a z*%waOwHT%BOZL#%^=O+_clHswv=FTvwwg>eS5iAt`OkFQy_LmjEksFq+oH|UC|meA z4k8^vOL^e+drFFkNl~V+FDqlavTg&yc4^i^-uK(Ri^X}X@DS5|4IC_2A^ty>^&KGn zDV9j=XoXIduMQ==|G4s>wsg&TIc@w4u7Z}ZC}BI5Ur>nUSF!m`Uz(g`<=hgMM$A61 zGbrRSLHKD0P4orF*(}>l@_R-iqGS|XAJIij>Mv(A+zus28oduSa zTAYK$*@=!MXr@>pTSJ!Zk=_u=iJj~V3XFa?Ggj^Kk}C#cVV`ZKGJQKFIji8B;Ee&) zKyFkGrp_{O$El}L;?W+yuK^WI!B*#}i(u!Yp7{@15zXD5nWIt+C%wwiSs}g;L^^!& z-l{q5^D94H-PCvhm%Unemczmg+EenH#x5^xkY2yx6b*^~^y+)oUw1C+`#QiO;rMp5 z-U;%X=@b6y$Igzeh3j)pq?sTLD2j@GdkZpWzB{c^tnu@1LjO1y?hMIBQvW3M5PgMu z7TZ&_C^c0sy;h7v+$A>o>{ms!`u&0z#kDw zm?!G)$TI3K$It8CchHBDY?0*TF__{^IQKK^l>i?z>yw&zJiqsZs!KRZ4=<*y_kQkr9e(eWc9(pPR7TMy~#A}TJVL10r{#yrAr zBvH2<@4J>VnZ}MnyAMNIe7=p=Hufmta#+;;T#M5A8tK8&Rz4ixcgf|G29qx5=RC72 zbA86-bg=Enroz{i@%FtPe@0Pj+T)o4ouOqzifgGt*rBJX*owP6TQa3g{w3V}gHV-| ziJ|sn^FO6_6${(ps4^N;SRW&5T3#1!B)o#pVO$ZZZa<|bzOFJb4YwGnOS{3zVv-rc zAFBlJFd+~Q4g0`x6eZ&X6*fcH?Og`0$e_|meRg5KRi0i?a2Y)ztDSouiefN@t%caJ z>Y{sJU3l{qci;@MfyK45RLX&nzH#Cg+FpiA&Kv64N=tlCR+CZBp8mN}bvh(h z(^m#NJ2V>V-r=I{40@~U*|@v>w@>H-fxau5pI>GpxUH7tWTZ{8BE-n@V9r{vCQEv? z*<|+ABB9A10;;eW=h%B&06!1W`*tFVAT;l3pjK`_<2zsP>wGvEy;eKhrE|bp%rmPf z#)g*IULrd{__pnWD2+lIaZj7rUkd=ciH5|5kdreY4cQGKkcl=no_OWVTf^#@0_vAH z^z4rnQPhs_S6bX|Gjme$g69Ip2~$T(2hTq~#4kGW2g-zRh#>XReQfae{TQmSEZ>n= zK_cS!cdmoWIQu(d>5TVn8#>v&@C9P68cLbCXaA&l(R3S|dtAzW!H*4{qHaXZYO$~t zX{_^u60=VV>!|O>BFI;Eq?RIbcU;6_k28COz2_lO{0*CwtdPP?n<#uv1qn(NUaW{> zl4}s3_)T4gO~9Kt50ToB-I10;aQ!3qf*|nBc29EGsxoFUFWe2UMdhVGE_S4Hd)PsB zMI4S5w+TuVjpbJwb>|TCi3MR}9v_29htN)D-zXP%Qrgp^#!jU0dDVVZ4c}A3>KuCw zZ$MSO?bRJM6PW8#-@N+$`MqLFTUvQc zMM_7szrse*kKxh1r;j-4eO(0e1v5Vcm6Dx&hDk_6ZJ#%)cAhEoGHXvg5X`LC>{=%NZ40Zs{(~c_2 zXi`;??P?!Y>u1e;zAk=0ck*GZ=NxJvfdB`0(8fHDg-F}bo}jpyK8_jUFH9yp?tpgy zSK+Ok4`?=KG>{kO2>vVfOn;>7$!m641~d;<7QEf%#sd4cwlIiJ32D`)@a^bSEq;2Z zqO}EntHFy1rGl;l+=29Rj*r>1NTM@$FJy681O0xnuxAjcf+lWUIJK!5&pUDc1-Owl zfyJpq=Q6YYI(S*E7@nKgVX5lEHm=7&=4C}5$P~9Y1+nnPBn-+el|&z9Gggtna^oNL zR43M01Y+VeWjFgcwl5l2UG3>GB=B0yDNX0|IFY=T9iA-a!WK&ajH!q*`dCsjQN1JV zXRnC}_W1!~%~_n>Uw^WL8D#|5_eL}{A{f*~S`FF=`uTpeG2_AO~r z-7M20O06^f>L*?*d#mr*)!?SE^zvI}!RSZEU&v(#R}sJQ!x@6!NusjqU|3Yw6}pbI z0;?)l63;zwe6RBycGtZRm%wiL3RhNW0}Z$y=F?ZnqSuHCI~P9c@tb^YBfv%m6hFs) zXTvV>10Ey#?^(`_s()sG4LG+agPvP@3!T&Hw!-R;>l1N+gd!_q;v1XWJLFm8?OJrhXyEl;_hD)%KJer?K-P29lIJ!nt(O2qmB0-dX z$&io}^a?3pKCD7(Ly1b+>Su@%j)-xmcE`AhU>_^$lGa}8eO2H^gY-8_5lHAVMS6Uu zW%Slo$5&+wrXpRs*gYi|Xlxc*A&{PKwLtW<4}bo#kW-mm_tqI7j4*MVnrxmAtdWn$BT^BuTY?33so-wb+O2IN{- z^jvn|7vRc(ul9mq6r2)(5w34tNtRqsmE_F}Teh?C(8lj1HjUZqj1f{4eC-Z~-S88+ z$CB~EqLs zPBOJ3@2wZR3TC}!e(~3sy+@v2q89E1!nzUeM0?JFFAvnIU4oXHcnkbgB!>B;?xYVh zxOL4t8lJDgY(LGd$_YL$e0w0!0>$~e`Gt-S>668H6!*SXW18ctE$nv7+0xPe!Of80 zW%QAPcz-h_8dqJWq>1m{zdCk_%KP4b<91iPiAVHXu*IbY{7b|wguA>i;o(=lt)t=X zorUj`>%UXmOItY9BeiQ1TlpVND+H#`tF3~1;z#>d<|-X)DNXdwye*Wdw;Vqn$y-rI zjL)aGeSKG6e9rTwVYaSL*91EOUPAmwG>@DJ-O0^k8sW9}_?A^ZEQT!x%=_o@t5~Abb);9C9RT$yN!umPG z`QAs-sSLUXUXZzKzdA^tPy*izx^MZK?xh5#l-K*%|5(5MRes=nz3qeJki~bUZk70@ zB+IbhkSiPpjv6ia1EPB}ghF}+RUISTsh@6O--9Zga)&?AJv0}?HroLQNmi+LU1WY2 z_GUq9lpuz)D)3{Yoz>G(Sd_Kf(H%&>RW*AucY08j+a0L}6~7IYp?e%6WCgTW&qHFUK}%qcag|wjF`Yf9yEV3X zqX9oB<7FCzdlh#~zSpTV4eGb7IxA)>C9kk}t`%@{t9qMTsK4D4IUr@Lz-truOAZ*R zBKKvvGW|xYv)EZ`)Sj7H1sc>>QTUGbcN-1)QTOBHMGeF#z8w`ST-0qLtpw=Xsl8T+ zRxy<=Tv8fLV~R{|=uZh-VK*CC+;$~Cj^F`;1&x_pUN1&Pq79_A|B~Y)AVi=iV!qRlx}#zt3+H%&WY)Zo<8yg*&{+L22a$ zq9(2%Wo4^-mPhu>BG-4WuJK{Amq5e|FyO!QD9^4<^F6?v$9OFKk!e_iy~%vsDh5$< z4RAHWnNYMVdB{+d?EExxg{3rV2kQgdDj;Y%%*o-V+{id3Kx|s4ZQ1~b6NTVi4+j)* zC2m?w`K}!-T*Z;zv_pv+qN-qGNY8|Dk>G4`rEtO1Pa4#&UcoN5#zhbsTCk!AtPZ5= z*L{0cJU837Dm57l56puuOP`2NUP#n@ZGOC{o5;&}5?;aEH`jn))8;Qf zIIy+j4ft>PqY>H7GqIyU{Zj*PP1TfLgJahneh4+9G(aKFd&SL+-RZGsjJA(Ht9RI76u_2-lp%zF7zqXvt6n5p&AMsj0#Am6j4*QelLrxi> zOdmkSaE%pPxVIw8^N7f8<5)1wU(jaMflL2@(b-7*J1i4N!4{d81`~o%``fP@fdhgU zy=luT-y+!9i*-1%#$a{WMVcx3;V+ZA?r-68MRfWWZDGEMQuo01{_G)=Jw&;Gee$^p zHl17X2+u1_&bXHoME#oKxw$QNk0nz3tXveksQ=v$iH=*M(l8mpjt z(at;d;-{#DiNuy{1I|KelQRw9>x_2H?&eGMlHuX0i|vKmz*{hE3?zfEP@fLql@#xl@iaC1f#ZS=XoRYaNHzn2)du*D3rgxo|-9~uX zmyDK*4`Q8-l!g_?Bd*;`)Xu@<_rzjUuKaLDyif5 zVPFDKLND;;uVW}4==&8vLxZ6k;BvX*CGpRhb@|nk0;1pm(VTghI1N;EDT!6KnER9+cR`C z?18#s+GqVAK(4S~1+R+}jz>z|YfuU;*`Qxgu|4n1u@r~qYQyJLiR^t1gKYTMKS|H+ zC9?AHI>dHpTaae8rKuxQ>;>DHmIOsT_gZ8=U7h(ICl@g(_N*b~Vq3+nT?^!Nd4Y-xJk2xaeSaxIE<3 zKrvba+iW?>`+PdAfRNpF$%BBO9N19lZ!fG4dqWV~6j+9f%pO9fqf8#Xd3?-2;O>fRA+vPNs;$}bQuuVgdGFSxoDp-Ik=Zs{54Ny_McXW>`^fk>z}qCAwxzs zBHoVxRmu&cfwMyx3f1);JG(^mrNEKf+a&7AxGySjXNPhoBPk3&>4{O_R+a#-17UdX z2BOG;C4p578yN z?lg?wm{rqAJd_HTR|8Koa)hW^-&b(^vpEQKA|RXIX9HoP#-j3rGjN~Jihc470<*Ts zyegY8=vVEv4I>O;cAUO}ZC(KzfkQA8b>=mBBfnr6Kdpekj~`a-$ju4I1!{K$!yc-? zjx=6J_`V{~%9F`GqQxRGvl&kzC%%{A*xp>B&9+lBzB_a$H(*^EY+)3SCh8%&!`5EO zg3Ax8PtWki?FY`tiYQ+{k3Qe)bPW&SA$iN|N}t7!B1><&j?_L6(4324j) z8lLi(u$TL|>LBmKAuhYYyPD%2HOa6>fjWdGQ%BHEmht@y@GE^-_)mX0Xj9bWwc{== z$&fjQRPL8Nk1vkA20}$hqz3+$Hjv0A=(9Rtgucv&v%mwnr%$Y z4&N20Qh-)Zs2of&`bo^5HowjrbF%&`Z%Hz~Gkhic%_?b0l*FYtF7~?;VzntPbi#mO zLw<6p3lsgw7!S^eKQH+U-gMZyOB= zKO{aPs%)??_>s_acoNcudd*PcW&Bse6KDj1Y2AR3NL>X(83q`>8uq2=DO!cJDo&<= zfOY(O2`ZZ-dy%d$_``_#p{($ONF#h1m;hFAEGc^^EK8rCiJw|8dmd4GXDcB@hcX+D zK4}5*ZYqt?h0YzzhEqmYB8^a}kgl)Spt66aASHMN|D?j3jxrp`mzR9K1(jJVtVot- zT;*?`lsIZIFQfIK!V=iK%P%1^c=SC94dj4HBjn4=LH{RINfnyf1Y-M@}1K$6ysFJVTeeBP=f%Xt(kk_GU z{q*Q0r}r{k2OHWWe+%(Re?SKmqOqh^BPs{&oBzuSth?g_FDgXcV=8N*T<|T$By@eb z*>8d8WY=EBPLr*5-?N=E@paEe!(oFucIMwge9|ds#@~b1r(yQb6^lsHMJR?6BCpB+ zg;48gn{1Q45hb=TMQ_CKgQBc+pYrct`07b4HBWEZy?L}6c&$zO;`T(&z3rEGvq?zZ zfMi3zU?*LG3{g)Jqoqh{{3HR8Od__^2zyZJf7vc?7{OOn2(hHgkYSa=oAF6kp%`%u zU^Mf^>;77RfBUJ>q&Ub>aRH$co0F6P#h_0WWx}ki!*$5;?{&Bdbtsha)mvGK=XrP-%c#YP=sz-3IT!=L$pCix(E6H zP4O5>{(*X}S#Gc=P(39_p?oAfqZOmx0+q8cuW7EMWUrPg#Ajays9$u}yTctyIPe2Q zDUDIAAnsZsUzCXmAbiZy|j3_dQ+*2RwkjE zwD=tgB{X0df0057Rb~VNhVpg)R)@5q{LYv!J+g$Y49-!IsbXn$P{;QuwxllV_)q_} z-56k$x2ogcDeSOk5|a3n?|1XkDv_E> zbSlMg8 z;${AVL-5|7NYG^ENEPzgp!V9K?V(K^yZsK+A!J^X(^d`Y3p8}ZPwO?@5VX_%^n{5~ z%ym(?TRa}T ztJ1}ZHd;9(Pqfr4*7K@^rsM+U0DR(xv8VBe#a&=Hoa&pk1mZC`n z&q)r3c5EHP?=}#e4xdBiUF!gav8#8m;%B0Q7{lFW<5iJO1)BH^g4yB35G9IU-s|MmoU>=GvPbBIp}RUfFmpiuB!1#%6PcXyVF5-hdy!i1AX?>N=C@?OUS zJQ>+>kcbnU;_nW`P;9s5frlS2Ex6a76pp)?B|6!YhkYfgvauqzGDSafGFT5GA20FS zkf2FhLbz!Ihne{HYzI~p$lr#c44IQX<1}pecyrXI>KRxH6?Qya!0-IzZP9^k zdCNZK(5Y6^qt+$OldDcY==&`}CC*vdRME%ytHP2t^Ln-;&&+;x*kz26A$F!2gD#v1 zVKk(*-zvzO(dRpZ()}1xW4tXFQxi#h6vN89-iie1=;H@`a)Is;c?Ox z=2^rj!=_dI)M_*5bbqPmx=lAbCuQOcs`geIKlnY{F1Ifxg-m|H6Zt#9*^5Ti$aqH{ zZ@ZJ;9xLP>aKFEKYi@FGPF+Mzg$Vi_AgSO;wO?QC>^I28! zj$47Gh^6;3P$__M8Z6vs;8bkMSFwA{n;k@I_kEt_TU(k2W%T9eCQd*CpH8o3dyMp2 zeB{-tPm}_j;Ot*D@7h{To(5PVEs{bo&1Hjy#uyV;RSV_7Q2r;8=|S_T(-|rUn?MGB zm?X*bekeZ$D9)Q-vdZa!QxS|_!Gs#i(27h0{$X^9^s`pO0vhxB)0%B<8=d^NVkmZf z0rqb+rughseM2*)Z9Z&>9n0jiUql{_RoigJqm0Im?5kM*3(7NnzPDSnj~g0JW8O}z z*;YS)Bx)@;e?ww`Cp#m;{V)?$8AR|h+LNex>%9iFnuNgGGs5;9W(KZ@_2N^)2h4H` zVgspPQ_^baI#_u9$}f{l0F#6RAzbiiN?qI~X5Ca4;qgKH=CMgM`Q_d`xz>#ntxjEx zEyybh1;2vJmqm1z6iY5$3UfX>zO|lsa_#3(LBbPNRZ4=WPTH9aXmXH7C!MnLTD4|OgTr_v;&tS} zg~mY<#@`|?dY&6{nE4XCg_$8<>adgfa_>n^oD?`O&(&hNeimV;26e_ z1<&;tH{K>4g;wO;20R#XZNcQFXd$@@-D2p8Hm&LXB2XQVET`WAd|3QBWSkeeQ5fqZ=ha$8@QTDVAMB^!bZVmzA>sADZolps&F%-3Sji&A)X05c!~R z%vH!rXRer}ZN;1KfvSD!qn2w&WEWZT?_7V(uj1*gW^shGyTJYr&eGdH2|eFUXqPVa z`jptNA%^@S!a6Ki|AXQYrRdjBe%JBLhp{K$_jU_Zt&k9A6#&YJZ878TEk#dfKo;d~ zw^&ZfBHRN=FvhQu43#%{Bl=D26FQ!?29&;56Oo7_w^G?Z0YATLETH%9xQzQ6Ok>GKlyL`GoNre>qYC2&XCD&&3CfEe zCUf!!O4%k@^*Gh_b*teOaQBEEF%bUQP)|YU$v+!IKt1yJ$pfY5HH|~T&=2z{56?r~ z_8jplHP8wX!^o(vYoHC~HKxl?5({(^ zfA(ci_>Y>ZY{VS?({e5b6Zh=!adDF=yh)cqeKM+v)l^?3RZQ`+y|*MdzD~FXeo@WA zx9iXUydy(h=#m%D490u0{6D`GGi2~c=KL7&41n+LyZwgEBV9D_`>l$QJnpI87J*|t z9&3xW(C3(X@O&V8DCZe@_+4UpUiSvj#3XlqIw8-Ug7q``AA&NVr}zB&bRyv@c=QW3 z27YY;tk3sjMQ`3L-q*pq7;~KDct^SU+JUd0Mc4%IZS|b^aJe=xe#7>VfByz+1vctPUR)u3|z-Jtd`StVY?pw&IN-GN_ zHk9(vcz~o@AgTAbH7=>kdco*MpH~5$j#fl3Y4~DKU3|x_4(CmvvS+i|06nl7j(Vt; zSKmU}#^MZvIy!$58Qigb$RshuNIG{n{PH#a=v`zN*l-f&wt|nUg7@`}7TF=<-Ye$2 zYYb3=7~${J6Wdl^C>K1Vv8|8(N_zaW?vvpNSl8?byI(p}h7Y@9OL@1VJ_?Nf_WhDy z79RiFJJR`!cx-%x&ad5VA0DeYAYPdHg9O)K7UnbT;oZ7W8xBC2#!C_q2s!V?fWPIN z`kCo4ka6EL`-X|}w}gK5i{2OVQ}4UWe_q0K-T%6+&;<+dMfhVcRgB}GF23Yy6`w3*OyY>c0uzuymvr5IPp>l<6gnkgI;+NT+VOL)sHOo8kI+N>0g~M=L2>J%(&3+N>&z*+MlVAV(MR1h4K>PD`D#8tc zC;56jqtV|)|2pe9?klLy*u$*D^TSj88eJWm zE60^j5x3mxUu05y2536;`Ae{YeQAp`jamKsyJ8zbPk67WJWFJ{jQ)dB<70W_rOwbP zrytxKF&BSv@Mt5>&_O3wSKr+7`9<5>i5pIg3=YFsT}(K=;Ev7-;)TPa&Xpur65i)~ zV5XAkvm>-Pvu-9V7#yVX zwn1Ib5Ep`}EB5;r8m$$n@_z#KSoFx5|T~5sJFQQSU>v7drgR0Ooyc_V&#I zyV9Op!w1F|eXSd`-yGHExDNky0FyBtPTt(ID@fDvui#@gS=hj{eouADc$&$4Yg;EZ z4T>N;Y7Ekp76-<-RuM9M;6zKb$x)dE>{uk^+rEh0T&)Rr+q}7htlnG3gmRoq)OIg1 z-F+&TdxzIm5=y99X0L`Tp7=|HKXbXSd7ncG)#C5(uE7HbIGRfe?xi>cL2u&$72}N^ zcid}L^StRXO^qFupjC2e)lgeFmeI|y34~I_Eu0$Z`H8GtLxOW!A2)JCIqqCvt6ob> z(c^Tf;a68xYBAEqOCK4E9rj{M(-gUxKB?i?vyHVFcf>6wl^dD0Ey-}Oa_4k3%;}jZ z0o6xSxM8lz+#%!@VpQp5*sS_C8u`|gbV0J!C9gwqKN@*yoLn3Jld)IY6-_onX5eR9K3fb+gPEQccW#l0ChtH2s$GQ4pxKQ{!c zk30j?du{9E923w=_O)3JzrRXNgJB`2E5?tW^#U#99l6*_?$JpQKuX_w2OEdDI-m#8<3q*l8V%u_Xt8i5 zw~Vwpjb{4oP#lBPrpml3{+ibka2B~1?jffJbk*?fQ3Wj;y8N}`UEiDGHY?ibREkr9 zy9-)wnpHXDI5X6kXT$?_v>0c%O(=SN8!e%iG^!S}cW4PI;$b#^_8k4REl=<9Be^D; zCdQc^+ckx~AI0Q84oD|eJjc!{`hiB_&XIw*kSHUhCsE8#Uq8;Dr*XeuFp+DbABdwD z6T*k^w@46gCDiLkIYZVFsB6#$=mG{{V@@8Ik_M!gQd^H$IzEtOG-<8;DVAE;1jYYc(r zeBl1OTKrAGbDKY(8&!5^??!QIbui@6?cf1@!oJer9H_rBgaQAz2x=^YpX%0+b@)`NL1;V)A zVPP3@Gt@-;bI?+q@H*FyW2eR(nb8)eNt~3YNhx5UwNcVExTvEj7pK0DU&68mzCla; zE0j`5IG)Shcg|8%IIh;CLeIp0N1hg?;J(}dW^gO7DA&AAhx1#Y_f>V_waqmsUA#H~ z%F6$Jq%Pl>rNfyNIESxZ)$j@JAFS686ovReK8yBb$3vUp5lAdXP9MHj;|PtK=Zr$; z9q_!vHOMYRF#Nni;A_g%+Hy6HpuWa$2AukAMAbHU8Z;Be`gq>A%HBF!@F3PGg?r@C z6>^{EH`67bVOYb7>dUf=p|tifNXl`*t-5|cC*e`9)+@lRi3@6swdkQux%hix-7bah z-NF2m<9{3vCDb~$F~ZymgCX2ThC3R+%T;mTd+gMx7doD0VLi{QgtE=V>RUR3*WWfDYJ|2PWFJ_NMmbZE)VokE`o@oiMy`x_WxQlie64k5*0qnT7 zckBDNh1r}R58KT%Vxygf=uqqzK*nYIGav1$RdKoTJv~no&m*nQZlk2f-+jL#N z#@LCDZtx>5;WqdMx_<)&ssa9jH)Lf^srJ{13Z;(ft*@6`qZJ%Vh!?k*9rR7yf_>sL zg0@zbdgNvRDnp|z_$jR**EPS8+;0}dVUD*NvEq-=>EL_sGO&UfFiG84uE8NF3{Ule zTy(F3CG3DW+Fc`i(Br$PSyh82UKy1k8Nc{MwA}PAs__XxQ=MI-57?*6|9#jPxjozg z>DR`FX3YHIQTAQOM2-1UU@bSgv1m1U-!{P12)hRo(Eo<_Zag)GI@Oc(>An3 zXX=sv0&BnhB6zrXcJi={({k*e25$zvjf_%2?-)z?%9W3k%7WyVpC0P^fuvdW)yq}F zT{@#;gWUc<)+Wb+DY}oFNw{Z;W4YF$@pDKYSp@LmHhryR|A_o?tK>OA;QzJ`;A_LF zbrSxT<0Hf6AutCvHk+=lNztnzj|U(bg{*LVkDNfSWA$BN4EW2tiF>t(5-MV-*=OZt zWecF8Z01r44K_Vz^5!tmvi1~kf$sC?^Lnra#7-xzeR2q3#7zamUtS_c_zd_kj`aLB z8lzLTww34~`ZOCZQzK_=6*sw!3wk2AhM!IBU>J9@c%;2%Rqu_cPjWE1Wo{BgyWgv2 zvPHrLHw3HuQ9%Qh&;rIP36R`H=V!<>@=*Rl*OHMl;WN*~%V2(^?mj9fi+x0BXxq2% zBOU~TLf|rw`N=Kx{Yb2XliS5y*Wv7}HVGnPGYqQ~kg+kHYoD#Mbq1_rERU37swHbO z>mnaQekX9(R0PxEQ91H_o}pUel36$85oAbc{(v~?lxV9(y{|8n6TC4KRdQ~6w9dt} zu0^)#lxV17KaQ7gV5+heG+2shJ%gOpdElsN;@ctzncX*44xRCP8fF>T67xgLJooje zz$Y8zDP^fXNIz6)Ok^d`p=7JxI}wV@Jt@B#C4qxBZ2*gT0vVS1^8eJ>gjK^IPm^EH zFtrEQ!6*k=R*WYbYqTtLmybfW-TO;!*Y!pp?E=(3!Fb+kuQBk_`=ZLcV;Xe)L$f?V z2h<*%1VaU}x=)L@jxzlPO5NxdVbySzP$-j8hODrbU}yhI=2)3F+!_?<=lZN+(DVy_ zPlp(gnQblSC8I1lj1u-~cDCWs&^VO~?=8y;Y4v98Gd*IhthEazEiE*EYX@ylRj-Ma z2aPR1Uzflvs_?pO1KgXgJ@p?xRwH*oW?iNSysK}boiWsTGPU4qJA>;=%Tn1gx$hXhi1B&AeD^^QLDIhKTCRKosFPx5_ryZwOG7b!471(`= zzxKP>NRh6g6t%l#81|qfFw8K6Eo&sh`Z|H+DdY&vLwqbG5AXf25b&e$odi7pJPxNW&*Ax&GmTe8c zn*p0X51gs6!v}98PI9|0dAjvAzpRvX4&ty?OlV{%zJAg7kaG%0Tb#X7;m=3%cR6}M zHpK4ZaoaZhG9W!5vt8}D!j5n4cPjjO%xHd(LIzmsUQx&}k1_WZE+)ff_4m<;m-m9o z!ybu2;;iUPJ2jlK8Z&MX2#ysnGR-Nz7;NyHKQdd=S9SGom8~WNv%XHzKHE8EAU6Q|e9{OTom!Q4W-mdlf{&{QNm;aLe4SWCgc)tCu6TL%x%O4Pq z-w&5I-qZidPH47e-xRbzdK$kN{ggbvGI2+3P$Acm zPX5{SNkqu{b=a!%i;M`04_yLDEt;?>?#!5=;9 zUbyY*QogX1e4&zXH3aubKr5U$LkNE_5;xfJgL{7y7k^xP0URR`BOMJ54NR!ct^pM} z7+gPyr*P4y-g-ma4t+rHEwxNSZ9CXmg5DBPw#OQBKkVx2q)$EhCb;9H5^kUsZR`Rq zPfgf@5-+rbh@GV)J{L*CMfPJMe284&Li?aDFtWFyAzxyY8j8?jJfyj0NBRR3(=cl1 ztYSD)xo^4+U`vJ#nHX_euTtXtMlPK0`{!wGe4iMJ$^+!%FqIj>5 zhXq!Dw!&P_ZQCQ|j(d=y>0#*vFWG{6M4HrUhZ@WnBYu3OIF>?3pPxkiEkokV8wfB< zI??`LSfic&xGC&L>?rD_-TJ$LmtIj@9^tJ37qiO(iLc9yFC$4G{dWPh?NzW?wK%?| zO5(ThXPF$2|8iI^!?(n;@ymf4iIO_2`F@gvztgwtSNa?~IP)Z0-n~)kI=vX>@8tAt z6xd->jJx}_z?7DngO1RTRqVGVG}q*i?u(4bs;<#-t=dO#?(t7vUyFCZZIw4lF;_5; zZ%5Y#v3CuO#2%sSIn+#iuyMBgNp!x3)Ag4`xew{qNx81@AMxs8afwZ9EvbAZ;e|8X zr}T|^@%%0BfQzt(Zke*%_!2OE zkc3P-mVqLYn6c{VLw6UJX3@R*rw^tol1&PqNN4z6MkG?VK)nbhw!sEk>YaPGxtOlG zBJD!!vD*h<398~7wJi)8njn#OD3f$c31@!S#?w;n?)tJ zpe`G#QL81o2G16NGGi#7sUo)!Iox_nb{SNJL+xeIL3Uj52bJGY#SEHUT7Kp}P~jxy z%wX4h`ZOoLbRKx9NWXoIc4SN6dQd|S)$o6W5QPz}rlkVVsQGtT0pI%lXm=>+AKmB^ z?QJSmgnev=3`OvK1m*WL*Cmnq%{qHa_ z%-!9+5Ih>Cq@+9sk6JUpS4!ga}PSu)6818U_VyfFPYVLPm->C#%mkd89TYg zh|2xZ<%xn983mJK*e*JqP^V?`X>VwSQvoX11E_~+D+{c3N~YbqkeD8mql-8f46j3f zC(Yj8B>BQ+(RUOfA!vV^_5ovgUtB|ytg7Bc?EizNgehtAfO~^r$LD#L znO=+38?rfAVnk>*jmhNYgUdj!#yWwrB;Ihm%e>J8-K+XM!|3&t1-W;j%A zN;8@CdV?vt@8ndS+R(Utk(4)9!jmS?o`e zJuT1672GwZpc#{5SS~uUX=15DBvq$Jz5$o7y!u}bkmzK7`W_(bm1uiht3VhN9Z5lx z7?qWjk}^Jn7Es~%yivc~>}wG+$1D4aMa%a+Wf?+!^!F5!X>gnm0x?gMk{$%httxv^ zS+lkD1S1&Hn|;T6l2k!&*_@|f!D2p#eV3w9Fs4xvxA=LS5(~#)sP9gUXzAEm<=Tba zE*6_rm%fv7eckllP?wr-@EO=*8Kgd>zI!3Or9&Rm!&#RmqQo$4Mv3!}5|fzlRDX7i z6-vm<_;yU`;r^3Zth*{N&j?j-&99Sz(6|INu{ZBhqZP%3q95xRq1o}66BK|^CtHn# z_BLSI7fW^B4bvQs`=v2??-d6OBjjr>0{?*Xpy(w!@e}0$Fgu}V{8RMZBjE=qlVcFD zEN-{d4_HiA3*}|a50UnWZX(Iyv?r)JRFc*_Z^`~*yFk?8nP&N^P*%(t|83&?c?@Pz zH+H;muF;`ApA_k-Pz^L=3_(8}vY6_-__PM43$4|4EECwmwx;`a{8otxJJ0A4CT#{D zk(W#>Ie=x-ZZCUbv*UfQGVP9l`jswnwMEzVAzzsj&dD}C+2>)SYOIGN1879^I{}## z{a{*X@)f(X*EKa{zb4v>&fW%@UAQt}HE({8Dw|awl{{@bG=POCi(!k`)%BaOR7{;k z+0|qDENO|E_4&_DGnKg2&wpu>G*fmiRP#KkM&%dk(-)d^h~|tt!;?S`&l16ps`6Pp zY(-Ut)39N7>(}4|H=EC>MhH09@b(`)W;`1htN@Ir=PoG`NfR z_e0kIKG^+_W?nlV5W7l7hO1f=>ugZ)``3v3wc?T3Vc)KuW`jII!F~6?OMN^m5ViFD zMt&tCOY6I^E^oGbvUNoB2n7El9kUi>k8#)cy2hASDHGbW>6oW$Ek8W0bbk5NIu1N} z+y=$WzkWJ<2xq7dT1wRCl2wqLKvfs|>mflT(%p#DKdWQLsf8*Y8M0w>#i7V$Z)80Y zeg)nuSu2`%8a1DISU(Fa*bLGM-b)c@dP0`H=@c{k)%E?WL^Q*$kT(P#A6ecftyOi) zB|==EVULN4=wC$@)1)%nb&?f`Oiu*wz~}u&9HCctNO*^f89 zQ=E>>@h;0BSF4>kKuqYoV8-#(k0=b*LkY5{ubfPRbr~2`54`M-;f?@j=q8_@iHi+9 zBK1KV^i#0JtC&+()}uutpE*czTBnk}+}CH?g{(;CToUm%ZjN3*#UL{(Y>Agc1I%TM zT+j2*WyhuGuwFQ?uq4(U?=;#owTgaa@L1GTrUx#wdtM6}e%qwUcx~T(Pl!R1!stxi zNV07Sc&`YG-(1-_GcFSS)r7cLFT0)FooV5&l4ctO>O|s{AuSt--%QnaXVmvk zjJu|`3MmqASQf7z!KO-=n;VaBqV*WEz0aV#E15==3tTwa9F@>u>KS*|4`lYo*Eyv5 zQoKFIuPLV%?XYaWLo&W z*90YRe1LgRQ6tH0WFobE(=(Zyv=&aaEP)rsEKYP=0@QgjC0Rh9>4?uHCT`^0|0iY$wMRt|L~M9)GDe?NdUIU*fG^ zowe08hofNKjBUw)YY<^Ibhh0`sNicu&76a&k7ok+k<~Y=;+Te;CF#}ZbBs_vvXdmj zs7X^1bMEEu^X=b{;8Uzh2?Hn7Kqh#bQC6+PnDXBHKCC50FFI<@&Vy>?_HdFdUBX?7 z%#_@?=rP>7ZYkSW#yKsHy}{LQEvdn=V>fWQ@CGURCaI9Yxw23#YV1PyMjT8X55hO_ z81WRCEN(Wx()vj<_?n3E`gY=yqh(ZQSYfZMk$4pumWw2F$UXWd+u3xcf3L*9k0ovq zy&gZ?%Gf<~L==h#6+KYV%}-nCz{5DCpZzrQ-Kw4Zgwu#Lok24}d6IH-te!Oiwj+#! zH>sv~#x69x^m9LDi2>!sL0x%yxB|FdM)#8>_#896(`(&?$l(s-swly{G}m87L&+Q* z1gBdRd!WbYab*h)%V>fS<4w0sk?AaMts(BDIN& z=tz6*IsR;a34eSgnBHnNTLtwzq%Js$5?>0qLL7$3OvxTNz0PPPfHz^A`#~G%Tyv6- zSTtZzN9c+yOehZZ)%;3=F9S#UAbJAp5`hYJGj>q593!1$2JhWo!vDIXBZEuU89Q-8 zh*u_nPsCNn>#B9G;9r`$ll@|=$}3d`F)ictb?ZjPpU4?hS*FA%sm(ic)>@F=#+A!_ z)X<73{2EJk$Z8rzMeN&CJbW#x%@kGkyFPIW1C?RQj=o8HqJ+8%$FDx^VQZzmQ@mhDRXC(XdX=l}o! literal 38009 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 U>UySAA>eC=^LO7AZSzg|3)a{HOaK4? diff --git a/book2/005-glm_files/figure-html/unnamed-chunk-6-2.png b/book2/005-glm_files/figure-html/unnamed-chunk-6-2.png index c2b2a0e58f3e38f6cf9c333f041d2c4d8bb47eb2..28ab6136aa3fc3dc93ae29a76d6be34c592973d4 100644 GIT binary patch literal 34493 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 S3qsZn)~(sF`oYRwNB=KHnF0RE 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 diff --git a/book2/404.html b/book2/404.html index ba89d06c..5e8632d4 100644 --- a/book2/404.html +++ b/book2/404.html @@ -23,7 +23,7 @@ - + @@ -323,34 +323,33 @@

  1. 6.6 Summary
  2. -
  3. Appendix
  4. -
  5. A Accuracy and Uncertainty for Categorical Predictions +
  6. (APPENDIX) Appendix
  7. -
  8. B Commentary: Selecting a Modeling Framework +
  9. 7 Commentary: Selecting a Modeling Framework
  10. References
  11. diff --git a/book2/acc-unc-categorical-data.html b/book2/acc-unc-categorical-data.html index 6fc62b38..855dab49 100644 --- a/book2/acc-unc-categorical-data.html +++ b/book2/acc-unc-categorical-data.html @@ -23,7 +23,7 @@ - + @@ -417,8 +417,8 @@

    A.4 Concept Demonstration via Sim
  12. “Case 2”: class E is almost always the most likely class, but classes B, C, and D are tied for second place
  13. “Case 3”: class E is always the most likely class, all other classes have probabilities < 0.2
  14. -
    # examples of three cases
    -print(p.1)
    +
    # examples of three cases
    +print(p.1)
    Probability distributions of predictions.

    @@ -487,13 +487,13 @@

    A.6.1 Shanon Entropy

    A.7 Review

    -
    # examples of three cases
    -print(p.1)
    +
    # examples of three cases
    +print(p.1)

    -
    pp <- ldply(s, performance)
    -names(pp)[1] <- 'example'
    -
    -kable_styling(kable(pp, row.names = FALSE, digits = 2, format='html'), full_width = FALSE)
    +
    pp <- ldply(s, performance)
    +names(pp)[1] <- 'example'
    +
    +kable_styling(kable(pp, row.names = FALSE, digits = 2, format='html'), full_width = FALSE)
    @@ -520,16 +520,16 @@

    A.7 Review -0.73 +0.74

    @@ -537,16 +537,16 @@

    A.7 Review -0.73 +0.71

    @@ -560,7 +560,7 @@

    A.7 Review -0.45 +0.44

    -0.22 +0.19 -0.17 +0.14 -0.38 +0.35
    -0.24 +0.27 -0.19 +0.22 -0.40 +0.42
    0.84 @@ -568,12 +568,12 @@

    A.7 Review
    ex <- ldply(s, extractExample, n=1)
    -names(ex)[1] <- 'example'
    -ex$CI <- NULL
    -ex$actual <- NULL
    -
    -add_header_above(kable_styling(kable(ex, row.names = FALSE, digits = 2, format='html'), full_width = FALSE), header=c(" " = 1, "Class Probabilities" = 5, "Uncertainty" = 1))
    +
    ex <- ldply(s, extractExample, n=1)
    +names(ex)[1] <- 'example'
    +ex$CI <- NULL
    +ex$actual <- NULL
    +
    +add_header_above(kable_styling(kable(ex, row.names = FALSE, digits = 2, format='html'), full_width = FALSE), header=c(" " = 1, "Class Probabilities" = 5, "Uncertainty" = 1))
    @@ -620,22 +620,22 @@

    A.7 Review -0.11 +0.05

    @@ -643,22 +643,22 @@

    A.7 Review -0.06 +0.13

    @@ -666,22 +666,22 @@

    A.7 Review -0.11 +0.04

    @@ -690,31 +690,31 @@

    A.7 Review

    A.8 Example Implementation

    The aqp package has an implementation of Shannon entropy and Brier score; there are many other implementations but these are convenient for soil survey work. Consider the following table of predicted probabilities (classes A,B,C,D,E) and observed class (actual).

    -
    library(aqp)
    -
    -# example data
    -d <- structure(list(A = c(0.0897243494322252, 0.0537087411977284, 
    -0.0643087579284512, 0.0582791533521884, 0.0655491726966812, 0.0878056947034425, 
    -0.0550727743006022, 0.10724015754623, 0.0332599961787985, 0.0555131608754956
    -), B = c(0.191110141078936, 0.187244044389649, 0.119214057525671, 
    -0.198461646003737, 0.161851348940294, 0.172157251906694, 0.113611770097243, 
    -0.178697159594029, 0.194607795787689, 0.188977055949146), C = c(0.121941735763077, 
    -0.0770539012535731, 0.0977753159795662, 0.0774293724263895, 0.072198187957068, 
    -0.0366921003115242, 0.151033286139089, 0.0974443429098862, 0.124876574685048, 
    -0.0864142563046045), D = c(0.351108807309283, 0.322120077305279, 
    -0.440632731639948, 0.401063395801608, 0.312647702445919, 0.304193047630158, 
    -0.270239142407351, 0.258895264130713, 0.422747316475851, 0.252724366285052
    -), E = c(0.246114966416479, 0.359873235853771, 0.278069136926363, 
    -0.264766432416077, 0.387753587960038, 0.399151905448182, 0.410043027055715, 
    -0.357723075819142, 0.224508316872614, 0.416371160585702), id = c("1", 
    -"10", "100", "1000", "101", "102", "103", "104", "105", "106"
    -), actual = c("D", "B", "D", "E", "D", "D", "E", "E", "D", "E"
    -)), .Names = c("A", "B", "C", "D", "E", "id", "actual"), row.names = c(NA, 
    -10L), class = "data.frame")
    -
    -# check it out
    -# predictions, and actual, observed class
    -head(d)
    +
    library(aqp)
    +
    +# example data
    +d <- structure(list(A = c(0.0897243494322252, 0.0537087411977284, 
    +0.0643087579284512, 0.0582791533521884, 0.0655491726966812, 0.0878056947034425, 
    +0.0550727743006022, 0.10724015754623, 0.0332599961787985, 0.0555131608754956
    +), B = c(0.191110141078936, 0.187244044389649, 0.119214057525671, 
    +0.198461646003737, 0.161851348940294, 0.172157251906694, 0.113611770097243, 
    +0.178697159594029, 0.194607795787689, 0.188977055949146), C = c(0.121941735763077, 
    +0.0770539012535731, 0.0977753159795662, 0.0774293724263895, 0.072198187957068, 
    +0.0366921003115242, 0.151033286139089, 0.0974443429098862, 0.124876574685048, 
    +0.0864142563046045), D = c(0.351108807309283, 0.322120077305279, 
    +0.440632731639948, 0.401063395801608, 0.312647702445919, 0.304193047630158, 
    +0.270239142407351, 0.258895264130713, 0.422747316475851, 0.252724366285052
    +), E = c(0.246114966416479, 0.359873235853771, 0.278069136926363, 
    +0.264766432416077, 0.387753587960038, 0.399151905448182, 0.410043027055715, 
    +0.357723075819142, 0.224508316872614, 0.416371160585702), id = c("1", 
    +"10", "100", "1000", "101", "102", "103", "104", "105", "106"
    +), actual = c("D", "B", "D", "E", "D", "D", "E", "E", "D", "E"
    +)), .Names = c("A", "B", "C", "D", "E", "id", "actual"), row.names = c(NA, 
    +10L), class = "data.frame")
    +
    +# check it out
    +# predictions, and actual, observed class
    +head(d)
    ##            A         B          C         D         E   id actual
     ## 1 0.08972435 0.1911101 0.12194174 0.3511088 0.2461150    1      D
     ## 2 0.05370874 0.1872440 0.07705390 0.3221201 0.3598732   10      B
    @@ -723,15 +723,15 @@ 

    A.8 Example Implementation

    Brier scores (accuracy) are computed over all predictions and associated observed classes.

    -
    # compute Brier score from all predictions
    -brierScore(d, classLabels = c('A', 'B', 'C', 'D', 'E'), actual = 'actual')
    +
    # compute Brier score from all predictions
    +brierScore(d, classLabels = c('A', 'B', 'C', 'D', 'E'), actual = 'actual')
    ## [1] 0.5833992

    Shannon entropy (uncertainty) is computed from each vector of predicted probabilities.

    -
    # shannon entropy for first row, could be a single pixel or obs. point
    -shannonEntropy(d[1, c('A', 'B', 'C', 'D', 'E')])
    +
    # shannon entropy for first row, could be a single pixel or obs. point
    +shannonEntropy(d[1, c('A', 'B', 'C', 'D', 'E')])
    ## [1] 2.166525
    -
    # compute shannon entropy for all rows
    -apply(d[, c('A', 'B', 'C', 'D', 'E')], 1, shannonEntropy)
    +
    # compute shannon entropy for all rows
    +apply(d[, c('A', 'B', 'C', 'D', 'E')], 1, shannonEntropy)
    ##        1        2        3        4        5        6        7        8 
     ## 2.166525 2.021157 1.982791 2.024063 2.011094 1.971243 2.036219 2.151995 
     ##        9       10 
    diff --git a/book2/appdx-class-accuracy.md b/book2/appdx-class-accuracy.md
    index 1302e2b0..28f23f70 100644
    --- a/book2/appdx-class-accuracy.md
    +++ b/book2/appdx-class-accuracy.md
    @@ -188,23 +188,23 @@ kable_styling(kable(pp, row.names = FALSE, digits = 2, format='html'), full_widt
     

    - - - - + + + + - - - - + + + + - + @@ -240,30 +240,30 @@ add_header_above(kable_styling(kable(ex, row.names = FALSE, digits = 2, format=' + + - - - - - + + + - - - - - - + + + + + + - - - - - - + + + + + +
    -0.25 +0.20 -0.04 +0.11 -0.24 +0.26 -0.36 +0.38 -2.05 +2.07
    -0.11 +0.15 -0.14 +0.02 -0.22 +0.27 -0.46 +0.43 -1.99 +1.95
    -0.01 +0.05 -0.08 +0.04 -0.03 +0.02 -0.78 +0.85 -1.13 +0.88
    Case 1 0.73 0.22 0.17 0.38 0.74 0.19 0.14 0.35
    Case 2 0.73 0.24 0.19 0.40 0.71 0.27 0.22 0.42
    Case 3 0.28 0.80 0.45 0.44 0.84
    Case 1 0.05 0.20 0.11 0.25 0.04 0.24 0.36 2.05 0.26 0.38 2.07
    Case 2 0.06 0.11 0.14 0.22 0.46 1.99 0.13 0.15 0.02 0.27 0.43 1.95
    Case 3 0.11 0.01 0.08 0.03 0.78 1.13 0.04 0.05 0.04 0.02 0.85 0.88
    diff --git a/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-2-1.svg b/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-2-1.svg index b366cb1c..9c1e1cfb 100644 --- a/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-2-1.svg +++ b/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-2-1.svg @@ -46,13 +46,13 @@ 0.8 1.0 - - - + + + 0 -5 -10 -15 +5 +10 +15 @@ -78,11 +78,11 @@ - - - - - + + + + + @@ -144,11 +144,11 @@ - - - - - + + + + + @@ -198,13 +198,13 @@ 0.8 1.0 - - - + + + 0 -5 -10 -15 +5 +10 +15 @@ -218,11 +218,11 @@ - - - - - + + + + + diff --git a/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-3-1.svg b/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-3-1.svg index b366cb1c..9c1e1cfb 100644 --- a/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-3-1.svg +++ b/book2/appdx-class-accuracy_files/figure-html/unnamed-chunk-3-1.svg @@ -46,13 +46,13 @@ 0.8 1.0 - - - + + + 0 -5 -10 -15 +5 +10 +15 @@ -78,11 +78,11 @@ - - - - - + + + + + @@ -144,11 +144,11 @@ - - - - - + + + + + @@ -198,13 +198,13 @@ 0.8 1.0 - - - + + + 0 -5 -10 -15 +5 +10 +15 @@ -218,11 +218,11 @@ - - - - - + + + + + diff --git a/book2/commentary-selecting-a-modeling-framework.html b/book2/commentary-selecting-a-modeling-framework.html index 1d2d83c2..841fa70d 100644 --- a/book2/commentary-selecting-a-modeling-framework.html +++ b/book2/commentary-selecting-a-modeling-framework.html @@ -23,7 +23,7 @@ - + diff --git a/book2/glm.html b/book2/glm.html index 4360cd49..9a238a6c 100644 --- a/book2/glm.html +++ b/book2/glm.html @@ -23,7 +23,7 @@ - + @@ -391,7 +391,8 @@

    5.2 Logistic Regression

    When comparing a simple linear model vs a simple logistic model we can see the effect of the logit transform on the relationship between the response and predictor variable. As before it follows a sigmoidal curve and prevents predictions from exceeding 0 and 1.

    -
    ## Warning: Removed 19 rows containing missing values (`geom_line()`).
    +
    ## Warning: Removed 19 rows containing missing values or values outside the scale range
    +## (`geom_line()`).

    @@ -417,24 +418,24 @@

    5.4 Exercise5.4.1 Load packages

    To start, as always we need to load some extra packages. This will become a familiar routine every time you start R. Most of the basic functions we need to develop a logistic regression model are contained in base R, but the following contain some useful spatial and data manipulation functions. Believe it or not we will use all of them and more.

    -
    library(aqp)     # soil data classes
    -library(raster)  # raster data functions
    -library(sf)      # vector data functions
    -library(mapview) # interactive mapping
    -library(ggplot2) # graphing
    -library(dplyr)   # data manipulation
    -library(tidyr)   # data manipulation
    -library(rms)     # additional regression tools
    -library(caret)   # additional modeling tools
    +
    library(aqp)     # soil data classes
    +library(raster)  # raster data functions
    +library(sf)      # vector data functions
    +library(mapview) # interactive mapping
    +library(ggplot2) # graphing
    +library(dplyr)   # data manipulation
    +library(tidyr)   # data manipulation
    +library(rms)     # additional regression tools
    +library(caret)   # additional modeling tools

    5.4.2 Read in data

    Hopefully like all good soil scientists and ecological site specialists you enter your field data into NASIS. Better yet hopefully someone else did it for you! Once data are captured in NASIS it is much easier to import the data into R, extract the pieces you need, manipulate it, model it, etc. If it’s not entered into NASIS, it may as well not exist. For this exercise we’ll load a cached dataset on GitHub.

    -
    # pedons <- fetchNASIS()
    -githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_pedons.RData")
    -load(githubURL)
    -
    # Examine the SoilProfileCollection object
    -View(pedons)
    +
    # pedons <- fetchNASIS()
    +githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_pedons.RData")
    +load(githubURL)
    +
    # Examine the SoilProfileCollection object
    +View(pedons)
    @@ -442,34 +443,34 @@

    5.5 Exploratory analysis (EDA)

    5.5.1 Data wrangling

    Generally before we begin modeling you should spend some time exploring the data. By examining a simple summary we can quickly see the breakdown of how many argillic horizons we have. Unfortunately, odds are good that all the argillic horizons haven’t been consistently populated in the diagnostic horizon table like they should be. Luckily for us, the desert argillic horizons always pop up in the taxonomic name, so we can use pattern matching to extract it. By doing this we gain an additional 11 pedons with argillic horizons and are able to label the missing values (i.e. NA). At a minimum for modeling purposes we probably need 10 pedons of the target we’re interested in and a total of 100 observations overall.

    -
    # Check consistency of argillic horizon population
    -
    -# extract the site table from the SoilProfileCollection object
    -s <- site(pedons) 
    -
    -
    -# tabulate column
    -count(s, argillic.horizon)
    +
    # Check consistency of argillic horizon population
    +
    +# extract the site table from the SoilProfileCollection object
    +s <- site(pedons) 
    +
    +
    +# tabulate column
    +count(s, argillic.horizon)
    ##   argillic.horizon   n
     ## 1            FALSE 790
     ## 2             TRUE 263
     ## 3               NA 167
    -
    # Extract argillic presence from the taxonomic subgroup
    -s <- mutate(s, argillic = grepl("arg", taxsubgrp))
    -
    -
    -# tabulate column
    -count(s, argillic)
    +
    # Extract argillic presence from the taxonomic subgroup
    +s <- mutate(s, argillic = grepl("arg", taxsubgrp))
    +
    +
    +# tabulate column
    +count(s, argillic)
    ##   argillic    n
     ## 1    FALSE 1022
     ## 2     TRUE  198

    Ideally, if the diagnostic horizon table had been populated consistently we could have used the upper depth to diagnostic feature to filter out argillic horizons that start below 50cm, which may not be representative of “good” argillic horizons and may therefore have gotten correlated to a Torripsamments anyway. Not only are unrepresentative sites confusing for scientists, they’re equally confusing for models. However, as we saw earlier, some pedons don’t appear to be fully populated, so we’ll stick with those pedons that have the argillic specified in their taxonomic subgroup name, since it gives us the biggest sample.

    -
    # extract the diagnostic table from the SoilProfileCollection object
    -diagnostic_hz(pedons) %>%
    -  # create a new variable
    -  mutate(argillic.horizon50 = featkind == "argillic horizon" & featdept < 50) %>%
    -  # tabulate column
    -  count(argillic.horizon50)
    +
    # extract the diagnostic table from the SoilProfileCollection object
    +diagnostic_hz(pedons) %>%
    +  # create a new variable
    +  mutate(argillic.horizon50 = featkind == "argillic horizon" & featdept < 50) %>%
    +  # tabulate column
    +  count(argillic.horizon50)
    ##   argillic.horizon50    n
     ## 1              FALSE 1935
     ## 2               TRUE  222
    @@ -478,16 +479,16 @@ 

    5.5.1 Data wrangling

    5.5.2 Geomorphic data

    Another obvious place to look is at the geomorphic data in the site table. This information is intended to help differentiate where our soil observations exist on the landscape. If populated consistently it could potentially be used in future disaggregation efforts, as demonstrated by Nauman and Thompson (2014).

    -
    # Landform vs argillic presence
    -s %>%
    -  # subset rows using logical expression
    -  filter(argillic == TRUE) %>%
    -  # cross-tabulate columns
    -  count(landform, argillic) %>%
    -  # subset rows by landform.string with > 3 observations
    -  filter(n > 3) %>%
    -  # sort data by decreasing n
    -  arrange(-n)
    +
    # Landform vs argillic presence
    +s %>%
    +  # subset rows using logical expression
    +  filter(argillic == TRUE) %>%
    +  # cross-tabulate columns
    +  count(landform, argillic) %>%
    +  # subset rows by landform.string with > 3 observations
    +  filter(n > 3) %>%
    +  # sort data by decreasing n
    +  arrange(-n)
    ##                      landform argillic  n
     ## 1                fan remnants     TRUE 72
     ## 2                  hillslopes     TRUE 28
    @@ -500,28 +501,28 @@ 

    5.5.2 Geomorphic data
    # generalize the landform.string
    -s <- mutate(
    -  s, 
    -  landform_generic = ifelse(grepl("fan|terrace|sheet|drainageway|wash", s$landform), "fan", "hill")
    -  )

    +
    # generalize the landform.string
    +s <- mutate(
    +  s, 
    +  landform_generic = ifelse(grepl("fan|terrace|sheet|drainageway|wash", s$landform), "fan", "hill")
    +  )

    Examining the above frequency table we can see that argillic horizons occur predominantly on fan remnants as was alluded too earlier. However, they also seem to occur frequently on other landforms - some of which are curious combinations of landforms or redundant terms.

    -
    # Hillslope position
    -
    -# # subset rows using logical expression
    -s_sub <- filter(s, landform_generic == "fan") 
    -
    -
    -# Hillslope
    -s_sub %>%
    -  # cross-tabulate columns
    -  count(hillslopeprof, argillic) %>%
    -  # group by variable and calculate percent
    -  group_by(argillic) %>%
    -  mutate(pct = round(n / sum(n) * 100)) %>%
    -  # reshape to wide format
    -  select(-n) %>%
    -  pivot_wider(names_from = argillic, values_from = pct)
    +
    # Hillslope position
    +
    +# # subset rows using logical expression
    +s_sub <- filter(s, landform_generic == "fan") 
    +
    +
    +# Hillslope
    +s_sub %>%
    +  # cross-tabulate columns
    +  count(hillslopeprof, argillic) %>%
    +  # group by variable and calculate percent
    +  group_by(argillic) %>%
    +  mutate(pct = round(n / sum(n) * 100)) %>%
    +  # reshape to wide format
    +  select(-n) %>%
    +  pivot_wider(names_from = argillic, values_from = pct)
    ## # A tibble: 6 × 3
     ##   hillslopeprof `FALSE` `TRUE`
     ##   <fct>           <dbl>  <dbl>
    @@ -531,18 +532,18 @@ 

    5.5.2 Geomorphic data
    # slope shape
    -s_sub %>%
    -  # create a new variable
    -  mutate(SS = paste(shapedown, shapeacross)) %>%
    -  # cross-tabulate columns
    -  count(SS, argillic) %>%
    -  # calculate percent by group
    -  group_by(argillic) %>%
    -  mutate(pct = round(n / sum(n) * 100)) %>%
    -  # reshape to wide format
    -  select(-n) %>%
    -  pivot_wider(names_from = argillic, values_from = pct)
    +
    # slope shape
    +s_sub %>%
    +  # create a new variable
    +  mutate(SS = paste(shapedown, shapeacross)) %>%
    +  # cross-tabulate columns
    +  count(SS, argillic) %>%
    +  # calculate percent by group
    +  group_by(argillic) %>%
    +  mutate(pct = round(n / sum(n) * 100)) %>%
    +  # reshape to wide format
    +  select(-n) %>%
    +  pivot_wider(names_from = argillic, values_from = pct)
    ## # A tibble: 11 × 3
     ##    SS              `FALSE` `TRUE`
     ##    <chr>             <dbl>  <dbl>
    @@ -558,17 +559,17 @@ 

    5.5.2 Geomorphic data
    s_long <- s %>%
    -  # subset rows using logical expression
    -  filter(landform_generic == "fan") %>%
    -  # extract columns
    -  select(argillic, bedrckdepth, slope, elev, surface_total_frags_pct) %>%
    -  # reshape to long format
    -  pivot_longer(cols = c(bedrckdepth, slope, elev, surface_total_frags_pct))
    -
    -
    -# examine results
    -head(s_long)
    +
    s_long <- s %>%
    +  # subset rows using logical expression
    +  filter(landform_generic == "fan") %>%
    +  # extract columns
    +  select(argillic, bedrckdepth, slope, elev, surface_total_frags_pct) %>%
    +  # reshape to long format
    +  pivot_longer(cols = c(bedrckdepth, slope, elev, surface_total_frags_pct))
    +
    +
    +# examine results
    +head(s_long)
    ## # A tibble: 6 × 3
     ##   argillic name                    value
     ##   <lgl>    <chr>                   <dbl>
    @@ -578,36 +579,36 @@ 

    5.5.2 Geomorphic data
    # plot results
    -ggplot(s_long, aes(x = argillic, y = value)) +
    -  geom_boxplot() +
    -  facet_wrap(~ name, scale = "free")
    +
    # plot results
    +ggplot(s_long, aes(x = argillic, y = value)) +
    +  geom_boxplot() +
    +  facet_wrap(~ name, scale = "free")

    Looking at boxplots of our numeric variables we can see none of them show much separation between the presense/absense of argillic horizons.

    5.5.3 Soil Scientist Bias

    Next we’ll look at soil scientist bias. The question being: Are some soil scientists more likely to describe argillic horizons than others? Due to the excess number of soil scientist that have worked on CA794, including detailees, we’ve filtered the names of soil scientist to include just the top 3 mappers and given priority to the most senior soil scientists when they occur together.

    -
    # Filter and sort most frequent soil scientists by seniority
    -s <- mutate(
    -  s,
    -  old = descname,
    -  descname2 = NA,
    -  descname2 = ifelse(grepl("Stephen", old), "Stephen", descname2), # least senior
    -  descname2 = ifelse(grepl("Paul",    old), "Paul",    descname2),
    -  descname2 = ifelse(grepl("Peter",   old), "Peter",   descname2)  # most senior
    -  )
    -
    s %>%
    -  # subset rows using logical expression
    -  filter(landform_generic == "fan") %>%
    -  # cross-tabulate columns
    -  count(descname2, argillic) %>%
    -  # calculate percent by group
    -  group_by(descname2) %>%
    -  mutate(pct = round(n / sum(n) * 100)) %>%
    -  # reshape the results into a table
    -  select(-n) %>%
    -  pivot_wider(names_from = argillic, values_from = pct)
    +
    # Filter and sort most frequent soil scientists by seniority
    +s <- mutate(
    +  s,
    +  old = descname,
    +  descname2 = NA,
    +  descname2 = ifelse(grepl("Stephen", old), "Stephen", descname2), # least senior
    +  descname2 = ifelse(grepl("Paul",    old), "Paul",    descname2),
    +  descname2 = ifelse(grepl("Peter",   old), "Peter",   descname2)  # most senior
    +  )
    +
    s %>%
    +  # subset rows using logical expression
    +  filter(landform_generic == "fan") %>%
    +  # cross-tabulate columns
    +  count(descname2, argillic) %>%
    +  # calculate percent by group
    +  group_by(descname2) %>%
    +  mutate(pct = round(n / sum(n) * 100)) %>%
    +  # reshape the results into a table
    +  select(-n) %>%
    +  pivot_wider(names_from = argillic, values_from = pct)
    ## # A tibble: 4 × 3
     ## # Groups:   descname2 [4]
     ##   descname2 `FALSE` `TRUE`
    @@ -621,27 +622,27 @@ 

    5.5.3 Soil Scientist Bias

    5.5.4 Plot coordinates

    Where do our points plot? To start we need to convert them to a spatial object first. Then we can create an interactive we map using mapview. Also, if we wish we can also export the locations as a Shapefile.

    -
    # subset rows with only complete X & Y coordinates 
    -s_sub <- filter(s, complete.cases(x_std, y_std))
    -
    -
    -# convert s_sub data.frame to a spatial object
    -s_sf <- st_as_sf(s_sub,
    -                 # define coordinates
    -                 coords = c("x_std", "y_std"),
    -                 # define coordinate reference system using ESPG code
    -                 crs = 4326
    -                 ) %>%
    -  # reproject to equal area coordinate reference system using ESPG code
    -  st_transform(crs = 5070)
    -
    -
    -# Download soil survey area boundaries
    -ca794 <- soilDB::fetchSDA_spatial("CA794", geom.src = "sapolygon") %>%
    -  # convert to spatial object
    -  st_as_sf() %>%
    -  # reproject to equal area coordinate reference system using ESPG code
    -  st_transform(crs = 5070)
    +
    # subset rows with only complete X & Y coordinates 
    +s_sub <- filter(s, complete.cases(x_std, y_std))
    +
    +
    +# convert s_sub data.frame to a spatial object
    +s_sf <- st_as_sf(s_sub,
    +                 # define coordinates
    +                 coords = c("x_std", "y_std"),
    +                 # define coordinate reference system using ESPG code
    +                 crs = 4326
    +                 ) %>%
    +  # reproject to equal area coordinate reference system using ESPG code
    +  st_transform(crs = 5070)
    +
    +
    +# Download soil survey area boundaries
    +ca794 <- soilDB::fetchSDA_spatial("CA794", geom.src = "sapolygon") %>%
    +  # convert to spatial object
    +  st_as_sf() %>%
    +  # reproject to equal area coordinate reference system using ESPG code
    +  st_transform(crs = 5070)
    
     # Plot interactive map
     mapview(ca794, alpha.regions = 0, lwd = 2) +
    @@ -658,132 +659,132 @@ 

    5.6 Exercise 1: View the data

    5.6.1 Extracting spatial data

    Prior to any spatial analysis or modeling, you will need to develop a suite of geodata files that can be intersected with your field data locations. This is, in and of itself a difficult task, and should be facilitated by your Regional GIS Specialist. Typically, these geodata files would primarily consist of derivatives from a DEM or satellite imagery. Prior to any prediction it is also necessary to ensure the geodata files have the same projection, extent, and cell size. Once we have the necessary files we can construct a list in R of the file names and paths, read the geodata into R, and then extract the geodata values where they intersect with field data.

    -
    # load raster stack from GitHub
    -githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_rs.rds")
    -geodata_r <- readRDS(githubURL)
    -
    -
    -# Extract the geodata and add to a data frame
    -data <- raster::extract(geodata_r, as(s_sf, "Spatial"), sp = TRUE)@data
    -
    -# Modify some of the geodata variables
    -data <- mutate(
    -  data, 
    -  cluster  = factor(cluster),
    -  twi_sc   = abs(twi - 13.8), # 13.8 = twi median
    -  gsi      = (ls_3 - ls_1) / (ls_3 + ls_2 + ls_1),
    -  ndvi     = (ls_4 - ls_3) / (ls_4 + ls_3),
    -  )
    +
    # load raster stack from GitHub
    +githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_rs.rds")
    +geodata_r <- readRDS(githubURL)
    +
    +
    +# Extract the geodata and add to a data frame
    +data <- raster::extract(geodata_r, as(s_sf, "Spatial"), sp = TRUE)@data
    +
    +# Modify some of the geodata variables
    +data <- mutate(
    +  data, 
    +  cluster  = factor(cluster),
    +  twi_sc   = abs(twi - 13.8), # 13.8 = twi median
    +  gsi      = (ls_3 - ls_1) / (ls_3 + ls_2 + ls_1),
    +  ndvi     = (ls_4 - ls_3) / (ls_4 + ls_3),
    +  )

    5.6.2 Examine spatial data

    With our spatial data in hand, we can now see whether any of the variables will help us separate the presence/absence of argillic horizons. Because we’re dealing with a classification problem, we’ll compare the numeric variables using boxplots. What we’re looking for are variables with the least amount of overlap in their distribution (i.e. the greatest separation in their median values).

    -
    URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata")
    -load(URL)
    -
    -train <- data
    -
    -# Select argillic horizons with "arg" in the subgroup name and on fans
    -# Argillic horizons that occur on hills and mountains more than likely form by different process, and therefore would require a different model.train$argillic 
    -train <- mutate(
    -  train, 
    -  argillic  = factor(ifelse(grepl("arg", taxsubgrp) & train$mrvbf > 0.15, "yes", "no")),
    -  ch_log  = log(ch + 1),
    -  z2str_log = log(z2str + 1),
    -  ch    = NULL,
    -  z2str = NULL
    -  )
    -
    -train <- select(train, c(argillic, z:z2str_log))
    -
    -data_l <- train %>%
    -  select(-cluster, -geo) %>%
    -  pivot_longer(col = - argillic) %>%
    -  filter(!is.na(value))
    -
    -ggplot(data_l, aes(x = argillic, y = value)) +
    -  geom_boxplot() +
    -  facet_wrap(~ name, scales = "free")
    +
    URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata")
    +load(URL)
    +
    +train <- data
    +
    +# Select argillic horizons with "arg" in the subgroup name and on fans
    +# Argillic horizons that occur on hills and mountains more than likely form by different process, and therefore would require a different model.train$argillic 
    +train <- mutate(
    +  train, 
    +  argillic  = factor(ifelse(grepl("arg", taxsubgrp) & train$mrvbf > 0.15, "yes", "no")),
    +  ch_log  = log(ch + 1),
    +  z2str_log = log(z2str + 1),
    +  ch    = NULL,
    +  z2str = NULL
    +  )
    +
    +train <- select(train, c(argillic, z:z2str_log))
    +
    +data_l <- train %>%
    +  select(-cluster, -geo) %>%
    +  pivot_longer(col = - argillic) %>%
    +  filter(!is.na(value))
    +
    +ggplot(data_l, aes(x = argillic, y = value)) +
    +  geom_boxplot() +
    +  facet_wrap(~ name, scales = "free")

    5.7 Constructing the model

    R has several functions for fitting linear models. The most common is arguably the glm() function from the stats R package, which is loaded by default. The glm() function is also extended thru the use of several additional packages such as the car and caret R packages. Another noteworthy R package for logistic regrssion is rms, which offers the lrm() function. The rms R package (Harrell 2015) offers an ‘almost’ comprehesive alternative to glm() and it’s accessory function. It is difficult to objectively functions say which approach is better. Therefore methods both methods will be demonstrated. Look for comments (i.e. #) below referring to rms, stats, caret or visreg.

    -
    # stats
    -
    -fit_glm <- glm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp +tc_1 + tc_2 + tc_3 + k + th + u + cluster, data = train, family = binomial)
    -
    -
    -# rms
    -
    -library(rms)
    -
    -dd <- datadist(train)
    -options(datadist = "dd")
    -
    -fit_lrm <- lrm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp + tc_1 + tc_2 + tc_3 + k + th + u, data = train, x = TRUE, y = TRUE)
    +
    # stats
    +
    +fit_glm <- glm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp +tc_1 + tc_2 + tc_3 + k + th + u + cluster, data = train, family = binomial)
    +
    +
    +# rms
    +
    +library(rms)
    +
    +dd <- datadist(train)
    +options(datadist = "dd")
    +
    +fit_lrm <- lrm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp + tc_1 + tc_2 + tc_3 + k + th + u, data = train, x = TRUE, y = TRUE)

    5.7.1 Diagnostic

    5.7.1.1 Residual plots

    One unfortunate side effect of side effect of logistic regression is that the default residual plots are not interpretable. However the partial residual plots can be useful for identifying outliers and nonlinear trends.

    -
    par(mfcol = c(2, 2))
    -
    -plot(fit_glm)
    +
    par(mfcol = c(2, 2))
    +
    +plot(fit_glm)

    -
    termplot(fit_glm, partial.resid = TRUE, col.res = "black", pch = 16)
    +
    termplot(fit_glm, partial.resid = TRUE, col.res = "black", pch = 16)

    5.7.1.2 Multicolinearity

    As we mentioned earlier multicolinearity should be avoided. To assess a model for multicolinearity we can compute the variance inflation factor (VIF). Its square root indicates the amount of increase in the predictor coefficients standard error. A value greater than 3 indicates a doubling the standard error. Rules of thumb vary, but a square root of vif greater than 2 or 3 indicates an unacceptable value.

    -
    # vif() function from the rms or car packages
    -sqrt(vif(fit_lrm))
    -
    -# or 
    -
    -sqrt(vif(fit_lrm)) > 3
    +
    # vif() function from the rms or car packages
    +sqrt(vif(fit_lrm))
    +
    +# or 
    +
    +sqrt(vif(fit_lrm)) > 3

    5.7.2 Variable Selection & model validation

    Modeling is an iterative process that cycles between fitting and evaluating alternative models. Compared to tree and forest models, linear and generalized models typically require more scrunity from the user. Automated model selection procedures are available, but should not be taken at face value because they may result in complex and unstable models. This is in part due to correlation amongst the predictive variables that can confuse the model. Also, the order in which the variables are included or excluded from the model effects the significance of the other variables, and thus several weak predictors might mask the effect of one strong predictor. Regardless of the approach used, variable selection is probably the most controversial aspect of linear modeling.

    Both the rms and caret packages offer methods for variable selection and cross-validation. In this instance the rms approach is a bit more convinent and faster, with the one line call to validate().

    -
    set.seed(42)
    -
    -# rms
    -## stepwise selection and validation
    -validate(fit_lrm, bw = TRUE)
    +
    set.seed(42)
    +
    +# rms
    +## stepwise selection and validation
    +validate(fit_lrm, bw = TRUE)

    The results for validate() above show which variables were retained and deleted. Below we can see a dot matrix of which variables were retained in during the 40 iterations of the bootstrapping. In addition, below we can see the difference between the training and test accuracy and error metrics. Remember that it is the test accuracy we should pay attention too.

    5.7.3 Final model & accuracy

    Once we’ve settled on a final model we can fit it and validate it. The validate() function can also be used for cross-validation and will get multiple probability-based accuracy metrics, including: \(R^2\), the Brier score (B), Tjur’s D (D), and many others.

    -
    final_lrm <- lrm(argillic ~ slp + twi_sc + tc_1 + tc_2 + precipsum, data = train, x = TRUE, y = TRUE)
    -
    -validate(final_lrm, method = "crossvalidation", B = 10)
    -
    ##           index.orig training    test optimism index.corrected  n
    -## Dxy           0.7068   0.7075  0.6958   0.0117          0.6951 10
    -## R2            0.3202   0.3211  0.3150   0.0061          0.3141 10
    -## Intercept     0.0000   0.0000 -0.0636   0.0636         -0.0636 10
    -## Slope         1.0000   1.0000  1.0183  -0.0183          1.0183 10
    -## Emax          0.0000   0.0000  0.0169   0.0169          0.0169 10
    -## D             0.1684   0.1688  0.1572   0.0115          0.1569 10
    -## U            -0.0017  -0.0019  0.0017  -0.0037          0.0019 10
    -## Q             0.1701   0.1707  0.1555   0.0152          0.1549 10
    -## B             0.0755   0.0754  0.0772  -0.0018          0.0773 10
    -## g             3.7232   3.7299  3.7470  -0.0171          3.7403 10
    -## gp            0.1311   0.1311  0.1279   0.0032          0.1278 10
    -
    # Compare the metrics from rms::validate() to aqp::brierScore() and modEvA::RsqGLM()
    -pred <- predict(final_lrm, train, type = "fitted")
    -test <- data.frame(pred, obs = train$argillic == "yes")
    -
    -# Brier score
    -brierScore(test, classLabels = "pred", actual = "obs")
    +
    final_lrm <- lrm(argillic ~ slp + twi_sc + tc_1 + tc_2 + precipsum, data = train, x = TRUE, y = TRUE)
    +
    +validate(final_lrm, method = "crossvalidation", B = 10)
    +
    ##           index.orig training   test optimism index.corrected  n
    +## Dxy           0.7068   0.7070 0.6954   0.0116          0.6952 10
    +## R2            0.3202   0.3208 0.3238  -0.0031          0.3233 10
    +## Intercept     0.0000   0.0000 0.0498  -0.0498          0.0498 10
    +## Slope         1.0000   1.0000 1.0942  -0.0942          1.0942 10
    +## Emax          0.0000   0.0000 0.0277   0.0277          0.0277 10
    +## D             0.1684   0.1686 0.1646   0.0040          0.1644 10
    +## U            -0.0017  -0.0019 0.0041  -0.0060          0.0043 10
    +## Q             0.1701   0.1705 0.1605   0.0101          0.1601 10
    +## B             0.0755   0.0754 0.0771  -0.0017          0.0772 10
    +## g             3.7232   3.7355 4.0677  -0.3322          4.0554 10
    +## gp            0.1311   0.1311 0.1300   0.0011          0.1300 10
    +
    # Compare the metrics from rms::validate() to aqp::brierScore() and modEvA::RsqGLM()
    +pred <- predict(final_lrm, train, type = "fitted")
    +test <- data.frame(pred, obs = train$argillic == "yes")
    +
    +# Brier score
    +brierScore(test, classLabels = "pred", actual = "obs")
    ## [1] 0.07219881
    -
    # Nagelkerke D2 & Tjur's D
    -unlist(modEvA::RsqGLM(pred = test$pred, obs = test$obs, plot = FALSE))
    +
    # Nagelkerke D2 & Tjur's D
    +unlist(modEvA::RsqGLM(pred = test$pred, obs = test$obs, plot = FALSE))
    ##   CoxSnell Nagelkerke   McFadden       Tjur  sqPearson 
     ##  0.1557253  0.3201934  0.2540906  0.1842274  0.1879082

    Because we’re dealing with a classification problem, we have to consider both errors of commission (Type I) and omission (Type II), or their corresponding accuracies of sensitivity and positive predicted value respectively. Before we can assess the error, however, we need to select a probability threshold.

    @@ -791,18 +792,18 @@

    5.7.3 Final model & accuracy<
  15. Sensitivity and specificity examine how well the ground truth or reference data compares to the predictions.
  16. Positive and negative predicted values examine the inverse concept of how well the predictions match the reference data as a function of their prevalence (see help(confusionMatrix).
  17. -
    # examine possible thresholds
    -ggplot(test, aes(x = pred, fill = obs)) +
    -  geom_density(alpha = 0.5) +
    -  geom_vline(aes(xintercept = 0.5), lty = "dashed") +
    -  xlab("probability") +
    -  scale_x_continuous(breaks = seq(0, 1, 0.2))
    +
    # examine possible thresholds
    +ggplot(test, aes(x = pred, fill = obs)) +
    +  geom_density(alpha = 0.5) +
    +  geom_vline(aes(xintercept = 0.5), lty = "dashed") +
    +  xlab("probability") +
    +  scale_x_continuous(breaks = seq(0, 1, 0.2))

    -
    test$predictedClass <- ifelse(test$pred > 0.25, TRUE, FALSE)
    -
    -# Confusion Matrix
    -cm <- table(predicted = test$predictedClass, observed = test$obs)
    -confusionMatrix(cm, positive = "TRUE")
    +
    test$predictedClass <- ifelse(test$pred > 0.25, TRUE, FALSE)
    +
    +# Confusion Matrix
    +cm <- table(predicted = test$predictedClass, observed = test$obs)
    +confusionMatrix(cm, positive = "TRUE")
    ## Confusion Matrix and Statistics
     ## 
     ##          observed
    @@ -830,19 +831,19 @@ 

    5.7.3 Final model & accuracy< ## ## 'Positive' Class : TRUE ##

    -
    # Spatially variable accuracy
    -test$cluster <- train$cluster
    -temp <- test %>%
    -  group_by(cluster) %>%
    -  summarise(
    -    TP       = sum(predictedClass == TRUE  & obs, na.rm = TRUE),
    -    FN       = sum(predictedClass == FALSE & obs, na.rm = TRUE),
    -    sensitivity = TP / (TP + FN),
    -    n  = length(obs)
    -    )
    -
    -ggplot(temp, aes(x = cluster, y = sensitivity, size = n)) +
    -  geom_point()
    +
    # Spatially variable accuracy
    +test$cluster <- train$cluster
    +temp <- test %>%
    +  group_by(cluster) %>%
    +  summarise(
    +    TP       = sum(predictedClass == TRUE  & obs, na.rm = TRUE),
    +    FN       = sum(predictedClass == FALSE & obs, na.rm = TRUE),
    +    sensitivity = TP / (TP + FN),
    +    n  = length(obs)
    +    )
    +
    +ggplot(temp, aes(x = cluster, y = sensitivity, size = n)) +
    +  geom_point()

    • Discuss the variability of the predictions across the clusters, perhaps different models need to be constructed in each cluster, some clusters appear to be dominated by specific soil series, these data aren’t clean enough (nor are the series concepts usually) to model series separately, however, we could use the clusters as an additional model to attempt to separate the series. Do the hyperthermic clusters perform differently.
    • @@ -850,8 +851,8 @@

      5.7.3 Final model & accuracy<

    5.7.4 Model effects

    -
    # Model accuracy, and slopes (e.g. coefficents)
    -final_lrm
    +
    # Model accuracy, and slopes (e.g. coefficents)
    +final_lrm
    ## Frequencies of Missing Values Due to Each Variable
     ##  argillic       slp    twi_sc      tc_1      tc_2 precipsum 
     ##         8        52        53        52        52        52 
    @@ -876,8 +877,8 @@ 

    5.7.4 Model effects
    # Chi-square
    -anova(final_lrm)

    +
    # Chi-square
    +anova(final_lrm)
    ##                 Wald Statistics          Response: argillic 
     ## 
     ##  Factor     Chi-Square d.f. P     
    @@ -887,8 +888,8 @@ 

    5.7.4 Model effects
    # Model Effects
    -summary(final_lrm)

    +
    # Model Effects
    +summary(final_lrm)
    ##              Effects              Response : argillic 
     ## 
     ##  Factor      Low      High     Diff.   Effect    S.E.    Lower 0.95 Upper 0.95
    @@ -902,11 +903,12 @@ 

    5.7.4 Model effects
    plot(summary(final_lrm))
    -

    -
    # Plot Effects
    -ggplot(Predict(final_lrm, fun = plogis))
    -

    +
    plot(summary(final_lrm))
    +
    +
    +# Plot Effects
    +ggplot(Predict(final_lrm, fun = plogis))
    +

    • View the results in ArcGIS and examine the accuracy at individual points
    • Discuss the effects of data quality, including both NASIS and GIS
    • @@ -916,35 +918,35 @@

      5.7.4 Model effects

      5.8 Generate spatial predictions

      -
      # Custom function to return the predictions and their standard errors
      -library(raster)
      -
      -# wrapper function, to help with prediction at each grid cell
      -predfun <- function(model, data) {
      -  
      -  # predict presence of argillic horizon (outcome = TRUE)
      -  # result is vector of probabilities
      -  prob <- predict(model, data, type = "fitted")
      -  
      -  # compute Shannon entropy from both (FALSE | TRUE) probabilities
      -  H <- apply(cbind(prob, 1 - prob), 1, shannonEntropy)
      -  
      -  # combine Pr(Argillic == TRUE) and Shannon entropy
      -  res <- cbind(prob, H)
      -  
      -  # return to calling function
      -  return(res)
      -  }
      -  
      -# Generate spatial predictions
      -r <- predict(geodata_r, final_lrm, fun = predfun, index = 1:2, progress = "text")
      -
      library(raster)
      -
      -# argillic probability
      -plot(r[[1]], col = viridis::viridis(10))
      +
      # Custom function to return the predictions and their standard errors
      +library(raster)
      +
      +# wrapper function, to help with prediction at each grid cell
      +predfun <- function(model, data) {
      +  
      +  # predict presence of argillic horizon (outcome = TRUE)
      +  # result is vector of probabilities
      +  prob <- predict(model, data, type = "fitted")
      +  
      +  # compute Shannon entropy from both (FALSE | TRUE) probabilities
      +  H <- apply(cbind(prob, 1 - prob), 1, shannonEntropy)
      +  
      +  # combine Pr(Argillic == TRUE) and Shannon entropy
      +  res <- cbind(prob, H)
      +  
      +  # return to calling function
      +  return(res)
      +  }
      +  
      +# Generate spatial predictions
      +r <- predict(geodata_r, final_lrm, fun = predfun, index = 1:2, progress = "text")
      +
      library(raster)
      +
      +# argillic probability
      +plot(r[[1]], col = viridis::viridis(10))

      -
      # argillic Shannon Entropy
      -plot(r[[2]], col = viridis::viridis(10))
      +
      # argillic Shannon Entropy
      +plot(r[[2]], col = viridis::viridis(10))

      @@ -952,17 +954,17 @@

      5.9 Exercise
    • Construct a dataset of shallow soils as shown below.
    • -
      URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata")
      -load(URL)
      -
      -train2 <- aqp::allocate(pedons, to = "ST Diagnostic Features")
      -train2 <- train2 %>%
      -  mutate(shallow = grepl("contact", train2$featkind) & train2$featdept) %>%
      -  arrange(peiid, -shallow, featdept) %>%
      -  filter(shallow == TRUE & ! duplicated(peiid)) %>%
      -  right_join(data, by = "peiid") %>%
      -  mutate(shallow = ifelse(is.na(shallow), FALSE, shallow)) %>%
      -  select(z:mast, pc_1:u, ndvi:gsi, shallow)
      +
      URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata")
      +load(URL)
      +
      +train2 <- aqp::allocate(pedons, to = "ST Diagnostic Features")
      +train2 <- train2 %>%
      +  mutate(shallow = grepl("contact", train2$featkind) & train2$featdept) %>%
      +  arrange(peiid, -shallow, featdept) %>%
      +  filter(shallow == TRUE & ! duplicated(peiid)) %>%
      +  right_join(data, by = "peiid") %>%
      +  mutate(shallow = ifelse(is.na(shallow), FALSE, shallow)) %>%
      +  select(z:mast, pc_1:u, ndvi:gsi, shallow)
      1. Fit a GLM

      2. Perform a variable selection

        diff --git a/book2/index.html b/book2/index.html index d1901b3a..fa46e5d6 100644 --- a/book2/index.html +++ b/book2/index.html @@ -23,7 +23,7 @@ - + @@ -376,7 +376,7 @@

        Pre-course Assignment

        diff --git a/book2/intro.html b/book2/intro.html index 0bfa3594..695a837c 100644 --- a/book2/intro.html +++ b/book2/intro.html @@ -23,7 +23,7 @@ - + diff --git a/book2/linear-regression.html b/book2/linear-regression.html index f0602cb9..5f3c9c75 100644 --- a/book2/linear-regression.html +++ b/book2/linear-regression.html @@ -23,7 +23,7 @@ - + @@ -462,7 +462,8 @@

        4.3.2 Aggregate Time Series filter(name == "JVOHV2-50") %>% ggplot(aes(x = day, y = sensor_value)) + geom_line()

    -
    ## Warning: Removed 649 rows containing missing values (`geom_line()`).
    +
    ## Warning: Removed 649 rows containing missing values or values outside the scale range
    +## (`geom_line()`).

    # Aggregate by Year, Month, and Julian day (i.e. 1-365, 366 for leap years)
     # compute number of days per site
    @@ -523,40 +524,38 @@ 

    4.4.2 Extracting Spatial DataPrior to any spatial analysis or modeling, you will need to develop a suite of geodata files that can be intersected with your field data locations. This is, in and of itself a difficult task and should be facilitated by your Regional GIS Specialist. The geodata files typically used would consist of derivatives from a DEM or satellite imagery, and a ‘good’ geology map. Prior to any prediction it is also necessary to ensure the geodata files have the same projection, extent, and cell size. Once we have the necessary files we can construct a list in R of the file names and paths, read the geodata into R, and then extract the geodata values where they intersect with field data.

    As you can see below their are numerous variables we could inspect.

    library(raster)
    -
    ## Warning: package 'raster' was built under R version 4.3.2
    ## Loading required package: sp
    -
    ## Warning: package 'sp' was built under R version 4.3.2
    ## 
     ## Attaching package: 'raster'
    ## The following object is masked from 'package:dplyr':
     ## 
     ##     select
    -
    library(sf)
    -
    -# load raster stack from GitHub
    -githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/mast_mojave_rs.rds")
    -geodata_r <- readRDS(githubURL)
    -
    -
    -# Extract the geodata and add to a data frame
    -mast_sf <- st_transform(mast_sf, crs = 5070)
    -data <- raster::extract(geodata_r, st_coordinates(mast_sf))
    -data <- cbind(st_drop_geometry(mast_sf), data)
    -
    -# convert aspect
    -data$northness <- abs(180 - data$aspect)
    -
    -
    -# random sample
    -vars <- c("elev", "temp", "precip", "solar", "tc_1", "twi")
    -idx <- which(names(geodata_r) %in% vars)
    -geodata_s <- sampleRegular(geodata_r[[idx]], size = 1000)
    +
    library(sf)
    +
    +# load raster stack from GitHub
    +githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/mast_mojave_rs.rds")
    +geodata_r <- readRDS(githubURL)
    +
    +
    +# Extract the geodata and add to a data frame
    +mast_sf <- st_transform(mast_sf, crs = 5070)
    +data <- raster::extract(geodata_r, st_coordinates(mast_sf))
    +data <- cbind(st_drop_geometry(mast_sf), data)
    +
    +# convert aspect
    +data$northness <- abs(180 - data$aspect)
    +
    +
    +# random sample
    +vars <- c("elev", "temp", "precip", "solar", "tc_1", "twi")
    +idx <- which(names(geodata_r) %in% vars)
    +geodata_s <- sampleRegular(geodata_r[[idx]], size = 1000)

    4.5 Exploratory Data Analysis (EDA)

    Generally before we begin modeling it is good to explore the data. By examining a simple summary we can quickly see the breakdown of our data. It is important to look out for missing or improbable values. Probably the easiest way to identify peculiarities in the data is to plot it.

    -
    summary(data)
    +
    summary(data)
    ##        siteid        mast          numDays          elev            slope      
     ##  Cheme01  : 1   Min.   : 3.10   Min.   : 363   Min.   :   0.0   Min.   : 0.00  
     ##  Clark01  : 1   1st Qu.:18.50   1st Qu.:1831   1st Qu.: 699.2   1st Qu.: 2.00  
    @@ -590,42 +589,43 @@ 

    4.5 Exploratory Data Analysis (ED ## Max. :31.00 Max. :174.00 ##

    You may recall from discussion of EDA that QQ plots are a visual way to inspect the normality of a variable. If the variable is normally distributed, the points (e.g. soil observations) should line up along the straight line.

    -
    # QQ plot
    -
    -ggplot(data, aes(sample = mast)) +
    -  geom_qq() +
    -  geom_qq_line()
    +
    # QQ plot
    +
    +ggplot(data, aes(sample = mast)) +
    +  geom_qq() +
    +  geom_qq_line()

    By examining the correlations between some of the predictors we can also determine whether they are collinear (e.g. > 0.6). This is common for similar variables such as Landsat bands, terrain derivatives, and climatic variables. Variables that are colinear are redundant and contain no additional information. In addition, collinearity will make it difficult to estimate our regression coefficients.

    -
    vars <- c("mast", "elev", "temp", "precip", "tc_2", "tc_1", "tc_3")
    -GGally::ggpairs(data[vars])
    +
    vars <- c("mast", "elev", "temp", "precip", "tc_2", "tc_1", "tc_3")
    +GGally::ggpairs(data[vars])
    ## Registered S3 method overwritten by 'GGally':
     ##   method from   
     ##   +.gg   ggplot2

    -
    vars <- c("mast", "slope", "twi", "northness", "solar", "solarcv")
    -GGally::ggpairs(data[vars])
    +
    vars <- c("mast", "slope", "twi", "northness", "solar", "solarcv")
    +GGally::ggpairs(data[vars])

    The correlation matrices and scatter plots above show that that MAST has moderate correlations with some of the variables, particularly the elevation and the climatic variables.

    Examining the density plots on the diagonal axis of the scatter plots we can also see that some variables are skewed.

    4.5.1 Compare Samples vs Population

    Since our data was not randomly sampled, we had better check the distribution of our samples vs the population. We can accomplish this by overlaying the sample distribution of predictor variables vs a large random sample.

    -
    geodata_df <- as.data.frame(geodata_s)
    -
    -geodata_df <- rbind(
    -  data.frame(source = "sample",     data[names(geodata_df)]),
    -  data.frame(source = "population", geodata_df)
    -)
    -
    -geodata_l <- pivot_longer(geodata_df,
    -                          cols = -source)
    -
    -ggplot(geodata_l, aes(x = value, fill = source)) +
    -  geom_density(alpha = 0.5) +
    -  facet_wrap(~ name, scales = "free") +
    -  ggtitle("Evaluation of Sample Representativeness")
    -
    ## Warning: Removed 1266 rows containing non-finite values (`stat_density()`).
    +
    geodata_df <- as.data.frame(geodata_s)
    +
    +geodata_df <- rbind(
    +  data.frame(source = "sample",     data[names(geodata_df)]),
    +  data.frame(source = "population", geodata_df)
    +)
    +
    +geodata_l <- pivot_longer(geodata_df,
    +                          cols = -source)
    +
    +ggplot(geodata_l, aes(x = value, fill = source)) +
    +  geom_density(alpha = 0.5) +
    +  facet_wrap(~ name, scales = "free") +
    +  ggtitle("Evaluation of Sample Representativeness")
    +
    ## Warning: Removed 1266 rows containing non-finite outside the scale range
    +## (`stat_density()`).

    The overlap between our sample and the population appear satisfactory.

    @@ -633,64 +633,64 @@

    4.5.1 Compare Samples vs Populati

    4.6 Linear modeling

    R has several functions for fitting linear models. The most common is arguably the lm() function from the stats R package, which is loaded by default. The lm() function is also extended through the use of several additional packages such as the car and caret R packages. Another noteworthy R package for linear modeling is rms, which offers the ols() function for linear modeling. The rms R package (Harrell 2015) offers an ‘almost’ comprehensive alternative to `lm()’ and it’s accessory function. Each function offers useful features, therefore for the we will demonstrate elements of both. Look for comments (i.e. #) below referring to rms or stats.

    -
    # stats
    -fit_lm <- lm(
    -  formula = mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, 
    -  data = data, 
    -  weights = data$numDays
    -  )
    -
    -
    -# rms R package
    -
    -library(rms)
    -
    -dd <- datadist(data)
    -options(datadist = "dd")
    -
    -fit_ols <- ols(mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, data = data, x = TRUE, y = TRUE, weights = data$numDays)
    +
    # stats
    +fit_lm <- lm(
    +  formula = mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, 
    +  data = data, 
    +  weights = data$numDays
    +  )
    +
    +
    +# rms R package
    +
    +library(rms)
    +
    +dd <- datadist(data)
    +options(datadist = "dd")
    +
    +fit_ols <- ols(mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, data = data, x = TRUE, y = TRUE, weights = data$numDays)

    4.6.1 Diagnostics

    4.6.1.1 Residual plots

    Once we have a model we need to assess residuals for linearity, normality, and homoscedastivity (or constant variance). Oddly this is one area were the rms R package does not offer convenient functions for plotting residuals, therefore we’ll simply access the results of lm().

    -
    par(mfcol = c(2, 2))
    -
    # residual
    -plot(fit_lm)
    +
    par(mfcol = c(2, 2))
    +
    # residual
    +plot(fit_lm)

    -
    # partial residuals
    -termplot(fit_lm, partial.resid = TRUE, col.res = "black", pch = 16)
    +
    # partial residuals
    +termplot(fit_lm, partial.resid = TRUE, col.res = "black", pch = 16)

    Remember the residuals are simply just the observed values minus the predicted values, which are easy enough to calculate. Alternatively we can simply extract them from the fitted model object.

    -
    pred <- predict(fit_lm, data)
    -res  <- data$mast - pred
    -head(res)
    +
    pred <- predict(fit_lm, data)
    +res  <- data$mast - pred
    +head(res)
    ##          1          2          3          4          5          6 
     ## -1.3182498 -0.4111067  0.1231537  1.4750626 -0.1719747 -0.1036808
    -
    # or 
    -
    -head(residuals(fit_lm))
    +
    # or 
    +
    +head(residuals(fit_lm))
    ##          1          2          3          4          5          6 
     ## -1.3182498 -0.4111067  0.1231537  1.4750626 -0.1719747 -0.1036808
    -
    # Manually plot the residuals
    -res <- data.frame(res, pred)
    -
    -ggplot(res, aes(x = pred, y = res)) + 
    -  geom_point() + 
    -  geom_hline(yintercept = 0)
    +
    # Manually plot the residuals
    +res <- data.frame(res, pred)
    +
    +ggplot(res, aes(x = pred, y = res)) + 
    +  geom_point() + 
    +  geom_hline(yintercept = 0)

    4.6.1.2 Multicolinearity

    As we mentioned earlier multicolinearity should be avoided. To assess a model for multicolinearity we can compute the variance inflation factor (VIF). Its square root indicates the amount of increase in the predictor coefficients standard error. A value greater than 3 indicates a doubling the standard error. Rules of thumb vary, but a square root of vif greater than 2 or 3 indicates an unacceptable value (Faraway 2004).

    -
    # vif() function from the rms or car packages
    -sqrt(vif(fit_ols))
    +
    # vif() function from the rms or car packages
    +sqrt(vif(fit_ols))
    ##     elev   aspect      twi    solar  solarcv     tc_1     tc_2     tc_3 
     ## 8.851106 1.103580 2.056235 6.068831 5.787921 4.114079 3.009392 3.311669 
     ##   precip     temp 
     ## 2.274489 7.860236
    -
    # or 
    -
    -sqrt(vif(fit_ols)) > 3
    +
    # or 
    +
    +sqrt(vif(fit_ols)) > 3
    ##    elev  aspect     twi   solar solarcv    tc_1    tc_2    tc_3  precip    temp 
     ##    TRUE   FALSE   FALSE    TRUE    TRUE    TRUE    TRUE    TRUE   FALSE    TRUE

    The values above indicate we have several colinear variables in the model, which you might have noticed already from the scatter plot matrix.

    @@ -706,13 +706,13 @@

    4.6.2 Variable selection/reductio
  18. Randomized wrapper (e.g. Boruta)(Boruta::Boruta())
  19. Both the rms and caret packages offer methods for variable selection and cross-validation. In this instance the rms approach is a bit more convenient, with the one line call to validate().

    -
    # Set seed for reproducibility
    -set.seed(42)
    -
    -
    -# rms
    -## stepwise selection
    -validate(fit_ols, bw = TRUE)
    +
    # Set seed for reproducibility
    +set.seed(42)
    +
    +
    +# rms
    +## stepwise selection
    +validate(fit_ols, bw = TRUE)
    ## 
     ##      Backwards Step-down - Original Model
     ## 
    @@ -796,9 +796,9 @@ 

    4.6.2 Variable selection/reductio

    4.6.3 Final model & accuracy assessment

    Once we have a model we are ‘happy’ with we can fit the final model, and call validate() again which gives performance metrics such as R$2 and the mean square error (MSE). If we want the root mean square error (RMSE), which is in the original units of our measurements we can take the square root of MSE using sqrt().

    -
    # rms
    -final_ols <- ols(mast ~ elev + solarcv + tc_1 + tc_2, data = data, weights = data$numDays, x = TRUE, y = TRUE)
    -final_ols
    +
    # rms
    +final_ols <- ols(mast ~ elev + solarcv + tc_1 + tc_2, data = data, weights = data$numDays, x = TRUE, y = TRUE)
    +final_ols
    ## Linear Regression Model
     ## 
     ## ols(formula = mast ~ elev + solarcv + tc_1 + tc_2, data = data, 
    @@ -822,40 +822,40 @@ 

    4.6.3 Final model & accuracy ## solarcv -0.2421 0.0526 -4.60 <0.0001 ## tc_1 -0.0535 0.0113 -4.75 <0.0001 ## tc_2 -0.1469 0.0362 -4.06 0.0001

    -
    set.seed(42)
    -validate(final_ols, method = "crossvalidation", B = 10)
    +
    set.seed(42)
    +validate(final_ols, method = "crossvalidation", B = 10)
    ##           index.orig training   test optimism index.corrected  n
     ## R-square      0.9209   0.9227 0.7896   0.1331          0.7878 10
     ## MSE           2.3332   2.2652 2.7234  -0.4582          2.7914 10
     ## g             5.7197   5.6658 5.4657   0.2001          5.5196 10
     ## Intercept     0.0000   0.0000 0.8853  -0.8853          0.8853 10
     ## Slope         1.0000   1.0000 0.9571   0.0429          0.9571 10
    -
    data$pred <- predict(final_ols)
    -
    -
    -# RMSE
    -sqrt((MSE = 2.3332))
    +
    data$pred <- predict(final_ols)
    +
    +
    +# RMSE
    +sqrt((MSE = 2.3332))
    ## [1] 1.527482
    -
    caret::RMSE(pred = data$pred, obs = data$mast)
    +
    caret::RMSE(pred = data$pred, obs = data$mast)
    ## [1] 1.527477
    -
    # R2
    -caret::R2(pred = data$pred, obs = data$mast, formula = "traditional")
    +
    # R2
    +caret::R2(pred = data$pred, obs = data$mast, formula = "traditional")
    ## [1] 0.9208941
    -
    # plot model fit
    -
    -ggplot(data, aes(x = pred, y = mast)) +
    -  geom_point() +
    -  geom_abline() + 
    -  geom_smooth(method = "lm") +
    -  ggtitle("Model Fit")
    +
    # plot model fit
    +
    +ggplot(data, aes(x = pred, y = mast)) +
    +  geom_point() +
    +  geom_abline() + 
    +  geom_smooth(method = "lm") +
    +  ggtitle("Model Fit")
    ## `geom_smooth()` using formula = 'y ~ x'

    4.6.4 Model Interpretation

    A nice feature of linear models are that they are easy to interpret. If we examine the model coefficients we can see how what we’re trying to predict (i.e. the response variable) varies as a function of the GIS variables (i.e. predictor variables). So looking at the elev variable below we can see that mast decreasing at a rate of -0.066 for every change in elevation.

    -
    # Model accuracy, residuals, and slopes (e.g. coefficents)
    -final_ols
    +
    # Model accuracy, residuals, and slopes (e.g. coefficents)
    +final_ols
    ## Linear Regression Model
     ## 
     ## ols(formula = mast ~ elev + solarcv + tc_1 + tc_2, data = data, 
    @@ -880,8 +880,8 @@ 

    4.6.4 Model Interpretation

    We can examine how much each variable contributes to the model by examining the results of anova. From the summary below we can that the majority of partial sum of squares are captured by elev, with progressively less by the remaining variables.

    -
    # Anova
    -anova(final_ols)
    +
    # Anova
    +anova(final_ols)
    ##                 Analysis of Variance          Response: mast 
     ## 
     ##  Factor     d.f. Partial SS MS          F      P     
    @@ -891,49 +891,49 @@ 

    4.6.4 Model Interpretation

    -
    plot(anova(final_ols), what = "partial R2")
    +
    plot(anova(final_ols), what = "partial R2")

    Another way to visualize the contribution of each variable is to plot their partial effects, which summarize how much each variable effects the model if we hold all the other variables constant at their median values and vary the variable of interest over it’s 25th and 75th percentiles. This is a useful way to compare the impact of each variable side by side in the units of the response variable. In this case we can see below that again elev has the biggest impact, with range of approximately -6 to -4.5 degrees. The effect of solarcv is smallest compared to the other tasseled cap variables.

    -
    # Model Effects
    -plot(summary(final_ols))
    +
    # Model Effects
    +plot(summary(final_ols))

    The partial effects can also be visualized as regression lines with their confidence intervals, which illustrates the slope of the predictor variables in relation to mast.

    -
    # Plot Effects
    -ggplot(Predict(final_ols),
    -       addlayer = geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") +
    -         scale_y_continuous(breaks = c(8, 15, 22))
    -       )
    +
    # Plot Effects
    +ggplot(Predict(final_ols),
    +       addlayer = geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") +
    +         scale_y_continuous(breaks = c(8, 15, 22))
    +       )

    -
    # Vary solarcv (North = 23; Flat = 33; South = 55)
    -ggplot(Predict(final_ols, elev = NA, solarcv = c(23, 33, 51))) +
    -  geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") +
    -  scale_y_continuous(breaks = c(8, 15, 22))
    +
    # Vary solarcv (North = 23; Flat = 33; South = 55)
    +ggplot(Predict(final_ols, elev = NA, solarcv = c(23, 33, 51))) +
    +  geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") +
    +  scale_y_continuous(breaks = c(8, 15, 22))

    4.7 Generate spatial predictions

    -
    # Predict mast model
    -predfun <- function(model, data) {
    -  v <- predict(model, data, se.fit=TRUE)
    -  }
    -
    -mast_r <- predict(geodata_r, final_ols, fun = predfun, index = 1:2, progress = 'text')
    -
    -names(mast_r) <- c("MAST", "SE")
    +
    # Predict mast model
    +predfun <- function(model, data) {
    +  v <- predict(model, data, se.fit=TRUE)
    +  }
    +
    +mast_r <- predict(geodata_r, final_ols, fun = predfun, index = 1:2, progress = 'text')
    +
    +names(mast_r) <- c("MAST", "SE")

    4.8 Create Map

    -
    # mast
    -plot(mast_r, col = viridis::viridis(10))
    +
    # mast
    +plot(mast_r, col = viridis::viridis(10))

    4.9 Exercise

    1. Load the CA790 MAST dataset.
    -
    url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/exercises/yosemite-example/henry_CA790_data.csv"
    -mast2 <- read.csv(url)
    +
    url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/exercises/yosemite-example/henry_CA790_data.csv"
    +mast2 <- read.csv(url)
    1. Fit a linear model.

    2. Examine the residuals and check for multi-collinearity.

      diff --git a/book2/model-evaluation.html b/book2/model-evaluation.html index f6bc26c5..da69bc9e 100644 --- a/book2/model-evaluation.html +++ b/book2/model-evaluation.html @@ -23,7 +23,7 @@ - + @@ -323,34 +323,33 @@
    3. 6.5 Prediction using Tree-based Models
    4. 6.6 Summary
    5. -
    6. Appendix
    7. -
    8. A Accuracy and Uncertainty for Categorical Predictions -

    The results show that quantile estimates are more variable with smaller sample sizes and larger inherent standard deviations. This example demonstrates how our results would differ if we were to sample the same soils again. We would be “uncertain” of our results unless the underlying standard deviation is small or our sample size was large. Both factors would also impact how certain we could be that 2 or more classes of soils are different.

    2.1.2 Examples - Variation and Certainty

    Demonstration of how to calculate variance.

    -
    # calculate the mean
    -mu <- mean(test$pH)
    -
    -# subtract mean from each value and square (i.e. residuals)
    -test$S <- (test$pH - mu)^2
    -
    -# calculate overall sum of squares
    -SS <- sum(test$S)
    -
    -# calculate sample variance (length gives us the total number of sample/observations)
    -SS / (length(test$pH) - 1)
    -
    ## [1] 2.562981
    +
    # calculate the mean
    +mu <- mean(test$pH)
    +
    +# subtract mean from each value and square (i.e. residuals)
    +test$S <- (test$pH - mu)^2
    +
    +# calculate overall sum of squares
    +SS <- sum(test$S)
    +
    +# calculate standard deviation (length gives us the total number of sample/observations)
    +sqrt(SS / (length(test$pH) - 1))
    +
    ## [1] 1.569779

    Note below how our estimate of the variance can vary widely, particularly for simulated datasets with a inherent standard deviation of 2.

    -
    test %>%
    -  group_by(iteration, n, sd) %>%
    -  summarize(var = var(pH)) %>%
    -  group_by(sd, n) %>%
    -  summarize(across(var, list(min = min, mean = mean, max = max)))
    ## # A tibble: 8 × 5
     ## # Groups:   sd [2]
    -##   sd     n       var_min var_mean var_max
    +##   sd     n       sd2_min sd2_mean sd2_max
     ##   <chr>  <fct>     <dbl>    <dbl>   <dbl>
    -## 1 sd = 1 n = 10    0.272     1.10    2.12
    -## 2 sd = 1 n = 30    0.571     1.00    1.90
    -## 3 sd = 1 n = 60    0.678     1.09    1.54
    -## 4 sd = 1 n = 100   0.800     1.04    1.28
    -## 5 sd = 2 n = 10    1.25      3.86    8.82
    -## 6 sd = 2 n = 30    1.93      4.07    7.38
    -## 7 sd = 2 n = 60    2.29      3.94    5.91
    -## 8 sd = 2 n = 100   3.29      4.15    5.16
    +## 1 sd = 1 n = 10 0.604 1.00 1.59 +## 2 sd = 1 n = 30 0.736 0.970 1.34 +## 3 sd = 1 n = 60 0.763 1.00 1.17 +## 4 sd = 1 n = 100 0.876 0.994 1.09 +## 5 sd = 2 n = 10 1.19 1.94 2.98 +## 6 sd = 2 n = 30 1.61 2.06 2.58 +## 7 sd = 2 n = 60 1.52 1.93 2.21 +## 8 sd = 2 n = 100 1.75 1.98 2.38

    Now let’s see Standard Error (standard deviation / square root of n) below. The results show how our estimates become more precise as the sample size increases.

    -
    SE <- function(x) sd(x, na.rm = TRUE) / sqrt(length(!is.na(x)))
    -
    -test %>%
    -  group_by(iteration, n, sd) %>%
    -  summarize(SE = SE(pH)) %>%
    -  group_by(sd, n) %>%
    -  summarize(across(SE, list(min = min, mean = mean, max = max)))
    ## # A tibble: 8 × 5
     ## # Groups:   sd [2]
     ##   sd     n       SE_min SE_mean SE_max
     ##   <chr>  <fct>    <dbl>   <dbl>  <dbl>
    -## 1 sd = 1 n = 10  0.165    0.324  0.461
    -## 2 sd = 1 n = 30  0.138    0.181  0.252
    -## 3 sd = 1 n = 60  0.106    0.134  0.160
    -## 4 sd = 1 n = 100 0.0895   0.102  0.113
    -## 5 sd = 2 n = 10  0.353    0.609  0.939
    -## 6 sd = 2 n = 30  0.254    0.364  0.496
    -## 7 sd = 2 n = 60  0.196    0.255  0.314
    -## 8 sd = 2 n = 100 0.181    0.204  0.227
    +## 1 sd = 1 n = 10 0.191 0.317 0.502 +## 2 sd = 1 n = 30 0.134 0.177 0.244 +## 3 sd = 1 n = 60 0.0985 0.129 0.151 +## 4 sd = 1 n = 100 0.0876 0.0994 0.109 +## 5 sd = 2 n = 10 0.376 0.614 0.942 +## 6 sd = 2 n = 30 0.294 0.376 0.471 +## 7 sd = 2 n = 60 0.197 0.249 0.285 +## 8 sd = 2 n = 100 0.175 0.198 0.238

    @@ -531,55 +484,55 @@

    2.2 Theory of Uncertainty2.3 Resampling to Estimate Uncertainty

    When calculating many basic statistical parameters, the assumption is that the data is parametric. That implies that the data is continuous (ratio or interval) and normally distributed. This is rarely the case with soil data. Soil properties are often not normally distributed (you cannot have less that 0% organic matter, for instance) and often we are trying to predict soil taxa or other nominal classes.

    Re-sampling is a general term that defines any procedure to repeatedly draw samples form a given data-set. You are essentially pretending to collect a series of separate samples from your sample set then calculating a statistic on that sample. Re-sampling techniques can be used on known and unknown data distributions for uncertainty estimation and validation (Good 2013).

    -
    # this bootstrap is estimating the uncertainty associated with the variance of sas$pH_0.30_obs
    -# an example of getting a confidence interval through bootstrapping (no assumption of a normal distribution)
    -
    -# load the GSP Salt Affected Soil dataset
    -url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_sas.csv"
    -sas <- read.csv(url)
    -
    -N   <- nrow(sas)
    -
    -
    -# abbreviate our data to simply the commands
    -ph <- na.exclude(sas$pH_0.30_obs)
    -n <- 100
    -
    -# set number of iterations
    -k <- 50
    -
    -# create a data frame to store the results
    -boot_stats <- data.frame(
    -  vars = numeric(k),
    -  means = numeric(k)
    -  )
    -
    -# for each instance (i) in the set from 1 to N (50 in this case)
    -for (i in 1:k) {
    -  # create a new variable dB from each bootstrap sample of d
    -  boot.sample = sample(ph, n, replace = TRUE) 
    -  boot_stats$means[i] = mean(boot.sample)
    -  boot_stats$vars[i]  = var(boot.sample)
    -  }
    -
    -quantile(boot_stats$vars)
    +
    # this bootstrap is estimating the uncertainty associated with the variance of sas$pH_0.30_obs
    +# an example of getting a confidence interval through bootstrapping (no assumption of a normal distribution)
    +
    +# load the GSP Salt Affected Soil dataset
    +url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_sas.csv"
    +sas <- read.csv(url)
    +
    +N   <- nrow(sas)
    +
    +
    +# abbreviate our data to simply the commands
    +ph <- na.exclude(sas$pH_0.30_obs)
    +n <- 100
    +
    +# set number of iterations
    +k <- 50
    +
    +# create a data frame to store the results
    +boot_stats <- data.frame(
    +  vars = numeric(k),
    +  means = numeric(k)
    +  )
    +
    +# for each instance (i) in the set from 1 to N (50 in this case)
    +for (i in 1:k) {
    +  # create a new variable dB from each bootstrap sample of d
    +  boot.sample = sample(ph, n, replace = TRUE) 
    +  boot_stats$means[i] = mean(boot.sample)
    +  boot_stats$vars[i]  = var(boot.sample)
    +  }
    +
    +quantile(boot_stats$vars)
    ##        0%       25%       50%       75%      100% 
    -## 0.8275478 1.0378832 1.1479694 1.2571935 1.5796813
    -
    stripchart(boot_stats$vars)
    +## 0.8815688 1.0457885 1.1422593 1.2261761 1.5571980 +
    stripchart(boot_stats$vars)

    -
    # Traditional Approach
    -ci <- c(
    -  # lower 5th
    -  l = mean(ph) - 1.96 * sd(ph) / sqrt(N),
    -  # upper 95th
    -  u = mean(ph) + 1.96 * sd(ph) / sqrt(N)
    -  )
    -
    -# Compare Bootstrap to Confidence Interval
    -quantile(boot_stats$means, c(0.025, 0.975))
    +
    # Traditional Approach
    +ci <- c(
    +  # lower 5th
    +  l = mean(ph) - 1.96 * sd(ph) / sqrt(N),
    +  # upper 95th
    +  u = mean(ph) + 1.96 * sd(ph) / sqrt(N)
    +  )
    +
    +# Compare Bootstrap to Confidence Interval
    +quantile(boot_stats$means, c(0.025, 0.975))
    ##     2.5%    97.5% 
    -## 5.830171 6.228177
    -
    ci
    +## 5.792807 6.178015 +
    ci
    ##        l        u 
     ## 6.002983 6.024366
    @@ -654,34 +607,34 @@

    2.4.1 Regression Metrics

    -
    library(caret)
    -
    -# Numeric accuracy metrics----
    -
    -# R2 ----
    -caret::R2(
    -  pred = sas$pH_0.30_pred, 
    -  obs  = sas$pH_0.30_obs, 
    -  formula = "traditional", 
    -  na.rm = TRUE
    -  )
    +
    library(caret)
    +
    +# Numeric accuracy metrics----
    +
    +# R2 ----
    +caret::R2(
    +  pred = sas$pH_0.30_pred, 
    +  obs  = sas$pH_0.30_obs, 
    +  formula = "traditional", 
    +  na.rm = TRUE
    +  )
    ## [1] 0.8526782
    -
    # RMSE ----
    -caret::RMSE(
    -  pred = sas$pH_0.30_pred, 
    -  obs  = sas$pH_0.30_obs, 
    -  na.rm = TRUE
    -  )
    +
    # RMSE ----
    +caret::RMSE(
    +  pred = sas$pH_0.30_pred, 
    +  obs  = sas$pH_0.30_obs, 
    +  na.rm = TRUE
    +  )
    ## [1] 0.4690274
    -
    # Numeric precision/uncertainty metrics----
    -# R2 confidence interval
    -vars <- c("pH_0.30_pred", "pH_0.30_obs")
    -MBESS::ci.R2(
    -  R2 = 0.85, 
    -  N  = sum(complete.cases(sas[vars])), 
    -  K  = 1, 
    -  conf.level = 0.975
    -  )
    +
    # Numeric precision/uncertainty metrics----
    +# R2 confidence interval
    +vars <- c("pH_0.30_pred", "pH_0.30_obs")
    +MBESS::ci.R2(
    +  R2 = 0.85, 
    +  N  = sum(complete.cases(sas[vars])), 
    +  K  = 1, 
    +  conf.level = 0.975
    +  )
    ## $Lower.Conf.Limit.R2
     ## [1] 0.8462365
     ## 
    @@ -693,30 +646,30 @@ 

    2.4.1 Regression Metrics
    # RMSE confidence interval
    -## Standard Error
    -n  <- sum(complete.cases(sas[vars]))
    -SE <- qnorm(0.975) * sqrt(var((sas$pH_0.30_obs - sas$pH_0.30_pred)^2, na.rm = TRUE) / n)
    -
    -## Confidence Interval
    -0.47 + c(-1 * SE, SE)

    +
    # RMSE confidence interval
    +## Standard Error
    +n  <- sum(complete.cases(sas[vars]))
    +SE <- qnorm(0.975) * sqrt(var((sas$pH_0.30_obs - sas$pH_0.30_pred)^2, na.rm = TRUE) / n)
    +
    +## Confidence Interval
    +0.47 + c(-1 * SE, SE)
    ## [1] 0.4645869 0.4754131
    -
    # plot errors
    -
    -idx <- sample(1:nrow(sas), 100)
    -
    -ggplot(sas[idx, ], aes(x = pH_0.30_pred, y = pH_0.30_obs)) +
    -  geom_point() +
    -  # draw a 1 to 1 line
    -  geom_abline() +
    -  # draw a linear fit; method = "lm"
    -  geom_smooth(method = "lm")
    +
    # plot errors
    +
    +idx <- sample(1:nrow(sas), 100)
    +
    +ggplot(sas[idx, ], aes(x = pH_0.30_pred, y = pH_0.30_obs)) +
    +  geom_point() +
    +  # draw a 1 to 1 line
    +  geom_abline() +
    +  # draw a linear fit; method = "lm"
    +  geom_smooth(method = "lm")

    -
    ggplot(sas, aes(x = pH_0.30_pred, y = pH_0.30_obs)) +
    -  # use a hex geom if there are too many points and they overlap
    -  geom_hex() +
    -  geom_abline() +
    -  geom_smooth()
    +
    ggplot(sas, aes(x = pH_0.30_pred, y = pH_0.30_obs)) +
    +  # use a hex geom if there are too many points and they overlap
    +  geom_hex() +
    +  geom_abline() +
    +  geom_smooth()

    @@ -930,23 +883,23 @@

    2.4.3.2 Class-based metricsAn index of accuracy that accounts for agreement by chance— effectively a replacement for Cohen’s Kappa (aqp::tauW()) -
    url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_bs.csv"
    -bs <- read.csv(url)
    -bs <- subset(bs, complete.cases(BS1_obs, BS2_obs))
    -
    -
    -# Probability metrics ----
    -
    -## Brier score ----
    -vars <- c("BS2_pred", "BS2_obs")
    -aqp::brierScore(
    -  bs[vars], 
    -  classLabels = "BS2_pred", 
    -  actual = "BS2_obs"
    -  )
    +
    url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_bs.csv"
    +bs <- read.csv(url)
    +bs <- subset(bs, complete.cases(BS1_obs, BS2_obs))
    +
    +
    +# Probability metrics ----
    +
    +## Brier score ----
    +vars <- c("BS2_pred", "BS2_obs")
    +aqp::brierScore(
    +  bs[vars], 
    +  classLabels = "BS2_pred", 
    +  actual = "BS2_obs"
    +  )
    ## [1] 0.04384271
    -
    ## D2 & Tjur D2----
    -modEvA::RsqGLM(obs = bs$BS2_obs, pred = bs$BS2_pred, plot = FALSE)
    +
    ## D2 & Tjur D2----
    +modEvA::RsqGLM(obs = bs$BS2_obs, pred = bs$BS2_pred, plot = FALSE)
    ## $CoxSnell
     ## [1] 0.3957293
     ## 
    @@ -961,14 +914,14 @@ 

    2.4.3.2 Class-based metrics

    -
    # Shannon entropy ----
    -# fake example
    -test <- seq(0, 0.5, 0.1)
    -test <- data.frame(obs = test, pred = 1 - test)
    -cbind(
    -  test,
    -  entropy = apply(test, 1, aqp::shannonEntropy)
    -)
    +
    # Shannon entropy ----
    +# fake example
    +test <- seq(0, 0.5, 0.1)
    +test <- data.frame(obs = test, pred = 1 - test)
    +cbind(
    +  test,
    +  entropy = apply(test, 1, aqp::shannonEntropy)
    +)
    ##   obs pred   entropy
     ## 1 0.0  1.0 0.0000000
     ## 2 0.1  0.9 0.4689956
    @@ -976,27 +929,27 @@ 

    2.4.3.2 Class-based metrics

    -
    # bs example
    -summary(
    -  apply(data.frame(bs$BS2_pred, 1 - bs$BS2_pred), 1, aqp::shannonEntropy)
    -)
    +
    # bs example
    +summary(
    +  apply(data.frame(bs$BS2_pred, 1 - bs$BS2_pred), 1, aqp::shannonEntropy)
    +)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
     ##  0.0000  0.2111  0.4327  0.4722  0.7418  1.0000
    -
    # Class-based metrics -----
    -
    -## Confusion matrix ----
    -# beware conf_mat prefers factors with equal numbers of levels
    -# also if your table only has 2 classes, you need to specify which is 'positive'
    -cm1 <- table(pred = as.factor(bs$BS2_pred > 0.5), obs = as.factor(bs$BS2_obs))
    -cm1
    +
    # Class-based metrics -----
    +
    +## Confusion matrix ----
    +# beware conf_mat prefers factors with equal numbers of levels
    +# also if your table only has 2 classes, you need to specify which is 'positive'
    +cm1 <- table(pred = as.factor(bs$BS2_pred > 0.5), obs = as.factor(bs$BS2_obs))
    +cm1
    ##        obs
     ## pred    FALSE  TRUE
     ##   FALSE 28788   979
     ##   TRUE    411  2696
    -
    # or
    -
    -cm2 <- caret::confusionMatrix(cm1, positive = "TRUE")
    -cm2
    +
    # or
    +
    +cm2 <- caret::confusionMatrix(cm1, positive = "TRUE")
    +cm2
    ## Confusion Matrix and Statistics
     ## 
     ##        obs
    @@ -1024,14 +977,14 @@ 

    2.4.3.2 Class-based metrics

    -
    ## Examine thresholds ----
    -ggplot(bs, aes(x = BS2_pred, fill = BS2_obs)) +
    -  geom_density(alpha = 0.5) +
    -  geom_vline(xintercept = 0.5, linetype = "dashed") +
    -  xlab("BS2 Probability")
    +
    ## Examine thresholds ----
    +ggplot(bs, aes(x = BS2_pred, fill = BS2_obs)) +
    +  geom_density(alpha = 0.5) +
    +  geom_vline(xintercept = 0.5, linetype = "dashed") +
    +  xlab("BS2 Probability")

    -
    ## Trade Precision for Sensitivity by Varying the Threshold 
    -table(predicted = bs$BS2_pred > 0.5, observed = bs$BS2_obs)
    +
    ## Trade Precision for Sensitivity by Varying the Threshold 
    +table(predicted = bs$BS2_pred > 0.5, observed = bs$BS2_obs)
    ##          observed
     ## predicted FALSE  TRUE
     ##     FALSE 28788   979
    @@ -1046,10 +999,10 @@ 

    2.4.4 Exercise 3
    lev <- unique(c(sas$sas030_obs, sas$sas030_pred))
    -lev <- lev[c(1, 4, 8, 9, 12, 5, 3, 6, 7, 11)]
    -sas$sas030_obs  <- factor(sas$sas030_obs,  levels = lev)
    -sas$sas030_pred <- factor(sas$sas030_pred, levels = lev)

    +
    lev <- unique(c(sas$sas030_obs, sas$sas030_pred))
    +lev <- lev[c(1, 4, 8, 9, 12, 5, 3, 6, 7, 11)]
    +sas$sas030_obs  <- factor(sas$sas030_obs,  levels = lev)
    +sas$sas030_pred <- factor(sas$sas030_pred, levels = lev)
    1. Why can’t you calculate a Brier score and Shannon entropy for the SAS classes from the sas dataset?

    2. Forward you R script your instructor.

    3. @@ -1057,25 +1010,25 @@

      2.4.4 Exercise 3

      2.4.4.1 Stratified-random/areal-adjustment

      In the case of stratified-random samples or non-probability samples, it is necessary to adjust the class totals by their assumed/estimated proportion or area prior to calculating their accuracy or standard errors (Brus, Kempen, and Heuvelink 2011; Campbell, Wynne, and Thomas 2023; Congalton and Green 2019b; Stehman and Foody 2019). This is often the case when a minority class (e.g. minor component or small map unit) is sampled in excess of it’s true proportion relative to the total sample set. Surprisingly R functions to adjusts for these unequal weights is rare, with the exception of the sits and MetricsWeighted R package.

      -
      # weights
      -wt <- c(`FALSE` = 0.95, `TRUE` = 0.05)
      -
      -# confusion matrix
      -cm <- table(pred = bs$BS2_pred > 0.5, obs = bs$BS2_obs)
      -cm
      +
      # weights
      +wt <- c(`FALSE` = 0.95, `TRUE` = 0.05)
      +
      +# confusion matrix
      +cm <- table(pred = bs$BS2_pred > 0.5, obs = bs$BS2_obs)
      +cm
      ##        obs
       ## pred    FALSE  TRUE
       ##   FALSE 28788   979
       ##   TRUE    411  2696
      -
      # apply weights
      -cm_wt <- wt * cm/rowSums(cm)
      -
      -# optional transformation to original totals
      -cm_wt2 <- cm_wt/sum(cm_wt) * sum(cm)
      -
      -
      -# compare weighted and unweighted confusion matrices
      -confusionMatrix(cm,     positive = "TRUE")$byClass
      +
      # apply weights
      +cm_wt <- wt * cm/rowSums(cm)
      +
      +# optional transformation to original totals
      +cm_wt2 <- cm_wt/sum(cm_wt) * sum(cm)
      +
      +
      +# compare weighted and unweighted confusion matrices
      +confusionMatrix(cm,     positive = "TRUE")$byClass
      ##          Sensitivity          Specificity       Pos Pred Value 
       ##           0.73360544           0.98592418           0.86771806 
       ##       Neg Pred Value            Precision               Recall 
      @@ -1084,7 +1037,7 @@ 

      2.4.4.1 Stratified-random/areal-a ## 0.79504571 0.11179047 0.08201010 ## Detection Prevalence Balanced Accuracy ## 0.09451238 0.85976481

      -
      confusionMatrix(cm_wt2, positive = "TRUE")$byClass
      +
      confusionMatrix(cm_wt2, positive = "TRUE")$byClass
      ##          Sensitivity          Specificity       Pos Pred Value 
       ##           0.58134486           0.99285248           0.86771806 
       ##       Neg Pred Value            Precision               Recall 
      @@ -1148,34 +1101,34 @@ 

      2.5.1.2 Cross-validation - Altern
    4. Less computationally intensive than LOOCV, but it is more robust and can be done with smaller sample sizes than a simple split.
    5. Several R packages have tools to cross-validate predictions, including: DAAG and boot for lm() and glm() objects, caret, rms,
    6. -
      ### Linear model example
      -# Create folds
      -folds <- createFolds(1:nrow(sas), k = 10)
      -
      -# Cross validate
      -lm_cv <- lapply(folds, function(x) {
      -  train = sas[-x,]
      -  test  = sas[x,]
      -  obs   = test$pH_0.30_obs
      -  # predict = predict(model, test)
      -  pred  = test$pH_0.30_pred
      -  RMSE  = RMSE(pred, obs, na.rm = TRUE)
      -  R2    = R2(pred, obs, formula = "traditional", na.rm = TRUE)
      -  return(c(RMSE = RMSE, R2 = R2))
      -})
      -
      -# Convert to a data.frame
      -lm_cv <- do.call(rbind, lm_cv)
      -
      -# Summarize results
      -summary(lm_cv)
      +
      ### Linear model example
      +# Create folds
      +folds <- createFolds(1:nrow(sas), k = 10)
      +
      +# Cross validate
      +lm_cv <- lapply(folds, function(x) {
      +  train = sas[-x,]
      +  test  = sas[x,]
      +  obs   = test$pH_0.30_obs
      +  # predict = predict(model, test)
      +  pred  = test$pH_0.30_pred
      +  RMSE  = RMSE(pred, obs, na.rm = TRUE)
      +  R2    = R2(pred, obs, formula = "traditional", na.rm = TRUE)
      +  return(c(RMSE = RMSE, R2 = R2))
      +})
      +
      +# Convert to a data.frame
      +lm_cv <- do.call(rbind, lm_cv)
      +
      +# Summarize results
      +summary(lm_cv)
      ##       RMSE              R2        
      -##  Min.   :0.4526   Min.   :0.8455  
      -##  1st Qu.:0.4669   1st Qu.:0.8483  
      -##  Median :0.4702   Median :0.8517  
      +##  Min.   :0.4551   Min.   :0.8453  
      +##  1st Qu.:0.4630   1st Qu.:0.8485  
      +##  Median :0.4662   Median :0.8531  
       ##  Mean   :0.4690   Mean   :0.8527  
      -##  3rd Qu.:0.4763   3rd Qu.:0.8565  
      -##  Max.   :0.4788   Max.   :0.8616
      +## 3rd Qu.:0.4753 3rd Qu.:0.8556 +## Max. :0.4847 Max. :0.8620

      2.5.1.3 Subsample (Resampling or sample simulation)

      @@ -1210,7 +1163,6 @@

      2.5.2 External Validation -

      diff --git a/book2/numerical-tax.html b/book2/numerical-tax.html index e0f41898..eead4e8a 100644 --- a/book2/numerical-tax.html +++ b/book2/numerical-tax.html @@ -23,7 +23,7 @@ - + @@ -2051,7 +2051,7 @@

      3.4.6 “How Do the Interpretatio kable_styling(knitr::kable(x.wide, digits = 2, caption="Mean Fuzzy Ratings for Select Soil Series"), font_size = 10) @@ -2354,7 +2354,7 @@

      3.4.7.2 Principle Coordinates

      -

      This document is based on aqp version 2.0.3 and soilDB version 2.8.1 and sharpshootR version 2.2.

      +

      This document is based on aqp version 2.0.3 and soilDB version 2.8.2 and sharpshootR version 2.2.

      diff --git a/book2/references.html b/book2/references.html index 7eb8eb4e..61ecca66 100644 --- a/book2/references.html +++ b/book2/references.html @@ -23,7 +23,7 @@ - + diff --git a/book2/search_index.json b/book2/search_index.json index 742b9fc7..85fd260a 100644 --- a/book2/search_index.json +++ b/book2/search_index.json @@ -1 +1 @@ -[["index.html", "Statistics for Soil Survey - Part 2 Pre-course Assignment 0.1 Setup 0.2 Additional Reading", " Statistics for Soil Survey - Part 2 Soil Survey Staff 2024-02-24 Pre-course Assignment 0.1 Setup To set up your R environment and install required packages, please use the pre-course instructions found at the beginning of Statistics for Soil Survey (Part 1): http://ncss-tech.github.io/stats_for_soil_survey/book/ 0.2 Additional Reading Spatial Data Analysis and Modeling with R R-Intro R for Beginners The R Inferno AQP Website and Tutorials Stats for Soil Survey Webinar Soil Data Aggregation using R Webinar "],["intro.html", "Chapter 1 Introduction 1.1 Outline", " Chapter 1 Introduction Finish this. 1.1 Outline "],["model-evaluation.html", "Chapter 2 Model Evaluation 2.1 Introduction 2.2 Theory of Uncertainty 2.3 Resampling to Estimate Uncertainty 2.4 Performance Metrics 2.5 Validation", " Chapter 2 Model Evaluation 2.1 Introduction Validating and assessing the uncertainty of a model is just as, if not more important, than generating the model itself. Validation quantifies the model’s ability to explain variance in the data while uncertainty quantifies the confidence of model prediction. Uncertainty and validation assessments enable the end user to better understand model error, the nature and distribution of the input data, and the overall accuracy and spatial applicability of the model. Within a soil model, there are several sources of error: Measurement errors Interpretation errors Digitization errors Classification errors Generalization errors Interpolation errors Semantic errors Errors are simply the difference between reality and our representation of reality. Assessing the data structure with simple statistical measures such as mean, median and mode can be useful for understanding the central tendency of the data, but more complicated calculations are needed to get at dispersion or the variation of a property within a population to further assess error and uncertainty (Zar, 1999). Measure of Dispersion Range: The difference between the highest and lowest values measured or observed. Not always reliable because it can include outliers, error, or misclassified data. Quantiles: These refer to 25% increments in the rank of observations. Typically, the 25th and 75th quantiles are used to represent the spread of the most typical values around the central tendency. Measure of Variation * Variance: The deviation of from the mean is calculated as sum of squares (SS) to use absolute deviation (eliminate any distinction between negative and positive correlation). \\(variance (sample) = \\frac{SS}{n-1}\\) \\(SS = \\sum{(X - x)^2}\\) Standard deviation: Used to return variance to the original units \\(sd = \\sqrt{\\frac{SS}{n-1}}\\) Coefficient of variation: Scale standard deviation with mean so that multiple properties can be compared \\(CV = \\frac{SD}{x}\\) Measures of Certainty Standard Error: represents the variance of the mean that would be found with repeated sampling. Estimated by dividing standard deviation by the square root of n. The concept of standard error is important for hypothesis testing. Confidence interval: Interval in which you are confident that a given percentage (known as the confidence limit 95, 80, 75%) of the population lie. If a normal distribution is assumed, for a 95% confidence interval, it can be estimated that the value is 95% likely to fall between as SD * 1.96 +/- mean. 2.1.1 Examples - Dispersion Below is a simulated example demonstrating the affect of sample size and standard deviation on quantile estimates. library(dplyr) library(ggplot2) # create 50 random pH samples of 10, 30, 60, and 100 y <- c(10, 30, 60, 100) lab <- paste0("n = ", y) f <- function(x, n, sd) { idx <- rnorm(n, mean = 7, sd = sd) tmp <- data.frame(iteration = factor(x, levels = 1:30), n = factor(n, levels = y, labels = lab), sd = paste0("sd = ", sd), pH = idx) return(tmp) } # standard deviation of 1 test <- mapply(FUN = f, rep(1:30, times = 4), rep(y, each = 30), sd = 1, SIMPLIFY = FALSE) test <- do.call("rbind", test) # standard deviation of 1 test2 <- mapply(FUN = f, rep(1:30, times = 4), rep(y, each = 30), sd = 2, SIMPLIFY = FALSE) test2 <- do.call("rbind", test2) test <- rbind(test, test2) # examine summary statistics test %>% group_by(iteration, n, sd) %>% summarize(med = median(pH)) %>% group_by(sd, n) %>% summarize(across(med, list(min = min, mean = mean, max = max))) ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n med_min med_mean med_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 6.40 6.99 7.71 ## 2 sd = 1 n = 30 6.64 7.02 7.52 ## 3 sd = 1 n = 60 6.59 7.01 7.39 ## 4 sd = 1 n = 100 6.81 7.02 7.24 ## 5 sd = 2 n = 10 4.73 6.91 9.02 ## 6 sd = 2 n = 30 6.21 7.07 8.69 ## 7 sd = 2 n = 60 6.54 6.97 7.41 ## 8 sd = 2 n = 100 6.40 6.99 7.51 # examine box plots ggplot(test, aes(x = iteration, y = pH)) + geom_boxplot() + facet_wrap(~ n + sd, ncol = 2, ) The results show that quantile estimates are more variable with smaller sample sizes and larger inherent standard deviations. This example demonstrates how our results would differ if we were to sample the same soils again. We would be “uncertain” of our results unless the underlying standard deviation is small or our sample size was large. Both factors would also impact how certain we could be that 2 or more classes of soils are different. 2.1.2 Examples - Variation and Certainty Demonstration of how to calculate variance. # calculate the mean mu <- mean(test$pH) # subtract mean from each value and square (i.e. residuals) test$S <- (test$pH - mu)^2 # calculate overall sum of squares SS <- sum(test$S) # calculate sample variance (length gives us the total number of sample/observations) SS / (length(test$pH) - 1) ## [1] 2.562981 Note below how our estimate of the variance can vary widely, particularly for simulated datasets with a inherent standard deviation of 2. test %>% group_by(iteration, n, sd) %>% summarize(var = var(pH)) %>% group_by(sd, n) %>% summarize(across(var, list(min = min, mean = mean, max = max))) ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n var_min var_mean var_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 0.272 1.10 2.12 ## 2 sd = 1 n = 30 0.571 1.00 1.90 ## 3 sd = 1 n = 60 0.678 1.09 1.54 ## 4 sd = 1 n = 100 0.800 1.04 1.28 ## 5 sd = 2 n = 10 1.25 3.86 8.82 ## 6 sd = 2 n = 30 1.93 4.07 7.38 ## 7 sd = 2 n = 60 2.29 3.94 5.91 ## 8 sd = 2 n = 100 3.29 4.15 5.16 Now let’s see Standard Error (standard deviation / square root of n) below. The results show how our estimates become more precise as the sample size increases. SE <- function(x) sd(x, na.rm = TRUE) / sqrt(length(!is.na(x))) test %>% group_by(iteration, n, sd) %>% summarize(SE = SE(pH)) %>% group_by(sd, n) %>% summarize(across(SE, list(min = min, mean = mean, max = max))) ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n SE_min SE_mean SE_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 0.165 0.324 0.461 ## 2 sd = 1 n = 30 0.138 0.181 0.252 ## 3 sd = 1 n = 60 0.106 0.134 0.160 ## 4 sd = 1 n = 100 0.0895 0.102 0.113 ## 5 sd = 2 n = 10 0.353 0.609 0.939 ## 6 sd = 2 n = 30 0.254 0.364 0.496 ## 7 sd = 2 n = 60 0.196 0.255 0.314 ## 8 sd = 2 n = 100 0.181 0.204 0.227 2.2 Theory of Uncertainty At it’s most basic level, uncertainty is simply a lack of certainty. In soil survey, uncertainty encompasses both of these aspects: you’ve gathered multiple observations and you need to describe them in relation to one another, and you must predict a property or characteristic at unobserved locations. It is difficult to quantify the knowledge we have about data and information uncertainty. While we may have good data of the accuracy of our GPS, how likely are we to include that in our estimates of model error? How important is it? In other disciplines, they spend a lot of time quantifying and tracking measurement error. In soil science, we tend to treat measurement as having an exact known location and value. Given the unknowns in mapping and predicting soil properties, this is a reasonable treatment of relatively small levels of error. When using secondary information as data (or data that is actually a prior prediction or result of a model, including soil components), considering incorporated error can be crucial. One way to deal with this is through re-sampling an alternate way is to through error propagation theory. The most common way to deal with this in soil survey and digital soil mapping is to assess error through model validation. Explanatory vs. Predictive Modelling While explanatory and predictive modeling can use the same types of models, data and even questions, the errors and uncertainty are important for different reasons Explanatory or Descriptive - data are collected and analyzed in order to test causal hypothesis and observe correlations and relationships between data element. Often used at the beginning phases of soil-landscape exploration. How does the soil relate to each of the soil forming factors? Predictive - applying a model or algorithm to data for the purpose of making a prediction (in new or unknown locations) (Shueli, 2010). 2.3 Resampling to Estimate Uncertainty When calculating many basic statistical parameters, the assumption is that the data is parametric. That implies that the data is continuous (ratio or interval) and normally distributed. This is rarely the case with soil data. Soil properties are often not normally distributed (you cannot have less that 0% organic matter, for instance) and often we are trying to predict soil taxa or other nominal classes. Re-sampling is a general term that defines any procedure to repeatedly draw samples form a given data-set. You are essentially pretending to collect a series of separate samples from your sample set then calculating a statistic on that sample. Re-sampling techniques can be used on known and unknown data distributions for uncertainty estimation and validation (Good 2013). # this bootstrap is estimating the uncertainty associated with the variance of sas$pH_0.30_obs # an example of getting a confidence interval through bootstrapping (no assumption of a normal distribution) # load the GSP Salt Affected Soil dataset url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_sas.csv" sas <- read.csv(url) N <- nrow(sas) # abbreviate our data to simply the commands ph <- na.exclude(sas$pH_0.30_obs) n <- 100 # set number of iterations k <- 50 # create a data frame to store the results boot_stats <- data.frame( vars = numeric(k), means = numeric(k) ) # for each instance (i) in the set from 1 to N (50 in this case) for (i in 1:k) { # create a new variable dB from each bootstrap sample of d boot.sample = sample(ph, n, replace = TRUE) boot_stats$means[i] = mean(boot.sample) boot_stats$vars[i] = var(boot.sample) } quantile(boot_stats$vars) ## 0% 25% 50% 75% 100% ## 0.8275478 1.0378832 1.1479694 1.2571935 1.5796813 stripchart(boot_stats$vars) # Traditional Approach ci <- c( # lower 5th l = mean(ph) - 1.96 * sd(ph) / sqrt(N), # upper 95th u = mean(ph) + 1.96 * sd(ph) / sqrt(N) ) # Compare Bootstrap to Confidence Interval quantile(boot_stats$means, c(0.025, 0.975)) ## 2.5% 97.5% ## 5.830171 6.228177 ci ## l u ## 6.002983 6.024366 2.3.1 Exercise 1 Create a new R script. Calculate a bootstrapped median, 10th percentile, and 90th percentile for EC_0.30_obs. Calculate a traditional confidence interval for EC_0.30_obs. Why is the traditional confidence interval so much narrower? Forward you R script your instructor. 2.4 Performance Metrics When evaluating a model, we need to estimate both it’s accuracy and precision. Accuracy estimates the ability of a measurement or prediction to match the actual or reference value of the quantity being measured. Precision in contrast estimates our ability to reproduce a measurement or prediction consistently. Typically people will refer to uncertainty, which is the inverse of precision. Below is a summary of the various measures used to quantify accuracy and precision. The choice of metric depends on whether we are measuring or modeling continuous or categorical variables. In general, all models that estimate continuous variables are referred to as regression models. Sometimes regression models are referred too as quantitative, while categorical models are referred too as qualitative. 2.4.1 Regression Metrics Bias: Mean Error (ME)/Prediction Error/Bias: Description: Quantifies whether the overall error is systematically positive or negative; the closer to 0, the better. Pro: In the same use as the original values Accuracy: Mean Square Error (MSE): Description: Squared estimate of the average error size. Con: Not in the same units as the original values. Root Mean Square Error (RMSE): Description: Positive estimate of the average error size; the smaller, the better. Pro: In the same units as the original values. Coefficient of Determination (R2): Description: Represents the proportion of variance explained by the model. Pro: Values range between 0 and 1. Values < 0 can occur if the prediction is worse than simply predicting the average value. Con: Over-optimistic when extreme values or skewed distributions are present. Often confused with the squared Pearson’s correlation coefficient (r2). References: Kutner et al. 2004; Zumel and Mount 2020 Precision/Uncertainty: Standard Error (SE): Description: Error in the model parameters (e.g., coefficients or overall prediction). Confidence Interval (CI): Description: Conversion of the SE to an interval according to a given probability (e.g., 95 percent); its range is narrower than the prediction interval. Con: Assumes a normal distribution, unless transformed or bootstrapped. References: Webster (2001) Prediction Interval (PI): Description: Interval designed to capture the range in values of a prediction according to a given probability. Relative Prediction Interval (RPI): Description: Ratio of the 95 percent prediction interval range to the 95 percent observed inter-quantile range in values. Can use different probability values (e.g., 90 percent PI to 90 percent inter-quantile range). Pro: Typically ranges between 0 and 1; values larger than 1 indicate very high model uncertainty. No distribution assumptions. References: Nauman and Duniway (2019) library(caret) # Numeric accuracy metrics---- # R2 ---- caret::R2( pred = sas$pH_0.30_pred, obs = sas$pH_0.30_obs, formula = "traditional", na.rm = TRUE ) ## [1] 0.8526782 # RMSE ---- caret::RMSE( pred = sas$pH_0.30_pred, obs = sas$pH_0.30_obs, na.rm = TRUE ) ## [1] 0.4690274 # Numeric precision/uncertainty metrics---- # R2 confidence interval vars <- c("pH_0.30_pred", "pH_0.30_obs") MBESS::ci.R2( R2 = 0.85, N = sum(complete.cases(sas[vars])), K = 1, conf.level = 0.975 ) ## $Lower.Conf.Limit.R2 ## [1] 0.8462365 ## ## $Prob.Less.Lower ## [1] 0.0125 ## ## $Upper.Conf.Limit.R2 ## [1] 0.8536713 ## ## $Prob.Greater.Upper ## [1] 0.0125 # RMSE confidence interval ## Standard Error n <- sum(complete.cases(sas[vars])) SE <- qnorm(0.975) * sqrt(var((sas$pH_0.30_obs - sas$pH_0.30_pred)^2, na.rm = TRUE) / n) ## Confidence Interval 0.47 + c(-1 * SE, SE) ## [1] 0.4645869 0.4754131 # plot errors idx <- sample(1:nrow(sas), 100) ggplot(sas[idx, ], aes(x = pH_0.30_pred, y = pH_0.30_obs)) + geom_point() + # draw a 1 to 1 line geom_abline() + # draw a linear fit; method = "lm" geom_smooth(method = "lm") ggplot(sas, aes(x = pH_0.30_pred, y = pH_0.30_obs)) + # use a hex geom if there are too many points and they overlap geom_hex() + geom_abline() + geom_smooth() 2.4.2 Exercise 2 Append the following exercises to your previous R script. Compare the traditional \\(R^2\\) to the alternative \\(R^2\\) for EC_0.30_obs vs EC_0.30_pred? Calculate the RMSE() and MAE()for EC_0.30_obs vs EC_0.30_pred? Plot a hex bin scatterplot of EC_0.30_obs vs EC_0.30_pred with a linear smoother. Forward you R script your instructor. 2.4.3 Categorical 2.4.3.1 Probability-based metrics (threshold-independent) Beware the \\(D^2\\), Tjur’s D, and AUC (or c-statistic) only apply to binary classes. Accuracy: Brier Score (BS): Description: In the case of binary outcomes (e.g., 1 vs. 0), it is equivalent to the Mean Square Error, where a positive outcome equals 1 minus the predicted probability. For multinomial outcomes, the squared error is averaged for all classes. Lower values denote higher accuracy. Pro: Integrates more information about predictions (all probabilities) vs. the most likely class used by overall accuracy or tau index. Con: Does not incorporate prior knowledge of class proportions. Does not incorporate class similarity. References: Brier (1950); Harrell (2015); Steyerberg (2019) Deviance Squared (D2) or Pseudo R2: Description: The proportion of deviance explained. Pro: Values range between 0 and 1. Values < 0 can occur if the prediction is worse than simply predicting the average value. Con: Over-optimistic when extreme values or skewed distributions are present. Coefficient of Discrimination (or Tjur’s D): Description: Difference in average probability of true positives and true negatives. It is another alternative version of D2 or Pseudo R2. Pro: Values range between 0 and 1. References: Tjur (2013) Concordance (c) Statistic or Area Under the Curve (AUC): Description: Probability that a binary classifier does better than random chance. The area under the receiver operator characteristic curve. Pro: Values range between 0.5 and 1. Con: Less sensitive than D2. References: Hand (2012); Harrell (2015) Precision/Uncertainty: Shannon entropy: Description: Quantitative measure of “information,” “complexity,” “certainty,” or “diversity” contained within a vector of probabilities. Larger values denote less information, higher complexity, less certainty, and greater diversity. Pro: Integrates “confusion” over all probabilities. Entropy values from different models (e.g., differing numbers of classes) can be directly compared. Con: Does not incorporate the similarity between classes. References: Shannon (1948) Normalized Shannon Entropy: Description: An alternate version of Shannon Entropy that is constrained to the interval [0,1]. Pro: Integrates “confusion” over all probabilities. Constrained to [0,1]. Con: Cannot be used to compare models with differing numbers of classes. May not be implemented in all software packages. References: Kempen et al. (2009) Confusion Index: Description: An index of confusion among the top two most likely classes. Pro: Simple calculation and constrained to [0,1]. Con: Cannot be used to compare models with differing numbers of classes. Only describes uncertainty of top two classes. May not be implemented in all software packages. References: Burrough et al. (1997) 2.4.3.2 Class-based metrics These metrics are derivatives of the confusion matrix (Congalton and Green 2019a; Fielding and Bell 1997; James et al. 2021; Kuhn and Johnson 2013) (caret::confusionMatrix()) Accuracy: Overall Accuracy: Description: The proportion of correctly classified observations as tabulated in the confusion matrix. Pro: Simple to calculate and interpret, based entirely on the confusion matrix. Con: Does not account for mistakes due to chance. Does not incorporate prior knowledge of class proportions. Does not incorporate class similarity. Does not incorporate information contained within vector of predicted probabilities. References: Story and Congalton 1986 Kappa Coefficient: Description: An index that represents the agreement between predicted and observed values and accounts for chance agreement. Pro: Easily calculated from the confusion matrix. Generated by most software packages along with the confusion matrix. Con: Interpretation of Kappa values between 0 and 1 is largely arbitrary. A value of < 0 indicates no agreement, and a value of 1 indicates perfect agreement. Recommended to use Kappa along with other measures of accuracy. Numerous authors now question the utility and assumptions of Kappa. References: Congalton and Mead (1983); Foody (2020) Tau Index: Description: An index of agreement that accounts for agreement by chance—effectively a replacement for Kappa. Pro: The index is more informative when appropriate class proportions are supplied. Index values can be referenced to concepts such as “better” or “worse” than random allocation. Con: Appropriate prior class proportions are method dependent. Interpretation requires some training. References: Ma & Remond (1995) Weighted Tau Index: Description: Alternative version of the tau index that accommodates class similarity. Pro: The index is more informative when appropriate class proportions are supplied. Class similarity down-weights mistakes between similar classes. Con: Appropriate prior class proportions are method dependent. There is no universal method for estimating class similarity weights. Interpretation requires some training. References: Rossiter (2017) Precision/Uncertainty: Standard Error (SE): Description: Error in the model parameters (e.g., coefficients or overall prediction). Confidence Interval (CI): Description: Conversion of the SE to an interval according to a given probability (e.g., 95 percent); its range is narrower than the prediction interval. Con: Assumes a normal distribution, unless transformed or bootstrapped. References: Beware, measures like Overall Accuracy, Precision and User Accuracy are dependent on the prevalence (frequency) of observation, and thus shouldn’t be use to compare classes with different sample sizes (Foody 2010; Kuhn and Johnson 2013, 2019; Monaghan et al. 2021; Parikh et al. 2008). Alternative calculations exist for row-wise accuracy that corrects for prevalence, such as the positive predictive value (PPV) and negative predictive value (NPV), which are available via the caret::confusionMatrix function. Similar named functions exist in other R packages, but don’t incorporate the prevalence corrected calculations. Confusion Matrix Observed Metric Predicted No Yes UA No True Negative (TN) False Negative (FN) NPV/ UA Yes False Positive (FP) True Positive (TP) PPV/ Precision / UA ——————- ——————– ——————— ——————- Metric Specificity / PA Sensitivity / PA Overall Prevalence (P): % of class occurrence in the population, usually this is estimated from the sample Overall Accuracy: % of observations that were correctly classified, for all classes Sensitivity (SN) (aka Recall or True Positive Rate): TP / (TP + FN) % of TRUE predictions that were correctly classified, for an individual class Specificity (SP) (aka True Negative Rate): TN / (TN + FP) errors of commission (Type I) % of FALSE observations that were correctly classified, for an individual class Precision: TP / (TP + FP) % of TRUE observations that were classified as a class, that actually were that class Positive Preditive Value (PPV): if prevalence = 50 then TP / (TP + FP) if prevalence != 50 then SN * P / (SN * P) + ((1 - SP) * (1 - P)) % of TRUE observations that were classified as a class, that actually were that class Negative Predictive Value (NPV): if prevalence = 50 then TN / (TN + FN) if prevalence != 50 then SP * (1 - P) / (P * (1 - SN)) + (SP * (1 - P)) % of FALSE observations that were classified as a class, that actually were that class Producer’s Accuracy (PA): diagonal values (TN & TP) / observed values % of predictions that were correctly classified, for an individual class User’s Accuracy (UA): diagonal values / predicted values % of FALSE observations that were classified as a class, that actually were that class Tau index: An index of accuracy that accounts for agreement by chance— effectively a replacement for Cohen’s Kappa (aqp::tauW()) url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_bs.csv" bs <- read.csv(url) bs <- subset(bs, complete.cases(BS1_obs, BS2_obs)) # Probability metrics ---- ## Brier score ---- vars <- c("BS2_pred", "BS2_obs") aqp::brierScore( bs[vars], classLabels = "BS2_pred", actual = "BS2_obs" ) ## [1] 0.04384271 ## D2 & Tjur D2---- modEvA::RsqGLM(obs = bs$BS2_obs, pred = bs$BS2_pred, plot = FALSE) ## $CoxSnell ## [1] 0.3957293 ## ## $Nagelkerke ## [1] 0.7857143 ## ## $McFadden ## [1] 0.7191203 ## ## $Tjur ## [1] 0.4823267 ## ## $sqPearson ## [1] 0.5992087 # Shannon entropy ---- # fake example test <- seq(0, 0.5, 0.1) test <- data.frame(obs = test, pred = 1 - test) cbind( test, entropy = apply(test, 1, aqp::shannonEntropy) ) ## obs pred entropy ## 1 0.0 1.0 0.0000000 ## 2 0.1 0.9 0.4689956 ## 3 0.2 0.8 0.7219281 ## 4 0.3 0.7 0.8812909 ## 5 0.4 0.6 0.9709506 ## 6 0.5 0.5 1.0000000 # bs example summary( apply(data.frame(bs$BS2_pred, 1 - bs$BS2_pred), 1, aqp::shannonEntropy) ) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.0000 0.2111 0.4327 0.4722 0.7418 1.0000 # Class-based metrics ----- ## Confusion matrix ---- # beware conf_mat prefers factors with equal numbers of levels # also if your table only has 2 classes, you need to specify which is 'positive' cm1 <- table(pred = as.factor(bs$BS2_pred > 0.5), obs = as.factor(bs$BS2_obs)) cm1 ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 # or cm2 <- caret::confusionMatrix(cm1, positive = "TRUE") cm2 ## Confusion Matrix and Statistics ## ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 ## ## Accuracy : 0.9577 ## 95% CI : (0.9555, 0.9599) ## No Information Rate : 0.8882 ## P-Value [Acc > NIR] : < 2.2e-16 ## ## Kappa : 0.7717 ## ## Mcnemar's Test P-Value : < 2.2e-16 ## ## Sensitivity : 0.73361 ## Specificity : 0.98592 ## Pos Pred Value : 0.86772 ## Neg Pred Value : 0.96711 ## Prevalence : 0.11179 ## Detection Rate : 0.08201 ## Detection Prevalence : 0.09451 ## Balanced Accuracy : 0.85976 ## ## 'Positive' Class : TRUE ## ## Examine thresholds ---- ggplot(bs, aes(x = BS2_pred, fill = BS2_obs)) + geom_density(alpha = 0.5) + geom_vline(xintercept = 0.5, linetype = "dashed") + xlab("BS2 Probability") ## Trade Precision for Sensitivity by Varying the Threshold table(predicted = bs$BS2_pred > 0.5, observed = bs$BS2_obs) ## observed ## predicted FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 2.4.4 Exercise 3 Append the following exercises to your previous R script. Calculate the Brier score, \\(D^2\\) and Shannon Entropy for the BS1 class from the bs dataset. What probably threshold creates the best split for the BS1 class. Calculate a confusion matrix for sas30_obs vs sas30_pred from the sas dataset. Be sure to manually set the factor levels as shown below. lev <- unique(c(sas$sas030_obs, sas$sas030_pred)) lev <- lev[c(1, 4, 8, 9, 12, 5, 3, 6, 7, 11)] sas$sas030_obs <- factor(sas$sas030_obs, levels = lev) sas$sas030_pred <- factor(sas$sas030_pred, levels = lev) Why can’t you calculate a Brier score and Shannon entropy for the SAS classes from the sas dataset? Forward you R script your instructor. 2.4.4.1 Stratified-random/areal-adjustment In the case of stratified-random samples or non-probability samples, it is necessary to adjust the class totals by their assumed/estimated proportion or area prior to calculating their accuracy or standard errors (Brus, Kempen, and Heuvelink 2011; Campbell, Wynne, and Thomas 2023; Congalton and Green 2019b; Stehman and Foody 2019). This is often the case when a minority class (e.g. minor component or small map unit) is sampled in excess of it’s true proportion relative to the total sample set. Surprisingly R functions to adjusts for these unequal weights is rare, with the exception of the sits and MetricsWeighted R package. # weights wt <- c(`FALSE` = 0.95, `TRUE` = 0.05) # confusion matrix cm <- table(pred = bs$BS2_pred > 0.5, obs = bs$BS2_obs) cm ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 # apply weights cm_wt <- wt * cm/rowSums(cm) # optional transformation to original totals cm_wt2 <- cm_wt/sum(cm_wt) * sum(cm) # compare weighted and unweighted confusion matrices confusionMatrix(cm, positive = "TRUE")$byClass ## Sensitivity Specificity Pos Pred Value ## 0.73360544 0.98592418 0.86771806 ## Neg Pred Value Precision Recall ## 0.96711123 0.86771806 0.73360544 ## F1 Prevalence Detection Rate ## 0.79504571 0.11179047 0.08201010 ## Detection Prevalence Balanced Accuracy ## 0.09451238 0.85976481 confusionMatrix(cm_wt2, positive = "TRUE")$byClass ## Sensitivity Specificity Pos Pred Value ## 0.58134486 0.99285248 0.86771806 ## Neg Pred Value Precision Recall ## 0.96711123 0.86771806 0.58134486 ## F1 Prevalence Detection Rate ## 0.69623400 0.07463023 0.04338590 ## Detection Prevalence Balanced Accuracy ## 0.05000000 0.78709867 2.5 Validation Validation refers to the process and the result of a process where the validity of a model is tested. That is, how well does the model represent reality? There are varying degrees of formality and thoroughness that can be used in validation. While multiple stages of the modeling process can be validated, usually it’s the output of the model that is investigated and reported. You can group initial validation into three broad groups: Expert evaluation, Theoretical Analysis and Prediction Accuracy. Expert Evaluation: In this case, the model output is inspected by an expert user. The first evaluator will be you (the developer), but ideally an outside expert will be utilized. This is often a step in an iterative process. Evaluate the model output, does it make sense, do you see things that need to be improved? Then make changes to the model to improve the output. Theoretical Analysis: compare the results of the model to what is theoretically possible. In systems modeling, this might include diagnostics statistics including residual analysis, cross-correlation of variables and outputs, sensitivity analysis and model analysis such as Akaike Information Criterion (AIC). This can also include simple comparison of output to known possible values. This is especially important for linear regression where the slope of the model is assumed to be steady no matter the values of the dependent variables. Prediction Accuracy: The correctness of the parameter being predicted by the model (soil taxa, property etc.). Ideally this is done with an independent set of data. In soil science, we typically use the term model validation to refer to a statistical analysis that assesses how well a model will predict at an unknown location. A complete model should have a formal statistical evaluation that can be reported and stored as model and output meta-data. That is the portion of validation we will focus. For this discussion, validation can be thought of as an assessment of prediction error and variance. Three types of validation used in the course Internal - Performance on population underlying the sample External - Performance on related (similar/adjacent) but independent population 2.5.1 Internal Validation 2.5.1.1 Split-sample - A single partition of the data into a learning and a calibration set. Achieve an independent validation by partitioning the samples into calibration or training and validation data-sets (70% of the samples available are recommended for calibration) Build model on calibration (training) data-set Test model on validation (test) data-set Report accuracy on the validation data-set This method is relatively simple (conceptually and computationally). Results depend on having an adequate sample size to both develop and test the model. 2.5.1.2 Cross-validation - Alternate development and validation Leave-One-Out Cross-Validation (LOOCV) One observation is used for testing and all others are used to develop model Repeat n (total number of observations) times Average error over n The mean of the accuracy is the expected accuracy of the model (this assumes that new data is from the same population) (Efron, 1983) k-fold Cross-Validation (k-fold) CV Randomly divide observations into calibration and validation sets. Repeat k times, each time one k group is used for error estimates Average error of k Less computationally intensive than LOOCV, but it is more robust and can be done with smaller sample sizes than a simple split. Several R packages have tools to cross-validate predictions, including: DAAG and boot for lm() and glm() objects, caret, rms, ### Linear model example # Create folds folds <- createFolds(1:nrow(sas), k = 10) # Cross validate lm_cv <- lapply(folds, function(x) { train = sas[-x,] test = sas[x,] obs = test$pH_0.30_obs # predict = predict(model, test) pred = test$pH_0.30_pred RMSE = RMSE(pred, obs, na.rm = TRUE) R2 = R2(pred, obs, formula = "traditional", na.rm = TRUE) return(c(RMSE = RMSE, R2 = R2)) }) # Convert to a data.frame lm_cv <- do.call(rbind, lm_cv) # Summarize results summary(lm_cv) ## RMSE R2 ## Min. :0.4526 Min. :0.8455 ## 1st Qu.:0.4669 1st Qu.:0.8483 ## Median :0.4702 Median :0.8517 ## Mean :0.4690 Mean :0.8527 ## 3rd Qu.:0.4763 3rd Qu.:0.8565 ## Max. :0.4788 Max. :0.8616 2.5.1.3 Subsample (Resampling or sample simulation) In this method, the ‘leave-out’ method can be random (Bootstrap) or observation selection can use a more sophisticated method to select observations to represent the population including Monte Carlo (Molarino, 2005) and .632+bootstrap of Efron & Tibshirani (1997). The details of those aren’t important, except to know that they can give you a better idea of the robustness of your model. As with re-sampling for uncertainty estimation, observations are repeatedly sampled Select a number of samples (Randomly or from known distribution). Develop the model Estimate model accuracy on unselected samples Repeat the process (with independent sample) a large number of times, 500 - 5,000. The expected model accuracy is then the mean of the estimates. NOTE: The BEST model should not be assumed to be the one that makes the ‘truest’ predictions. Beware of over-fitting. When a model is over-fit, it predicts due to very specific “quirks” in the calibration data set and not due to explanatory relationships that will apply to validation and independent data-sets. One strategy to avoid this situation is to build models with as few variables as possible. Parsimonious models (those that use the least amount of information possible to obtain the same result or convey the same meaning) often have higher predicative validity. The use of metrics such as Akaike’s Information Criterion (AIC) can be helpful for balancing error and parameter minimization. 2.5.2 External Validation In this case, an independent data-set is used as the test case. Independent observations predicted with model Errors (ME, RMSE) calculated on predicted vs. actual Some exploratory analysis can be helpful to diagnose and explain model performance. The use of validation will be demonstrated as part of each modeling section. The size of the data-set used, understanding of the variables involved and the nature of the statistical models and algorithms used all influence which validation techniques are most convenient and appropriate. References "],["numerical-tax.html", "Chapter 3 Numerical Taxonomy and Ordination 3.1 Introduction 3.2 Whirlwind Tour 3.3 Excercises 3.4 Practical Applications", " Chapter 3 Numerical Taxonomy and Ordination 3.1 Introduction Nearly every aspect of soil survey involves the question: “Is X more similar to Y or to Z?” The quantification of similarity within a collection of horizons, pedons, components, map units, or even landscapes represents an exciting new way to enhance the precision and accuracy of the day-to-day work of soil scientists. After completing this module, you should be able to quantitatively organize objects based on measured or observed characteristics in a consistent and repeatable manner. Perhaps you will find a solution to the long-standing “similar or dissimilar” question. 3.1.1 Objectives Learn essential vocabulary used in the field of numerical taxonomy. Review some of the literature. Gain experience with R functions and packages commonly used for clustering and ordination. Learn how to create and interpret a distance matrix and appropriate distance metrics. Learn how to create and interpret a dendrogram. Lean the basics and application of hierarchical clustering methods. Lean the basics and application of partitioning clustering methods. Learn the basics and application of ordination methods. Apply skills to a range of data sources for soils and vegetation. Apply techniques from numerical taxonomy to addressing the “similar or dissimilar” question. Learn some strategies for coping with missing data. 3.2 Whirlwind Tour Most of the examples featured in this whirlwind tour are based on soil data from McGahan, D.G., Southard, R.J, Claassen, V.P. 2009. Plant-available calcium varies widely in soils on serpentinite landscapes. Soil Sci. Soc. Am. J. 73: 2087-2095. These data are available in the dataset “sp4” that is built into aqp package for R. 3.2.1 Similarity, Disimilarty, and Distance There are shelves of books and thousands of academic articles describing the theory and applications of “clustering” and “ordination” methods. This body of knowledge is commonly described as the field of numerical taxonomy (Sneath and Sokal 1973). Central to this field is the quantification of similarity among “individuals” based on a relevant set of “characteristics.” Individuals are typically described as rows of data with a single characteristic per column, together referred to as a data matrix. For example: name clay sand Mg Ca CEC_7 A 21 46 25.7 9.0 23.0 ABt 27 42 23.7 5.6 21.4 Bt1 32 40 23.2 1.9 23.7 Bt2 55 27 44.3 0.3 43.0 Quantitative measures of similarity are more conveniently expressed as distance, or dissimilarity; in part because of convention and in part because of computational efficiency. In the simplest case, dissimilarity can be computed as the shortest distance between individuals in property-space. Another name for the shortest linear distance between points is the Euclidean distance. Evaluated in two dimensions (between individuals \\(p\\) and \\(q\\)), the Euclidean distance is calculated as follows: \\[D(p,q) = \\sqrt{(p_{1} - q_{1})^{2} + (p_{2} - q_{2})^{2}}\\] where \\(p_{1}\\) is the 1st characteristic (or dimension) of individual \\(p\\). There are many other ways to define “distance” (e.g. distance metrics), but they will be covered later. Using the sand and clay percentages from the data above, dissimilarity is represented as the length of the line connecting any two individuals in property space. The following is a matrix of all pair-wise distances (the distance matrix): A ABt Bt1 Bt2 A 0.0 7.2 12.5 38.9 ABt 7.2 0.0 5.4 31.8 Bt1 12.5 5.4 0.0 26.4 Bt2 38.9 31.8 26.4 0.0 Note that this is the full form of the distance matrix. In this form, zeros are on the diagonal (i.e. the distance between an individual and itself is zero) and the upper and lower “triangles” are symmetric. The lower triangle is commonly used by most algorithms to encode pair-wise distances. A ABt Bt1 ABt 7.2 Bt1 12.5 5.4 Bt2 38.9 31.8 26.4 Interpretation of the matrix is simple: Individual “A” is more like “ABt” than like “Bt1.” It is important to note that quantification of dissimilarity (distance) among individuals is always relative: “X is more like Y, as compared to Z.” 3.2.1.1 Distances You Can See: Perceptual Color Difference Simulated redoximorphic feature colors, contrast classes and CIE \\(\\Delta{E_{00}}\\). Details here. 3.2.2 Standardization of Characteristics Euclidean distance doesn’t make much sense if the characteristics do not share a common unit of measure or range of values. Nor is it relevant when some characteristics are categorical and some are continuous. For example, distances are distorted if you compare clay (%) and exchangeable Ca (cmol/kg). In this example, exchangeable Ca contributes less to the distance between individuals than clay content, effectively down-weighting the importance of the exchangeable Ca. Typically, characteristics are given equal weight (Sneath and Sokal 1973); however, weighting is much simpler to apply after standardization. Standardization of the data matrix solves the problem of unequal ranges or units of measure, typically by subtraction of the mean and division by standard deviation (z-score transformation). \\[x_{std} = \\frac{x - mean(x)}{sd(x)}\\] There are several other standardization methods covered later. The new data matrix looks like the following: name clay sand Mg Ca CEC_7 A -0.86 0.88 -0.35 1.23 -0.47 ABt -0.45 0.40 -0.55 0.36 -0.63 Bt1 -0.12 0.15 -0.60 -0.59 -0.40 Bt2 1.43 -1.43 1.49 -1.00 1.49 Using the standardized data matrix, distances computed in the property space of clay and exchangeable calcium are unbiased by the unique central tendency or spread of each character. Rarely can the question of “dissimilarity” be answered with only two characteristics (dimensions). Euclidean distance, however, can be extended to an arbitrary number of \\(n\\) dimensions. \\[D(p,q) = \\sqrt{ \\sum_{i=1}^{n}{(p_{i} - q_{i})^{2}} }\\] In the equation above, \\(i\\) is one of \\(n\\) total characteristics. Imagining what distance “looks like” is difficult if there are more than three dimensions. Instead, examine the distance matrix calculated using all five characteristics. Rescaling to the interval {0,1}. You can now begin to describe dissimilarity between individuals using an arbitrary number of (relevant) characteristics. You can make statements like “The A horizon is roughly 2x more similar to the ABt horizon than it is to the Bt horizon.” Although this is a trivial example, the utility of generalizing these methods to soil survey operations should be obvious. 3.2.2.1 Review and Discuss What are the “data matrix” and “distance matrix”? What is standardization, and why is it important? What is the largest impediment to creating a distance matrix from NASIS and KSSL data? Key point: Each characteristic is its own dimension in property-space. Sand, clay, and CEC = 3 dimensions. Sand, clay, CEC, OC, and horizon depth = 5 dimensions. Multiple dimensions are simple to define in code but are hard to visualize. The curse of dimensionality. 3.2.3 Missing Data Missing data are a fact of life. Soil scientists are quite familiar with missing lab data (“Why didn’t we request optical grain counts?”) or missing essential NASIS pedon data elements, such as horizon bottom depth, estimated clay fraction, or pH. Nearly all of the methods described in this document are very sensitive to missing data. In other words, they won’t work! Following are a couple of possible solutions: Fix the missing data if at all possible, Estimate the missing data values from know relationships to other properties or a group-wise mean or median, or Remove records containing any missing data. 3.2.4 Visualizing Pair-Wise Distances: The Dendrogram Dendrograms are a convenient approximation of pair-wise distances between individuals (after application of hierarchical grouping criteria; more on this later). Dissimilarity between branches is proportional to the level at which branches merge: branching at higher levels (relative to the root of the tree) suggests greater dissimilarity; branching at lower levels suggests greater similarity. Consider the previous example in which distance between individuals was defined in terms of sand and clay percentages. Interpretation is simple. Distance in property-space is directly proportional to branching height in the corresponding dendrogram. Visualizing the geometry of pair-wise distances in more than three dimensions is difficult. A dendrogram, however, can conveniently summarize a distance matrix created from an arbitrary number of characteristics (dimensions). It is important to note that some information about pair-wise distances is lost or distorted in the dendrogram. Distortion is least near the terminal “leaves” of the dendrogram. This phenomena is analogous to the distortion generated by a map projection. It is impossible to flatten a higher-dimensional entity to a lower-dimensional form without causing distortion. 3.2.4.1 Re-arranging a Dendrogram for Clarity The branches of a dendrogram can be rotated like a mobile, so that the final ordering of the terminal “leaves” approximates an alternate ranking. For example, branches of the following dendrogram (right-hand side) have been rotated to approximate the expected hydrologic gradient from summit to toeslope. This figure is based on component records from SSURGO, arranged using functions from the sharpshootR package, and presented in SoilWeb/SDE. 3.2.4.2 Review and Discuss Do you have any questions about dendrogram interpretation? Dendrograms are used extensively in the rest of this chapter. If you were explaining how to interpret a dendrogram to someone, would you start at the roots or leaves? Why? 3.2.5 Cluster Analysis: Finding Groups in Data Cluster analysis is a massive topic that deals with the seemingly simple task of finding useful groups within a dataset. This topic and the methods used are also referred to as “unsupervised classification” in the fields of remote sensing and GIS. All of the available algorithms will find groups in a given dataset; however, it is up to the subject expert to determine the following: Suitable characteristics and standardization method, Appropriate clustering algorithm, Criteria to determine the “right” number of clusters, Limitations of the selected algorithm, Interpretation of the final grouping based on subject knowledge, and The possibility of needing to start over at step 1. 3.2.5.1 Using Color to Communicate Results of Clustering or Ordination Note that the widespread use of color in the following examples is not for aesthetic purposes. Colors are convenient for tri-variate data-spaces because you can visually integrate the information into a self-consistent set of classes. 3.2.5.2 Hierarchical Clustering Hierarchical clustering is useful when a full distance matrix is available and the optimal number of clusters is not yet known. This form of clustering creates a data structure that can encode “grouping” information from one cluster to as many clusters as there are individuals. The expert must determine the optimal place to “cut the tree” and generate a fixed set of clusters. The results from a hierarchical clustering operation are nearly always presented as a dendrogram. 3.2.5.2.1 Methods There are two main types of hierarchical clustering. Agglomerative: Start with individuals and iteratively combine into larger and larger groups. Divisive: Start with all individuals and iteratively split into smaller and smaller groups. Both methods are strongly influenced by the choice of standardization method and distance metric. Both methods require a full, pair-wise distance matrix as input. This requirement can limit the use of hierarchical clustering to datasets that can be fit into memory. The agglomerative methods also depend on the choice of linkage criterion. Some of these criteria include: Average: usually generates spherical clusters, default in agnes() and recommended by (Kaufman and Rousseeuw 2005), Single linkage: usually generates elongated clusters, Complete linkage: usually generates small, compact clusters, Ward’s (minimum variance) method, Weighted average (or Gower’s) linkage: spherical clusters of roughly equal size, and “Flexible strategy”: adjustable linkage based on parameter \\(\\alpha\\). “Flexible UPGMA” (Belbin, Faith, and Milligan 1992): adjustable linkage based on parameter \\(\\beta\\). See (Kaufman and Rousseeuw 2005), (Arkley 1976), (Legendre and Legendre 2012), and agnes() manual page for a detailed description of these linkage criteria. Selection of linkage criteria can be quantitatively evaluated using the cophenetic correlation; and index of how well a dendrogram preserves the original pair-wise distances. This thread on StackExchange has a nice summary of various linkage criteria. I really like these slides by Brian Tibshirani on the topic of agglomerative method selection. More on this later. 3.2.5.2.2 Review and Discuss The simplicity and lack of decisions make the divisive method convenient for most work. The top-down approach is similar to the way in which we describe soil morphology and taxonomy. Linkage criteria should be selected based on the hypothesized shape of clusters or prior subject knowledge. When selecting a method, read/think about it; don’t just go “fishing.” Personal opinion: I usually select divisive hierarchical clustering over the other methods: structures seem to be generally more interpretable. 3.2.5.3 Centroid and Medoid (Partitioning) Clustering Centroid and medoid cluster analyses are commonly referred to as k-means-style analysis. “K-means,” however, is just one of many possible clustering algorithms that partition property-space into a fixed number of groups. These type of algorithms can be applied to very large datasets because they do not rely on the distance matrix. Instead, they are based on an iterative shuffling of group “centroids” until some criterion is minimized, for example, the mean variance within groups. 3.2.5.3.1 Methods This section describes three (out of many) of the most important partitioning-type algorithms. K-means: Groups of individuals are partitioned around newly created “centroids”. Resulting clusters approximately spherical and contain an approximately equal number of individuals. K-medoids: Groups of individuals are partitioned around selected “medoids”. Fuzzy clustering: Individuals are assigned a “fuzzy membership” value for each partition of property-space. All of these methods are sensitive to the type of standardization applied to the characteristics. These methods rely on iterative minimization of one or more criteria; therefore, each clustering “run” may generate slightly different output. Most implementations re-run the algorithm until it stabilizes. 3.2.5.3.2 Review and Discuss What is the difference between a “medoid” and a “centroid”? Can you think of a way in which both concepts could be applied to the grouping of soils data? medoids are tied to individuals, centroids are hypothetical (calculated) Fuzzy clustering is also referred to as “soft clustering,” while the other two methods are referred to as “hard clustering.” Sometimes, using both can be helpful, especially if individuals straddle the line between groups. Each method has its own strength and weakness, for example here is a nice summary of the limitations of k-means. 3.2.6 Ordination: Visualization in a Reduced Space Humans are generally quite good at extracting spatial patterns, almost instantly, from two dimensional fields: faces, written language, etc. Sadly, this ability does not extend beyond two or three dimensions. The term ordination refers to a suite of methods that project coordinates in a high-dimensional space into suitable coordinates in a low-dimensional (reduced) space. Map projections are a simple form of ordination: coordinates from the curved surface of the Earth are projected to a two-dimensional plane. As with any projection, there are assumptions, limitations, and distortions. Carl Sagan gives a beautiful demonstration of this concept using shadows, in this excerpt from Cosmos. Here is another excellent demonstration based on handwriting recognition. Hole and Hironaka (1960) were some of the first pedologists to apply ordination methods to soils data. The main figure from their classic paper was hand-drawn, based on a physical model (constructed from wooden dowels and spheres!) of the ordination. Ordination of the distance matrix often reveals details that would otherwise be lost or distorted by a dendrogram representation. The following figures demonstrate how structure within a distance matrix can be lost when presented via dendrogram. Munsell hues (constant value/chroma) are compared using the CIE \\(\\Delta{E_{00}}\\) color contrast metric. The relationship between hues (and neutral color N 6/0) is evident in the ordination. 3.2.6.1 Major Types of Ordination Of the many possible ordination methods, there are two major types to keep in mind: Constrained ordination: coordinates in the reduced space are subject to some kind of constraint (more rigid, simple interpretation). Principal component analysis (PCA) is one of the simplest and most widely used ordination methods. The reduced space (“principal components”) are defined by linear combinations of characteristics. Unconstrained ordination: coordinates in the reduced space are not subject to any kind of constraint (more flexible, less interpretable). “Non-metric” multidimensional scaling (nMDS) attempts to generate a reduced space that minimizes distortion in proportional similarity; i.e., similar individuals are near each other in the reduced space, dissimilar individuals are farther apart. The “non-metric” adjective implies that exact distances are not preserved. See (Legendre and Legendre 2012) for a comprehensive listing of methods, associated theory, and ecological applications. 3.2.6.2 An Example of nMDS Applied to Soil Data The following example is based on a data matrix containing lab measurements of clay fraction, sand fraction, exchangeable Ca, exchangeable Mg, and CEC measured by NH4-Ac at pH 7. name clay sand Mg Ca CEC_7 A -0.41 0.21 0.06 0.44 -0.23 ABt 0.04 -0.07 -0.06 -0.13 -0.38 Bt1 0.41 -0.21 -0.09 -0.74 -0.16 … … … … … … Note that distances between individuals, within clusters, and between clusters is more apparent in the nMDS representation of the distance matrix. Similar information is embedded in the dendrogram but it is not as intuitive. 3.2.6.2.1 Interpreting the Results We can conveniently annotate the results of an ordination with contextual information, such as the approximate trends in clay content or CEC. Note that ordination methods represent a flattening of multi-dimensional data space, and in the case of nMDS, preserve proportional (vs. exact) pair-wise distances. Therefore, it is quite common for surfaces (the contours below) fit to the 2D ordination to have complex patterns. Putting the clustering results into context is important: recall that we are working with individuals that represent genetic horizons that have been clustered according to 5 physical / chemical properties (characteristics). Differences in CEC by NH4-Ac are one of the strongest contributors to the pair-wise distances and overall clustering structure. 3.2.6.3 Review and Discuss Which visualization of the distance matrix was simpler to interpret: Dendrogram or ordination by nMDS? Do you have any questions about the figures? Do you have any guesses on what the clusters represent? 3.2.7 Pair-Wise Distances Between Soil Profiles Additional examples / elaboration: A generalized algorithm for determining pair-wise dissimilarity between soil profiles Distances calculated from generalized horizon labels Competing Soil Series AQP Paper, 2013 Maynard et al., 2020 3.2.8 Final Discussion Missing data strategy Meaningful characteristics Standardization of characteristics Distance metric Clustering algorithm Number of clusters Application to soil survey and ESD 3.3 Excercises This is the fun part. 3.3.1 Set Up the R Session Install R packages as needed. Open a new R script file to use as you follow along. # load libraries library(aqp) library(soilDB) library(sharpshootR) library(cluster) library(ape) library(RColorBrewer) library(vegan) library(MASS) library(colorspace) library(corrplot) 3.3.2 Data Sources Most of the examples used in the following exercises come from these sources: Built-in data sets from the aqp and soilDB packages (“sp4,” “gopheridge,” and “loafercreek”). Results from fetchNASIS(): pedon data from the local NASIS selected set. Results from fetchKSSL(): lab characterization data from the SoilWeb snapshot. Results from fetchOSD(): basic morphologic and taxonomic data from the SoilWeb snapshot. Results from SDA_query(): live SSURGO spatial and tabular data from Soil Data Access Data from SSR 2, as CSV, downloaded from class GitHub site In most cases, you can edit the examples and swap-in just about any data that are in a SoilProfileCollection object. For example, pedons from your local NASIS selected set can be loaded with fetchNASIS(). 3.3.3 Try it! Tinker with some SoilProfileCollection objects. Get some data using one of the methods listed above. If you need help, see the manual pages for examples (?fetchKSSL) or the SoilProfileCollection tutorial. Determine the number of profiles and horizons within the collection. View and extract some site and horizon attributes. Generate some soil profile sketches. 3.3.4 Evaluating Missing Data The aqp package provides two functions for checking the fraction of missing data within a SoilProfileCollection object. The first function (evalMissingData) generates an index that ranges from 0 (all missing) to 1 (all present) for each profile. This index can be used to subset or rank profiles for further investigation. The second function (missingDataGrid) creates a visualization of the fraction of data missing within each horizon. Both functions can optionally filter-out horizons that don’t typically have data, for example Cr, Cd, and R horizons. The following examples are based on the gopheridge sample dataset. evalMissingData # example data data("gopheridge", package = "soilDB") # compute data completeness gopheridge$data.complete <- evalMissingData(gopheridge, vars = c('clay', 'sand', 'phfield'), name = 'hzname', p = 'Cr|R|Cd') # check range in missing data summary(gopheridge$data.complete) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.0000 0.0000 0.2143 0.4672 1.0000 1.0000 # rank new.order <- order(gopheridge$data.complete) # plot along data completeness ranking par(mar=c(3,0,1,1)) plot(gopheridge, plot.order=new.order, print.id=FALSE, name='') # add axis, note re-ordering of axis labels axis(side=1, at=1:length(gopheridge), labels = round(gopheridge$data.complete[new.order], 2), line=-2, cex.axis=0.65, las=2) title('Gopheridge pedons sorted according to data completeness (clay, sand, pH)') missingDataGrid # view missing data as a fraction res <- missingDataGrid(gopheridge, max_depth=100, vars=c('clay', 'sand', 'phfield'), filter.column='hzname', filter.regex = 'Cr|R|Cd', main='Fraction of missing data (clay, sand, pH)', cols = hcl.colors(10)) # plot figure print(res$fig) # check results head(res$summary) ## peiid clay sand phfield ## 1 1137354 0 100 100 ## 2 1147151 0 0 100 ## 3 1147190 0 0 100 ## 4 242808 29 29 0 ## 5 252851 29 29 29 ## 6 268791 0 0 0 For now, extract those profiles that have a complete set of field-described clay, sand, or pH values for later use. # be sure to read the manual page for this function gopheridge.complete <- subset(gopheridge, data.complete > 0.99) # another way idx <- which(gopheridge$data.complete > 0.99) gopheridge.complete <- gopheridge[idx, ] # looks good par(mar=c(0,0,3,1)) plot(gopheridge.complete, color='clay', id.style='side', label='pedon_id') 3.3.5 More on the Distance Matrix and How to Make One The following three functions are essential to the creation of a distance matrix: dist(): This function is in base R, is simple and fast, and has a limited number of distance metrics. daisy(): This function is in cluster package, has a better selection of distance metrics, and has simple standardization. Much more convenient than dist(). vegdist(): This function is in vegan package, has many distance metrics, and is primarily designed for species composition data. The following is a short demonstration: # get some example data from the aqp package data('sp4', package = 'aqp') # subset select rows and columns sp4 <- sp4[1:4, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] row.names(sp4) <- sp4$name # compare distance functions # Euclidean distance, no standardization round(dist(sp4[, -1], method = 'euclidean')) ## A ABt Bt1 ## ABt 8 ## Bt1 15 7 ## Bt2 48 44 39 # Euclidean distance, standardization round(daisy(sp4[, -1], stand = TRUE, metric = 'euclidean'), 2) ## Dissimilarities : ## A ABt Bt1 ## ABt 1.45 ## Bt1 2.73 1.36 ## Bt2 6.45 5.65 4.91 ## ## Metric : euclidean ## Number of objects : 4 # Gower's generalized distance metric (includes standardization) round(vegdist(sp4[, -1], method = 'gower'), 2) ## A ABt Bt1 ## ABt 0.19 ## Bt1 0.32 0.16 ## Bt2 0.96 0.84 0.69 3.3.5.1 Distance Calculations with Categorical Data The following example is excerpted from “A Novel Display of Categorical Pedon Data”. This example illustrates an application of clustering binary data (presence or absence of a diagnostic feature). Internally, the diagnosticPropertyPlot() function uses the daisy() function to compute pair-wise distances using the “general dissimilarity coefficient” of Gower (Gower 1971). A concise summary of this distance metric is in (Kaufman and Rousseeuw 2005). # load some example NASIS data data(loafercreek, package='soilDB') hzdesgnname(loafercreek) <- 'hzname' # cut-down to a subset, first 20 pedons loafercreek <- loafercreek[1:20, ] # get depth class sdc <- getSoilDepthClass(loafercreek) site(loafercreek) <- sdc # diagnostic properties to consider, no need to convert to factors v <- c('lithic.contact', 'paralithic.contact', 'argillic.horizon', 'cambic.horizon', 'ochric.epipedon', 'mollic.epipedon', 'very.shallow', 'shallow', 'mod.deep', 'deep', 'very.deep') # do the analysis and save the results to object 'x' x <- diagnosticPropertyPlot(loafercreek, v, k=5, grid.label='bedrckkind', dend.label = 'taxonname') If you are wondering what is in the object x, the str() function or manual page (?diagnosticPropertyPlot) can help. 3.3.6 Thematic Distance Matrix Plots Sometimes it is useful visualize the entire distance matrix as a thematic map. The coorplot() function from the corrplot package is useful here. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] sp4.scaled <- data.frame(name=sp4[, 1], round(scale( sp4[, -1]), 2)) # distance matrix d <- dist(sp4.scaled[, -1]) # full-matrix representation m <- as.matrix(d) # note: setting is.corr = FALSE corrplot( m, col = hcl.colors(25, palette = 'mako'), is.corr = FALSE, col.lim = range(m), method = "color", order = "original", type = "upper", diag = FALSE, tl.cex = 0.66, tl.col = 'black', mar = c(0.1, 0, 0, 0.8), addgrid = TRUE ) 3.3.7 Hierachrical Clustering The go-to functions for hierarchical clustering are as follows: hclust(): This function is agglomerative, is in base R, requires a distance matrix, and implements most of the commonly used linkage criteria. agnes(): This function is agglomerative, is in cluster package, can perform standardization and distance calculations, and implements more linkage criteria. diana(): This function is divisive, is in cluster package, can perform standardization and distance calculations. 3.3.7.1 Basic Agglomerative Hierarchical Clustering with hclust The hclust() function and resulting hclust-class objects are simple to use, but limited. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] # distance matrix d <- daisy(sp4[, -1], metric = 'euclidean', stand = TRUE) # hierachical clustering with base function hclust sp4.h <- hclust(d, method = 'ward.D') sp4.h$labels <- sp4$name # plot with basic plotting method... not many options here par(mar=c(2,4,2,2)) plot(sp4.h, font=2, cex=0.85) # ID clusters after cutting tree rect.hclust(sp4.h, 4) 3.3.7.2 Better Plots via ape Package This example uses a different approach to plotting based on functions and classes from the ape package. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] # distance matrix d <- daisy(sp4[, -1], metric = 'euclidean', stand = TRUE) # divising clustering dd <- diana(d) # convert to ape class, via hclust class h <- as.hclust(dd) h$labels <- sp4$name p <- as.phylo(h) # define some nice colors col.set <- brewer.pal(9, 'Set1') # cut tree into 4 groups groups <- cutree(h, 4) # make color vector based on groups cols <- col.set[groups] The plot methods for phylo class objects are quite flexible. Be sure to see the manual page ?plot.phylo. par(mar=c(1,1,1,1), mfcol=c(2,2)) plot(p, label.offset=0.125, direction='right', font=1, cex=0.85, main='dendrogram') tiplabels(pch=15, col=cols) plot(p, type='radial', font=1, cex=0.85, main='radial') tiplabels(pch=15, col=cols) plot(p, type='fan', font=1, cex=0.85, main='fan') tiplabels(pch=15, col=cols) plot(p, type='unrooted', font=1, cex=0.85, main='unrooted') tiplabels(pch=15, col=cols) 3.3.7.3 Evaluation of Dendrogram Representation Re-visiting our sample data from before, develop hierarchical clusterings using several strategies (methods / linkage criteria). # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] # distance matrix d <- daisy(sp4[, -1], metric = 'euclidean', stand = TRUE) # hierarchical clustering based on several strategies # agglomerative h.avg <- agnes(d, method='average') h.single <- agnes(d, method='single') h.complete <- agnes(d, method='complete') h.ward <- agnes(d, method='ward') h.flexible <- agnes(d, method='gaverage', par.method = 0.01) # divisive h.div <- diana(d) The correlation between original distance matrix and cophenetic distance matrix is a reasonable index of how faithfully a dendrogram preserves the original pair-wise distances. # agglomerative hierarchical clustering with various linkage criteria corr.avg <- cor(d, cophenetic(h.avg)) corr.single <- cor(d, cophenetic(h.single)) corr.complete <- cor(d, cophenetic(h.complete)) corr.ward <- cor(d, cophenetic(h.ward)) corr.flexible <- cor(d, cophenetic(h.flexible)) # divisive hierarchical clustering corr.div <- cor(d, cophenetic(h.div)) Combine the results into a table for quick comparison. Note that the agnes and diana functions provide an agglomerative / divisive coefficient that can be used to evaluate clustering efficiency (e.g. cluster size and “compactness”). Depending on the application, one metric may be more informative than the other. res <- data.frame( method=c('average', 'single', 'complete', 'ward', 'flexible UPGMA', 'divisive'), cophenetic.correlation=c(corr.avg, corr.single, corr.complete, corr.ward, corr.flexible, corr.div), agg_div.coefficient=c(h.avg$ac, h.single$ac, h.complete$ac, h.ward$ac, h.flexible$ac, h.div$dc) ) # re-order res <- res[order(res$cophenetic.correlation, decreasing = TRUE), ] method cophenetic.correlation agg_div.coefficient average 0.840 0.787 flexible UPGMA 0.840 0.778 single 0.784 0.613 complete 0.759 0.879 ward 0.756 0.894 divisive 0.703 0.874 Investigate differences graphically: I’ve ranked according to the frequency withwhich I use the various methods. par(mar=c(0,0.25,1.5,0.25), mfrow=c(2,3)) plot(as.phylo(as.hclust(h.div)), label.offset=0.125, direction='right', font=1, cex=0.75, main='1. Divisive', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.div, 4)], cex = 1.5) plot(as.phylo(as.hclust(h.ward)), label.offset=0.125, direction='right', font=1, cex=0.75, main='2. Ward', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.ward, 4)], cex = 1.5) plot(as.phylo(as.hclust(h.flexible)), label.offset=0.125, direction='right', font=1, cex=0.75, main='3. Flexible (0.01)', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.flexible, 4)], cex = 1.5) plot(as.phylo(as.hclust(h.avg)), label.offset=0.125, direction='right', font=1, cex=0.75, main='4. Average', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.avg, 4)], cex = 1.5) plot(as.phylo(as.hclust(h.single)), label.offset=0.125, direction='right', font=1, cex=0.75, main='(never) Single', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.single, 4)], cex = 1.5) plot(as.phylo(as.hclust(h.complete)), label.offset=0.125, direction='right', font=1, cex=0.75, main='(never) Complete', cex.main = 1.75) tiplabels(pch=15, col=col.set[cutree(h.complete, 4)], cex = 1.5) 3.3.7.3.1 More on the Flexible UPGMA method Test the “flexible UPGMA” method (Belbin, Faith, and Milligan 1992) by iterating over possible values for \\(\\beta\\). Looks like a value near 0.01 would be ideal (e.g. highest cophenetic correlation). Interestingly, this is very close to the cophenetic correlation associated with the “average” linkage criteria. # init a sequence spanning -1 to 1 beta <- seq(from=-1, to=1, length.out = 100) # init an empty vector to store results r <- vector(mode='numeric', length = length(beta)) # iterate over values of beta and compute cophenetic correlation for(i in 1:length(r)) { r[i] <- cor(d, cophenetic(agnes(d, method='gaverage', par.method = beta[i]))) } # plot par(mar=c(5,5,1,1)) plot(beta, r, type='l', xlab='beta parameter', ylab='cophenetic correlation', pch=16, las=1) # locate the max coph. corr. idx <- which.max(r) # mark this point and label points(beta[idx], r[idx], col='red', cex=2, lwd=2) text(beta[idx], r[idx], labels = round(beta[idx], 3), pos=4) 3.3.8 Centroid and Medoid (Partitioning) Clustering The following creates simulated data for demonstration purposes, representing two populations: mean = 0, sd = 0.3 mean = 1, sd = 0.3 # nice colors for later col.set <- brewer.pal(9, 'Set1') # 2D example x <- rbind( matrix(rnorm(100, mean = 0, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2) ) colnames(x) <- c("x", "y") 3.3.8.1 Hard Classes 3.3.8.1.1 K-Means It is important to note that the k-means algorithm is sensitive to the initial selection of centroid locations (typically random). The default behavior of the kmeans() function does not attempt to correct for this limitation. Note that cluster assignment and centroid vary across runs (panels in the figure below). par(mfrow=c(3,3), mar=c(1,1,1,1)) for(i in 1:9) { cl <- kmeans(x, centers=3) plot(x, col = col.set[cl$cluster], axes=FALSE) grid() points(cl$centers, col = col.set, pch = 8, cex = 2, lwd=2) box() } Setting the nstart argument (“number of random starts”) to a value great than 1 (10 is ideal) will ensure that the final clustering configuration will remain stable between runs. Note that the cluster ID (color) will vary between runs, however, with nstart=10 the overall configuration remains the same. par(mfrow=c(3,3), mar=c(1,1,1,1)) for(i in 1:9) { cl <- kmeans(x, centers=3, nstart = 10, iter.max = 100) plot(x, col = col.set[cl$cluster], axes=FALSE) grid() points(cl$centers, col = col.set, pch = 8, cex = 2, lwd=2) box() } 3.3.8.1.2 K-Medoids The cluster package provides two interfaces to the k-medoids algorithm: pam(): small to medium sized data sets clara(): optmized for larger data sets A quick example of using pam() to identify an increasing number of clusters. par(mfrow=c(2,3), mar=c(1,1,1,1)) for(i in 2:7) { cl <- pam(x, k = i, stand = TRUE) plot(x, col = col.set[cl$clustering], axes=FALSE) grid() points(cl$medoids, col = col.set, pch = 0, cex = 2, lwd=2) box() } 3.3.8.2 Fuzzy Clusters Clustering results are in the form of class membership; values ranging between 0 and 1. This means that group membership is a continuum vs. the “hard” classes assigned by k-means or k-medoids. The “mixture” of class membership in the example below is conveniently expressed using proportions of red, green, and blue (sRGB color coordinates). # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4.std <- data.frame(sp4[, c('id', 'name', 'top', 'bottom')], scale( sp4[, c('Mg', 'Ca')])) # perform fuzzy clustering cl <- fanny(sp4.std[, c('Mg', 'Ca')], k = 3, stand = FALSE) # get membership matrix m <- cl$membership # convert to colors by interpreting membership as sRGB proportions cols <- rgb(m) # use Shannon H to set symbol size H <- apply(m, 1, shannonEntropy) # larger H -> smaller symbols pt.cex <- (1/H) * 2.5 # setup plot par(mar=c(4, 4, 3, 0.5)) plot(sp4.std$Mg, sp4.std$Ca, asp=1, ylab='Exchangeable Mg (cmol/kg), Standardized', xlab='Exchangeable Ca (cmol/kg), Standardized', type='n') abline(h=0, v=0, col='black') grid() # add original obs points(sp4.std$Mg, sp4.std$Ca, bg=cols, col='black', cex = pt.cex, pch = 21) # annotate with Dunn's fuzzy coeff mtext(sprintf("Dunn's partition coefficient: %s", round(cl$coeff[1], 2)), line = 1, cex = 1.5) Save the RGB color representation of cluster membership to the source data.frame and convert to SoilProfileCollection. sp4.std$colors <- cols depths(sp4.std) <- id ~ top + bottom par(mar=c(0, 0, 0, 0)) plot(sp4.std, color='colors', cex.names=0.75) title('Fuzzy Clustering Results in Context', line=-1) From the source: Of the 11 parent materials, 9 were serpentinites. The parent materials in Napa and Tehama Counties were quite different from each other and from those of the nine other sites. Neither had parent rock that contained serpentine minerals. They were, therefore, not serpentinites. The Napa County parent material contained dominantly vermiculite and albite and had minor amounts of Ca-bearing clino-pyroxene. The Tehama County parent material was dominated by grossularite, which is a calcsilicate ugrandite garnet, and had subdominant amounts of the Ca-bearing sorosilicate, pumpellyite, and Ca-bearing clinopyroxene. The rocks from the Shasta and Kings County sites were serpentinite, dominated by serpentine minerals. They had minor amounts of Ca-bearing accessory minerals (calcic clinoamphibole [tremolite] and calcsilicate ugrandite garnet [andradite]). The seven other parent materials were serpentinites and exhibited, at most, trace amounts of Ca-bearing minerals. 3.3.8.3 How Many Clusters? There is no simple answer to the question “How many clusters are in my data?” Some metrics, however, can be used to help estimate a “reasonable” number of clusters. The mean silhouette width is a useful index of “cluster compactness” relative to neighbor clusters (Rousseeuw 1987). Larger silhouette widths suggest tighter grouping. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4.std <- data.frame(sp4[, c('id', 'name', 'top', 'bottom')], scale( sp4[, c('Mg', 'Ca')])) # perform hard clustering sil.widths <- vector(mode='numeric') for(i in 2:10) { cl <- pam(sp4.std[, c('Mg', 'Ca')], k = i, stand = FALSE) sil.widths[i] <- cl$silinfo$avg.width } par(mar=c(4,4,3,1)) plot(sil.widths, type='b', xlab='Number of Clusters', ylab='Average Silhouette Width', las=1, lwd=2, col='RoyalBlue', cex=1.25, main='Finding the "Right" Number of Clusters') grid() According to this metric, it looks like 3 clusters is reasonable. Again, this is a judgement call–most decisions related to clustering algorithm selection and the “optimal number of clusters” are somewhat subjective. # perform fuzzy clustering cl <- pam(sp4.std[, c('Mg', 'Ca')], k = 3, stand = FALSE) # setup plot par(mar=c(4,4,0,0)) plot(sp4.std$Mg, sp4.std$Ca, asp=1, ylab='Exchangeable Mg (cmol/kg), Standardized', xlab='Exchangeable Ca (cmol/kg), Standardized', type='n') abline(h=0, v=0, col='black') grid() # add original obs points(sp4.std$Mg, sp4.std$Ca, bg=cl$clustering, col='black', cex=1.25, pch=21) 3.3.8.4 Cross-Entropy Clustering https://swarm-lab.github.io/cec/ 3.3.9 Ordination 3.3.9.1 Principal Component Analysis A simple, constrained ordination based on variance. This method does not use the distance matrix, rather it seeks to find a new set of axes that describe maximum variance via linear combinations of characteristics. Standardization is essential. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] sp4.scaled <- data.frame(name=sp4[, 1], round(scale( sp4[, -1]), 2)) # PCA # note that we are leaving out the first column: the horizon names # note the syntax used to extract the principal components # note that PCA doesn't use the distance matrix pca <- predict(princomp(sp4.scaled[, -1])) ## perform clustering to highlight structure in the PCA # distance matrix d <- dist(sp4.scaled[, -1]) m <- as.matrix(d) dimnames(m) <- list(sp4.scaled$name, sp4.scaled$name) d <- as.dist(m) # dendrogram from divisive clustering dd <- diana(d) h <- as.hclust(dd) p <- as.phylo(h) # define colors based on cutting a divisive hierarchical clustering into 4 groups cols <- brewer.pal(9, 'Set1')[cutree(h, 4)] # plot first 2 PC plot(pca[, 1:2], asp=1, type='n', axes=FALSE, xlab='', ylab='', main="Principal Components 1 and 2") grid() text(pca[, 1:2], sp4.scaled$name, cex=0.75, col=cols, font=2) box() 3.3.9.2 Sammon’s Non-linear Mapping Simple interface to nMDS, input is a distance matrix. Note that this algorithm will fail if there are 0’s or ties within the distance matrix. See ?sammon for details. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] sp4.scaled <- data.frame(name=sp4[, 1], round(scale( sp4[, -1]), 2)) # distance matrix d <- dist(sp4.scaled[, -1]) m <- as.matrix(d) dimnames(m) <- list(sp4.scaled$name, sp4.scaled$name) d <- as.dist(m) # dendrogram from divisive clustering dd <- diana(d) h <- as.hclust(dd) p <- as.phylo(h) # define colors based on cutting a divisive hierarchical clustering into 4 groups cols <- brewer.pal(9, 'Set1')[cutree(h, 4)] # nMDS from distance matrix s <- sammon(d) # plot par(mar=c(3,1,3,1)) plot(s$points, asp=1, type='n', axes=FALSE, xlab='', ylab='', main="nMDS by Sammon's Non-Linear Mapping") # abline(v=0, h=0, col='black') grid() text(s$points, rownames(s$points), cex=0.75, col=cols, font=2) box() 3.3.9.3 nMDS with the vegan Package The following example is quite brief. See the Introduction to ordination in vegan vignette for some excellent worked examples and ecological interpretation. The vegan package FAQ is another excellent resource. Numerical Ecology with R can be used as both reference and learning resource. The metaMDS() function from the vegan package provides a convenience function that automates most of the steps required to create an oridination. # re-make data, this time with all profiles data('sp4', package = 'aqp') sp4 <- sp4[, c('name', 'clay', 'sand', 'Mg', 'Ca', 'CEC_7')] sp4.scaled <- data.frame(name=sp4[, 1], round(scale( sp4[, -1]), 2)) # define colors based on natural groupings cols <- brewer.pal(9, 'Set1') # distance calc + ordination s <- metaMDS(sp4.scaled[, -1], distance = 'gower', autotransform = FALSE, wascores=FALSE) ## this is used to generate 4 classes from a divisive hierarchical clustering # manually compute distance matrix d <- dist(sp4.scaled[, -1]) m <- as.matrix(d) dimnames(m) <- list(sp4.scaled$name, sp4.scaled$name) d <- as.dist(m) # dendrogram from divisive clustering dd <- diana(d) h <- as.hclust(dd) # define colors based on cutting a divisive hierarchical clustering into 4 groups cols <- brewer.pal(9, 'Set1')[cutree(h, 4)] # plot ordination par(mar=c(3,1,3,1)) fig <- ordiplot(s, type='none', cex.axis=0.75, axes=FALSE, xlab='', ylab='', main='nMDS by metaMDS()') abline(h=0, v=0, lty=2, col='grey') text(fig$sites, sp4$name, cex=0.75, font=2, col=cols) box() It is also possible to annotate an ordination using information from a hierarchical clustering via vegan::ordicluster. par(mfcol = c(1, 2), mar=c(3,1,3,1)) fig <- ordiplot(s, type='none', cex.axis=0.75, axes=FALSE, xlab='', ylab='', main='nMDS by metaMDS()') abline(h=0, v=0, lty=2, col='grey') text(fig$sites, sp4$name, cex=0.75, font=2, col=cols) # annotate with hierarchical clustering ordicluster(fig, h, prune=3, col = "black") box() p <- as.phylo(h) plot(p, cex = 0.66, label.offset = 0.5) tiplabels(, pch = 15, col = cols) Goodness of nMDS fit at each point (scaled and sqrt-transformed). Smaller symbols suggest better fit. pt.cex <- sqrt(goodness(s) * 50) par(mar=c(3,1,3,1)) fig <- ordiplot(s, type='none', cex.axis=0.75, axes=FALSE, xlab='', ylab='', main='nMDS by metaMDS()') abline(h=0, v=0, lty=2, col='grey') text(fig$sites, sp4$name, font=2, col=cols, cex = pt.cex) # ordicluster(fig, agnes(daisy(sp4.scaled[, -1]), method='ward'), prune=3, col = "orange") box() The Shepard diagram (stress plot) is used to assess the quality of a nMDS ordination. There should be as little scatter as possible in this diagram. stressplot(s) 3.3.9.4 nMDS of Very Large Data Ordination by nMDS of very large data (> 1,000 records) requires special methods. https://cran.r-project.org/web/packages/bigmds/bigmds.pdf nMDS representation of all RMF (moist) colors described in NASIS. 3.4 Practical Applications Before you work through the following examples, you should review the SoilProfileCollection object tutorial. 3.4.1 Pair-Wise Distances Between Soil Profiles # init example data data(sp4) depths(sp4) <- id ~ top + bottom # eval dissimilarity: # using Ex-Ca:Mg and CEC at pH 7 # with no depth-weighting (k=0) # to a maximum depth of 40 cm d <- NCSP(sp4, vars=c('ex_Ca_to_Mg', 'CEC_7'), k = 0, maxDepth = 40) # check distance matrix: round(d, 1) ## colusa glenn kings mariposa mendocino napa san benito shasta ## glenn 13.8 ## kings 16.0 13.1 ## mariposa 8.4 11.6 16.5 ## mendocino 12.1 8.2 17.0 15.5 ## napa 31.5 24.9 30.5 30.3 22.2 ## san benito 26.8 21.4 27.4 29.3 16.4 18.0 ## shasta 17.2 13.6 8.7 17.6 17.6 34.8 23.3 ## shasta-trinity 6.4 16.9 22.3 9.6 17.0 30.9 28.3 23.3 ## tehama 30.1 23.9 29.2 28.6 20.8 9.0 15.3 32.7 ## shasta-trinity ## glenn ## kings ## mariposa ## mendocino ## napa ## san benito ## shasta ## shasta-trinity ## tehama 29.2 # cluster via divisive method clust <- diana(d) # visualize dissimilarity matrix via hierarchical clustering par(mar=c(0,0,3,1)) plotProfileDendrogram(sp4, clust, dend.y.scale = 50, scaling.factor = 0.66, y.offset = 3.5, width=0.3, cex.names = 0.7, color='ex_Ca_to_Mg', col.label='Exchageable Ca to Mg Ratio', name.style = 'center-center') 3.4.2 Pair-Wise Distances Between Soil Series The following figures are related to some of the graphical summaries provided by SoilWeb/SDE. These related tutorials cover similar material in greater detail: Competing Soil Series Querying Soil Series Data The fetchOSD function can return additional summaries tabulated from climate data, MLRA boundaries, SSURGO, and much more with the extended=TRUE argument. Lets experiment with distances computed from annual climate data and hillslope position. # soil series from around CONUS soils <- c('redding', 'pentz', 'willows', 'yolo', 'hanford', 'cecil', 'sycamore', 'KLAMATH', 'drummer', 'musick', 'zook') s <- fetchOSD(soils, extended = TRUE) # note additional data, packed into a list str(s, 1) ## List of 18 ## $ SPC :Formal class 'SoilProfileCollection' [package "aqp"] with 9 slots ## $ competing :'data.frame': 57 obs. of 3 variables: ## $ geog_assoc_soils:'data.frame': 83 obs. of 2 variables: ## $ geomcomp :'data.frame': 9 obs. of 9 variables: ## $ hillpos :'data.frame': 10 obs. of 8 variables: ## $ mtnpos :'data.frame': 2 obs. of 9 variables: ## $ terrace :'data.frame': 9 obs. of 5 variables: ## $ flats :'data.frame': 7 obs. of 7 variables: ## $ shape_across :'data.frame': 11 obs. of 8 variables: ## $ shape_down :'data.frame': 11 obs. of 8 variables: ## $ pmkind :'data.frame': 19 obs. of 5 variables: ## $ pmorigin :'data.frame': 44 obs. of 5 variables: ## $ mlra :'data.frame': 67 obs. of 4 variables: ## $ ecoclassid :'data.frame': 97 obs. of 5 variables: ## $ climate.annual :'data.frame': 88 obs. of 12 variables: ## $ climate.monthly :'data.frame': 264 obs. of 14 variables: ## $ NCCPI :'data.frame': 11 obs. of 16 variables: ## $ soilweb.metadata:'data.frame': 24 obs. of 2 variables: 3.4.2.1 Annual Climate Data The vizAnnualClimate function (sharpshootR package) arranges percentiles of annual climate summaries according to divisive hierarchical clustering applied to median values. Climate summaries were derived from 800m, daily PRISM data spanning 1981-2010. # control color like this trellis.par.set(plot.line=list(col='RoyalBlue')) # control centers symbol and size here res <- vizAnnualClimate(s$climate.annual, IQR.cex = 1.25, cex=1.1, pch=18) # plot figure, this is Lattice graphics print(res$fig) # do something with clustering par(mar=c(0,0,1,0)) # usually requires tinkering... plotProfileDendrogram(s$SPC, clust = res$clust, scaling.factor = 0.05, width = 0.3, y.offset = 1.3, name.style = 'center-center', cex.names = 0.75, hz.depths = TRUE, plot.depth.axis = FALSE, fixLabelCollisions = TRUE, hz.depths.offset = 0.05) mtext('sorted by annual climate summaries', side = 3, at = 0.5, adj = 0, line = -1.5, font=3) 3.4.2.2 Hillslope Position The vizHillslopePosition function (sharpshootR package) arranges hillslope position proportions (SSURGO) according to divisive hierarchical clustering. Proportions are used as characteristics for each soil series. The branches of the dendrogram are rotated so that ordering within the figure approximates the hydrologic gradient as closely as possible. Rotation is performed by the dendextend::rotate function. # result is a lattice graphics object res <- vizHillslopePosition(s$hillpos) print(res$fig) 3.4.3 Pair-Wise Distances Between Subgroup-Level Taxa The following are demonstrations of pair-wise distances computed from categorical data and the use of a dendrogram to organize groups from Soil Taxonomy. Click here for details. # define a vector of series s.list <- c('amador', 'redding', 'pentz', 'pardee', 'yolo', 'hanford', 'cecil', 'sycamore', 'KLAMATH', 'MOGLIA', 'drummer', 'musick', 'zook', 'argonaut', 'PALAU') # get and SPC object with basic data on these series s <- fetchOSD(s.list) # graphical check par(mar=c(0,0,2,1)) plotSPC(s, cex.names = 0.55, width = 0.3, name.style = 'center-center', shrink = TRUE, cex.depth.axis = 0.8) title('Selected Pedons from Official Series Descriptions', line=0) # check structure of some site-level attributes # head(site(s))[, c('id', 'soilorder', 'suborder', 'greatgroup', 'subgroup')]) id soilorder suborder greatgroup subgroup AMADOR inceptisols xerepts haploxerepts typic haploxerepts ARGONAUT alfisols xeralfs haploxeralfs mollic haploxeralfs CECIL ultisols udults kanhapludults typic kanhapludults DRUMMER mollisols aquolls endoaquolls typic endoaquolls HANFORD entisols orthents xerorthents typic xerorthents KLAMATH mollisols aquolls cryaquolls cumulic cryaquolls par(mar=c(0,1,1,2)) # plot dendrogram + profiles d <- SoilTaxonomyDendrogram( s, cex.taxon.labels = 0.75, scaling.factor = 0.01, width = 0.3, cex.names = 0.55, shrink = TRUE, axis.line.offset = -3, cex.depth.axis = 0.75 ) Check the resulting distance matrix. print(d) 3.4.4 Soil Color Signatures See this related tutorial for additional examples. 3.4.5 Clustering of Soil Colors Just for fun, use hierarchical clustering and nMDS on soil color data from the OSDs that were used in the previous example. # extract horizon data from select OSDs in above example h <- horizons(s) # convert Munsell color notation to sRGB # these are moist colors rgb.data <- munsell2rgb(h$hue, h$value, h$chroma, return_triplets = TRUE) lab.data <- munsell2rgb(h$hue, h$value, h$chroma, returnLAB = TRUE) # check head(rgb.data) ## r g b ## 1 0.4324796 0.3675617 0.29440648 ## 2 0.5564942 0.4652309 0.35498054 ## 3 0.5564942 0.4652309 0.35498054 ## 4 0.7708844 0.6765034 0.48926139 ## 5 0.3876272 0.2456471 0.16366245 ## 6 0.4240408 0.2286641 0.09553195 head(lab.data) ## L A B ## 1 40.91415 3.659798 13.21994 ## 2 51.40323 4.854561 18.89452 ## 3 51.40323 4.854561 18.89452 ## 4 71.57199 1.917442 27.79933 ## 5 30.26102 13.393855 19.32450 ## 6 30.27183 19.090733 29.87009 # remove NA rgb.data <- na.omit(rgb.data) lab.data <- na.omit(lab.data) # retain unique colors rgb.data <- unique(rgb.data) lab.data <- unique(lab.data) # visualize colors in LAB coordinates pairs(lab.data, col='white', bg=rgb(rgb.data), pch=21, cex=2) # create distance matrix from LAB coordinates d <- daisy(lab.data, stand=FALSE) # divisive heirarcical clustering d.hclust <- as.hclust(diana(d)) # convert to phylo class for nicer plotting p <- as.phylo(d.hclust) # perform nMDS on distance matrix d.sammon <- sammon(d) # setup multi-figure page par(mfcol=c(1,2), mar=c(0,0,2,0), bg=grey(0.95)) # plot fan-style dendrogram plot(p, font=2, cex=0.5, type='fan', show.tip.label=FALSE, main='Dendrogram Representation') # add colors at dendrogram tips tiplabels(pch=21, cex=4, col='white', bg=rgb(rgb.data)) # plot nMDS ordination plot(d.sammon$points, type='n', axes=FALSE, xlab='', ylab='', asp=1, main='nMDS Ordination') abline(h=0, v=0, col='black', lty=3) points(d.sammon$points, bg=rgb(rgb.data), pch=21, cex=3.5, col='white') 3.4.6 “How Do the Interpretations Compare?” Example borrowed from this tutorial. library(reshape2) # set list of component names, same as soil color example s.list <- c('amador', 'redding', 'pentz', 'willows', 'pardee', 'yolo', 'hanford', 'cecil', 'sycamore', 'zook') # get OSD details s <- fetchOSD(soils = s.list) # set list of relevant interpretations interp.list <- c('ENG - Construction Materials; Topsoil', 'ENG - Sewage Lagoons', 'ENG - Septic Tank Absorption Fields', 'ENG - Unpaved Local Roads and Streets') # compose query q <- paste0("SELECT UPPER(compname) as compname, mrulename, AVG(interplr) as interplr_mean FROM component INNER JOIN cointerp ON component.cokey = cointerp.cokey WHERE compname IN ", format_SQL_in_statement(s.list), " AND seqnum = 0 AND mrulename IN ", format_SQL_in_statement(interp.list), " AND interplr IS NOT NULL GROUP BY compname, mrulename;") # send query x <- SDA_query(q) # reshape long -> wide x.wide <- dcast(x, compname ~ mrulename, value.var = 'interplr_mean') kable_styling(knitr::kable(x.wide, digits = 2, caption="Mean Fuzzy Ratings for Select Soil Series"), font_size = 10) Table 3.1: Mean Fuzzy Ratings for Select Soil Series compname ENG - Construction Materials; Topsoil ENG - Septic Tank Absorption Fields ENG - Sewage Lagoons ENG - Unpaved Local Roads and Streets AMADOR 0.00 1.00 1.00 0.69 CECIL 0.41 0.66 0.85 0.30 HANFORD 0.69 0.99 0.87 0.21 PARDEE 0.00 1.00 1.00 1.00 PENTZ 0.00 1.00 1.00 0.71 REDDING 0.02 1.00 1.00 0.80 SYCAMORE 0.82 1.00 0.76 0.78 WILLOWS 0.00 1.00 0.95 1.00 YOLO 0.85 0.90 0.61 0.61 ZOOK 0.00 1.00 1.00 1.00 # note: component name and series name have been converted to upper case # sort rows of fuzzy ratings based on profiles from OSDs new.order <- match(x.wide$compname, profile_id(s)) x.wide <- x.wide[new.order, ] # copy ids to row.names so that they are preserved in distance matrix row.names(x.wide) <- x.wide$compname # create distance matrix d <- daisy(x.wide[, -1]) # divisive hierarchical clustering clust <- diana(d) par(mar=c(2,0,2,0)) plotProfileDendrogram(s, clust, dend.y.scale = 2, scaling.factor = 0.007, y.offset = 0.15, width=0.3, cex.names = 0.55, name.style = 'center-center', axis.line.offset = -3) title('Component Similarity via Select Fuzzy Ratings') mtext('Profile Sketches are from OSDs', 1) 3.4.7 MLRA Concepts via Climate and Elevation Samples Get and process example data, originally sampled from PRISM raster and DEM within MLRA 15, 18, 22A, and 22B. Variables include: elevation mean annual air temperature mean annuap precipitation fraction of annual precipitation as rain effective precipitation frost-free days growing degree days library(MASS) library(vegan) library(cluster) library(RColorBrewer) # get example data # init a temp file tf <- tempfile() # download compressed CSV to temp file download.file('https://github.com/ncss-tech/stats_for_soil_survey/raw/master/data/clustering_and_ordination/MLRA-raster-data-example.csv.gz', destfile = tf, quiet = TRUE) # read-in from compressed CSV to data.frame object d.sub <- read.csv(gzfile(tf), stringsAsFactors = FALSE) # check: note that the column names are quite strange head(d.sub) # set factor levels mu.set <- c('15', '18', '22A', '22B') d.sub$.id <- factor(d.sub$.id, levels = mu.set) # define some nice colors cols <- brewer.pal(9, 'Set1') # remove light colors cols <- cols[c(1:5,7,9)] 3.4.7.1 Nonmetric Multidimensional Scaling A smooh surface fit to mean annual air temperature highlights structure within a nMDS ordination. m <- metaMDS(d.sub[, -c(1:3)], distance = 'gower') # margins par(mar=c(1,1,3,1)) # setup plot o <- ordiplot(m, type='n', axes=FALSE) # add points, colored accoring to MLRA points(o, 'sites', cex=1, col=cols[as.numeric(d.sub$.id)], pch=16) # overlay smooth surface of variable used in ordination ordisurf(m, d.sub$Mean.Annual.Air.Temperature..degrees.C., add=TRUE, col='black', labcex=1) legend('topleft', legend=mu.set, pch=16, col=cols, bty='n', cex=1.25) title('nMDS with mean annual air temperature (deg C) surface') box() 3.4.7.2 Principle Coordinates This example generates an ordination (via principal coordinates) of environmental variables (PRSIM and elevation) associated with MLRAs 15, 18, 22A, and 22B. Ellipses represent 50% probability contours via multivariate homogeneity of group dispersions. See comments in the code for details. Note that this example was extracted from the Region 2 Map Unit Comparison Report. Thoughts on interpretation: The relative position of points and ellipses are meaningful; absolute position will vary each time the figure is generated. Look for “diffuse” vs. “concentrated” clusters: these suggest relatively broadly vs. narrowly defined concepts. Nesting of clusters (e.g. smaller cluster contained by larger cluster) suggests super-set/subset relationships. Overlap is proportional to similarity. ## NOTE: data with very low variability will cause warnings # eval numerical distance, removing first 3 columns of IDs d.dist <- daisy(d.sub[, -c(1:3)], stand=TRUE) ## map distance matrix to 2D space via principal coordinates d.betadisper <- betadisper(d.dist, group=d.sub$.id, bias.adjust = TRUE, sqrt.dist = FALSE, type='median') ## fancy plot plot( d.betadisper, hull=FALSE, ellipse=TRUE, conf=0.5, col=cols, main='Ordination of Raster Samples\\n50% Probability Ellipse', sub='MLRA 15, 18, 22A, 22B' ) Pair-wise comparisons at the 90% level of confidence. ## pair-wise comparisons of variance par(mar=c(4.5, 5.5, 4.5, 1)) plot(TukeyHSD(d.betadisper, conf.level = 0.9), las=1) This document is based on aqp version 2.0.3 and soilDB version 2.8.1 and sharpshootR version 2.2. References "],["linear-regression.html", "Chapter 4 Linear Regression 4.1 Introduction 4.2 Linear Regression Example 4.3 Data 4.4 Spatial data 4.5 Exploratory Data Analysis (EDA) 4.6 Linear modeling 4.7 Generate spatial predictions 4.8 Create Map 4.9 Exercise 4.10 Additional reading", " Chapter 4 Linear Regression Statistics for Soil Survey course banner image 4.1 Introduction Linear regression models the linear relationship between a response variable (y) and an predictor variable (x). \\(y = \\alpha + \\beta x + e\\) Where: \\(y\\) = the dependent variable \\(\\alpha\\) = the intercept of the fitted line \\(\\beta\\) = the Regression coefficient, i.e. slope of the fitted line. Strong relationships will have high values. \\(x\\) = the independent variable (aka explanatory or predictor variable(s) ) \\(e\\) = the error term Linear regression has been used for soil survey applications since the early 1900s when Briggs, McLane, and United States. Bureau of Soils (1907) developed a pedotransfer function to estimate the wilting coefficient as a function of soil particle size. Wilting coefficient = 0.01(sand) + 0.12(silt) + 0.57(clay) When more than one independent variable is used in the regression, it is referred to as multiple linear regression. In regression models, the response (or dependent) variable must always be continuous. The predictor (or independent) variable(s) can be continuous or categorical. In order to use linear regression or any linear model, the errors (i.e. residuals) must be normally distributed. Most environmental data are skewed and require transformations to the response variable (such as square root or log) for use in linear models. Normality can be assessed using a QQ plot or histogram of the residuals. 4.2 Linear Regression Example Now that we’ve got some of the basic theory out of the way we’ll move on to a real example, and address any additional theory where it relates to specific steps in the modeling process. The example selected for this chapter comes from the Mojave desert. The landscape is composed primarily of closed basins ringed by granitic hills and mountains (Peterson, 1981). The problem tackled here is modeling mean annual air temperature as a function of PRISM, digital elevation model (DEM) and Landsat derivatives. This climate study began in 1998 as part of a national study run by the National Lab and led by Henry Mount (Mount and Paetzold 2002). The objective was to determine if the hyperthermic line was consistent across the southern US, which at the time was thought to be ~3000 in elevation. Up until 2015 their were 77 active MAST sites, and 12 SCAN sites throughout MLRA 30 and 31. For more details see the “MLRA 30 - Soil Climate Study - Soil Temperature” project in NASIS, on GitHub, or by (Roecker and Carrie-Ann Haydu-Houdeshell 2012). library(soilDB) prj <- get_project_from_NASISWebReport(mlrassoarea = "8-VIC", fiscalyear = 2015) ## Loading required namespace: rvest subset(prj, projectname == "MLRA 30 - Soil Climate Study - Soil Temperature") ## mlrassoarea nonmlrassaarea mlraarea projecttypename projectsubtypename ## 4 8-VIC <NA> 30 MLRA <NA> ## fiscalyear fiscalyear_goaled projectiid uprojectid ## 4 2015 2015 95689 0000-VIC-Soil Climate Studies-001 ## projectname projectapprovedflag ## 4 MLRA 30 - Soil Climate Study - Soil Temperature TRUE ## projectconcerntypename ## 4 <NA> ## projectdesc ## 4 8-VIC, Victorville, CA MLRA Soil Survey Office\\r\\nSoil Climate Study Plan \\r\\nProject Outline Worksheet \\r\\n\\r\\nProject Name: MLRA 30 and 31 - Soil Climate Study Plan\\r\\n\\r\\nIdentification \\r\\nState/s: CA and NV (proposed to add in AZ as well)\\r\\nMLRAs: 30 and 31\\r\\nPlan Author: Carrie-Ann Houdeshell, MLRA SSPL and Stephen Roecker Soil Scientist\\r\\nRegional Office Staff: \\r\\nDavis, CA: Ed Tallyn, Senior Regional Soil Scientist; Jennifer Wood, Soil Data Quality Specialist\\r\\nPhoenix, AZ: Nathan Starman, Soil Data Quality Specialist\\r\\nArea Office Staff: Peter Fahnestock, Area Resource Soil Scientist\\r\\n\\r\\nProject Contact Person(s) \\r\\nName: Carrie-Ann Houdeshell or Stephen Roecker\\r\\naddress: 15415 W. Sand St. #103, Victorville, CA 92392\\r\\nphone: (760) 843-6882\\r\\nemail: Carrie-Ann.Houdeshell@ca.usda.gov or Stephen.Roecker@ca.usda.gov\\r\\n\\r\\nProject Objective(s) \\r\\nThe original objective of this study was to determine the thermic/hyperthermic boundary across MLRA 30. Currently the primary objective is to estimate soil tempe... ## n_projectdesc n_areasymbol n_nationalmusym n_spatial date_start date_complete ## 4 13724 NA NA NA <NA> <NA> ## date_qc date_qa_start date_qa_complete date_qc_spatial date_qa_spatial ## 4 <NA> <NA> <NA> <NA> <NA> ## pl_username qa_username muacres acre_landcat acre_goal acre_progress ## 4 Ballmer, Matthew <NA> NA NA 0 0 ## pct_progress muacres_water acre_water acre_prog_water acre_federal ## 4 NA NA NA NA NA ## acre_prog_federal acre_private acre_prog_private acre_native acre_prog_native ## 4 NA NA NA NA NA In addition to the 11-IND MAST modeling efforts there has also been two published studies on the Mojave. The first was by Schmidlin, Peterson, and Gifford (1983) who examined both the Great Basin and Mojave Deserts in Nevada. The second was by Bai et al. (2010) who examined the Mojave Desert in California. Both studies developed regression models using elevation, but Schmidlin, Peterson, and Gifford (1983) also incorporated latitude. The results from Bai et al. (2010) displayed considerably larger areas of hyperthermic soils than Schmidlin, Peterson, and Gifford (1983). This made be due to the unconventional method used by Bai et al. (2010) to measure MAST. 4.3 Data 4.3.1 Henry Mount Database The Henry Mount Database already has 79 of the sites from the Mojave. However only 8 have temperature records. f <- fetchHenry(sso = "8-VIC") length(unique(f$sensors$user_site_id)) ## computing un-biased soil temperature summaries ## 79 sensors loaded (1.89 Mb transferred) 4.3.2 Aggregate Time Series For our purposes the daily soil temperature measurements need to be aggregated to the mean annual soil temperature (MAST). However, depending data you query using, fetchHenry() maybe able to return pre-aggregated results using the gran function argument. library(dplyr) library(tidyr) library(ggplot2) # extract the site and sensor data frames from the list ms_df <- f$soiltemp s <- f$sensors # rename 2 columns ms_df <- mutate( ms_df, day = date_time, Jday = doy ) # Plot sites visually inspect for flat lines and spikes ms_df %>% filter(name == "JVOHV2-50") %>% ggplot(aes(x = day, y = sensor_value)) + geom_line() ## Warning: Removed 649 rows containing missing values (`geom_line()`). # Aggregate by Year, Month, and Julian day (i.e. 1-365, 366 for leap years) # compute number of days per site ms_n_df <- ms_df %>% group_by(sid, day) %>% summarise(mast = mean(sensor_value, na.exclude = TRUE)) %>% group_by(sid) %>% summarise(numDays = sum(!is.na(mast)), ) %>% ungroup() ## `summarise()` has grouped output by 'sid'. You can override using the `.groups` ## argument. # compute mast per year ms_site_df <- ms_df %>% group_by(sid, Jday) %>% summarise(mast = mean(sensor_value, na.rm = TRUE)) %>% group_by(sid) %>% summarise(mast = mean(mast, na.rm = TRUE)) %>% ungroup() ## `summarise()` has grouped output by 'sid'. You can override using the `.groups` ## argument. # merge mast & numDays mast_df <- as.data.frame(s) %>% select(name, sid, sensor_depth, geometry) %>% left_join(ms_site_df, by = "sid") %>% left_join(ms_n_df, by = "sid") %>% filter(sensor_depth == 50 & !is.na(mast)) head(mast_df) ## name sid sensor_depth geometry mast numDays ## 1 JTNP15 923 50 POINT (-116.01 34.02) 19.97123 321 ## 2 JAWBONE01 903 50 POINT (-117.99 35.5) 19.40847 3742 ## 3 JAWBONE02 972 50 POINT (-118.14 35.5) 19.27930 3063 ## 4 JVOHV1 924 50 POINT (-116.47 34.52) 21.89822 4461 ## 5 JVOHV2 925 50 POINT (-116.64 34.52) 21.13497 4091 ## 6 DEVA01 971 50 POINT (-116.9 36.3) 28.20590 253 Note that we have a column in result data.frame called \"geometry\" since we created it from an sf object. 4.3.3 Final Dataset Since the Henry Mount database is partially incomplete we will proceed with the aggregation from the original txt files. # Read mast data githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/mast_mojave.Rdata") load(githubURL) 4.4 Spatial data 4.4.1 Plot Coordinates Where do our points plot? To start we need to convert them to a spatial object first. Then we can create an interactive we map using mapview. Also, if we wish we can also export the locations as a Shapefile. # plot mapview(mlra, alpha.region = 0, lwd = 2) + mapview(mast_sf) 4.4.2 Extracting Spatial Data Prior to any spatial analysis or modeling, you will need to develop a suite of geodata files that can be intersected with your field data locations. This is, in and of itself a difficult task and should be facilitated by your Regional GIS Specialist. The geodata files typically used would consist of derivatives from a DEM or satellite imagery, and a ‘good’ geology map. Prior to any prediction it is also necessary to ensure the geodata files have the same projection, extent, and cell size. Once we have the necessary files we can construct a list in R of the file names and paths, read the geodata into R, and then extract the geodata values where they intersect with field data. As you can see below their are numerous variables we could inspect. library(raster) ## Warning: package 'raster' was built under R version 4.3.2 ## Loading required package: sp ## Warning: package 'sp' was built under R version 4.3.2 ## ## Attaching package: 'raster' ## The following object is masked from 'package:dplyr': ## ## select library(sf) # load raster stack from GitHub githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/mast_mojave_rs.rds") geodata_r <- readRDS(githubURL) # Extract the geodata and add to a data frame mast_sf <- st_transform(mast_sf, crs = 5070) data <- raster::extract(geodata_r, st_coordinates(mast_sf)) data <- cbind(st_drop_geometry(mast_sf), data) # convert aspect data$northness <- abs(180 - data$aspect) # random sample vars <- c("elev", "temp", "precip", "solar", "tc_1", "twi") idx <- which(names(geodata_r) %in% vars) geodata_s <- sampleRegular(geodata_r[[idx]], size = 1000) 4.5 Exploratory Data Analysis (EDA) Generally before we begin modeling it is good to explore the data. By examining a simple summary we can quickly see the breakdown of our data. It is important to look out for missing or improbable values. Probably the easiest way to identify peculiarities in the data is to plot it. summary(data) ## siteid mast numDays elev slope ## Cheme01 : 1 Min. : 3.10 Min. : 363 Min. : 0.0 Min. : 0.00 ## Clark01 : 1 1st Qu.:18.50 1st Qu.:1831 1st Qu.: 699.2 1st Qu.: 2.00 ## DEVA01 : 1 Median :20.57 Median :2918 Median : 947.5 Median : 5.00 ## DEVA02 : 1 Mean :19.93 Mean :2465 Mean :1082.0 Mean :11.85 ## DEVA03 : 1 3rd Qu.:23.72 3rd Qu.:3397 3rd Qu.:1480.2 3rd Qu.:21.00 ## Jawbone01: 1 Max. :28.77 Max. :4159 Max. :3021.0 Max. :42.00 ## (Other) :62 ## aspect twi solar solarcv ## Min. : 6.00 Min. : 8.00 Min. :1758 Min. :21.00 ## 1st Qu.: 90.25 1st Qu.: 9.25 1st Qu.:2028 1st Qu.:31.00 ## Median :140.00 Median :12.00 Median :2091 Median :32.50 ## Mean :143.62 Mean :12.00 Mean :2084 Mean :32.66 ## 3rd Qu.:196.00 3rd Qu.:14.00 3rd Qu.:2136 3rd Qu.:33.25 ## Max. :333.00 Max. :21.00 Max. :2443 Max. :44.00 ## NA's :2 ## tc_1 tc_2 tc_3 precip ## Min. : 58.00 Min. : 26.00 Min. : 2.00 Min. : 3.000 ## 1st Qu.: 97.75 1st Qu.: 47.75 1st Qu.: 31.50 1st Qu.: 6.000 ## Median :120.00 Median : 57.50 Median : 50.50 Median : 7.000 ## Mean :122.22 Mean : 56.85 Mean : 51.87 Mean : 9.824 ## 3rd Qu.:143.50 3rd Qu.: 64.00 3rd Qu.: 74.00 3rd Qu.:10.000 ## Max. :191.00 Max. :100.00 Max. :121.00 Max. :44.000 ## ## temp northness ## Min. :10.00 Min. : 0.00 ## 1st Qu.:20.75 1st Qu.: 23.75 ## Median :23.50 Median : 68.00 ## Mean :23.10 Mean : 64.59 ## 3rd Qu.:26.00 3rd Qu.: 93.50 ## Max. :31.00 Max. :174.00 ## You may recall from discussion of EDA that QQ plots are a visual way to inspect the normality of a variable. If the variable is normally distributed, the points (e.g. soil observations) should line up along the straight line. # QQ plot ggplot(data, aes(sample = mast)) + geom_qq() + geom_qq_line() By examining the correlations between some of the predictors we can also determine whether they are collinear (e.g. > 0.6). This is common for similar variables such as Landsat bands, terrain derivatives, and climatic variables. Variables that are colinear are redundant and contain no additional information. In addition, collinearity will make it difficult to estimate our regression coefficients. vars <- c("mast", "elev", "temp", "precip", "tc_2", "tc_1", "tc_3") GGally::ggpairs(data[vars]) ## Registered S3 method overwritten by 'GGally': ## method from ## +.gg ggplot2 vars <- c("mast", "slope", "twi", "northness", "solar", "solarcv") GGally::ggpairs(data[vars]) The correlation matrices and scatter plots above show that that MAST has moderate correlations with some of the variables, particularly the elevation and the climatic variables. Examining the density plots on the diagonal axis of the scatter plots we can also see that some variables are skewed. 4.5.1 Compare Samples vs Population Since our data was not randomly sampled, we had better check the distribution of our samples vs the population. We can accomplish this by overlaying the sample distribution of predictor variables vs a large random sample. geodata_df <- as.data.frame(geodata_s) geodata_df <- rbind( data.frame(source = "sample", data[names(geodata_df)]), data.frame(source = "population", geodata_df) ) geodata_l <- pivot_longer(geodata_df, cols = -source) ggplot(geodata_l, aes(x = value, fill = source)) + geom_density(alpha = 0.5) + facet_wrap(~ name, scales = "free") + ggtitle("Evaluation of Sample Representativeness") ## Warning: Removed 1266 rows containing non-finite values (`stat_density()`). The overlap between our sample and the population appear satisfactory. 4.6 Linear modeling R has several functions for fitting linear models. The most common is arguably the lm() function from the stats R package, which is loaded by default. The lm() function is also extended through the use of several additional packages such as the car and caret R packages. Another noteworthy R package for linear modeling is rms, which offers the ols() function for linear modeling. The rms R package (Harrell 2015) offers an ‘almost’ comprehensive alternative to `lm()’ and it’s accessory function. Each function offers useful features, therefore for the we will demonstrate elements of both. Look for comments (i.e. #) below referring to rms or stats. # stats fit_lm <- lm( formula = mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, data = data, weights = data$numDays ) # rms R package library(rms) dd <- datadist(data) options(datadist = "dd") fit_ols <- ols(mast ~ elev + aspect + twi + solar + solarcv + tc_1 + tc_2 + tc_3 + precip + temp, data = data, x = TRUE, y = TRUE, weights = data$numDays) 4.6.1 Diagnostics 4.6.1.1 Residual plots Once we have a model we need to assess residuals for linearity, normality, and homoscedastivity (or constant variance). Oddly this is one area were the rms R package does not offer convenient functions for plotting residuals, therefore we’ll simply access the results of lm(). par(mfcol = c(2, 2)) # residual plot(fit_lm) # partial residuals termplot(fit_lm, partial.resid = TRUE, col.res = "black", pch = 16) Remember the residuals are simply just the observed values minus the predicted values, which are easy enough to calculate. Alternatively we can simply extract them from the fitted model object. pred <- predict(fit_lm, data) res <- data$mast - pred head(res) ## 1 2 3 4 5 6 ## -1.3182498 -0.4111067 0.1231537 1.4750626 -0.1719747 -0.1036808 # or head(residuals(fit_lm)) ## 1 2 3 4 5 6 ## -1.3182498 -0.4111067 0.1231537 1.4750626 -0.1719747 -0.1036808 # Manually plot the residuals res <- data.frame(res, pred) ggplot(res, aes(x = pred, y = res)) + geom_point() + geom_hline(yintercept = 0) 4.6.1.2 Multicolinearity As we mentioned earlier multicolinearity should be avoided. To assess a model for multicolinearity we can compute the variance inflation factor (VIF). Its square root indicates the amount of increase in the predictor coefficients standard error. A value greater than 3 indicates a doubling the standard error. Rules of thumb vary, but a square root of vif greater than 2 or 3 indicates an unacceptable value (Faraway 2004). # vif() function from the rms or car packages sqrt(vif(fit_ols)) ## elev aspect twi solar solarcv tc_1 tc_2 tc_3 ## 8.851106 1.103580 2.056235 6.068831 5.787921 4.114079 3.009392 3.311669 ## precip temp ## 2.274489 7.860236 # or sqrt(vif(fit_ols)) > 3 ## elev aspect twi solar solarcv tc_1 tc_2 tc_3 precip temp ## TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE The values above indicate we have several colinear variables in the model, which you might have noticed already from the scatter plot matrix. 4.6.2 Variable selection/reduction Modeling is an iterative process that cycles between fitting and evaluating alternative models. Compared to tree and forest models, linear and generalized models are typically less automated. Automated model selection procedures are available, but should not be taken at face value because they may result in complex and unstable models. This is in part due to correlation amongst the predictive variables that can confuse the model. Also, the order in which the variables are included or excluded from the model effects the significance of the other variables, and thus several weak predictors might mask the effect of one strong predictor. Regardless of the approach used, variable selection is probably the most controversial aspect of linear modeling. Step-wise selection (step(), rms::validate()) Principal component analysis (princomp()) Shrinkage methods (e.g. Lasso) Randomized wrapper (e.g. Boruta)(Boruta::Boruta()) Both the rms and caret packages offer methods for variable selection and cross-validation. In this instance the rms approach is a bit more convenient, with the one line call to validate(). # Set seed for reproducibility set.seed(42) # rms ## stepwise selection validate(fit_ols, bw = TRUE) ## ## Backwards Step-down - Original Model ## ## Deleted Chi-Sq d.f. P Residual d.f. P AIC R2 ## temp 0.19 1 0.6593 0.19 1 0.6593 -1.81 34676 ## aspect 0.45 1 0.5020 0.65 2 0.7243 -3.35 34674 ## solarcv 0.97 1 0.3248 1.61 3 0.6561 -4.39 34672 ## twi 0.51 1 0.4762 2.12 4 0.7133 -5.88 34670 ## tc_3 1.25 1 0.2642 3.37 5 0.6434 -6.63 34667 ## precip 0.85 1 0.3558 4.22 6 0.6468 -7.78 34665 ## ## Approximate Estimates after Deleting Factors ## ## Coef S.E. Wald Z P ## Intercept 24.486899 4.044131 6.055 1.405e-09 ## elev -0.007142 0.000550 -12.985 0.000e+00 ## solar 0.009497 0.002012 4.721 2.346e-06 ## tc_1 -0.062146 0.012006 -5.176 2.264e-07 ## tc_2 -0.157832 0.036778 -4.291 1.775e-05 ## ## Factors in Final Model ## ## [1] elev solar tc_1 tc_2 ## index.orig training test optimism index.corrected n ## R-square 0.9286 0.9319 0.9154 0.0165 0.9120 40 ## MSE 2.1473 1.8643 2.5430 -0.6787 2.8261 40 ## g 5.6666 5.6236 5.6643 -0.0407 5.7074 40 ## Intercept 0.0000 0.0000 0.1430 -0.1430 0.1430 40 ## Slope 1.0000 1.0000 0.9917 0.0083 0.9917 40 ## ## Factors Retained in Backwards Elimination ## ## elev aspect twi solar solarcv tc_1 tc_2 tc_3 precip temp ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * * ## * * * * ## * * * * ## * * * * ## * * * * * ## * * * * * ## * * * * ## * * * ## * * * * * ## * * * * ## * * ## * * * * ## * * * * * * ## * * * * ## * * * * ## * * ## * * * * ## * * * * ## * * * ## * * * * ## * * * * ## * * * * ## * * * * ## * * * * ## ## Frequencies of Numbers of Factors Retained ## ## 2 3 4 5 6 ## 2 2 31 4 1 The results for validate() above show which variables were retained and deleted. Above we can see a dot matrix of which variables were retained during each of the iterations from bootstrapping. In addition, we can see the difference between the training and test accuracy and error metrics. Remember that it is the test accuracy we should pay attention too. 4.6.3 Final model & accuracy assessment Once we have a model we are ‘happy’ with we can fit the final model, and call validate() again which gives performance metrics such as R$2 and the mean square error (MSE). If we want the root mean square error (RMSE), which is in the original units of our measurements we can take the square root of MSE using sqrt(). # rms final_ols <- ols(mast ~ elev + solarcv + tc_1 + tc_2, data = data, weights = data$numDays, x = TRUE, y = TRUE) final_ols ## Linear Regression Model ## ## ols(formula = mast ~ elev + solarcv + tc_1 + tc_2, data = data, ## weights = data$numDays, x = TRUE, y = TRUE) ## ## Model Likelihood Discrimination ## Ratio Test Indexes ## Obs 68 LR chi2 177.01 R2 0.926 ## sigma73.3628 d.f. 4 R2 adj 0.921 ## d.f. 63 Pr(> chi2) 0.0000 g 5.720 ## ## Residuals ## ## Min 1Q Median 3Q Max ## -3.7912 -0.8006 -0.1218 0.7401 4.0016 ## ## ## Coef S.E. t Pr(>|t|) ## Intercept 49.9906 3.7439 13.35 <0.0001 ## elev -0.0066 0.0006 -11.82 <0.0001 ## solarcv -0.2421 0.0526 -4.60 <0.0001 ## tc_1 -0.0535 0.0113 -4.75 <0.0001 ## tc_2 -0.1469 0.0362 -4.06 0.0001 set.seed(42) validate(final_ols, method = "crossvalidation", B = 10) ## index.orig training test optimism index.corrected n ## R-square 0.9209 0.9227 0.7896 0.1331 0.7878 10 ## MSE 2.3332 2.2652 2.7234 -0.4582 2.7914 10 ## g 5.7197 5.6658 5.4657 0.2001 5.5196 10 ## Intercept 0.0000 0.0000 0.8853 -0.8853 0.8853 10 ## Slope 1.0000 1.0000 0.9571 0.0429 0.9571 10 data$pred <- predict(final_ols) # RMSE sqrt((MSE = 2.3332)) ## [1] 1.527482 caret::RMSE(pred = data$pred, obs = data$mast) ## [1] 1.527477 # R2 caret::R2(pred = data$pred, obs = data$mast, formula = "traditional") ## [1] 0.9208941 # plot model fit ggplot(data, aes(x = pred, y = mast)) + geom_point() + geom_abline() + geom_smooth(method = "lm") + ggtitle("Model Fit") ## `geom_smooth()` using formula = 'y ~ x' 4.6.4 Model Interpretation A nice feature of linear models are that they are easy to interpret. If we examine the model coefficients we can see how what we’re trying to predict (i.e. the response variable) varies as a function of the GIS variables (i.e. predictor variables). So looking at the elev variable below we can see that mast decreasing at a rate of -0.066 for every change in elevation. # Model accuracy, residuals, and slopes (e.g. coefficents) final_ols ## Linear Regression Model ## ## ols(formula = mast ~ elev + solarcv + tc_1 + tc_2, data = data, ## weights = data$numDays, x = TRUE, y = TRUE) ## ## Model Likelihood Discrimination ## Ratio Test Indexes ## Obs 68 LR chi2 177.01 R2 0.926 ## sigma73.3628 d.f. 4 R2 adj 0.921 ## d.f. 63 Pr(> chi2) 0.0000 g 5.720 ## ## Residuals ## ## Min 1Q Median 3Q Max ## -3.7912 -0.8006 -0.1218 0.7401 4.0016 ## ## ## Coef S.E. t Pr(>|t|) ## Intercept 49.9906 3.7439 13.35 <0.0001 ## elev -0.0066 0.0006 -11.82 <0.0001 ## solarcv -0.2421 0.0526 -4.60 <0.0001 ## tc_1 -0.0535 0.0113 -4.75 <0.0001 ## tc_2 -0.1469 0.0362 -4.06 0.0001 We can examine how much each variable contributes to the model by examining the results of anova. From the summary below we can that the majority of partial sum of squares are captured by elev, with progressively less by the remaining variables. # Anova anova(final_ols) ## Analysis of Variance Response: mast ## ## Factor d.f. Partial SS MS F P ## elev 1 751577.78 751577.776 139.64 <.0001 ## solarcv 1 114017.66 114017.655 21.18 <.0001 ## tc_1 1 121686.11 121686.110 22.61 <.0001 ## tc_2 1 88784.39 88784.388 16.50 1e-04 ## REGRESSION 4 4240328.96 1060082.241 196.96 <.0001 ## ERROR 63 339072.21 5382.099 plot(anova(final_ols), what = "partial R2") Another way to visualize the contribution of each variable is to plot their partial effects, which summarize how much each variable effects the model if we hold all the other variables constant at their median values and vary the variable of interest over it’s 25th and 75th percentiles. This is a useful way to compare the impact of each variable side by side in the units of the response variable. In this case we can see below that again elev has the biggest impact, with range of approximately -6 to -4.5 degrees. The effect of solarcv is smallest compared to the other tasseled cap variables. # Model Effects plot(summary(final_ols)) The partial effects can also be visualized as regression lines with their confidence intervals, which illustrates the slope of the predictor variables in relation to mast. # Plot Effects ggplot(Predict(final_ols), addlayer = geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") + scale_y_continuous(breaks = c(8, 15, 22)) ) # Vary solarcv (North = 23; Flat = 33; South = 55) ggplot(Predict(final_ols, elev = NA, solarcv = c(23, 33, 51))) + geom_hline(yintercept = c(8, 15, 22), linetype = "dotted") + scale_y_continuous(breaks = c(8, 15, 22)) 4.7 Generate spatial predictions # Predict mast model predfun <- function(model, data) { v <- predict(model, data, se.fit=TRUE) } mast_r <- predict(geodata_r, final_ols, fun = predfun, index = 1:2, progress = 'text') names(mast_r) <- c("MAST", "SE") 4.8 Create Map # mast plot(mast_r, col = viridis::viridis(10)) 4.9 Exercise Load the CA790 MAST dataset. url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/exercises/yosemite-example/henry_CA790_data.csv" mast2 <- read.csv(url) Fit a linear model. Examine the residuals and check for multi-collinearity. Are their any outliers? Perform a variable selection. Does the automatic selection make sense? Assess the model accuracy and plot the fit. How do the train vs test accuracies compare? Summarize and plot the model effects. Which variable has the steepest slope? Which variable has the greatest effect? Which variable explains the most variance? 4.10 Additional reading The proper use and misuse of regression in soil science has been described by (Webster 1997). James et al. (2021) provide a useful introduction to linear regression. For more discussion of extending regression to incorporate spatial trends in the residuals see Hengl (2009). Frank Harrel’s Regression Modeling Strategies book and website offer detailed commentary on the entire process of selecting an appropriate model form, model calibration, model validation, and interpretation. References "],["glm.html", "Chapter 5 Generalized Linear Models 5.1 Introduction 5.2 Logistic Regression 5.3 Examples 5.4 Exercise 5.5 Exploratory analysis (EDA) 5.6 Exercise 1: View the data 5.7 Constructing the model 5.8 Generate spatial predictions 5.9 Exercise 5.10 Additional reading", " Chapter 5 Generalized Linear Models 5.1 Introduction Generalized linear models (GLM) as the name implies are a generalization of the linear modeling framework to allow for the modeling of response variables (e.g. soil attributes) with non-normal distributions and heterogeneous variances. Whereas linear models are designed for predicting continuous soil properties such as clay content or soil temperature, GLM can be used to predict the presence/absence of argillic horizons (i.e. logistic regression) or counts of a plant species along a transect (i.e. Poisson regression). These generalizations greatly expand the applicability of the linear modeling framework, while still allowing for a similar fitting procedure and interpretation of the resulting models. In the past in order to handle non-linearity and heterogeneous variances, transformations have been made to the response variable, such as the log(y). However, such transformations complicate the models interpretation because the results refer to the transformed scale (e.g. log(y))(Lane 2002). These response transformations are not guaranteed to achieve both normality and constant variance simultaneously. GLM approaches transform the response, but also preserve the scale of the response, and provide separate functions to transform the mean response and variance, known as the link and variance functions respectively. So instead of looking like this: \\(f(y) = \\beta_{0} + \\beta_{1}x + \\varepsilon\\) you get this: \\(g(\\mu)\\) or \\(\\eta = \\beta_{0} + \\beta_{1}x + \\varepsilon\\) with \\(g(\\mu)\\) or \\(\\eta\\) symbolizing the link function. Another alteration of the classical linear model is that with GLM the coefficients are estimated iteratively by maximum likelihood estimation instead of ordinary least squares. This results in the GLM minimizing the deviance, instead of the sum of squares. However, for the Gaussian (i.e. normal) distributions the deviance and sum of squares are equivalent. 5.2 Logistic Regression Logistic regression is a specific type of GLM designed to model data that has a binomial distribution (i.e. presence/absence, yes/no, or proportional data), which in statistical learning parlance is considered a classification problem. For binomial data the logit link transform is generally used. The effect of the logit transform can be seen in the following figure. It creates a sigmoidal curve, which enhances the separation between the two groups. It also has the effect of ensuring that the values range between 0 and 1. When comparing a simple linear model vs a simple logistic model we can see the effect of the logit transform on the relationship between the response and predictor variable. As before it follows a sigmoidal curve and prevents predictions from exceeding 0 and 1. ## Warning: Removed 19 rows containing missing values (`geom_line()`). 5.3 Examples Example 1: Probability of Mollisols (Beaudette and O’Geen 2009) Example 2: Probability of Red Clay (Evans and Hartemink 2014) Example 3: Probability of Ponding (NRCS Unpublished) 5.4 Exercise Now that we’ve discussed some of the basic background GLM theory we’ll move on to a real exercise, and address any additional theory where it relates to specific steps in the modeling process. The examples selected for this chapter come from Joshua Tree National Park (JTNP)(i.e. CA794) in the Mojave desert. The problem tackled here is a familiar one: Where can I expect to find argillic horizons on fan piedmonts? Argillic horizons within the Mojave are typically found on fan remnants, which are a stable landform that is a remnant of the Pleistocene (Peterson 1981). Despite the low relief of most fans, fan remnants are uplands in the sense that they generally don’t receive run-on or active deposition. With this dataset we’ll encounter some challenges. To start with, fan piedmont landscapes typically have relatively little relief. Since most of our predictors will be derivatives of elevation, that won’t leave us with much to work with. Also, our elevation data comes from the USGS National Elevation dataset (NED), which provides considerably less detail than say LiDAR or IFSAR data (Shi et al. 2012). Lastly our pedon dataset like most in NASIS, hasn’t received near as much quality control as have the components. So we’ll need to wrangle some of the pedon data before we can analyze it. These are all typical problems encountered in any data analysis and should be good practice. Ideally, it would be more interesting to try and model individual soil series with argillic horizons, but due to some of the challenges previously mentioned it would be difficult with this dataset. However, at the end we’ll look at one simple approach to try and separate individual soil series with argillic horizons. 5.4.1 Load packages To start, as always we need to load some extra packages. This will become a familiar routine every time you start R. Most of the basic functions we need to develop a logistic regression model are contained in base R, but the following contain some useful spatial and data manipulation functions. Believe it or not we will use all of them and more. library(aqp) # soil data classes library(raster) # raster data functions library(sf) # vector data functions library(mapview) # interactive mapping library(ggplot2) # graphing library(dplyr) # data manipulation library(tidyr) # data manipulation library(rms) # additional regression tools library(caret) # additional modeling tools 5.4.2 Read in data Hopefully like all good soil scientists and ecological site specialists you enter your field data into NASIS. Better yet hopefully someone else did it for you! Once data are captured in NASIS it is much easier to import the data into R, extract the pieces you need, manipulate it, model it, etc. If it’s not entered into NASIS, it may as well not exist. For this exercise we’ll load a cached dataset on GitHub. # pedons <- fetchNASIS() githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_pedons.RData") load(githubURL) # Examine the SoilProfileCollection object View(pedons) 5.5 Exploratory analysis (EDA) 5.5.1 Data wrangling Generally before we begin modeling you should spend some time exploring the data. By examining a simple summary we can quickly see the breakdown of how many argillic horizons we have. Unfortunately, odds are good that all the argillic horizons haven’t been consistently populated in the diagnostic horizon table like they should be. Luckily for us, the desert argillic horizons always pop up in the taxonomic name, so we can use pattern matching to extract it. By doing this we gain an additional 11 pedons with argillic horizons and are able to label the missing values (i.e. NA). At a minimum for modeling purposes we probably need 10 pedons of the target we’re interested in and a total of 100 observations overall. # Check consistency of argillic horizon population # extract the site table from the SoilProfileCollection object s <- site(pedons) # tabulate column count(s, argillic.horizon) ## argillic.horizon n ## 1 FALSE 790 ## 2 TRUE 263 ## 3 NA 167 # Extract argillic presence from the taxonomic subgroup s <- mutate(s, argillic = grepl("arg", taxsubgrp)) # tabulate column count(s, argillic) ## argillic n ## 1 FALSE 1022 ## 2 TRUE 198 Ideally, if the diagnostic horizon table had been populated consistently we could have used the upper depth to diagnostic feature to filter out argillic horizons that start below 50cm, which may not be representative of “good” argillic horizons and may therefore have gotten correlated to a Torripsamments anyway. Not only are unrepresentative sites confusing for scientists, they’re equally confusing for models. However, as we saw earlier, some pedons don’t appear to be fully populated, so we’ll stick with those pedons that have the argillic specified in their taxonomic subgroup name, since it gives us the biggest sample. # extract the diagnostic table from the SoilProfileCollection object diagnostic_hz(pedons) %>% # create a new variable mutate(argillic.horizon50 = featkind == "argillic horizon" & featdept < 50) %>% # tabulate column count(argillic.horizon50) ## argillic.horizon50 n ## 1 FALSE 1935 ## 2 TRUE 222 ## 3 NA 4 5.5.2 Geomorphic data Another obvious place to look is at the geomorphic data in the site table. This information is intended to help differentiate where our soil observations exist on the landscape. If populated consistently it could potentially be used in future disaggregation efforts, as demonstrated by Nauman and Thompson (2014). # Landform vs argillic presence s %>% # subset rows using logical expression filter(argillic == TRUE) %>% # cross-tabulate columns count(landform, argillic) %>% # subset rows by landform.string with > 3 observations filter(n > 3) %>% # sort data by decreasing n arrange(-n) ## landform argillic n ## 1 fan remnants TRUE 72 ## 2 hillslopes TRUE 28 ## 3 fan aprons TRUE 19 ## 4 hills TRUE 15 ## 5 pediments TRUE 9 ## 6 mountain slopes TRUE 8 ## 7 <NA> TRUE 7 ## 8 alluvial fans TRUE 6 ## 9 low hills TRUE 5 ## 10 fan aprons on fan remnants TRUE 4 ## 11 mountains TRUE 4 # generalize the landform.string s <- mutate( s, landform_generic = ifelse(grepl("fan|terrace|sheet|drainageway|wash", s$landform), "fan", "hill") ) Examining the above frequency table we can see that argillic horizons occur predominantly on fan remnants as was alluded too earlier. However, they also seem to occur frequently on other landforms - some of which are curious combinations of landforms or redundant terms. # Hillslope position # # subset rows using logical expression s_sub <- filter(s, landform_generic == "fan") # Hillslope s_sub %>% # cross-tabulate columns count(hillslopeprof, argillic) %>% # group by variable and calculate percent group_by(argillic) %>% mutate(pct = round(n / sum(n) * 100)) %>% # reshape to wide format select(-n) %>% pivot_wider(names_from = argillic, values_from = pct) ## # A tibble: 6 × 3 ## hillslopeprof `FALSE` `TRUE` ## <fct> <dbl> <dbl> ## 1 summit 16 39 ## 2 shoulder 4 2 ## 3 backslope 14 20 ## 4 footslope 2 1 ## 5 toeslope 16 4 ## 6 <NA> 48 34 # slope shape s_sub %>% # create a new variable mutate(SS = paste(shapedown, shapeacross)) %>% # cross-tabulate columns count(SS, argillic) %>% # calculate percent by group group_by(argillic) %>% mutate(pct = round(n / sum(n) * 100)) %>% # reshape to wide format select(-n) %>% pivot_wider(names_from = argillic, values_from = pct) ## # A tibble: 11 × 3 ## SS `FALSE` `TRUE` ## <chr> <dbl> <dbl> ## 1 NA NA 11 10 ## 2 concave concave 1 NA ## 3 concave convex 0 NA ## 4 concave linear 4 3 ## 5 convex concave 0 1 ## 6 convex convex 7 7 ## 7 convex linear 6 9 ## 8 linear NA 0 NA ## 9 linear concave 6 1 ## 10 linear convex 21 32 ## 11 linear linear 44 38 Looking at the hillslope position of fan landforms we can see a slightly higher proportion of argillic horizons are found on summits, while less are found on toeslopes. Slope shape doesn’t seem to provide any useful information for distinguishing argillic horizons. s_long <- s %>% # subset rows using logical expression filter(landform_generic == "fan") %>% # extract columns select(argillic, bedrckdepth, slope, elev, surface_total_frags_pct) %>% # reshape to long format pivot_longer(cols = c(bedrckdepth, slope, elev, surface_total_frags_pct)) # examine results head(s_long) ## # A tibble: 6 × 3 ## argillic name value ## <lgl> <chr> <dbl> ## 1 FALSE bedrckdepth NA ## 2 FALSE slope 28 ## 3 FALSE elev 1761 ## 4 FALSE surface_total_frags_pct 85 ## 5 FALSE bedrckdepth 11 ## 6 FALSE slope 60 # plot results ggplot(s_long, aes(x = argillic, y = value)) + geom_boxplot() + facet_wrap(~ name, scale = "free") Looking at boxplots of our numeric variables we can see none of them show much separation between the presense/absense of argillic horizons. 5.5.3 Soil Scientist Bias Next we’ll look at soil scientist bias. The question being: Are some soil scientists more likely to describe argillic horizons than others? Due to the excess number of soil scientist that have worked on CA794, including detailees, we’ve filtered the names of soil scientist to include just the top 3 mappers and given priority to the most senior soil scientists when they occur together. # Filter and sort most frequent soil scientists by seniority s <- mutate( s, old = descname, descname2 = NA, descname2 = ifelse(grepl("Stephen", old), "Stephen", descname2), # least senior descname2 = ifelse(grepl("Paul", old), "Paul", descname2), descname2 = ifelse(grepl("Peter", old), "Peter", descname2) # most senior ) s %>% # subset rows using logical expression filter(landform_generic == "fan") %>% # cross-tabulate columns count(descname2, argillic) %>% # calculate percent by group group_by(descname2) %>% mutate(pct = round(n / sum(n) * 100)) %>% # reshape the results into a table select(-n) %>% pivot_wider(names_from = argillic, values_from = pct) ## # A tibble: 4 × 3 ## # Groups: descname2 [4] ## descname2 `FALSE` `TRUE` ## <chr> <dbl> <dbl> ## 1 Paul 73 27 ## 2 Peter 90 10 ## 3 Stephen 84 16 ## 4 <NA> 78 22 For fan landforms, one of the soil scientists seems more likely than the others to describe argillic horizons. However while this information is suggestive, it is far from definitive in showing a potential bias because it doesn’t take into account other factors. We’ll examine this more closely later. 5.5.4 Plot coordinates Where do our points plot? To start we need to convert them to a spatial object first. Then we can create an interactive we map using mapview. Also, if we wish we can also export the locations as a Shapefile. # subset rows with only complete X & Y coordinates s_sub <- filter(s, complete.cases(x_std, y_std)) # convert s_sub data.frame to a spatial object s_sf <- st_as_sf(s_sub, # define coordinates coords = c("x_std", "y_std"), # define coordinate reference system using ESPG code crs = 4326 ) %>% # reproject to equal area coordinate reference system using ESPG code st_transform(crs = 5070) # Download soil survey area boundaries ca794 <- soilDB::fetchSDA_spatial("CA794", geom.src = "sapolygon") %>% # convert to spatial object st_as_sf() %>% # reproject to equal area coordinate reference system using ESPG code st_transform(crs = 5070) # Plot interactive map mapview(ca794, alpha.regions = 0, lwd = 2) + mapview(s_sf, zcol = "argillic") 5.6 Exercise 1: View the data Examine the interactive map. Hypothesize what predictor variables/landscape relationships might be predictive. 5.6.1 Extracting spatial data Prior to any spatial analysis or modeling, you will need to develop a suite of geodata files that can be intersected with your field data locations. This is, in and of itself a difficult task, and should be facilitated by your Regional GIS Specialist. Typically, these geodata files would primarily consist of derivatives from a DEM or satellite imagery. Prior to any prediction it is also necessary to ensure the geodata files have the same projection, extent, and cell size. Once we have the necessary files we can construct a list in R of the file names and paths, read the geodata into R, and then extract the geodata values where they intersect with field data. # load raster stack from GitHub githubURL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ca794_rs.rds") geodata_r <- readRDS(githubURL) # Extract the geodata and add to a data frame data <- raster::extract(geodata_r, as(s_sf, "Spatial"), sp = TRUE)@data # Modify some of the geodata variables data <- mutate( data, cluster = factor(cluster), twi_sc = abs(twi - 13.8), # 13.8 = twi median gsi = (ls_3 - ls_1) / (ls_3 + ls_2 + ls_1), ndvi = (ls_4 - ls_3) / (ls_4 + ls_3), ) 5.6.2 Examine spatial data With our spatial data in hand, we can now see whether any of the variables will help us separate the presence/absence of argillic horizons. Because we’re dealing with a classification problem, we’ll compare the numeric variables using boxplots. What we’re looking for are variables with the least amount of overlap in their distribution (i.e. the greatest separation in their median values). URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata") load(URL) train <- data # Select argillic horizons with "arg" in the subgroup name and on fans # Argillic horizons that occur on hills and mountains more than likely form by different process, and therefore would require a different model.train$argillic train <- mutate( train, argillic = factor(ifelse(grepl("arg", taxsubgrp) & train$mrvbf > 0.15, "yes", "no")), ch_log = log(ch + 1), z2str_log = log(z2str + 1), ch = NULL, z2str = NULL ) train <- select(train, c(argillic, z:z2str_log)) data_l <- train %>% select(-cluster, -geo) %>% pivot_longer(col = - argillic) %>% filter(!is.na(value)) ggplot(data_l, aes(x = argillic, y = value)) + geom_boxplot() + facet_wrap(~ name, scales = "free") 5.7 Constructing the model R has several functions for fitting linear models. The most common is arguably the glm() function from the stats R package, which is loaded by default. The glm() function is also extended thru the use of several additional packages such as the car and caret R packages. Another noteworthy R package for logistic regrssion is rms, which offers the lrm() function. The rms R package (Harrell 2015) offers an ‘almost’ comprehesive alternative to glm() and it’s accessory function. It is difficult to objectively functions say which approach is better. Therefore methods both methods will be demonstrated. Look for comments (i.e. #) below referring to rms, stats, caret or visreg. # stats fit_glm <- glm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp +tc_1 + tc_2 + tc_3 + k + th + u + cluster, data = train, family = binomial) # rms library(rms) dd <- datadist(train) options(datadist = "dd") fit_lrm <- lrm(argillic ~ z + slp + twi_sc + ch_log + z2str_log + mrrtf + solar + precip + precipsum + temp + tc_1 + tc_2 + tc_3 + k + th + u, data = train, x = TRUE, y = TRUE) 5.7.1 Diagnostic 5.7.1.1 Residual plots One unfortunate side effect of side effect of logistic regression is that the default residual plots are not interpretable. However the partial residual plots can be useful for identifying outliers and nonlinear trends. par(mfcol = c(2, 2)) plot(fit_glm) termplot(fit_glm, partial.resid = TRUE, col.res = "black", pch = 16) 5.7.1.2 Multicolinearity As we mentioned earlier multicolinearity should be avoided. To assess a model for multicolinearity we can compute the variance inflation factor (VIF). Its square root indicates the amount of increase in the predictor coefficients standard error. A value greater than 3 indicates a doubling the standard error. Rules of thumb vary, but a square root of vif greater than 2 or 3 indicates an unacceptable value. # vif() function from the rms or car packages sqrt(vif(fit_lrm)) # or sqrt(vif(fit_lrm)) > 3 5.7.2 Variable Selection & model validation Modeling is an iterative process that cycles between fitting and evaluating alternative models. Compared to tree and forest models, linear and generalized models typically require more scrunity from the user. Automated model selection procedures are available, but should not be taken at face value because they may result in complex and unstable models. This is in part due to correlation amongst the predictive variables that can confuse the model. Also, the order in which the variables are included or excluded from the model effects the significance of the other variables, and thus several weak predictors might mask the effect of one strong predictor. Regardless of the approach used, variable selection is probably the most controversial aspect of linear modeling. Both the rms and caret packages offer methods for variable selection and cross-validation. In this instance the rms approach is a bit more convinent and faster, with the one line call to validate(). set.seed(42) # rms ## stepwise selection and validation validate(fit_lrm, bw = TRUE) The results for validate() above show which variables were retained and deleted. Below we can see a dot matrix of which variables were retained in during the 40 iterations of the bootstrapping. In addition, below we can see the difference between the training and test accuracy and error metrics. Remember that it is the test accuracy we should pay attention too. 5.7.3 Final model & accuracy Once we’ve settled on a final model we can fit it and validate it. The validate() function can also be used for cross-validation and will get multiple probability-based accuracy metrics, including: \\(R^2\\), the Brier score (B), Tjur’s D (D), and many others. final_lrm <- lrm(argillic ~ slp + twi_sc + tc_1 + tc_2 + precipsum, data = train, x = TRUE, y = TRUE) validate(final_lrm, method = "crossvalidation", B = 10) ## index.orig training test optimism index.corrected n ## Dxy 0.7068 0.7075 0.6958 0.0117 0.6951 10 ## R2 0.3202 0.3211 0.3150 0.0061 0.3141 10 ## Intercept 0.0000 0.0000 -0.0636 0.0636 -0.0636 10 ## Slope 1.0000 1.0000 1.0183 -0.0183 1.0183 10 ## Emax 0.0000 0.0000 0.0169 0.0169 0.0169 10 ## D 0.1684 0.1688 0.1572 0.0115 0.1569 10 ## U -0.0017 -0.0019 0.0017 -0.0037 0.0019 10 ## Q 0.1701 0.1707 0.1555 0.0152 0.1549 10 ## B 0.0755 0.0754 0.0772 -0.0018 0.0773 10 ## g 3.7232 3.7299 3.7470 -0.0171 3.7403 10 ## gp 0.1311 0.1311 0.1279 0.0032 0.1278 10 # Compare the metrics from rms::validate() to aqp::brierScore() and modEvA::RsqGLM() pred <- predict(final_lrm, train, type = "fitted") test <- data.frame(pred, obs = train$argillic == "yes") # Brier score brierScore(test, classLabels = "pred", actual = "obs") ## [1] 0.07219881 # Nagelkerke D2 & Tjur's D unlist(modEvA::RsqGLM(pred = test$pred, obs = test$obs, plot = FALSE)) ## CoxSnell Nagelkerke McFadden Tjur sqPearson ## 0.1557253 0.3201934 0.2540906 0.1842274 0.1879082 Because we’re dealing with a classification problem, we have to consider both errors of commission (Type I) and omission (Type II), or their corresponding accuracies of sensitivity and positive predicted value respectively. Before we can assess the error, however, we need to select a probability threshold. Sensitivity and specificity examine how well the ground truth or reference data compares to the predictions. Positive and negative predicted values examine the inverse concept of how well the predictions match the reference data as a function of their prevalence (see help(confusionMatrix). # examine possible thresholds ggplot(test, aes(x = pred, fill = obs)) + geom_density(alpha = 0.5) + geom_vline(aes(xintercept = 0.5), lty = "dashed") + xlab("probability") + scale_x_continuous(breaks = seq(0, 1, 0.2)) test$predictedClass <- ifelse(test$pred > 0.25, TRUE, FALSE) # Confusion Matrix cm <- table(predicted = test$predictedClass, observed = test$obs) confusionMatrix(cm, positive = "TRUE") ## Confusion Matrix and Statistics ## ## observed ## predicted FALSE TRUE ## FALSE 954 56 ## TRUE 92 65 ## ## Accuracy : 0.8732 ## 95% CI : (0.8527, 0.8917) ## No Information Rate : 0.8963 ## P-Value [Acc > NIR] : 0.994946 ## ## Kappa : 0.397 ## ## Mcnemar's Test P-Value : 0.004015 ## ## Sensitivity : 0.5372 ## Specificity : 0.9120 ## Pos Pred Value : 0.4140 ## Neg Pred Value : 0.9446 ## Prevalence : 0.1037 ## Detection Rate : 0.0557 ## Detection Prevalence : 0.1345 ## Balanced Accuracy : 0.7246 ## ## 'Positive' Class : TRUE ## # Spatially variable accuracy test$cluster <- train$cluster temp <- test %>% group_by(cluster) %>% summarise( TP = sum(predictedClass == TRUE & obs, na.rm = TRUE), FN = sum(predictedClass == FALSE & obs, na.rm = TRUE), sensitivity = TP / (TP + FN), n = length(obs) ) ggplot(temp, aes(x = cluster, y = sensitivity, size = n)) + geom_point() Discuss the variability of the predictions across the clusters, perhaps different models need to be constructed in each cluster, some clusters appear to be dominated by specific soil series, these data aren’t clean enough (nor are the series concepts usually) to model series separately, however, we could use the clusters as an additional model to attempt to separate the series. Do the hyperthermic clusters perform differently. 5.7.4 Model effects # Model accuracy, and slopes (e.g. coefficents) final_lrm ## Frequencies of Missing Values Due to Each Variable ## argillic slp twi_sc tc_1 tc_2 precipsum ## 8 52 53 52 52 52 ## ## Logistic Regression Model ## ## lrm(formula = argillic ~ slp + twi_sc + tc_1 + tc_2 + precipsum, ## data = train, x = TRUE, y = TRUE) ## ## ## Model Likelihood Discrimination Rank Discrim. ## Ratio Test Indexes Indexes ## Obs 1167 LR chi2 197.55 R2 0.320 C 0.853 ## no 1046 d.f. 5 R2(5,1167)0.152 Dxy 0.707 ## yes 121 Pr(> chi2) <0.0001 R2(5,325.4)0.447 gamma 0.707 ## max |deriv| 0.0004 Brier 0.075 tau-a 0.131 ## ## Coef S.E. Wald Z Pr(>|Z|) ## Intercept -2.3859 1.8877 -1.26 0.2062 ## slp -0.1968 0.0394 -5.00 <0.0001 ## twi_sc -0.4272 0.0887 -4.82 <0.0001 ## tc_1 -0.0104 0.0076 -1.36 0.1730 ## tc_2 0.0259 0.0237 1.09 0.2748 ## precipsum 0.0743 0.0247 3.01 0.0026 # Chi-square anova(final_lrm) ## Wald Statistics Response: argillic ## ## Factor Chi-Square d.f. P ## slp 24.97 1 <.0001 ## twi_sc 23.20 1 <.0001 ## tc_1 1.86 1 0.1730 ## tc_2 1.19 1 0.2748 ## precipsum 9.06 1 0.0026 ## TOTAL 85.86 5 <.0001 # Model Effects summary(final_lrm) ## Effects Response : argillic ## ## Factor Low High Diff. Effect S.E. Lower 0.95 Upper 0.95 ## slp 3.5798 24.4420 20.8620 -4.106300 0.82180 -5.7170000 -2.495700 ## Odds Ratio 3.5798 24.4420 20.8620 0.016468 NA 0.0032895 0.082443 ## twi_sc 1.3002 4.6222 3.3219 -1.419100 0.29461 -1.9966000 -0.841720 ## Odds Ratio 1.3002 4.6222 3.3219 0.241920 NA 0.1358000 0.430970 ## tc_1 103.6200 144.7600 41.1350 -0.427900 0.31405 -1.0434000 0.187630 ## Odds Ratio 103.6200 144.7600 41.1350 0.651880 NA 0.3522400 1.206400 ## tc_2 46.3230 60.8050 14.4820 0.374410 0.34284 -0.2975500 1.046400 ## Odds Ratio 46.3230 60.8050 14.4820 1.454100 NA 0.7426400 2.847300 ## precipsum 26.4350 35.6600 9.2253 0.685080 0.22765 0.2388900 1.131300 ## Odds Ratio 26.4350 35.6600 9.2253 1.983900 NA 1.2698000 3.099600 plot(summary(final_lrm)) # Plot Effects ggplot(Predict(final_lrm, fun = plogis)) View the results in ArcGIS and examine the accuracy at individual points Discuss the effects of data quality, including both NASIS and GIS Discuss how the modeling process isn’t an end in itself, but serves to uncover trends, possibly generate additional questions and direct future investigations 5.8 Generate spatial predictions # Custom function to return the predictions and their standard errors library(raster) # wrapper function, to help with prediction at each grid cell predfun <- function(model, data) { # predict presence of argillic horizon (outcome = TRUE) # result is vector of probabilities prob <- predict(model, data, type = "fitted") # compute Shannon entropy from both (FALSE | TRUE) probabilities H <- apply(cbind(prob, 1 - prob), 1, shannonEntropy) # combine Pr(Argillic == TRUE) and Shannon entropy res <- cbind(prob, H) # return to calling function return(res) } # Generate spatial predictions r <- predict(geodata_r, final_lrm, fun = predfun, index = 1:2, progress = "text") library(raster) # argillic probability plot(r[[1]], col = viridis::viridis(10)) # argillic Shannon Entropy plot(r[[2]], col = viridis::viridis(10)) 5.9 Exercise Construct a dataset of shallow soils as shown below. URL <- url("https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/ch7_data.Rdata") load(URL) train2 <- aqp::allocate(pedons, to = "ST Diagnostic Features") train2 <- train2 %>% mutate(shallow = grepl("contact", train2$featkind) & train2$featdept) %>% arrange(peiid, -shallow, featdept) %>% filter(shallow == TRUE & ! duplicated(peiid)) %>% right_join(data, by = "peiid") %>% mutate(shallow = ifelse(is.na(shallow), FALSE, shallow)) %>% select(z:mast, pc_1:u, ndvi:gsi, shallow) Fit a GLM Perform a variable selection Does the automatic selection make sense? Assess the model accuracy and plot the fit How do the train vs test accuracies compare? Summarize and plot the model effects Which variable has the steepest slope? Which variable has the greatest effect? Which variable has the highest Chi-squared? 5.10 Additional reading The application of generalized linear models in soil science are described by Lane (2002).@james2021 provide a useful introduction to logistic regression. References "],["tree-based-models.html", "Chapter 6 Tree-based Models 6.1 Introduction 6.2 Exploratory Data Analysis 6.3 Classification and Regression Trees (CART) 6.4 Random Forest 6.5 Prediction using Tree-based Models 6.6 Summary", " Chapter 6 Tree-based Models Statistics for pedologists course banner image 6.1 Introduction Tree-based models are a supervised machine learning method commonly used in soil survey and ecology for exploratory data analysis and prediction due to their simplistic nonparametric design. Instead of fitting a model to the data, tree-based models recursively partition the data into increasingly homogenous groups based on values that minimize a loss function (such as Sum of Squared Errors (SSE) for regression or Gini Index for classification) (James et al. 2021). The two most common packages for generating tree-based models in R are rpart (Therneau and Atkinson 2019) and randomForest (Liaw and Wiener 2002). The rpart package creates a regression or classification tree based on binary splits that maximize homogeneity and minimize impurity. The output is a single decision tree that can be further “pruned” or trimmed back using the cross-validation error statistic to reduce over-fitting. The randomForest package is similar to rpart, but is double random in that each node is split using a random subset of predictors AND observations at each node and this process is repeated hundreds of times (as specified by the user). Unlike rpart, random forests do not produce a graphical decision tree since the predictions are averaged across hundreds or thousands of trees. Instead, random forests produce a variable importance plot and a tabular statistical summary. 6.2 Exploratory Data Analysis The data that we will be working with in this chapter were collected in support of a MLRA 127 soil survey update project to tabularly and spatially update SSRUGO map units for spodic properties in the Monongahela National Forest. Soils that were historically covered by Eastern Hemlock and Red Spruce exhibit spodic morphology on shale, siltstone, and sandstone bedrocks at elevations typically >3,200 ft in West Virginia (Nauman et al. 2015). The landscape and vegetative communities were greatly altered by fire and logging in the early 1900s, complicating the identification of spodic morphology. It is of particular interest to the project leader and the U.S. Forest Service that spatial maps be developed to depict the location of spodic morphology and folistic epipedons in the Monongahela National Forest. Folistic epipedons provide habitat for the Northern Flying Squirrel, just recently removed from the endangered species list. 6.2.1 Getting Data Into R and Exporting to Shapefile Before we dive in to model building, let’s first import and plot the dataset in R. library(dplyr) # data manipulation library(ggplot2) # graphing library(sf) # spatial data library(mapview) # maps library(corrplot) # graphical display of correlation matrix url <-'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv' soildata <- read.csv(url) soildata <- st_as_sf( soildata, coords = c("x", "y"), # set the coordinates; converting dataframe to a spatial object crs = 4326) # set the projection; https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/OverviewCoordinateReferenceSystems.pdf mapview(soildata) # convert soildata into a shapefile # edit DSN path accordingly write_sf(soildata, dsn = "C:/workspace/soildata.shp") Conveniently, environmental covariate values were previously extracted for all of the observations in the soildata dataset. How would you extract raster data to points in R? (Hint) 6.2.2 Examining Data in R #since we converted the `soildata` `data.frame` to a spatial object to export as an ESRI shapefile, we will need to convert it back to a `data.frame` to plot and further examine the data in R #re-importing the data and overwriting the soildata object is just one way to achieve this url <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv' soildata <- read.csv(url) # view the data # View(soildata) str(soildata) #examine the internal data structure ## 'data.frame': 250 obs. of 50 variables: ## $ x : num -79.7 -79.7 -79.7 -79.8 -79.7 ... ## $ y : num 38.6 38.6 38.6 38.6 38.6 ... ## $ Overtype : chr "Hardwood" "Hardwood" "Hardwood" "Hardwood" ... ## $ Underconifer: chr "n" "y" "n" "y" ... ## $ Oi : num 3 4 3 4 3 2 2 2 4 3 ... ## $ Oe : num 0 0 2 4 4 6 4 2 2 4 ... ## $ Oa : num 0 3 0 0 8 0 0 0 7 4 ... ## $ Otot : num 3 7 5 8 15 8 6 4 13 7 ... ## $ epipedon : chr "ochric" "ochric" "ochric" "ochric" ... ## $ spodint : num 0 0 0 0 1 1 1 0.5 1 0 ... ## $ subgroup : chr "typic" "typic" "typic" "typic" ... ## $ order : chr "ultisol" "inceptisol" "ultisol" "inceptisol" ... ## $ ps : chr "fl" "ls" "fl" "cl" ... ## $ drainage : chr "wd" "wd" "wd" "wd" ... ## $ series : chr "Carrollton" "Mandy" "Carrollton" "Mandy" ... ## $ taxon : chr "series" "series" "series" "taxadjunct" ... ## $ slope : int 45 54 39 25 38 30 38 36 16 36 ... ## $ surfacetex : chr "l" "l" "cnl" "l" ... ## $ stoniness : chr "stx" "stv" "stx" "stv" ... ## $ depthclass : chr "md" "md" "md" "md" ... ## $ bedrockdepth: int 200 200 200 200 200 200 200 200 200 200 ... ## $ depth_cm : int 67 69 52 95 93 81 86 90 75 92 ... ## $ hillslope : chr "backslope" "backslope" "backslope" "backslope" ... ## $ tipmound : int 0 0 0 0 0 0 0 0 0 0 ... ## $ rainfall : int 51 51 51 51 51 51 51 51 51 51 ... ## $ geology : chr "Dch" "Dhs" "Dhs" "Dhs" ... ## $ aachn : num 27.46 81.7 2.59 43.36 70.75 ... ## $ dem10m : num 1123 1239 1155 1240 1211 ... ## $ downslpgra : num 25.9 25.1 78 37 26.1 ... ## $ eastness : num -0.53 0.972 1 0.9 -0.474 ... ## $ greenrefl : num 0.1035 0.0425 0.0351 0.0776 0.0721 ... ## $ landsatb1 : num 0.0726 0.0742 0.0742 0.0775 0.0694 ... ## $ landsatb2 : num 0.062 0.0583 0.0547 0.0583 0.0528 ... ## $ landsatb3 : num 0.0335 0.0351 0.0301 0.0419 0.0318 ... ## $ landsatb7 : num 0.0494 0.0516 0.043 0.0451 0.0302 ... ## $ maxc100 : num -0.0845 -0.0963 -0.0848 0.2386 0.1368 ... ## $ maxent : num 20.26 30.21 27.44 7.88 73.85 ... ## $ minc100 : num -0.1925 -0.1457 -0.8324 0.069 0.0998 ... ## $ mirref : num 0.1608 0.0827 0.1109 0.1477 0.0762 ... ## $ ndvi : num 0.866 0.822 0.842 0.8 0.77 ... ## $ northeastn : num -0.974 0.854 0.728 0.944 -0.958 ... ## $ northness : num -0.848 0.237 0.03 0.435 -0.88 ... ## $ northwestn : num -0.225 -0.52 -0.686 -0.329 -0.287 ... ## $ planc100 : num -0.1177 -0.1077 -0.2173 0.1321 0.0476 ... ## $ proc100 : num -0.231 -0.178 -0.735 0.221 0.161 ... ## $ protection : num 0.237 0.154 0.222 0.114 0.138 ... ## $ relpos11 : num 0.352 0.507 0.233 0.544 0.585 ... ## $ slp50 : num 42.4 42.3 26.3 24.5 36.3 ... ## $ solar : int 1481510 1280610 1348160 1322630 1532160 1536340 1488440 1155820 1440500 1474730 ... ## $ tanc75 : num 0.0511 0.0279 0.0553 -0.0187 -0.0346 ... The example dataset, soildata, consists of 250 observations and 58 variables that were collected in the field or derived from geospatial data to identify spodic soil properties in West Virginia. Of particular interest is determining best splits for spodic intensity (relative spodicity index). As you can see in the data structure, R interpreted the spodint field as numeric. Since spodint is an index, it will need to be changed to a factor and then to an ordered factor. The same will need to be done for tipmound (a tip and mound microtopography index). set.seed(250) soildata <- mutate(soildata, spodint = factor(spodint, ordered = TRUE), tipmound = factor(tipmound, ordered = TRUE) ) Next, let’s explore the tabular data: # does solar radiation affect spodic intensity? ggplot(soildata, aes(x = spodint, y = solar)) + geom_boxplot() + xlab("spodic intensity") + ylab("solar") #how about aspect? ggplot(soildata, aes(x = spodint, y = northwestn)) + geom_boxplot() + xlab("spodic intensity") + ylab("northwestness") #distribution of O horizon thickness among soil orders ggplot(soildata, aes(x = Otot)) + geom_density() + facet_wrap(~ order) # combine numeric columns into a new data frame numeric <- soildata[, c(8, 25, 27:50)] names(numeric) ## [1] "Otot" "rainfall" "aachn" "dem10m" "downslpgra" ## [6] "eastness" "greenrefl" "landsatb1" "landsatb2" "landsatb3" ## [11] "landsatb7" "maxc100" "maxent" "minc100" "mirref" ## [16] "ndvi" "northeastn" "northness" "northwestn" "planc100" ## [21] "proc100" "protection" "relpos11" "slp50" "solar" ## [26] "tanc75" # calculate correlation matrix cormatrix <- cor(numeric) # plot correlation matrix corrplot(cormatrix, method = "circle") 6.2.3 Exercise 1 Examine the soildata shapefile and environmental covariate data in ArcGIS. Come up with a theory of which possible covariates might be useful for predicting spodic morphology and folistic epipedons. Also, think of the different possible ways to model these features given the soildata dataset. 6.3 Classification and Regression Trees (CART) The basic form for all CART models is (y ~ x), where y is the dependent variable to be predicted from x, a set of independent variables. If the dependent variable (y) is numeric, the resulting tree will be a regression tree. Conversely, if the dependent variable (y) is categorical, the resulting tree will be a classification tree. The rpart package allows all data types to be used as independent variables, regardless of whether the model is a classification or regression tree. The rpart algorithm ignores missing values when determining the quality of a split and uses surrogate splits to determine if observation(s) with missing data is best split left or right. If an observation is missing all surrogate splits, then the observation(s) is sent to the child node with the largest relative frequency (Feelders, 1999). Assuming that the rpart and randomForest packages are already installed on your machine, simply load the packages using the library() function. library(rpart) # CART models library(randomForest) # random forest library(rpart.plot) # rpart plot graphics library(caret) # confusion matrix If you wanted to create a classification tree for spodint using all of the variables, you would simply type: rpart(spodint ~ ., data=soildata). Since our goal is to generate a spatial prediction model, we only want to use the variables for which we have spatial coverage–our environmental covariate rasters. spodintmodel <- rpart( spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata, method = "class" ) spodintmodel ## n= 250 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 250 162 0 (0.35 0.084 0.26 0.024 0.28) ## 2) northwestn< 0.55138 148 80 0 (0.46 0.081 0.29 0.027 0.14) ## 4) maxc100< 0.10341 57 20 0 (0.65 0.088 0.14 0.018 0.11) * ## 5) maxc100>=0.10341 91 56 1 (0.34 0.077 0.38 0.033 0.16) ## 10) solar< 1504355 83 52 0 (0.37 0.084 0.33 0.036 0.18) ## 20) minc100< -0.197089 9 1 0 (0.89 0 0 0 0.11) * ## 21) minc100>=-0.197089 74 47 1 (0.31 0.095 0.36 0.041 0.19) ## 42) maxent< 12.9024 23 10 0 (0.57 0.13 0.26 0.043 0) ## 84) solar< 1460005 16 5 0 (0.69 0.19 0.12 0 0) * ## 85) solar>=1460005 7 3 1 (0.29 0 0.57 0.14 0) * ## 43) maxent>=12.9024 51 30 1 (0.2 0.078 0.41 0.039 0.27) ## 86) greenrefl>=0.01846795 40 20 1 (0.22 0.075 0.5 0.025 0.17) ## 172) dem10m>=1012.96 33 14 1 (0.27 0.061 0.58 0 0.091) ## 344) minc100< 0.06651935 24 7 1 (0.21 0.083 0.71 0 0) * ## 345) minc100>=0.06651935 9 5 0 (0.44 0 0.22 0 0.33) * ## 173) dem10m< 1012.96 7 3 2 (0 0.14 0.14 0.14 0.57) * ## 87) greenrefl< 0.01846795 11 4 2 (0.091 0.091 0.091 0.091 0.64) * ## 11) solar>=1504355 8 0 1 (0 0 1 0 0) * ## 3) northwestn>=0.55138 102 53 2 (0.2 0.088 0.22 0.02 0.48) ## 6) protection< 0.0988242 25 15 1 (0.2 0.16 0.4 0.04 0.2) ## 12) proc100< 0.1502945 14 10 0 (0.29 0.29 0.14 0 0.29) * ## 13) proc100>=0.1502945 11 3 1 (0.091 0 0.73 0.091 0.091) * ## 7) protection>=0.0988242 77 33 2 (0.19 0.065 0.16 0.013 0.57) ## 14) maxent< 9.5806 30 19 0 (0.37 0.1 0.17 0.033 0.33) ## 28) rainfall< 52 9 2 0 (0.78 0 0 0 0.22) * ## 29) rainfall>=52 21 13 2 (0.19 0.14 0.24 0.048 0.38) ## 58) landsatb7>=0.0398039 12 7 1 (0.17 0.25 0.42 0 0.17) * ## 59) landsatb7< 0.0398039 9 3 2 (0.22 0 0 0.11 0.67) * ## 15) maxent>=9.5806 47 13 2 (0.085 0.043 0.15 0 0.72) * plot(spodintmodel) text(spodintmodel, cex = 0.8) #cex is text size #if you are having trouble viewing the text in the plot window, click zoom to open a bigger window #you may also need to adjust the plot margins or text size; for this example, try: par(mar = c(3, 6, 3, 6)) plot(spodintmodel) text(spodintmodel, cex = 0.6) For more plot customization, use the rpart.plot package. # extra=3 displays the misclassification rate at the node, expressed as the number of incorrect classifications divided by the total observations in the node; there are many options under the extra setting for classification models rpart.plot(spodintmodel, extra = 3) # adding 100 to the extra setting displays the percentage observations in the node rpart.plot(spodintmodel, extra = 103) # prp is another function in the rpart.plot package that has numerous plot customization options prp(spodintmodel, type = 1, extra = 1, branch = 1) Notice that the terminal nodes display the different spodic intensity classes, ranging from 0 to 2. Can you think of another way that we could model spodic expression? Could we treat spodic intesity (an ordered factor) as numeric, ranging from 0 to 1 to develop a regression tree? Does this make sense? what would a mean of 1 tell you about the observations in the terminal node? What if we considered everything with a spodic intensity of <= 0.5 to be non-spodic and everything >0.5 to be spodic? A binary probability approach to predicting spodic morphology, similar to Nauman et al., 2015. # index for lookup table index <- c(0, 0.5, 1, 1.5, 2) # assigning corresponding categories to look up values values <- c("nonspodic", "nonspodic", "spodic", "spodic", "spodic") # match spodint to index and assign values soildata$newcolumn <- values[match(soildata$spodint, index)] # convert new column from character to factor soildata$newcolumn <- as.factor(soildata$newcolumn) spodintmodel2 <- rpart( newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata, method = "class" ) spodintmodel2 ## n= 250 ## ## node), split, n, loss, yval, (yprob) ## * denotes terminal node ## ## 1) root 250 109 spodic (0.4360000 0.5640000) ## 2) eastness>=-0.1275925 100 36 nonspodic (0.6400000 0.3600000) ## 4) tanc75>=-0.0268239 64 16 nonspodic (0.7500000 0.2500000) * ## 5) tanc75< -0.0268239 36 16 spodic (0.4444444 0.5555556) ## 10) northeastn>=0.7433605 13 3 nonspodic (0.7692308 0.2307692) * ## 11) northeastn< 0.7433605 23 6 spodic (0.2608696 0.7391304) * ## 3) eastness< -0.1275925 150 45 spodic (0.3000000 0.7000000) ## 6) minc100< -0.1576455 47 23 spodic (0.4893617 0.5106383) ## 12) dem10m>=1054.305 15 2 nonspodic (0.8666667 0.1333333) * ## 13) dem10m< 1054.305 32 10 spodic (0.3125000 0.6875000) ## 26) protection>=0.178847 13 5 nonspodic (0.6153846 0.3846154) * ## 27) protection< 0.178847 19 2 spodic (0.1052632 0.8947368) * ## 7) minc100>=-0.1576455 103 22 spodic (0.2135922 0.7864078) ## 14) landsatb7>=0.0440802 37 15 spodic (0.4054054 0.5945946) ## 28) planc100< -0.00902005 8 1 nonspodic (0.8750000 0.1250000) * ## 29) planc100>=-0.00902005 29 8 spodic (0.2758621 0.7241379) * ## 15) landsatb7< 0.0440802 66 7 spodic (0.1060606 0.8939394) * plot(spodintmodel2) text(spodintmodel2, cex = 0.8) Notice that several of the splits changed. Which model performed better? One way to compare the two models is to use the function printcp(): printcp(spodintmodel) ## ## Classification tree: ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = soildata, ## method = "class") ## ## Variables actually used in tree construction: ## [1] dem10m greenrefl landsatb7 maxc100 maxent minc100 ## [7] northwestn proc100 protection rainfall solar ## ## Root node error: 162/250 = 0.648 ## ## n= 250 ## ## CP nsplit rel error xerror xstd ## 1 0.179012 0 1.00000 1.00000 0.046614 ## 2 0.030864 1 0.82099 0.90741 0.048039 ## 3 0.029321 2 0.79012 1.03704 0.045822 ## 4 0.018519 7 0.63580 1.04321 0.045677 ## 5 0.015432 8 0.61728 0.99383 0.046733 ## 6 0.012346 11 0.56790 0.99383 0.046733 ## 7 0.010000 14 0.53086 1.01235 0.046365 printcp(spodintmodel2) ## ## Classification tree: ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = soildata, ## method = "class") ## ## Variables actually used in tree construction: ## [1] dem10m eastness landsatb7 minc100 northeastn planc100 protection ## [8] tanc75 ## ## Root node error: 109/250 = 0.436 ## ## n= 250 ## ## CP nsplit rel error xerror xstd ## 1 0.256881 0 1.00000 1.00000 0.071933 ## 2 0.050459 1 0.74312 0.81651 0.069456 ## 3 0.027523 5 0.54128 0.83486 0.069795 ## 4 0.010000 8 0.45872 0.86239 0.070263 The printcp() funtion generates a cost complexity parameter table that provides the complexity parameter value (CP), relative model error (1 - relative error = ~variance explained), error estimated from a 10-fold cross validation (xerror), and the standard error of the xerror (xstd). The CP values control the size of the tree; the greater the CP value, the fewer the number of splits in the tree. To determine the optimal CP value, rpart automatically performs a 10-fold cross validation. The optimal size of the tree is generally the row in the CP table that minimizes all error with the fewest branches. Another way to determine the optimal tree size is to use the plotcp() function. This will plot the xerror versus cp value and tree size. plotcp(spodintmodel) plotcp(spodintmodel2) The optimal CP value is 0.029321 for spodintmodel and 0.050459 for spodintmodel2. Since both spodic intensity models overfit that data, they will need to be pruned using the prune() function. pruned <- prune(spodintmodel, cp = 0.029321) printcp(pruned) ## ## Classification tree: ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = soildata, ## method = "class") ## ## Variables actually used in tree construction: ## [1] northwestn protection ## ## Root node error: 162/250 = 0.648 ## ## n= 250 ## ## CP nsplit rel error xerror xstd ## 1 0.179012 0 1.00000 1.00000 0.046614 ## 2 0.030864 1 0.82099 0.90741 0.048039 ## 3 0.029321 2 0.79012 1.03704 0.045822 rpart.plot(pruned, extra = 3) pruned2 <- prune(spodintmodel2, cp = 0.050459) printcp(pruned2) ## ## Classification tree: ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = soildata, ## method = "class") ## ## Variables actually used in tree construction: ## [1] eastness ## ## Root node error: 109/250 = 0.436 ## ## n= 250 ## ## CP nsplit rel error xerror xstd ## 1 0.256881 0 1.00000 1.00000 0.071933 ## 2 0.050459 1 0.74312 0.81651 0.069456 rpart.plot(pruned2, extra = 3) The misclassification rate (in cross-validation) for the spodintmodel was 57% (root node error * xerror * 100) which dropped to 38% in the spodintmodel2. Why did the performance of these models differ significantly? Let’s compute an internal validation using a confusion matrix to further examine differences in these models. In order to do this, we will need to split our data into a training and test set. ## splits 70% of the data selected randomly into training set and the remaining 30% sample into test set datasplit <- sample(nrow(soildata), nrow(soildata) * 0.7) train <- soildata[datasplit,] test <- soildata[-datasplit,] spodintmodel <- rpart( spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = train, method = "class" ) printcp(spodintmodel) ## ## Classification tree: ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = train, ## method = "class") ## ## Variables actually used in tree construction: ## [1] aachn maxc100 maxent northwestn planc100 protection ## ## Root node error: 112/175 = 0.64 ## ## n= 175 ## ## CP nsplit rel error xerror xstd ## 1 0.205357 0 1.00000 1.00000 0.056695 ## 2 0.080357 1 0.79464 0.81250 0.059010 ## 3 0.044643 2 0.71429 0.82143 0.058979 ## 4 0.035714 3 0.66964 0.84821 0.058840 ## 5 0.026786 6 0.56250 0.81250 0.059010 ## 6 0.010000 7 0.53571 0.86607 0.058708 pruned <- prune(spodintmodel, cp = 0.070175) # predicting class test data using the pruned model pred <- predict(pruned, newdata=test, type = "class") # computes confusion matrix and summary statistics # sensitivity = producer's accuracy and specificity = user's accuracy confusionMatrix(pred, test$spodint) ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 0.5 1 1.5 2 ## 0 16 3 12 1 7 ## 0.5 0 0 0 0 0 ## 1 2 0 2 1 1 ## 1.5 0 0 0 0 0 ## 2 7 3 7 0 13 ## ## Overall Statistics ## ## Accuracy : 0.4133 ## 95% CI : (0.3008, 0.533) ## No Information Rate : 0.3333 ## P-Value [Acc > NIR] : 0.09044 ## ## Kappa : 0.1525 ## ## Mcnemar's Test P-Value : NA ## ## Statistics by Class: ## ## Class: 0 Class: 0.5 Class: 1 Class: 1.5 Class: 2 ## Sensitivity 0.6400 0.00 0.09524 0.00000 0.6190 ## Specificity 0.5400 1.00 0.92593 1.00000 0.6852 ## Pos Pred Value 0.4103 NaN 0.33333 NaN 0.4333 ## Neg Pred Value 0.7500 0.92 0.72464 0.97333 0.8222 ## Prevalence 0.3333 0.08 0.28000 0.02667 0.2800 ## Detection Rate 0.2133 0.00 0.02667 0.00000 0.1733 ## Detection Prevalence 0.5200 0.00 0.08000 0.00000 0.4000 ## Balanced Accuracy 0.5900 0.50 0.51058 0.50000 0.6521 spodintmodel2 <- rpart( newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = train, method = "class" ) printcp(spodintmodel2) ## ## Classification tree: ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + ## downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + ## landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ## ndvi + northeastn + northness + northwestn + planc100 + proc100 + ## protection + relpos11 + slp50 + solar + tanc75, data = train, ## method = "class") ## ## Variables actually used in tree construction: ## [1] dem10m eastness landsatb7 ndvi northeastn proc100 rainfall ## [8] tanc75 ## ## Root node error: 78/175 = 0.44571 ## ## n= 175 ## ## CP nsplit rel error xerror xstd ## 1 0.269231 0 1.00000 1.00000 0.084298 ## 2 0.070513 1 0.73077 0.91026 0.083278 ## 3 0.047009 3 0.58974 0.92308 0.083459 ## 4 0.025641 6 0.44872 0.93590 0.083627 ## 5 0.012821 9 0.37179 0.93590 0.083627 ## 6 0.010000 10 0.35897 0.93590 0.083627 pruned2 <- prune(spodintmodel2, cp=0.050459) # predicting class of test data using the pruned model pred2 <- predict(pruned2, newdata = test, type = "class") # computes confusion matrix and summary statistics confusionMatrix(pred2, test$newcolumn) ## Confusion Matrix and Statistics ## ## Reference ## Prediction nonspodic spodic ## nonspodic 14 7 ## spodic 17 37 ## ## Accuracy : 0.68 ## 95% CI : (0.5622, 0.7831) ## No Information Rate : 0.5867 ## P-Value [Acc > NIR] : 0.06228 ## ## Kappa : 0.3072 ## ## Mcnemar's Test P-Value : 0.06619 ## ## Sensitivity : 0.4516 ## Specificity : 0.8409 ## Pos Pred Value : 0.6667 ## Neg Pred Value : 0.6852 ## Prevalence : 0.4133 ## Detection Rate : 0.1867 ## Detection Prevalence : 0.2800 ## Balanced Accuracy : 0.6463 ## ## 'Positive' Class : nonspodic ## The accuracy of the spodintmodel using split sample internal validation was 39% (61% misclassification error). The model incorrectly classified all spodic intensity ratings of 0.5 and 1.5. The accuracy of the spodintmodel2 was 63% (37% misclassification error). The model was able to predict spodic better than nonspodic. Notice that both of the misclassification errors increased slightly using the split sample validation versus the deafult internal 10-fold cross-validation used in by the rpart package. It is not uncommon to see slight differences in overall model performance between validations. In this case, it confirms that the first model is relatively 40% accurate and the second model is relatively 63% accurate. As a side note: The default 10-fold internal cross-validation in rpart divides the data into 10 subsets, using 9 sets as ‘learning samples’ to create trees, and 1 set as ‘test samples’ to calculate error rates. This process is repeated for all possible combinations of learning and test samples (a total of 10 times), and error rates are averaged to estimate the error rate for the full data set. 6.3.1 Exercise 2: rpart The examples above dealt with classification trees which resulted in categorical terminal nodes determined by majority votes. In a regression tree model, terminal nodes reflect the mean of the observations in that node. Using the soildata dataset, construct a rpart regression tree model to predict total O horizon thickness. Prune the model if necessary and answer the following questions: ** 1) Was the majority of the variance in total O horizon thickness captured with the rpart model?** ** 2) What were the most important variables in the model?** ** 3) How could the model be improved?** 6.4 Random Forest The randomForest algorithm fits hundreds to thousands of CART models to random subsets of input data and combines the trees for prediction. Similarly to rpart, randomForest allows all data types to be used as independent variables, regardless of whether the model is a classification or regression tree. Unlike rpart, the randomForest algorithm does not straight forwardly handle missing values with surrogate splits. There is a function called rfImpute() that uses a proximity matrix from the randomForest to populate missing values with either the weighted average of the non-missing observations (weighted by the proximities) for continuous predictors or the category with the largest average proximity for categorical predictors. Going back to the soildata dataset, let’s generate a random forest regression model for total O horizon thickness and compare it to the one we just generated in rpart. Just like rpart, randomForest has the same basic model function: (y ~ x). # importance = TRUE will allow the generation of a variable importance plot rf <- randomForest( Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata, importance = TRUE, ntree = 1000, mtry = 10 ) # statistical summary rf ## ## Call: ## randomForest(formula = Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi + northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata, importance = TRUE, ntree = 1000, mtry = 10) ## Type of random forest: regression ## Number of trees: 1000 ## No. of variables tried at each split: 10 ## ## Mean of squared residuals: 28.19145 ## % Var explained: 21.6 # out of bag (OOB) error rate versus number of trees; this will help us tune the ntree parameter plot(rf) The rf model, generated using the default number of trees and number of variables tried at each split, explained approximately 23% of the variance and produced a mean square error (sum of squared residuals divided by n) of 28 cm2. If you were to run this same model again, the % variance explained and MSE would change slightly due to the random subsetting and averaging in the randomForest algorithm. How does this compare with the rpart model? Recall that the soildata dataset had one Histosol observation: hist(soildata$Otot) Let’s remove that observation to see how it impacted our model. # file <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv' # download.file(file, destfile = "soildata.csv") # soildata <- read.csv("soildata.csv", header=TRUE, sep=",") soildata2 <- droplevels(subset(soildata, order != "histosol")) #remove Histosol observation # importance=TRUE will allow the generation of a variable importance plot rf2 <- randomForest( Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata2, importance = TRUE, ntree = 1000, mtry = 9 ) # statistical summary rf2 ## ## Call: ## randomForest(formula = Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi + northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, data = soildata2, importance = TRUE, ntree = 1000, mtry = 9) ## Type of random forest: regression ## Number of trees: 1000 ## No. of variables tried at each split: 9 ## ## Mean of squared residuals: 24.21259 ## % Var explained: 22.83 Did removing the outlier Histosol observation improve the model? The defaults for the number of trees (ntree) and number of variables tried at each split (mtry) may need to be adjusted in the randomForest command to explain more variance in the data and to reduce model over-fitting. For most datasets, manually tweaking these parameters and examining the statistical summary is often sufficient. The tuneRF() function can be used to determine the optimal mtry value, but some users have claimed that this algorithm leads to bias. Feel free to manually tweak the ntree and mtry settings to see how they effect the overall model performance. Another way to assess the rf model is to look at the variable importance plot. varImpPlot(rf2) # sorted tabular summary importance(rf2) %>% as.data.frame() %>% arrange(desc(`%IncMSE`)) ## %IncMSE IncNodePurity ## landsatb7 22.236902 985.81743 ## maxent 17.739327 867.90603 ## protection 10.402061 354.10473 ## solar 8.802159 297.73286 ## rainfall 8.221963 159.49617 ## northwestn 7.911376 466.61915 ## aachn 6.286667 276.36940 ## relpos11 5.993199 243.81129 ## dem10m 5.654822 265.87876 ## slp50 5.247386 227.37215 ## downslpgra 4.904722 181.87990 ## northeastn 4.537338 365.61570 ## minc100 4.198793 224.29018 ## eastness 3.925742 277.77702 ## maxc100 3.908787 197.91463 ## proc100 3.291970 198.55426 ## planc100 3.030439 199.93368 ## northness 2.997353 212.98176 ## landsatb3 2.791607 101.61470 ## tanc75 2.110630 201.27958 ## greenrefl 1.967475 229.90648 ## mirref 1.941573 378.89995 ## landsatb1 1.913580 136.40835 ## ndvi 1.730734 245.61133 ## landsatb2 1.633074 111.84254 ## geology 1.519288 34.60702 For each tree, each predictor in the OOB sample is randomly permuted and passed through the tree to obtain an error rate (mean square error (MSE) for regression and Gini index for classification). The error rate from the unpermuted OOB is then subtracted from the error rate of the permuted OOB data, and averaged across all trees. When this value is large, it implies that a variable is highly correlated to the dependent variable and is needed in the model. In a regression tree analysis, randomForest uses %IncMSE and IncNodePurity to rank variable importance. %IncMSE is simply the average increase in squared residuals of the test set when variables are randomly permuted (little importance = little change in model when variable is removed or added) and IncNodePurity is the increase in homogeneity in the data partitions. In a classification tree analysis, randomForest uses MeanDecreaseAccuracy and MeanDecreaseGini. For MeanDecreaseAccuracy, the more the accuracy of the model decreases due to the addition of a single variable, the more important the variable is deemed. MeanDecreaseGini is a measure of how each variable contributes to the homogeneity of the nodes and leaves. In the rf2 model, it is apparent that landsatb7 is the most important variable used in the model, followed by maxent, protection index, northwestness, solar, and rainfall. 6.4.1 Exercise 3: randomForest Using the soildata dataset, construct a randomForest model to predict the probability of a folistic epipedon. Be sure to tweak the ntree and mtry parameters to capture the most variability. Use the following code to combine ochric and umbric into a new category called nonfolistic. soildata$epipedon2 <- ifelse(soildata$epipedon %in% c("ochric", "umbric"), "nonfolistic", soildata$epipedon) ** 1) What is the out-of-bag error rate?** ** 2) Compare this model with the total O horizon thickness regression model. Which would be better for spatial interpolation?** ** 3) How could you improve this model?** 6.5 Prediction using Tree-based Models As with any modeling technique, tree-based models can be used for prediction and can be spatially interpolated using environmental covariates. In order to interpolate a model, R requires that all raster images have a common datum, common cell resolution, are coregistered, and are preferably .img files. The function stack() combines all of the rasters into a “raster stack.” The predict() function is then used in the form of: predict(rasterstack, fittedmodel, type=\"\"). Follow along through the example below to interpolate the rpart total O horizon thickness model: library(raster) # combine rasters with a .img file extension stored in the working directory rasters <- stack(list.files(getwd(), pattern = "img$", full.names = FALSE)) rasters model <- randomForest( Otot ~ landsatb7 + maxent + protection + northwestn + solar, data = soildata2 ) # type not specified = vector of predicted values, "response" for predicted class, "prob" for probabilities, or "vote" for matrix of vote counts (one column for each class and one row for each new input); either in raw counts or in fractions (if norm.votes = TRUE) # options for predicting rpart model: type = "vector" for mean response at the node, "prob" for matrix of class probabilities, or "class" for a factor of classifications based on the responses predict(rasters, model, progress = "window", overwrite = TRUE, filename = "rfpredict.img") The output raster “rfpredict.img” can be added and viewed in ArcMap. R GUI image You can also view the interpolated model in R: rfpredict <- raster("rfpredict.img") plot(rfpredict, xlab = "Easting (m)", ylab = "Northing (m)", main = "Total O Horizon Thickness (cm)") 6.6 Summary Tree-based models are intuitive, quick to run, nonparametric, and are often ideal for exploratory data analysis and prediction. Both rpart and randomForest produce graphical and tabular outputs to aid interpretation. Both packages also perform internal validataion (rpart=10-fold cross validation; randomForest=OOB error estimates) to assess model performance. Tree-based models do require pruning and/or tweaking of model parameters to reduce over-fitting and are unstable in that removing observations (especially outliers) or independent predictors can greatly alter the tree structure. In general, tree-based models are robust against multicollinearity and low n, high p datasets (low sample size and many predictors). References "],["acc-unc-categorical-data.html", "A Accuracy and Uncertainty for Categorical Predictions A.1 Status Quo A.2 Theses A.3 Soap Box Time A.4 Concept Demonstration via Simulated Data A.5 Accuracy A.6 Uncertainty A.7 Review A.8 Example Implementation A.9 Resources", " A Accuracy and Uncertainty for Categorical Predictions This document is an abbreviated attempt at addressing some of the issues related to accuracy and uncertainty that I have brought up over discussion of raster (soil class) mapping standards. As such, the following is a combination of soap box moments, demonstrations of methods, todo items for my future self, and references. Honestly, before going any further be sure to read the recent paper by Rossiter, Zeng, and Zhang (2017). This article does a fine job of summarizing the major differences between classification and prediction. Most of the modeling frameworks we will be using or evaluating generate predictions in the form of probabilities (prediction). At some point the stack of probabilities will be converted into a single map depicting the most likely class at each pixel (classification). The iterative assessment of model performance (e.g. accuracy and uncertainty) should happen as part of the prediction phase via metrics such as the Brier score and Shannon entropy. An evaluation of the final classification is helpful for communicating accuracy to a wider audience (e.g. percent correctly classified) but should not be the primary means of optimizing model performance. A.1 Status Quo The “Digital Soil Mapping” chapter (5) from the latest Soil Survey Manual describes two commonly used metrics for the description of accuracy and uncertainty: overall accuracy / percent correctly classified (PCC) and the confusion index (CI) of Burrough, van Gaans, and Hootsmans (1997). These methods are widely used and implementation is simple. Given the complex nature of class mapping results (e.g. stack of class probabilities) and inherent (likely quantifiable) similarity of soil classes, I think that we should explore options for a more robust suite of accuracy and uncertainty metrics. Furthermore, it is my opinion that any evaluation of probabilistic predictions should be integrated over all classes. A.2 Theses The \\(\\tau\\) statistic of (Rossiter, Zeng, and Zhang 2017) is a more reliable and nuanced representation of accuracy vs. PCC. The \\(\\tau\\) statistic can be upgraded with additional knowledge given the availability of 1) prior understanding of class proportions, and/or, 2) meaningful parameterization of pair-wise class distances. There can be consensus on formulation of approximate pair-wise distances, within a given modeling domain. Pair-wise distances may not necessarily be the same across modeling domains or projects. Brier scores are option for an even more nuanced representation of accuracy as they integrate all predicted probabilities. The confusion index of Burrough, van Gaans, and Hootsmans (1997) is an unstable metric when the number of predicted classes is large and when the most likely classes are associated with low probabilities. Shannon entropy (log base 2) is a more reliable representation of uncertainty than the confusion index, especially when the number of possible classes varies by project. The importance of a universally reliable representation of uncertainty is even more important when several methods are used concurrently. There should be a way to integrate pair-wise distances into the Shannon entropy (or related method) and Brier scores; maybe we will discover those here. A.3 Soap Box Time Our current QC/QA process is based on many forms of evaluation, accumulates some degree of subjectivity and relies heavily on qualitative forms of information (field experience, institutional knowledge, etc.). On the opposite side of the spectrum, the validation of raster mapping is often claimed to be free of subjective interference and entirely quantitative. Those are “good things” that we should always strive for, however, the simplicity of calculating a “percent correctly classified” can interfere with a more nuanced evaluation of accuracy. As I mentioned on the phone (and implicitly volunteered for) a validation “score” might be more meaningful than any single validation metrics. One such score might include: agreement between predicted probabilities and observed class (e.g. Brier scores) agreement between the most likely class and observed class, accounting for class similarities (e.g. weighted \\(\\tau\\)) distribution of class-wise Shannon entropy values calibration vs. predicted vs. validation proportion of classes some kind of metric that integrates spatial connectivity of predictions / observations, for example: cross-tabulate calibration / prediction / validation classes with geomorphon classes I strongly believe that we need a robust suite of metrics primarily for internal discussion and evaluation of raster mapping products; even more so when complex modeling frameworks such as randomForest or neural nets are used. Accuracy and uncertainty metrics are primarily vehicles for understanding, re-calibrating (as needed), and communicating statistical models as part of the development and QA/QC process. A.4 Concept Demonstration via Simulated Data Consider a supervised classification that generates predictions for 5 possible soil classes. Suites of predicted probabilities fall into 3 general cases: “Case 1”: classes D and E are nearly tied for the most likely class, but their respective probabilities are generally < 0.5 “Case 2”: class E is almost always the most likely class, but classes B, C, and D are tied for second place “Case 3”: class E is always the most likely class, all other classes have probabilities < 0.2 # examples of three cases print(p.1) Figure A.1: Probability distributions of predictions. Even though these are simulated data, the three cases above demonstrate common modeling scenarios where classification uncertainty ranges from very low (“Case 3”) in some areas to quite high (“Case 1”) in others. These three cases could easily be associated with real situations: “Case 1”: predictions for soil classes represent a hillslope complex that isn’t quite disentangled by the model “Case 2”: predictions for soil classes represent limited success in partitioning between a single water shedding (E) vs. multiple water collecting positions (A-D) “Case 3”: predictions for soil classes represent a successful partitioning between Holocene age deposits (E) vs. older alluvial terraces (A-D) A.5 Accuracy A.5.1 Confusion Matrix / Area Under ROC See Chapter 9. Review some of the commentary on the use of only the confusion matrix and AUROC for rating predictions in the medical field. The confusion matrix and associated statistics are a useful starting point but not the most effective means for comparing performance. A.5.2 Brier Scores Brier scores Harrell (2015) quantify agreement between observed classes and predicted probabilities: \\[ B = \\frac{1}{n} \\sum_{i=1}^{n}{ ( p_{i} - y_{i} )^{2} } \\] where \\(B\\) is an index of agreement between predicted probabilities, \\(\\mathbf{p}\\), and class labels, \\(\\mathbf{y}\\). Larger values suggest less agreement between probabilities and observed class labels. Follow-up: https://en.wikipedia.org/wiki/Brier_score https://stats.stackexchange.com/questions/112250/understanding-the-rank-probability-score http://empslocal.ex.ac.uk/people/staff/dbs202/publications/2008/stephenson-brier.pdf http://iopscience.iop.org/article/10.1088/1748-9326/7/4/044019 What about a weighted version of this score, based on a re-statement of the distance matrix? A.5.3 Tau and Weighted Tau (class-similarity) (Rossiter, Zeng, and Zhang 2017) implemented in aqp::tauw(). This paper contains some discussion on a weighted version of Shannon Entropy using the subset of similarities between predicted classes and the actual class. A.5.3.1 Commentary from DGR Prior class probabilities. Commentary from DGR: That depends on the mapping method. In LDA we can set the priors, then we’d use these in tau. But for an automatic DSM procedure the priors are all equal (Foody’s modified kappa). If judging a manual mapper, the priors can be their overall probabilities for an area. E.g., in one county we have a pretty good idea that it is half Vertisols, so the mapper is prejudiced (in the good sense) about this. Class similarity The weighting is quite tricky since obviously it can be used to manipulate results. I really like the ‘error loss’ method if there is some numerical value put on each difference – as I did with the NC site index. In CA you have the Storie index, you could use that difference for mis-mappings of series. Numerical taxonomy measures could also be used but you’d need to agree on which properties to use. If the purpose of the map is e.g. to estimate C stocks, then the difference between the mean C stocks between classes from NASIS might be used. Coming up with a transparent and accepted weighting can be tricky. A.6 Uncertainty A.6.1 Shanon Entropy \\[ H = -\\sum_{i=1}^{n}{p_{i} * log_{2}(p_{i})} \\] where \\(H\\) is an index of uncertainty associated with predicted probabilities, \\(\\mathbf{p}\\), of encountering classes \\(i\\) through \\(n\\). Smaller values imply less entropy (more information). Given equal class probabilities, H will increas as the number of classes increases. Kempen et al. (2009) described a normalized version of Shannon entropy that is constrained to values between 0 and 1: \\[ H = -\\sum_{i=1}^{n}{p_{i} * log_{n}(p_{i})} \\] where \\(H\\) is an index of uncertainty associated with predicted probabilities, \\(\\mathbf{p}\\), of encountering classes \\(i\\) through \\(n\\). This representation may be conveniently contained within the range of \\([0,1]\\), however, it cannot be used to compare uncertainty from models using different numbers of classes. It is my recommendation that the \\(log_{2}\\) version of Shannon H be used as our primary metric of uncertainty for predictive soil class mapping. Shannon entropy does not take into account similarity among classes. A.7 Review # examples of three cases print(p.1) pp <- ldply(s, performance) names(pp)[1] <- 'example' kable_styling(kable(pp, row.names = FALSE, digits = 2, format='html'), full_width = FALSE) example brier.score tau.equal tau.actual PCC Case 1 0.73 0.22 0.17 0.38 Case 2 0.73 0.24 0.19 0.40 Case 3 0.28 0.80 0.45 0.84 ex <- ldply(s, extractExample, n=1) names(ex)[1] <- 'example' ex$CI <- NULL ex$actual <- NULL add_header_above(kable_styling(kable(ex, row.names = FALSE, digits = 2, format='html'), full_width = FALSE), header=c(" " = 1, "Class Probabilities" = 5, "Uncertainty" = 1)) Class Probabilities Uncertainty example A B C D E Shannon.H Case 1 0.11 0.25 0.04 0.24 0.36 2.05 Case 2 0.06 0.11 0.14 0.22 0.46 1.99 Case 3 0.11 0.01 0.08 0.03 0.78 1.13 A.8 Example Implementation The aqp package has an implementation of Shannon entropy and Brier score; there are many other implementations but these are convenient for soil survey work. Consider the following table of predicted probabilities (classes A,B,C,D,E) and observed class (actual). library(aqp) # example data d <- structure(list(A = c(0.0897243494322252, 0.0537087411977284, 0.0643087579284512, 0.0582791533521884, 0.0655491726966812, 0.0878056947034425, 0.0550727743006022, 0.10724015754623, 0.0332599961787985, 0.0555131608754956 ), B = c(0.191110141078936, 0.187244044389649, 0.119214057525671, 0.198461646003737, 0.161851348940294, 0.172157251906694, 0.113611770097243, 0.178697159594029, 0.194607795787689, 0.188977055949146), C = c(0.121941735763077, 0.0770539012535731, 0.0977753159795662, 0.0774293724263895, 0.072198187957068, 0.0366921003115242, 0.151033286139089, 0.0974443429098862, 0.124876574685048, 0.0864142563046045), D = c(0.351108807309283, 0.322120077305279, 0.440632731639948, 0.401063395801608, 0.312647702445919, 0.304193047630158, 0.270239142407351, 0.258895264130713, 0.422747316475851, 0.252724366285052 ), E = c(0.246114966416479, 0.359873235853771, 0.278069136926363, 0.264766432416077, 0.387753587960038, 0.399151905448182, 0.410043027055715, 0.357723075819142, 0.224508316872614, 0.416371160585702), id = c("1", "10", "100", "1000", "101", "102", "103", "104", "105", "106" ), actual = c("D", "B", "D", "E", "D", "D", "E", "E", "D", "E" )), .Names = c("A", "B", "C", "D", "E", "id", "actual"), row.names = c(NA, 10L), class = "data.frame") # check it out # predictions, and actual, observed class head(d) ## A B C D E id actual ## 1 0.08972435 0.1911101 0.12194174 0.3511088 0.2461150 1 D ## 2 0.05370874 0.1872440 0.07705390 0.3221201 0.3598732 10 B ## 3 0.06430876 0.1192141 0.09777532 0.4406327 0.2780691 100 D ## 4 0.05827915 0.1984616 0.07742937 0.4010634 0.2647664 1000 E ## 5 0.06554917 0.1618513 0.07219819 0.3126477 0.3877536 101 D ## 6 0.08780569 0.1721573 0.03669210 0.3041930 0.3991519 102 D Brier scores (accuracy) are computed over all predictions and associated observed classes. # compute Brier score from all predictions brierScore(d, classLabels = c('A', 'B', 'C', 'D', 'E'), actual = 'actual') ## [1] 0.5833992 Shannon entropy (uncertainty) is computed from each vector of predicted probabilities. # shannon entropy for first row, could be a single pixel or obs. point shannonEntropy(d[1, c('A', 'B', 'C', 'D', 'E')]) ## [1] 2.166525 # compute shannon entropy for all rows apply(d[, c('A', 'B', 'C', 'D', 'E')], 1, shannonEntropy) ## 1 2 3 4 5 6 7 8 ## 2.166525 2.021157 1.982791 2.024063 2.011094 1.971243 2.036219 2.151995 ## 9 10 ## 2.006615 2.018874 A.9 Resources A.9.1 Evaluating Accuracy of Categorical / Probabilistic Predictions Commentary on the use of confusion matrix and AUROC What is the AUC / AUROC? Commentary on C-index / AUROC AUROC Scoring Rules Frank Harrel’s Website + links Classification vs. Prediction A.9.2 Sampling and Stability of Estimates Gridded Data: Sample vs. Population Demonstration of sampling density vs. stability of median References "],["commentary-selecting-a-modeling-framework.html", "B Commentary: Selecting a Modeling Framework B.1 Soil Temperature Regime Modeling in CA792", " B Commentary: Selecting a Modeling Framework The choice of modeling framework has a significant impact on the quantity of data required, flexibility to account for non-linearities and interactions, potential for over-fitting, model performance, and degree to which the final model can be interpreted. This document and related commentary provides a nice background on the interplay between model generality, interpretation, and performance. TODO: package up these data to be used as an example. B.1 Soil Temperature Regime Modeling in CA792 The following figure goes along with a bit of conversation I had (below) with some of my colleagues, on the topic of modeling soil temperature regime using a variety of frameworks. The strong bioclimatic gradient with MLRAs 17, 18, 22A, 22B made is possible to use a modeling framework that generated reasonable predictions and resulted in an interpretable model. Essentially, each framework (MLR, regression trees, randomForest, etc.) is useful for different tasks but thinking about the most appropriate framework ahead of time is time well spent. Predictions aren’t the same as science or understanding. Sometimes we need the former, sometimes we need the latter and sometimes we need both. The x-axis is elevation, in most cases the dominant driver of soil temperature and soil temperature regime in this area. The y-axis is conditional probability of several STR. The top panel represents the smooth surface fit by multinomial logistic regression. These smooth surfaces lend to testable interpretations such as “the transition between STR per 1,000’ of elevation gain follows XXX”. This is far more useful when the model includes other factors such as annual beam radiance and the effect of cold air drainages. Absolute accuracy is sacrificed for a general (e.g. continuous over predictors) representation of the system that can support inference. Another example, “at elevation XXX, what is the average effect of moving from a south-facing slope to a north-facing slope?”. The second panel down represents the hard thresholds generated by an algorithm from the tree-based classification framework (e.g. recursive partitioning trees via rpart). Accuracy is about the same as the MLR approach and the hard breaks can be interpreted as “reasonable” cut points or thresholds that may have links to physical processes. Note that the cut points identified by this framework are very close to the 50% probability cross-over points in the MLR panel. The result is a (potentially) pragmatic partitioning of reality that can support decisions but not inference (e.g. “rate of change in Pr(STR) vs. 1000’ elevation gain”). The third panel down represents the nearly-exact (over?) fitting of STR probabilities generated by the random forest framework. This approach builds thousands of classification trees and (roughly) averages them together. The results are incredible (unbelievable?) within-training-set accuracy (99% here) at the expense of an interpretable model. That isn’t always a problem: sometimes predictions are all that we have time for. That said, this framework requires a 100x larger training sample (vs. MLR) and an independent validation data set before it can be trusted on new data. editor_options: chunk_output_type: console "],["references.html", "References", " References "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] +[["model-evaluation.html", "Chapter 2 Model Evaluation 2.1 Introduction 2.2 Theory of Uncertainty 2.3 Resampling to Estimate Uncertainty 2.4 Performance Metrics 2.5 Validation", " Chapter 2 Model Evaluation 2.1 Introduction Validating and assessing the uncertainty of a model is just as, if not more important, than generating the model itself. Validation quantifies the model’s ability to explain variance in the data while uncertainty quantifies the confidence of model prediction. Uncertainty and validation assessments enable the end user to better understand model error, the nature and distribution of the input data, and the overall accuracy and spatial applicability of the model. Within a soil model, there are several sources of error: Measurement errors Interpretation errors Digitization errors Classification errors Generalization errors Interpolation errors Semantic errors Errors are simply the difference between reality and our representation of reality. Assessing the data structure with simple statistical measures such as mean, median and mode can be useful for understanding the central tendency of the data, but more complicated calculations are needed to get at dispersion or the variation of a property within a population to further assess error and uncertainty (Zar, 1999). Measure of Dispersion Range: The difference between the highest and lowest values measured or observed. Not always reliable because it can include outliers, error, or misclassified data. Quantiles: These refer to 25% increments in the rank of observations. Typically, the 25th and 75th quantiles are used to represent the spread of the most typical values around the central tendency. Measure of Variation * Variance: The deviation of from the mean is calculated as sum of squares (SS) to use absolute deviation (eliminate any distinction between negative and positive correlation). \\(variance (sample) = \\frac{SS}{n-1}\\) \\(SS = \\sum{(X - x)^2}\\) Standard deviation: Used to return variance to the original units \\(sd = \\sqrt{\\frac{SS}{n-1}}\\) Coefficient of variation: Scale standard deviation with mean so that multiple properties can be compared \\(CV = \\frac{SD}{x}\\) Measures of Certainty Standard Error: represents the variance of the mean that would be found with repeated sampling. Estimated by dividing standard deviation by the square root of n. The concept of standard error is important for hypothesis testing. Confidence interval: Interval in which you are confident that a given percentage (known as the confidence limit 95, 80, 75%) of the population lie. If a normal distribution is assumed, for a 95% confidence interval, it can be estimated that the value is 95% likely to fall between as SD * 1.96 +/- mean. 2.1.1 Examples - Dispersion Below is a simulated example demonstrating the affect of sample size and standard deviation on quantile estimates. ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n med_min med_mean med_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 6.12 6.92 7.74 ## 2 sd = 1 n = 30 6.67 7.02 7.41 ## 3 sd = 1 n = 60 6.67 6.96 7.37 ## 4 sd = 1 n = 100 6.75 7.00 7.17 ## 5 sd = 2 n = 10 4.66 6.95 8.07 ## 6 sd = 2 n = 30 5.63 6.79 7.67 ## 7 sd = 2 n = 60 6.44 7.03 7.67 ## 8 sd = 2 n = 100 6.54 7.02 7.63 The results show that quantile estimates are more variable with smaller sample sizes and larger inherent standard deviations. This example demonstrates how our results would differ if we were to sample the same soils again. We would be “uncertain” of our results unless the underlying standard deviation is small or our sample size was large. Both factors would also impact how certain we could be that 2 or more classes of soils are different. 2.1.2 Examples - Variation and Certainty Demonstration of how to calculate variance. # calculate the mean mu <- mean(test$pH) # subtract mean from each value and square (i.e. residuals) test$S <- (test$pH - mu)^2 # calculate overall sum of squares SS <- sum(test$S) # calculate standard deviation (length gives us the total number of sample/observations) sqrt(SS / (length(test$pH) - 1)) ## [1] 1.569779 Note below how our estimate of the variance can vary widely, particularly for simulated datasets with a inherent standard deviation of 2. ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n sd2_min sd2_mean sd2_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 0.604 1.00 1.59 ## 2 sd = 1 n = 30 0.736 0.970 1.34 ## 3 sd = 1 n = 60 0.763 1.00 1.17 ## 4 sd = 1 n = 100 0.876 0.994 1.09 ## 5 sd = 2 n = 10 1.19 1.94 2.98 ## 6 sd = 2 n = 30 1.61 2.06 2.58 ## 7 sd = 2 n = 60 1.52 1.93 2.21 ## 8 sd = 2 n = 100 1.75 1.98 2.38 Now let’s see Standard Error (standard deviation / square root of n) below. The results show how our estimates become more precise as the sample size increases. ## # A tibble: 8 × 5 ## # Groups: sd [2] ## sd n SE_min SE_mean SE_max ## <chr> <fct> <dbl> <dbl> <dbl> ## 1 sd = 1 n = 10 0.191 0.317 0.502 ## 2 sd = 1 n = 30 0.134 0.177 0.244 ## 3 sd = 1 n = 60 0.0985 0.129 0.151 ## 4 sd = 1 n = 100 0.0876 0.0994 0.109 ## 5 sd = 2 n = 10 0.376 0.614 0.942 ## 6 sd = 2 n = 30 0.294 0.376 0.471 ## 7 sd = 2 n = 60 0.197 0.249 0.285 ## 8 sd = 2 n = 100 0.175 0.198 0.238 2.2 Theory of Uncertainty At it’s most basic level, uncertainty is simply a lack of certainty. In soil survey, uncertainty encompasses both of these aspects: you’ve gathered multiple observations and you need to describe them in relation to one another, and you must predict a property or characteristic at unobserved locations. It is difficult to quantify the knowledge we have about data and information uncertainty. While we may have good data of the accuracy of our GPS, how likely are we to include that in our estimates of model error? How important is it? In other disciplines, they spend a lot of time quantifying and tracking measurement error. In soil science, we tend to treat measurement as having an exact known location and value. Given the unknowns in mapping and predicting soil properties, this is a reasonable treatment of relatively small levels of error. When using secondary information as data (or data that is actually a prior prediction or result of a model, including soil components), considering incorporated error can be crucial. One way to deal with this is through re-sampling an alternate way is to through error propagation theory. The most common way to deal with this in soil survey and digital soil mapping is to assess error through model validation. Explanatory vs. Predictive Modelling While explanatory and predictive modeling can use the same types of models, data and even questions, the errors and uncertainty are important for different reasons Explanatory or Descriptive - data are collected and analyzed in order to test causal hypothesis and observe correlations and relationships between data element. Often used at the beginning phases of soil-landscape exploration. How does the soil relate to each of the soil forming factors? Predictive - applying a model or algorithm to data for the purpose of making a prediction (in new or unknown locations) (Shueli, 2010). 2.3 Resampling to Estimate Uncertainty When calculating many basic statistical parameters, the assumption is that the data is parametric. That implies that the data is continuous (ratio or interval) and normally distributed. This is rarely the case with soil data. Soil properties are often not normally distributed (you cannot have less that 0% organic matter, for instance) and often we are trying to predict soil taxa or other nominal classes. Re-sampling is a general term that defines any procedure to repeatedly draw samples form a given data-set. You are essentially pretending to collect a series of separate samples from your sample set then calculating a statistic on that sample. Re-sampling techniques can be used on known and unknown data distributions for uncertainty estimation and validation (Good 2013). # this bootstrap is estimating the uncertainty associated with the variance of sas$pH_0.30_obs # an example of getting a confidence interval through bootstrapping (no assumption of a normal distribution) # load the GSP Salt Affected Soil dataset url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_sas.csv" sas <- read.csv(url) N <- nrow(sas) # abbreviate our data to simply the commands ph <- na.exclude(sas$pH_0.30_obs) n <- 100 # set number of iterations k <- 50 # create a data frame to store the results boot_stats <- data.frame( vars = numeric(k), means = numeric(k) ) # for each instance (i) in the set from 1 to N (50 in this case) for (i in 1:k) { # create a new variable dB from each bootstrap sample of d boot.sample = sample(ph, n, replace = TRUE) boot_stats$means[i] = mean(boot.sample) boot_stats$vars[i] = var(boot.sample) } quantile(boot_stats$vars) ## 0% 25% 50% 75% 100% ## 0.8815688 1.0457885 1.1422593 1.2261761 1.5571980 stripchart(boot_stats$vars) # Traditional Approach ci <- c( # lower 5th l = mean(ph) - 1.96 * sd(ph) / sqrt(N), # upper 95th u = mean(ph) + 1.96 * sd(ph) / sqrt(N) ) # Compare Bootstrap to Confidence Interval quantile(boot_stats$means, c(0.025, 0.975)) ## 2.5% 97.5% ## 5.792807 6.178015 ci ## l u ## 6.002983 6.024366 2.3.1 Exercise 1 Create a new R script. Calculate a bootstrapped median, 10th percentile, and 90th percentile for EC_0.30_obs. Calculate a traditional confidence interval for EC_0.30_obs. Why is the traditional confidence interval so much narrower? Forward you R script your instructor. 2.4 Performance Metrics When evaluating a model, we need to estimate both it’s accuracy and precision. Accuracy estimates the ability of a measurement or prediction to match the actual or reference value of the quantity being measured. Precision in contrast estimates our ability to reproduce a measurement or prediction consistently. Typically people will refer to uncertainty, which is the inverse of precision. Below is a summary of the various measures used to quantify accuracy and precision. The choice of metric depends on whether we are measuring or modeling continuous or categorical variables. In general, all models that estimate continuous variables are referred to as regression models. Sometimes regression models are referred too as quantitative, while categorical models are referred too as qualitative. 2.4.1 Regression Metrics Bias: Mean Error (ME)/Prediction Error/Bias: Description: Quantifies whether the overall error is systematically positive or negative; the closer to 0, the better. Pro: In the same use as the original values Accuracy: Mean Square Error (MSE): Description: Squared estimate of the average error size. Con: Not in the same units as the original values. Root Mean Square Error (RMSE): Description: Positive estimate of the average error size; the smaller, the better. Pro: In the same units as the original values. Coefficient of Determination (R2): Description: Represents the proportion of variance explained by the model. Pro: Values range between 0 and 1. Values < 0 can occur if the prediction is worse than simply predicting the average value. Con: Over-optimistic when extreme values or skewed distributions are present. Often confused with the squared Pearson’s correlation coefficient (r2). References: Kutner et al. 2004; Zumel and Mount 2020 Precision/Uncertainty: Standard Error (SE): Description: Error in the model parameters (e.g., coefficients or overall prediction). Confidence Interval (CI): Description: Conversion of the SE to an interval according to a given probability (e.g., 95 percent); its range is narrower than the prediction interval. Con: Assumes a normal distribution, unless transformed or bootstrapped. References: Webster (2001) Prediction Interval (PI): Description: Interval designed to capture the range in values of a prediction according to a given probability. Relative Prediction Interval (RPI): Description: Ratio of the 95 percent prediction interval range to the 95 percent observed inter-quantile range in values. Can use different probability values (e.g., 90 percent PI to 90 percent inter-quantile range). Pro: Typically ranges between 0 and 1; values larger than 1 indicate very high model uncertainty. No distribution assumptions. References: Nauman and Duniway (2019) library(caret) # Numeric accuracy metrics---- # R2 ---- caret::R2( pred = sas$pH_0.30_pred, obs = sas$pH_0.30_obs, formula = "traditional", na.rm = TRUE ) ## [1] 0.8526782 # RMSE ---- caret::RMSE( pred = sas$pH_0.30_pred, obs = sas$pH_0.30_obs, na.rm = TRUE ) ## [1] 0.4690274 # Numeric precision/uncertainty metrics---- # R2 confidence interval vars <- c("pH_0.30_pred", "pH_0.30_obs") MBESS::ci.R2( R2 = 0.85, N = sum(complete.cases(sas[vars])), K = 1, conf.level = 0.975 ) ## $Lower.Conf.Limit.R2 ## [1] 0.8462365 ## ## $Prob.Less.Lower ## [1] 0.0125 ## ## $Upper.Conf.Limit.R2 ## [1] 0.8536713 ## ## $Prob.Greater.Upper ## [1] 0.0125 # RMSE confidence interval ## Standard Error n <- sum(complete.cases(sas[vars])) SE <- qnorm(0.975) * sqrt(var((sas$pH_0.30_obs - sas$pH_0.30_pred)^2, na.rm = TRUE) / n) ## Confidence Interval 0.47 + c(-1 * SE, SE) ## [1] 0.4645869 0.4754131 # plot errors idx <- sample(1:nrow(sas), 100) ggplot(sas[idx, ], aes(x = pH_0.30_pred, y = pH_0.30_obs)) + geom_point() + # draw a 1 to 1 line geom_abline() + # draw a linear fit; method = "lm" geom_smooth(method = "lm") ggplot(sas, aes(x = pH_0.30_pred, y = pH_0.30_obs)) + # use a hex geom if there are too many points and they overlap geom_hex() + geom_abline() + geom_smooth() 2.4.2 Exercise 2 Append the following exercises to your previous R script. Compare the traditional \\(R^2\\) to the alternative \\(R^2\\) for EC_0.30_obs vs EC_0.30_pred? Calculate the RMSE() and MAE()for EC_0.30_obs vs EC_0.30_pred? Plot a hex bin scatterplot of EC_0.30_obs vs EC_0.30_pred with a linear smoother. Forward you R script your instructor. 2.4.3 Categorical 2.4.3.1 Probability-based metrics (threshold-independent) Beware the \\(D^2\\), Tjur’s D, and AUC (or c-statistic) only apply to binary classes. Accuracy: Brier Score (BS): Description: In the case of binary outcomes (e.g., 1 vs. 0), it is equivalent to the Mean Square Error, where a positive outcome equals 1 minus the predicted probability. For multinomial outcomes, the squared error is averaged for all classes. Lower values denote higher accuracy. Pro: Integrates more information about predictions (all probabilities) vs. the most likely class used by overall accuracy or tau index. Con: Does not incorporate prior knowledge of class proportions. Does not incorporate class similarity. References: Brier (1950); Harrell (2015); Steyerberg (2019) Deviance Squared (D2) or Pseudo R2: Description: The proportion of deviance explained. Pro: Values range between 0 and 1. Values < 0 can occur if the prediction is worse than simply predicting the average value. Con: Over-optimistic when extreme values or skewed distributions are present. Coefficient of Discrimination (or Tjur’s D): Description: Difference in average probability of true positives and true negatives. It is another alternative version of D2 or Pseudo R2. Pro: Values range between 0 and 1. References: Tjur (2013) Concordance (c) Statistic or Area Under the Curve (AUC): Description: Probability that a binary classifier does better than random chance. The area under the receiver operator characteristic curve. Pro: Values range between 0.5 and 1. Con: Less sensitive than D2. References: Hand (2012); Harrell (2015) Precision/Uncertainty: Shannon entropy: Description: Quantitative measure of “information,” “complexity,” “certainty,” or “diversity” contained within a vector of probabilities. Larger values denote less information, higher complexity, less certainty, and greater diversity. Pro: Integrates “confusion” over all probabilities. Entropy values from different models (e.g., differing numbers of classes) can be directly compared. Con: Does not incorporate the similarity between classes. References: Shannon (1948) Normalized Shannon Entropy: Description: An alternate version of Shannon Entropy that is constrained to the interval [0,1]. Pro: Integrates “confusion” over all probabilities. Constrained to [0,1]. Con: Cannot be used to compare models with differing numbers of classes. May not be implemented in all software packages. References: Kempen et al. (2009) Confusion Index: Description: An index of confusion among the top two most likely classes. Pro: Simple calculation and constrained to [0,1]. Con: Cannot be used to compare models with differing numbers of classes. Only describes uncertainty of top two classes. May not be implemented in all software packages. References: Burrough et al. (1997) 2.4.3.2 Class-based metrics These metrics are derivatives of the confusion matrix (Congalton and Green 2019a; Fielding and Bell 1997; James et al. 2021; Kuhn and Johnson 2013) (caret::confusionMatrix()) Accuracy: Overall Accuracy: Description: The proportion of correctly classified observations as tabulated in the confusion matrix. Pro: Simple to calculate and interpret, based entirely on the confusion matrix. Con: Does not account for mistakes due to chance. Does not incorporate prior knowledge of class proportions. Does not incorporate class similarity. Does not incorporate information contained within vector of predicted probabilities. References: Story and Congalton 1986 Kappa Coefficient: Description: An index that represents the agreement between predicted and observed values and accounts for chance agreement. Pro: Easily calculated from the confusion matrix. Generated by most software packages along with the confusion matrix. Con: Interpretation of Kappa values between 0 and 1 is largely arbitrary. A value of < 0 indicates no agreement, and a value of 1 indicates perfect agreement. Recommended to use Kappa along with other measures of accuracy. Numerous authors now question the utility and assumptions of Kappa. References: Congalton and Mead (1983); Foody (2020) Tau Index: Description: An index of agreement that accounts for agreement by chance—effectively a replacement for Kappa. Pro: The index is more informative when appropriate class proportions are supplied. Index values can be referenced to concepts such as “better” or “worse” than random allocation. Con: Appropriate prior class proportions are method dependent. Interpretation requires some training. References: Ma & Remond (1995) Weighted Tau Index: Description: Alternative version of the tau index that accommodates class similarity. Pro: The index is more informative when appropriate class proportions are supplied. Class similarity down-weights mistakes between similar classes. Con: Appropriate prior class proportions are method dependent. There is no universal method for estimating class similarity weights. Interpretation requires some training. References: Rossiter (2017) Precision/Uncertainty: Standard Error (SE): Description: Error in the model parameters (e.g., coefficients or overall prediction). Confidence Interval (CI): Description: Conversion of the SE to an interval according to a given probability (e.g., 95 percent); its range is narrower than the prediction interval. Con: Assumes a normal distribution, unless transformed or bootstrapped. References: Beware, measures like Overall Accuracy, Precision and User Accuracy are dependent on the prevalence (frequency) of observation, and thus shouldn’t be use to compare classes with different sample sizes (Foody 2010; Kuhn and Johnson 2013, 2019; Monaghan et al. 2021; Parikh et al. 2008). Alternative calculations exist for row-wise accuracy that corrects for prevalence, such as the positive predictive value (PPV) and negative predictive value (NPV), which are available via the caret::confusionMatrix function. Similar named functions exist in other R packages, but don’t incorporate the prevalence corrected calculations. Confusion Matrix Observed Metric Predicted No Yes UA No True Negative (TN) False Negative (FN) NPV/ UA Yes False Positive (FP) True Positive (TP) PPV/ Precision / UA ——————- ——————– ——————— ——————- Metric Specificity / PA Sensitivity / PA Overall Prevalence (P): % of class occurrence in the population, usually this is estimated from the sample Overall Accuracy: % of observations that were correctly classified, for all classes Sensitivity (SN) (aka Recall or True Positive Rate): TP / (TP + FN) % of TRUE predictions that were correctly classified, for an individual class Specificity (SP) (aka True Negative Rate): TN / (TN + FP) errors of commission (Type I) % of FALSE observations that were correctly classified, for an individual class Precision: TP / (TP + FP) % of TRUE observations that were classified as a class, that actually were that class Positive Preditive Value (PPV): if prevalence = 50 then TP / (TP + FP) if prevalence != 50 then SN * P / (SN * P) + ((1 - SP) * (1 - P)) % of TRUE observations that were classified as a class, that actually were that class Negative Predictive Value (NPV): if prevalence = 50 then TN / (TN + FN) if prevalence != 50 then SP * (1 - P) / (P * (1 - SN)) + (SP * (1 - P)) % of FALSE observations that were classified as a class, that actually were that class Producer’s Accuracy (PA): diagonal values (TN & TP) / observed values % of predictions that were correctly classified, for an individual class User’s Accuracy (UA): diagonal values / predicted values % of FALSE observations that were classified as a class, that actually were that class Tau index: An index of accuracy that accounts for agreement by chance— effectively a replacement for Cohen’s Kappa (aqp::tauW()) url <- "https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/gsp_bs.csv" bs <- read.csv(url) bs <- subset(bs, complete.cases(BS1_obs, BS2_obs)) # Probability metrics ---- ## Brier score ---- vars <- c("BS2_pred", "BS2_obs") aqp::brierScore( bs[vars], classLabels = "BS2_pred", actual = "BS2_obs" ) ## [1] 0.04384271 ## D2 & Tjur D2---- modEvA::RsqGLM(obs = bs$BS2_obs, pred = bs$BS2_pred, plot = FALSE) ## $CoxSnell ## [1] 0.3957293 ## ## $Nagelkerke ## [1] 0.7857143 ## ## $McFadden ## [1] 0.7191203 ## ## $Tjur ## [1] 0.4823267 ## ## $sqPearson ## [1] 0.5992087 # Shannon entropy ---- # fake example test <- seq(0, 0.5, 0.1) test <- data.frame(obs = test, pred = 1 - test) cbind( test, entropy = apply(test, 1, aqp::shannonEntropy) ) ## obs pred entropy ## 1 0.0 1.0 0.0000000 ## 2 0.1 0.9 0.4689956 ## 3 0.2 0.8 0.7219281 ## 4 0.3 0.7 0.8812909 ## 5 0.4 0.6 0.9709506 ## 6 0.5 0.5 1.0000000 # bs example summary( apply(data.frame(bs$BS2_pred, 1 - bs$BS2_pred), 1, aqp::shannonEntropy) ) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.0000 0.2111 0.4327 0.4722 0.7418 1.0000 # Class-based metrics ----- ## Confusion matrix ---- # beware conf_mat prefers factors with equal numbers of levels # also if your table only has 2 classes, you need to specify which is 'positive' cm1 <- table(pred = as.factor(bs$BS2_pred > 0.5), obs = as.factor(bs$BS2_obs)) cm1 ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 # or cm2 <- caret::confusionMatrix(cm1, positive = "TRUE") cm2 ## Confusion Matrix and Statistics ## ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 ## ## Accuracy : 0.9577 ## 95% CI : (0.9555, 0.9599) ## No Information Rate : 0.8882 ## P-Value [Acc > NIR] : < 2.2e-16 ## ## Kappa : 0.7717 ## ## Mcnemar's Test P-Value : < 2.2e-16 ## ## Sensitivity : 0.73361 ## Specificity : 0.98592 ## Pos Pred Value : 0.86772 ## Neg Pred Value : 0.96711 ## Prevalence : 0.11179 ## Detection Rate : 0.08201 ## Detection Prevalence : 0.09451 ## Balanced Accuracy : 0.85976 ## ## 'Positive' Class : TRUE ## ## Examine thresholds ---- ggplot(bs, aes(x = BS2_pred, fill = BS2_obs)) + geom_density(alpha = 0.5) + geom_vline(xintercept = 0.5, linetype = "dashed") + xlab("BS2 Probability") ## Trade Precision for Sensitivity by Varying the Threshold table(predicted = bs$BS2_pred > 0.5, observed = bs$BS2_obs) ## observed ## predicted FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 2.4.4 Exercise 3 Append the following exercises to your previous R script. Calculate the Brier score, \\(D^2\\) and Shannon Entropy for the BS1 class from the bs dataset. What probably threshold creates the best split for the BS1 class. Calculate a confusion matrix for sas30_obs vs sas30_pred from the sas dataset. Be sure to manually set the factor levels as shown below. lev <- unique(c(sas$sas030_obs, sas$sas030_pred)) lev <- lev[c(1, 4, 8, 9, 12, 5, 3, 6, 7, 11)] sas$sas030_obs <- factor(sas$sas030_obs, levels = lev) sas$sas030_pred <- factor(sas$sas030_pred, levels = lev) Why can’t you calculate a Brier score and Shannon entropy for the SAS classes from the sas dataset? Forward you R script your instructor. 2.4.4.1 Stratified-random/areal-adjustment In the case of stratified-random samples or non-probability samples, it is necessary to adjust the class totals by their assumed/estimated proportion or area prior to calculating their accuracy or standard errors (Brus, Kempen, and Heuvelink 2011; Campbell, Wynne, and Thomas 2023; Congalton and Green 2019b; Stehman and Foody 2019). This is often the case when a minority class (e.g. minor component or small map unit) is sampled in excess of it’s true proportion relative to the total sample set. Surprisingly R functions to adjusts for these unequal weights is rare, with the exception of the sits and MetricsWeighted R package. # weights wt <- c(`FALSE` = 0.95, `TRUE` = 0.05) # confusion matrix cm <- table(pred = bs$BS2_pred > 0.5, obs = bs$BS2_obs) cm ## obs ## pred FALSE TRUE ## FALSE 28788 979 ## TRUE 411 2696 # apply weights cm_wt <- wt * cm/rowSums(cm) # optional transformation to original totals cm_wt2 <- cm_wt/sum(cm_wt) * sum(cm) # compare weighted and unweighted confusion matrices confusionMatrix(cm, positive = "TRUE")$byClass ## Sensitivity Specificity Pos Pred Value ## 0.73360544 0.98592418 0.86771806 ## Neg Pred Value Precision Recall ## 0.96711123 0.86771806 0.73360544 ## F1 Prevalence Detection Rate ## 0.79504571 0.11179047 0.08201010 ## Detection Prevalence Balanced Accuracy ## 0.09451238 0.85976481 confusionMatrix(cm_wt2, positive = "TRUE")$byClass ## Sensitivity Specificity Pos Pred Value ## 0.58134486 0.99285248 0.86771806 ## Neg Pred Value Precision Recall ## 0.96711123 0.86771806 0.58134486 ## F1 Prevalence Detection Rate ## 0.69623400 0.07463023 0.04338590 ## Detection Prevalence Balanced Accuracy ## 0.05000000 0.78709867 2.5 Validation Validation refers to the process and the result of a process where the validity of a model is tested. That is, how well does the model represent reality? There are varying degrees of formality and thoroughness that can be used in validation. While multiple stages of the modeling process can be validated, usually it’s the output of the model that is investigated and reported. You can group initial validation into three broad groups: Expert evaluation, Theoretical Analysis and Prediction Accuracy. Expert Evaluation: In this case, the model output is inspected by an expert user. The first evaluator will be you (the developer), but ideally an outside expert will be utilized. This is often a step in an iterative process. Evaluate the model output, does it make sense, do you see things that need to be improved? Then make changes to the model to improve the output. Theoretical Analysis: compare the results of the model to what is theoretically possible. In systems modeling, this might include diagnostics statistics including residual analysis, cross-correlation of variables and outputs, sensitivity analysis and model analysis such as Akaike Information Criterion (AIC). This can also include simple comparison of output to known possible values. This is especially important for linear regression where the slope of the model is assumed to be steady no matter the values of the dependent variables. Prediction Accuracy: The correctness of the parameter being predicted by the model (soil taxa, property etc.). Ideally this is done with an independent set of data. In soil science, we typically use the term model validation to refer to a statistical analysis that assesses how well a model will predict at an unknown location. A complete model should have a formal statistical evaluation that can be reported and stored as model and output meta-data. That is the portion of validation we will focus. For this discussion, validation can be thought of as an assessment of prediction error and variance. Three types of validation used in the course Internal - Performance on population underlying the sample External - Performance on related (similar/adjacent) but independent population 2.5.1 Internal Validation 2.5.1.1 Split-sample - A single partition of the data into a learning and a calibration set. Achieve an independent validation by partitioning the samples into calibration or training and validation data-sets (70% of the samples available are recommended for calibration) Build model on calibration (training) data-set Test model on validation (test) data-set Report accuracy on the validation data-set This method is relatively simple (conceptually and computationally). Results depend on having an adequate sample size to both develop and test the model. 2.5.1.2 Cross-validation - Alternate development and validation Leave-One-Out Cross-Validation (LOOCV) One observation is used for testing and all others are used to develop model Repeat n (total number of observations) times Average error over n The mean of the accuracy is the expected accuracy of the model (this assumes that new data is from the same population) (Efron, 1983) k-fold Cross-Validation (k-fold) CV Randomly divide observations into calibration and validation sets. Repeat k times, each time one k group is used for error estimates Average error of k Less computationally intensive than LOOCV, but it is more robust and can be done with smaller sample sizes than a simple split. Several R packages have tools to cross-validate predictions, including: DAAG and boot for lm() and glm() objects, caret, rms, ### Linear model example # Create folds folds <- createFolds(1:nrow(sas), k = 10) # Cross validate lm_cv <- lapply(folds, function(x) { train = sas[-x,] test = sas[x,] obs = test$pH_0.30_obs # predict = predict(model, test) pred = test$pH_0.30_pred RMSE = RMSE(pred, obs, na.rm = TRUE) R2 = R2(pred, obs, formula = "traditional", na.rm = TRUE) return(c(RMSE = RMSE, R2 = R2)) }) # Convert to a data.frame lm_cv <- do.call(rbind, lm_cv) # Summarize results summary(lm_cv) ## RMSE R2 ## Min. :0.4551 Min. :0.8453 ## 1st Qu.:0.4630 1st Qu.:0.8485 ## Median :0.4662 Median :0.8531 ## Mean :0.4690 Mean :0.8527 ## 3rd Qu.:0.4753 3rd Qu.:0.8556 ## Max. :0.4847 Max. :0.8620 2.5.1.3 Subsample (Resampling or sample simulation) In this method, the ‘leave-out’ method can be random (Bootstrap) or observation selection can use a more sophisticated method to select observations to represent the population including Monte Carlo (Molarino, 2005) and .632+bootstrap of Efron & Tibshirani (1997). The details of those aren’t important, except to know that they can give you a better idea of the robustness of your model. As with re-sampling for uncertainty estimation, observations are repeatedly sampled Select a number of samples (Randomly or from known distribution). Develop the model Estimate model accuracy on unselected samples Repeat the process (with independent sample) a large number of times, 500 - 5,000. The expected model accuracy is then the mean of the estimates. NOTE: The BEST model should not be assumed to be the one that makes the ‘truest’ predictions. Beware of over-fitting. When a model is over-fit, it predicts due to very specific “quirks” in the calibration data set and not due to explanatory relationships that will apply to validation and independent data-sets. One strategy to avoid this situation is to build models with as few variables as possible. Parsimonious models (those that use the least amount of information possible to obtain the same result or convey the same meaning) often have higher predicative validity. The use of metrics such as Akaike’s Information Criterion (AIC) can be helpful for balancing error and parameter minimization. 2.5.2 External Validation In this case, an independent data-set is used as the test case. Independent observations predicted with model Errors (ME, RMSE) calculated on predicted vs. actual Some exploratory analysis can be helpful to diagnose and explain model performance. The use of validation will be demonstrated as part of each modeling section. The size of the data-set used, understanding of the variables involved and the nature of the statistical models and algorithms used all influence which validation techniques are most convenient and appropriate. References "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] diff --git a/book2/tree-based-models.html b/book2/tree-based-models.html index 6703dd02..677df46c 100644 --- a/book2/tree-based-models.html +++ b/book2/tree-based-models.html @@ -23,7 +23,7 @@ - + @@ -389,37 +389,37 @@

      6.2 Exploratory Data Analysis

      6.2.1 Getting Data Into R and Exporting to Shapefile

      Before we dive in to model building, let’s first import and plot the dataset in R.

      -
      library(dplyr)    # data manipulation
      -library(ggplot2)  # graphing
      -library(sf)       # spatial data
      -library(mapview)  # maps
      -library(corrplot) # graphical display of correlation matrix
      -
      -url <-'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      -soildata <- read.csv(url)
      -
      -soildata <- st_as_sf(
      -  soildata, 
      -  coords = c("x", "y"), # set the coordinates; converting dataframe to a spatial object
      -  crs = 4326)           # set the projection; https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/OverviewCoordinateReferenceSystems.pdf 
      -
      mapview(soildata)
      +
      library(dplyr)    # data manipulation
      +library(ggplot2)  # graphing
      +library(sf)       # spatial data
      +library(mapview)  # maps
      +library(corrplot) # graphical display of correlation matrix
      +
      +url <-'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      +soildata <- read.csv(url)
      +
      +soildata <- st_as_sf(
      +  soildata, 
      +  coords = c("x", "y"), # set the coordinates; converting dataframe to a spatial object
      +  crs = 4326)           # set the projection; https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/OverviewCoordinateReferenceSystems.pdf 
      +
      mapview(soildata)

      -
      # convert soildata into a shapefile
      -# edit DSN path accordingly
      -write_sf(soildata, dsn = "C:/workspace/soildata.shp") 
      +
      # convert soildata into a shapefile
      +# edit DSN path accordingly
      +write_sf(soildata, dsn = "C:/workspace/soildata.shp") 

      Conveniently, environmental covariate values were previously extracted for all of the observations in the soildata dataset. How would you extract raster data to points in R? (Hint)

      6.2.2 Examining Data in R

      -
      #since we converted the `soildata` `data.frame` to a spatial object to export as an ESRI shapefile, we will need to convert it back to a `data.frame` to plot and further examine the data in R
      -
      -#re-importing the data and overwriting the soildata object is just one way to achieve this
      -url <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      -soildata <- read.csv(url)
      -
      -# view the data
      -# View(soildata) 
      -str(soildata) #examine the internal data structure
      +
      #since we converted the `soildata` `data.frame` to a spatial object to export as an ESRI shapefile, we will need to convert it back to a `data.frame` to plot and further examine the data in R
      +
      +#re-importing the data and overwriting the soildata object is just one way to achieve this
      +url <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      +soildata <- read.csv(url)
      +
      +# view the data
      +# View(soildata) 
      +str(soildata) #examine the internal data structure
      ## 'data.frame':    250 obs. of  50 variables:
       ##  $ x           : num  -79.7 -79.7 -79.7 -79.8 -79.7 ...
       ##  $ y           : num  38.6 38.6 38.6 38.6 38.6 ...
      @@ -472,41 +472,41 @@ 

      6.2.2 Examining Data in R

      The example dataset, soildata, consists of 250 observations and 58 variables that were collected in the field or derived from geospatial data to identify spodic soil properties in West Virginia. Of particular interest is determining best splits for spodic intensity (relative spodicity index). As you can see in the data structure, R interpreted the spodint field as numeric. Since spodint is an index, it will need to be changed to a factor and then to an ordered factor. The same will need to be done for tipmound (a tip and mound microtopography index).

      -
      set.seed(250)
      -soildata <- mutate(soildata,
      -                   spodint  = factor(spodint,  ordered = TRUE),
      -                   tipmound = factor(tipmound, ordered = TRUE)
      -)
      +
      set.seed(250)
      +soildata <- mutate(soildata,
      +                   spodint  = factor(spodint,  ordered = TRUE),
      +                   tipmound = factor(tipmound, ordered = TRUE)
      +)

      Next, let’s explore the tabular data:

      -
      # does solar radiation affect spodic intensity?
      -ggplot(soildata, aes(x = spodint, y = solar)) +
      -  geom_boxplot() +
      -  xlab("spodic intensity") + ylab("solar")
      +
      # does solar radiation affect spodic intensity?
      +ggplot(soildata, aes(x = spodint, y = solar)) +
      +  geom_boxplot() +
      +  xlab("spodic intensity") + ylab("solar")

      -
      #how about aspect?
      -ggplot(soildata, aes(x = spodint, y = northwestn)) +
      -  geom_boxplot() +
      -  xlab("spodic intensity") + ylab("northwestness")
      +
      #how about aspect?
      +ggplot(soildata, aes(x = spodint, y = northwestn)) +
      +  geom_boxplot() +
      +  xlab("spodic intensity") + ylab("northwestness")

      -
      #distribution of O horizon thickness among soil orders
      -ggplot(soildata, aes(x = Otot)) +
      -  geom_density() +
      -  facet_wrap(~ order)
      +
      #distribution of O horizon thickness among soil orders
      +ggplot(soildata, aes(x = Otot)) +
      +  geom_density() +
      +  facet_wrap(~ order)

      -
      # combine numeric columns into a new data frame
      -numeric <- soildata[, c(8, 25, 27:50)] 
      -names(numeric) 
      +
      # combine numeric columns into a new data frame
      +numeric <- soildata[, c(8, 25, 27:50)] 
      +names(numeric) 
      ##  [1] "Otot"       "rainfall"   "aachn"      "dem10m"     "downslpgra"
       ##  [6] "eastness"   "greenrefl"  "landsatb1"  "landsatb2"  "landsatb3" 
       ## [11] "landsatb7"  "maxc100"    "maxent"     "minc100"    "mirref"    
       ## [16] "ndvi"       "northeastn" "northness"  "northwestn" "planc100"  
       ## [21] "proc100"    "protection" "relpos11"   "slp50"      "solar"     
       ## [26] "tanc75"
      -
      # calculate correlation matrix
      -cormatrix <- cor(numeric) 
      -
      -# plot correlation matrix
      -corrplot(cormatrix, method = "circle")
      +
      # calculate correlation matrix
      +cormatrix <- cor(numeric) 
      +
      +# plot correlation matrix
      +corrplot(cormatrix, method = "circle")

      @@ -518,18 +518,18 @@

      6.2.3 Exercise 16.3 Classification and Regression Trees (CART)

      The basic form for all CART models is (y ~ x), where y is the dependent variable to be predicted from x, a set of independent variables. If the dependent variable (y) is numeric, the resulting tree will be a regression tree. Conversely, if the dependent variable (y) is categorical, the resulting tree will be a classification tree. The rpart package allows all data types to be used as independent variables, regardless of whether the model is a classification or regression tree. The rpart algorithm ignores missing values when determining the quality of a split and uses surrogate splits to determine if observation(s) with missing data is best split left or right. If an observation is missing all surrogate splits, then the observation(s) is sent to the child node with the largest relative frequency (Feelders, 1999).

      Assuming that the rpart and randomForest packages are already installed on your machine, simply load the packages using the library() function.

      -
      library(rpart)        # CART models
      -library(randomForest) # random forest
      -library(rpart.plot)   # rpart plot graphics
      -library(caret)        # confusion matrix
      +
      library(rpart)        # CART models
      +library(randomForest) # random forest
      +library(rpart.plot)   # rpart plot graphics
      +library(caret)        # confusion matrix

      If you wanted to create a classification tree for spodint using all of the variables, you would simply type: rpart(spodint ~ ., data=soildata). Since our goal is to generate a spatial prediction model, we only want to use the variables for which we have spatial coverage–our environmental covariate rasters.

      -
      spodintmodel <- rpart(
      -  spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      -  data   = soildata, 
      -  method = "class"
      -  )
      -
      -spodintmodel
      +
      spodintmodel <- rpart(
      +  spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      +  data   = soildata, 
      +  method = "class"
      +  )
      +
      +spodintmodel
      ## n= 250 
       ## 
       ## node), split, n, loss, yval, (yprob)
      @@ -564,46 +564,46 @@ 

      6.3 Classification and Regression ## 58) landsatb7>=0.0398039 12 7 1 (0.17 0.25 0.42 0 0.17) * ## 59) landsatb7< 0.0398039 9 3 2 (0.22 0 0 0.11 0.67) * ## 15) maxent>=9.5806 47 13 2 (0.085 0.043 0.15 0 0.72) *

      -
      plot(spodintmodel)
      -text(spodintmodel, cex = 0.8) #cex is text size
      +
      plot(spodintmodel)
      +text(spodintmodel, cex = 0.8) #cex is text size

      -
      #if you are having trouble viewing the text in the plot window, click zoom to open a bigger window
      -#you may also need to adjust the plot margins or text size; for this example, try:
      -par(mar = c(3, 6, 3, 6)) 
      -plot(spodintmodel)
      -text(spodintmodel, cex = 0.6)
      +
      #if you are having trouble viewing the text in the plot window, click zoom to open a bigger window
      +#you may also need to adjust the plot margins or text size; for this example, try:
      +par(mar = c(3, 6, 3, 6)) 
      +plot(spodintmodel)
      +text(spodintmodel, cex = 0.6)

      For more plot customization, use the rpart.plot package.

      -
      # extra=3 displays the misclassification rate at the node, expressed as the number of incorrect classifications divided by the total observations in the node; there are many options under the extra setting for classification models
      -rpart.plot(spodintmodel, extra = 3) 
      +
      # extra=3 displays the misclassification rate at the node, expressed as the number of incorrect classifications divided by the total observations in the node; there are many options under the extra setting for classification models
      +rpart.plot(spodintmodel, extra = 3) 

      -
      # adding 100 to the extra setting displays the percentage observations in the node
      -rpart.plot(spodintmodel, extra = 103) 
      +
      # adding 100 to the extra setting displays the percentage observations in the node
      +rpart.plot(spodintmodel, extra = 103) 

      -
      # prp is another function in the rpart.plot package that has numerous plot customization options
      -prp(spodintmodel, type = 1, extra = 1, branch = 1) 
      +
      # prp is another function in the rpart.plot package that has numerous plot customization options
      +prp(spodintmodel, type = 1, extra = 1, branch = 1) 

      Notice that the terminal nodes display the different spodic intensity classes, ranging from 0 to 2. Can you think of another way that we could model spodic expression?

      Could we treat spodic intesity (an ordered factor) as numeric, ranging from 0 to 1 to develop a regression tree? Does this make sense? what would a mean of 1 tell you about the observations in the terminal node?

      What if we considered everything with a spodic intensity of <= 0.5 to be non-spodic and everything >0.5 to be spodic? A binary probability approach to predicting spodic morphology, similar to Nauman et al., 2015.

      -
      # index for lookup table
      -index  <- c(0, 0.5, 1, 1.5, 2) 
      -
      -# assigning corresponding categories to look up values
      -values <- c("nonspodic", "nonspodic", "spodic", "spodic", "spodic") 
      -
      -# match spodint to index and assign values
      -soildata$newcolumn <- values[match(soildata$spodint, index)] 
      -
      -# convert new column from character to factor
      -soildata$newcolumn <- as.factor(soildata$newcolumn) 
      -
      -spodintmodel2 <- rpart(
      -  newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      -  data   = soildata, 
      -  method = "class"
      -)
      -
      -spodintmodel2
      +
      # index for lookup table
      +index  <- c(0, 0.5, 1, 1.5, 2) 
      +
      +# assigning corresponding categories to look up values
      +values <- c("nonspodic", "nonspodic", "spodic", "spodic", "spodic") 
      +
      +# match spodint to index and assign values
      +soildata$newcolumn <- values[match(soildata$spodint, index)] 
      +
      +# convert new column from character to factor
      +soildata$newcolumn <- as.factor(soildata$newcolumn) 
      +
      +spodintmodel2 <- rpart(
      +  newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      +  data   = soildata, 
      +  method = "class"
      +)
      +
      +spodintmodel2
      ## n= 250 
       ## 
       ## node), split, n, loss, yval, (yprob)
      @@ -626,11 +626,11 @@ 

      6.3 Classification and Regression ## 28) planc100< -0.00902005 8 1 nonspodic (0.8750000 0.1250000) * ## 29) planc100>=-0.00902005 29 8 spodic (0.2758621 0.7241379) * ## 15) landsatb7< 0.0440802 66 7 spodic (0.1060606 0.8939394) *

      -
      plot(spodintmodel2)
      -text(spodintmodel2, cex = 0.8)
      +
      plot(spodintmodel2)
      +text(spodintmodel2, cex = 0.8)

      Notice that several of the splits changed. Which model performed better? One way to compare the two models is to use the function printcp():

      -
      printcp(spodintmodel)
      +
      printcp(spodintmodel)
      ## 
       ## Classification tree:
       ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + 
      @@ -656,7 +656,7 @@ 

      6.3 Classification and Regression ## 5 0.015432 8 0.61728 0.99383 0.046733 ## 6 0.012346 11 0.56790 0.99383 0.046733 ## 7 0.010000 14 0.53086 1.01235 0.046365

      -
      printcp(spodintmodel2)
      +
      printcp(spodintmodel2)
      ## 
       ## Classification tree:
       ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + 
      @@ -680,13 +680,13 @@ 

      6.3 Classification and Regression ## 3 0.027523 5 0.54128 0.83486 0.069795 ## 4 0.010000 8 0.45872 0.86239 0.070263

      The printcp() funtion generates a cost complexity parameter table that provides the complexity parameter value (CP), relative model error (1 - relative error = ~variance explained), error estimated from a 10-fold cross validation (xerror), and the standard error of the xerror (xstd). The CP values control the size of the tree; the greater the CP value, the fewer the number of splits in the tree. To determine the optimal CP value, rpart automatically performs a 10-fold cross validation. The optimal size of the tree is generally the row in the CP table that minimizes all error with the fewest branches. Another way to determine the optimal tree size is to use the plotcp() function. This will plot the xerror versus cp value and tree size.

      -
      plotcp(spodintmodel)
      +
      plotcp(spodintmodel)

      -
      plotcp(spodintmodel2)
      +
      plotcp(spodintmodel2)

      The optimal CP value is 0.029321 for spodintmodel and 0.050459 for spodintmodel2. Since both spodic intensity models overfit that data, they will need to be pruned using the prune() function.

      -
      pruned <- prune(spodintmodel, cp = 0.029321)
      -printcp(pruned)
      +
      pruned <- prune(spodintmodel, cp = 0.029321)
      +printcp(pruned)
      ## 
       ## Classification tree:
       ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + 
      @@ -707,10 +707,10 @@ 

      6.3 Classification and Regression ## 1 0.179012 0 1.00000 1.00000 0.046614 ## 2 0.030864 1 0.82099 0.90741 0.048039 ## 3 0.029321 2 0.79012 1.03704 0.045822

      -
      rpart.plot(pruned, extra = 3)
      +
      rpart.plot(pruned, extra = 3)

      -
      pruned2 <- prune(spodintmodel2, cp = 0.050459)
      -printcp(pruned2)
      +
      pruned2 <- prune(spodintmodel2, cp = 0.050459)
      +printcp(pruned2)
      ## 
       ## Classification tree:
       ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + 
      @@ -730,22 +730,22 @@ 

      6.3 Classification and Regression ## CP nsplit rel error xerror xstd ## 1 0.256881 0 1.00000 1.00000 0.071933 ## 2 0.050459 1 0.74312 0.81651 0.069456

      -
      rpart.plot(pruned2, extra = 3)
      +
      rpart.plot(pruned2, extra = 3)

      The misclassification rate (in cross-validation) for the spodintmodel was 57% (root node error * xerror * 100) which dropped to 38% in the spodintmodel2. Why did the performance of these models differ significantly?

      Let’s compute an internal validation using a confusion matrix to further examine differences in these models. In order to do this, we will need to split our data into a training and test set.

      -
      ## splits 70% of the data selected randomly into training set and the remaining 30% sample into test set
      -datasplit <- sample(nrow(soildata), nrow(soildata) * 0.7) 
      -train <- soildata[datasplit,]
      -test  <- soildata[-datasplit,]
      -
      -spodintmodel <- rpart(
      -  spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      -  data   = train, 
      -  method = "class"
      -)
      -
      -printcp(spodintmodel)
      +
      ## splits 70% of the data selected randomly into training set and the remaining 30% sample into test set
      +datasplit <- sample(nrow(soildata), nrow(soildata) * 0.7) 
      +train <- soildata[datasplit,]
      +test  <- soildata[-datasplit,]
      +
      +spodintmodel <- rpart(
      +  spodint ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      +  data   = train, 
      +  method = "class"
      +)
      +
      +printcp(spodintmodel)
      ## 
       ## Classification tree:
       ## rpart(formula = spodint ~ rainfall + geology + aachn + dem10m + 
      @@ -769,14 +769,14 @@ 

      6.3 Classification and Regression ## 4 0.035714 3 0.66964 0.84821 0.058840 ## 5 0.026786 6 0.56250 0.81250 0.059010 ## 6 0.010000 7 0.53571 0.86607 0.058708

      -
      pruned <- prune(spodintmodel, cp = 0.070175)
      -
      -# predicting class test data using the pruned model
      -pred <- predict(pruned, newdata=test, type = "class") 
      -
      -# computes confusion matrix and summary statistics
      -# sensitivity = producer's accuracy and specificity = user's accuracy
      -confusionMatrix(pred, test$spodint)
      +
      pruned <- prune(spodintmodel, cp = 0.070175)
      +
      +# predicting class test data using the pruned model
      +pred <- predict(pruned, newdata=test, type = "class") 
      +
      +# computes confusion matrix and summary statistics
      +# sensitivity = producer's accuracy and specificity = user's accuracy
      +confusionMatrix(pred, test$spodint)
      ## Confusion Matrix and Statistics
       ## 
       ##           Reference
      @@ -809,13 +809,13 @@ 

      6.3 Classification and Regression ## Detection Rate 0.2133 0.00 0.02667 0.00000 0.1733 ## Detection Prevalence 0.5200 0.00 0.08000 0.00000 0.4000 ## Balanced Accuracy 0.5900 0.50 0.51058 0.50000 0.6521

      -
      spodintmodel2 <- rpart(
      -  newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      -  data   = train, 
      -  method = "class"
      -)
      -
      -printcp(spodintmodel2)
      +
      spodintmodel2 <- rpart(
      +  newcolumn ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75, 
      +  data   = train, 
      +  method = "class"
      +)
      +
      +printcp(spodintmodel2)
      ## 
       ## Classification tree:
       ## rpart(formula = newcolumn ~ rainfall + geology + aachn + dem10m + 
      @@ -840,13 +840,13 @@ 

      6.3 Classification and Regression ## 4 0.025641 6 0.44872 0.93590 0.083627 ## 5 0.012821 9 0.37179 0.93590 0.083627 ## 6 0.010000 10 0.35897 0.93590 0.083627

      -
      pruned2 <- prune(spodintmodel2, cp=0.050459)
      -
      -# predicting class of test data using the pruned model
      -pred2 <- predict(pruned2, newdata = test, type = "class") 
      -
      -# computes confusion matrix and summary statistics
      -confusionMatrix(pred2, test$newcolumn) 
      +
      pruned2 <- prune(spodintmodel2, cp=0.050459)
      +
      +# predicting class of test data using the pruned model
      +pred2 <- predict(pruned2, newdata = test, type = "class") 
      +
      +# computes confusion matrix and summary statistics
      +confusionMatrix(pred2, test$newcolumn) 
      ## Confusion Matrix and Statistics
       ## 
       ##            Reference
      @@ -888,17 +888,17 @@ 

      6.3.1 Exercise 2: rpart6.4 Random Forest

      The randomForest algorithm fits hundreds to thousands of CART models to random subsets of input data and combines the trees for prediction. Similarly to rpart, randomForest allows all data types to be used as independent variables, regardless of whether the model is a classification or regression tree. Unlike rpart, the randomForest algorithm does not straight forwardly handle missing values with surrogate splits. There is a function called rfImpute() that uses a proximity matrix from the randomForest to populate missing values with either the weighted average of the non-missing observations (weighted by the proximities) for continuous predictors or the category with the largest average proximity for categorical predictors.

      Going back to the soildata dataset, let’s generate a random forest regression model for total O horizon thickness and compare it to the one we just generated in rpart. Just like rpart, randomForest has the same basic model function: (y ~ x).

      -
      # importance = TRUE will allow the generation of a variable importance plot
      -rf <- randomForest(
      -  Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75,
      -  data       = soildata, 
      -  importance = TRUE, 
      -  ntree      = 1000, 
      -  mtry       = 10
      -) 
      -
      -# statistical summary
      -rf 
      +
      # importance = TRUE will allow the generation of a variable importance plot
      +rf <- randomForest(
      +  Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75,
      +  data       = soildata, 
      +  importance = TRUE, 
      +  ntree      = 1000, 
      +  mtry       = 10
      +) 
      +
      +# statistical summary
      +rf 
      ## 
       ## Call:
       ##  randomForest(formula = Otot ~ rainfall + geology + aachn + dem10m +      downslpgra + eastness + greenrefl + landsatb1 + landsatb2 +      landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref +      ndvi + northeastn + northness + northwestn + planc100 + proc100 +      protection + relpos11 + slp50 + solar + tanc75, data = soildata,      importance = TRUE, ntree = 1000, mtry = 10) 
      @@ -908,29 +908,29 @@ 

      6.4 Random Forest
      # out of bag (OOB) error rate versus number of trees; this will help us tune the ntree parameter
      -plot(rf)

      +
      # out of bag (OOB) error rate versus number of trees; this will help us tune the ntree parameter
      +plot(rf)

      The rf model, generated using the default number of trees and number of variables tried at each split, explained approximately 23% of the variance and produced a mean square error (sum of squared residuals divided by n) of 28 cm2. If you were to run this same model again, the % variance explained and MSE would change slightly due to the random subsetting and averaging in the randomForest algorithm. How does this compare with the rpart model?

      Recall that the soildata dataset had one Histosol observation:

      -
      hist(soildata$Otot)
      +
      hist(soildata$Otot)

      Let’s remove that observation to see how it impacted our model.

      -
      # file <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      -# download.file(file, destfile = "soildata.csv")
      -# soildata <- read.csv("soildata.csv", header=TRUE, sep=",")
      -soildata2 <- droplevels(subset(soildata, order != "histosol")) #remove Histosol observation
      -
      -# importance=TRUE will allow the generation of a variable importance plot
      -rf2 <- randomForest(
      -  Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75,   data       = soildata2, 
      -  importance = TRUE, 
      -  ntree      = 1000, 
      -  mtry       = 9
      -) 
      -
      -# statistical summary
      -rf2
      +
      # file <- 'https://raw.githubusercontent.com/ncss-tech/stats_for_soil_survey/master/data/logistic/wv_transect_editedforR.csv'
      +# download.file(file, destfile = "soildata.csv")
      +# soildata <- read.csv("soildata.csv", header=TRUE, sep=",")
      +soildata2 <- droplevels(subset(soildata, order != "histosol")) #remove Histosol observation
      +
      +# importance=TRUE will allow the generation of a variable importance plot
      +rf2 <- randomForest(
      +  Otot ~ rainfall + geology + aachn + dem10m + downslpgra + eastness + greenrefl + landsatb1 + landsatb2 + landsatb3 +landsatb7 + maxc100 + maxent + minc100 + mirref + ndvi+ northeastn + northness + northwestn + planc100 + proc100 + protection + relpos11 + slp50 + solar + tanc75,   data       = soildata2, 
      +  importance = TRUE, 
      +  ntree      = 1000, 
      +  mtry       = 9
      +) 
      +
      +# statistical summary
      +rf2
      ## 
       ## Call:
       ##  randomForest(formula = Otot ~ rainfall + geology + aachn + dem10m +      downslpgra + eastness + greenrefl + landsatb1 + landsatb2 +      landsatb3 + landsatb7 + maxc100 + maxent + minc100 + mirref +      ndvi + northeastn + northness + northwestn + planc100 + proc100 +      protection + relpos11 + slp50 + solar + tanc75, data = soildata2,      importance = TRUE, ntree = 1000, mtry = 9) 
      @@ -943,12 +943,12 @@ 

      6.4 Random Forest
      varImpPlot(rf2)
      +
      varImpPlot(rf2)

      -
      # sorted tabular summary
      -importance(rf2) %>%
      -  as.data.frame() %>%
      -  arrange(desc(`%IncMSE`))
      +
      # sorted tabular summary
      +importance(rf2) %>%
      +  as.data.frame() %>%
      +  arrange(desc(`%IncMSE`))
      ##              %IncMSE IncNodePurity
       ## landsatb7  22.236902     985.81743
       ## maxent     17.739327     867.90603
      @@ -982,7 +982,7 @@ 

      6.4 Random Forest

      6.4.1 Exercise 3: randomForest

      Using the soildata dataset, construct a randomForest model to predict the probability of a folistic epipedon. Be sure to tweak the ntree and mtry parameters to capture the most variability. Use the following code to combine ochric and umbric into a new category called nonfolistic.

      -
      soildata$epipedon2 <- ifelse(soildata$epipedon %in% c("ochric", "umbric"), "nonfolistic", soildata$epipedon)
      +
      soildata$epipedon2 <- ifelse(soildata$epipedon %in% c("ochric", "umbric"), "nonfolistic", soildata$epipedon)

      ** 1) What is the out-of-bag error rate?**

      ** 2) Compare this model with the total O horizon thickness regression model. Which would be better for spatial interpolation?**

      ** 3) How could you improve this model?**

      @@ -991,30 +991,30 @@

      6.4.1 Exercise 3: randomForest

      6.5 Prediction using Tree-based Models

      As with any modeling technique, tree-based models can be used for prediction and can be spatially interpolated using environmental covariates. In order to interpolate a model, R requires that all raster images have a common datum, common cell resolution, are coregistered, and are preferably .img files. The function stack() combines all of the rasters into a “raster stack.” The predict() function is then used in the form of: predict(rasterstack, fittedmodel, type=""). Follow along through the example below to interpolate the rpart total O horizon thickness model:

      -
      library(raster)
      -
      -# combine rasters with a .img file extension stored in the working directory
      -rasters <- stack(list.files(getwd(), pattern = "img$", full.names = FALSE)) 
      -
      -rasters 
      -
      -model <- randomForest(
      -  Otot ~ landsatb7 + maxent + protection + northwestn + solar,
      -  data = soildata2
      -)
      -
      -
      -# type not specified = vector of predicted values, "response" for predicted class, "prob" for probabilities, or "vote" for matrix of vote counts (one column for each class and one row for each new input); either in raw counts or in fractions (if norm.votes = TRUE)
      -# options for predicting rpart model: type = "vector" for mean response at the node, "prob" for matrix of class probabilities, or "class" for a factor of classifications based on the responses
      -predict(rasters, model, progress = "window", overwrite = TRUE, filename = "rfpredict.img")
      +
      library(raster)
      +
      +# combine rasters with a .img file extension stored in the working directory
      +rasters <- stack(list.files(getwd(), pattern = "img$", full.names = FALSE)) 
      +
      +rasters 
      +
      +model <- randomForest(
      +  Otot ~ landsatb7 + maxent + protection + northwestn + solar,
      +  data = soildata2
      +)
      +
      +
      +# type not specified = vector of predicted values, "response" for predicted class, "prob" for probabilities, or "vote" for matrix of vote counts (one column for each class and one row for each new input); either in raw counts or in fractions (if norm.votes = TRUE)
      +# options for predicting rpart model: type = "vector" for mean response at the node, "prob" for matrix of class probabilities, or "class" for a factor of classifications based on the responses
      +predict(rasters, model, progress = "window", overwrite = TRUE, filename = "rfpredict.img")

      The output raster “rfpredict.img” can be added and viewed in ArcMap.

      R GUI image

      You can also view the interpolated model in R:

      -
      rfpredict <- raster("rfpredict.img")
      -plot(rfpredict, xlab = "Easting (m)", ylab = "Northing (m)", main = "Total O Horizon Thickness (cm)")
      +
      rfpredict <- raster("rfpredict.img")
      +plot(rfpredict, xlab = "Easting (m)", ylab = "Northing (m)", main = "Total O Horizon Thickness (cm)")

      6.6 Summary

      -Table 3.1: Mean Fuzzy Ratings for Select Soil Series +Table 3.1: Table 3.2: Mean Fuzzy Ratings for Select Soil Series

  20. 6.5 Prediction using Tree-based Models