Skip to content

Evaluate the amount of of hypercortisolism severity, could mediate obesity effects #79

@davebridges

Description

@davebridges

Gap 7: Hypercortisolism severity and disease duration not adjusted — may explain BP attenuation as exposure difference rather than obesity-related protection

Labels: reviewer-response analysis data-extraction priority-medium

Reviewer summary

The BP attenuation in obese Cushing's patients is interpreted as biological protection. Reviewer's alternative: obese patients may present earlier (weight gain triggers workup faster) and therefore have shorter disease duration or lower cortisol burden at the time of BP measurement. Smaller BP elevations would then be an exposure difference, not an obesity-mediated biological effect. Proposes extracting pre-op cortisol assays, harmonizing to xULN, deriving a "Hypercortisolism Severity Index" (HSI), and adjusting the interaction for HSI and duration. Option 2: longitudinal trajectory model with cortisol AUC.

My critique of the critique

Legitimate:

  • Active-disease-severity confounding is a genuine category of concern separate from treatment confounding (Gap 4) or assay drift (Gap 6). It has not been addressed by any existing sensitivity analysis.
  • Duration of exposure to hypercortisolism is what builds cardiovascular remodeling; even if peak cortisol is matched, duration may not be.
  • Cortisol assay values are almost certainly already in the EHR extract (they're how Cushing's is diagnosed). This is feature engineering on existing data, not a new extraction pipeline.

Overstated or misframed:

  • "Hypercortisolism Severity Index (HSI)" is a term the reviewer invented. There is no established HSI in the endocrinology literature. Calling it that in the response would give unearned credibility to an ad hoc construct. Better framing: "multiples of ULN for the most severe pre-op cortisol assay (UFC, LNSC, or post-dex) available within 90 days of BP measurement."
  • The reviewer's own refs 1–3 disagree on whether cortisol burden correlates with BP response in Cushing's. Refs 1, 2 say yes; ref 3 says no. This weakens their argument: if the cortisol→BP relationship is inconsistent in the literature, then even if burden differs by stratum, the translation to differential BP is uncertain. Worth noting in the response.
  • Direction of bias is not obvious. Reviewer assumes obese patients have lower cortisol burden because they present earlier. Equally plausible: they have higher tissue-level cortisol via adipose 11β-HSD1 amplification, or similar burden because adiposity itself masks mild hypercortisolism and delays diagnosis. Empirical check required.
  • Option 2 (longitudinal trajectory with cortisol AUC) is scope creep. Defer.

Critical structural point this analysis requires:

Cortisol values exist only for Cushing's cases, not for controls. HSI and duration covariates therefore cannot be added to the primary Cushings * Obesity interaction model — the covariates are undefined for the reference arm.

This sensitivity analysis must be restructured as a within-Cushing's analysis: among Cushing's patients, does the BP difference between obese and lean cases persist after adjusting for cortisol burden and disease duration? The baseline comparison is now "obese Cushing's vs lean Cushing's" (no controls), and the question shifts from "does obesity modify the Cushing's effect on BP?" to "among patients with Cushing's, is obesity associated with lower BP at matched cortisol exposure?"

This is a different statistical question than the primary analysis and the framing in the manuscript must be careful not to imply the within-Cushing's result directly replaces the primary interaction test.

What needs to change

A. Data extraction — cortisol assays + duration proxy

Cortisol assays (likely already in the EHR lab extract):

  • 24-hour urinary free cortisol (UFC) — LOINC 2147-7
  • Late-night salivary cortisol (LNSC) — LOINC 72097-0, 72098-8
  • Post-dexamethasone cortisol — identify via order text (1mg or 8mg dex suppression test)
  • Morning serum cortisol — LOINC 2143-6
  • ACTH — LOINC 2141-0

For each Cushing's case, identify the most recent pre-operative value within 90 days of the BP measurement date. If multiple assay types are available, prioritize UFC > LNSC > post-dex > random cortisol for severity ranking.

Harmonization to xULN (per assay-specific ULN from reference lab metadata or published values):

  • UFC: ULN varies by assay (~50–80 µg/24hr for most commercial LC-MS/MS); compute x̄ULN.
  • LNSC: ULN typically ~4 nmol/L (≈145 ng/dL) for LC-MS/MS; x̄ULN.
  • Post-dex: ULN 1.8 µg/dL (50 nmol/L); x̄ULN.
  • Use maximum xULN across available assays per patient as the severity summary.

Duration proxy:

  • Time from first Cushing's-consistent ICD code (E24.0, 255.0) to surgery date, in months. Imperfect (ICD code doesn't equal symptom onset), but extractable.
  • Secondary proxy if available: time from first documented Cushing's-related symptom note. Likely too noisy in structured EHR data.
library(dplyr)
library(lubridate)

# ULN reference values (verify with Michigan Medicine reference lab)
uln_ref <- tibble(
  assay      = c("UFC", "LNSC", "post_dex", "morning_cortisol"),
  uln_value  = c(50,    4,      1.8,        25),  # representative values
  uln_units  = c("ug/24h", "nmol/L", "ug/dL", "ug/dL")
)

