Init

options(
  digits = 2,
  tibble.print_max = 30
  )

library(pacman)
p_load(kirkegaard, 
       haven, 
       dplyr, 
       readr, 
       rms,
       GGally
       )

theme_set(theme_bw())

#start parallel
doParallel::registerDoParallel(7)

Functions

#convenience plot function
#remove the _ from labels on the plot automatically since otherwise the labels are too long
#add colors to the correlation matrix to make heatmap
ggpairs_easy = function(x, stars = T) {

  #alternative inner function
  #https://stackoverflow.com/questions/62196950/ggpairs-plot-with-heatmap-of-correlation-values-with-significance-stars-and-cust
  #I removed the adaptive size and stars default since we dont want those
  stars_ = stars
  cor_fun <- function(data, mapping, method="pearson", use="pairwise", ndp=2, sz=5, stars=stars_, ...){
  
  # grab data
  x <- eval_data_col(data, mapping$x)
  y <- eval_data_col(data, mapping$y)
  
  # calculate correlation: for significance stars
  corr <- cor.test(x, y, method=method)
  est <- corr$estimate
  lb.size <- sz* abs(est)
  
  # get significance stars
  if(stars){
    #determine asterisks
    stars <- c("***", "**", "*", "")[findInterval(corr$p.value, c(0, 0.001, 0.005, 0.01, 1))]
    #force digits to be specific number
    lbl <- paste0(format_digits(est, digits = ndp), stars)
  }else{
    #force digits to be specific number
    lbl <- format_digits(est, digits = ndp)
  }
  
  # calculate correlation: for colored tiles
  corr <- cor(x, y, method=method, use=use)
  
  # calculate color based on correlation value
  # corr = -1 => blue, 
  # corr =  0 => white, 
  # corr = +1 => red, 
  colFn <- colorRampPalette(c("blue", "white", "red"), interpolate ='spline')
  fill <- colFn(100)[findInterval(corr, seq(-1, 1, length=100))]
  
  ggplot(data = data, mapping = mapping, ...) + 
    theme_void() +
    annotate("text",
             x=mean(x, na.rm=TRUE),
             y=mean(y, na.rm=TRUE),
             label=lbl,
             # size=lb.size,
             ...) +
    theme(panel.background = element_rect(fill=fill,  # to fill background of panel with color
                                          colour=NA), # to remove border of panel
          panel.grid.major = element_blank())
  }
  
  #do the call
  GGally::ggpairs(
    x,
    columnLabels = colnames(x) %>% str_clean(),
    upper = list(continuous = cor_fun)
    # lower = list(continuous = wrap("smooth", method = "loess"))
    ) +
    theme(
      #black font
      text = element_text(color = "black")
    )
}

Data

Main datafile.

#load VES complete data
# d = haven::read_spss("data/VESTOTAL.sav")
# d_dict = d %>% df_var_table()

#testis data
# fertility = read_excel("data/race_testis_semen_fertility_Emil.xlsx")
# fertility_dict = fertility %>% df_var_table()

#semen data
semen = read_sas("data/VEJOBIQ6_MMPI_Hormon.sas7bdat")
semen_dict = semen %>% df_var_table()

#recode
semen %<>% mutate(
  #semen variables
  pct_motile = v__MOTILITY,
  pct_progressive = v__PROGRESSIVE,
  pct_small = MS02006,
  pct_normal = MS01006,
  pct_large = MS03006,
  pct_tapered = MS04006,
  pct_amorph = MS05006,
  semen_concentration = CONCENTRATION0,
  semen_volume = VOL,
  semen_count = COUNT,
  
  #covars
  days_abstained = DAYSAB %>% winsorise(upper = 7),
  g = G_ALL,
  age = AGEDYR,
  race = RACE
)

#exclude those with spillage
semen2 = semen %>% 
  filter(
    SPILL == "N",
    VASCTOMY == "0"
    )

