diff --git a/heart_disease_case_study_20240312.html b/heart_disease_case_study_20240312.html new file mode 100644 index 0000000..b9266ed --- /dev/null +++ b/heart_disease_case_study_20240312.html @@ -0,0 +1,1203 @@ + + + + + + + + + + + + + + + +US Heart Disease Mortality Rates - 10 Year Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

Objective

+ +
+
+

Data Sources

+ +
+
+

R Markdown

+
+

Load Libraries

+
library(gridExtra)
+library(maps)
+library(geosphere)
+library(tidyverse)
+
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
+## ✔ dplyr     1.1.4     ✔ readr     2.1.5
+## ✔ forcats   1.0.0     ✔ stringr   1.5.1
+## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
+## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
+## ✔ purrr     1.0.2     
+## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
+## ✖ dplyr::combine() masks gridExtra::combine()
+## ✖ dplyr::filter()  masks stats::filter()
+## ✖ dplyr::lag()     masks stats::lag()
+## ✖ purrr::map()     masks maps::map()
+## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
+
library(dtplyr)
+library(readxl)
+library(tidyselect)
+library(janitor)
+
## 
+## Attaching package: 'janitor'
+## 
+## The following objects are masked from 'package:stats':
+## 
+##     chisq.test, fisher.test
+
library(skimr)
+library(tools)
+
+
+

Import, clean dataset

+
    +
  • Import table from NVSS, clean columns
  • +
+
df_raw <- read_csv("C:/Users/Clint/OneDrive/Documents/Data/cdc_heart_disease/nvss_hd_2010_2020_raw.csv")
+
## Rows: 91520 Columns: 16
+## ── Column specification ────────────────────────────────────────────────────────
+## Delimiter: ","
+## chr (12): RowId, LocationAbbr, Topic, Data_Value_Type, Data_Value_Unit, Brea...
+## dbl  (4): YearStart, Data_Value, Data_Value_Alt, LocationId
+## 
+## ℹ Use `spec()` to retrieve the full column specification for this data.
+## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+
clean_df <- clean_names(df_raw) #lower case all col, no spaces
+print(clean_df)
+
## # A tibble: 91,520 × 16
+##    row_id         year_start location_abbr topic data_value_type data_value_unit
+##    <chr>               <dbl> <chr>         <chr> <chr>           <chr>          
+##  1 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  2 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+##  3 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+##  4 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  5 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  6 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+##  7 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+##  8 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+##  9 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+## 10 NVSS~2010~1~N…       2010 AL            Majo… Crude           Rate per 100,0…
+## # ℹ 91,510 more rows
+## # ℹ 10 more variables: data_value <dbl>, data_value_alt <dbl>,
+## #   break_out_category <chr>, break_out <chr>, class_id <chr>, topic_id <chr>,
+## #   data_value_type_id <chr>, break_out_category_id <chr>, break_out_id <chr>,
+## #   location_id <dbl>
+
str(clean_df) #review col structure
+
## spc_tbl_ [91,520 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
+##  $ row_id               : chr [1:91520] "NVSS~2010~1~NV001~OVR01~Age-Standardized" "NVSS~2010~1~NV001~OVR01~Crude" "NVSS~2010~1~NV001~GEN01~Crude" "NVSS~2010~1~NV001~GEN01~Age-Standardized" ...
+##  $ year_start           : num [1:91520] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
+##  $ location_abbr        : chr [1:91520] "AL" "AL" "AL" "AL" ...
+##  $ topic                : chr [1:91520] "Major Cardiovascular Disease" "Major Cardiovascular Disease" "Major Cardiovascular Disease" "Major Cardiovascular Disease" ...
+##  $ data_value_type      : chr [1:91520] "Age-Standardized" "Crude" "Crude" "Age-Standardized" ...
+##  $ data_value_unit      : chr [1:91520] "Rate per 100,000" "Rate per 100,000" "Rate per 100,000" "Rate per 100,000" ...
+##  $ data_value           : num [1:91520] 382 430 438 416 352 ...
+##  $ data_value_alt       : num [1:91520] 382 430 438 416 352 ...
+##  $ break_out_category   : chr [1:91520] "Overall" "Overall" "Gender" "Gender" ...
+##  $ break_out            : chr [1:91520] "Overall" "Overall" "Male" "Male" ...
+##  $ class_id             : chr [1:91520] "C1" "C1" "C1" "C1" ...
+##  $ topic_id             : chr [1:91520] "T1" "T1" "T1" "T1" ...
+##  $ data_value_type_id   : chr [1:91520] "AgeStdz" "Crude" "Crude" "AgeStdz" ...
+##  $ break_out_category_id: chr [1:91520] "BOC01" "BOC01" "BOC02" "BOC02" ...
+##  $ break_out_id         : chr [1:91520] "OVR01" "OVR01" "GEN01" "GEN01" ...
+##  $ location_id          : num [1:91520] 1 1 1 1 1 1 1 1 1 1 ...
+##  - attr(*, "spec")=
+##   .. cols(
+##   ..   RowId = col_character(),
+##   ..   YearStart = col_double(),
+##   ..   LocationAbbr = col_character(),
+##   ..   Topic = col_character(),
+##   ..   Data_Value_Type = col_character(),
+##   ..   Data_Value_Unit = col_character(),
+##   ..   Data_Value = col_double(),
+##   ..   Data_Value_Alt = col_double(),
+##   ..   Break_Out_Category = col_character(),
+##   ..   Break_Out = col_character(),
+##   ..   ClassId = col_character(),
+##   ..   TopicId = col_character(),
+##   ..   Data_Value_TypeID = col_character(),
+##   ..   BreakOutCategoryId = col_character(),
+##   ..   BreakOutId = col_character(),
+##   ..   LocationId = col_double()
+##   .. )
+##  - attr(*, "problems")=<externalptr>
+
#remove NA from table
+clean_df1 <- clean_df[!is.na(clean_df$data_value), ]
+
+
+

