R Markdown

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

plot(pressure)

EPI 553 — Logistic Regression Part 1 Lab Due: April 13, 2026

Data

Variable Description Type
fmd Frequent mental distress (No/Yes) Factor (outcome)
menthlth_days Mentally unhealthy days (0-30) Numeric
physhlth_days Physically unhealthy days (0-30) Numeric
sleep_hrs Hours of sleep per night Numeric
age Age in years Numeric
sex Male / Female Factor
bmi Body mass index Numeric
exercise Exercised in past 30 days (No/Yes) Factor
income_cat Household income category (1-8) Numeric
smoker Former/Never vs. Current Factor
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.2
## Warning: package 'tibble' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.2
## Warning: package 'readr' was built under R version 4.5.2
## Warning: package 'purrr' was built under R version 4.5.2
## Warning: package 'dplyr' was built under R version 4.5.2
## Warning: package 'stringr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.2
## Warning: package 'lubridate' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.5.2
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(gtsummary)
## Warning: package 'gtsummary' was built under R version 4.5.2
library(ggeffects)
## Warning: package 'ggeffects' was built under R version 4.5.2
library(haven)
## Warning: package 'haven' was built under R version 4.5.2
options(gtsummary.use_ftExtra = TRUE)
set_gtsummary_theme(theme_gtsummary_compact(set_theme = TRUE))
## Setting theme "Compact"
## Setting theme "Compact"
brfss_logistic <- read_xpt("C:\\Users\\safwa\\OneDrive - University at Albany - SUNY\\EPI 553\\Labs\\LLCP2020XPT (1)\\LLCP2020.XPT")
brfss <- brfss_logistic %>%
  mutate(
# Outcome: Frequent Mental Distress (FMD)
# MENTHLTH = number of days mental health not good (1–30, 88=none, 77/99=don't know/refused)
    FMD = case_when(
      MENTHLTH %in% c(77, 99) ~ NA_real_,
      MENTHLTH == 88          ~ 0,          # 0 bad days
      TRUE                    ~ MENTHLTH
    ),
    FMD_bin = factor(
      ifelse(FMD >= 14, 1, 0),
      levels = c(0, 1),
      labels = c("No FMD", "FMD")
    ),

    #  Exercise (EXERANY2): 1=yes, 2=no 
    exercise = factor(
      case_when(
        EXERANY2 == 1 ~ "Yes",
        EXERANY2 == 2 ~ "No",
        TRUE          ~ NA_character_
      ),
      levels = c("Yes", "No")
    ),

    # Smoking (SMOKDAY2 + SMOKE100) 
    # SMOKE100: smoked ≥100 cigarettes lifetime (1=yes, 2=no)
    # SMOKDAY2: smoke every day(1), some days(2), not at all(3)
    smoking = factor(
      case_when(
        SMOKE100 == 2           ~ "Never",
        SMOKDAY2 == 3           ~ "Former",
        SMOKDAY2 == 2           ~ "Some days",
        SMOKDAY2 == 1           ~ "Every day",
        TRUE                    ~ NA_character_
      ),
      levels = c("Never", "Former", "Some days", "Every day")
    ),

    #  Age group (AGEG5YR, 14-level ordinal → midpoints) 
    age_grp = factor(
      case_when(
        `_AGEG5YR` == 1  ~ "18-24",
        `_AGEG5YR` == 2  ~ "25-29",
        `_AGEG5YR` == 3  ~ "30-34",
        `_AGEG5YR` == 4  ~ "35-39",
        `_AGEG5YR` == 5  ~ "40-44",
        `_AGEG5YR` == 6  ~ "45-49",
        `_AGEG5YR` == 7  ~ "50-54",
        `_AGEG5YR` == 8  ~ "55-59",
        `_AGEG5YR` == 9  ~ "60-64",
        `_AGEG5YR` == 10 ~ "65-69",
        `_AGEG5YR` == 11 ~ "70-74",
        `_AGEG5YR` == 12 ~ "75-79",
        `_AGEG5YR` == 13 ~ "80+",
        TRUE             ~ NA_character_
      )
    ),
    # Continuous age midpoint for plots
    age_mid = case_when(
      `_AGEG5YR` == 1  ~ 21,
      `_AGEG5YR` == 2  ~ 27,
      `_AGEG5YR` == 3  ~ 32,
      `_AGEG5YR` == 4  ~ 37,
      `_AGEG5YR` == 5  ~ 42,
      `_AGEG5YR` == 6  ~ 47,
      `_AGEG5YR` == 7  ~ 52,
      `_AGEG5YR` == 8  ~ 57,
      `_AGEG5YR` == 9  ~ 62,
      `_AGEG5YR` == 10 ~ 67,
      `_AGEG5YR` == 11 ~ 72,
      `_AGEG5YR` == 12 ~ 77,
      `_AGEG5YR` == 13 ~ 82,
      TRUE             ~ NA_real_
    ),

    # Sleep hours (SLEPTIM1: 1–24, 77/99=unknown) 
    sleep_hrs = ifelse(SLEPTIM1 %in% c(77, 99), NA, SLEPTIM1),

    # General health (GENHLTH: 1=excellent…5=poor) 
    gen_health = factor(
      case_when(
        GENHLTH == 1 ~ "Excellent",
        GENHLTH == 2 ~ "Very good",
        GENHLTH == 3 ~ "Good",
        GENHLTH == 4 ~ "Fair",
        GENHLTH == 5 ~ "Poor",
        TRUE         ~ NA_character_
      ),
      levels = c("Excellent", "Very good", "Good", "Fair", "Poor")
    ),

    #Sex (_SEX: 1=male, 2=female)
    sex = factor(
      case_when(
        `_SEX` == 1 ~ "Male",
        `_SEX` == 2 ~ "Female",
        TRUE        ~ NA_character_
      ),
      levels = c("Male", "Female")
    )
  ) %>%
  # Keep only complete cases for key variables
  filter(!is.na(FMD_bin), !is.na(exercise), !is.na(smoking),
         !is.na(age_mid), !is.na(sleep_hrs), !is.na(gen_health),
         !is.na(sex))

cat("Analytic sample size:", nrow(brfss), "\n")
## Analytic sample size: 362667

Task 1: Explore the Binary Outcome (15 points)

1a. (5 pts) Create a frequency table showing the number and percentage of individuals with and without frequent mental distress.

fmd_table <- brfss %>%
  count(FMD_bin) %>%
  mutate(Percent = round(n / sum(n) * 100, 1))

print(fmd_table)
## # A tibble: 2 × 3
##   FMD_bin      n Percent
##   <fct>    <int>   <dbl>
## 1 No FMD  318014    87.7
## 2 FMD      44653    12.3

1b. (5 pts) Create a descriptive summary table of at least 4 predictors, stratified by FMD status. Use tbl_summary().