#var lists
semen_vars = semen %>% select(pct_motile:semen_count) %>% names()
main_vars = c(semen_vars, "g", "age", "race", "days_abstained")
main_vars_num = main_vars %>% setdiff("race")

Results

#pairs
semen2 %>% select(!!main_vars_num) %>% ggpairs_easy()
## Warning: Removed 41 rows containing non-finite values (stat_density).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing non-finite values (stat_density).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing non-finite values (stat_density).
## Warning: Removed 43 rows containing missing values (geom_point).
## Warning: Removed 47 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing non-finite values (stat_density).
## Warning: Removed 42 rows containing missing values (geom_point).
## Warning: Removed 46 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing non-finite values (stat_density).
## Warning: Removed 62 rows containing missing values (geom_point).
## Warning: Removed 66 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 54 rows containing missing values (geom_point).
## Warning: Removed 26 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing non-finite values (stat_density).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 49 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 37 rows containing missing values (geom_point).
## Warning: Removed 11 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 30 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing non-finite values (stat_density).

GG_save("figs/ggpairs.png")
## Warning: Removed 41 rows containing non-finite values (stat_density).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing non-finite values (stat_density).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).

## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing non-finite values (stat_density).
## Warning: Removed 43 rows containing missing values (geom_point).
## Warning: Removed 47 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing non-finite values (stat_density).
## Warning: Removed 42 rows containing missing values (geom_point).
## Warning: Removed 46 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).

## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing non-finite values (stat_density).
## Warning: Removed 62 rows containing missing values (geom_point).
## Warning: Removed 66 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).

## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 54 rows containing missing values (geom_point).
## Warning: Removed 26 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing non-finite values (stat_density).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 45 rows containing missing values (geom_point).
## Warning: Removed 49 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).

## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 37 rows containing missing values (geom_point).
## Warning: Removed 11 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 30 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing non-finite values (stat_density).
#pairs, but whites only
semen2 %>% filter(race == "White") %>% select(!!main_vars_num) %>% ggpairs_easy()
## Warning: Removed 31 rows containing non-finite values (stat_density).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing non-finite values (stat_density).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing non-finite values (stat_density).
## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 36 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 26 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing non-finite values (stat_density).
## Warning: Removed 32 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing non-finite values (stat_density).
## Warning: Removed 48 rows containing missing values (geom_point).
## Warning: Removed 51 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 22 rows containing missing values (geom_point).
## Warning: Removed 20 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing non-finite values (stat_density).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing missing values (geom_point).
## Warning: Removed 32 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 7 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing non-finite values (stat_density).

GG_save("figs/ggpairs_white.png")
## Warning: Removed 31 rows containing non-finite values (stat_density).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing non-finite values (stat_density).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).

## Warning: Removed 24 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing non-finite values (stat_density).
## Warning: Removed 33 rows containing missing values (geom_point).
## Warning: Removed 36 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).

## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 26 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing non-finite values (stat_density).
## Warning: Removed 32 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).

## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing non-finite values (stat_density).
## Warning: Removed 48 rows containing missing values (geom_point).
## Warning: Removed 51 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).

## Warning: Removed 19 rows containing missing values (geom_point).
## Warning: Removed 41 rows containing missing values (geom_point).
## Warning: Removed 22 rows containing missing values (geom_point).
## Warning: Removed 20 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing non-finite values (stat_density).
## Warning: Removed 31 rows containing missing values (geom_point).
## Warning: Removed 34 rows containing missing values (geom_point).
## Warning: Removed 24 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 19 rows containing missing values (geom_point).
## Warning: Removed 32 rows containing missing values (geom_point).
## Warning: Removed 35 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).

## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 25 rows containing missing values (geom_point).
## Warning: Removed 7 rows containing missing values (geom_point).
## Warning: Removed 5 rows containing missing values (geom_point).
## Warning: Removed 23 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing non-finite values (stat_density).
#motile cells
GG_scatter(semen2, "g", "pct_motile") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent motile cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#progressive cells
GG_scatter(semen2, "g", "pct_progressive") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent progressive cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#progressive cells
GG_scatter(semen2, "g", "pct_small") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent small cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#progressive cells
GG_scatter(semen2, "g", "pct_normal") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent normal cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#progressive cells
GG_scatter(semen2, "g", "pct_large") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent large cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#progressive cells
GG_scatter(semen2, "g", "pct_tapered") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Percent tapered cells")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#semen concentration
GG_scatter(semen2, "g", "pct_amorph") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Semen amorph (M/l)")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#semen concentration
GG_scatter(semen2, "g", "semen_concentration") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Semen concentration (M/l)")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#semen volume
GG_scatter(semen2, "g", "semen_volume") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Semen volume (ml)")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#semen count
GG_scatter(semen2, "g", "semen_count") +
  geom_smooth() + 
  scale_x_continuous("g factor") +
  scale_y_continuous("Semen count")
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

#standardized data for models
semen2_std = semen2 %>% df_standardize(messages = F)
semen2_std_whites = semen2_std %>% filter(race == "White")

#all races
list(
  pct_motile = ols(pct_motile ~ g + age + days_abstained + race, data = semen2_std),
  pct_progressive = ols(pct_progressive ~ g + age + days_abstained + race, data = semen2_std),
  pct_small = ols(pct_small ~ g + age + days_abstained + race, data = semen2_std),
  pct_normal = ols(pct_normal ~ g + age + days_abstained + race, data = semen2_std),
  pct_large = ols(pct_large ~ g + age + days_abstained + race, data = semen2_std),
  pct_tapered = ols(pct_tapered ~ g + age + days_abstained + race, data = semen2_std),
  pct_amorph = ols(pct_amorph ~ g + age + days_abstained + race, data = semen2_std),
  semen_concentration = ols(semen_concentration ~ g + age + days_abstained + race, data = semen2_std),
  semen_volume = ols(semen_volume ~ g + age + days_abstained + race, data = semen2_std),
  semen_count = ols(semen_count ~ g + age + days_abstained + race, data = semen2_std)
) %>% 
  summarize_models()
#whites only
list(
  pct_motile = ols(pct_motile ~ g + age + days_abstained, data = semen2_std_whites),
  pct_progressive = ols(pct_progressive ~ g + age + days_abstained, data = semen2_std_whites),
  pct_small = ols(pct_small ~ g + age + days_abstained, data = semen2_std_whites),
  pct_normal = ols(pct_normal ~ g + age + days_abstained, data = semen2_std_whites),
  pct_large = ols(pct_large ~ g + age + days_abstained, data = semen2_std_whites),
  pct_tapered = ols(pct_tapered ~ g + age + days_abstained, data = semen2_std_whites),
  pct_amorph = ols(pct_amorph ~ g + age + days_abstained, data = semen2_std_whites),
  semen_concentration = ols(semen_concentration ~ g + age + days_abstained, data = semen2_std_whites),
  semen_volume = ols(semen_volume ~ g + age + days_abstained, data = semen2_std_whites),
  semen_count = ols(semen_count ~ g + age + days_abstained, data = semen2_std_whites)
) %>% 
  summarize_models()
#race alone
list(
  pct_motile = ols(pct_motile ~ race, data = semen2_std),
  pct_progressive = ols(pct_progressive ~ race, data = semen2_std),
  pct_small = ols(pct_small ~ race, data = semen2_std),
  pct_normal = ols(pct_normal ~ race, data = semen2_std),
  pct_large = ols(pct_large ~ race, data = semen2_std),
  pct_tapered = ols(pct_tapered ~ race, data = semen2_std),
  pct_amorph = ols(pct_amorph ~ race, data = semen2_std),
  semen_concentration = ols(semen_concentration ~ race, data = semen2_std),
  semen_volume = ols(semen_volume ~ race, data = semen2_std),
  semen_count = ols(semen_count ~ race, data = semen2_std)
) %>% 
  summarize_models()