Filter Relevant Data

+
    +
  • Include data during 2010-2019 (10 years)
  • +
  • Target specific (break_out_category) data by omitting nationwide +“overall” data
  • +
  • Include “age-standardized” data since the objective is to compare +groups, exclude “crude” type
  • +
  • Include relevant data only (i.e. year, HD type, state, mortality +rate, etc.)
  • +
+
df_age1.1 <- clean_df1 %>% #filter 2020, omit 'overall" from break_out, exclude negative #'s, type id "age" = break out category is gender/race only
+  filter(data_value_type_id == "AgeStdz") %>%
+  filter(year_start != "2020") %>%
+  filter(break_out_category != "Overall") %>%
+  filter(data_value_alt > 0)
+print(df_age1.1)
+
## # A tibble: 20,468 × 16
+##    row_id         year_start location_abbr topic data_value_type data_value_unit
+##    <chr>               <dbl> <chr>         <chr> <chr>           <chr>          
+##  1 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  2 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  3 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  4 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  5 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  6 NVSS~2010~1~N…       2010 AL            Majo… Age-Standardiz… Rate per 100,0…
+##  7 NVSS~2010~2~N…       2010 AK            Majo… Age-Standardiz… Rate per 100,0…
+##  8 NVSS~2010~2~N…       2010 AK            Majo… Age-Standardiz… Rate per 100,0…
+##  9 NVSS~2010~2~N…       2010 AK            Majo… Age-Standardiz… Rate per 100,0…
+## 10 NVSS~2010~2~N…       2010 AK            Majo… Age-Standardiz… Rate per 100,0…
+## # ℹ 20,458 more rows
+## # ℹ 10 more variables: data_value <dbl>, data_value_alt <dbl>,
+## #   break_out_category <chr>, break_out <chr>, class_id <chr>, topic_id <chr>,
+## #   data_value_type_id <chr>, break_out_category_id <chr>, break_out_id <chr>,
+## #   location_id <dbl>
+
#remove columns outside objective
+df_age1 <- df_age1.1[, c(1:4, 7, 9:10)]
+print(df_age1)
+
## # A tibble: 20,468 × 7
+##    row_id year_start location_abbr topic data_value break_out_category break_out
+##    <chr>       <dbl> <chr>         <chr>      <dbl> <chr>              <chr>    
+##  1 NVSS~…       2010 AL            Majo…       416. Gender             Male     
+##  2 NVSS~…       2010 AL            Majo…       352. Gender             Female   
+##  3 NVSS~…       2010 AL            Majo…       370. Race               Non-Hisp…
+##  4 NVSS~…       2010 AL            Majo…       453. Race               Non-Hisp…
+##  5 NVSS~…       2010 AL            Majo…       102. Race               Hispanic 
+##  6 NVSS~…       2010 AL            Majo…       133. Race               Other    
+##  7 NVSS~…       2010 AK            Majo…       236. Gender             Male     
+##  8 NVSS~…       2010 AK            Majo…       177  Gender             Female   
+##  9 NVSS~…       2010 AK            Majo…       196. Race               Non-Hisp…
+## 10 NVSS~…       2010 AK            Majo…       268. Race               Other    
+## # ℹ 20,458 more rows
+
+
+