tbl_1b <- brfss %>%
  select(FMD_bin, exercise, smoking, age_grp, sex, sleep_hrs, gen_health) %>%
  tbl_summary(
    by = FMD_bin,
    label = list(
      exercise  ~ "Exercise (past 30 days)",
      smoking   ~ "Smoking status",
      age_grp   ~ "Age group",
      sex       ~ "Sex",
      sleep_hrs ~ "Sleep hours (per night)",
      gen_health ~ "General health"
    ),
    statistic = list(
      all_continuous()  ~ "{mean} ({sd})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    missing = "no"
  ) %>%
  add_overall() %>%
  add_p() %>%
  bold_labels() %>%
  modify_caption("**Table 1. Descriptive Summary by Frequent Mental Distress (FMD) Status, BRFSS 2020**")

print(tbl_1b)
## <div id="jzonqrwcpl" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
##   <style>#jzonqrwcpl table {
##   font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
##   -webkit-font-smoothing: antialiased;
##   -moz-osx-font-smoothing: grayscale;
## }
## 
## #jzonqrwcpl thead, #jzonqrwcpl tbody, #jzonqrwcpl tfoot, #jzonqrwcpl tr, #jzonqrwcpl td, #jzonqrwcpl th {
##   border-style: none;
## }
## 
## #jzonqrwcpl p {
##   margin: 0;
##   padding: 0;
## }
## 
## #jzonqrwcpl .gt_table {
##   display: table;
##   border-collapse: collapse;
##   line-height: normal;
##   margin-left: auto;
##   margin-right: auto;
##   color: #333333;
##   font-size: 13px;
##   font-weight: normal;
##   font-style: normal;
##   background-color: #FFFFFF;
##   width: auto;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #A8A8A8;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #A8A8A8;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_caption {
##   padding-top: 4px;
##   padding-bottom: 4px;
## }
## 
## #jzonqrwcpl .gt_title {
##   color: #333333;
##   font-size: 125%;
##   font-weight: initial;
##   padding-top: 4px;
##   padding-bottom: 4px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-color: #FFFFFF;
##   border-bottom-width: 0;
## }
## 
## #jzonqrwcpl .gt_subtitle {
##   color: #333333;
##   font-size: 85%;
##   font-weight: initial;
##   padding-top: 3px;
##   padding-bottom: 5px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-color: #FFFFFF;
##   border-top-width: 0;
## }
## 
## #jzonqrwcpl .gt_heading {
##   background-color: #FFFFFF;
##   text-align: center;
##   border-bottom-color: #FFFFFF;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_bottom_border {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_col_headings {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_col_heading {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 6px;
##   padding-left: 5px;
##   padding-right: 5px;
##   overflow-x: hidden;
## }
## 
## #jzonqrwcpl .gt_column_spanner_outer {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   padding-top: 0;
##   padding-bottom: 0;
##   padding-left: 4px;
##   padding-right: 4px;
## }
## 
## #jzonqrwcpl .gt_column_spanner_outer:first-child {
##   padding-left: 0;
## }
## 
## #jzonqrwcpl .gt_column_spanner_outer:last-child {
##   padding-right: 0;
## }
## 
## #jzonqrwcpl .gt_column_spanner {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 5px;
##   overflow-x: hidden;
##   display: inline-block;
##   width: 100%;
## }
## 
## #jzonqrwcpl .gt_spanner_row {
##   border-bottom-style: hidden;
## }
## 
## #jzonqrwcpl .gt_group_heading {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   text-align: left;
## }
## 
## #jzonqrwcpl .gt_empty_group_heading {
##   padding: 0.5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: middle;
## }
## 
## #jzonqrwcpl .gt_from_md > :first-child {
##   margin-top: 0;
## }
## 
## #jzonqrwcpl .gt_from_md > :last-child {
##   margin-bottom: 0;
## }
## 
## #jzonqrwcpl .gt_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   margin: 10px;
##   border-top-style: solid;
##   border-top-width: 1px;
##   border-top-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   overflow-x: hidden;
## }
## 
## #jzonqrwcpl .gt_stub {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #jzonqrwcpl .gt_stub_row_group {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
##   vertical-align: top;
## }
## 
## #jzonqrwcpl .gt_row_group_first td {
##   border-top-width: 2px;
## }
## 
## #jzonqrwcpl .gt_row_group_first th {
##   border-top-width: 2px;
## }
## 
## #jzonqrwcpl .gt_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #jzonqrwcpl .gt_first_summary_row {
##   border-top-style: solid;
##   border-top-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_first_summary_row.thick {
##   border-top-width: 2px;
## }
## 
## #jzonqrwcpl .gt_last_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_grand_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #jzonqrwcpl .gt_first_grand_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-style: double;
##   border-top-width: 6px;
##   border-top-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_last_grand_summary_row_top {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: double;
##   border-bottom-width: 6px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_striped {
##   background-color: rgba(128, 128, 128, 0.05);
## }
## 
## #jzonqrwcpl .gt_table_body {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_footnotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_footnote {
##   margin: 0px;
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #jzonqrwcpl .gt_sourcenotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #jzonqrwcpl .gt_sourcenote {
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #jzonqrwcpl .gt_left {
##   text-align: left;
## }
## 
## #jzonqrwcpl .gt_center {
##   text-align: center;
## }
## 
## #jzonqrwcpl .gt_right {
##   text-align: right;
##   font-variant-numeric: tabular-nums;
## }
## 
## #jzonqrwcpl .gt_font_normal {
##   font-weight: normal;
## }
## 
## #jzonqrwcpl .gt_font_bold {
##   font-weight: bold;
## }
## 
## #jzonqrwcpl .gt_font_italic {
##   font-style: italic;
## }
## 
## #jzonqrwcpl .gt_super {
##   font-size: 65%;
## }
## 
## #jzonqrwcpl .gt_footnote_marks {
##   font-size: 75%;
##   vertical-align: 0.4em;
##   position: initial;
## }
## 
## #jzonqrwcpl .gt_asterisk {
##   font-size: 100%;
##   vertical-align: 0;
## }
## 
## #jzonqrwcpl .gt_indent_1 {
##   text-indent: 5px;
## }
## 
## #jzonqrwcpl .gt_indent_2 {
##   text-indent: 10px;
## }
## 
## #jzonqrwcpl .gt_indent_3 {
##   text-indent: 15px;
## }
## 
## #jzonqrwcpl .gt_indent_4 {
##   text-indent: 20px;
## }
## 
## #jzonqrwcpl .gt_indent_5 {
##   text-indent: 25px;
## }
## 
## #jzonqrwcpl .katex-display {
##   display: inline-flex !important;
##   margin-bottom: 0.75em !important;
## }
## 
## #jzonqrwcpl div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
##   height: 0px !important;
## }
## </style>
##   <table class="gt_table" data-quarto-disable-processing="false" data-quarto-bootstrap="false">
##   <caption><span class='gt_from_md'><strong>Table 1. Descriptive Summary by Frequent Mental Distress (FMD) Status, BRFSS 2020</strong></span></caption>
##   <thead>
##     <tr class="gt_col_headings">
##       <th class="gt_col_heading gt_columns_bottom_border gt_left" rowspan="1" colspan="1" scope="col" id="label"><span class='gt_from_md'><strong>Characteristic</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="stat_0"><span class='gt_from_md'><strong>Overall</strong><br />
## N = 362,667</span><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="stat_1"><span class='gt_from_md'><strong>No FMD</strong><br />
## N = 318,014</span><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="stat_2"><span class='gt_from_md'><strong>FMD</strong><br />
## N = 44,653</span><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value"><span class='gt_from_md'><strong>p-value</strong></span><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>2</sup></span></th>
##     </tr>
##   </thead>
##   <tbody class="gt_table_body">
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Exercise (past 30 days)</td>
## <td headers="stat_0" class="gt_row gt_center">277,947 (77%)</td>
## <td headers="stat_1" class="gt_row gt_center">248,349 (78%)</td>
## <td headers="stat_2" class="gt_row gt_center">29,598 (66%)</td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Smoking status</td>
## <td headers="stat_0" class="gt_row gt_center"><br /></td>
## <td headers="stat_1" class="gt_row gt_center"><br /></td>
## <td headers="stat_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Never</td>
## <td headers="stat_0" class="gt_row gt_center">213,571 (59%)</td>
## <td headers="stat_1" class="gt_row gt_center">192,230 (60%)</td>
## <td headers="stat_2" class="gt_row gt_center">21,341 (48%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Former</td>
## <td headers="stat_0" class="gt_row gt_center">99,147 (27%)</td>
## <td headers="stat_1" class="gt_row gt_center">87,248 (27%)</td>
## <td headers="stat_2" class="gt_row gt_center">11,899 (27%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Some days</td>
## <td headers="stat_0" class="gt_row gt_center">13,602 (3.8%)</td>
## <td headers="stat_1" class="gt_row gt_center">10,748 (3.4%)</td>
## <td headers="stat_2" class="gt_row gt_center">2,854 (6.4%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Every day</td>
## <td headers="stat_0" class="gt_row gt_center">36,347 (10%)</td>
## <td headers="stat_1" class="gt_row gt_center">27,788 (8.7%)</td>
## <td headers="stat_2" class="gt_row gt_center">8,559 (19%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Age group</td>
## <td headers="stat_0" class="gt_row gt_center"><br /></td>
## <td headers="stat_1" class="gt_row gt_center"><br /></td>
## <td headers="stat_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    18-24</td>
## <td headers="stat_0" class="gt_row gt_center">23,717 (6.5%)</td>
## <td headers="stat_1" class="gt_row gt_center">19,076 (6.0%)</td>
## <td headers="stat_2" class="gt_row gt_center">4,641 (10%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    25-29</td>
## <td headers="stat_0" class="gt_row gt_center">19,319 (5.3%)</td>
## <td headers="stat_1" class="gt_row gt_center">15,799 (5.0%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,520 (7.9%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    30-34</td>
## <td headers="stat_0" class="gt_row gt_center">21,501 (5.9%)</td>
## <td headers="stat_1" class="gt_row gt_center">17,936 (5.6%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,565 (8.0%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    35-39</td>
## <td headers="stat_0" class="gt_row gt_center">23,397 (6.5%)</td>
## <td headers="stat_1" class="gt_row gt_center">19,695 (6.2%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,702 (8.3%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    40-44</td>
## <td headers="stat_0" class="gt_row gt_center">23,707 (6.5%)</td>
## <td headers="stat_1" class="gt_row gt_center">20,190 (6.3%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,517 (7.9%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    45-49</td>
## <td headers="stat_0" class="gt_row gt_center">24,511 (6.8%)</td>
## <td headers="stat_1" class="gt_row gt_center">21,137 (6.6%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,374 (7.6%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    50-54</td>
## <td headers="stat_0" class="gt_row gt_center">28,677 (7.9%)</td>
## <td headers="stat_1" class="gt_row gt_center">24,666 (7.8%)</td>
## <td headers="stat_2" class="gt_row gt_center">4,011 (9.0%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    55-59</td>
## <td headers="stat_0" class="gt_row gt_center">33,538 (9.2%)</td>
## <td headers="stat_1" class="gt_row gt_center">29,175 (9.2%)</td>
## <td headers="stat_2" class="gt_row gt_center">4,363 (9.8%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    60-64</td>
## <td headers="stat_0" class="gt_row gt_center">38,103 (11%)</td>
## <td headers="stat_1" class="gt_row gt_center">33,770 (11%)</td>
## <td headers="stat_2" class="gt_row gt_center">4,333 (9.7%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    65-69</td>
## <td headers="stat_0" class="gt_row gt_center">38,665 (11%)</td>
## <td headers="stat_1" class="gt_row gt_center">35,181 (11%)</td>
## <td headers="stat_2" class="gt_row gt_center">3,484 (7.8%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    70-74</td>
## <td headers="stat_0" class="gt_row gt_center">35,168 (9.7%)</td>
## <td headers="stat_1" class="gt_row gt_center">32,409 (10%)</td>
## <td headers="stat_2" class="gt_row gt_center">2,759 (6.2%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    75-79</td>
## <td headers="stat_0" class="gt_row gt_center">24,396 (6.7%)</td>
## <td headers="stat_1" class="gt_row gt_center">22,672 (7.1%)</td>
## <td headers="stat_2" class="gt_row gt_center">1,724 (3.9%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    80+</td>
## <td headers="stat_0" class="gt_row gt_center">27,968 (7.7%)</td>
## <td headers="stat_1" class="gt_row gt_center">26,308 (8.3%)</td>
## <td headers="stat_2" class="gt_row gt_center">1,660 (3.7%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Sex</td>
## <td headers="stat_0" class="gt_row gt_center"><br /></td>
## <td headers="stat_1" class="gt_row gt_center"><br /></td>
## <td headers="stat_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Male</td>
## <td headers="stat_0" class="gt_row gt_center">166,313 (46%)</td>
## <td headers="stat_1" class="gt_row gt_center">150,445 (47%)</td>
## <td headers="stat_2" class="gt_row gt_center">15,868 (36%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Female</td>
## <td headers="stat_0" class="gt_row gt_center">196,354 (54%)</td>
## <td headers="stat_1" class="gt_row gt_center">167,569 (53%)</td>
## <td headers="stat_2" class="gt_row gt_center">28,785 (64%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Sleep hours (per night)</td>
## <td headers="stat_0" class="gt_row gt_center">7.10 (1.45)</td>
## <td headers="stat_1" class="gt_row gt_center">7.15 (1.36)</td>
## <td headers="stat_2" class="gt_row gt_center">6.68 (1.95)</td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">General health</td>
## <td headers="stat_0" class="gt_row gt_center"><br /></td>
## <td headers="stat_1" class="gt_row gt_center"><br /></td>
## <td headers="stat_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Excellent</td>
## <td headers="stat_0" class="gt_row gt_center">73,974 (20%)</td>
## <td headers="stat_1" class="gt_row gt_center">69,583 (22%)</td>
## <td headers="stat_2" class="gt_row gt_center">4,391 (9.8%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Very good</td>
## <td headers="stat_0" class="gt_row gt_center">126,716 (35%)</td>
## <td headers="stat_1" class="gt_row gt_center">116,126 (37%)</td>
## <td headers="stat_2" class="gt_row gt_center">10,590 (24%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Good</td>
## <td headers="stat_0" class="gt_row gt_center">107,328 (30%)</td>
## <td headers="stat_1" class="gt_row gt_center">93,581 (29%)</td>
## <td headers="stat_2" class="gt_row gt_center">13,747 (31%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Fair</td>
## <td headers="stat_0" class="gt_row gt_center">41,259 (11%)</td>
## <td headers="stat_1" class="gt_row gt_center">30,907 (9.7%)</td>
## <td headers="stat_2" class="gt_row gt_center">10,352 (23%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Poor</td>
## <td headers="stat_0" class="gt_row gt_center">13,390 (3.7%)</td>
## <td headers="stat_1" class="gt_row gt_center">7,817 (2.5%)</td>
## <td headers="stat_2" class="gt_row gt_center">5,573 (12%)</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##   </tbody>
##   <tfoot>
##     <tr class="gt_footnotes">
##       <td class="gt_footnote" colspan="5"><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span> <span class='gt_from_md'>n (%); Mean (SD)</span></td>
##     </tr>
##     <tr class="gt_footnotes">
##       <td class="gt_footnote" colspan="5"><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>2</sup></span> <span class='gt_from_md'>Pearson’s Chi-squared test; Wilcoxon rank sum test</span></td>
##     </tr>
##   </tfoot>
## </table>
## </div>

1c. (5 pts) Create a bar chart showing the proportion of FMD by exercise status OR smoking status.

fmd_exercise <- brfss %>%
  group_by(exercise, FMD_bin) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(exercise) %>%
  mutate(prop = n / sum(n))

plot_1c <- ggplot(
  fmd_exercise %>% filter(FMD_bin == "FMD"),
  aes(x = exercise, y = prop, fill = exercise)
) +
  geom_col(width = 0.55, color = "white") +
  geom_text(
    aes(label = paste0(round(prop * 100, 1), "%")),
    vjust = -0.5, size = 4.5, fontface = "bold"
  ) +
  scale_y_continuous(labels = scales::percent_format(), limits = c(0, 0.25)) +
  scale_fill_manual(values = c("Yes" = "#2196F3", "No" = "#F44336")) +
  labs(
    title = "Proportion of Frequent Mental Distress by Exercise Status",
    subtitle = "BRFSS 2020 Analytic Sample",
    x = "Exercised in past 30 days",
    y = "Proportion with FMD (≥14 days)",
    caption = "FMD = Frequent Mental Distress (≥14 poor mental health days/month)"
  ) +
  theme_minimal(base_size = 13) +
  theme(legend.position = "none",
        plot.title = element_text(face = "bold"))

print(plot_1c)

ggsave("brfss_task1c_fmd_exercise.png", plot_1c, width = 6, height = 5, dpi = 150)

Task 2: Simple Logistic Regression (20 points)

2a. (5 pts) Fit a simple logistic regression model predicting FMD from exercise. Report the coefficients on the log-odds scale.

model_exercise <- glm(FMD_bin ~ exercise, data = brfss, family = binomial)
summary(model_exercise)
## 
## Call:
## glm(formula = FMD_bin ~ exercise, family = binomial, data = brfss)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -2.127128   0.006149 -345.93   <2e-16 ***
## exerciseNo   0.595140   0.010890   54.65   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 270625  on 362666  degrees of freedom
## Residual deviance: 267788  on 362665  degrees of freedom
## AIC: 267792
## 
## Number of Fisher Scoring iterations: 4
# Coefficients on log-odds scale
cat("\nCoefficients (log-odds scale):\n")
## 
## Coefficients (log-odds scale):
coef(model_exercise)
## (Intercept)  exerciseNo 
##  -2.1271282   0.5951403

2b. (5 pts) Exponentiate the coefficients to obtain odds ratios with 95% confidence intervals.

or_table_2b <- tidy(model_exercise, exponentiate = TRUE, conf.int = TRUE) %>%
  select(term, estimate, conf.low, conf.high, p.value) %>%
  rename(OR = estimate, `2.5%` = conf.low, `97.5%` = conf.high)
print(or_table_2b)
## # A tibble: 2 × 5
##   term           OR `2.5%` `97.5%` p.value
##   <chr>       <dbl>  <dbl>   <dbl>   <dbl>
## 1 (Intercept) 0.119  0.118   0.121       0
## 2 exerciseNo  1.81   1.77    1.85        0

2c. (5 pts) Interpret the odds ratio for exercise in the context of the research question.

or_val   <- round(or_table_2b$OR[2], 2)
ci_low   <- round(or_table_2b$`2.5%`[2], 2)
ci_high  <- round(or_table_2b$`97.5%`[2], 2)
cat(
  sprintf(
    paste0(
      "Interpretation:\n",
      "  The odds of frequent mental distress (FMD) among individuals who did NOT exercise\n",
      "  in the past 30 days are %.2f times the odds among those who DID exercise\n",
      "  (OR = %.2f; 95%% CI: %.2f–%.2f).\n",
      "  This suggests that physical inactivity is associated with higher odds of FMD.\n"
    ),
    or_val, or_val, ci_low, ci_high
  )
)
## Interpretation:
##   The odds of frequent mental distress (FMD) among individuals who did NOT exercise
##   in the past 30 days are 1.81 times the odds among those who DID exercise
##   (OR = 1.81; 95% CI: 1.77–1.85).
##   This suggests that physical inactivity is associated with higher odds of FMD.

2d. (5 pts) Create a plot showing the predicted probability of FMD across levels of a continuous predictor (e.g., age or sleep hours).

model_sleep <- glm(FMD_bin ~ sleep_hrs, data = brfss, family = binomial)

pred_sleep <- tibble(sleep_hrs = seq(1, 24, by = 0.5)) %>%
  bind_cols(
    predict(model_sleep, newdata = ., type = "response", se.fit = TRUE) %>%
      as_tibble() %>%
      rename(pred = fit, se = se.fit)
  ) %>%
  mutate(
    lower = pred - 1.96 * se,
    upper = pred + 1.96 * se
  )

plot_2d <- ggplot(pred_sleep, aes(x = sleep_hrs, y = pred)) +
  geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2, fill = "#9C27B0") +
  geom_line(color = "#9C27B0", linewidth = 1.2) +
  scale_y_continuous(labels = scales::percent_format(), limits = c(0, 0.5)) +
  scale_x_continuous(breaks = seq(2, 24, 2)) +
  labs(
    title = "Predicted Probability of FMD by Sleep Hours",
    subtitle = "Simple logistic regression; shading = 95% CI",
    x = "Sleep hours per night",
    y = "Predicted probability of FMD",
    caption = "BRFSS 2020"
  ) +
  theme_minimal(base_size = 13) +
  theme(plot.title = element_text(face = "bold"))

