From 2b20656b7acfaca3e6180957d796dfff765d2b93 Mon Sep 17 00:00:00 2001 From: wzbillings <39701545+wzbillings@users.noreply.github.com> Date: Wed, 1 Jun 2022 10:43:06 -0400 Subject: [PATCH 1/2] Zane's changes for 2022 workshop --- .../unnamed-chunk-4-1.png | Bin 0 -> 4174 bytes .../unnamed-chunk-5-1.png | Bin 0 -> 4174 bytes .../unnamed-chunk-7-1.png | Bin 0 -> 4700 bytes .../unnamed-chunk-8-1.png | Bin 0 -> 4700 bytes W2_RepRe/W2_Slides/W2_Presentation2022.Rpres | 706 +++++++++++++++++ W2_RepRe/W2_Slides/W2_Presentation2022.md | 738 ++++++++++++++++++ W2_RepRe/W2_Slides/figs/jenny.jpg | Bin 0 -> 128101 bytes 7 files changed, 1444 insertions(+) create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-4-1.png create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-5-1.png create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-7-1.png create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-8-1.png create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022.Rpres create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022.md create mode 100644 W2_RepRe/W2_Slides/figs/jenny.jpg diff --git a/W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-4-1.png b/W2_RepRe/W2_Slides/W2_Presentation2022-figure/unnamed-chunk-4-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0d4a04f67d1e26e2e0df5575dd6056e40301a0 GIT binary patch literal 4174 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
+ +```{r setup, echo=FALSE} +chooseCRANmirror(graphics=FALSE, ind=1) +``` + +About Myself +======================================================== + + - Epi/Bios PhD student with Andreas Handel. + - I use data analysis and statistical models to study epidemiology and immunology of flu and norovirus. + - I started using R and R Markdown in 2017. + - I use R in my research to: + + organize data + + visualize results + + fit models + + write reproducible manuscripts + + pretty much everything I do is in R (Markdown), actually. + - You can get my contact info at https://wzbillings.com. My office is on the HSC so feel free to take the bus, or just email me. I'm happy to answer any R questions. (Or questions about grad school, or anything else that might help!) + + +Outline +======================================================== +left: 40% + +**At the end of this workshop you should be able to…** +- code using best practices +- create an HTML doc with code and commentary +- write a function +- create and use scripts +- calculate summary and inferential statistics of a dataset +- create a figure from data + + +*** + +**Topics** + 1. Introduction to reproducible research + 2. Review of tidyverse + + *Break* + + 3. Explore data using a R project + 4. Automating data analysis with functions + 5. Using scripts in your workflow + 6. Wrap Up + +THE VERY FIRST THING WE ARE GOING TO DO. +======================================================== + +* Open `R` on your computer. +* Run `install.packages("usethis")` to install the `usethis` package. +* Run the command `usethis::use_blank_slate()`. If successful, it should print a message. +* I recommend you do this first thing every time you set up R on a new computer and every time you update R. +* We'll talk about why I had you do this in a bit :) + +1. What is Reproducible Research (RR)? +======================================================== + +**Johns Hopkins Bloomberg School of Public Health:** + +Reproducible Research is the idea that data analyses, and more generally, scientific claims, are published with their data and software code so that others may verify the findings and build upon them. + +![](figs/repspectrum.JPG) + + +What is reproducible research? +======================================================== +Three R's: Replication, repeatability, and reproducibility + +**Replication** concerns the number of data points (observations, study subjects, etc.) and establishes the generality of the observed finding to a study population. + +**Repeatability** concerns the ability to arrive at the same findings when a study is repeated and establishes the generality of the observed finding to other study populations or systems. + +**Reproducibility** concerns the reliability of the logic that leads from data to conclusions -- that is, the *data analysis*. It would seem that reproducibility is an essential ingredient of scientific knowledge. But, as data workflow become more and more complicated they also bring more subjective decision-making by the data analyst, more computations, and more opportunities for error. + +Why should research be made reproducible? +======================================================== +**Four public virtues and one private one** + +- Enables readers to develop a complete and exact understanding of methods +- Enables error detection and correction +- Facilitates critique +- Enables extension and advancement +- Saves time (private) + +How can research be made reproducible? +======================================================== +left: 50% + +**Three concepts** + +- *Workflow/Dataflow* is made reproducible by file organization and coding practices +- *Literate statistical programming* is incorporated into research by blending computer code and with natural language explanations +- *Science archive* must be used for public virtues to be realized + +Workflow is... +======================================================== + +the idea that data analysis may be viewed as a repeatable pattern of computational activities. If these activities are truly repeatable and truly computational, then they may be encoded in an algorithm (programming). This principle of repeatable computation is the key to reproducible research. In reproducible research, a computer program is written to perform an analysis. + + ![workflow](figs/directory_org.png) +**Organization is key** + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + +*** + +*What would you need to recreate a modeling project?* + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + - Experimental details: experimental design, sampling protocol, etc. + - Analysis: `R` code + - What else? + +*** + +*What would you need to recreate a modeling project?* + - Experimental details: model assumptions, number of simulations, etc. + - Analysis: `R` code + - What else? + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + - Experimental details: experimental design, sampling protocol, etc. + - Analysis: `R` code + - What else? + +**Where is the why ?** +*** + +*What would you need to recreate a modeling project?* + - Experimental details: model assumptions, number of simulations, etc. + - Analysis: `R` code + - What else? + + + + + Where is the 'Why'? +======================================================== + +Within your code your comments and longer commentary should include the *why* instead of the what or how. + +Is this an example of good commenting the **why**? + +```{r, eval = FALSE} +passengers %>% # start with Titanic passengers data set + filter(Sex == "male") %>% # pull out male passengers + ggplot(aes(x= Age, y =Fare)) + # plot age on x axis and fare on y axis + geom_point() # plot the data as points +``` + +Literate programming +======================================================== + +* The best code is "self-documenting." It should be so easy to read that you don't need to comment what it does. +* However, you still need to explain WHY you are doing it -- computer scientists call this paradigm "literate programming." + +An example of better comments with commentary: + +> I hypothesize that older men will pay a higher fare because they have had more time to accumulate more wealth. The first step of testing this hypothesis is to determine if there is a possitive correlation between age and fare for male passengers. +```{r, eval = FALSE} +# create a plot to see how male passengers' age correlated with the fare they paid. +passengers %>% + filter(Sex == "male") %>% + ggplot(aes(x= Age, y =Fare)) + + geom_point() +``` + + +2. Review of tidyverse +======================================================== +left: 50% + +- The tidyverse is a set of packages that work in harmony because they share common design. +- Unique syntax used pipes (`%>%`) to connect data (object) to verbs (functions). + +*** +![tidy syntax](figs/tidysyntax.png) + + +tidyverse package +======================================================== +The tidyverse package is designed to make it easy to install and load core packages from the `tidyverse` in a single command. Last workshop we transformed and visualized data, this time we will also incorporate R Markdown. + +![tidy verse package](figs/tidyverse.png) + + + +======================================================== + +

Double click "W2_Exercise.Rproj" + to practice commenting and literate programming + +Open the `W2_ExerciseG_.Rmd` with your group number in the file name/

+ +Questions to reflect on... +======================================================== +1. What did you include in your commentary? in comments? why? +2. What was challenging about documenting the other group's work? +3. How does your document compare to other group members? Did you include similar information? +4. What changes (if any) did you make to the markdown code to format the html output? + +======================================================== + + 1. Introduction to reproducible research + 2. Review of tidyverse +

*Break*