Clean Filtered Data

+
    +
  • Rename columns, race groups to ease understanding of values (simple +terms)
  • +
  • Group HD types that did not include a specification +(i.e. “Stroke”)
  • +
+
#rename columns
+new_names <- c("year", "state", "type", "rate", "group", "sub_group")
+colnames(df_age1)[c(2:7)] <- new_names
+print(df_age1)
+
## # A tibble: 20,468 × 7
+##    row_id                                 year state type   rate group sub_group
+##    <chr>                                 <dbl> <chr> <chr> <dbl> <chr> <chr>    
+##  1 NVSS~2010~1~NV001~GEN01~Age-Standard…  2010 AL    Majo…  416. Gend… Male     
+##  2 NVSS~2010~1~NV001~GEN02~Age-Standard…  2010 AL    Majo…  352. Gend… Female   
+##  3 NVSS~2010~1~NV001~RAC01~Age-Standard…  2010 AL    Majo…  370. Race  Non-Hisp…
+##  4 NVSS~2010~1~NV001~RAC02~Age-Standard…  2010 AL    Majo…  453. Race  Non-Hisp…
+##  5 NVSS~2010~1~NV001~RAC04~Age-Standard…  2010 AL    Majo…  102. Race  Hispanic 
+##  6 NVSS~2010~1~NV001~RAC07~Age-Standard…  2010 AL    Majo…  133. Race  Other    
+##  7 NVSS~2010~2~NV001~GEN01~Age-Standard…  2010 AK    Majo…  236. Gend… Male     
+##  8 NVSS~2010~2~NV001~GEN02~Age-Standard…  2010 AK    Majo…  177  Gend… Female   
+##  9 NVSS~2010~2~NV001~RAC01~Age-Standard…  2010 AK    Majo…  196. Race  Non-Hisp…
+## 10 NVSS~2010~2~NV001~RAC07~Age-Standard…  2010 AK    Majo…  268. Race  Other    
+## # ℹ 20,458 more rows
+
#update type values, verify
+df_age1$type[grepl("^Major |^Diseases of", df_age1$type)] <- "Type Unspecified"
+df_age1$type[grepl("^Acute", df_age1$type)] <- "Heart Attack"
+unique(df_age1$type)
+
## [1] "Type Unspecified"       "Heart Attack"           "Coronary Heart Disease"
+## [4] "Heart Failure"          "Stroke"
+
#rename sub groups, verify
+df_age1$sub_group[grepl("^Non-Hispanic Wh", df_age1$sub_group)] <- "White"
+df_age1$sub_group[grepl("^Non-Hispanic Bl", df_age1$sub_group)] <- "Black"
+df_age1$sub_group[grepl("^Oth", df_age1$sub_group)] <- "Unknown/Other"
+unique(df_age1$sub_group)
+
## [1] "Male"          "Female"        "White"         "Black"        
+## [5] "Hispanic"      "Unknown/Other"
+
+
+
+