print(plot_2d)

ggsave("brfss_task2d_sleep_pred.png", plot_2d, width = 7, height = 5, dpi = 150)

Task 3: Comparing Predictors (20 points)

3a. (5 pts) Fit three separate simple logistic regression models, each with a different predictor of your choice.

# Model A: smoking
model_A <- glm(FMD_bin ~ smoking,    data = brfss, family = binomial)

# Model B: general health
model_B <- glm(FMD_bin ~ gen_health, data = brfss, family = binomial)

# Model C: sleep hours
model_C <- glm(FMD_bin ~ sleep_hrs,  data = brfss, family = binomial)

3b. (10 pts) Create a table comparing the odds ratios from all three models.

make_or_row <- function(model, predictor_label) {
  tidy(model, exponentiate = TRUE, conf.int = TRUE) %>%
    filter(term != "(Intercept)") %>%
    mutate(
      Predictor = predictor_label,
      OR_CI = sprintf("%.2f (%.2f–%.2f)", estimate, conf.low, conf.high),
      p_fmt = ifelse(p.value < 0.001, "<0.001", sprintf("%.3f", p.value))
    ) %>%
    select(Predictor, Term = term, OR_CI, p_fmt)
}

or_comparison <- bind_rows(
  make_or_row(model_A, "Smoking status"),
  make_or_row(model_B, "General health"),
  make_or_row(model_C, "Sleep hours")
)
print(or_comparison)
## # A tibble: 8 × 4
##   Predictor      Term                OR_CI               p_fmt 
##   <chr>          <chr>               <chr>               <chr> 
## 1 Smoking status smokingFormer       1.23 (1.20–1.26)    <0.001
## 2 Smoking status smokingSome days    2.39 (2.29–2.50)    <0.001
## 3 Smoking status smokingEvery day    2.77 (2.70–2.85)    <0.001
## 4 General health gen_healthVery good 1.45 (1.39–1.50)    <0.001
## 5 General health gen_healthGood      2.33 (2.25–2.41)    <0.001
## 6 General health gen_healthFair      5.31 (5.11–5.51)    <0.001
## 7 General health gen_healthPoor      11.30 (10.79–11.83) <0.001
## 8 Sleep hours    sleep_hrs           0.79 (0.79–0.80)    <0.001
# Formatted gtsummary table for each model
tbl_A <- tbl_regression(model_A, exponentiate = TRUE, label = list(smoking ~ "Smoking status"))
tbl_B <- tbl_regression(model_B, exponentiate = TRUE, label = list(gen_health ~ "General health"))
tbl_C <- tbl_regression(model_C, exponentiate = TRUE, label = list(sleep_hrs ~ "Sleep hours/night"))