# For each Cushing's case, pull the most recent pre-op cortisol per assay within 90 days
cortisol_preop <- cortisol_labs |>
  inner_join(cases |> select(DeID_PatientID, cushings_procedure, bp_index_date),
             by = "DeID_PatientID") |>
  filter(lab_date <= cushings_procedure,
         as.numeric(bp_index_date - lab_date) <= 90) |>
  group_by(DeID_PatientID, assay) |>
  slice_max(lab_date, n = 1) |>
  ungroup() |>
  left_join(uln_ref, by = "assay") |>
  mutate(x_uln = value / uln_value)

# Summary: maximum xULN across assays per patient
severity_summary <- cortisol_preop |>
  group_by(DeID_PatientID) |>
  summarise(
    max_x_uln         = max(x_uln, na.rm = TRUE),
    n_assays_avail    = n(),
    has_ufc           = any(assay == "UFC"),
    has_lnsc          = any(assay == "LNSC"),
    has_post_dex      = any(assay == "post_dex"),
    .groups           = "drop"
  )

# Duration proxy: first Cushing's ICD code to surgery
duration_proxy <- diagnoses |>
  filter(str_detect(icd_code, "^E24\\.0|^255\\.0")) |>
  group_by(DeID_PatientID) |>
  summarise(first_cushings_dx = min(dx_date), .groups = "drop") |>
  inner_join(cases |> select(DeID_PatientID, cushings_procedure),
             by = "DeID_PatientID") |>
  mutate(
    duration_months = as.numeric(cushings_procedure - first_cushings_dx) / 30.44
  )

# Merge into Cushing's BP data
bp_cushings <- bp.data |>
  filter(Cushings == 1) |>
  left_join(severity_summary, by = "DeID_PatientID") |>
  left_join(duration_proxy |> select(DeID_PatientID, duration_months),
            by = "DeID_PatientID")

B. Descriptive — does severity or duration actually differ by obesity stratum?

This is the key diagnostic. If obese and lean Cushing's patients have similar cortisol xULN and similar disease duration, the confounding argument is largely defused without further modeling.

bp_cushings |>
  mutate(obese = BMI >= 30) |>
  group_by(obese) |>
  summarise(
    n                  = n(),
    n_with_cortisol    = sum(!is.na(max_x_uln)),
    median_x_uln       = median(max_x_uln, na.rm = TRUE),
    iqr_x_uln_lo       = quantile(max_x_uln, 0.25, na.rm = TRUE),
    iqr_x_uln_hi       = quantile(max_x_uln, 0.75, na.rm = TRUE),
    median_duration_mo = median(duration_months, na.rm = TRUE),
    mean_duration_mo   = mean(duration_months, na.rm = TRUE)
  )

Test for stratum differences with Mann–Whitney on xULN and duration.

C. Within-Cushing's interaction model

Among Cushing's cases only, does BP response differ by obesity stratum after adjusting for severity and duration?

library(broom)

lm.map.within.cushings <- lm(
  MAP_imputed ~ GenderCode + RaceEthnicity + AgeInYears +
                Obesity + max_x_uln + duration_months,
  data = bp_cushings
)

tidy(lm.map.within.cushings, conf.int = TRUE) |>
  filter(term == "ObesityObese")

This is the coefficient that answers "among Cushing's patients with matched cortisol burden and duration, is obesity associated with lower BP?" If the obesity coefficient remains negative and significant, the attenuation survives severity/duration adjustment. If it moves toward zero, exposure differences explain part of it.

D. Bayesian parallel (recommended — n will be small)

Within-Cushing's BP analysis will have at most n ≈ 306 (the BP-available subset), and the number with cortisol data within 90 days will be smaller still. Weakly informative priors stabilize the estimate.

library(brms)

priors <- c(
  prior(normal(0, 10), class = "b"),
  prior(normal(0, 15), class = "b", coef = "ObesityObese"),
  prior(student_t(3, 0, 15), class = "sigma")
)

fit.map.within.cushings <- brm(
  MAP_imputed ~ GenderCode + RaceEthnicity + AgeInYears +
                Obesity + max_x_uln + duration_months,
  data   = bp_cushings,
  prior  = priors,
  family = gaussian(),
  chains = 4, cores = 4, iter = 4000
)

draws <- as_draws_df(fit.map.within.cushings)
mean(draws$b_ObesityObese < 0)         # P(obesity associated with lower MAP)
mean(draws$b_ObesityObese < -5)        # P(attenuation ≥ 5 mmHg)

Reportable as: "Among Cushing's patients, after adjustment for cortisol xULN and disease duration, the posterior probability that obesity is associated with lower MAP is X%, with Y% probability the attenuation exceeds 5 mmHg."

E. Manuscript text

Methods (new paragraph, or extension of medication section in Gap 4):