+ + * Explore data using a R project + * Automating data analysis with functions + * Wrap Up + + +3. Creating an R project +======================================================== + +I think all of you should read this blog post: https://www.tidyverse.org/blog/2017/12/workflow-vs-script/ + +![](figs/jenny.jpg) + +3. Creating an R project +======================================================== + +Now, we are going explore data starting from scratch. Let's start a new project. + + + +Some great reasons to use projects at http://bit.ly/WhyUseProjects + +Exploring the Global Mammal Parasite Database +======================================================== + +It is now your turn to start a R project to explore the Global Mammal Parasite Database (GMPD). + +1. Start a new project from a new directory called `GMPD` +2. Move the contents of `W2_Exercise\GMPD_data` into the appropriate location + + ![workflow](figs/directory_org.png) + +**Organization is key** + +What is the Global Mammal Parasite Database? +======================================================== + +Take the next few minutes to review: + +* Check out the dataset publication at http://bit.ly/RworkshopGMPD under *Supporting Information* +* Read the abstract of the `metadata.pdf` file +* Read about the file formats on page 14-19 +* Open the data files, match the column titles to the metadata explaination + + +You've been tasked to explore the data set +======================================================== + +Your research group is particularly interested in: + +1. Which of the 3 groups (carnivores, primates, or ungulates) are sickest? *(hint: use the main.csv file)* +2. Are parasites transmitted by vectors also likely to have complex life cycles compared to non-vectored parasites? *(hint: use the traits.csv file)* + +Be sure to use comments and commentary to explain your process. + + +Exploring the Global Mammal Parasite Database +======================================================== + +You might start by loading the needed packages and data. + +```{r prep, eval=TRUE} +library(tidyverse) +gmp <- read_csv("data/GMPD_main.csv") +``` + +* use the cheat sheets, `W1_exercise.Rmd` and each other for help! + +Q1. Which group is sicker? +======================================================== + + > I'm using mean prevalence as a measurement of health. The mean prevalence is calculated for all reported parasites, ignoring parasite type. This might be an assumption to explore later. The sample sizes are very different so I will also calculate standard error to use when comparing the mean values. + +```{r, eval= FALSE} +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar(aes(ymin = MeanPrev-SdErrPrev, ymax = MeanPrev+SdErrPrev), width = 0.2) + +``` + +*what is the output of this code chunk?* + +Q1. Important side note +======================================================= + +Notice how this code is **quite wide**! This can mark your R Markdown document look bad and can actually make the code overflow off the side of the page :) + +I recommend that, in R Studio, you go to Tools -> Global Options -> Code section -> Display tab -> enable "Show Margin" and set the number to 80 characters. This is a good default that will prevent most size 12 monospaced fonts from overflowing. + +```{r, eval= FALSE} +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar( + aes( + ymin = MeanPrev-SdErrPrev, + ymax = MeanPrev+SdErrPrev + ), + width = 0.2 + ) +``` + +Q1. Answer +======================================================== +```{r, eval=TRUE, echo=TRUE, messages = FALSE, fig.align='center'} +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar( + aes( + ymin = MeanPrev-SdErrPrev, + ymax = MeanPrev+SdErrPrev + ), + width = 0.2 + ) +``` + +Q2. Do vectored parasites also have intermediate hosts? +======================================================== + +> I am interested in the proportion of parasites with complex life histories or intermediate hosts. I think that vectored parasites as compared to non-vectored parasites are more likely to have an intermediate host. For the first pass, I want to visualize the number of vectored parasites. + +```{r, eval=FALSE, fig.aling = 'center' } +gmpTraits <- read_csv("data/GMPD_parasite_traits.csv") + +gmpTraits %>% + mutate(vector = ifelse(vector == 0, "No", "Yes")) %>% + mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>% + ggplot(aes(x = vector, fill = intermediate)) + + geom_bar() +``` + +*what happens if an `ifelse` statement isn't used?* + +Q2. Do vectored parasites also have intermediate hosts? +======================================================== + +```{r, eval=TRUE, echo=FALSE} +gmpTraits <- read_csv("data/GMPD_parasite_traits.csv") +``` + +```{r, eval = TRUE, fig.aling = 'center', tidy = TRUE} +gmpTraits %>% + mutate(vector = ifelse(vector == 0, "No", "Yes")) %>% + mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>% + ggplot(aes(x = vector, fill = intermediate)) + + geom_bar() +``` + + + +4. Automating data analysis with functions +======================================================== + +* Sometimes we have a set of analyses that needs to be done multiple times. Instead of a copy & paste approach, we can write a function. +* Functions can help you make less errors and also make your code easier to understand--you will often hear this called the DRY (Don't Repeat Yourself) principle. + +![automation](figs/geeks2.png) + +Anatomy of a function +======================================================== + + +```{r, eval = FALSE} +function_name <- function(argument1, argument2, ...){ + #some analysis + return(output_of_function) +} + +``` + + +Function Names +======================================================== +Function names should... + +* be verbs describing what the function will do. +* use `snake_case_for_naming` +* Previous versions of these slides recommended `camelCaseForNaming`, but the [**tidyverse style guide**](https://style.tidyverse.org/) (recommended reading!) recommends snake_case because it is more accessible to screen readers, ESL speakers, and people with dyslexia. You never know who is going to look at your code next, so it should be as accessible as possible! + +**GOOD:** `calculate_avg_clicks` + +**BAD:** `CalculateAvgClicks`, `calculateAvgClicks`, `cALCULATEaVGcLICKS` + +* When you are writing functions, give your code room to breathe! You don't get a prize for making your code as short as possible, so make your code easier to read. + +An Example +======================================================== + +Move `W2_Functions.Rmd` from the W2_Exercise folder into your GMPD folder containing the `GMPD.Rproj` + +Open the `.Rmd` once it is in the correct location. + +An Example +======================================================== + +*scenario:* In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets. + +*task:* Write a function that will automate these calculations for each dataset. + +An Example +======================================================== + +*scenario:* In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets. + +*task:* Write a function that will automate these calculations for each dataset. + +*step 1:* Determine what the function should do. Maybe try out the analysis on a sample dataset + + +Step 1. Sketching out the function analysis +======================================================== + * we have code that will do this for the `gmp` dataset + +```{r} +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) +``` + +Step 2. Decide how to generalize the code +======================================================== + * What names will change with each dataset? + * What will stay the same? + +```{r, eval = FALSE} +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) +``` + +Step 3. Put into function format +======================================================== + +```{r} + prev_by_par_type <- function(dataset){ + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) + } + +``` + +Step 4. Try it out +======================================================== + +```{r} + prev_by_par_type <- function(dataset) { + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) + } + +prev_by_par_type(gmp) +``` + +Tidyverse Challenge +======================================================== + Modify this function so that the mean prevalence is calculated for each host group *and* parasite type. + +```{r, eval = FALSE} +prev_by_par_type <- function(dataset) { + dataset %>% + # calculate mean prevalence for host group and parasite type + } +``` + +Tidyverse Challenge: Solution +======================================================== + Modify this function so that the mean prevalence is calculated for each parasite type. + +```{r} + prev_by_par_type <- function(dataset) { + dataset %>% + drop_na(Prevalence) %>% + # add second grouping variable + group_by( + Group, + ParType + ) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) + } +``` + +Important Caveat +======================================================= + +* When you want to use tidyverse functions in your custom function, you **cannot use a column name as a function argument**. +* If you try the following function and pass in `prevalence` to the `outcome` parameter, you will get an error! + +```{r} + prev_by_par_type <- function(dataset, outcome) { + dataset %>% + drop_na(outcome) %>% + # add second grouping variable + group_by( + Group, + ParType + ) %>% + summarise( + MeanPrev = mean(outcome), + SdErrPrev = sd(outcome)/sqrt(n()) + ) + } +``` + +* Tidyverse uses "non-standard evaluation." (As opposed to base R's "standard evaluation.") This is possible to do, but it requires a discussion of complicated programming topics--you can read about this online if you are interested. + +Returning to RR +======================================================== +**Dataflow is the idea that when a variable changes, downstream computations affected by that variable should change as well.** + +So in this case, we've written a function that can take in different datasets or updated versions and adjust the output automatically* + +*as long as the column names are consistent. + +5. Using scripts in your workflow +======================================================== +We've touched on organization earlier. Let's focus on the *scripts* folder. + +![flow](figs/directory_orgScripts.png) + +Keeping a clean workflow +======================================================== +If you are writing functions that: +- are long +- used for different parts of your research +- won't be changing often. + +Then, a script might make for clean workflow. + + ![flow](figs/directory_orgScripts.png) + +What is a script? +======================================================== + +- stable code often consisting of functions +- is saved as `.R` file type +- is loaded into the R environment using the `source()` command +- simplifies your `.Rmd` files + + + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file, write your functions +3. Save file in scripts directory with an informative name + + +Make a script +======================================================== +left: 30% +1. Create a `.R` file + +*** + + ![](figs/newScript.png) + + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file + +```{r, eval = FALSE} +# Written on May 11, 2018 by Reni Kaul +# This script contains functions for the R workshop; REU popbio program. +# Originally written to be part of the W2_Functions.Rmd exploration + +prev_by_par_type <- function(dataset){ + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% +``` + +Script recommendations: +* Never start a script with `rm(list = ls())` +* Never start a script with `setwd(my_folder_that_no_one_else_has)` +* Don't install packages in a script. Use `library()` or another way of declaring packages, and the users will know what they need to install. + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file +3. Save file in scripts directory with an informative name + +- What is good name for this script? +- Create a script folder inside the `GMPD` project and save your script + + +Use a script +======================================================== + + *only for this demo Session > Restart R* + +Source the script + +```{r, eval=FALSE} +source("scripts/YOURFILE.R") + +``` + +* What's in the Environment tab? +* Note: you should treat everything in the environment tab as ephemeral. The only thing that actually exists is your scripts and markdown files. If running your code doesn't re-create an object, that object doesn't actually exist. + +Other RR recommendations +======================================================== + +* We have barely scratched the surface of reproducible research! +* Especially if you are new to programming, this is a GREAT place to start, and if you follow these tips, your code will be well above average. +* If you are an experienced programmer, you may be interested in looking into Git/GitHub, `renv`, `targets`, and inline R coding for Markdown files. Using these packages, you can automate and future-proof an entire project so that it "just works" when someone else downloads it. +* We covered a lot today and you should be proud of yourself! Please contact me with any questions!!! + +6. Wrap Up +======================================================== +left: 50% + + +**We can…** +- code using best practices +- create an HTML doc with code and commentary +- write a function +- create and use scripts +- calculate summary statistics of a dataset +- create a figure from data + + + +*** +![W2](figs/W2_iterative.png) + +**Reminder: complete project worksheet** + + 6. Wrap Up +======================================================== +left: 50% + +**Next** + + - Modeling + - simulating data + - fitting models to data + +*** + +![W3](figs/W3_iterative.png) + diff --git a/W2_RepRe/W2_Slides/W2_Presentation2022.md b/W2_RepRe/W2_Slides/W2_Presentation2022.md new file mode 100644 index 0000000..8e5423b --- /dev/null +++ b/W2_RepRe/W2_Slides/W2_Presentation2022.md @@ -0,0 +1,738 @@ +Reproducible Research with R +======================================================== +author: Reni Kaul & Deven Gokhale & Zane Billings +date: 2022-06-06 +autosize: true +font-import: https://fonts.googleapis.com/css?family=PT+Sans +font-family: 'PT Sans', sans-serif; + +*** +
+ + + +About Myself +======================================================== + + - Epi/Bios PhD student with Andreas Handel. + - I use data analysis and statistical models to study epidemiology and immunology of flu and norovirus. + - I started using R and R Markdown in 2017. + - I use R in my research to: + + organize data + + visualize results + + fit models + + write reproducible manuscripts + + pretty much everything I do is in R (Markdown), actually. + - You can get my contact info at https://wzbillings.com. My office is on the HSC so feel free to take the bus, or just email me. I'm happy to answer any R questions. (Or questions about grad school, or anything else that might help!) + + +Outline +======================================================== +left: 40% + +**At the end of this workshop you should be able to…** +- code using best practices +- create an HTML doc with code and commentary +- write a function +- create and use scripts +- calculate summary and inferential statistics of a dataset +- create a figure from data + + +*** + +**Topics** + 1. Introduction to reproducible research + 2. Review of tidyverse + + *Break* + + 3. Explore data using a R project + 4. Automating data analysis with functions + 5. Using scripts in your workflow + 6. Wrap Up + +THE VERY FIRST THING WE ARE GOING TO DO. +======================================================== + +* Open `R` on your computer. +* Run `install.packages("usethis")` to install the `usethis` package. +* Run the command `usethis::use_blank_slate()`. If successful, it should print a message. +* I recommend you do this first thing every time you set up R on a new computer and every time you update R. +* We'll talk about why I had you do this in a bit :) + +1. What is Reproducible Research (RR)? +======================================================== + +**Johns Hopkins Bloomberg School of Public Health:** + +Reproducible Research is the idea that data analyses, and more generally, scientific claims, are published with their data and software code so that others may verify the findings and build upon them. + +![](figs/repspectrum.JPG) + + +What is reproducible research? +======================================================== +Three R's: Replication, repeatability, and reproducibility + +**Replication** concerns the number of data points (observations, study subjects, etc.) and establishes the generality of the observed finding to a study population. + +**Repeatability** concerns the ability to arrive at the same findings when a study is repeated and establishes the generality of the observed finding to other study populations or systems. + +**Reproducibility** concerns the reliability of the logic that leads from data to conclusions -- that is, the *data analysis*. It would seem that reproducibility is an essential ingredient of scientific knowledge. But, as data workflow become more and more complicated they also bring more subjective decision-making by the data analyst, more computations, and more opportunities for error. + +Why should research be made reproducible? +======================================================== +**Four public virtues and one private one** + +- Enables readers to develop a complete and exact understanding of methods +- Enables error detection and correction +- Facilitates critique +- Enables extension and advancement +- Saves time (private) + +How can research be made reproducible? +======================================================== +left: 50% + +**Three concepts** + +- *Workflow/Dataflow* is made reproducible by file organization and coding practices +- *Literate statistical programming* is incorporated into research by blending computer code and with natural language explanations +- *Science archive* must be used for public virtues to be realized + +Workflow is... +======================================================== + +the idea that data analysis may be viewed as a repeatable pattern of computational activities. If these activities are truly repeatable and truly computational, then they may be encoded in an algorithm (programming). This principle of repeatable computation is the key to reproducible research. In reproducible research, a computer program is written to perform an analysis. + + ![workflow](figs/directory_org.png) +**Organization is key** + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + +*** + +*What would you need to recreate a modeling project?* + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + - Experimental details: experimental design, sampling protocol, etc. + - Analysis: `R` code + - What else? + +*** + +*What would you need to recreate a modeling project?* + - Experimental details: model assumptions, number of simulations, etc. + - Analysis: `R` code + - What else? + + +What should be included in RR? +======================================================== +left: 50% + +*What would you need to recreate an experimental project?* + - Experimental details: experimental design, sampling protocol, etc. + - Analysis: `R` code + - What else? + +**Where is the why ?** +*** + +*What would you need to recreate a modeling project?* + - Experimental details: model assumptions, number of simulations, etc. + - Analysis: `R` code + - What else? + + + + + Where is the 'Why'? +======================================================== + +Within your code your comments and longer commentary should include the *why* instead of the what or how. + +Is this an example of good commenting the **why**? + + +```r +passengers %>% # start with Titanic passengers data set + filter(Sex == "male") %>% # pull out male passengers + ggplot(aes(x= Age, y =Fare)) + # plot age on x axis and fare on y axis + geom_point() # plot the data as points +``` + +Literate programming +======================================================== + +* The best code is "self-documenting." It should be so easy to read that you don't need to comment what it does. +* However, you still need to explain WHY you are doing it -- computer scientists call this paradigm "literate programming." + +An example of better comments with commentary: + +> I hypothesize that older men will pay a higher fare because they have had more time to accumulate more wealth. The first step of testing this hypothesis is to determine if there is a possitive correlation between age and fare for male passengers. + +```r +# create a plot to see how male passengers' age correlated with the fare they paid. +passengers %>% + filter(Sex == "male") %>% + ggplot(aes(x= Age, y =Fare)) + + geom_point() +``` + + +2. Review of tidyverse +======================================================== +left: 50% + +- The tidyverse is a set of packages that work in harmony because they share common design. +- Unique syntax used pipes (`%>%`) to connect data (object) to verbs (functions). + +*** +![tidy syntax](figs/tidysyntax.png) + + +tidyverse package +======================================================== +The tidyverse package is designed to make it easy to install and load core packages from the `tidyverse` in a single command. Last workshop we transformed and visualized data, this time we will also incorporate R Markdown. + +![tidy verse package](figs/tidyverse.png) + + + +======================================================== + +