Summarize Data into 5 distinct tables

+
+
Summary stats of mortality rates grouped by (1) Gender, (2) Race, +(3) Type/Gender, (4) Type/All Groups, (5) Top/Bottom 5 states
+
    +
  • Plot 1 - Gender
  • +
  • Includes mean/min/max rates of both genders
  • +
+
#summarize gender sub_group
+plot1.1 <- df_age1 %>% #------------------------------------- By Gender
+  filter(group == 'Gender') %>%
+  group_by(year, sub_group) %>%
+  summarize(rate_sum = sum(rate),
+            avg_rate = mean(rate),
+            min_rate = min(rate),
+            max_rate = max(rate))
+
## `summarise()` has grouped output by 'year'. You can override using the
+## `.groups` argument.
+
plot1 <- plot1.1 %>%
+  mutate(avg_rate = round(avg_rate, 1))
+print(plot1)
+
## # A tibble: 20 × 6
+## # Groups:   year [10]
+##     year sub_group rate_sum avg_rate min_rate max_rate
+##    <dbl> <chr>        <dbl>    <dbl>    <dbl>    <dbl>
+##  1  2010 Female      39430.     94.8      8.5     375.
+##  2  2010 Male        48248.    116.       6.3     444.
+##  3  2011 Female      37971.     91.5      7.5     358.
+##  4  2011 Male        47104.    114.       6.5     425.
+##  5  2012 Female      37085.     89.1      8.1     345.
+##  6  2012 Male        46328     112.       7.1     421.
+##  7  2013 Female      36189.     87        7.3     343.
+##  8  2013 Male        46144.    111.       5.7     441.
+##  9  2014 Female      35441.     85.2      6.1     332.
+## 10  2014 Male        45709.    110.       7.7     433.
+## 11  2015 Female      35491.     85.3      6.5     347.
+## 12  2015 Male        45637.    110        5.2     448 
+## 13  2016 Female      34480.     82.9      7.9     332.
+## 14  2016 Male        45285.    109.       7.2     442 
+## 15  2017 Female      33973.     81.7      6.2     338.
+## 16  2017 Male        45039.    109.       6.3     444.
+## 17  2018 Female      33188.     79.8      5.9     321.
+## 18  2018 Male        44740.    108.       6.7     433.
+## 19  2019 Female      32510.     78.1      6.6     318.
+## 20  2019 Male        44228.    106.       5.5     444.
+
    +
  • Plot 2 - Race
  • +
  • Includes mean/min/max rates of all 4 race groups
  • +
+
#summarize race sub_group
+plot2.1 <- df_age1 %>% #------------------------------------- By Race
+  filter(group == 'Race') %>%
+  group_by(year, sub_group) %>%
+  summarize(rate_sum = sum(rate),
+            avg_rate = mean(rate),
+            min_rate = min(rate),
+            max_rate = max(rate))
+
## `summarise()` has grouped output by 'year'. You can override using the
+## `.groups` argument.
+
  plot2 <- plot2.1 %>%
+    mutate(avg_rate = round(avg_rate, 1))
+  print(plot2)
+
## # A tibble: 40 × 6
+## # Groups:   year [10]
+##     year sub_group     rate_sum avg_rate min_rate max_rate
+##    <dbl> <chr>            <dbl>    <dbl>    <dbl>    <dbl>
+##  1  2010 Black           38890     131.       8.9     491.
+##  2  2010 Hispanic        15554.     72        4.8     274.
+##  3  2010 Unknown/Other   18408.     77.7      2.7     386.
+##  4  2010 White           43930.    106.       8       391.
+##  5  2011 Black           37619.    128        8.3     443.
+##  6  2011 Hispanic        15636.     71.1      4.9     270.
+##  7  2011 Unknown/Other   18693      76.6      2.7     309.
+##  8  2011 White           42830.    104.       5.6     384.
+##  9  2012 Black           37086.    127.       9.5     468.
+## 10  2012 Hispanic        15820.     68.2      5.2     284.
+## # ℹ 30 more rows
+
    +
  • Plot 3 - Type (All Genders)
  • +
  • Includes mean rates of all genders
  • +
