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
You can also embed plots, for example:
plot(pressure)
EPI 553 — Logistic Regression Part 1 Lab Due: April 13, 2026
| 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
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)
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)
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.
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