← Methods repository
concept

Primary Non-Adherence and Treatment Initiation

The operational distinction between a medication being prescribed/ordered and actually being dispensed, picked up, or administered, where failure of that first fill or first administration (primary non-adherence) silently removes patients from any "first-fill" exposure cohort and selects a more adherent population.

Exposure_Definitionexposure_definitionprimary-non-adherenceprescription-abandonmenttreatment-initiationfirst-fille-prescribingpharmacoepidemiology
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

Primary non-adherence describes what happens when a doctor writes a prescription for a drug but the patient never goes to the pharmacy to fill it — the medication is ordered but the bottle is never picked up. To measure this you need two data layers linked together: the electronic order that the doctor sent, plus the pharmacy dispensing record that shows whether a fill actually happened. A claims database alone cannot reveal this gap, because it only records fills that occurred, not prescriptions that were ignored. This is different from secondary non-adherence, where the patient fills the prescription at least once but later stops taking the drug consistently.

Primary non-adherence

is the gap between the moment a clinician prescribes or orders a drug and the moment the patient actually starts it — fills the prescription at a pharmacy, picks up the dispensed product, or (for administered products) receives the first dose. A patient who is prescribed a statin but never fills it is a primary non-adherer; this is categorically different from a patient who fills once and then stops (persistence) or fills sporadically (secondary non-adherence, measured by PDC/MPR). The reported magnitude is large and consistent: ~28% of new e-prescriptions were never dispensed within the index period in a 195,930-prescription analysis (Fischer 2010), and ~31% of newly prescribed medications in primary care were never filled (Tamblyn 2014). "Initiation" is the mirror image: the point at which exposure truly begins and time zero can legitimately be set.

Core conceptual distinction

The decisive fact — and the reason this is a discrete catalog entry rather than a footnote to exposure-episode construction — is that administrative claims data structurally cannot measure primary non-adherence. Claims record dispensings, not orders. The denominator you need (everyone who was prescribed) is invisible in a claims database; you only ever observe the numerator's survivors (those who filled at least once). Measuring primary non-adherence therefore requires a source that captures the order: an e-prescribing network (Surescripts), EHR computerized provider order entry (CPOE), or an integrated delivery system's prescribing record, linked to fill/administration data. Without that order layer you can measure secondary non-adherence among fillers and nothing about the people who never filled. Two further sub-distinctions matter: (1) dispensed vs picked up — a pharmacy can adjudicate and reverse a claim when the patient never collects the drug (prescription abandonment), so a raw paid pharmacy claim is not proof of pickup unless reversals are netted out; (2) dispensed vs administered — for buy-and-bill infusibles, injectables, and in-office products, a pharmacy fill is not initiation; the J-code/procedure on a service date or the EHR medication administration record (MAR) is. A vialed biologic that is dispensed but never infused is initiation failure, not initiation.

Pros, cons, and trade-offs

- vs PDC / MPR (secondary-adherence measures): PDC and MPR are computed conditional on having filled at least once — they are blind to primary non-adherers by construction and so systematically overstate population-level drug exposure. Capturing primary non-adherence + initiation gives the complete picture from order to discontinuation. Cost: it requires an order source PDC/MPR do not (PDC runs on claims alone). Prefer this concept when the policy or effectiveness question concerns uptake, abandonment, or the validity of "first-fill" time zero; prefer PDC/MPR for ongoing-coverage adherence among established users. - vs simply defining index = "first fill" and moving on (the silent default in most new-user/ACNU studies): explicitly modeling primary non-adherence reveals that the first-fill cohort is a selected, more-adherent subset — the ~25-30% who never filled are dropped before time zero, a healthy-adherer-flavored selection that can bias even a methodologically clean comparative-effectiveness contrast. Cost: more data, an order-to-fill window to defend, and extra diagnostics. Prefer explicit modeling whenever the exposure decision (not just on-treatment behavior) could differ across the comparison groups. - vs an intention-to-treat "as-prescribed" estimand from e-Rx alone: counting the order as exposure regardless of fill answers a prescriber-behavior question but misclassifies never-fillers as treated, biasing effect estimates toward the null for any drug that works only if taken. Prefer the as-prescribed estimand only when the question is explicitly about the prescribing decision (e.g., a prescriber-level intervention), and say so in the estimand.

When to use

When the research question concerns medication uptake, prescription abandonment, or the first-fill rate itself; when validating whether a new-user/ACNU "time zero = first fill" cohort is selected on adherence; when an order source (Surescripts, EHR CPOE, integrated-system Rx) is linkable to dispensing/administration; for PQA-style initiation/abandonment quality measurement; and for any HTA or payer analysis where modeled uptake drives budget impact.

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

