1 Survival Analysis Summary

Kaplan-Meier survival curves were generated to examine differences in time to CDR progression (CDR > 0) based on hearing-related groups.

  • Hearing Impairment (WIN_CAT_baseline): Impaired hearing had a significantly faster progression rate compared to normal hearing (p = 0.03).

  • Hearing Handicap (hhi_category_baseline): No significant difference between those with and without hearing handicap (p = 0.30).

  • Hearing Aid Use (hearingaids1_baseline): No significant difference in cognitive decline progression between hearing aid users and non-users (p = 0.90).

Conclusion: Hearing impairment was significantly associated with cognitive decline progression, but hearing aid use and self-reported hearing handicap were not.

#Cox Proportional Hazards Model - Covariates Controlled: Age, Gender, Education, Race - Key Results: -Hearing Impairment (WIN Category) HR = 0.81 (p = 0.17) → No significant increased risk when adjusting for covariates. -HHI Handicap HR = 1.11 (p = 0.50) → No significant association with progression risk. -Hearing Aid Use HR = 0.96 (p = 0.86) → No protective effect of hearing aids. -Age & Education Older age and lower education levels were borderline significant predictors of faster progression.

Conclusion: While raw Kaplan-Meier analysis suggested hearing impairment predicts cognitive decline, adjusting for covariates in the Cox model attenuated this effect.

Note: 27 participant’s follow up dates were manually shifted as they were missing baseline otdate but having followup otdates.Their corresponding cdr values were shifted accordingly as well.

There are 192 missing HHI at baseline, 89 were imputed from FU-1 data and 83 were imputed from FU-3. There are 218 missing Words in noise average, Whenever one ear value is found it was used as the average for both. In addition, 28 for Rt ear and 103 for the left ear were imputed from their corresponding FU-1 value.

NOTE: time to progression calculation

## # A tibble: 2 × 3
##   WIN_CAT_baseline `Non-progressors` Progressors
##   <chr>                        <int>       <int>
## 1 Impaired hearing               133          95
## 2 Normal hearing                 207         104

2 Survival curve 1: Words in noise

# Fit Kaplan-Meier survival model
km_WIN <- survfit(
  Surv(time_to_progression_or_last_days, Censor_status) ~ WIN_CAT_baseline,  # Convert time to years
  data = Kaplan_wide_survival_final_matched_censor
)

# Plot survival curves with enhanced styling
ggsurvplot(
  km_WIN, 
  data = Kaplan_wide_survival_final_matched_censor,
  conf.int = TRUE,  # Show 95% confidence intervals
  pval = TRUE,      # Display log-rank test p-value
  risk.table = TRUE, # Add risk table below the plot
  risk.table.height = 0.3,  # Adjust risk table size
  break.time.by = 4,  # X-axis breaks in yearly intervals
  xlim = c(0, 12),   # Set X-axis range to 12 years
  ylim = c(0.5, 1),  # Adjust Y-axis range for better visualization
  title = "Survival Curve for Progression",
  xlab = "Survival Time (Years)",
  ylab = "Survival Probability",
  legend.title = "Hearing Impairment",
  legend.labs = c("Impaired Hearing", "Normal Hearing"),
  ggtheme = theme_minimal() +
    theme(
      plot.title = element_text(hjust = 0.5, face = "bold", size = 14, colour = "#2C3E50"),
      axis.title.x = element_text(face = "bold", colour = "#E67E22", size = 10),
      axis.title.y = element_text(face = "bold", colour = "#E67E22", size = 10),
      legend.title = element_text(face = "bold", size = 10),
      legend.position = "top"
    )
)

## P value for curve 1

## Call:
## survdiff(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     WIN_CAT_baseline, data = Kaplan_wide_survival_final_matched_censor)
## 
## n=539, 69 observations deleted due to missingness.
## 
##                                     N Observed Expected (O-E)^2/E (O-E)^2/V
## WIN_CAT_baseline=Impaired hearing 228       95     81.3      2.33      4.71
## WIN_CAT_baseline=Normal hearing   311      103    116.7      1.62      4.71
## 
##  Chisq= 4.7  on 1 degrees of freedom, p= 0.03
## # A tibble: 2 × 3
##   hhi_category_baseline `Non-progressors` Progressors
##   <fct>                             <int>       <int>
## 1 No Handicap                         281         154
## 2 Handicap                             94          60

3 Survival curve 2: HHI

## P value for curve 2

## Call:
## survdiff(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     hhi_category_baseline, data = Kaplan_wide_survival_final_matched_censor)
## 
## n=589, 19 observations deleted due to missingness.
## 
##                                     N Observed Expected (O-E)^2/E (O-E)^2/V
## hhi_category_baseline=No Handicap 435      153    158.7     0.208     0.969
## hhi_category_baseline=Handicap    154       60     54.3     0.609     0.969
## 
##  Chisq= 1  on 1 degrees of freedom, p= 0.3
## # A tibble: 2 × 3
##   hearingaids1_baseline `Non-progressors` Progressors
##                   <dbl>             <int>       <int>
## 1                     0               155         137
## 2                     1                42          36