+
plot3.1 <- df_age1 %>% #------------------------------------- By Type, All Genders
+  filter(group == 'Gender', type != 'Type Unspecified') %>%  #excludes generic types
+  group_by(year, type, sub_group) %>%
+  summarize(avg_rate = mean(rate))
+
## `summarise()` has grouped output by 'year', 'type'. You can override using the
+## `.groups` argument.
+
  plot3 <- plot3.1 %>%
+    mutate(avg_rate = round(avg_rate, 1))
+  print(plot3)
+
## # A tibble: 80 × 4
+## # Groups:   year, type [40]
+##     year type                   sub_group avg_rate
+##    <dbl> <chr>                  <chr>        <dbl>
+##  1  2010 Coronary Heart Disease Female       115. 
+##  2  2010 Coronary Heart Disease Male         174. 
+##  3  2010 Heart Attack           Female        37.8
+##  4  2010 Heart Attack           Male          59.1
+##  5  2010 Heart Failure          Female        24.6
+##  6  2010 Heart Failure          Male          22.3
+##  7  2010 Stroke                 Female        34.1
+##  8  2010 Stroke                 Male          28.1
+##  9  2011 Coronary Heart Disease Female       109. 
+## 10  2011 Coronary Heart Disease Male         170. 
+## # ℹ 70 more rows
+
    +
  • Plot 4 - Type (All Groups/Sub-Groups)
  • +
  • Includes mean rates of population whole
  • +
+
plot4 <- df_age1 %>% #------------------------------------- By Type, Overall
+  filter(type != 'Type Unspecified') %>%  #excludes missing type
+  group_by(year, type) %>%
+  summarize(avg_rate = mean(rate))
+
## `summarise()` has grouped output by 'year'. You can override using the
+## `.groups` argument.
+
print(plot4)
+
## # A tibble: 40 × 3
+## # Groups:   year [10]
+##     year type                   avg_rate
+##    <dbl> <chr>                     <dbl>
+##  1  2010 Coronary Heart Disease    127. 
+##  2  2010 Heart Attack               44.7
+##  3  2010 Heart Failure              22.6
+##  4  2010 Stroke                     31.2
+##  5  2011 Coronary Heart Disease    121. 
+##  6  2011 Heart Attack               42.9
+##  7  2011 Heart Failure              22.0
+##  8  2011 Stroke                     30.1
+##  9  2012 Coronary Heart Disease    119. 
+## 10  2012 Heart Attack               41.3
+## # ℹ 30 more rows
+
    +
  • Plot 5 - Top/Bottom 5 States)
  • +
  • Includes mean rates of 5 states with lowest and highest avg. +mortality rates during total period - Sort table based on avg_rate in +ascending order - create table that includes only the top/bottom 5 +states (exclude)
  • +