Double click "W2_Exercise.Rproj" + to practice commenting and literate programming + +Open the `W2_ExerciseG_.Rmd` with your group number in the file name/

+ +Questions to reflect on... +======================================================== +1. What did you include in your commentary? in comments? why? +2. What was challenging about documenting the other group's work? +3. How does your document compare to other group members? Did you include similar information? +4. What changes (if any) did you make to the markdown code to format the html output? + +======================================================== + + 1. Introduction to reproducible research + 2. Review of tidyverse +

*Break*

+ + * Explore data using a R project + * Automating data analysis with functions + * Wrap Up + + +3. Creating an R project +======================================================== + +I think all of you should read this blog post: https://www.tidyverse.org/blog/2017/12/workflow-vs-script/ + +![](figs/jenny.jpg) + +3. Creating an R project +======================================================== + +Now, we are going explore data starting from scratch. Let's start a new project. + + + +Some great reasons to use projects at http://bit.ly/WhyUseProjects + +Exploring the Global Mammal Parasite Database +======================================================== + +It is now your turn to start a R project to explore the Global Mammal Parasite Database (GMPD). + +1. Start a new project from a new directory called `GMPD` +2. Move the contents of `W2_Exercise\GMPD_data` into the appropriate location + + ![workflow](figs/directory_org.png) + +**Organization is key** + +What is the Global Mammal Parasite Database? +======================================================== + +Take the next few minutes to review: + +* Check out the dataset publication at http://bit.ly/RworkshopGMPD under *Supporting Information* +* Read the abstract of the `metadata.pdf` file +* Read about the file formats on page 14-19 +* Open the data files, match the column titles to the metadata explaination + + +You've been tasked to explore the data set +======================================================== + +Your research group is particularly interested in: + +1. Which of the 3 groups (carnivores, primates, or ungulates) are sickest? *(hint: use the main.csv file)* +2. Are parasites transmitted by vectors also likely to have complex life cycles compared to non-vectored parasites? *(hint: use the traits.csv file)* + +Be sure to use comments and commentary to explain your process. + + +Exploring the Global Mammal Parasite Database +======================================================== + +You might start by loading the needed packages and data. + + +```r +library(tidyverse) +gmp <- read_csv("data/GMPD_main.csv") +``` + +* use the cheat sheets, `W1_exercise.Rmd` and each other for help! + +Q1. Which group is sicker? +======================================================== + + > I'm using mean prevalence as a measurement of health. The mean prevalence is calculated for all reported parasites, ignoring parasite type. This might be an assumption to explore later. The sample sizes are very different so I will also calculate standard error to use when comparing the mean values. + + +```r +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar(aes(ymin = MeanPrev-SdErrPrev, ymax = MeanPrev+SdErrPrev), width = 0.2) +``` + +*what is the output of this code chunk?* + +Q1. Important side note +======================================================= + +Notice how this code is **quite wide**! This can mark your R Markdown document look bad and can actually make the code overflow off the side of the page :) + +I recommend that, in R Studio, you go to Tools -> Global Options -> Code section -> Display tab -> enable "Show Margin" and set the number to 80 characters. This is a good default that will prevent most size 12 monospaced fonts from overflowing. + + +```r +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar( + aes( + ymin = MeanPrev-SdErrPrev, + ymax = MeanPrev+SdErrPrev + ), + width = 0.2 + ) +``` + +Q1. Answer +======================================================== + +```r +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) %>% + ggplot(aes(x = Group, y = MeanPrev)) + + geom_bar(stat = "identity") + + geom_errorbar( + aes( + ymin = MeanPrev-SdErrPrev, + ymax = MeanPrev+SdErrPrev + ), + width = 0.2 + ) +``` + +plot of chunk unnamed-chunk-5 + +Q2. Do vectored parasites also have intermediate hosts? +======================================================== + +> I am interested in the proportion of parasites with complex life histories or intermediate hosts. I think that vectored parasites as compared to non-vectored parasites are more likely to have an intermediate host. For the first pass, I want to visualize the number of vectored parasites. + + +```r +gmpTraits <- read_csv("data/GMPD_parasite_traits.csv") + +gmpTraits %>% + mutate(vector = ifelse(vector == 0, "No", "Yes")) %>% + mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>% + ggplot(aes(x = vector, fill = intermediate)) + + geom_bar() +``` + +*what happens if an `ifelse` statement isn't used?* + +Q2. Do vectored parasites also have intermediate hosts? +======================================================== + + + + +```r +gmpTraits %>% + mutate(vector = ifelse(vector == 0, "No", "Yes")) %>% + mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>% + ggplot(aes(x = vector, fill = intermediate)) + + geom_bar() +``` + +![plot of chunk unnamed-chunk-8](W2_Presentation2022-figure/unnamed-chunk-8-1.png) + + + +4. Automating data analysis with functions +======================================================== + +* Sometimes we have a set of analyses that needs to be done multiple times. Instead of a copy & paste approach, we can write a function. +* Functions can help you make less errors and also make your code easier to understand--you will often hear this called the DRY (Don't Repeat Yourself) principle. + +![automation](figs/geeks2.png) + +Anatomy of a function +======================================================== + + + +```r +function_name <- function(argument1, argument2, ...){ + #some analysis + return(output_of_function) +} +``` + + +Function Names +======================================================== +Function names should... + +* be verbs describing what the function will do. +* use `snake_case_for_naming` +* Previous versions of these slides recommended `camelCaseForNaming`, but the [**tidyverse style guide**](https://style.tidyverse.org/) (recommended reading!) recommends snake_case because it is more accessible to screen readers, ESL speakers, and people with dyslexia. You never know who is going to look at your code next, so it should be as accessible as possible! + +**GOOD:** `calculate_avg_clicks` + +**BAD:** `CalculateAvgClicks`, `calculateAvgClicks`, `cALCULATEaVGcLICKS` + +* When you are writing functions, give your code room to breathe! You don't get a prize for making your code as short as possible, so make your code easier to read. + +An Example +======================================================== + +Move `W2_Functions.Rmd` from the W2_Exercise folder into your GMPD folder containing the `GMPD.Rproj` + +Open the `.Rmd` once it is in the correct location. + +An Example +======================================================== + +*scenario:* In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets. + +*task:* Write a function that will automate these calculations for each dataset. + +An Example +======================================================== + +*scenario:* In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets. + +*task:* Write a function that will automate these calculations for each dataset. + +*step 1:* Determine what the function should do. Maybe try out the analysis on a sample dataset + + +Step 1. Sketching out the function analysis +======================================================== + * we have code that will do this for the `gmp` dataset + + +```r +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) +``` + +``` +# A tibble: 3 x 3 + Group MeanPrev SdErrPrev + +1 carnivores 0.388 0.0141 +2 primates 0.328 0.00534 +3 ungulates 0.500 0.00706 +``` + +Step 2. Decide how to generalize the code +======================================================== + * What names will change with each dataset? + * What will stay the same? + + +```r +gmp %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) +``` + +Step 3. Put into function format +======================================================== + + +```r + prev_by_par_type <- function(dataset){ + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) + } +``` + +Step 4. Try it out +======================================================== + + +```r + prev_by_par_type <- function(dataset) { + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% + summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) + } + +prev_by_par_type(gmp) +``` + +``` +# A tibble: 3 x 3 + Group MeanPrev SdErrPrev + +1 carnivores 0.388 0.0141 +2 primates 0.328 0.00534 +3 ungulates 0.500 0.00706 +``` + +Tidyverse Challenge +======================================================== + Modify this function so that the mean prevalence is calculated for each host group *and* parasite type. + + +```r +prev_by_par_type <- function(dataset) { + dataset %>% + # calculate mean prevalence for host group and parasite type + } +``` + +Tidyverse Challenge: Solution +======================================================== + Modify this function so that the mean prevalence is calculated for each parasite type. + + +```r + prev_by_par_type <- function(dataset) { + dataset %>% + drop_na(Prevalence) %>% + # add second grouping variable + group_by( + Group, + ParType + ) %>% + summarise( + MeanPrev = mean(Prevalence), + SdErrPrev = sd(Prevalence)/sqrt(n()) + ) + } +``` + +Important Caveat +======================================================= + +* When you want to use tidyverse functions in your custom function, you **cannot use a column name as a function argument**. +* If you try the following function and pass in `prevalence` to the `outcome` parameter, you will get an error! + + +```r + prev_by_par_type <- function(dataset, outcome) { + dataset %>% + drop_na(outcome) %>% + # add second grouping variable + group_by( + Group, + ParType + ) %>% + summarise( + MeanPrev = mean(outcome), + SdErrPrev = sd(outcome)/sqrt(n()) + ) + } +``` + +* Tidyverse uses "non-standard evaluation." (As opposed to base R's "standard evaluation.") This is possible to do, but it requires a discussion of complicated programming topics--you can read about this online if you are interested. + +Returning to RR +======================================================== +**Dataflow is the idea that when a variable changes, downstream computations affected by that variable should change as well.** + +So in this case, we've written a function that can take in different datasets or updated versions and adjust the output automatically* + +*as long as the column names are consistent. + +5. Using scripts in your workflow +======================================================== +We've touched on organization earlier. Let's focus on the *scripts* folder. + +![flow](figs/directory_orgScripts.png) + +Keeping a clean workflow +======================================================== +If you are writing functions that: +- are long +- used for different parts of your research +- won't be changing often. + +Then, a script might make for clean workflow. + + ![flow](figs/directory_orgScripts.png) + +What is a script? +======================================================== + +- stable code often consisting of functions +- is saved as `.R` file type +- is loaded into the R environment using the `source()` command +- simplifies your `.Rmd` files + + + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file, write your functions +3. Save file in scripts directory with an informative name + + +Make a script +======================================================== +left: 30% +1. Create a `.R` file + +*** + + ![](figs/newScript.png) + + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file + + +```r +# Written on May 11, 2018 by Reni Kaul +# This script contains functions for the R workshop; REU popbio program. +# Originally written to be part of the W2_Functions.Rmd exploration + +prev_by_par_type <- function(dataset){ + dataset %>% + drop_na(Prevalence) %>% + group_by(Group) %>% +``` + +Script recommendations: +* Never start a script with `rm(list = ls())` +* Never start a script with `setwd(my_folder_that_no_one_else_has)` +* Don't install packages in a script. Use `library()` or another way of declaring packages, and the users will know what they need to install. + +Make a script +======================================================== + +1. Create a `.R` file +2. Make some comments at the start of the file +3. Save file in scripts directory with an informative name + +- What is good name for this script? +- Create a script folder inside the `GMPD` project and save your script + + +Use a script +======================================================== + + *only for this demo Session > Restart R* + +Source the script + + +```r +source("scripts/YOURFILE.R") +``` + +* What's in the Environment tab? +* Note: you should treat everything in the environment tab as ephemeral. The only thing that actually exists is your scripts and markdown files. If running your code doesn't re-create an object, that object doesn't actually exist. + +Other RR recommendations +======================================================== + +* We have barely scratched the surface of reproducible research! +* Especially if you are new to programming, this is a GREAT place to start, and if you follow these tips, your code will be well above average. +* If you are an experienced programmer, you may be interested in looking into Git/GitHub, `renv`, `targets`, and inline R coding for Markdown files. Using these packages, you can automate and future-proof an entire project so that it "just works" when someone else downloads it. +* We covered a lot today and you should be proud of yourself! Please contact me with any questions!!! + +6. Wrap Up +======================================================== +left: 50% + + +**We can…** +- code using best practices +- create an HTML doc with code and commentary +- write a function +- create and use scripts +- calculate summary statistics of a dataset +- create a figure from data + + + +*** +![W2](figs/W2_iterative.png) + +**Reminder: complete project worksheet** + + 6. Wrap Up +======================================================== +left: 50% + +**Next** + + - Modeling + - simulating data + - fitting models to data + +*** + +![W3](figs/W3_iterative.png) + diff --git a/W2_RepRe/W2_Slides/figs/jenny.jpg b/W2_RepRe/W2_Slides/figs/jenny.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5ff17edc2983dd9a2b65a6f99426e0c7a678156 GIT binary patch literal 128101 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 %TM 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