- You have claims only. Do not report a "primary non-adherence rate" from a claims database — there is no order denominator, so any such number is uninterpretable and will mislead reviewers. With claims you can only study secondary non-adherence among fillers. State this as a hard limitation, not something a workaround fixes. - The order source is incomplete. Surescripts misses paper/written and verbal prescriptions; an EHR captures only in-network orders. If a non-trivial share of prescribing bypasses the captured channel, "never filled" conflates true abandonment with prescriptions that were routed elsewhere — differential by clinic, payer, or drug. - For administered products, when only the pharmacy fill is checked. Declaring initiation on a buy-and-bill fill that was never infused overcounts initiation and miscounts the true initiation-failure population. - When the order-to-fill window is left implicit. A 7-day window labels mail-order and prior-authorization delays as non-adherence; a 365-day window absorbs genuine abandonment into "delayed fill." The window is an analytic choice that must be pre-specified and varied in sensitivity analysis.

Data-source operational depth

- Claims only (FFS, commercial, MA): Cannot measure primary non-adherence at all — no order denominator. Worse, in Medicare Advantage and capitated arrangements, fee-for-service pharmacy claims may be absent, so even fill capture among the supposedly-treated is incomplete; "no fill" can be MA-only missing person-time rather than true non-fulfillment. Workaround: restrict to enrollees with complete Part D (or commercial pharmacy benefit) and use claims for secondary adherence only. - EHR with CPOE / e-prescribing: the order is visible (good), but the fill is not unless pharmacy data are linked. Use the Surescripts fill-status response, payer pharmacy claims, or integrated-pharmacy dispensings to close the loop. Failure mode: external-care leakage — a patient who fills at a pharmacy outside the linked network looks like a non-adherer. - Surescripts / e-Rx network: the standard denominator source. Failure modes: transmission failures, cancel/replace messages that double-count, and invisibility of paper/verbal prescriptions and free-text orders; reconcile the new-prescription event before treating it as the denominator. - Linked claims–EHR (and integrated systems such as Kaiser, VA, Geisinger): the gold standard — order from EHR/e-Rx, fill from claims/pharmacy, administration from MAR/J-codes. The central reconciliation task is date alignment: a fill may post 7, 30, or 90 days after the order; pre-specify the index window and test 7/30/90-day cuts. For infusibles, require a J-code/administration on a service date, not the buy-and-bill fill, to confirm initiation.

Worked example (e-Rx linked to claims)

Question: primary non-adherence to newly e-prescribed oral anticoagulants, and its effect on a downstream "new-user" cohort. (1) Denominator: every new e-prescription (`erx_date`, `drug_class='DOAC'`, `new_start_flag=1` so refills/continuations are excluded) for an adult with continuous medical + pharmacy enrollment in the 90 days before and the index window after `erx_date` — enrollment is required so that "no fill" is observed, not missing. (2) Numerator (primary non-adherer): no DOAC pharmacy dispense (`fill_date` within `[erx_date, erx_date + W]`), netting out reversed/abandoned claims. (3) Primary non-adherence rate = numerator / denominator; with W = 30 days suppose 1,000 of 4,000 new e-Rx never filled → 25.0%. (4) Window sensitivity: W = 7 days → 1,420/4,000 = 35.5% (counts slow legitimate fills as non-adherence); W = 90 days → 860/4,000 = 21.5% (absorbs true abandonment). Report all three. (5) Selection-bias link: the 3,000 fillers are the exact population a conventional new-user/ACNU study would index on "first fill" — so that downstream cohort has silently excluded the 25% never-fillers and is selected toward adherence; flag this when interpreting the comparative estimate. (6) For an injectable arm, replace step (2) with a J-code administration on a service date so a dispensed-but- never-infused vial is correctly counted as initiation failure.

Worked example

Scenario

A cardiologist sends three e-prescriptions for a blood thinner (a DOAC) on 2023-03-01. We want to see which patients started the drug (filled it within 30 days) and which were primary non-adherers (never filled). The pharmacy claims table covers the same time window. Patient 2001 fills promptly, patient 2002 fills late (outside the 30-day window), and patient 2003 never fills at all.

Dataset

Caption

Left table: electronic prescriptions sent by the doctor. Right table: pharmacy fills found in claims (reversed = claim later voided, meaning the patient left without the drug).

Erx Table
person_iderx_datedrug_classnew_start_flag
20012023-03-01DOAC1
20022023-03-01DOAC1
20032023-03-01DOAC1
Rx Table
person_idfill_datedrug_classdays_supplyreversed
20012023-03-10DOAC30
20022023-04-15DOAC30
20032023-03-05DOAC30True

Steps

  • The denominator is all three e-prescriptions written on 2023-03-01 — this is the group the doctor intended to treat.

  • For each order, look for a pharmacy fill for the same person, same drug class, that is NOT reversed, and falls within 30 days of 2023-03-01 (i.e., on or before 2023-03-31).

  • Patient 2001 filled on 2023-03-10 — that is 9 days after the prescription, within the 30-day window, and the claim was not reversed. Patient 2001 INITIATED the drug.

  • Patient 2002 filled on 2023-04-15 — that is 45 days after the prescription, outside the 30-day window. Under a 30-day rule, patient 2002 is counted as a primary non-adherer (a 90-day window would reclassify them as a late initiator).

  • Patient 2003 has a fill record dated 2023-03-05, but the reversed flag is true — the pharmacy voided that claim, meaning the patient did not actually take the drug home. No valid fill exists. Patient 2003 is a primary non-adherer (prescription abandonment at the counter).

  • Primary non-adherence rate = 2 never-filled orders out of 3 total orders = 2/3 = 67%. Note: this small example is illustrative; real studies with thousands of prescriptions typically find 25-35% primary non-adherence.

