← Methods repository
concept

Health-Related Quality of Life (HRQoL) Measurement

The measurement of a patient's self-reported physical, mental, and social functioning using generic or disease-specific instruments, which—when a preference-based value set is applied—yields health-state utilities on a dead(0)-to-full-health(1) scale that feed quality-adjusted life-year (QALY) accrual.

Outcome_Measurehrqolpatient-reported-outcomeutilityEQ-5DQALYvalue-setcost-utilitypreference-based
Methods reference only. Use primary source citations and local policy before applying this in a study protocol, regulatory submission, payer dossier, or clinical decision.

In plain language

Health-related quality of life (HRQoL) measurement captures how much a disease or treatment affects a patient's daily functioning — their ability to move, care for themselves, and feel well — by asking them to fill out a short questionnaire. When a scoring method called a value set is applied to those answers, the result is a single number called a utility that runs from 0 (a health state as bad as being dead) to 1 (perfect health). That utility score is the building block for calculating QALYs, which combine how long a patient lives with how well they live during that time. One important caveat: not every quality-of-life questionnaire produces a utility — some produce profile scores or index numbers that look similar but cannot be used to calculate QALYs.

Health-related quality of life (HRQoL)

is an outcome measure, not a study design: it is the operationalized assessment of how disease and treatment affect a patient's physical, psychological, and social functioning, captured by validated patient-reported instruments and scored as either a descriptive profile, a non-preference index, or a preference-based utility. The distinction among these three score types is the single most consequential decision in HRQoL work, because only preference-based utilities — anchored at 0 (a state equivalent to death) and 1 (full health), with values below 0 permitted for states worse than death — can be multiplied by survival time to produce QALYs and thus enter a cost-utility model.

Core conceptual distinction

Three things are routinely conflated and must be separated. (1) Instrument type: generic instruments (EQ-5D-3L/5L, SF-6D, HUI3, AQoL) measure a common health construct comparable across diseases and are required by most HTA reference cases; disease-specific instruments (EORTC QLQ-C30, FACT-G, KDQOL, MLHFQ) are more responsive to condition-specific change but are not directly comparable across indications and usually cannot be valued for QALYs without a mapping algorithm. (2) Score type: a profile reports multiple domain scores (e.g., the five EQ-5D dimensions, or PROMIS domain T-scores); an index collapses domains into one number with arbitrary (non-preference) weights; a utility uses a societal value set elicited by time-trade-off or standard-gamble so the number carries cardinal, QALY-ready meaning. A PROMIS Global Health T-score of 50 is not a utility and must never be treated as one. (3) Value set: the same EQ-5D-5L health-state vector "21243" maps to very different utilities under the US (Pickard 2019), England (Devlin 2018), or a country-specific value set; the value set is an analytic assumption, not a property of the patient, and it materially moves utilities, incremental QALYs, and the resulting ICER.

Pros, cons, and trade-offs

(specific & comparative, naming the alternatives). - Generic preference-based (EQ-5D) vs disease-specific profile (e.g., EORTC QLQ-C30, FACT-G): EQ-5D is QALY-ready, cross-condition comparable, and the NICE/ICER reference-case default; it is often insensitive to clinically meaningful change in narrow conditions (vision, hearing, mental health, oncology symptom burden) and shows ceiling effects in mild disease. Disease-specific profiles are more responsive but cannot feed a cost-utility analysis without mapping. Prefer EQ-5D when the deliverable is a QALY for HTA; add a disease-specific instrument when responsiveness or a clinical/labeling endpoint is the goal, and pre-specify which is primary. - Direct utility measurement vs mapping (crosswalk) from a disease-specific or claims-derived measure: Direct EQ-5D collection is preferred when feasible. Mapping (e.g., QLQ-C30→EQ-5D, or comorbidity→EQ-5D catalogs such as Sullivan/Ghushchyan) is a fallback that adds prediction error, compresses variance, and is only valid within the estimation sample's case mix — it is the only route to utilities when the substrate is administrative claims with no PRO at all. See `qaly-utility-mapping-rwe`. Prefer direct measurement; reserve mapping for retrospective data or instruments that were never valued. - Mean change vs responder/MID analysis: A mean change in utility is efficient and feeds QALYs directly but is hard for clinicians to interpret and can be driven by a few patients. A responder analysis against an anchor-based minimally important difference (MID) is interpretable and aligns with labeling but discards information and is sensitive to the MID threshold and to missingness. Report both; pre-specify the MID and its derivation. - EQ-5D-3L vs 5L: 5L reduces ceiling effects and improves discrimination but is not interchangeable with 3L; the value set and the version must match, and a 3L→5L crosswalk introduces its own error. Prefer 5L for new studies with a native 5L value set.