+
plot5.1 <- df_age1 %>% #------------------------------------- By Top/Bottom 5 States
+  filter(state != "DC") %>%
+  group_by(state) %>%
+  summarize(avg_rate = mean(rate))
+print(plot5.1)
+
## # A tibble: 51 × 2
+##    state avg_rate
+##    <chr>    <dbl>
+##  1 AK        79.7
+##  2 AL       118. 
+##  3 AR       130. 
+##  4 AZ        79.0
+##  5 CA        88.5
+##  6 CO        71.8
+##  7 CT        79.8
+##  8 DE        97.0
+##  9 FL        83.6
+## 10 GA        79.1
+## # ℹ 41 more rows
+
plot5.2 <- plot5.1[order(-plot5.1$avg_rate), ] #sort table
+
+top_bottom <- plot5.2 %>% #create new table, top/bottom 5
+  arrange(avg_rate) %>%
+  filter(row_number() <= 5 | row_number() > n() - 5)
+     
+plot5 <- top_bottom 
+print(plot5)
+
## # A tibble: 10 × 2
+##    state avg_rate
+##    <chr>    <dbl>
+##  1 MA        68.1
+##  2 CO        71.8
+##  3 MN        73.7
+##  4 WA        74.3
+##  5 VA        75.7
+##  6 SD       119. 
+##  7 OK       121. 
+##  8 WV       124. 
+##  9 AR       130. 
+## 10 MS       135.
+
+
+
+

Create Plots 1-5

+
+

Plot 1: Heart Disease Mortality Rate - Gender

+
    +
  • Visualize avg. mortality rate change during period (all +genders)
  • +
+
ggplot(plot1, aes(x = year, y = avg_rate, color = sub_group)) +
+  geom_line() +
+  geom_point() +
+  scale_x_continuous(labels = scales::number_format(accuracy = 1)) + 
+  scale_y_continuous(labels = scales::number_format(accuracy = 1)) +
+  labs(title = "Heart Disease Mortality Rate - Gender",
+       subtitle = "(2010-2019)",
+       x = "Year",
+       y = "Avg Rate per 100K",
+       color = "Gender") +
+  theme_bw()
+

+
+
+

Plot 2: Heart Disease Mortality Rate - Race

+
    +
  • Visualize avg. mortality rate change during period (all race +groups)
  • +
+
ggplot(plot2, aes(x = year, y = avg_rate, color = sub_group)) +
+  geom_line() +
+  geom_point() +
+  scale_x_continuous(labels = scales::number_format(accuracy = 1)) + 
+  scale_y_continuous(labels = scales::number_format(accuracy = 1)) +
+  labs(title = "Heart Disease Mortality Rate - Race",
+       subtitle = "(2010-2019)",
+       x = "Year",
+       y = "Avg Rate per 100K",
+       color = "Race") +
+  theme_bw()
+

+
+
+

Plot 3: Heart Disease Mortality Rate - +Gender+Type

+
    +
  • Visualize which types of heart disease had the most impact, divide +by genders
    +
  • +
+
ggplot(plot3, aes(x=type, y=avg_rate, fill=type)) +
+  geom_bar(stat = "identity", position = "dodge") +
+  facet_wrap(~ sub_group) +
+  labs(title = "Heart Disease Mortality Rate - Gender+Type",
+       subtitle = "(2010-2019)",
+       x = "Type",
+       y = "Avg Rate per 100K",
+       color = "Gender") +
+  theme(axis.text.x = element_text(angle = 45, hjust = 1))
+

+
+
+

Plot 4: Heart Disease Mortality Rate - Type +(Overall)

+
    +
  • Visualize mortality rate changes during this period for each heart +disease type
    +
  • +
+
ggplot(plot4, aes(x = year, y = avg_rate, color = type)) +
+  geom_line() +
+  geom_point() +
+  scale_x_continuous(labels = scales::number_format(accuracy = 1)) + 
+  scale_y_continuous(labels = scales::number_format(accuracy = 1)) +
+  labs(title = "Heart Disease Mortality Rate - Type",
+       subtitle = "(2010-2019)",
+       x = "Year",
+       y = "Avg Rate per 100K",
+       color = "Type") +
+  theme_bw()
+

+
+
+

Plot 5: Heart Disease Mortality Rate - Top/Bottom 5 +States

+
    +
  • Visualize the top and bottom 5 states that had the highest/lowest +mortality rates during this period
    +
  • +
+
ggplot(plot5, aes(x = reorder(state, -avg_rate), y = avg_rate, fill=avg_rate)) + 
+  geom_bar(stat = "identity") +
+  #facet_wrap(~ sub_group) +
+  labs(title = "Heart Disease Mortality Rates - Top/Bottom 5 States",
+       subtitle = "(2010-2019)",
+       x = "State",
+       y = "Avg Rate per 100K",
+       color = "Rate")
+