TxjPbO}I4WT(|uTmn0si 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�@}@(5T080{oSMv`zzo?359_j=3a-leY`F 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�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⩔cTnlzu#P8lkGdClGW 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 literal 0 HcmV?d00001 From 80f66c241f12adeabc56440afcfac3e1882e7fc9 Mon Sep 17 00:00:00 2001 From: wzbillings <39701545+wzbillings@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:38:06 -0400 Subject: [PATCH 2/2] add scrolling in case of overflow --- W2_RepRe/W2_Slides/W2_Presentation2022.Rpres | 6 + W2_RepRe/W2_Slides/W2_Presentation2022.html | 1875 ++++++++++++++++++ W2_RepRe/W2_Slides/W2_Presentation2022.md | 6 + 3 files changed, 1887 insertions(+) create mode 100644 W2_RepRe/W2_Slides/W2_Presentation2022.html diff --git a/W2_RepRe/W2_Slides/W2_Presentation2022.Rpres b/W2_RepRe/W2_Slides/W2_Presentation2022.Rpres index 83104a4..09d082e 100644 --- a/W2_RepRe/W2_Slides/W2_Presentation2022.Rpres +++ b/W2_RepRe/W2_Slides/W2_Presentation2022.Rpres @@ -6,6 +6,12 @@ autosize: true font-import: https://fonts.googleapis.com/css?family=PT+Sans font-family: 'PT Sans', sans-serif; + + ***

diff --git a/W2_RepRe/W2_Slides/W2_Presentation2022.html b/W2_RepRe/W2_Slides/W2_Presentation2022.html new file mode 100644 index 0000000..f8bc2a7 --- /dev/null +++ b/W2_RepRe/W2_Slides/W2_Presentation2022.html @@ -0,0 +1,1875 @@ + + + + + + Reproducible Research with R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+

Reproducible Research with R

Reni Kaul & Deven Gokhale & Zane Billings
2022-06-06

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

About Myself

+
+ +
+
+

Outline

+
+

At the end of this workshop you should be able to…

+ +
    +
  • code using best practices
  • +
  • create an HTML doc with code and commentary
  • +
  • write a function
  • +
  • create and use scripts
  • +
  • calculate summary and inferential statistics of a dataset
  • +
  • create a figure from data
  • +
+ + +
+ +
+ + +

Topics

+ +
    +
  1. Introduction to reproducible research
  2. +
  3. Review of tidyverse

    + +

    Break

  4. +
  5. Explore data using a R project

  6. +
  7. Automating data analysis with functions

  8. +
  9. Using scripts in your workflow

  10. +
  11. Wrap Up

  12. +
+ +
+ +
+
+

THE VERY FIRST THING WE ARE GOING TO DO.

+
+
    +
  • Open R on your computer.
  • +
  • Run install.packages("usethis") to install the usethis package.
  • +
  • Run the command usethis::use_blank_slate(). If successful, it should print a message.
  • +
  • I recommend you do this first thing every time you set up R on a new computer and every time you update R.
  • +
  • We'll talk about why I had you do this in a bit :)
  • +
+ +
+ +
+
+

1. What is Reproducible Research (RR)?

+
+

Johns Hopkins Bloomberg School of Public Health:

+ +

Reproducible Research is the idea that data analyses, and more generally, scientific claims, are published with their data and software code so that others may verify the findings and build upon them.

+ +

+ +
+ +
+
+

What is reproducible research?

+
+

Three R's: Replication, repeatability, and reproducibility

+ +

Replication concerns the number of data points (observations, study subjects, etc.) and establishes the generality of the observed finding to a study population.

+ +

Repeatability concerns the ability to arrive at the same findings when a study is repeated and establishes the generality of the observed finding to other study populations or systems.

+ +

Reproducibility concerns the reliability of the logic that leads from data to conclusions – that is, the data analysis. It would seem that reproducibility is an essential ingredient of scientific knowledge. But, as data workflow become more and more complicated they also bring more subjective decision-making by the data analyst, more computations, and more opportunities for error.

+ +
+ +
+
+

Why should research be made reproducible?

+
+

Four public virtues and one private one

+ +
    +
  • Enables readers to develop a complete and exact understanding of methods
  • +
  • Enables error detection and correction
  • +
  • Facilitates critique
  • +
  • Enables extension and advancement
  • +
  • Saves time (private)
  • +
+ +
+ +
+
+

How can research be made reproducible?

+
+

Three concepts

+ +
    +
  • Workflow/Dataflow is made reproducible by file organization and coding practices
  • +
  • Literate statistical programming is incorporated into research by blending computer code and with natural language explanations
  • +
  • Science archive must be used for public virtues to be realized
  • +
+ +
+ +
+
+

Workflow is...

+
+

the idea that data analysis may be viewed as a repeatable pattern of computational activities. If these activities are truly repeatable and truly computational, then they may be encoded in an algorithm (programming). This principle of repeatable computation is the key to reproducible research. In reproducible research, a computer program is written to perform an analysis.

+ +

workflow +Organization is key

+ +
+ +
+
+

What should be included in RR?

+
+

What would you need to recreate an experimental project?

+ + +
+ +
+ + +

What would you need to recreate a modeling project?

+ +
+ +
+
+

What should be included in RR?

+
+

What would you need to recreate an experimental project?

+ +
    +
  • Experimental details: experimental design, sampling protocol, etc.
  • +
  • Analysis: R code
  • +
  • What else?
  • +
+ + +
+ +
+ + +

What would you need to recreate a modeling project?

+ +
    +
  • Experimental details: model assumptions, number of simulations, etc.
  • +
  • Analysis: R code
  • +
  • What else?
  • +
+ +
+ +
+
+

What should be included in RR?

+
+

What would you need to recreate an experimental project?

+ +
    +
  • Experimental details: experimental design, sampling protocol, etc.
  • +
  • Analysis: R code
  • +
  • What else?
  • +
+ +

Where is the why ?

+ + +
+ +
+ + +

What would you need to recreate a modeling project?

+ +
    +
  • Experimental details: model assumptions, number of simulations, etc.
  • +
  • Analysis: R code
  • +
  • What else?
  • +
+ +
+ +
+
+

Where is the 'Why'?

+
+

Within your code your comments and longer commentary should include the why instead of the what or how.

+ +

Is this an example of good commenting the why?

+ +
passengers %>% # start with Titanic passengers data set
+  filter(Sex == "male") %>% # pull out male passengers
+  ggplot(aes(x= Age, y =Fare)) + # plot age on x axis and fare on y axis
+  geom_point() # plot the data as points
+
+ +
+ +
+
+

Literate programming

+
+
    +
  • The best code is “self-documenting.” It should be so easy to read that you don't need to comment what it does.
  • +
  • However, you still need to explain WHY you are doing it – computer scientists call this paradigm “literate programming.”
  • +
+ +

An example of better comments with commentary:

+ +
+

I hypothesize that older men will pay a higher fare because they have had more time to accumulate more wealth. The first step of testing this hypothesis is to determine if there is a possitive correlation between age and fare for male passengers.

+
+ +
# create a plot to see how male passengers' age correlated with the fare they paid. 
+passengers %>% 
+  filter(Sex == "male") %>% 
+  ggplot(aes(x= Age, y =Fare)) + 
+  geom_point() 
+
+ +
+ +
+
+

2. Review of tidyverse

+
+
    +
  • The tidyverse is a set of packages that work in harmony because they share common design.
  • +
  • Unique syntax used pipes (%>%) to connect data (object) to verbs (functions).
  • +
+ + +
+ +
+ + +

tidy syntax

+ +
+ +
+
+

tidyverse package

+
+

The tidyverse package is designed to make it easy to install and load core packages from the tidyverse in a single command. Last workshop we transformed and visualized data, this time we will also incorporate R Markdown.

+ +

tidy verse package

+ +
+ +
+
+ +
+

Double click “W2_Exercise.Rproj” + to practice commenting and literate programming

+ +

Open the W2_ExerciseG_.Rmd with your group number in the file name/

+ +

+ +
+
+

Questions to reflect on...

+
+
    +
  1. What did you include in your commentary? in comments? why?
  2. +
  3. What was challenging about documenting the other group's work?
  4. +
  5. How does your document compare to other group members? Did you include similar information?
  6. +
  7. What changes (if any) did you make to the markdown code to format the html output?
  8. +
+ +
+ +
+
+ +
+

1. Introduction to reproducible research
+ 2. Review of tidyverse +

Break

+ +
    +
  • Explore data using a R project
  • +
  • Automating data analysis with functions
  • +
  • Wrap Up
  • +
+ +
+ +
+
+

3. Creating an R project

+
+

I think all of you should read this blog post: https://www.tidyverse.org/blog/2017/12/workflow-vs-script/

+ +

+ +
+ +
+
+

3. Creating an R project

+
+

Now, we are going explore data starting from scratch. Let's start a new project.

+ + + +

Some great reasons to use projects at http://bit.ly/WhyUseProjects

+ +
+ +
+
+

Exploring the Global Mammal Parasite Database

+
+

It is now your turn to start a R project to explore the Global Mammal Parasite Database (GMPD).

+ +
    +
  1. Start a new project from a new directory called GMPD
  2. +
  3. Move the contents of W2_Exercise\GMPD_data into the appropriate location

    + +

    workflow

  4. +
+ +

Organization is key

+ +
+ +
+
+

What is the Global Mammal Parasite Database?

+
+

Take the next few minutes to review:

+ +
    +
  • Check out the dataset publication at http://bit.ly/RworkshopGMPD under Supporting Information
  • +
  • Read the abstract of the metadata.pdf file
  • +
  • Read about the file formats on page 14-19
  • +
  • Open the data files, match the column titles to the metadata explaination
  • +
+ +
+ +
+
+

You've been tasked to explore the data set

+
+

Your research group is particularly interested in:

+ +
    +
  1. Which of the 3 groups (carnivores, primates, or ungulates) are sickest? (hint: use the main.csv file)
  2. +
  3. Are parasites transmitted by vectors also likely to have complex life cycles compared to non-vectored parasites? (hint: use the traits.csv file)
  4. +
+ +

Be sure to use comments and commentary to explain your process.

+ +
+ +
+
+

Exploring the Global Mammal Parasite Database

+
+

You might start by loading the needed packages and data.

+ +
library(tidyverse)
+gmp <- read_csv("data/GMPD_main.csv")
+
+ +
    +
  • use the cheat sheets, W1_exercise.Rmd and each other for help!
  • +
+ +
+ +
+
+

Q1. Which group is sicker?

+
+
+

I'm using mean prevalence as a measurement of health. The mean prevalence is calculated for all reported parasites, ignoring parasite type. This might be an assumption to explore later. The sample sizes are very different so I will also calculate standard error to use when comparing the mean values.

+
+ +
gmp %>%
+  drop_na(Prevalence) %>%
+  group_by(Group) %>%
+  summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n())) %>%
+  ggplot(aes(x = Group, y = MeanPrev)) +
+  geom_bar(stat = "identity") +
+  geom_errorbar(aes(ymin = MeanPrev-SdErrPrev, ymax = MeanPrev+SdErrPrev), width = 0.2)
+
+ +

