Examined WIN (Words-in-Noise) Threshold as the outcome, with cognitive status (PACC, CDR,MOCA categories) as key predictors, adjusting for demographic and environmental covariates. Hearing aid use at baseline with longitudinal words in noise result was also assessed.
-Lower PACC → Higher WIN Thresholds (poorer auditory
performance).
- Time significantly increases WIN Threshold across all
participants.
- Age, gender, and race influence WIN performance.
- No significant time × PACC interaction (similar progression over
time).
-Progressors have higher WIN Thresholds (worse hearing performance). -Time significantly affects WIN Thresholds across all participants. -No significant time × CDR Progression interaction → Hearing declines at a similar rate for Progressors and Non-Progressors.
-Sustained Progressors have slightly higher WIN Thresholds, but the effect is not significant. -Time significantly affects WIN Thresholds, indicating a decline in hearing performance over time. -No significant time × CDR Sustained Progression interaction → Hearing declines at a similar rate for Sustained and Non-Sustained Progressors.
-Hearing aid users have significantly higher WIN Thresholds (indicating poorer performance). -Time significantly affects WIN Threshold, with performance worsening over time. -A significant time × hearing aid use interaction → Hearing aid users experience a faster decline in auditory performance over time.
✔ Cognitive impairment (low PACC/MOCA/CDR > 0) is linked to poorer
auditory performance.
✔ Hearing difficulties are associated with cognitive status, independent
of time-based interactions.
✔ Hearing aid users exhibit worse hearing at baseline and experience a
faster decline over time. ✔ Demographic factors (age,
gender, race) also play a role.
—
Note The analysis was done on a dataset filtered for non-missing baseline Words in noise value, n=420. Follow up Words in noise threshold were filtered for missing values.
Note There were 107 missing data points in baseline pacc score. 35 matched pacc scores were extracted and filled the missing baseline pacc from follow-up 1 pacc score in the ADRC data.
`
Note time was calculated from baseline to each followup otdate in years.
Words in noise summary
## # A tibble: 1 × 6
## mean median sd range_min range_max n_observations
## <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 11.0 10 4.15 3.2 26 1165
Note PACC classification was done by first calculating the mean and sd of baseline pacc for the dataset. Those below and equal to -1 sd were called “low PACC” and those above were named “high pacc.
model_pacc_classification <- lmer(
WIN_Threshold_Avg ~ time * PACC_class_sick + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = Drives_for_the_WIN_lme_long,
REML = FALSE
)
# View the summary of the model
summary(model_pacc_classification)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * PACC_class_sick + educ + gender +
## age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID)
## Data: Drives_for_the_WIN_lme_long
##
## AIC BIC logLik deviance df.resid
## 3915.1 3971.6 -1945.5 3891.1 808
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9974 -0.4931 -0.0619 0.4333 4.5284
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 9.629 3.103
## Residual 3.016 1.737
## Number of obs: 820, groups: ID, 310
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.514455 5.007136 0.103
## time 0.449637 0.036123 12.447
## PACC_class_sicklow PACC 1.089955 0.533431 2.043
## educ -0.203945 0.081464 -2.503
## gender -2.662624 0.391622 -6.799
## age 0.204005 0.039372 5.182
## raceWhite 2.124973 0.575232 3.694
## ADI_NATRANK 0.008401 0.008873 0.947
## noise_censusblock2020_mean 0.004328 0.073524 0.059
## time:PACC_class_sicklow PACC -0.019915 0.136055 -0.146
##
## Correlation of Fixed Effects:
## (Intr) time PACC_P educ gender age racWht ADI_NA n_2020
## time -0.028
## PACC_c_PACC 0.054 0.100
## educ -0.332 -0.003 0.108
## gender -0.242 0.007 0.056 0.147
## age -0.508 -0.001 -0.199 0.013 0.084
## raceWhite -0.113 0.037 0.068 0.029 0.064 -0.030
## ADI_NATRANK -0.324 0.012 0.017 0.272 -0.056 0.142 0.342
## ns_cns2020_ -0.723 0.017 -0.003 0.017 0.043 -0.104 -0.018 0.075
## t:PACC__PAC 0.023 -0.264 -0.166 -0.003 0.003 -0.054 0.021 -0.007 0.012
sjPlot::tab_model(model_pacc_classification,
title = "Effect of Baseline PACC on WIN threshold",
file = NULL)| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 0.51 | -9.31 – 10.34 | 0.918 |
| time | 0.45 | 0.38 – 0.52 | <0.001 |
|
PACC class sick [low PACC] |
1.09 | 0.04 – 2.14 | 0.041 |
| educ | -0.20 | -0.36 – -0.04 | 0.012 |
| gender | -2.66 | -3.43 – -1.89 | <0.001 |
| age | 0.20 | 0.13 – 0.28 | <0.001 |
| race [White] | 2.12 | 1.00 – 3.25 | <0.001 |
| ADI NATRANK | 0.01 | -0.01 – 0.03 | 0.344 |
|
noise censusblock2020 mean |
0.00 | -0.14 – 0.15 | 0.953 |
|
time × PACC class sick [low PACC] |
-0.02 | -0.29 – 0.25 | 0.884 |
| Random Effects | |||
| σ2 | 3.02 | ||
| τ00 ID | 9.63 | ||
| ICC | 0.76 | ||
| N ID | 310 | ||
| Observations | 820 | ||
| Marginal R2 / Conditional R2 | 0.275 / 0.827 | ||
## Intercept for High PACC: 0.5145
## Intercept for Low PACC: 1.6044
plot_model(model_pacc_classification,
type = "pred",
terms = c("time", "PACC_class_sick"),
mdrt.values = "meansd", # Ensure covariates are set at their means
show.data = TRUE) # Overlay raw data pointsAdjusting at the Intercept Level (Group-Level Adjustment) When we adjust at the intercept, we assume that all participants share the same average values for covariates.
The intercept is pre-adjusted using the mean values of educ, age, ADI_NATRANK, etc. The same intercept applies to everyone, so predictions are for an “average” participant in each PACC group.
# Extract fixed effects from the model
fixed_effects <- fixef(model_pacc_classification)
# Compute mean values for continuous covariates
mean_educ <- mean(clean_data_PACC_Class$educ, na.rm = TRUE)
mean_age <- mean(clean_data_PACC_Class$age, na.rm = TRUE)
mean_ADI_NATRANK <- mean(clean_data_PACC_Class$ADI_NATRANK, na.rm = TRUE)
mean_noise <- mean(clean_data_PACC_Class$noise_censusblock2020_mean, na.rm = TRUE)
# Compute proportion of White participants
mean_raceWhite <- mean(clean_data_PACC_Class$race == "White", na.rm = TRUE) # Binary 0/1 = 0.82
# Find most common gender
most_common_gender <- as.numeric(names(sort(table(clean_data_PACC_Class$gender), decreasing = TRUE)[1]))
# Base intercept for "high PACC" group (reference)
intercept_high_pacc <- fixed_effects["(Intercept)"] +
fixed_effects["educ"] * mean_educ +
fixed_effects["age"] * mean_age +
fixed_effects["ADI_NATRANK"] * mean_ADI_NATRANK +
fixed_effects["noise_censusblock2020_mean"] * mean_noise +
fixed_effects["raceWhite"] * mean_raceWhite
# Adjust for gender: Apply effect if the most common gender is Female (coded as 2)
if (most_common_gender == 2) {
intercept_high_pacc <- intercept_high_pacc + fixed_effects["gender"]
}
# Adjust for "low PACC" group
intercept_low_pacc <- intercept_high_pacc + fixed_effects["PACC_class_sicklow PACC"]
# Create a new data frame for predictions (fix factor levels)
new_data <- expand.grid(
time = seq(0, 12, by = 1.5),
PACC_class_sick = factor(c("high PACC", "low PACC"), levels = c("high PACC", "low PACC")) # Explicitly set levels
)
# Compute predictions (holding covariates constant)
new_data <- new_data %>%
mutate(
PACC_class_sick = as.character(PACC_class_sick), # Convert to character
predicted = case_when(
PACC_class_sick == "high PACC" ~ intercept_high_pacc + fixed_effects["time"] * time,
PACC_class_sick == "low PACC" ~ intercept_low_pacc + (fixed_effects["time"] + fixed_effects["time:PACC_class_sicklow PACC"]) * time
)
)
# Plot results
ggplot(new_data, aes(x = time, y = predicted, color = PACC_class_sick)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
theme_minimal() +
labs(
title = "Hearing Ability Decline Over Time (WIN Threshold Avg)",
subtitle = "Comparing PACC = High vs. Low at Baseline",
x = "Time (Years)",
y = "Predicted WIN Threshold Avg (Higher = Worse Hearing)",
color = "Baseline PACC Classification"
) +
theme(legend.position = "top")## Intercept for PACC = high: 11.6542
## Intercept for PACC = low: 12.7441
## # A tibble: 2 × 2
## MOCA_CAT n
## <fct> <int>
## 1 high moca 176
## 2 low moca 156
MoCA score was categorized at baseline taking into account for race and educational level.
model_MOCA_classification <- lmer(
WIN_Threshold_Avg ~ time * MOCA_CAT + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = clean_data_MOCA_CAT,
REML = FALSE
)
# View the summary of the model
summary(model_MOCA_classification)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * MOCA_CAT + educ + gender + age + race +
## ADI_NATRANK + noise_censusblock2020_mean + (1 | ID)
## Data: clean_data_MOCA_CAT
##
## AIC BIC logLik deviance df.resid
## 4235.4 4292.9 -2105.7 4211.4 874
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9249 -0.5074 -0.0461 0.4275 4.5591
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 9.910 3.148
## Residual 3.019 1.737
## Number of obs: 886, groups: ID, 332
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 0.691516 4.990949 0.139
## time 0.433812 0.041411 10.476
## MOCA_CATlow moca 1.303714 0.398694 3.270
## educ -0.142609 0.077644 -1.837
## gender -2.632626 0.383697 -6.861
## age 0.183372 0.038650 4.744
## raceWhite 2.148517 0.554354 3.876
## ADI_NATRANK 0.006228 0.008753 0.711
## noise_censusblock2020_mean 0.004776 0.073672 0.065
## time:MOCA_CATlow moca 0.085755 0.073194 1.172
##
## Correlation of Fixed Effects:
## (Intr) time MOCA_m educ gender age racWht ADI_NA n_2020
## time -0.020
## MOCA_CATlwm 0.090 0.168
## educ -0.317 0.000 0.111
## gender -0.224 0.010 0.127 0.133
## age -0.510 -0.016 -0.198 0.007 0.082
## raceWhite -0.118 0.018 -0.053 0.006 0.030 -0.004
## ADI_NATRANK -0.323 -0.001 -0.086 0.243 -0.070 0.148 0.355
## ns_cns2020_ -0.740 0.016 -0.060 0.025 0.032 -0.084 -0.010 0.092
## t:MOCA_CATm 0.004 -0.565 -0.222 -0.005 -0.004 0.007 0.018 0.007 -0.001
sjPlot::tab_model(model_MOCA_classification,
title = "Effect of Baseline MoCA on WIN threshold",
file = NULL)| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 0.69 | -9.10 – 10.49 | 0.890 |
| time | 0.43 | 0.35 – 0.52 | <0.001 |
| MOCA CAT [low moca] | 1.30 | 0.52 – 2.09 | 0.001 |
| educ | -0.14 | -0.30 – 0.01 | 0.067 |
| gender | -2.63 | -3.39 – -1.88 | <0.001 |
| age | 0.18 | 0.11 – 0.26 | <0.001 |
| race [White] | 2.15 | 1.06 – 3.24 | <0.001 |
| ADI NATRANK | 0.01 | -0.01 – 0.02 | 0.477 |
|
noise censusblock2020 mean |
0.00 | -0.14 – 0.15 | 0.948 |
|
time × MOCA CAT [low moca] |
0.09 | -0.06 – 0.23 | 0.242 |
| Random Effects | |||
| σ2 | 3.02 | ||
| τ00 ID | 9.91 | ||
| ICC | 0.77 | ||
| N ID | 332 | ||
| Observations | 886 | ||
| Marginal R2 / Conditional R2 | 0.285 / 0.833 | ||
## Intercept for High MOCA: 0.6915
## Intercept for Low MOCA: 1.9952
Adjusting at the Intercept Level (Group-Level Adjustment) When we adjust at the intercept, we assume that all participants share the same average values for covariates.
The intercept is pre-adjusted using the mean values of educ, age, ADI_NATRANK, etc. The same intercept applies to everyone, so predictions are for an “average” participant in each MoCA group.
## Intercept for MOCA = high: 11.2863
## Intercept for MOCA = low: 12.5901
### Model 2 with plot_model
Plotting using a package: By default, plot_model() holds all
covariates at their mean or median values and covariate coefficient
estimate for categorical variables is based on the most prevalent
category.
## # A tibble: 2 × 2
## CDR_status n
## <fct> <int>
## 1 cdr = 0 251
## 2 cdr > 0 122
CDR_status was defined by the specific CDR value at baseline. There were a total 136 CDR >0 at baseline (became 122 when filtered for non-NA for other variables). Some were incidental one-off increase and majority were “sustained progression”.
model_CDR_status <- lmer(
WIN_Threshold_Avg ~ time * CDR_status + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = clean_data_CDR,
REML = FALSE
)
# View the summary of the model
summary(model_CDR_status)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * CDR_status + educ + gender + age +
## race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID)
## Data: clean_data_CDR
##
## AIC BIC logLik deviance df.resid
## 4949.7 5009.2 -2462.9 4925.7 1032
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0405 -0.5038 -0.0716 0.4400 4.5622
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 10.413 3.227
## Residual 2.911 1.706
## Number of obs: 1044, groups: ID, 373
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -5.811478 4.709096 -1.234
## time 0.476691 0.029873 15.957
## CDR_statuscdr > 0 1.225474 0.398670 3.074
## educ -0.170846 0.077561 -2.203
## gender2 -2.378407 0.368601 -6.453
## age 0.196800 0.037083 5.307
## raceWhite 1.632221 0.539349 3.026
## ADI_NATRANK 0.009407 0.008178 1.150
## noise_censusblock2020_mean 0.072777 0.070630 1.030
## time:CDR_statuscdr > 0 -0.065040 0.118498 -0.549
##
## Correlation of Fixed Effects:
## (Intr) time CDR_>0 educ gendr2 age racWht ADI_NA n_2020
## time -0.026
## CDR_sttsc>0 -0.005 0.137
## educ -0.333 -0.004 0.114
## gender2 -0.154 0.012 0.035 0.166
## age -0.499 0.003 -0.084 0.001 0.080
## raceWhite -0.113 0.010 -0.096 0.008 0.070 0.020
## ADI_NATRANK -0.319 0.015 -0.004 0.261 -0.064 0.115 0.351
## ns_cns2020_ -0.740 0.013 0.005 0.040 0.025 -0.106 -0.034 0.087
## tm:CDR_st>0 -0.008 -0.252 -0.187 0.021 -0.004 -0.024 0.017 0.002 0.022
| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | -5.81 | -15.05 – 3.43 | 0.217 |
| time | 0.48 | 0.42 – 0.54 | <0.001 |
| CDR status [cdr > 0] | 1.23 | 0.44 – 2.01 | 0.002 |
| educ | -0.17 | -0.32 – -0.02 | 0.028 |
| gender [2] | -2.38 | -3.10 – -1.66 | <0.001 |
| age | 0.20 | 0.12 – 0.27 | <0.001 |
| race [White] | 1.63 | 0.57 – 2.69 | 0.003 |
| ADI NATRANK | 0.01 | -0.01 – 0.03 | 0.250 |
|
noise censusblock2020 mean |
0.07 | -0.07 – 0.21 | 0.303 |
|
time × CDR status [cdr > 0] |
-0.07 | -0.30 – 0.17 | 0.583 |
| Random Effects | |||
| σ2 | 2.91 | ||
| τ00 ID | 10.41 | ||
| ICC | 0.78 | ||
| N ID | 373 | ||
| Observations | 1044 | ||
| Marginal R2 / Conditional R2 | 0.230 / 0.832 | ||
## Intercept for CDR_0: -5.8115
## Intercept for CDR_GT0: -4.5860
Adjusting at the Intercept Level (Group-Level Adjustment) When we adjust at the intercept, we assume that all participants share the same average values for covariates.
The intercept is pre-adjusted using the mean values of educ, age, ADI_NATRANK, etc. The same intercept applies to everyone, so predictions are for an “average” participant in each CDR_status group.
## Intercept for CDR = 0 (holding covariates constant): 8.8340
## Intercept for CDR > 0 (holding covariates constant): 10.0595
Plotting using a package: By default, plot_model() holds all
covariates at their mean or median values and covariate coefficient
estimate for categorical variables is based on the most prevalent
category.
CDR_Progression_status is defined based on first time progression for the entirety of follow up for each P.
model_CDR_Progression_status <- lmer(
WIN_Threshold_Avg ~ time * CDR_Progression_status + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = clean_data_CDR_progression,
REML = FALSE
)
# View the summary of the model
summary(model_CDR_Progression_status)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * CDR_Progression_status + educ + gender +
## age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID)
## Data: clean_data_CDR_progression
##
## AIC BIC logLik deviance df.resid
## 5428.2 5488.7 -2702.1 5404.2 1130
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9341 -0.5047 -0.0670 0.4379 4.5599
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 10.656 3.264
## Residual 2.939 1.714
## Number of obs: 1142, groups: ID, 407
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -4.662415 4.479444 -1.041
## time 0.466663 0.030946 15.080
## CDR_Progression_statusProgressors 1.045262 0.365400 2.861
## educ -0.126986 0.073884 -1.719
## gender2 -2.384214 0.352601 -6.762
## age 0.201404 0.035639 5.651
## raceWhite 1.717565 0.519026 3.309
## ADI_NATRANK 0.008797 0.007971 1.104
## noise_censusblock2020_mean 0.029862 0.068017 0.439
## time:CDR_Progression_statusProgressors 0.112758 0.075258 1.498
##
## Correlation of Fixed Effects:
## (Intr) time CDR_P_ educ gendr2 age racWht ADI_NA n_2020
## time -0.026
## CDR_Prgrs_P -0.005 0.155
## educ -0.328 0.002 0.087
## gender2 -0.125 0.011 0.013 0.143
## age -0.491 0.006 -0.081 0.004 0.067
## raceWhite -0.097 0.002 -0.120 0.001 0.056 0.003
## ADI_NATRANK -0.315 0.012 -0.075 0.246 -0.046 0.124 0.366
## ns_cns2020_ -0.737 0.010 0.015 0.033 0.006 -0.122 -0.040 0.076
## tm:CDR_Pr_P 0.004 -0.411 -0.209 -0.007 -0.015 -0.024 0.013 -0.008 0.022
| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | -4.66 | -13.45 – 4.13 | 0.298 |
| time | 0.47 | 0.41 – 0.53 | <0.001 |
|
CDR Progression status [Progressors] |
1.05 | 0.33 – 1.76 | 0.004 |
| educ | -0.13 | -0.27 – 0.02 | 0.086 |
| gender [2] | -2.38 | -3.08 – -1.69 | <0.001 |
| age | 0.20 | 0.13 – 0.27 | <0.001 |
| race [White] | 1.72 | 0.70 – 2.74 | 0.001 |
| ADI NATRANK | 0.01 | -0.01 – 0.02 | 0.270 |
|
noise censusblock2020 mean |
0.03 | -0.10 – 0.16 | 0.661 |
|
time × CDR Progression status [Progressors] |
0.11 | -0.03 – 0.26 | 0.134 |
| Random Effects | |||
| σ2 | 2.94 | ||
| τ00 ID | 10.66 | ||
| ICC | 0.78 | ||
| N ID | 407 | ||
| Observations | 1142 | ||
| Marginal R2 / Conditional R2 | 0.233 / 0.834 | ||
## Intercept for Non-Progressors: -4.6624
## Intercept for Progressors: -3.6172
## Intercept for Non-Progressors: 8.8322
## Intercept for Progressors: 9.8775
CDR_sustained_progression_status was defined as the presence of consecutive CDR > 0 over the follow ups.
model_CDR_Sustained_Progression_Status <- lmer(
WIN_Threshold_Avg ~ time * CDR_sustained_progression_status + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = clean_data_CDR_sustained_progression_status,
REML = FALSE
)
# View the summary of the model
summary(model_CDR_Sustained_Progression_Status)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * CDR_sustained_progression_status +
## educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean +
## (1 | ID)
## Data: clean_data_CDR_sustained_progression_status
##
## AIC BIC logLik deviance df.resid
## 5437.6 5498.1 -2706.8 5413.6 1130
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9667 -0.5065 -0.0619 0.4510 4.5483
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 10.887 3.300
## Residual 2.945 1.716
## Number of obs: 1142, groups: ID, 407
##
## Fixed effects:
## Estimate Std. Error
## (Intercept) -4.340048 4.528421
## time 0.466462 0.029613
## CDR_sustained_progression_statussustained progression 0.522022 0.616236
## educ -0.145231 0.074328
## gender2 -2.384717 0.356003
## age 0.205297 0.036295
## raceWhite 1.872832 0.521000
## ADI_NATRANK 0.010361 0.008033
## noise_censusblock2020_mean 0.027579 0.068707
## time:CDR_sustained_progression_statussustained progression 0.125915 0.095879
## t value
## (Intercept) -0.958
## time 15.752
## CDR_sustained_progression_statussustained progression 0.847
## educ -1.954
## gender2 -6.699
## age 5.656
## raceWhite 3.595
## ADI_NATRANK 1.290
## noise_censusblock2020_mean 0.401
## time:CDR_sustained_progression_statussustained progression 1.313
##
## Correlation of Fixed Effects:
## (Intr) time CDR__p educ gendr2 age racWht ADI_NA n_2020
## time -0.026
## CDR_sstn__p 0.048 0.066
## educ -0.327 -0.007 0.022
## gender2 -0.125 0.006 0.014 0.143
## age -0.494 0.007 -0.151 0.008 0.065
## raceWhite -0.101 0.019 -0.051 0.010 0.057 0.001
## ADI_NATRANK -0.318 0.018 -0.042 0.253 -0.046 0.124 0.362
## ns_cns2020_ -0.734 0.014 0.036 0.032 0.006 -0.125 -0.041 0.076
## tm:CDR_s__p 0.001 -0.309 -0.255 0.001 -0.005 -0.011 -0.004 -0.010 0.012
| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | -4.34 | -13.23 – 4.55 | 0.338 |
| time | 0.47 | 0.41 – 0.52 | <0.001 |
|
CDR sustained progression status [sustained progression] |
0.52 | -0.69 – 1.73 | 0.397 |
| educ | -0.15 | -0.29 – 0.00 | 0.051 |
| gender [2] | -2.38 | -3.08 – -1.69 | <0.001 |
| age | 0.21 | 0.13 – 0.28 | <0.001 |
| race [White] | 1.87 | 0.85 – 2.90 | <0.001 |
| ADI NATRANK | 0.01 | -0.01 – 0.03 | 0.197 |
|
noise censusblock2020 mean |
0.03 | -0.11 – 0.16 | 0.688 |
|
time × CDR sustained progression status [sustained progression] |
0.13 | -0.06 – 0.31 | 0.189 |
| Random Effects | |||
| σ2 | 2.95 | ||
| τ00 ID | 10.89 | ||
| ICC | 0.79 | ||
| N ID | 407 | ||
| Observations | 1142 | ||
| Marginal R2 / Conditional R2 | 0.230 / 0.836 | ||
## Intercept for Non-Sustained Progressors: -4.3400
## Intercept for Sustained Progressors: -3.8180
## Intercept for Non-Sustained Progressors (adjusted): 9.2366
## Intercept for Sustained Progressors (adjusted): 9.7587
## # A tibble: 2 × 2
## hearingaids1_baseline n
## <fct> <int>
## 1 No 315
## 2 Yes 75
Those who wear hearing aid at baseline declined faster in hearing impairment (as expected) based on follow up words in noise test.
model_hearingaids1_baseline <- lmer(
WIN_Threshold_Avg ~ time * hearingaids1_baseline + educ + gender + age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID),
data = clean_data_hearingaids1_baseline,
REML = FALSE
)
# View the summary of the model
summary(model_hearingaids1_baseline)## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: WIN_Threshold_Avg ~ time * hearingaids1_baseline + educ + gender +
## age + race + ADI_NATRANK + noise_censusblock2020_mean + (1 | ID)
## Data: clean_data_hearingaids1_baseline
##
## AIC BIC logLik deviance df.resid
## 5115.9 5176.0 -2546.0 5091.9 1090
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.9265 -0.5215 -0.0540 0.4328 4.6995
##
## Random effects:
## Groups Name Variance Std.Dev.
## ID (Intercept) 8.016 2.831
## Residual 2.852 1.689
## Number of obs: 1102, groups: ID, 390
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) -3.00838 4.11261 -0.732
## time 0.42716 0.03073 13.899
## hearingaids1_baselineYes 4.09238 0.42185 9.701
## educ -0.11978 0.06656 -1.800
## gender2 -1.95837 0.32318 -6.060
## age 0.17877 0.03237 5.523
## raceWhite 1.45641 0.46598 3.125
## ADI_NATRANK 0.01320 0.00716 1.843
## noise_censusblock2020_mean 0.01730 0.06153 0.281
## time:hearingaids1_baselineYes 0.21365 0.07476 2.858
##
## Correlation of Fixed Effects:
## (Intr) time hrn1_Y educ gendr2 age racWht ADI_NA n_2020
## time -0.028
## hrngds1_bsY 0.044 0.108
## educ -0.334 -0.010 0.065
## gender2 -0.144 0.013 0.156 0.159
## age -0.499 -0.004 -0.124 -0.001 0.060
## raceWhite -0.112 0.026 -0.066 0.011 0.060 0.001
## ADI_NATRANK -0.320 0.012 0.045 0.266 -0.040 0.099 0.346
## ns_cns2020_ -0.746 0.023 -0.018 0.050 0.026 -0.100 -0.023 0.097
## tm:hrngd1_Y 0.001 -0.411 -0.256 0.008 -0.008 0.016 -0.011 0.002 -0.009
| WIN_Threshold_Avg | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | -3.01 | -11.08 – 5.06 | 0.465 |
| time | 0.43 | 0.37 – 0.49 | <0.001 |
|
hearingaids1 baseline [Yes] |
4.09 | 3.26 – 4.92 | <0.001 |
| educ | -0.12 | -0.25 – 0.01 | 0.072 |
| gender [2] | -1.96 | -2.59 – -1.32 | <0.001 |
| age | 0.18 | 0.12 – 0.24 | <0.001 |
| race [White] | 1.46 | 0.54 – 2.37 | 0.002 |
| ADI NATRANK | 0.01 | -0.00 – 0.03 | 0.066 |
|
noise censusblock2020 mean |
0.02 | -0.10 – 0.14 | 0.779 |
|
time × hearingaids1 baseline [Yes] |
0.21 | 0.07 – 0.36 | 0.004 |
| Random Effects | |||
| σ2 | 2.85 | ||
| τ00 ID | 8.02 | ||
| ICC | 0.74 | ||
| N ID | 390 | ||
| Observations | 1102 | ||
| Marginal R2 / Conditional R2 | 0.391 / 0.840 | ||
# Extract fixed effects from the model
fixed_effects <- fixef(model_hearingaids1_baseline)
# Compute intercepts for hearing aid groups
intercept_no_hearingaid <- fixed_effects["(Intercept)"] # -3.00838 (Reference group)
intercept_yes_hearingaid <- intercept_no_hearingaid + fixed_effects["hearingaids1_baselineYes"]
# Create a new data frame for predictions
new_data <- expand.grid(
time = seq(0, 12, by = 1.5), # Time from 0 to 12
hearingaids1_baseline = c("No", "Yes") # Matches factor levels
)
# Compute predictions manually
new_data <- new_data %>%
mutate(
predicted = case_when(
hearingaids1_baseline == "No" ~ intercept_no_hearingaid + fixed_effects["time"] * time,
hearingaids1_baseline == "Yes" ~ intercept_yes_hearingaid +
(fixed_effects["time"] + fixed_effects["time:hearingaids1_baselineYes"]) * time
)
)
# Plot using ggplot2
ggplot(new_data, aes(x = time, y = predicted, color = hearingaids1_baseline)) +
geom_line(size = 1) +
geom_point(size = 2) +
theme_minimal() +
labs(
title = "Predicted values of WIN_Threshold_Avg by Hearing Aid Status",
x = "Time",
y = "WIN_Threshold_Avg",
color = "Hearing Aid Status"
) +
theme(legend.position = "top")# Print intercepts with titles
cat(sprintf("Intercept for No Hearing Aid: %.4f\n", intercept_no_hearingaid))## Intercept for No Hearing Aid: -3.0084
## Intercept for Yes Hearing Aid: 1.0840
# Extract fixed effects from the model
fixed_effects <- fixef(model_hearingaids1_baseline)
# Compute mean values for continuous covariates using the correct dataset
mean_educ <- mean(clean_data_hearingaids1_baseline$educ, na.rm = TRUE)
mean_age <- mean(clean_data_hearingaids1_baseline$age, na.rm = TRUE)
mean_ADI <- mean(clean_data_hearingaids1_baseline$ADI_NATRANK, na.rm = TRUE)
mean_noise <- mean(clean_data_hearingaids1_baseline$noise_censusblock2020_mean, na.rm = TRUE)
# Compute proportion of White participants
mean_raceWhite <- mean(clean_data_hearingaids1_baseline$race == "White", na.rm = TRUE)
# Find the most common gender
most_common_gender <- as.numeric(names(sort(table(clean_data_hearingaids1_baseline$gender), decreasing = TRUE)[1]))
# Compute the covariate-adjusted base intercept for the reference group (i.e., No Hearing Aid)
intercept_no_hearingaid <- fixed_effects["(Intercept)"] +
fixed_effects["educ"] * mean_educ +
fixed_effects["age"] * mean_age +
fixed_effects["ADI_NATRANK"] * mean_ADI +
fixed_effects["noise_censusblock2020_mean"] * mean_noise +
fixed_effects["raceWhite"] * mean_raceWhite
# Adjust for gender if the most common gender is coded as 2 (e.g., Female)
if (most_common_gender == 2) {
intercept_no_hearingaid <- intercept_no_hearingaid + fixed_effects["gender2"]
}
# Adjust intercept for "Yes" hearing aid group
intercept_yes_hearingaid <- intercept_no_hearingaid + fixed_effects["hearingaids1_baselineYes"]
# Create a new data frame for predictions
new_data <- expand.grid(
time = seq(0, 12, by = 1.5),
hearingaids1_baseline = c("No", "Yes") # Ensure factor levels match dataset
)
# Compute predictions, holding covariates constant
new_data <- new_data %>%
mutate(
predicted = case_when(
hearingaids1_baseline == "No" ~ intercept_no_hearingaid + fixed_effects["time"] * time,
hearingaids1_baseline == "Yes" ~ intercept_yes_hearingaid +
(fixed_effects["time"] + fixed_effects["time:hearingaids1_baselineYes"]) * time
)
)
# Plot the predicted trajectories
ggplot(new_data, aes(x = time, y = predicted, color = hearingaids1_baseline)) +
geom_line(size = 1) +
geom_point(size = 2) +
theme_minimal() +
labs(
title = "Predicted WIN_Threshold_Avg by Hearing Aid Status",
x = "Time (Years)",
y = "WIN_Threshold_Avg (Higher = Worse Hearing)",
color = "Hearing Aid Status"
) +
theme(legend.position = "top")# Print the adjusted intercepts
cat(sprintf("Intercept for No Hearing Aid (adjusted): %.4f\n", intercept_no_hearingaid))## Intercept for No Hearing Aid (adjusted): 8.7330
## Intercept for Yes Hearing Aid (adjusted): 12.8254