tbl_3b_merged <- tbl_merge(
  list(tbl_A, tbl_B, tbl_C),
  tab_spanner = c("Model A: Smoking", "Model B: Gen. Health", "Model C: Sleep")
) %>%
  modify_caption("**Table 2. Crude Odds Ratios for Three Predictors of FMD, BRFSS 2020**")
## The number rows in the tables to be merged do not match, which may result in
## rows appearing out of order.
## ℹ See `tbl_merge()` (`?gtsummary::tbl_merge()`) help file for details. Use
##   `quiet=TRUE` to silence message.
print(tbl_3b_merged)
## <div id="lloeusekoj" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
##   <style>#lloeusekoj table {
##   font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
##   -webkit-font-smoothing: antialiased;
##   -moz-osx-font-smoothing: grayscale;
## }
## 
## #lloeusekoj thead, #lloeusekoj tbody, #lloeusekoj tfoot, #lloeusekoj tr, #lloeusekoj td, #lloeusekoj th {
##   border-style: none;
## }
## 
## #lloeusekoj p {
##   margin: 0;
##   padding: 0;
## }
## 
## #lloeusekoj .gt_table {
##   display: table;
##   border-collapse: collapse;
##   line-height: normal;
##   margin-left: auto;
##   margin-right: auto;
##   color: #333333;
##   font-size: 13px;
##   font-weight: normal;
##   font-style: normal;
##   background-color: #FFFFFF;
##   width: auto;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #A8A8A8;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #A8A8A8;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_caption {
##   padding-top: 4px;
##   padding-bottom: 4px;
## }
## 
## #lloeusekoj .gt_title {
##   color: #333333;
##   font-size: 125%;
##   font-weight: initial;
##   padding-top: 4px;
##   padding-bottom: 4px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-color: #FFFFFF;
##   border-bottom-width: 0;
## }
## 
## #lloeusekoj .gt_subtitle {
##   color: #333333;
##   font-size: 85%;
##   font-weight: initial;
##   padding-top: 3px;
##   padding-bottom: 5px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-color: #FFFFFF;
##   border-top-width: 0;
## }
## 
## #lloeusekoj .gt_heading {
##   background-color: #FFFFFF;
##   text-align: center;
##   border-bottom-color: #FFFFFF;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_bottom_border {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_col_headings {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_col_heading {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 6px;
##   padding-left: 5px;
##   padding-right: 5px;
##   overflow-x: hidden;
## }
## 
## #lloeusekoj .gt_column_spanner_outer {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   padding-top: 0;
##   padding-bottom: 0;
##   padding-left: 4px;
##   padding-right: 4px;
## }
## 
## #lloeusekoj .gt_column_spanner_outer:first-child {
##   padding-left: 0;
## }
## 
## #lloeusekoj .gt_column_spanner_outer:last-child {
##   padding-right: 0;
## }
## 
## #lloeusekoj .gt_column_spanner {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 5px;
##   overflow-x: hidden;
##   display: inline-block;
##   width: 100%;
## }
## 
## #lloeusekoj .gt_spanner_row {
##   border-bottom-style: hidden;
## }
## 
## #lloeusekoj .gt_group_heading {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   text-align: left;
## }
## 
## #lloeusekoj .gt_empty_group_heading {
##   padding: 0.5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: middle;
## }
## 
## #lloeusekoj .gt_from_md > :first-child {
##   margin-top: 0;
## }
## 
## #lloeusekoj .gt_from_md > :last-child {
##   margin-bottom: 0;
## }
## 
## #lloeusekoj .gt_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   margin: 10px;
##   border-top-style: solid;
##   border-top-width: 1px;
##   border-top-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   overflow-x: hidden;
## }
## 
## #lloeusekoj .gt_stub {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #lloeusekoj .gt_stub_row_group {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
##   vertical-align: top;
## }
## 
## #lloeusekoj .gt_row_group_first td {
##   border-top-width: 2px;
## }
## 
## #lloeusekoj .gt_row_group_first th {
##   border-top-width: 2px;
## }
## 
## #lloeusekoj .gt_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #lloeusekoj .gt_first_summary_row {
##   border-top-style: solid;
##   border-top-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_first_summary_row.thick {
##   border-top-width: 2px;
## }
## 
## #lloeusekoj .gt_last_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_grand_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #lloeusekoj .gt_first_grand_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-style: double;
##   border-top-width: 6px;
##   border-top-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_last_grand_summary_row_top {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: double;
##   border-bottom-width: 6px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_striped {
##   background-color: rgba(128, 128, 128, 0.05);
## }
## 
## #lloeusekoj .gt_table_body {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_footnotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_footnote {
##   margin: 0px;
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #lloeusekoj .gt_sourcenotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #lloeusekoj .gt_sourcenote {
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #lloeusekoj .gt_left {
##   text-align: left;
## }
## 
## #lloeusekoj .gt_center {
##   text-align: center;
## }
## 
## #lloeusekoj .gt_right {
##   text-align: right;
##   font-variant-numeric: tabular-nums;
## }
## 
## #lloeusekoj .gt_font_normal {
##   font-weight: normal;
## }
## 
## #lloeusekoj .gt_font_bold {
##   font-weight: bold;
## }
## 
## #lloeusekoj .gt_font_italic {
##   font-style: italic;
## }
## 
## #lloeusekoj .gt_super {
##   font-size: 65%;
## }
## 
## #lloeusekoj .gt_footnote_marks {
##   font-size: 75%;
##   vertical-align: 0.4em;
##   position: initial;
## }
## 
## #lloeusekoj .gt_asterisk {
##   font-size: 100%;
##   vertical-align: 0;
## }
## 
## #lloeusekoj .gt_indent_1 {
##   text-indent: 5px;
## }
## 
## #lloeusekoj .gt_indent_2 {
##   text-indent: 10px;
## }
## 
## #lloeusekoj .gt_indent_3 {
##   text-indent: 15px;
## }
## 
## #lloeusekoj .gt_indent_4 {
##   text-indent: 20px;
## }
## 
## #lloeusekoj .gt_indent_5 {
##   text-indent: 25px;
## }
## 
## #lloeusekoj .katex-display {
##   display: inline-flex !important;
##   margin-bottom: 0.75em !important;
## }
## 
## #lloeusekoj div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
##   height: 0px !important;
## }
## </style>
##   <table class="gt_table" data-quarto-disable-processing="false" data-quarto-bootstrap="false">
##   <caption><span class='gt_from_md'><strong>Table 2. Crude Odds Ratios for Three Predictors of FMD, BRFSS 2020</strong></span></caption>
##   <thead>
##     <tr class="gt_col_headings gt_spanner_row">
##       <th class="gt_col_heading gt_columns_bottom_border gt_left" rowspan="2" colspan="1" scope="col" id="label"><span class='gt_from_md'><strong>Characteristic</strong></span></th>
##       <th class="gt_center gt_columns_top_border gt_column_spanner_outer" rowspan="1" colspan="3" scope="colgroup" id="level 1; estimate_1">
##         <div class="gt_column_spanner"><span class='gt_from_md'>Model A: Smoking</span></div>
##       </th>
##       <th class="gt_center gt_columns_top_border gt_column_spanner_outer" rowspan="1" colspan="3" scope="colgroup" id="level 1; estimate_2">
##         <div class="gt_column_spanner"><span class='gt_from_md'>Model B: Gen. Health</span></div>
##       </th>
##       <th class="gt_center gt_columns_top_border gt_column_spanner_outer" rowspan="1" colspan="3" scope="colgroup" id="level 1; estimate_3">
##         <div class="gt_column_spanner"><span class='gt_from_md'>Model C: Sleep</span></div>
##       </th>
##     </tr>
##     <tr class="gt_col_headings">
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="estimate_1"><span class='gt_from_md'><strong>OR</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="conf.low_1"><span class='gt_from_md'><strong>95% CI</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value_1"><span class='gt_from_md'><strong>p-value</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="estimate_2"><span class='gt_from_md'><strong>OR</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="conf.low_2"><span class='gt_from_md'><strong>95% CI</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value_2"><span class='gt_from_md'><strong>p-value</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="estimate_3"><span class='gt_from_md'><strong>OR</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="conf.low_3"><span class='gt_from_md'><strong>95% CI</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value_3"><span class='gt_from_md'><strong>p-value</strong></span></th>
##     </tr>
##   </thead>
##   <tbody class="gt_table_body">
##     <tr><td headers="label" class="gt_row gt_left">Smoking status</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Never</td>
## <td headers="estimate_1" class="gt_row gt_center">—</td>
## <td headers="conf.low_1" class="gt_row gt_center">—</td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Former</td>
## <td headers="estimate_1" class="gt_row gt_center">1.23</td>
## <td headers="conf.low_1" class="gt_row gt_center">1.20, 1.26</td>
## <td headers="p.value_1" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Some days</td>
## <td headers="estimate_1" class="gt_row gt_center">2.39</td>
## <td headers="conf.low_1" class="gt_row gt_center">2.29, 2.50</td>
## <td headers="p.value_1" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Every day</td>
## <td headers="estimate_1" class="gt_row gt_center">2.77</td>
## <td headers="conf.low_1" class="gt_row gt_center">2.70, 2.85</td>
## <td headers="p.value_1" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">General health</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Excellent</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center">—</td>
## <td headers="conf.low_2" class="gt_row gt_center">—</td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Very good</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center">1.45</td>
## <td headers="conf.low_2" class="gt_row gt_center">1.39, 1.50</td>
## <td headers="p.value_2" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Good</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center">2.33</td>
## <td headers="conf.low_2" class="gt_row gt_center">2.25, 2.41</td>
## <td headers="p.value_2" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Fair</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center">5.31</td>
## <td headers="conf.low_2" class="gt_row gt_center">5.11, 5.51</td>
## <td headers="p.value_2" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Poor</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center">11.3</td>
## <td headers="conf.low_2" class="gt_row gt_center">10.8, 11.8</td>
## <td headers="p.value_2" class="gt_row gt_center"><0.001</td>
## <td headers="estimate_3" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_3" class="gt_row gt_center"><br /></td>
## <td headers="p.value_3" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">Sleep hours/night</td>
## <td headers="estimate_1" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_1" class="gt_row gt_center"><br /></td>
## <td headers="p.value_1" class="gt_row gt_center"><br /></td>
## <td headers="estimate_2" class="gt_row gt_center"><br /></td>
## <td headers="conf.low_2" class="gt_row gt_center"><br /></td>
## <td headers="p.value_2" class="gt_row gt_center"><br /></td>
## <td headers="estimate_3" class="gt_row gt_center">0.79</td>
## <td headers="conf.low_3" class="gt_row gt_center">0.79, 0.80</td>
## <td headers="p.value_3" class="gt_row gt_center"><0.001</td></tr>
##   </tbody>
##   <tfoot>
##     <tr class="gt_sourcenotes">
##       <td class="gt_sourcenote" colspan="10"><span class='gt_from_md'>Abbreviations: CI = Confidence Interval, OR = Odds Ratio</span></td>
##     </tr>
##   </tfoot>
## </table>
## </div>