"To assess whether the attenuation of Cushing's-related blood pressure elevation in obese patients reflected exposure differences rather than obesity-mediated biology, we extracted pre-operative cortisol assay values (urinary free cortisol, late-night salivary cortisol, post-dexamethasone serum cortisol) within 90 days of the BP measurement, harmonized each to multiples of the assay-specific upper limit of normal, and summarized severity as the maximum xULN across available assays per patient. Disease duration was proxied by the interval from the first Cushing's-related ICD code to surgery. Because these measures are defined only for Cushing's cases, a within-Cushing's analysis compared blood pressure between obese and lean Cushing's patients adjusting for severity and duration. This sensitivity analysis addresses a different question than the primary case-control interaction test and is reported as supporting evidence for the biological interpretation."

Results (new short paragraph in BP section or as part of sensitivity analyses):

"Among Cushing's patients, median maximum cortisol xULN was [X] in obese patients vs [Y] in lean patients (p = [P]), and median disease duration was [M] vs [N] months (p = [P]). After adjustment for severity and duration within the Cushing's cohort, obesity remained [associated / not associated] with lower MAP ([Z] mmHg, 95% CI [A] to [B]), [supporting / not supporting] the interpretation of biological attenuation rather than exposure differences."

Discussion (limitations + biological interpretation):

"Hypercortisolism severity and disease duration were not included as covariates in the primary case-control interaction models because these measures are undefined for the non-Cushing's reference arm. Within the Cushing's cohort, obese and lean patients had [similar / differing] cortisol xULN and duration, and the obesity-BP association [persisted / attenuated] after adjustment (Table 4 / Supplementary Table S[N]). This supports the interpretation that the observed BP attenuation reflects [biological modification / a combination of biological modification and exposure differences]."

Replace (per reviewer's text suggestion):

"This suggests that obesity may have a protective effect on Cushing's induced hypertension."

with: "Attenuated clinic blood pressure differences were observed in patients with obesity. Within the Cushing's cohort, this pattern [persisted / did not persist] after adjustment for cortisol severity and disease duration (Supplementary Table S[N]), [supporting biological modification / suggesting exposure differences contribute]."

Abstract (hedge per reviewer):

"Cushing's disease was associated with smaller clinic blood pressure increases in patients with obesity; this pattern [persisted / was attenuated] after adjustment for treatment and cortisol exposure."

Acceptance criteria

  • Cortisol assay values extracted for all Cushing's cases with available labs within 90 days pre-op.
  • Harmonization to xULN verified against Michigan Medicine reference lab values.
  • Duration proxy computed (first Cushing's ICD code → surgery date).
  • Supplementary table: median/IQR cortisol xULN and duration by obesity stratum within the Cushing's cohort, with p-values.
  • Within-Cushing's BP interaction analysis added to Table 4 or as a new supplementary table — clearly labeled as within-cases-only, with n reported.
  • Methods paragraph explaining why severity/duration adjustment is restricted to within-Cushing's.
  • Results sentence reporting severity/duration distributions and adjusted within-Cushing's obesity coefficient.
  • Discussion updated to reflect finding.
  • Abstract hedged.
  • Recommended given small n: Bayesian within-Cushing's model with posterior probability of attenuation persisting at matched cortisol exposure.
  • Skip longitudinal cortisol AUC trajectory analysis (Reviewer Option 2) — scope creep. Document in response letter.
  • Do not call the composite "Hypercortisolism Severity Index" or "HSI" — no such established measure exists. Use "maximum xULN across available pre-op cortisol assays" in all prose.

Notes / open questions

  • Fraction of Cushing's cases with usable cortisol values within 90 days. Unknown until extraction runs. If <50%, the within-Cushing's analysis loses power; consider widening to 180 days as a secondary sensitivity.
  • Assay heterogeneity. UFC and post-dex answer different questions (UFC = integrated cortisol production; post-dex = HPA axis suppressibility). xULN harmonization is pragmatic but not physiologically equivalent. Worth noting as a limitation of the severity summary.
  • Duration proxy is crude. ICD code date lags true symptom onset, often by 1–3 years in Cushing's. For obese patients specifically, weight gain and moon facies may trigger earlier workup, making ICD-date duration shorter than true duration. This biases the duration covariate toward understating actual exposure in obese patients, which works against the reviewer's hypothesis (obese patients look less exposed by ICD-date, so adjusting for it should tend to attenuate the obesity coefficient; if the obesity coefficient survives this adjustment, the biological interpretation is more defensible). Worth explicitly noting this direction of bias.
  • ACTH. Could be used as a secondary marker of disease severity, but adds complexity without clear analytic gain. Skip unless descriptive data suggest it matters.

References

  1. Duration of hypercortisolism and hypertension development (Reviewer ref 1).
  2. Severity of hypercortisolism and hypertension (Reviewer ref 2).
  3. No correlation between cortisol and BP response (Reviewer ref 3) — worth citing to acknowledge the mixed literature.

(Locate full cites before response letter. Note: the reviewer's "Hypercortisolism Severity Index" does not appear to be a published measure; do not cite it as such.)

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions