Descriptive Stats, Tables, & Patchwork Package

Load libraries

library(tidyverse)
library(psych)
library(palmerpenguins)
library(janitor)
library(gt)
library(papaja)
library(ggeasy)
library(patchwork)

Descriptive Stats

  • example from Brick paper
    • load in data

    • clean names

    • create new variable for demographic analyses

    • tabyl() and add % - ?tabyl and scroll all the way down and you’ll see examples

    • age: mean, min, max

    • sex: n and percentage

    • case_when() example

load(file = "brick/merged.rda")

mydata_raw <- merged %>%
  clean_names() %>%
  filter(study == "Prolific")

n_subj = length(unique(mydata_raw$id))

mydata_demo <- mydata_raw %>%
  select(id, age, female) %>%
  na.omit() %>%
  distinct(id, age, female) %>%
  filter(female == 1 | female == 2)

mydata_demo %>%
  summarise(mean_age = mean(age),
            sd_age = sd(age),
            min_age = min(age))
## # A tibble: 1 x 3
##   mean_age sd_age min_age
##      <dbl>  <dbl>   <dbl>
## 1     40.8   13.7      18
describe(mydata_demo$age) # psych package
##    vars   n  mean    sd median trimmed   mad min max range skew kurtosis   se
## X1    1 795 40.82 13.65     40    40.2 16.31  18  76    58 0.32    -0.79 0.48
# tabyl()
mydata_demo %>%
  tabyl(female) %>%
  adorn_pct_formatting()
##  female   n percent
##       1 319   40.1%
##       2 476   59.9%
range(mydata_demo$age)
## [1] 18 76
# case_when()
data <- mydata_demo %>%
  mutate(age_group = case_when(age < 30 ~ "youngest",
                               age < 55 & age >= 30 ~ "middle",
                               age >= 55 ~ "oldest"))


#cut_number(mydata_demo$age, 3)

mydata_demo %>%
  mutate(gender = case_when(female == 1 ~ "female",
                            female == 2 ~ "male"))
## # A tibble: 795 x 4
##       id   age female gender
##    <dbl> <dbl> <chr>  <chr> 
##  1  1001    21 1      female
##  2  1002    21 1      female
##  3  1003    37 2      male  
##  4  1004    35 2      male  
##  5  1005    24 1      female
##  6  1007    47 2      male  
##  7  1008    51 2      male  
##  8  1009    48 2      male  
##  9  1010    54 1      female
## 10  1011    22 1      female
## # ... with 785 more rows
mydata_demo %>%
  mutate(age_group = case_when(age < 50 ~ "younger",
                            age >= 50 ~ "older"))
## # A tibble: 795 x 4
##       id   age female age_group
##    <dbl> <dbl> <chr>  <chr>    
##  1  1001    21 1      younger  
##  2  1002    21 1      younger  
##  3  1003    37 2      younger  
##  4  1004    35 2      younger  
##  5  1005    24 1      younger  
##  6  1007    47 2      younger  
##  7  1008    51 2      older    
##  8  1009    48 2      younger  
##  9  1010    54 1      older    
## 10  1011    22 1      younger  
## # ... with 785 more rows

Formatting Tables

  • gt package
penguins$bill_length_mm <- as.numeric(penguins$bill_depth_mm)

penguins_data <- penguins %>% 
  group_by(species) %>% 
  summarise(mean_bill = mean(bill_length_mm, na.rm = TRUE),
            sd_bill = sd(bill_length_mm, na.rm = TRUE)) 

penguins_data %>%
  gt()  %>%
  fmt_number( # format numbers to 2 decimal places
    columns = c(mean_bill, sd_bill), 
    decimals = 1
  )  %>%
  tab_header( # title and subtitle
    title = "Descriptive Stats",
    subtitle = "Penguin Data"
  ) %>%
  tab_footnote( # you can add 1 or more footnotes
    footnote = "species with bills > 40", 
    locations = cells_body(
      columns = c(mean_bill), 
      rows = mean_bill > 40
    )
  )
Descriptive Stats
Penguin Data
species mean_bill sd_bill
Adelie 18.3 1.2
Chinstrap 18.4 1.1
Gentoo 15.0 1.0
  • apa_table() from papaja package
  • knit to see table
apa_table(penguins_data)
(#tab:unnamed-chunk-4)
**
species mean_bill sd_bill
Adelie 18.35 1.22
Chinstrap 18.42 1.14
Gentoo 14.98 0.98

Patchwork Package

Easily plot multiple graphs next to each other

my_penguins <- penguins %>%
  na.omit()

plot1 <- ggplot(my_penguins, aes(bill_length_mm, bill_depth_mm)) +
  geom_point() +
  geom_smooth() +
  theme_bw()

plot2 <- ggplot(my_penguins, aes(bill_length_mm, flipper_length_mm)) +
  geom_point() +
  geom_smooth() +
  theme_bw()

plot1 + plot2