what is the output of this code chunk?

+ +
+ +
+
+

Q1. Important side note

+
+

Notice how this code is quite wide! This can mark your R Markdown document look bad and can actually make the code overflow off the side of the page :)

+ +

I recommend that, in R Studio, you go to Tools -> Global Options -> Code section -> Display tab -> enable “Show Margin” and set the number to 80 characters. This is a good default that will prevent most size 12 monospaced fonts from overflowing.

+ +
gmp %>%
+  drop_na(Prevalence) %>%
+  group_by(Group) %>%
+  summarise(
+    MeanPrev = mean(Prevalence),
+    SdErrPrev = sd(Prevalence)/sqrt(n())
+  ) %>%
+  ggplot(aes(x = Group, y = MeanPrev)) +
+  geom_bar(stat = "identity") +
+  geom_errorbar(
+    aes(
+      ymin = MeanPrev-SdErrPrev,
+      ymax = MeanPrev+SdErrPrev
+    ),
+    width = 0.2
+  )
+
+ +
+ +
+
+

Q1. Answer

+
+
gmp %>%
+  drop_na(Prevalence) %>%
+  group_by(Group) %>%
+  summarise(
+    MeanPrev = mean(Prevalence),
+    SdErrPrev = sd(Prevalence)/sqrt(n())
+  ) %>%
+  ggplot(aes(x = Group, y = MeanPrev)) +
+  geom_bar(stat = "identity") +
+  geom_errorbar(
+    aes(
+      ymin = MeanPrev-SdErrPrev,
+      ymax = MeanPrev+SdErrPrev
+    ),
+    width = 0.2
+  )
+
+ +