4 Survival curve 3: Hearing aid use

## Call:
## survdiff(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     hearingaids1_baseline, data = Kaplan_wide_survival_final_matched_censor)
## 
## n=370, 238 observations deleted due to missingness.
## 
##                           N Observed Expected (O-E)^2/E (O-E)^2/V
## hearingaids1_baseline=0 292      137    136.3   0.00332     0.021
## hearingaids1_baseline=1  78       36     36.7   0.01233     0.021
## 
##  Chisq= 0  on 1 degrees of freedom, p= 0.9

5 Cox regression for WIN, HHI and hearing aid use

5.1 Cox Model 1: WIN Category Adjusted

cox_WIN_adj <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    WIN_CAT_baseline + age + gender + educ + race + ADI_NATRANK ,
  data = Kaplan_wide_survival_final_matched_cox
)
summary(cox_WIN_adj)         # Adjusted Model for WIN Category
## Call:
## coxph(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     WIN_CAT_baseline + age + gender + educ + race + ADI_NATRANK, 
##     data = Kaplan_wide_survival_final_matched_cox)
## 
##   n= 520, number of events= 192 
##    (88 observations deleted due to missingness)
## 
##                                     coef exp(coef)  se(coef)      z Pr(>|z|)  
## WIN_CAT_baselineNormal hearing -0.212710  0.808391  0.156054 -1.363   0.1729  
## age                             0.027905  1.028298  0.014922  1.870   0.0615 .
## gender                         -0.053654  0.947760  0.151780 -0.353   0.7237  
## educ                           -0.057867  0.943775  0.030442 -1.901   0.0573 .
## raceWhite                       0.356583  1.428441  0.239253  1.490   0.1361  
## ADI_NATRANK                     0.007726  1.007756  0.003406  2.268   0.0233 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                                exp(coef) exp(-coef) lower .95 upper .95
## WIN_CAT_baselineNormal hearing    0.8084     1.2370    0.5954     1.098
## age                               1.0283     0.9725    0.9987     1.059
## gender                            0.9478     1.0551    0.7039     1.276
## educ                              0.9438     1.0596    0.8891     1.002
## raceWhite                         1.4284     0.7001    0.8937     2.283
## ADI_NATRANK                       1.0078     0.9923    1.0011     1.015
## 
## Concordance= 0.593  (se = 0.025 )
## Likelihood ratio test= 18.55  on 6 df,   p=0.005
## Wald test            = 18.42  on 6 df,   p=0.005
## Score (logrank) test = 18.55  on 6 df,   p=0.005

5.2 Cox Model 2: HHI Category Adjusted

cox_HHI_adj <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    hhi_category_baseline + gender + race + educ + ADI_NATRANK + 
    age,
  data = Kaplan_wide_survival_final_matched_cox
)
summary(cox_HHI_adj)         # Adjusted Model for HHI Category
## Call:
## coxph(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     hhi_category_baseline + gender + race + educ + ADI_NATRANK + 
##         age, data = Kaplan_wide_survival_final_matched_cox)
## 
##   n= 562, number of events= 202 
##    (46 observations deleted due to missingness)
## 
##                                    coef exp(coef)  se(coef)      z Pr(>|z|)  
## hhi_category_baselineHandicap  0.107479  1.113467  0.159774  0.673   0.5011  
## gender                        -0.062726  0.939201  0.145082 -0.432   0.6655  
## raceWhite                      0.326607  1.386256  0.234657  1.392   0.1640  
## educ                          -0.045112  0.955890  0.029694 -1.519   0.1287  
## ADI_NATRANK                    0.008457  1.008493  0.003302  2.561   0.0104 *
## age                            0.036054  1.036712  0.014380  2.507   0.0122 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                               exp(coef) exp(-coef) lower .95 upper .95
## hhi_category_baselineHandicap    1.1135     0.8981    0.8141     1.523
## gender                           0.9392     1.0647    0.7067     1.248
## raceWhite                        1.3863     0.7214    0.8752     2.196
## educ                             0.9559     1.0461    0.9018     1.013
## ADI_NATRANK                      1.0085     0.9916    1.0020     1.015
## age                              1.0367     0.9646    1.0079     1.066
## 
## Concordance= 0.584  (se = 0.024 )
## Likelihood ratio test= 16.51  on 6 df,   p=0.01
## Wald test            = 16.46  on 6 df,   p=0.01
## Score (logrank) test = 16.52  on 6 df,   p=0.01

5.3 Cox Model 3: Hearing Aids Adjusted