+
  theme_minimal()
+
## List of 136
+##  $ line                            :List of 6
+##   ..$ colour       : chr "black"
+##   ..$ linewidth    : num 0.5
+##   ..$ linetype     : num 1
+##   ..$ lineend      : chr "butt"
+##   ..$ arrow        : logi FALSE
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_line" "element"
+##  $ rect                            :List of 5
+##   ..$ fill         : chr "white"
+##   ..$ colour       : chr "black"
+##   ..$ linewidth    : num 0.5
+##   ..$ linetype     : num 1
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_rect" "element"
+##  $ text                            :List of 11
+##   ..$ family       : chr ""
+##   ..$ face         : chr "plain"
+##   ..$ colour       : chr "black"
+##   ..$ size         : num 11
+##   ..$ hjust        : num 0.5
+##   ..$ vjust        : num 0.5
+##   ..$ angle        : num 0
+##   ..$ lineheight   : num 0.9
+##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : logi FALSE
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ title                           : NULL
+##  $ aspect.ratio                    : NULL
+##  $ axis.title                      : NULL
+##  $ axis.title.x                    :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 1
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 2.75points 0points 0points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.title.x.top                :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 0
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 0points 2.75points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.title.x.bottom             : NULL
+##  $ axis.title.y                    :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 1
+##   ..$ angle        : num 90
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 2.75points 0points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.title.y.left               : NULL
+##  $ axis.title.y.right              :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 1
+##   ..$ angle        : num -90
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.75points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text                       :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : chr "grey30"
+##   ..$ size         : 'rel' num 0.8
+##   ..$ hjust        : NULL
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : NULL
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text.x                     :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 1
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 2.2points 0points 0points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text.x.top                 :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : NULL
+##   ..$ vjust        : num 0
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 0points 2.2points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text.x.bottom              : NULL
+##  $ axis.text.y                     :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : num 1
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 2.2points 0points 0points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text.y.left                : NULL
+##  $ axis.text.y.right               :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : num 0
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.2points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.text.theta                 : NULL
+##  $ axis.text.r                     :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : num 0.5
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : 'margin' num [1:4] 0points 2.2points 0points 2.2points
+##   .. ..- attr(*, "unit")= int 8
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ axis.ticks                      : list()
+##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
+##  $ axis.ticks.x                    : NULL
+##  $ axis.ticks.x.top                : NULL
+##  $ axis.ticks.x.bottom             : NULL
+##  $ axis.ticks.y                    : NULL
+##  $ axis.ticks.y.left               : NULL
+##  $ axis.ticks.y.right              : NULL
+##  $ axis.ticks.theta                : NULL
+##  $ axis.ticks.r                    : NULL
+##  $ axis.minor.ticks.x.top          : NULL
+##  $ axis.minor.ticks.x.bottom       : NULL
+##  $ axis.minor.ticks.y.left         : NULL
+##  $ axis.minor.ticks.y.right        : NULL
+##  $ axis.minor.ticks.theta          : NULL
+##  $ axis.minor.ticks.r              : NULL
+##  $ axis.ticks.length               : 'simpleUnit' num 2.75points
+##   ..- attr(*, "unit")= int 8
+##  $ axis.ticks.length.x             : NULL
+##  $ axis.ticks.length.x.top         : NULL
+##  $ axis.ticks.length.x.bottom      : NULL
+##  $ axis.ticks.length.y             : NULL
+##  $ axis.ticks.length.y.left        : NULL
+##  $ axis.ticks.length.y.right       : NULL
+##  $ axis.ticks.length.theta         : NULL
+##  $ axis.ticks.length.r             : NULL
+##  $ axis.minor.ticks.length         : 'rel' num 0.75
+##  $ axis.minor.ticks.length.x       : NULL
+##  $ axis.minor.ticks.length.x.top   : NULL
+##  $ axis.minor.ticks.length.x.bottom: NULL
+##  $ axis.minor.ticks.length.y       : NULL
+##  $ axis.minor.ticks.length.y.left  : NULL
+##  $ axis.minor.ticks.length.y.right : NULL
+##  $ axis.minor.ticks.length.theta   : NULL
+##  $ axis.minor.ticks.length.r       : NULL
+##  $ axis.line                       : list()
+##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
+##  $ axis.line.x                     : NULL
+##  $ axis.line.x.top                 : NULL
+##  $ axis.line.x.bottom              : NULL
+##  $ axis.line.y                     : NULL
+##  $ axis.line.y.left                : NULL
+##  $ axis.line.y.right               : NULL
+##  $ axis.line.theta                 : NULL
+##  $ axis.line.r                     : NULL
+##  $ legend.background               : list()
+##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
+##  $ legend.margin                   : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
+##   ..- attr(*, "unit")= int 8
+##  $ legend.spacing                  : 'simpleUnit' num 11points
+##   ..- attr(*, "unit")= int 8
+##  $ legend.spacing.x                : NULL
+##  $ legend.spacing.y                : NULL
+##  $ legend.key                      : list()
+##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
+##  $ legend.key.size                 : 'simpleUnit' num 1.2lines
+##   ..- attr(*, "unit")= int 3
+##  $ legend.key.height               : NULL
+##  $ legend.key.width                : NULL
+##  $ legend.key.spacing              : 'simpleUnit' num 5.5points
+##   ..- attr(*, "unit")= int 8
+##  $ legend.key.spacing.x            : NULL
+##  $ legend.key.spacing.y            : NULL
+##  $ legend.frame                    : NULL
+##  $ legend.ticks                    : NULL
+##  $ legend.ticks.length             : 'rel' num 0.2
+##  $ legend.axis.line                : NULL
+##  $ legend.text                     :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : 'rel' num 0.8
+##   ..$ hjust        : NULL
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : NULL
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ legend.text.position            : NULL
+##  $ legend.title                    :List of 11
+##   ..$ family       : NULL
+##   ..$ face         : NULL
+##   ..$ colour       : NULL
+##   ..$ size         : NULL
+##   ..$ hjust        : num 0
+##   ..$ vjust        : NULL
+##   ..$ angle        : NULL
+##   ..$ lineheight   : NULL
+##   ..$ margin       : NULL
+##   ..$ debug        : NULL
+##   ..$ inherit.blank: logi TRUE
+##   ..- attr(*, "class")= chr [1:2] "element_text" "element"
+##  $ legend.title.position           : NULL
+##  $ legend.position                 : chr "right"
+##  $ legend.position.inside          : NULL
+##  $ legend.direction                : NULL
+##  $ legend.byrow                    : NULL
+##  $ legend.justification            : chr "center"
+##  $ legend.justification.top        : NULL
+##  $ legend.justification.bottom     : NULL
+##  $ legend.justification.left       : NULL
+##  $ legend.justification.right      : NULL
+##  $ legend.justification.inside     : NULL
+##  $ legend.location                 : NULL
+##  $ legend.box                      : NULL
+##  $ legend.box.just                 : NULL
+##  $ legend.box.margin               : 'margin' num [1:4] 0cm 0cm 0cm 0cm
+##   ..- attr(*, "unit")= int 1
+##  $ legend.box.background           : list()
+##   ..- attr(*, "class")= chr [1:2] "element_blank" "element"
+##  $ legend.box.spacing              : 'simpleUnit' num 11points
+##   ..- attr(*, "unit")= int 8
+##   [list output truncated]
+##  - attr(*, "class")= chr [1:2] "theme" "gg"
+##  - attr(*, "complete")= logi TRUE
+##  - attr(*, "validate")= logi TRUE
+
+
+ + + + +
+ + + + + + + + + + + + + + +