When to use

(clear decision rules). Use HRQoL utility measurement when the analytic question requires a QALY: cost-utility analysis, HTA submission, or any comparison where treatments trade length of life against quality of life (oncology, end-stage organ disease, chronic symptomatic conditions). Use a disease-specific HRQoL profile when the endpoint is responsiveness to a therapy's symptomatic benefit, a regulatory PRO labeling claim, or longitudinal symptom tracking. Collect HRQoL at fixed, protocol-defined assessment times (not visit-driven) whenever QALY accrual by area-under-the-curve is intended, so the time axis is interpretable.

When NOT to use — and when it is actively misleading or dangerous

(clear decision rules). - Do not compute a QALY from a non-preference instrument. Treating a PROMIS T-score, an SF-36 summary, or an unweighted index as a utility produces numbers with no cardinal meaning and an uninterpretable ICER. This is a category error, not a minor approximation. - Do not mix value sets within an analysis or silently switch from the reference-case value set; the comparison becomes value-set-driven rather than treatment-driven. - Do not analyze HRQoL change while ignoring death. In any population with non-trivial mortality, dropout is dominated by death and disease progression — i.e., missing not at random (MNAR). A complete-case mean change in utility is then biased upward in the sicker arm because the patients who died (utility effectively 0) are silently dropped. For QALYs, death must be modeled as an absorbing state with utility 0; for HRQoL change, MMRM (`mmrm-repeated-measures-rwe`) or pattern-mixture/reference-based multiple imputation (`multiple-imputation-longitudinal-rwe`) is required, and a "dead = worst state" sensitivity analysis is standard. - Do not pool proxy and self-report uncritically. Caregiver/proxy ratings systematically differ from patient self-report (often rating observable physical domains lower and psychological domains differently); proxy use that is differential by arm or disease severity is a confounder. - Do not ignore mode and recall effects (paper vs ePRO, 1-week vs 4-week recall): mixing modes or recall periods within a study introduces measurement artifact that can swamp a true effect.

Data-source operational depth

(each with real failure modes + workarounds). - Pure administrative claims (FFS or commercial): HRQoL is not measurable — there is no PRO in a claim. The only workaround is a mapping/utility-catalog approach: derive a comorbidity or diagnosis profile from claims and attach published EQ-5D decrements (e.g., Sullivan/Ghushchyan catalogs). Failure modes: the catalog's case mix must resemble yours; it captures average, not individual, utility and cannot detect within-patient change. Treat results as a population-average approximation only, never as a measured PRO. - Claims-linked PRO (e.g., SEER-MHOS, the CMS Health Outcomes Survey for Medicare Advantage): A genuine RWE substrate where a validated HRQoL instrument (the VR-12, a generic profile measure — not preference-based, so it does not yield QALY-ready utilities without a mapping algorithm) is fielded and linkable to claims and tumor registries. Failure modes: MA-only person-time lacks fee-for-service claims, so resource use and some outcomes are unobservable for exactly the enrollees who have the PRO; survey non-response is differential by health status (sicker patients respond less), biasing the sample healthy. Workarounds: survey weights and non-response adjustment (`survey-weights-complex-sampling-rwe`), and restricting cost/utilization analyses to person-time with complete claims observability. - EHR-embedded PROs (e.g., Epic/MyChart PROMIS rollouts, ambulatory oncology ePRO): PRO capture is visit-driven and discretionary, so completion is differential — sicker, more engaged, or symptomatic patients are over-represented, and a patient who leaves the system is differentially lost. Assessment timing is irregular, breaking AUC-based QALY accrual. Workarounds: define fixed assessment windows, model completion as potentially informative, and prefer linkage to confirm survival so that death-related missingness is not mistaken for loss to follow-up. - Disease registries and trial/registry extensions: The strongest substrate for protocolized HRQoL — fixed assessment schedule, adjudicated disease status, and (with a linked death index) an absorbing death state for QALYs. Failure modes: registries skew toward academic centers and consenting patients (selection), and pharmacy/cost completeness is usually weak, so link to claims for resource use and to a death index (`mortality-source-hierarchy-rwe`) for censoring.

Worked example (claims-linked PRO)