plot of chunk unnamed-chunk-5

+ +
+ +
+
+

Q2. Do vectored parasites also have intermediate hosts?

+
+
+

I am interested in the proportion of parasites with complex life histories or intermediate hosts. I think that vectored parasites as compared to non-vectored parasites are more likely to have an intermediate host. For the first pass, I want to visualize the number of vectored parasites.

+
+ +
gmpTraits <- read_csv("data/GMPD_parasite_traits.csv")
+
+gmpTraits %>%
+  mutate(vector = ifelse(vector == 0, "No", "Yes")) %>%
+  mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>%
+  ggplot(aes(x = vector, fill = intermediate)) +
+  geom_bar()
+
+ +

what happens if an ifelse statement isn't used?

+ +
+ +
+
+

Q2. Do vectored parasites also have intermediate hosts?

+
+
gmpTraits %>%
+  mutate(vector = ifelse(vector == 0, "No", "Yes")) %>%
+  mutate(intermediate = ifelse(intermediate == 0, "No", "Yes")) %>%
+  ggplot(aes(x = vector, fill = intermediate)) +
+  geom_bar()
+
+ +

plot of chunk unnamed-chunk-8

+ +
+ +
+
+

4. Automating data analysis with functions

+
+
    +
  • Sometimes we have a set of analyses that needs to be done multiple times. Instead of a copy & paste approach, we can write a function.
  • +
  • Functions can help you make less errors and also make your code easier to understand–you will often hear this called the DRY (Don't Repeat Yourself) principle.
  • +
+ +

automation

+ +
+ +
+
+

Anatomy of a function

+
+
function_name <- function(argument1, argument2, ...){
+  #some analysis
+  return(output_of_function)
+}
+
+ +
+ +
+
+

Function Names

+
+

Function names should…

+ +
    +
  • be verbs describing what the function will do.
  • +
  • use snake_case_for_naming
  • +
  • Previous versions of these slides recommended camelCaseForNaming, but the tidyverse style guide (recommended reading!) recommends snake_case because it is more accessible to screen readers, ESL speakers, and people with dyslexia. You never know who is going to look at your code next, so it should be as accessible as possible!
  • +
+ +

GOOD: calculate_avg_clicks

+ +

BAD: CalculateAvgClicks, calculateAvgClicks, cALCULATEaVGcLICKS

+ +
    +
  • When you are writing functions, give your code room to breathe! You don't get a prize for making your code as short as possible, so make your code easier to read.
  • +
+ +
+ +
+
+

An Example

+
+

Move W2_Functions.Rmd from the W2_Exercise folder into your GMPD folder containing the GMPD.Rproj

+ +

Open the .Rmd once it is in the correct location.

+ +
+ +
+
+

An Example

+
+

scenario: In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets.

+ +

task: Write a function that will automate these calculations for each dataset.

+ +
+ +
+
+

An Example

+
+

scenario: In addition to the GMPD, there are also parasite datasets for cetaceans and fish among others. They all follow the same format and column naming system. You've been asked to continue exploring which groups are sickest (Q1) using these additional datasets.

+ +

task: Write a function that will automate these calculations for each dataset.

+ +

step 1: Determine what the function should do. Maybe try out the analysis on a sample dataset

+ +
+ +
+
+

Step 1. Sketching out the function analysis

+
+
    +
  • we have code that will do this for the gmp dataset
  • +
+ +
gmp %>%
+  drop_na(Prevalence) %>%
+  group_by(Group) %>%
+  summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n()))
+
+ +
# A tibble: 3 x 3
+  Group      MeanPrev SdErrPrev
+  <chr>         <dbl>     <dbl>
+1 carnivores    0.388   0.0141 
+2 primates      0.328   0.00534
+3 ungulates     0.500   0.00706
+
+ +
+ +
+
+

