From 0da07733213b07554158e6aa41499e12c6fd6d2a Mon Sep 17 00:00:00 2001
From: Elizabeth Humphries
Date: Fri, 27 Sep 2024 13:22:22 -0400
Subject: [PATCH 1/8] Updating confusing language in lab
---
modules/Statistics/lab/Statistics_Lab_Key.Rmd | 64 ++++++++++++++-----
1 file changed, 48 insertions(+), 16 deletions(-)
diff --git a/modules/Statistics/lab/Statistics_Lab_Key.Rmd b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
index e3a9488e..7ffc7f9b 100644
--- a/modules/Statistics/lab/Statistics_Lab_Key.Rmd
+++ b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
@@ -13,22 +13,26 @@ knitr::opts_chunk$set(echo = TRUE)
### 1.1
-Load the libraries needed in this lab. Then, read in the CalEnviroScreen data from `dasehr` package. Assign it to the "ces" variable. You can also find the data at https://daseh.org/data/CalEnviroScreen_data.csv
+Load the libraries needed in this lab. Then, read in the CalEnviroScreen data and assign it to the "ces" variable. You can find the data at https://daseh.org/data/CalEnviroScreen_data.csv
```{r message = FALSE}
-library(dplyr)
-library(dasehr)
+library(tidyverse)
library(broom)
+library(readr)
```
```{r 1.1response}
-ces <- calenviroscreen
+ces <- read_csv("https://daseh.org/data/CalEnviroScreen_data.csv")
```
### 1.2
-Compute the correlation (with `cor`) between the `PM2.5` and `Ozone` variables. (No need to save this in an object. Just display the result to the screen.) Use the `pull()` function to first extract these columns. To use a column name in `pull()` that starts with a number, surround it with backticks. Then, use the `cor` function.
+Compute the correlation (with `cor`) between the `PM2.5` and `Ozone` variables. (No need to save this in an object. Just display the result to the screen.) Use the `pull()` function to first extract these columns. Then, use the `cor` function.
+
+`PM2.5`: Annual mean concentration of fine particulate matter (particulates less than 2.5 microns in diameter). Higher numbers indicate poorer air quality
+
+`Ozone`: Average daily ozone concentration at ground level. Higher numbers indicate poorer air quality
```{r 1.2response}
x <- pull(ces, PM2.5)
@@ -39,12 +43,18 @@ cor(x, y)
### 1.3
-Compute the correlation (with `cor`) between the `DieselPM`, `Lead`, `Traffic`, and `Asthma` variables. (No need to save this in an object. Just display the result to the screen.) Use `select()` function to first subset the data frame to keep the four columns only. To use a column name in `select()` that starts with a number, surround it with backticks. Does this change when we use the `use = "complete.obs"` argument?
+Compute the correlation (with `cor`) between the `DieselPM`, `Traffic`, and `Asthma` variables. (No need to save this in an object. Just display the result to the screen.) Use `select()` function to first subset the data frame to keep the four columns only. To use a column name in `select()` that starts with a number, surround it with backticks. Does this change when we use the `use = "complete.obs"` argument?
+
+`DieselPM`: Diesel PM emissions from on-road and non-road sources
+
+`Traffic`: Measure of traffic density within 150 meters of the census tract boundary
+
+`Asthma`: Age-adjusted rate of emergency department visits for asthma
```{r 1.3response}
ces_sub <-
ces %>%
- select(DieselPM, Lead, Traffic, Asthma)
+ select(DieselPM, Traffic, Asthma)
cor(ces_sub)
cor(ces_sub, use = "complete.obs")
@@ -54,6 +64,10 @@ cor(ces_sub, use = "complete.obs")
Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) and poverty burden (`Poverty`). Use the `pull()` function to extract these columns. Print the results using the `tidy` function from the `broom` package.
+`Lead`: Estimated risk for lead exposure in children living in low-income communities with older housing
+
+`Poverty`: Percent of population living below two times the federal poverty level
+
```{r 1.4response}
x <- pull(ces, Lead)
y <- pull(ces, Poverty)
@@ -67,7 +81,9 @@ tidy(t.test(x, y))
### P.1
-Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) and housing insecurity (`HousingBurden`). Use the `pull()` function to extract these columns. Print the results using the `tidy` function. How do these results compare to those in question 1.4?
+Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) and housing burden (`HousingBurden`). Use the `pull()` function to extract these columns. Print the results using the `tidy` function. How do these results compare to those in question 1.4?
+
+`HousingBurden`: Percentage of housing-burdened low-income households. Households are considered cost-burdened when they spend more than 30% of their income on rent, mortgage payments, and other housing costs
```{r P.1response}
x <- pull(ces, Lead)
@@ -82,7 +98,11 @@ tidy(t.test(x, y))
### 2.1
-Fit a linear regression model with low birthweight percentile ("LowBirthWeightPctl") as the outcome and CES4.0 score ("CES4.0Score") as the predictor. Save the model fit in an object called "lmfit_bw" and display the summary table with `summary()`.
+Fit a linear regression model with `LowBirthWeightPctl` as the outcome and `CES4.0Score` as the predictor. Save the model fit in an object called "lmfit_bw" and display the summary table with `summary()`.
+
+`LowBirthWeight`: Percentage of newborns that are considered to have a low birthweight
+
+`CES4.0Score`: Score that estimates the environmental health burden of living in a particular census tract. A higher score indicates a greater amount of poor environmental measures for a given area. These measures include things like pollution, exposure to lead, and chance of contaminated groundwater.
```
# General format
@@ -90,16 +110,18 @@ glm(y ~ x, data = DATASET_NAME)
```
```{r 2.1response}
-lmfit_bw <- glm(LowBirthWeightPctl ~ CES4.0Score, data = ces)
+lmfit_bw <- glm(LowBirthWeight ~ CES4.0Score, data = ces)
summary(lmfit_bw)
```
### 2.2
-Fit a linear regression model with low birthweight percentile ("LowBirthWeightPctl") as the outcome and CES4.0 score ("CES4.0Score") and poverty score ("Poverty") as the predictors. Save the model fit in an object called "lmfit_bw2" and display the summary table.
+Fit a linear regression model with `LowBirthWeightPctl` as the outcome and `CES4.0Score` and `Poverty` as the predictors. Save the model fit in an object called "lmfit_bw2" and display the summary table.
+
+`Poverty`: Percent of population living below two times the federal poverty level
```{r 2.2response}
-lmfit_bw2 <- glm(LowBirthWeightPctl ~ CES4.0Score + Poverty, data = ces)
+lmfit_bw2 <- glm(LowBirthWeight ~ CES4.0Score + Poverty, data = ces)
summary(lmfit_bw2)
```
@@ -108,19 +130,29 @@ summary(lmfit_bw2)
### P.2
-Fit a linear regression model with low birthweight percentile ("LowBirthWeightPctl") as the outcome, CES4.0 score ("CES4.0Score") and poverty score ("Poverty") as the predictors, and interaction between "CES4.0Score" and "Poverty".
+Fit a linear regression model with `LowBirthWeight` as the outcome, `CES4.0Score` and `Poverty` as the predictors, and interaction between `CES4.0Score` and `Poverty`.
- To include the interaction, use `CES4.0Score * Poverty` in the formula.
- Save the model fit in an object called "lmfit_bw3" and display the summary table with `summary()`.
```{r P.2response}
-lmfit_bw3 <- glm(LowBirthWeightPctl ~ CES4.0Score + Poverty + CES4.0Score * Poverty, data = ces)
+lmfit_bw3 <- glm(LowBirthWeight ~ CES4.0Score + Poverty + CES4.0Score * Poverty, data = ces)
summary(lmfit_bw3)
```
### P.3
-Fit a logistic regression model where the outcome is whether the CES percentile is above the 50th percentile and predictors are the poverty measure ("Poverty") and percentage of white residents ("WhitePerc"), as well as the interaction between "Poverty" and "WhitePerc". Information about the CES4.0 percentile rank is stored in the "CES4.0Percentile" variable. You will need to first create a variable "CESPctlMoreThan50" using the `mutate` and `case_when` commands.
+Fit a logistic regression model where the outcome is whether the CES percentile is above the 50th percentile and predictors are `Poverty` and `Education`, as well as the interaction between `Poverty` and `Education`. You will need to first create a variable "CESPctlMoreThan50" using the `mutate` and `case_when` commands.
+
+Information about the CES4.0 percentile rank is stored in the `CES4.0Percentile` variable.
+
+`CES4.0Percentile`: How the CES4.0Score for a given census tract ranks compared to all the census tracts in California. A higher score means residents particular census tract experience a greater burden of things like pollution compared to other California residents.
+
+`CESPctlMoreThan50`: In this question, you dividing all the census tracts into two categories: those with greater burden of pollution, and those with a smaller burden of pollution
+
+`Poverty`: Percent of population living below two times the federal poverty level
+
+`Education`: Percent of population over 25 with less than a high school education
- Save the model fit in an object called "logfit_ces" and display the summary table with `summary()`.
@@ -135,6 +167,6 @@ ces <- ces %>%
mutate(CESPctlMoreThan50 =
case_when(CES4.0Percentile > 50 ~ 1, CES4.0Percentile < 50 ~ 0))
-logfit_ces <- glm(CESPctlMoreThan50 ~ Poverty + WhitePerc + Poverty * WhitePerc, data = ces, family = binomial(link = "logit"))
+logfit_ces <- glm(CESPctlMoreThan50 ~ Poverty + Education + Poverty * Education, data = ces, family = binomial(link = "logit"))
summary(logfit_ces)
```
From 2275ac28243c71a3ad9609d7ab5f2d5442bdb200 Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 11:01:51 -0400
Subject: [PATCH 2/8] A few mods for t.test comparison
---
modules/Statistics/lab/Statistics_Lab_Key.Rmd | 47 +++++++++++++++----
1 file changed, 38 insertions(+), 9 deletions(-)
diff --git a/modules/Statistics/lab/Statistics_Lab_Key.Rmd b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
index 7ffc7f9b..1f2805b6 100644
--- a/modules/Statistics/lab/Statistics_Lab_Key.Rmd
+++ b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
@@ -19,7 +19,6 @@ Load the libraries needed in this lab. Then, read in the CalEnviroScreen data an
```{r message = FALSE}
library(tidyverse)
library(broom)
-library(readr)
```
```{r 1.1response}
@@ -62,18 +61,31 @@ cor(ces_sub, use = "complete.obs")
### 1.4
-Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) and poverty burden (`Poverty`). Use the `pull()` function to extract these columns. Print the results using the `tidy` function from the `broom` package.
+Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) in Los Angeles census tracts compared to San Diego:
-`Lead`: Estimated risk for lead exposure in children living in low-income communities with older housing
+* Create a subset of the data for CaliforniaCounty == "Los Angeles"
+* Create a subset of the data for CaliforniaCounty == "San Diego"
+* `pull` the `Lead` column for both subsets
+* Use `t.test` to compare the two pulled vectors
+* Print the results using the `tidy` function from the `broom` package
-`Poverty`: Percent of population living below two times the federal poverty level
+`Lead`: Estimated risk for lead exposure in children living in low-income communities with older housing
```{r 1.4response}
-x <- pull(ces, Lead)
-y <- pull(ces, Poverty)
+losangeles <- ces %>% filter(CaliforniaCounty == "Los Angeles")
+sandiego <- ces %>% filter(CaliforniaCounty == "San Diego")
+
+x <- pull(losangeles, Lead)
+y <- pull(sandiego, Lead)
t.test(x, y)
tidy(t.test(x, y))
+
+# Another way to look at it..
+ces %>%
+ group_by(CaliforniaCounty) %>%
+ summarize(mean = mean(Lead, na.rm = TRUE)) %>%
+ filter(CaliforniaCounty %in% c("Los Angeles", "San Diego"))
```
@@ -81,18 +93,35 @@ tidy(t.test(x, y))
### P.1
-Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) and housing burden (`HousingBurden`). Use the `pull()` function to extract these columns. Print the results using the `tidy` function. How do these results compare to those in question 1.4?
+Perform a t-test similar to 1.4, but this time examine differences in `HousingBurden`.
`HousingBurden`: Percentage of housing-burdened low-income households. Households are considered cost-burdened when they spend more than 30% of their income on rent, mortgage payments, and other housing costs
```{r P.1response}
-x <- pull(ces, Lead)
-y <- pull(ces, HousingBurden)
+x <- pull(losangeles, HousingBurden)
+y <- pull(sandiego, HousingBurden)
t.test(x, y)
tidy(t.test(x, y))
```
+### P.2
+
+Filter `ces` so it only contains Los Angeles and San Diego. Launch Esquisse or create a ggplot which plots:
+
+* `Lead` exposure on the x axis
+* `HousingBurden` on the y axis
+* Colors points (`geom_point()`) by `CaliforniaCounty`
+
+```{r P.2response}
+ces_sub <-
+ ces %>%
+ filter(CaliforniaCounty %in% c("Los Angeles", "San Diego"))
+
+ggplot(ces_sub, aes(x = Lead, y = HousingBurden, color = CaliforniaCounty)) +
+ geom_point()
+```
+
# Part 2
From b15d54f8b42e8017097fe7a5b58a77e55b5ce56b Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 11:36:51 -0400
Subject: [PATCH 3/8] Revisions to lab
---
modules/Statistics/lab/Statistics_Lab_Key.Rmd | 104 +++++++++---------
1 file changed, 53 insertions(+), 51 deletions(-)
diff --git a/modules/Statistics/lab/Statistics_Lab_Key.Rmd b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
index 1f2805b6..a5efd727 100644
--- a/modules/Statistics/lab/Statistics_Lab_Key.Rmd
+++ b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
@@ -13,7 +13,7 @@ knitr::opts_chunk$set(echo = TRUE)
### 1.1
-Load the libraries needed in this lab. Then, read in the CalEnviroScreen data and assign it to the "ces" variable. You can find the data at https://daseh.org/data/CalEnviroScreen_data.csv
+Load the packages needed in this lab. Then, read in the CalEnviroScreen data and assign it to the "ces" variable. You can find the data at https://daseh.org/data/CalEnviroScreen_data.csv
```{r message = FALSE}
@@ -27,22 +27,27 @@ ces <- read_csv("https://daseh.org/data/CalEnviroScreen_data.csv")
### 1.2
-Compute the correlation (with `cor`) between the `PM2.5` and `Ozone` variables. (No need to save this in an object. Just display the result to the screen.) Use the `pull()` function to first extract these columns. Then, use the `cor` function.
+Compute the correlation (with `cor`) between the `HousingBurden` and `LowBirthWeight` variables.
-`PM2.5`: Annual mean concentration of fine particulate matter (particulates less than 2.5 microns in diameter). Higher numbers indicate poorer air quality
+* Use `select()` to choose these columns and save as an object.
+* Use the `cor` function on this object.
+* Add the use = "complete.obs" argument.
-`Ozone`: Average daily ozone concentration at ground level. Higher numbers indicate poorer air quality
+`HousingBurden`: Percentage of housing-burdened low-income households. Households are considered cost-burdened when they spend more than 30% of their income on rent, mortgage payments, and other housing costs
+
+`LowBirthWeight`: Percentage of births that are low birth weight.
```{r 1.2response}
-x <- pull(ces, PM2.5)
-y <- pull(ces, Ozone)
+ces_sub <-
+ ces %>%
+ select(HousingBurden, LowBirthWeight)
-cor(x, y)
+cor(ces_sub, use = "complete.obs")
```
### 1.3
-Compute the correlation (with `cor`) between the `DieselPM`, `Traffic`, and `Asthma` variables. (No need to save this in an object. Just display the result to the screen.) Use `select()` function to first subset the data frame to keep the four columns only. To use a column name in `select()` that starts with a number, surround it with backticks. Does this change when we use the `use = "complete.obs"` argument?
+Change your code from 1.2 to add a few more variables:
`DieselPM`: Diesel PM emissions from on-road and non-road sources
@@ -53,30 +58,27 @@ Compute the correlation (with `cor`) between the `DieselPM`, `Traffic`, and `Ast
```{r 1.3response}
ces_sub <-
ces %>%
- select(DieselPM, Traffic, Asthma)
+ select(HousingBurden, LowBirthWeight, DieselPM, Traffic, Asthma)
-cor(ces_sub)
cor(ces_sub, use = "complete.obs")
```
### 1.4
-Perform a t-test to determine if there is evidence of a difference between lead exposure burden (`Lead`) in Los Angeles census tracts compared to San Diego:
+Perform a t-test to determine if there is evidence of a difference between low birth weight percentage (`LowBirthWeight`) in Los Angeles census tracts compared to San Diego:
* Create a subset of the data for CaliforniaCounty == "Los Angeles"
* Create a subset of the data for CaliforniaCounty == "San Diego"
-* `pull` the `Lead` column for both subsets
+* `pull` the `LowBirthWeight` column for both subsets
* Use `t.test` to compare the two pulled vectors
* Print the results using the `tidy` function from the `broom` package
-`Lead`: Estimated risk for lead exposure in children living in low-income communities with older housing
-
```{r 1.4response}
losangeles <- ces %>% filter(CaliforniaCounty == "Los Angeles")
sandiego <- ces %>% filter(CaliforniaCounty == "San Diego")
-x <- pull(losangeles, Lead)
-y <- pull(sandiego, Lead)
+x <- pull(losangeles, LowBirthWeight)
+y <- pull(sandiego, LowBirthWeight)
t.test(x, y)
tidy(t.test(x, y))
@@ -84,7 +86,7 @@ tidy(t.test(x, y))
# Another way to look at it..
ces %>%
group_by(CaliforniaCounty) %>%
- summarize(mean = mean(Lead, na.rm = TRUE)) %>%
+ summarize(mean = mean(LowBirthWeight, na.rm = TRUE)) %>%
filter(CaliforniaCounty %in% c("Los Angeles", "San Diego"))
```
@@ -95,8 +97,6 @@ ces %>%
Perform a t-test similar to 1.4, but this time examine differences in `HousingBurden`.
-`HousingBurden`: Percentage of housing-burdened low-income households. Households are considered cost-burdened when they spend more than 30% of their income on rent, mortgage payments, and other housing costs
-
```{r P.1response}
x <- pull(losangeles, HousingBurden)
y <- pull(sandiego, HousingBurden)
@@ -127,11 +127,11 @@ ggplot(ces_sub, aes(x = Lead, y = HousingBurden, color = CaliforniaCounty)) +
### 2.1
-Fit a linear regression model with `LowBirthWeightPctl` as the outcome and `CES4.0Score` as the predictor. Save the model fit in an object called "lmfit_bw" and display the summary table with `summary()`.
+Fit a linear regression model with `LowBirthWeight` as the outcome and `HousingBurden` as the predictor. Save the model fit in an object called "lmfit_bw" and display the summary table with `summary()`.
-`LowBirthWeight`: Percentage of newborns that are considered to have a low birthweight
+`HousingBurden`: Percentage of housing-burdened low-income households. Households are considered cost-burdened when they spend more than 30% of their income on rent, mortgage payments, and other housing costs
-`CES4.0Score`: Score that estimates the environmental health burden of living in a particular census tract. A higher score indicates a greater amount of poor environmental measures for a given area. These measures include things like pollution, exposure to lead, and chance of contaminated groundwater.
+`LowBirthWeight`: Percentage of births that are low birth weight.
```
# General format
@@ -139,63 +139,65 @@ glm(y ~ x, data = DATASET_NAME)
```
```{r 2.1response}
-lmfit_bw <- glm(LowBirthWeight ~ CES4.0Score, data = ces)
+lmfit_bw <- glm(LowBirthWeight ~ HousingBurden, data = ces)
summary(lmfit_bw)
```
### 2.2
-Fit a linear regression model with `LowBirthWeightPctl` as the outcome and `CES4.0Score` and `Poverty` as the predictors. Save the model fit in an object called "lmfit_bw2" and display the summary table.
+Take your code from 2.1 and add `Traffic` as another predictor. Save the model fit in an object called "lmfit_bw2" and display the summary table.
-`Poverty`: Percent of population living below two times the federal poverty level
+`Traffic`: Measure of traffic density within 150 meters of the census tract boundary
```{r 2.2response}
-lmfit_bw2 <- glm(LowBirthWeight ~ CES4.0Score + Poverty, data = ces)
+lmfit_bw2 <- glm(LowBirthWeight ~ HousingBurden + Traffic, data = ces)
summary(lmfit_bw2)
```
# Practice on Your Own!
-### P.2
+### P.3
-Fit a linear regression model with `LowBirthWeight` as the outcome, `CES4.0Score` and `Poverty` as the predictors, and interaction between `CES4.0Score` and `Poverty`.
+Take your code from 2.2 and add an interaction term. Save the model fit in an object called "lmfit_bw3" and display the summary table.
-- To include the interaction, use `CES4.0Score * Poverty` in the formula.
+- To include the interaction, use `HousingBurden * Traffic` in the formula.
- Save the model fit in an object called "lmfit_bw3" and display the summary table with `summary()`.
-```{r P.2response}
-lmfit_bw3 <- glm(LowBirthWeight ~ CES4.0Score + Poverty + CES4.0Score * Poverty, data = ces)
+```{r P.3response}
+lmfit_bw3 <- glm(LowBirthWeight ~ HousingBurden * Traffic, data = ces)
summary(lmfit_bw3)
```
-### P.3
+### P.4
+
+Let's make `LowBirthWeight` into a binary variable, where over 5% low birth weight is "TRUE".
-Fit a logistic regression model where the outcome is whether the CES percentile is above the 50th percentile and predictors are `Poverty` and `Education`, as well as the interaction between `Poverty` and `Education`. You will need to first create a variable "CESPctlMoreThan50" using the `mutate` and `case_when` commands.
+The following code creates a column `weight_cat` with TRUE/FALSE values.
-Information about the CES4.0 percentile rank is stored in the `CES4.0Percentile` variable.
+```{r}
+ces_bw <-
+ ces %>%
+ mutate(weight_cat = LowBirthWeight > 5)
+```
-`CES4.0Percentile`: How the CES4.0Score for a given census tract ranks compared to all the census tracts in California. A higher score means residents particular census tract experience a greater burden of things like pollution compared to other California residents.
+Fit a logistic regression model where:
-`CESPctlMoreThan50`: In this question, you dividing all the census tracts into two categories: those with greater burden of pollution, and those with a smaller burden of pollution
+* The outcome is `weight_cat`.
+* `HousingBurden`, `Poverty`, and `Education` are predictors.
+* Use `glm` and family = binomial(link = "logit").
+* Save the model fit in an object called "logfit_bw" and display the summary table with `summary()`.
`Poverty`: Percent of population living below two times the federal poverty level
`Education`: Percent of population over 25 with less than a high school education
-- Save the model fit in an object called "logfit_ces" and display the summary table with `summary()`.
-
-```
-# General format
-df <- df %>% mutate(binary_y = case_when(y > 50 ~ 1, y < 50 ~ 0))
-glm(y ~ x, data = DATASET_NAME, family = binomial(link = "logit"))
-```
-
-```{r P.3response}
-ces <- ces %>%
- mutate(CESPctlMoreThan50 =
- case_when(CES4.0Percentile > 50 ~ 1, CES4.0Percentile < 50 ~ 0))
-
-logfit_ces <- glm(CESPctlMoreThan50 ~ Poverty + Education + Poverty * Education, data = ces, family = binomial(link = "logit"))
-summary(logfit_ces)
+```{r P.4response}
+logfit_bw <-
+ glm(
+ weight_cat ~ HousingBurden + Poverty + Education,
+ data = ces_bw,
+ family = binomial(link = "logit")
+ )
+summary(logfit_bw)
```
From 58767f3a194afcd7e5b97aa26147a1dfb3b7801a Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 11:38:03 -0400
Subject: [PATCH 4/8] Update Statistics_Lab_Key.Rmd
---
modules/Statistics/lab/Statistics_Lab_Key.Rmd | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/modules/Statistics/lab/Statistics_Lab_Key.Rmd b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
index a5efd727..a913a429 100644
--- a/modules/Statistics/lab/Statistics_Lab_Key.Rmd
+++ b/modules/Statistics/lab/Statistics_Lab_Key.Rmd
@@ -49,11 +49,9 @@ cor(ces_sub, use = "complete.obs")
Change your code from 1.2 to add a few more variables:
-`DieselPM`: Diesel PM emissions from on-road and non-road sources
-
-`Traffic`: Measure of traffic density within 150 meters of the census tract boundary
-
-`Asthma`: Age-adjusted rate of emergency department visits for asthma
+* `DieselPM`: Diesel PM emissions from on-road and non-road sources.
+* `Traffic`: Measure of traffic density within 150 meters of the census tract boundary.
+* `Asthma`: Age-adjusted rate of emergency department visits for asthma.
```{r 1.3response}
ces_sub <-
From 0a0d7d8b9e39dbc6c7c0bbd13ade6b52cbe3c937 Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 11:40:14 -0400
Subject: [PATCH 5/8] Partially resolve #179
---
modules/Statistics/Statistics.Rmd | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/modules/Statistics/Statistics.Rmd b/modules/Statistics/Statistics.Rmd
index 174dd8e4..2ba4bec4 100644
--- a/modules/Statistics/Statistics.Rmd
+++ b/modules/Statistics/Statistics.Rmd
@@ -719,7 +719,9 @@ Content for similar topics as this course can also be found on Leanpub.
💻 [Lab](https://daseh.org/modules/Statistics/lab/Statistics_Lab.Rmd)
-```{r, fig.alt="The End", out.width = "50%", echo = FALSE, fig.align='center'}
+📃 [Day 8 Cheatsheet](https://daseh.org/modules/cheatsheets/Day-8.pdf)
+
+```{r, fig.alt="The End", out.width = "30%", echo = FALSE, fig.align='center'}
knitr::include_graphics(here::here("images/the-end-g23b994289_1280.jpg"))
```
From 1ce7c992e70fabb038d3302e15648444340d5f21 Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 12:03:47 -0400
Subject: [PATCH 6/8] Tweaks and resolve rendering issue
---
modules/Statistics/Statistics.Rmd | 61 +++++++++++++------------------
1 file changed, 26 insertions(+), 35 deletions(-)
diff --git a/modules/Statistics/Statistics.Rmd b/modules/Statistics/Statistics.Rmd
index 2ba4bec4..867c1a0f 100644
--- a/modules/Statistics/Statistics.Rmd
+++ b/modules/Statistics/Statistics.Rmd
@@ -90,9 +90,11 @@ Function `cor()` computes correlation in R.
cor(x, y = NULL, use = c("everything", "complete.obs"),
method = c("pearson", "kendall", "spearman"))
```
-- provide two numeric vectors of the same length (arguments `x`, `y`), or
-- provide a data.frame / tibble with numeric columns only
-- by default, Pearson correlation coefficient is computed
+
+
+- provide two numeric vectors of the same length (arguments `x`, `y`), or
+- provide a data.frame / tibble with numeric columns only
+- by default, Pearson correlation coefficient is computed
## Correlation test
@@ -111,27 +113,28 @@ cor.test(x, y = NULL, alternative(c("two.sided", "less", "greater")),
- less means true correlation coefficient is < 0 (negative relationship)
-## Correlation {.small}
+## Correlation {.codesmall}
Let's look at the dataset of yearly CO2 emissions by country.
```{r cor1, comment="", message = FALSE}
-yearly_co2 <- read_csv(file = "https://daseh.org/data/Yearly_CO2_Emissions_1000_tonnes.csv")
+yearly_co2 <-
+ read_csv(file = "https://daseh.org/data/Yearly_CO2_Emissions_1000_tonnes.csv")
```
## Correlation for two vectors
-First, we compute correlation by providing two vectors.
+First, we create two vectors.
```{r}
# x and y must be numeric vectors
-y1980 <- yearly_co2_emissions %>% pull(`1980`)
-y1985 <- yearly_co2_emissions %>% pull(`1985`)
+y1980 <- yearly_co2 %>% pull(`1980`)
+y1985 <- yearly_co2 %>% pull(`1985`)
```
-Like other functions, if there are `NA`s, you get `NA` as the result. But if you specify use only the complete observations, then it will give you correlation using the non-missing data.
+Like other functions, if there are `NA`s, you get `NA` as the result. But if you specify `use = "complete.obs"`, then it will give you correlation using the non-missing data.
```{r}
cor(y1980, y1985, use = "complete.obs")
@@ -156,32 +159,16 @@ glimpse(cor_result)
## Correlation for two vectors with plot{.codesmall}
-In plot form... `geom_smooth()` and `annotate()` can help.
+In plot form... `geom_smooth()` and `annotate()` can look very nice!
```{r, warning = F}
corr_value <- pull(cor_result, estimate) %>% round(digits = 4)
cor_label <- paste0("R = ", corr_value)
-yearly_co2_emissions %>%
+yearly_co2 %>%
ggplot(aes(x = `1980`, y = `1985`)) + geom_point(size = 1) + geom_smooth() +
annotate("text", x = 2000000, y = 4000000, label = cor_label)
```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
## Correlation for data frame columns
We can compute correlation for all pairs of columns of a data frame / matrix. This is often called, *"computing a correlation matrix"*.
@@ -189,13 +176,14 @@ We can compute correlation for all pairs of columns of a data frame / matrix. Th
Columns must be all numeric!
```{r}
-co2_subset <- yearly_co2_emissions %>%
+co2_subset <- yearly_co2 %>%
select(c(`1950`, `1980`, `1985`, `2010`))
head(co2_subset)
```
## Correlation for data frame columns
+
We can compute correlation for all pairs of columns of a data frame / matrix. This is often called, *"computing a correlation matrix"*.
```{r}
@@ -226,12 +214,13 @@ knitr::include_graphics(here::here("images/lyme_and_fried_chicken.png"))
## T-test
-The commonly used are:
+The commonly used t-tests are:
-- **one-sample t-test** -- used to test mean of a variable in one group
-- **two-sample t-test** -- used to test difference in means of a variable between two groups (if the "two groups" are data of the *same* individuals collected at 2 time points, we say it is two-sample paired t-test)
+- **one-sample t-test** -- used to test mean of a variable in one group
+- **two-sample t-test** -- used to test difference in means of a variable between two groups
+ - if the "two groups" are data of the *same* individuals collected at 2 time points, we say it is two-sample paired t-test)
-The `t.test()` function in R is one to address the above.
+The `t.test()` function does both.
```
t.test(x, y = NULL,
@@ -302,7 +291,7 @@ See [here](https://www.nature.com/articles/nbt1209-1135) for more about multiple
## Some other statistical tests
- `wilcox.test()` -- Wilcoxon signed rank test, Wilcoxon rank sum test
-- `shapiro.test()` -- Shapiro test
+- `shapiro.test()` -- Test normality assumptions
- `ks.test()` -- Kolmogorov-Smirnov test
- `var.test()`-- Fisher’s F-Test
- `chisq.test()` -- Chi-squared test
@@ -548,8 +537,10 @@ Maybe we want to use the age group "65+ years" as our reference. We can relevel
Relative to the level is not listed.
```{r}
-er_temps <- er_temps %>% mutate(age = factor(age,
- levels = c("65+ years old", "35-64 years old", "15-34 years old", "5-14 years old", "0-4 years old")
+er_temps <-
+ er_temps %>%
+ mutate(age = factor(age,
+ levels = c("65+ years", "35-64 years", "15-34 years", "5-14 years", "0-4 years")
))
fit4 <- glm(visits ~ highest_temp + year + age, data = er_temps)
From 7c579f4a0eba1ed39fb3cf0d47911e6fd195a5a0 Mon Sep 17 00:00:00 2001
From: avahoffman
Date: Wed, 9 Oct 2024 12:42:09 -0400
Subject: [PATCH 7/8] A few more tweaks / gut check
---
modules/Statistics/Statistics.Rmd | 72 +++++++++++++---------
modules/Statistics/images/interaction.png | Bin 0 -> 77095 bytes
2 files changed, 44 insertions(+), 28 deletions(-)
create mode 100644 modules/Statistics/images/interaction.png
diff --git a/modules/Statistics/Statistics.Rmd b/modules/Statistics/Statistics.Rmd
index 867c1a0f..5645c4ed 100644
--- a/modules/Statistics/Statistics.Rmd
+++ b/modules/Statistics/Statistics.Rmd
@@ -112,6 +112,15 @@ cor.test(x, y = NULL, alternative(c("two.sided", "less", "greater")),
- greater means true correlation coefficient is > 0 (positive relationship)
- less means true correlation coefficient is < 0 (negative relationship)
+## GUT CHECK!
+
+What class of data do you need to calculate a correlation?
+
+A. Character data
+
+B. Factor data
+
+C. Numeric data
## Correlation {.codesmall}
@@ -140,7 +149,6 @@ Like other functions, if there are `NA`s, you get `NA` as the result. But if yo
cor(y1980, y1985, use = "complete.obs")
```
-
## Correlation coefficient calculation and test
```{r}
@@ -440,13 +448,17 @@ For example, if we want to fit a regression model where outcome is `income` and
`income ~ years_of_education + age + location`
-## Linear regression
+## Linear regression example
Let's look variables that might be able to predict the number of heat-related ER visits in Colorado.
We'll use the dataset that has ER visits separated out by age category.
-We'll combine this with a new dataset that has some weather information about summer temperatures in Denver, downloaded from [https://www.weather.gov/bou/DenverSummerHeat](https://www.weather.gov/bou/DenverSummerHeat). We will use this as a proxy for temperatures for the state of CO as a whole for this example.
+We'll combine this with a new dataset that has some weather information about summer temperatures in Denver, downloaded from [https://www.weather.gov/bou/DenverSummerHeat](https://www.weather.gov/bou/DenverSummerHeat).
+
+We will use this as a proxy for temperatures for the state of CO as a whole for this example.
+
+## Linear regression example{.codesmall}
```{r}
er <- read_csv(file = "https://daseh.org/data/CO_ER_heat_visits_by_age.csv")
@@ -519,7 +531,6 @@ er_temps <- er_temps %>% mutate(age = factor(age))
```
-
## Linear regression: factors {.smaller}
The comparison group that is not listed is treated as intercept. All other estimates are relative to the intercept.
@@ -534,7 +545,7 @@ summary(fit3)
Maybe we want to use the age group "65+ years" as our reference. We can relevel the factor.
-Relative to the level is not listed.
+The ages are relative to the level that is not listed.
```{r}
er_temps <-
@@ -553,13 +564,21 @@ You can view estimates for the comparison group by removing the intercept in the
`y ~ x - 1`
-*Caveat* is that the p-values change.
+*Caveat* is that the p-values change, and interpretation is often confusing.
```{r regress9, comment="", fig.height=4, fig.width=8}
fit5 <- glm(visits ~ highest_temp + year + age - 1, data = er_temps)
summary(fit5)
```
+## Linear regression: interactions
+
+```{r, fig.alt="Statistical interaction showing the relationship between cookie yield, temperature, and cooking duration.", out.width = "70%", echo = FALSE, fig.align='center'}
+knitr::include_graphics("images/interaction.png")
+```
+
+[source](https://en.wikipedia.org/wiki/Interaction_(statistics)#/media/File:Interaction_plot_cookie_baking.svg)
+
## Linear regression: interactions {.smaller}
You can also specify interactions between variables in a formula `y ~ x1 + x2 + x1 * x2`. This allows for not only the intercepts between factors to differ, but also the slopes with regard to the interacting variable.
@@ -605,19 +624,15 @@ We will create a new binary variable `high_rate`. We will say a visit rate of mo
```{r}
er_temps <-
- er_temps %>%
- mutate(
- high_rate = case_when(
- rate > 8 ~ 1,
- TRUE ~ 0))
+ er_temps %>% mutate(high_rate = rate > 8)
+
+glimpse(er_temps)
```
## Logistic regression {.smaller}
-Now that we've created the `high_rate` variable (where a 1 indicates that there was a visit rate greater than 8), we can run a logistic regression.
-
-Let's explore how `highest_temp`, `year`, and `age` might predict `high rate`.
+Let's explore how `highest_temp`, `year`, and `age` might predict `high_rate`.
```
# General format
@@ -640,39 +655,40 @@ See this [case study](https://www.opencasestudies.org/ocs-bp-vaping-case-study/#
Check out [this paper](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2938757/).
+Use `oddsratio(x, y)` from the `epitools()` package to calculate odds ratios.
## Odds ratios {.smaller}
-Use `oddsratio(x, y)` from the `epitools()` package to calculate odds ratios.
-
During the years 2012, 2018, 2021, and 2022, there were multiple consecutive days with temperatures above 100 degrees. We will code this as `heatwave`.
-In this case, we're calculating the odds ratio for whether a heatwave is associated with having a visit rate greater than 8.
-
```{r}
library(epitools)
er_temps <-
er_temps %>%
- mutate(
- heatwave = case_when(
- year == 2012 ~ 1,
- year == 2018 ~ 1,
- year == 2021 ~ 1,
- year == 2022 ~ 1,
- TRUE ~ 0))
+ mutate(heatwave = year %in% c(2012, 2018, 2021, 2022))
+
+glimpse(er_temps)
+```
+
+## Odds ratios {.smaller}
+In this case, we're calculating the odds ratio for whether a heatwave is associated with having a visit rate greater than 8.
+
+```{r}
response <- er_temps %>% pull(high_rate)
predictor <- er_temps %>% pull(heatwave)
+
+oddsratio(predictor, response)
```
## Odds ratios {.smaller}
-Use `oddsratio(x, y)` from the `epitools()` package to calculate odds ratios.
+The Odds Ratio is 3.86.
-In this case, we're calculating the odds ratio for whether a heatwave is associated with having a visit rate greater than 8.
+When the predictor is TRUE (aka it was a heatwave year), the odds of the response (high hospital visitation) are 3.86 times greater than when it is FALSE (not a heatwave year).
-```{r}
+```{r echo = FALSE}
oddsratio(predictor, response)
```
diff --git a/modules/Statistics/images/interaction.png b/modules/Statistics/images/interaction.png
new file mode 100644
index 0000000000000000000000000000000000000000..de924b5178bbcbf7a3cdf00955c07e1982bd061b
GIT binary patch
literal 77095
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