Result

Label

Primary non-adherence rate (30-day window): 2 of 3 patients never filled = 67% (illustrative example; real-world rates ~25-35%)

Value

0.667

Timeline Spec

Title

Primary non-adherence: prescription written vs. fill received (30-day window)

Window
Start

2023-03-01

End

2023-03-31

Label

30-day order-to-fill window

Events
  • Label

    Rx written (all 3 patients)

    Start

    2023-03-01

    Length Days

    1

    Quantity

    e-prescription order date

  • Label

    Patient 2001 fills (day 9)

    Start

    2023-03-10

    Length Days

    30

    Quantity

    30 days_supply — valid fill

  • Label

    Patient 2003 reversed fill (day 4)

    Start

    2023-03-05

    Length Days

    1

    Quantity

    voided — abandonment at counter

Spans
  • Kind

    covered

    Start

    2023-03-01

    End

    2023-03-31

    Label

    30-day window: patient 2001 fills on day 9 — initiates

  • Kind

    gap

    Start

    2023-03-01

    End

    2023-03-31

    Label

    Patient 2003: prescription written, reversed fill only — never fills — primary non-adherence

  • Kind

    unexposed

    Start

    2023-03-01

    End

    2023-04-15

    Label

    Patient 2002: fills on day 45 — outside 30-day window — counted as non-adherer under 30-day rule

Result
Label

2 of 3 patients never filled within 30-day window = primary non-adherence rate 0.67

Value

0.667

Caption

Timeline showing one prescription date (2023-03-01) and three patient outcomes: patient 2001 fills within the 30-day window (initiates), patient 2003 shows a reversed fill at the counter but never takes the drug home (abandonment), and patient 2002 fills 45 days later, outside the window.

Alt Text

Horizontal timeline from 2023-03-01 to beyond 2023-03-31. A vertical marker on March 1 labels the e-prescription order for all three patients. A green fill bar for patient 2001 begins March 10 inside the window. A small red stub on March 5 marks patient 2003 reversed fill. Patient 2002 has no bar inside the window. The 30-day boundary is drawn as a dashed vertical line at March 31.

Runnable example

python implementation

Primary non-adherence (oral/self-administered) by anti-joining e-prescriptions to dispensings. Required inputs (already cleaned, de-duplicated, restricted to enrolled person-time): erx : new e-prescription orders -> person_id, erx_date (datetime),...

import pandas as pd

def primary_non_adherence(erx: pd.DataFrame, rx: pd.DataFrame,
                          drug_class: str, window_days: int = 30) -> tuple[pd.DataFrame, float]:
    # Denominator: one row per new e-prescription for the target class.
    orders = erx[(erx["drug_class"] == drug_class) & (erx["new_start_flag"] == 1)].copy()

    # Eligible fills: same class, NOT reversed/abandoned, within [erx_date, erx_date + window].
    fills = rx[(rx["drug_class"] == drug_class) & (~rx["reversed"])][["person_id", "fill_date"]]
    m = orders.merge(fills, on="person_id", how="left")
    in_window = (m["fill_date"] >= m["erx_date"]) & \
                (m["fill_date"] <= m["erx_date"] + pd.Timedelta(days=window_days))

    # An order is "filled" if at least one eligible fill falls in its window.
    m["filled"] = in_window
    filled_per_order = m.groupby(orders.index).agg(filled=("filled", "any"))
    orders = orders.join(filled_per_order)
    orders["primary_non_adherent"] = ~orders["filled"].fillna(False)

    rate = orders["primary_non_adherent"].mean()
    return orders[["person_id", "erx_date", "primary_non_adherent"]], float(rate)
r implementation

Primary non-adherence via e-Rx-to-dispense anti-join, data.table. Inputs mirror the Python version: erx : person_id, erx_date (Date), drug_class, new_start_flag (1L = new start) rx : person_id, fill_date (Date), drug_class, days_supply, reversed (logical)...

library(data.table)

primary_non_adherence <- function(erx, rx, drug_class, window_days = 30L) {
  setDT(erx); setDT(rx)

  orders <- erx[drug_class == ..drug_class & new_start_flag == 1L]
  orders[, order_id := .I]

  fills <- rx[drug_class == ..drug_class & reversed == FALSE, .(person_id, fill_date)]

  # Non-equi join: a fill is eligible if erx_date <= fill_date <= erx_date + window.
  orders[, win_end := erx_date + window_days]
  hit <- fills[orders, on = .(person_id, fill_date >= erx_date, fill_date <= win_end),
               .(order_id = i.order_id), nomatch = NULL, allow.cartesian = TRUE]
  orders[, filled := order_id %in% unique(hit$order_id)]
  orders[, primary_non_adherent := !filled]

  list(per_order = orders[, .(person_id, erx_date, primary_non_adherent)],
       rate = orders[, mean(primary_non_adherent)])
}