Step 2. Decide how to generalize the code

+
+
    +
  • What names will change with each dataset?
  • +
  • What will stay the same?
  • +
+ +
gmp %>%
+  drop_na(Prevalence) %>%
+  group_by(Group) %>%
+  summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n()))
+
+ +
+ +
+
+

Step 3. Put into function format

+
+
 prev_by_par_type <- function(dataset){
+  dataset %>%
+    drop_na(Prevalence) %>%
+    group_by(Group) %>%
+    summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n()))
+ }
+
+ +
+ +
+
+

Step 4. Try it out

+
+
 prev_by_par_type <- function(dataset) {
+  dataset %>%
+    drop_na(Prevalence) %>%
+    group_by(Group) %>%
+    summarise(MeanPrev = mean(Prevalence), SdErrPrev = sd(Prevalence)/sqrt(n()))
+ }
+
+prev_by_par_type(gmp)
+
+ +
# A tibble: 3 x 3
+  Group      MeanPrev SdErrPrev
+  <chr>         <dbl>     <dbl>
+1 carnivores    0.388   0.0141 
+2 primates      0.328   0.00534
+3 ungulates     0.500   0.00706
+
+ +
+ +
+
+

Tidyverse Challenge

+
+

Modify this function so that the mean prevalence is calculated for each host group and parasite type.