Question: mean change in EQ-5D-5L utility and 12-month QALY accrual after incident metastatic disease, comparing two systemic regimens, in a registry-of-cancer linked to Medicare claims with EQ-5D administered at index, 3, 6, 9, and 12 months. (1) Cohort: incident metastatic diagnosis (first qualifying diagnosis date = index), ≥365 days continuous A/B/D enrollment before index so baseline comorbidity (for risk adjustment and mapping fallback) is observable; restrict to non-MA person-time so claims-based covariates and resource use are real, not missing. (2) Exposure/arm: regimen from the first qualifying HCPCS/J-code administration after index (`infused-biologic-administration-capture-rwe`). (3) HRQoL scoring: convert each patient's five EQ-5D-5L item responses (mobility, self-care, usual activities, pain/discomfort, anxiety/depression, each 1–5) into the health-state vector, then apply the US Pickard (2019) value set as the reference case to obtain a utility at each assessment; pre-register that a death = 0 absorbing rule applies and that any assessment after the death date is set to 0. (4) Change model: MMRM with utility change from baseline as the response, fixed effects for arm, time (categorical), arm×time, and baseline utility, an unstructured covariance, restricted maximum likelihood — valid under MAR within the modeled covariates and arms. (5) QALY accrual: integrate utility over time by the trapezoidal rule between assessments, carrying utility to 0 from the death date (so person-time after death contributes no QALYs), then discount within-year at the reference-case rate (`discounting-costs-effects-rwe`). (6) Missing-data sensitivity: because dropout is dominated by death/progression (MNAR), repeat the QALY calculation under reference-based (jump-to-reference) multiple imputation and under a "dead = worst observed state" assumption; report how incremental QALYs move. (7) Value-set sensitivity: re-derive utilities under the England (Devlin 2018) value set to show how much of the incremental QALY is value-set-driven versus treatment-driven.

Interpreting the output

Consider the worked example: mean EQ-5D-5L utility across four COPD patients is 2.96 / 4 = 0.74, derived from the US Pickard (2019) value set. Patient P001 accrues 0.82 QALYs over one year; patient P003, who died at 6 months with utility 0.55, accrues 0.55 × 0.5 = 0.275 QALYs.

Formal interpretation: A utility of 0.74 means that, on average, this cohort's health states are valued at 74% of perfect health by the general population represented in the value set — not by the patients themselves, whose own valuations may differ (patient-derived utilities from VAS or TTO are systematically lower than those from standard-gamble or value-set methods). The utility is anchored to 0 = dead and 1 = perfect health under the chosen value set; the same five-dimension response vector would yield a different utility under the UK EQ-5D-3L Devlin (2018) set or the Canadian Xie (2016) set. Country-specific value sets are not interchangeable, and any comparison of utilities across studies must first confirm that the same value set was applied. QALY accrual treats utility as constant between measurement occasions — an approximation that becomes less defensible as intervals lengthen or health changes rapidly.

Practical interpretation: A mean utility of 0.74 in isolation is not interpretable without a minimally important difference anchor. For the EQ-5D, published MID estimates in COPD are approximately 0.08 (van Reenen 2018); a between-arm difference smaller than that threshold is unlikely to be patient-meaningful even if statistically significant. For cost-effectiveness modeling, the utility feeds QALYs, which feed the ICER denominator; if the value set choice moves the utility from 0.74 to 0.80, the incremental QALY gain changes, and so does the ICER — always run a value-set sensitivity analysis before submitting to any HTA body.

Worked example

Scenario

A registry study enrolls four patients with chronic obstructive pulmonary disease (COPD). At enrollment each patient completes the EQ-5D-5L questionnaire, and the research team applies the US value set (Pickard 2019) to convert each patient's five item responses into a utility score. The team wants to know the mean utility across the group and to illustrate how one patient's utility feeds a QALY calculation when survival time is also known.

Dataset

EQ-5D-5L utility scores at enrollment for four COPD patients. Each utility was derived from that patient's five questionnaire responses using the US value set. Survival time records how long the patient was observed (patients who died have a time less than 1.0 year).

person_ideq5d_utilitysurvival_yearsstatus
P0010.821.0alive at 1 year
P0020.681.0alive at 1 year
P0030.550.5died at 6 months
P0040.911.0alive at 1 year

Steps

  • The utility scale runs from 0 to 1: a utility of 0.82 (P001) means that the general public values that patient's health state as 82% as good as perfect health; a utility of 0.55 (P003) reflects more severe impairment.

  • Mean utility across the four patients: add the four scores (0.82 + 0.68 + 0.55 + 0.91 = 2.96) and divide by 4, giving a mean of 0.74.

  • To convert a utility into QALYs, multiply the utility by the number of years spent in that health state: P001 was alive for 1.0 year at utility 0.82, so P001 accrued 0.82 x 1.0 = 0.82 QALYs.

  • P003 died at 6 months (0.5 years), and from the moment of death the utility is set to 0 by rule — death accrues no further QALYs. P003 accrued 0.55 x 0.5 = 0.275 QALYs before death, then 0 x 0.5 = 0.00 QALYs after death, for a total of 0.275 QALYs over the 1-year window.

  • The QALY gap between P001 and P003 over one year is 0.82 - 0.275 = 0.545 QALYs, illustrating that both lower utility and shorter survival reduce a patient's QALY accrual.