3c. (5 pts) Which predictor has the strongest crude association with FMD? Justify your answer.

General health (GENHLTH) shows the strongest crude association with FMD.Respondents in ‘Poor’ general health have dramatically higher odds of FMD compared to those in ‘Excellent’ health (OR typically >10).This very large effect size, combined with a highly significant p-value,indicates the strongest association among the three predictors examined.Sleep hours also shows a clinically meaningful inverse association,but the magnitude is smaller on a per-unit basis.

Task 4: Introduction to Multiple Logistic Regression (20 points)

4a. (5 pts) Fit a multiple logistic regression model predicting FMD from at least 3 predictors.

model_multi <- glm(
  FMD_bin ~ exercise + smoking + gen_health + sleep_hrs + sex + age_mid,
  data   = brfss,
  family = binomial
)
summary(model_multi)
## 
## Call:
## glm(formula = FMD_bin ~ exercise + smoking + gen_health + sleep_hrs + 
##     sex + age_mid, family = binomial, data = brfss)
## 
## Coefficients:
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept)         -0.8265550  0.0321722  -25.69   <2e-16 ***
## exerciseNo           0.2057414  0.0124057   16.58   <2e-16 ***
## smokingFormer        0.3299682  0.0132412   24.92   <2e-16 ***
## smokingSome days     0.5819098  0.0239741   24.27   <2e-16 ***
## smokingEvery day     0.6931577  0.0156492   44.29   <2e-16 ***
## gen_healthVery good  0.4360768  0.0189287   23.04   <2e-16 ***
## gen_healthGood       0.9219384  0.0186783   49.36   <2e-16 ***
## gen_healthFair       1.8120225  0.0207323   87.40   <2e-16 ***
## gen_healthPoor       2.6571901  0.0259336  102.46   <2e-16 ***
## sleep_hrs           -0.1374551  0.0035369  -38.86   <2e-16 ***
## sexFemale            0.6015566  0.0112453   53.49   <2e-16 ***
## age_mid             -0.0324564  0.0003272  -99.18   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 270625  on 362666  degrees of freedom
## Residual deviance: 235057  on 362655  degrees of freedom
## AIC: 235081
## 
## Number of Fisher Scoring iterations: 5

4b. (5 pts) Report the adjusted odds ratios using tbl_regression().

tbl_4b <- tbl_regression(
  model_multi,
  exponentiate = TRUE,
  label = list(
    exercise   ~ "Exercise (past 30 days)",
    smoking    ~ "Smoking status",
    gen_health ~ "General health",
    sleep_hrs  ~ "Sleep hours/night",
    sex        ~ "Sex",
    age_mid    ~ "Age (continuous, years)"
  )
) %>%
  bold_p(t = 0.05) %>%
  bold_labels() %>%
  modify_caption("**Table 3. Adjusted Odds Ratios for Frequent Mental Distress, BRFSS 2020**")

print(tbl_4b)
## <div id="wuooqffikr" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
##   <style>#wuooqffikr table {
##   font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
##   -webkit-font-smoothing: antialiased;
##   -moz-osx-font-smoothing: grayscale;
## }
## 
## #wuooqffikr thead, #wuooqffikr tbody, #wuooqffikr tfoot, #wuooqffikr tr, #wuooqffikr td, #wuooqffikr th {
##   border-style: none;
## }
## 
## #wuooqffikr p {
##   margin: 0;
##   padding: 0;
## }
## 
## #wuooqffikr .gt_table {
##   display: table;
##   border-collapse: collapse;
##   line-height: normal;
##   margin-left: auto;
##   margin-right: auto;
##   color: #333333;
##   font-size: 13px;
##   font-weight: normal;
##   font-style: normal;
##   background-color: #FFFFFF;
##   width: auto;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #A8A8A8;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #A8A8A8;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_caption {
##   padding-top: 4px;
##   padding-bottom: 4px;
## }
## 
## #wuooqffikr .gt_title {
##   color: #333333;
##   font-size: 125%;
##   font-weight: initial;
##   padding-top: 4px;
##   padding-bottom: 4px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-color: #FFFFFF;
##   border-bottom-width: 0;
## }
## 
## #wuooqffikr .gt_subtitle {
##   color: #333333;
##   font-size: 85%;
##   font-weight: initial;
##   padding-top: 3px;
##   padding-bottom: 5px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-color: #FFFFFF;
##   border-top-width: 0;
## }
## 
## #wuooqffikr .gt_heading {
##   background-color: #FFFFFF;
##   text-align: center;
##   border-bottom-color: #FFFFFF;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_bottom_border {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_col_headings {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_col_heading {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 6px;
##   padding-left: 5px;
##   padding-right: 5px;
##   overflow-x: hidden;
## }
## 
## #wuooqffikr .gt_column_spanner_outer {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: normal;
##   text-transform: inherit;
##   padding-top: 0;
##   padding-bottom: 0;
##   padding-left: 4px;
##   padding-right: 4px;
## }
## 
## #wuooqffikr .gt_column_spanner_outer:first-child {
##   padding-left: 0;
## }
## 
## #wuooqffikr .gt_column_spanner_outer:last-child {
##   padding-right: 0;
## }
## 
## #wuooqffikr .gt_column_spanner {
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: bottom;
##   padding-top: 5px;
##   padding-bottom: 5px;
##   overflow-x: hidden;
##   display: inline-block;
##   width: 100%;
## }
## 
## #wuooqffikr .gt_spanner_row {
##   border-bottom-style: hidden;
## }
## 
## #wuooqffikr .gt_group_heading {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   text-align: left;
## }
## 
## #wuooqffikr .gt_empty_group_heading {
##   padding: 0.5px;
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   vertical-align: middle;
## }
## 
## #wuooqffikr .gt_from_md > :first-child {
##   margin-top: 0;
## }
## 
## #wuooqffikr .gt_from_md > :last-child {
##   margin-bottom: 0;
## }
## 
## #wuooqffikr .gt_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   margin: 10px;
##   border-top-style: solid;
##   border-top-width: 1px;
##   border-top-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 1px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 1px;
##   border-right-color: #D3D3D3;
##   vertical-align: middle;
##   overflow-x: hidden;
## }
## 
## #wuooqffikr .gt_stub {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #wuooqffikr .gt_stub_row_group {
##   color: #333333;
##   background-color: #FFFFFF;
##   font-size: 100%;
##   font-weight: initial;
##   text-transform: inherit;
##   border-right-style: solid;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
##   padding-left: 5px;
##   padding-right: 5px;
##   vertical-align: top;
## }
## 
## #wuooqffikr .gt_row_group_first td {
##   border-top-width: 2px;
## }
## 
## #wuooqffikr .gt_row_group_first th {
##   border-top-width: 2px;
## }
## 
## #wuooqffikr .gt_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #wuooqffikr .gt_first_summary_row {
##   border-top-style: solid;
##   border-top-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_first_summary_row.thick {
##   border-top-width: 2px;
## }
## 
## #wuooqffikr .gt_last_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_grand_summary_row {
##   color: #333333;
##   background-color: #FFFFFF;
##   text-transform: inherit;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #wuooqffikr .gt_first_grand_summary_row {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-top-style: double;
##   border-top-width: 6px;
##   border-top-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_last_grand_summary_row_top {
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
##   border-bottom-style: double;
##   border-bottom-width: 6px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_striped {
##   background-color: rgba(128, 128, 128, 0.05);
## }
## 
## #wuooqffikr .gt_table_body {
##   border-top-style: solid;
##   border-top-width: 2px;
##   border-top-color: #D3D3D3;
##   border-bottom-style: solid;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_footnotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_footnote {
##   margin: 0px;
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #wuooqffikr .gt_sourcenotes {
##   color: #333333;
##   background-color: #FFFFFF;
##   border-bottom-style: none;
##   border-bottom-width: 2px;
##   border-bottom-color: #D3D3D3;
##   border-left-style: none;
##   border-left-width: 2px;
##   border-left-color: #D3D3D3;
##   border-right-style: none;
##   border-right-width: 2px;
##   border-right-color: #D3D3D3;
## }
## 
## #wuooqffikr .gt_sourcenote {
##   font-size: 90%;
##   padding-top: 1px;
##   padding-bottom: 1px;
##   padding-left: 5px;
##   padding-right: 5px;
## }
## 
## #wuooqffikr .gt_left {
##   text-align: left;
## }
## 
## #wuooqffikr .gt_center {
##   text-align: center;
## }
## 
## #wuooqffikr .gt_right {
##   text-align: right;
##   font-variant-numeric: tabular-nums;
## }
## 
## #wuooqffikr .gt_font_normal {
##   font-weight: normal;
## }
## 
## #wuooqffikr .gt_font_bold {
##   font-weight: bold;
## }
## 
## #wuooqffikr .gt_font_italic {
##   font-style: italic;
## }
## 
## #wuooqffikr .gt_super {
##   font-size: 65%;
## }
## 
## #wuooqffikr .gt_footnote_marks {
##   font-size: 75%;
##   vertical-align: 0.4em;
##   position: initial;
## }
## 
## #wuooqffikr .gt_asterisk {
##   font-size: 100%;
##   vertical-align: 0;
## }
## 
## #wuooqffikr .gt_indent_1 {
##   text-indent: 5px;
## }
## 
## #wuooqffikr .gt_indent_2 {
##   text-indent: 10px;
## }
## 
## #wuooqffikr .gt_indent_3 {
##   text-indent: 15px;
## }
## 
## #wuooqffikr .gt_indent_4 {
##   text-indent: 20px;
## }
## 
## #wuooqffikr .gt_indent_5 {
##   text-indent: 25px;
## }
## 
## #wuooqffikr .katex-display {
##   display: inline-flex !important;
##   margin-bottom: 0.75em !important;
## }
## 
## #wuooqffikr div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
##   height: 0px !important;
## }
## </style>
##   <table class="gt_table" data-quarto-disable-processing="false" data-quarto-bootstrap="false">
##   <caption><span class='gt_from_md'><strong>Table 3. Adjusted Odds Ratios for Frequent Mental Distress, BRFSS 2020</strong></span></caption>
##   <thead>
##     <tr class="gt_col_headings">
##       <th class="gt_col_heading gt_columns_bottom_border gt_left" rowspan="1" colspan="1" scope="col" id="label"><span class='gt_from_md'><strong>Characteristic</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="estimate"><span class='gt_from_md'><strong>OR</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="conf.low"><span class='gt_from_md'><strong>95% CI</strong></span></th>
##       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value"><span class='gt_from_md'><strong>p-value</strong></span></th>
##     </tr>
##   </thead>
##   <tbody class="gt_table_body">
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Exercise (past 30 days)</td>
## <td headers="estimate" class="gt_row gt_center"><br /></td>
## <td headers="conf.low" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Yes</td>
## <td headers="estimate" class="gt_row gt_center">—</td>
## <td headers="conf.low" class="gt_row gt_center">—</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    No</td>
## <td headers="estimate" class="gt_row gt_center">1.23</td>
## <td headers="conf.low" class="gt_row gt_center">1.20, 1.26</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Smoking status</td>
## <td headers="estimate" class="gt_row gt_center"><br /></td>
## <td headers="conf.low" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Never</td>
## <td headers="estimate" class="gt_row gt_center">—</td>
## <td headers="conf.low" class="gt_row gt_center">—</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Former</td>
## <td headers="estimate" class="gt_row gt_center">1.39</td>
## <td headers="conf.low" class="gt_row gt_center">1.36, 1.43</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Some days</td>
## <td headers="estimate" class="gt_row gt_center">1.79</td>
## <td headers="conf.low" class="gt_row gt_center">1.71, 1.88</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Every day</td>
## <td headers="estimate" class="gt_row gt_center">2.00</td>
## <td headers="conf.low" class="gt_row gt_center">1.94, 2.06</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">General health</td>
## <td headers="estimate" class="gt_row gt_center"><br /></td>
## <td headers="conf.low" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Excellent</td>
## <td headers="estimate" class="gt_row gt_center">—</td>
## <td headers="conf.low" class="gt_row gt_center">—</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Very good</td>
## <td headers="estimate" class="gt_row gt_center">1.55</td>
## <td headers="conf.low" class="gt_row gt_center">1.49, 1.61</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Good</td>
## <td headers="estimate" class="gt_row gt_center">2.51</td>
## <td headers="conf.low" class="gt_row gt_center">2.42, 2.61</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Fair</td>
## <td headers="estimate" class="gt_row gt_center">6.12</td>
## <td headers="conf.low" class="gt_row gt_center">5.88, 6.38</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Poor</td>
## <td headers="estimate" class="gt_row gt_center">14.3</td>
## <td headers="conf.low" class="gt_row gt_center">13.6, 15.0</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Sleep hours/night</td>
## <td headers="estimate" class="gt_row gt_center">0.87</td>
## <td headers="conf.low" class="gt_row gt_center">0.87, 0.88</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Sex</td>
## <td headers="estimate" class="gt_row gt_center"><br /></td>
## <td headers="conf.low" class="gt_row gt_center"><br /></td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Male</td>
## <td headers="estimate" class="gt_row gt_center">—</td>
## <td headers="conf.low" class="gt_row gt_center">—</td>
## <td headers="p.value" class="gt_row gt_center"><br /></td></tr>
##     <tr><td headers="label" class="gt_row gt_left">    Female</td>
## <td headers="estimate" class="gt_row gt_center">1.82</td>
## <td headers="conf.low" class="gt_row gt_center">1.79, 1.87</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##     <tr><td headers="label" class="gt_row gt_left" style="font-weight: bold;">Age (continuous, years)</td>
## <td headers="estimate" class="gt_row gt_center">0.97</td>
## <td headers="conf.low" class="gt_row gt_center">0.97, 0.97</td>
## <td headers="p.value" class="gt_row gt_center" style="font-weight: bold;"><0.001</td></tr>
##   </tbody>
##   <tfoot>
##     <tr class="gt_sourcenotes">
##       <td class="gt_sourcenote" colspan="4"><span class='gt_from_md'>Abbreviations: CI = Confidence Interval, OR = Odds Ratio</span></td>
##     </tr>
##   </tfoot>
## </table>
## </div>