cox_hearingaids_adj <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    hearingaids1_baseline + gender + race + educ + ADI_NATRANK + 
    age,
  data = Kaplan_wide_survival_final_matched_cox
)
summary(cox_hearingaids_adj) # Adjusted Model for Hearing Aids
## Call:
## coxph(formula = Surv(time_to_progression_or_last_days, Censor_status) ~ 
##     hearingaids1_baseline + gender + race + educ + ADI_NATRANK + 
##         age, data = Kaplan_wide_survival_final_matched_cox)
## 
##   n= 359, number of events= 164 
##    (249 observations deleted due to missingness)
## 
##                            coef exp(coef)  se(coef)      z Pr(>|z|)  
## hearingaids1_baseline -0.036021  0.964620  0.201700 -0.179   0.8583  
## gender                -0.052555  0.948802  0.166706 -0.315   0.7526  
## raceWhite              0.196657  1.217327  0.262219  0.750   0.4533  
## educ                  -0.060768  0.941042  0.034237 -1.775   0.0759 .
## ADI_NATRANK            0.003370  1.003375  0.003682  0.915   0.3601  
## age                    0.026260  1.026608  0.016336  1.607   0.1080  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##                       exp(coef) exp(-coef) lower .95 upper .95
## hearingaids1_baseline    0.9646     1.0367    0.6496     1.432
## gender                   0.9488     1.0540    0.6843     1.315
## raceWhite                1.2173     0.8215    0.7281     2.035
## educ                     0.9410     1.0627    0.8800     1.006
## ADI_NATRANK              1.0034     0.9966    0.9962     1.011
## age                      1.0266     0.9741    0.9943     1.060
## 
## Concordance= 0.567  (se = 0.028 )
## Likelihood ratio test= 7.04  on 6 df,   p=0.3
## Wald test            = 7.07  on 6 df,   p=0.3
## Score (logrank) test = 7.08  on 6 df,   p=0.3

5.3.1 Assumtpion check for WIN:

Proportional Hazards (PH) Assumption violation for ADI and race

cox_win <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    WIN_CAT_baseline + age + gender + educ + race + ADI_NATRANK, 
  data = Kaplan_wide_survival_final_matched_cox
)

# Test PH assumption
ph_test_win <- cox.zph(cox_win)
print(ph_test_win)
##                    chisq df      p
## WIN_CAT_baseline  2.1886  1 0.1390
## age               0.1479  1 0.7005
## gender            0.0507  1 0.8218
## educ              0.1234  1 0.7253
## race              3.6918  1 0.0547
## ADI_NATRANK       6.8861  1 0.0087
## GLOBAL           11.0091  6 0.0881
#ggcoxzph(ph_test_win)

5.3.2 Alternative for WIN:

No Violation of Proportional Hazards (PH) Assumption

cox_win <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    WIN_CAT_baseline + age + gender + educ , 
  data = Kaplan_wide_survival_final_matched_cox
)

# Test PH assumption
ph_test_win <- cox.zph(cox_win)
print(ph_test_win)
##                  chisq df    p
## WIN_CAT_baseline 2.378  1 0.12
## age              0.135  1 0.71
## gender           0.132  1 0.72
## educ             0.128  1 0.72
## GLOBAL           3.158  4 0.53
#ggcoxzph(ph_test_win)

5.3.3 Assumption check: ADI violates

cox_hhi <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    hhi_category_baseline + age + gender + educ + race + ADI_NATRANK, 
  data = Kaplan_wide_survival_final_matched_cox
)

# Test PH assumption
ph_test_hhi <- cox.zph(cox_hhi)
print(ph_test_hhi)
##                          chisq df      p
## hhi_category_baseline  0.73951  1 0.3898
## age                    0.41008  1 0.5219
## gender                 0.00531  1 0.9419
## educ                   1.15252  1 0.2830
## race                   5.22587  1 0.0223
## ADI_NATRANK            8.38129  1 0.0038
## GLOBAL                13.45042  6 0.0364
#ggcoxzph(ph_test_hhi)

5.3.4 Assumtpion check: ADI violates

cox_hearingaids <- coxph(
  Surv(time_to_progression_or_last_days, Censor_status) ~ 
    hearingaids1_baseline + age + gender + educ + race + ADI_NATRANK, 
  data = Kaplan_wide_survival_final_matched_cox
)

# Test PH assumption
ph_test_hearingaids <- cox.zph(cox_hearingaids)
print(ph_test_hearingaids)
##                          chisq df     p
## hearingaids1_baseline 0.803508  1 0.370
## age                   0.000887  1 0.976
## gender                2.404589  1 0.121
## educ                  0.079334  1 0.778
## race                  2.247679  1 0.134
## ADI_NATRANK           4.298750  1 0.038
## GLOBAL                7.114579  6 0.310
#ggcoxzph(ph_test_hearingaids)