Result

Mean EQ-5D utility across the four patients = 2.96 / 4 = 0.74. QALY examples: P001 (alive, utility 0.82) accrues 0.82 x 1.0 = 0.82 QALYs in one year; P003 (died at 6 months, utility 0.55) accrues 0.55 x 0.5 = 0.275 QALYs — the remaining 0.5 years contribute 0 QALYs because death is treated as a utility of 0.

Runnable example

python implementation

Score EQ-5D-5L item responses into health-state utilities using a value-set lookup, then accrue QALYs over fixed assessment times with a death=0 absorbing rule. Required inputs (post data management): pro : person_id, assess_date (datetime), mob, sc, ua,...

import pandas as pd
import numpy as np

ITEMS = ["mob", "sc", "ua", "pd", "ad"]  # EQ-5D-5L: mobility, self-care, usual activities, pain, anxiety

def state_string(df: pd.DataFrame) -> pd.Series:
    # 5-digit health-state key, e.g. responses (2,1,2,4,3) -> "21243"
    return df[ITEMS].astype(int).astype(str).agg("".join, axis=1)

def attach_utility(pro: pd.DataFrame, vset: pd.DataFrame) -> pd.DataFrame:
    pro = pro.copy()
    pro["state"] = state_string(pro)
    pro = pro.merge(vset.rename(columns={"utility": "u"}), on="state", how="left")
    if pro["u"].isna().any():       # every valid 1..5 combination must be in the value set
        raise ValueError("Unmapped EQ-5D-5L state(s); check item ranges and value-set coverage.")
    return pro

def qalys(pro: pd.DataFrame, enroll: pd.DataFrame) -> pd.DataFrame:
    # Order assessments, append a death assessment at utility 0 so post-death time accrues no QALYs.
    df = pro.merge(enroll[["person_id", "death_date"]], on="person_id", how="left")
    df = df.sort_values(["person_id", "assess_date"])
    df.loc[df["death_date"].notna() & (df["assess_date"] >= df["death_date"]), "u"] = 0.0

    out = []
    for pid, g in df.groupby("person_id"):
        g = g.sort_values("assess_date")
        d = enroll.loc[enroll.person_id == pid, "death_date"].iloc[0]
        if pd.notna(d) and d > g["assess_date"].max():
            g = pd.concat([g, pd.DataFrame({"assess_date": [d], "u": [0.0]})], ignore_index=True)
        t_years = (g["assess_date"] - g["assess_date"].iloc[0]).dt.days / 365.25
        trapezoid = getattr(np, "trapezoid", np.trapz)  # np.trapz renamed in NumPy 2.0
        qaly = trapezoid(g["u"].to_numpy(), t_years.to_numpy())   # trapezoidal AUC of utility x time
        out.append({"person_id": pid, "qaly": qaly})
    return pd.DataFrame(out)
r implementation

EQ-5D-5L utility scoring and QALY accrual in R. Inputs mirror the Python version: pro : person_id, assess_date (Date), mob, sc, ua, pd, ad (items integer 1..5) enroll : person_id, index_date, death_date (NA if alive) vset : data.frame(state = "21243",...

library(data.table)
ITEMS <- c("mob", "sc", "ua", "pd", "ad")

qalys <- function(pro, enroll, vset) {
  setDT(pro); setDT(enroll); setDT(vset)
  pro[, state := do.call(paste0, lapply(.SD, function(x) as.integer(x))), .SDcols = ITEMS]
  pro <- merge(pro, vset, by = "state", all.x = TRUE)
  if (anyNA(pro$utility)) stop("Unmapped EQ-5D-5L state(s); check item ranges / value set.")

  pro <- merge(pro, enroll[, .(person_id, death_date)], by = "person_id", all.x = TRUE)
  setorder(pro, person_id, assess_date)
  pro[!is.na(death_date) & assess_date >= death_date, utility := 0]  # post-death utility = 0

  pro[, {
    d <- enroll[person_id == .BY$person_id, death_date]
    u <- utility; a <- assess_date
    if (!is.na(d) && d > max(a)) { a <- c(a, d); u <- c(u, 0) }      # absorb to 0 at death
    ord <- order(a); a <- a[ord]; u <- u[ord]
    t <- as.numeric(a - a[1]) / 365.25
    .(qaly = sum(diff(t) * (head(u, -1) + tail(u, -1)) / 2))         # trapezoidal AUC
  }, by = person_id]
}