4c. (5 pts) For one predictor, compare the crude OR (from Task 3) with the adjusted OR (from Task 4). Show both values.

crude_sleep    <- tidy(model_C,     exponentiate = TRUE, conf.int = TRUE) %>%
  filter(term == "sleep_hrs") %>%
  mutate(Model = "Crude (Model C)") %>%
  select(Model, OR = estimate, CI_low = conf.low, CI_high = conf.high)

adjusted_sleep <- tidy(model_multi, exponentiate = TRUE, conf.int = TRUE) %>%
  filter(term == "sleep_hrs") %>%
  mutate(Model = "Adjusted (Model 4a)") %>%
  select(Model, OR = estimate, CI_low = conf.low, CI_high = conf.high)

comparison_4c <- bind_rows(crude_sleep, adjusted_sleep) %>%
  mutate(OR_CI = sprintf("%.3f (%.3f–%.3f)", OR, CI_low, CI_high))

cat("\nSleep hours – Crude vs. Adjusted OR:\n")
## 
## Sleep hours – Crude vs. Adjusted OR:
print(comparison_4c %>% select(Model, OR_CI))
## # A tibble: 2 × 2
##   Model               OR_CI              
##   <chr>               <chr>              
## 1 Crude (Model C)     0.791 (0.786–0.797)
## 2 Adjusted (Model 4a) 0.872 (0.866–0.878)

4d. (5 pts) In 2-3 sentences, assess whether confounding is present for the predictor you chose. Which direction did the OR change, and what does this mean? Ans : Confounding Assessment for Sleep Hours:

Crude OR = 0.791 Adjusted OR = 0.872 Change = 10.2% The OR for sleep hours changed from 0.791 (crude) to 0.872 (adjusted after controlling for exercise, smoking, general health, sex, and age),representing a 10.2% change. A change ≥10% is conventionally considered meaningful confounding. The direction of the OR moved away from the null after adjustment,suggesting that the confounders were masking part of the crude association between sleep hours and FMD toward the null — indicating positive confounding.

Completion credit (25 points): Awarded for a complete, good-faith attempt at all tasks. Total: 75 + 25 = 100 points.

End of Lab Activity