+ +
prev_by_par_type <- function(dataset) {
+  dataset %>%
+   # calculate mean prevalence for host group and parasite type
+ }
+
+ +
+ +
+
+

Tidyverse Challenge: Solution

+
+

Modify this function so that the mean prevalence is calculated for each parasite type.

+ +
 prev_by_par_type <- function(dataset) {
+  dataset %>%
+    drop_na(Prevalence) %>%
+    # add second grouping variable
+    group_by(
+      Group,
+      ParType
+    ) %>%
+    summarise(
+      MeanPrev = mean(Prevalence),
+      SdErrPrev = sd(Prevalence)/sqrt(n())
+    )
+ }
+
+ +
+ +
+
+

Important Caveat

+
+
    +
  • When you want to use tidyverse functions in your custom function, you cannot use a column name as a function argument.
  • +
  • If you try the following function and pass in prevalence to the outcome parameter, you will get an error!
  • +
+ +
 prev_by_par_type <- function(dataset, outcome) {
+  dataset %>%
+    drop_na(outcome) %>%
+    # add second grouping variable
+    group_by(
+      Group,
+      ParType
+    ) %>%
+    summarise(
+      MeanPrev = mean(outcome),
+      SdErrPrev = sd(outcome)/sqrt(n())
+    )
+ }
+
+ +
    +
  • Tidyverse uses “non-standard evaluation.” (As opposed to base R's “standard evaluation.”) This is possible to do, but it requires a discussion of complicated programming topics–you can read about this online if you are interested.
  • +
+ +
+ +
+
+

Returning to RR

+
+

Dataflow is the idea that when a variable changes, downstream computations affected by that variable should change as well.

+ +

So in this case, we've written a function that can take in different datasets or updated versions and adjust the output automatically*

+ +

*as long as the column names are consistent.

+ +
+ +
+
+

5. Using scripts in your workflow

+
+

We've touched on organization earlier. Let's focus on the scripts folder.

+ +

flow

+ +
+ +
+
+

Keeping a clean workflow

+
+

If you are writing functions that:

+ +
    +
  • are long
  • +
  • used for different parts of your research
  • +
  • won't be changing often.
  • +
+ +

Then, a script might make for clean workflow.

+ +

flow

+ +
+ +
+
+

What is a script?

+
+
    +
  • stable code often consisting of functions
  • +
  • is saved as .R file type
  • +
  • is loaded into the R environment using the source() command
  • +
  • simplifies your .Rmd files
  • +
+ +
+ +
+
+

Make a script

+
+
    +
  1. Create a .R file
  2. +
  3. Make some comments at the start of the file, write your functions
  4. +
  5. Save file in scripts directory with an informative name
  6. +
+ +
+ +
+
+

Make a script

+
+
    +
  1. Create a .R file
  2. +
+ + +
+ +
+ + +

+ +
+ +
+
+

Make a script

+
+
    +
  1. Create a .R file
  2. +
  3. Make some comments at the start of the file
  4. +
+ +
# Written on May 11, 2018 by Reni Kaul
+# This script contains functions for the R workshop; REU popbio program. 
+# Originally written to be part of the W2_Functions.Rmd exploration
+
+prev_by_par_type <- function(dataset){
+  dataset %>%
+    drop_na(Prevalence) %>%
+    group_by(Group) %>%
+
+ +

Script recommendations:

+ +
    +
  • Never start a script with rm(list = ls())
  • +
  • Never start a script with setwd(my_folder_that_no_one_else_has)
  • +
  • Don't install packages in a script. Use library() or another way of declaring packages, and the users will know what they need to install.
  • +
+ +
+ +
+
+

Make a script

+
+
    +
  1. Create a .R file
  2. +
  3. Make some comments at the start of the file
  4. +
  5. Save file in scripts directory with an informative name
  6. +
+ +
    +
  • What is good name for this script?
  • +
  • Create a script folder inside the GMPD project and save your script
  • +
+ +
+ +
+
+

Use a script

+
+

only for this demo Session > Restart R

+ +

Source the script

+ +
source("scripts/YOURFILE.R")
+
+ +
    +
  • What's in the Environment tab?
  • +
  • Note: you should treat everything in the environment tab as ephemeral. The only thing that actually exists is your scripts and markdown files. If running your code doesn't re-create an object, that object doesn't actually exist.
  • +
+ +
+ +
+
+

Other RR recommendations

+
+
    +
  • We have barely scratched the surface of reproducible research!
  • +
  • Especially if you are new to programming, this is a GREAT place to start, and if you follow these tips, your code will be well above average.
  • +
  • If you are an experienced programmer, you may be interested in looking into Git/GitHub, renv, targets, and inline R coding for Markdown files. Using these packages, you can automate and future-proof an entire project so that it “just works” when someone else downloads it.
  • +
  • We covered a lot today and you should be proud of yourself! Please contact me with any questions!!!
  • +
+ +
+ +
+
+

6. Wrap Up

+
+

We can…

+ +
    +
  • code using best practices
  • +
  • create an HTML doc with code and commentary
  • +
  • write a function
  • +
  • create and use scripts
  • +
  • calculate summary statistics of a dataset
  • +
  • create a figure from data
  • +
+ + +
+ +
+ + +

W2

+ +

Reminder: complete project worksheet

+ +
+ +
+
+

6. Wrap Up

+
+

Next

+ +
    +
  • Modeling + +
      +
    • simulating data
    • +
    • fitting models to data
    • +
  • +
+ + +
+ +
+ + +

W3

+ +
+ +
+ + +
+
+ + + + + + + + + + diff --git a/W2_RepRe/W2_Slides/W2_Presentation2022.md b/W2_RepRe/W2_Slides/W2_Presentation2022.md index 8e5423b..019a708 100644 --- a/W2_RepRe/W2_Slides/W2_Presentation2022.md +++ b/W2_RepRe/W2_Slides/W2_Presentation2022.md @@ -6,6 +6,12 @@ autosize: true font-import: https://fonts.googleapis.com/css?family=PT+Sans font-family: 'PT Sans', sans-serif; + + ***