[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-pharmacoepidemiology":3,"mdc--4863n4-key":49,"related-repo-aws-labs-pharmacoepidemiology":2263,"related-org-aws-labs-pharmacoepidemiology":2362},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":44,"sourceUrl":47,"mdContent":48},"pharmacoepidemiology","design pharmacoepidemiologic studies for causal inference","Reason about pharmacoepidemiologic study design for causal inference from real-world data — choosing active comparator new-user designs, emulating target trials, avoiding immortal time bias, handling time-varying confounding with marginal structural models, and selecting propensity score methods. Use when the user asks to design a drug safety or effectiveness study, choose between propensity score matching vs weighting vs stratification, emulate a target trial, handle immortal time bias, apply marginal structural models, assess unmeasured confounding with E-values, select an active comparator, define a new-user cohort, or evaluate a pharmacoepidemiology study design. Triggers include \"active comparator\", \"new-user design\", \"target trial emulation\", \"immortal time bias\", \"propensity score matching\", \"IPTW\", \"marginal structural model\", \"confounding by indication\", \"E-value\", \"negative control outcomes\", \"quantitative bias analysis\", \"time-varying confounding\", \"prevalent user bias\", \"washout period\", \"landmark analysis\", \"stabilized weights\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"Research","research","tag",{"name":18,"slug":19,"type":16},"Healthcare","healthcare",{"name":21,"slug":22,"type":16},"Life Sciences","life-sciences",{"name":24,"slug":25,"type":16},"Statistics","statistics",4,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fhcls-agent-skills","2026-07-12T08:38:06.745032",null,0,[32,33,34,35,36,37,38,39,40,22,41,42,43],"agent-skills","agentcore","ai-agents","amazon-quick-desktop","claims-processing","drug-discovery","genomics","healthcare-ai","kiro","medical-imaging","risk-adjustment","strands-agents",{"repoUrl":27,"stars":26,"forks":30,"topics":45,"description":46},[32,33,34,35,36,37,38,39,40,22,41,42,43],"Agent skills for healthcare and life sciences: genomics, imaging, claims, drug discovery, and more. Works with Amazon Quick, Kiro, Amazon AgentCore, AWS Strands SDK, Claude Code, Codex, and any Agent Skills-compatible platform.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fhcls-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fpharmacoepidemiology","---\nname: pharmacoepidemiology\ndescription: Reason about pharmacoepidemiologic study design for causal inference from real-world data — choosing active comparator new-user designs, emulating target trials, avoiding immortal time bias, handling time-varying confounding with marginal structural models, and selecting propensity score methods. Use when the user asks to design a drug safety or effectiveness study, choose between propensity score matching vs weighting vs stratification, emulate a target trial, handle immortal time bias, apply marginal structural models, assess unmeasured confounding with E-values, select an active comparator, define a new-user cohort, or evaluate a pharmacoepidemiology study design. Triggers include \"active comparator\", \"new-user design\", \"target trial emulation\", \"immortal time bias\", \"propensity score matching\", \"IPTW\", \"marginal structural model\", \"confounding by indication\", \"E-value\", \"negative control outcomes\", \"quantitative bias analysis\", \"time-varying confounding\", \"prevalent user bias\", \"washout period\", \"landmark analysis\", \"stabilized weights\".\nusage: Invoke when designing, critiquing, or planning pharmacoepidemiologic studies using claims, EHR, or registry data.\nversion: 1.0.0\ntags: [skill, category:reasoning, pharmacoepidemiology, causal-inference, propensity-score, real-world-data, hcls]\n---\n\n# Pharmacoepidemiology Study Design\n\n## Overview\n\nThis skill teaches the agent how to *think* about pharmacoepidemiologic study design — the discipline of estimating causal drug effects from non-randomized real-world data (claims, EHR, registries). The core challenge is confounding: patients who receive Drug A differ systematically from those who receive Drug B, and naive comparisons conflate treatment effects with selection effects.\n\nA well-designed pharmacoepidemiology study addresses this through three pillars: (1) a **new-user active comparator design** that aligns time zero and reduces confounding by indication, (2) **propensity score methods** or **target trial emulation** to balance measured confounders, and (3) **sensitivity analyses** to probe the impact of unmeasured confounding.\n\nUse this skill to interrogate study designs, identify bias sources, and guide the user toward defensible causal inference *before* analysis code is written.\n\n## Usage\n\nInvoke this skill when the user:\n\n- Wants to estimate the effect of a drug on a clinical outcome using observational data.\n- Asks how to choose a comparator group for a drug safety or effectiveness study.\n- Needs to decide between propensity score matching, weighting, or stratification.\n- Describes a cohort design that may contain immortal time bias.\n- Asks about target trial emulation or how to map observational data to a hypothetical RCT.\n- Has time-varying treatments or confounders and needs marginal structural models.\n- Wants to assess sensitivity to unmeasured confounding (E-value, negative controls).\n- Is reviewing or critiquing a published pharmacoepidemiology study.\n\nThe agent should respond by:\n\n1. **Clarifying the causal question** — what treatment, what comparator, what outcome, what population, what time horizon.\n2. **Checking the design** — is it new-user? Is the comparator active? Is time zero aligned?\n3. **Identifying bias threats** — immortal time, confounding by indication, prevalent user bias, time-varying confounding.\n4. **Recommending a propensity score approach** — matching, IPTW, or stratification based on the study context.\n5. **Specifying sensitivity analyses** — E-value, negative controls, quantitative bias analysis.\n\n## Response Format\n\n- Lead with the direct recommendation or classification (≤3 sentences)\n- Structure as: recommendation → justification (citing specific criteria\u002Fthresholds) → caveats\n- Use tables for comparisons; bullet points for criteria lists\n- Omit background the user already knows — they asked the question\n- Target: 200-400 words unless the user requests exhaustive detail\nThe decision trees and frameworks in this skill are for internal reasoning only. Apply them to reach your conclusion, but do not reproduce them in your response. Present only the final recommendation with supporting evidence.\n\n\n## Core Concepts\n\n### 1. The New-User (Incident User) Design\n\nThe foundation of modern pharmacoepidemiology. Every study should start here.\n\n**Rules:**\n\n1. **Index date = first dispensing (or first prescription) of the study drug** after a clean washout period.\n2. **Washout period**: require 180–365 days of continuous enrollment with no dispensing of the study drug. This excludes prevalent users who may have already experienced early events or side effects.\n3. **Exclude prevalent users.** Patients already on the drug at cohort entry are a biased survivor population — they tolerated the drug long enough to still be on it. Including them introduces depletion-of-susceptibles bias.\n4. **Baseline covariates are measured before the index date.** Nothing after index date enters the propensity model.\n5. **Follow-up starts at the index date.** Time zero is the moment of treatment initiation, not some earlier eligibility date.\n\n#### Why prevalent users are dangerous\n\n| Problem | Mechanism |\n|---|---|\n| **Depletion of susceptibles** | Patients who had early adverse events already stopped the drug and are absent from the prevalent-user pool |\n| **Undefined baseline** | Covariates measured \"at baseline\" are actually post-treatment for prevalent users |\n| **Adjusted prevalence** | Duration of prior use varies, making the cohort a mixture of different exposure histories |\n\n### 2. Active Comparator Design\n\n**Rule: Compare Drug A vs Drug B, not Drug A vs no drug.**\n\nComparing treated patients to untreated patients introduces massive confounding by indication — the reason a patient receives a drug is correlated with their outcome risk. An active comparator (another drug for the same indication) ensures both groups have the indication, reducing this bias.\n\n#### Decision tree: choosing a comparator\n\n```\nStart\n│\n├── Is there another drug for the same indication?\n│     ├── Yes → Use it as the active comparator.\n│     │         Prefer a drug with similar:\n│     │         - Indication (same disease stage\u002Fseverity)\n│     │         - Channeling (similar patient profile)\n│     │         - Time trends (used in the same era)\n│     └── No  → Consider:\n│               - Non-pharmacologic standard of care\n│               - Delayed\u002Fdeferred treatment (with careful time-zero alignment)\n│               - Document residual confounding by indication as a limitation.\n│\n├── Multiple candidate comparators available?\n│     └── Prefer the one with the most clinical overlap.\n│         Run the primary analysis with the best comparator;\n│         use others in sensitivity analyses.\n│\n└── Is the comparator a drug from the same class?\n      ├── Within-class comparison → smaller confounding, but smaller effect sizes.\n      └── Between-class comparison → larger confounding, but more clinically relevant contrast.\n```\n\n### 3. Target Trial Emulation\n\nMap every observational study to a hypothetical randomized trial. This framework forces explicit specification of each design element and reveals hidden assumptions.\n\n| Target trial component | Specification in observational data |\n|---|---|\n| **Eligibility criteria** | Inclusion\u002Fexclusion applied at time zero (index date) using pre-index data only |\n| **Treatment strategies** | Initiate Drug A vs initiate Drug B (new-user design) |\n| **Treatment assignment** | Observational — handled by propensity scores or IP weighting |\n| **Follow-up start** | Index date (= treatment initiation). Must be identical for both arms |\n| **Outcome** | Same definition as the target trial; ascertained after time zero |\n| **Causal contrast** | Intention-to-treat (follow regardless of adherence) or per-protocol (censor\u002Fweight at discontinuation) |\n| **Analysis plan** | Pre-specified; registered if possible |\n\n**Critical rule:** If any component cannot be mapped cleanly, the study has a structural bias that no statistical method can fix. The most common failure is misaligned time zero (see immortal time bias below).\n\n### 4. Immortal Time Bias\n\nImmortal time is the period between cohort entry and treatment start during which the outcome *cannot* occur (because occurrence of the outcome would prevent the patient from being classified as treated). Misclassifying this time inflates survival in the treated group.\n\n**How it arises:**\n\n- Cohort entry is defined by diagnosis, but treatment starts later. The gap is \"immortal\" for the treated group — they had to survive long enough to receive treatment.\n- Comparing \"ever-treated\" vs \"never-treated\" without aligning time zero.\n\n**Solutions:**\n\n| Method | How it works | When to use |\n|---|---|---|\n| **New-user design** | Time zero = treatment initiation; no gap exists | Default — prevents the problem entirely |\n| **Landmark analysis** | Define a fixed time point (e.g., 90 days post-diagnosis); classify exposure status at the landmark; start follow-up there | When treatment timing varies and you want a common time origin |\n| **Time-varying exposure** | Model treatment as a time-dependent covariate in a Cox model; person-time before treatment counts as unexposed | When treatment can start at any time and you want to use all person-time |\n\n**Rule:** If the study compares \"ever-users\" vs \"never-users\" with follow-up starting at a time point before treatment initiation, immortal time bias is present. The new-user design eliminates it by construction.\n\n### 5. Propensity Score Methods\n\nThe propensity score (PS) is the probability of receiving treatment A (vs B) conditional on measured baseline covariates. It reduces a high-dimensional covariate space to a single balancing score.\n\n#### Estimation\n\n1. Fit a logistic regression: `treatment ~ age + sex + comorbidities + prior_meds + ...`\n2. Include all pre-index covariates that predict treatment, outcome, or both. Do NOT include instruments (variables that predict treatment but not outcome) — they increase variance without reducing bias.\n3. Check overlap: both groups should have PS distributions that substantially overlap. Trim or truncate extreme weights if needed.\n\n#### Three approaches\n\n| Method | Mechanism | Strengths | Limitations |\n|---|---|---|---|\n| **Matching (1:1, caliper)** | Pair each treated patient with the nearest untreated patient within a caliper (typically 0.2 × SD of logit-PS) | Intuitive; easy to check balance; mimics an RCT | Discards unmatched patients → reduced sample size and generalizability |\n| **IPTW (inverse probability of treatment weighting)** | Weight each patient by 1\u002FPS (treated) or 1\u002F(1−PS) (comparator) to create a pseudo-population | Uses all patients; estimates ATE; flexible | Extreme weights destabilize estimates; requires truncation or stabilized weights |\n| **Stratification** | Divide PS into quantiles (typically 5–10); estimate treatment effect within each stratum; pool | Simple; transparent | Residual confounding within strata; less precise than IPTW |\n\n#### Decision tree: which PS method?\n\n```\nStart\n│\n├── Is sample size limited or matching feasible?\n│     ├── Yes → 1:1 PS matching with caliper = 0.2 × SD(logit-PS).\n│     │         Report number matched and unmatched.\n│     └── No  → Continue.\n│\n├── Do you need the full sample (e.g., rare outcome)?\n│     ├── Yes → IPTW. Use stabilized weights. Truncate at 1st\u002F99th percentile\n│     │         if max weight > 10.\n│     └── No  → Continue.\n│\n├── Is the goal transparency and simplicity?\n│     └── PS stratification (5–10 strata). Report stratum-specific effects.\n│\n└── Multiple analyses?\n      └── Use matching as primary, IPTW as sensitivity (or vice versa).\n          Concordant results strengthen the conclusion.\n```\n\n#### Balance diagnostics\n\nAfter PS adjustment, verify covariate balance:\n\n- **Standardized mean difference (SMD)**: target \u003C 0.1 for all covariates. SMD = |mean_treated − mean_comparator| \u002F √((s²_treated + s²_comparator)\u002F2).\n- **Variance ratios**: should be between 0.5 and 2.0.\n- **Visual**: Love plot (dot plot of SMDs before and after adjustment).\n- **Do NOT use p-values** for balance assessment — they conflate balance with sample size.\n\n**Rule:** If any covariate has SMD > 0.1 after adjustment, the PS model is inadequate. Add interactions, non-linear terms, or additional covariates and re-estimate.\n\n### 6. Covariate Selection for Confounding Adjustment\n\nWhich variables to include in the propensity score or outcome model is a design decision, not a data-driven one. Get it wrong and the estimate is biased or inefficient.\n\n#### Rules for covariate inclusion\n\n1. **Include confounders** — variables that cause both treatment and outcome. These are the primary targets.\n2. **Include outcome risk factors** — variables that predict the outcome but not treatment. They reduce variance (increase precision) without introducing bias.\n3. **Exclude instruments** — variables that predict treatment but NOT outcome. Including them amplifies bias from unmeasured confounding and inflates variance.\n4. **Exclude mediators** — variables on the causal pathway between treatment and outcome. Adjusting for them blocks part of the effect you are trying to estimate.\n5. **Exclude colliders** — variables caused by both treatment and outcome (or their descendants). Conditioning on a collider opens a non-causal path and introduces bias.\n\n#### Typical covariate categories in claims data\n\n| Category | Examples | Measurement window |\n|---|---|---|\n| Demographics | Age, sex, race, region | At index date |\n| Comorbidities | Charlson\u002FElixhauser score, specific ICD-10 codes | 365 days pre-index |\n| Comedications | Concurrent drug classes (statins, antihypertensives) | 180 days pre-index |\n| Healthcare utilization | Hospitalizations, ED visits, outpatient visits, distinct prescribers | 365 days pre-index |\n| Disease severity proxies | Number of specialist visits, prior procedures, lab orders | 365 days pre-index |\n| Frailty indicators | Skilled nursing facility use, home oxygen, wheelchair claims | 365 days pre-index |\n| Calendar time | Year\u002Fquarter of index date | At index date |\n\n**Rule:** Always include a measure of healthcare utilization intensity. Patients who interact more with the healthcare system are more likely to receive new drugs and to have outcomes detected — this is a major confounder in claims data.\n\n#### Proxy variables and the healthy-user bias\n\nClaims data lack direct measures of lifestyle (smoking, BMI, exercise, diet). Patients who initiate preventive medications (e.g., statins, vaccines) tend to be healthier and more health-conscious. This **healthy-user\u002Fhealthy-adherer bias** can make new drugs appear protective simply because their users are healthier. Mitigate by:\n\n- Including preventive care markers (flu vaccination, cancer screening) as covariates.\n- Using negative control outcomes to detect residual healthy-user bias.\n- Reporting the E-value to quantify how strong unmeasured healthy-user confounding would need to be.\n\n### 7. Time-Varying Confounding and Marginal Structural Models\n\nStandard regression fails when a confounder is both:\n- Affected by prior treatment (e.g., lab values change because of the drug), AND\n- A predictor of future treatment and outcome.\n\nAdjusting for such a confounder blocks part of the treatment effect (over-adjustment); not adjusting leaves confounding. This is the **treatment-confounder feedback** problem.\n\n**Solution: Marginal Structural Models (MSMs) with stabilized IPTW.**\n\nSteps:\n\n1. At each time point, estimate the probability of receiving the observed treatment given past treatment and covariate history (denominator of the weight).\n2. Estimate the probability of receiving the observed treatment given past treatment only (numerator — stabilized weight).\n3. Stabilized weight = cumulative product of (numerator \u002F denominator) over time.\n4. Fit a weighted outcome model (e.g., weighted pooled logistic regression or weighted Cox model) using these weights.\n\n**Rules for MSMs:**\n\n- Stabilized weights should have a mean near 1.0. If not, the model is misspecified.\n- Truncate extreme weights (e.g., at 1st and 99th percentiles) and report sensitivity to truncation thresholds.\n- The denominator model must include all time-varying confounders; the numerator model includes only baseline covariates and past treatment.\n- MSMs estimate a *marginal* (population-average) causal effect, not a conditional one.\n\n### 8. Sensitivity Analyses for Unmeasured Confounding\n\nNo observational study can rule out unmeasured confounding. Quantify its potential impact.\n\n| Method | What it does | When to use |\n|---|---|---|\n| **E-value** | Reports the minimum strength of association (on the risk ratio scale) that an unmeasured confounder would need with both treatment and outcome to explain away the observed effect | Always — report alongside primary results |\n| **Negative control outcomes** | Outcomes known to be unaffected by the treatment; a non-null association signals residual bias | Include 3–5 negative controls; if they show associations, the primary result is suspect |\n| **Negative control exposures** | Exposures known to be unrelated to the outcome; test whether the analytic pipeline produces null results for them | Useful for validating the study design |\n| **Quantitative bias analysis (QBA)** | Formally models the impact of a hypothesized unmeasured confounder with specified prevalence and effect sizes | When a specific unmeasured confounder is suspected (e.g., smoking, BMI in claims data) |\n\n**Rule:** Every pharmacoepidemiology study should report at minimum the E-value and include at least one negative control analysis.\n\n### 9. Key Design Decisions Summary Table\n\n| Design element | Recommended approach | Red flag |\n|---|---|---|\n| User type | New (incident) users only | Prevalent users included without justification |\n| Comparator | Active comparator (same indication) | Non-users or general population as comparator |\n| Time zero | Treatment initiation date | Diagnosis date with treatment starting later |\n| Washout | 180–365 days | No washout or \u003C 90 days |\n| Covariates | Pre-index only | Post-index covariates in PS model |\n| PS balance | SMD \u003C 0.1 for all covariates | Balance not reported or p-values used instead of SMD |\n| Follow-up | Starts at index date | Starts before treatment (immortal time) |\n| Causal contrast | ITT or per-protocol (explicit) | Undefined or as-treated without censoring weights |\n| Sensitivity | E-value + negative controls | No sensitivity analysis for unmeasured confounding |\n\n### 10. Intention-to-Treat vs Per-Protocol in Observational Data\n\n| Contrast | Implementation | Bias concern |\n|---|---|---|\n| **ITT analog** | Follow from index date regardless of adherence or switching | Diluted effect if many patients switch or discontinue |\n| **Per-protocol analog** | Censor at treatment discontinuation or switching; use IPCW (inverse probability of censoring weights) to adjust for informative censoring | Informative censoring if sicker patients stop treatment |\n\n**Rule:** The ITT analog is the default because it avoids informative censoring. Use the per-protocol analog only when the clinical question specifically concerns sustained treatment, and always apply IPCW.\n\n## When NOT to Use This Skill\n\n- Replacing pre-specified statistical analysis plans (needs biostatistician sign-off)\n- When unmeasured confounding is the primary concern and no negative controls exist\n- Individual patient risk-benefit decisions (clinical medicine, not epidemiology)\n\n## When to Escalate to a Human Expert\n\n- When study results will be submitted to regulatory agencies as RWE\n- When E-value suggests unmeasured confounding could explain the entire effect\n- When the target trial protocol requires clinical input on eligibility criteria\n\n## Common Mistakes\n\n- **Wrong:** Including prevalent users in the study cohort\n  **Right:** Always require a 180–365 day washout period and restrict to new initiators\n  **Why:** Depletion of susceptibles biases toward a protective effect\n\n- **Wrong:** Comparing drug users to non-users\n  **Right:** Use an active comparator with the same indication\n  **Why:** Confounding by indication is nearly impossible to fully adjust for without an active comparator\n\n- **Wrong:** Starting follow-up before treatment initiation (immortal time)\n  **Right:** Use the new-user design (time zero = treatment start) or a landmark analysis\n  **Why:** The treated group gets \"free\" survival time, inflating apparent benefit\n\n- **Wrong:** Including post-index covariates in the propensity score model\n  **Right:** Only include covariates measured before the index date in the PS model\n  **Why:** Post-index variables may be mediators or colliders, introducing bias\n\n- **Wrong:** Using p-values to assess covariate balance after PS adjustment\n  **Right:** Use standardized mean differences (SMD) with a threshold of \u003C 0.1\n  **Why:** P-values depend on sample size and can show \"balance\" in large samples despite meaningful differences\n\n- **Wrong:** Ignoring extreme propensity score weights\n  **Right:** Truncate weights at the 1st\u002F99th percentile and report sensitivity to truncation\n  **Why:** A single patient with weight 500 can dominate the entire analysis\n\n- **Wrong:** Adjusting for time-varying confounders in a standard Cox model\n  **Right:** Use marginal structural models with stabilized IPTW when confounders are affected by prior treatment\n  **Why:** Standard adjustment blocks part of the causal pathway when treatment-confounder feedback exists\n\n- **Wrong:** Omitting sensitivity analyses for unmeasured confounding\n  **Right:** Always report the E-value and run at least one negative control analysis\n  **Why:** Claims data lack BMI, smoking, lab values, and socioeconomic detail that may confound results\n\n- **Wrong:** Running \"as-treated\" analyses without defining the causal contrast\n  **Right:** Explicitly specify ITT or per-protocol estimand and apply censoring weights for per-protocol\n  **Why:** Ambiguous estimands produce uninterpretable results\n\n- **Wrong:** Defining exposure based on cumulative dose over follow-up or \"ever-use\"\n  **Right:** Define exposure at time zero; do not condition on future behavior or survival\n  **Why:** Conditioning on the future introduces selection bias\n\n- **Wrong:** Ignoring the positivity assumption\n  **Right:** Check PS overlap and trim non-overlapping regions where one treatment has near-zero probability\n  **Why:** PS methods break down in strata with no treatment variation\n\n- **Wrong:** Using a single PS method without sensitivity analysis\n  **Right:** Run at least two approaches (e.g., matching + IPTW) and compare results\n  **Why:** Discordant results signal model sensitivity and fragile conclusions\n\n- **Wrong:** Failing to pre-specify the analysis plan\n  **Right:** Register the protocol or document outcome definitions, subgroups, and model choices before data analysis\n  **Why:** Post-hoc choices inflate false-positive rates\n\n- **Wrong:** Reporting observational associations as causal without the target trial framework\n  **Right:** Explicitly map every study to a hypothetical target trial to reveal hidden assumptions\n  **Why:** Unmapped assumptions lead to structural biases that no statistical method can fix\n\n## References\n\n- Hernán MA, Robins JM. Causal Inference: What If. Chapman & Hall\u002FCRC 2020, https:\u002F\u002Fwww.hsph.harvard.edu\u002Fmiguel-hernan\u002Fcausal-inference-book\u002F\n- Hernán MA, Alonso A, Logan R et al. Observational studies analyzed like randomized experiments: an application to postmenopausal hormone therapy and coronary heart disease. Epidemiology 2008, https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0b013e3181875e61\n- Lund JL, Richardson DB, Stürmer T. The active comparator, new user study design in pharmacoepidemiology. Epidemiology 2015, https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0000000000000231\n- Suissa S. Immortal time bias in pharmacoepidemiology. Am J Epidemiol 2008, https:\u002F\u002Fdoi.org\u002F10.1093\u002Faje\u002Fkwn138\n- Robins JM, Hernán MA, Brumback B. Marginal structural models and causal inference in epidemiology. Epidemiology 2000, https:\u002F\u002Fdoi.org\u002F10.1097\u002F00001648-200009000-00011\n- VanderWeele TJ, Ding P. Sensitivity analysis in observational research: introducing the E-value. Ann Intern Med 2017, https:\u002F\u002Fdoi.org\u002F10.7326\u002FM16-2607\n- Austin PC. An introduction to propensity score methods for reducing the effects of confounding in observational studies. Multivariate Behav Res 2011, https:\u002F\u002Fdoi.org\u002F10.1080\u002F00273171.2011.568786\n- Lipsitch M, Tchetgen Tchetgen E, Cohen T. Negative controls: a tool for detecting confounding and bias in observational studies. Epidemiology 2010, https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0b013e3181d61eeb\n",{"data":50,"body":60},{"name":4,"description":6,"usage":51,"version":52,"tags":53},"Invoke when designing, critiquing, or planning pharmacoepidemiologic studies using claims, EHR, or registry data.","1.0.0",[54,55,4,56,57,58,59],"skill","category:reasoning","causal-inference","propensity-score","real-world-data","hcls",{"type":61,"children":62},"root",[63,72,79,93,127,139,145,150,195,200,254,260,288,294,301,306,314,367,374,450,456,464,469,475,488,494,499,633,643,649,661,669,682,690,780,790,796,801,807,831,837,945,951,960,966,971,1014,1023,1029,1034,1040,1093,1099,1248,1257,1263,1275,1293,1299,1304,1317,1329,1337,1342,1365,1373,1403,1409,1414,1523,1532,1538,1726,1732,1801,1810,1816,1834,1840,1858,1864,2164,2170],{"type":64,"tag":65,"props":66,"children":68},"element","h1",{"id":67},"pharmacoepidemiology-study-design",[69],{"type":70,"value":71},"text","Pharmacoepidemiology Study Design",{"type":64,"tag":73,"props":74,"children":76},"h2",{"id":75},"overview",[77],{"type":70,"value":78},"Overview",{"type":64,"tag":80,"props":81,"children":82},"p",{},[83,85,91],{"type":70,"value":84},"This skill teaches the agent how to ",{"type":64,"tag":86,"props":87,"children":88},"em",{},[89],{"type":70,"value":90},"think",{"type":70,"value":92}," about pharmacoepidemiologic study design — the discipline of estimating causal drug effects from non-randomized real-world data (claims, EHR, registries). The core challenge is confounding: patients who receive Drug A differ systematically from those who receive Drug B, and naive comparisons conflate treatment effects with selection effects.",{"type":64,"tag":80,"props":94,"children":95},{},[96,98,104,106,111,113,118,120,125],{"type":70,"value":97},"A well-designed pharmacoepidemiology study addresses this through three pillars: (1) a ",{"type":64,"tag":99,"props":100,"children":101},"strong",{},[102],{"type":70,"value":103},"new-user active comparator design",{"type":70,"value":105}," that aligns time zero and reduces confounding by indication, (2) ",{"type":64,"tag":99,"props":107,"children":108},{},[109],{"type":70,"value":110},"propensity score methods",{"type":70,"value":112}," or ",{"type":64,"tag":99,"props":114,"children":115},{},[116],{"type":70,"value":117},"target trial emulation",{"type":70,"value":119}," to balance measured confounders, and (3) ",{"type":64,"tag":99,"props":121,"children":122},{},[123],{"type":70,"value":124},"sensitivity analyses",{"type":70,"value":126}," to probe the impact of unmeasured confounding.",{"type":64,"tag":80,"props":128,"children":129},{},[130,132,137],{"type":70,"value":131},"Use this skill to interrogate study designs, identify bias sources, and guide the user toward defensible causal inference ",{"type":64,"tag":86,"props":133,"children":134},{},[135],{"type":70,"value":136},"before",{"type":70,"value":138}," analysis code is written.",{"type":64,"tag":73,"props":140,"children":142},{"id":141},"usage",[143],{"type":70,"value":144},"Usage",{"type":64,"tag":80,"props":146,"children":147},{},[148],{"type":70,"value":149},"Invoke this skill when the user:",{"type":64,"tag":151,"props":152,"children":153},"ul",{},[154,160,165,170,175,180,185,190],{"type":64,"tag":155,"props":156,"children":157},"li",{},[158],{"type":70,"value":159},"Wants to estimate the effect of a drug on a clinical outcome using observational data.",{"type":64,"tag":155,"props":161,"children":162},{},[163],{"type":70,"value":164},"Asks how to choose a comparator group for a drug safety or effectiveness study.",{"type":64,"tag":155,"props":166,"children":167},{},[168],{"type":70,"value":169},"Needs to decide between propensity score matching, weighting, or stratification.",{"type":64,"tag":155,"props":171,"children":172},{},[173],{"type":70,"value":174},"Describes a cohort design that may contain immortal time bias.",{"type":64,"tag":155,"props":176,"children":177},{},[178],{"type":70,"value":179},"Asks about target trial emulation or how to map observational data to a hypothetical RCT.",{"type":64,"tag":155,"props":181,"children":182},{},[183],{"type":70,"value":184},"Has time-varying treatments or confounders and needs marginal structural models.",{"type":64,"tag":155,"props":186,"children":187},{},[188],{"type":70,"value":189},"Wants to assess sensitivity to unmeasured confounding (E-value, negative controls).",{"type":64,"tag":155,"props":191,"children":192},{},[193],{"type":70,"value":194},"Is reviewing or critiquing a published pharmacoepidemiology study.",{"type":64,"tag":80,"props":196,"children":197},{},[198],{"type":70,"value":199},"The agent should respond by:",{"type":64,"tag":201,"props":202,"children":203},"ol",{},[204,214,224,234,244],{"type":64,"tag":155,"props":205,"children":206},{},[207,212],{"type":64,"tag":99,"props":208,"children":209},{},[210],{"type":70,"value":211},"Clarifying the causal question",{"type":70,"value":213}," — what treatment, what comparator, what outcome, what population, what time horizon.",{"type":64,"tag":155,"props":215,"children":216},{},[217,222],{"type":64,"tag":99,"props":218,"children":219},{},[220],{"type":70,"value":221},"Checking the design",{"type":70,"value":223}," — is it new-user? Is the comparator active? Is time zero aligned?",{"type":64,"tag":155,"props":225,"children":226},{},[227,232],{"type":64,"tag":99,"props":228,"children":229},{},[230],{"type":70,"value":231},"Identifying bias threats",{"type":70,"value":233}," — immortal time, confounding by indication, prevalent user bias, time-varying confounding.",{"type":64,"tag":155,"props":235,"children":236},{},[237,242],{"type":64,"tag":99,"props":238,"children":239},{},[240],{"type":70,"value":241},"Recommending a propensity score approach",{"type":70,"value":243}," — matching, IPTW, or stratification based on the study context.",{"type":64,"tag":155,"props":245,"children":246},{},[247,252],{"type":64,"tag":99,"props":248,"children":249},{},[250],{"type":70,"value":251},"Specifying sensitivity analyses",{"type":70,"value":253}," — E-value, negative controls, quantitative bias analysis.",{"type":64,"tag":73,"props":255,"children":257},{"id":256},"response-format",[258],{"type":70,"value":259},"Response Format",{"type":64,"tag":151,"props":261,"children":262},{},[263,268,273,278,283],{"type":64,"tag":155,"props":264,"children":265},{},[266],{"type":70,"value":267},"Lead with the direct recommendation or classification (≤3 sentences)",{"type":64,"tag":155,"props":269,"children":270},{},[271],{"type":70,"value":272},"Structure as: recommendation → justification (citing specific criteria\u002Fthresholds) → caveats",{"type":64,"tag":155,"props":274,"children":275},{},[276],{"type":70,"value":277},"Use tables for comparisons; bullet points for criteria lists",{"type":64,"tag":155,"props":279,"children":280},{},[281],{"type":70,"value":282},"Omit background the user already knows — they asked the question",{"type":64,"tag":155,"props":284,"children":285},{},[286],{"type":70,"value":287},"Target: 200-400 words unless the user requests exhaustive detail\nThe decision trees and frameworks in this skill are for internal reasoning only. Apply them to reach your conclusion, but do not reproduce them in your response. Present only the final recommendation with supporting evidence.",{"type":64,"tag":73,"props":289,"children":291},{"id":290},"core-concepts",[292],{"type":70,"value":293},"Core Concepts",{"type":64,"tag":295,"props":296,"children":298},"h3",{"id":297},"_1-the-new-user-incident-user-design",[299],{"type":70,"value":300},"1. The New-User (Incident User) Design",{"type":64,"tag":80,"props":302,"children":303},{},[304],{"type":70,"value":305},"The foundation of modern pharmacoepidemiology. Every study should start here.",{"type":64,"tag":80,"props":307,"children":308},{},[309],{"type":64,"tag":99,"props":310,"children":311},{},[312],{"type":70,"value":313},"Rules:",{"type":64,"tag":201,"props":315,"children":316},{},[317,327,337,347,357],{"type":64,"tag":155,"props":318,"children":319},{},[320,325],{"type":64,"tag":99,"props":321,"children":322},{},[323],{"type":70,"value":324},"Index date = first dispensing (or first prescription) of the study drug",{"type":70,"value":326}," after a clean washout period.",{"type":64,"tag":155,"props":328,"children":329},{},[330,335],{"type":64,"tag":99,"props":331,"children":332},{},[333],{"type":70,"value":334},"Washout period",{"type":70,"value":336},": require 180–365 days of continuous enrollment with no dispensing of the study drug. This excludes prevalent users who may have already experienced early events or side effects.",{"type":64,"tag":155,"props":338,"children":339},{},[340,345],{"type":64,"tag":99,"props":341,"children":342},{},[343],{"type":70,"value":344},"Exclude prevalent users.",{"type":70,"value":346}," Patients already on the drug at cohort entry are a biased survivor population — they tolerated the drug long enough to still be on it. Including them introduces depletion-of-susceptibles bias.",{"type":64,"tag":155,"props":348,"children":349},{},[350,355],{"type":64,"tag":99,"props":351,"children":352},{},[353],{"type":70,"value":354},"Baseline covariates are measured before the index date.",{"type":70,"value":356}," Nothing after index date enters the propensity model.",{"type":64,"tag":155,"props":358,"children":359},{},[360,365],{"type":64,"tag":99,"props":361,"children":362},{},[363],{"type":70,"value":364},"Follow-up starts at the index date.",{"type":70,"value":366}," Time zero is the moment of treatment initiation, not some earlier eligibility date.",{"type":64,"tag":368,"props":369,"children":371},"h4",{"id":370},"why-prevalent-users-are-dangerous",[372],{"type":70,"value":373},"Why prevalent users are dangerous",{"type":64,"tag":375,"props":376,"children":377},"table",{},[378,397],{"type":64,"tag":379,"props":380,"children":381},"thead",{},[382],{"type":64,"tag":383,"props":384,"children":385},"tr",{},[386,392],{"type":64,"tag":387,"props":388,"children":389},"th",{},[390],{"type":70,"value":391},"Problem",{"type":64,"tag":387,"props":393,"children":394},{},[395],{"type":70,"value":396},"Mechanism",{"type":64,"tag":398,"props":399,"children":400},"tbody",{},[401,418,434],{"type":64,"tag":383,"props":402,"children":403},{},[404,413],{"type":64,"tag":405,"props":406,"children":407},"td",{},[408],{"type":64,"tag":99,"props":409,"children":410},{},[411],{"type":70,"value":412},"Depletion of susceptibles",{"type":64,"tag":405,"props":414,"children":415},{},[416],{"type":70,"value":417},"Patients who had early adverse events already stopped the drug and are absent from the prevalent-user pool",{"type":64,"tag":383,"props":419,"children":420},{},[421,429],{"type":64,"tag":405,"props":422,"children":423},{},[424],{"type":64,"tag":99,"props":425,"children":426},{},[427],{"type":70,"value":428},"Undefined baseline",{"type":64,"tag":405,"props":430,"children":431},{},[432],{"type":70,"value":433},"Covariates measured \"at baseline\" are actually post-treatment for prevalent users",{"type":64,"tag":383,"props":435,"children":436},{},[437,445],{"type":64,"tag":405,"props":438,"children":439},{},[440],{"type":64,"tag":99,"props":441,"children":442},{},[443],{"type":70,"value":444},"Adjusted prevalence",{"type":64,"tag":405,"props":446,"children":447},{},[448],{"type":70,"value":449},"Duration of prior use varies, making the cohort a mixture of different exposure histories",{"type":64,"tag":295,"props":451,"children":453},{"id":452},"_2-active-comparator-design",[454],{"type":70,"value":455},"2. Active Comparator Design",{"type":64,"tag":80,"props":457,"children":458},{},[459],{"type":64,"tag":99,"props":460,"children":461},{},[462],{"type":70,"value":463},"Rule: Compare Drug A vs Drug B, not Drug A vs no drug.",{"type":64,"tag":80,"props":465,"children":466},{},[467],{"type":70,"value":468},"Comparing treated patients to untreated patients introduces massive confounding by indication — the reason a patient receives a drug is correlated with their outcome risk. An active comparator (another drug for the same indication) ensures both groups have the indication, reducing this bias.",{"type":64,"tag":368,"props":470,"children":472},{"id":471},"decision-tree-choosing-a-comparator",[473],{"type":70,"value":474},"Decision tree: choosing a comparator",{"type":64,"tag":476,"props":477,"children":481},"pre",{"className":478,"code":480,"language":70},[479],"language-text","Start\n│\n├── Is there another drug for the same indication?\n│     ├── Yes → Use it as the active comparator.\n│     │         Prefer a drug with similar:\n│     │         - Indication (same disease stage\u002Fseverity)\n│     │         - Channeling (similar patient profile)\n│     │         - Time trends (used in the same era)\n│     └── No  → Consider:\n│               - Non-pharmacologic standard of care\n│               - Delayed\u002Fdeferred treatment (with careful time-zero alignment)\n│               - Document residual confounding by indication as a limitation.\n│\n├── Multiple candidate comparators available?\n│     └── Prefer the one with the most clinical overlap.\n│         Run the primary analysis with the best comparator;\n│         use others in sensitivity analyses.\n│\n└── Is the comparator a drug from the same class?\n      ├── Within-class comparison → smaller confounding, but smaller effect sizes.\n      └── Between-class comparison → larger confounding, but more clinically relevant contrast.\n",[482],{"type":64,"tag":483,"props":484,"children":486},"code",{"__ignoreMap":485},"",[487],{"type":70,"value":480},{"type":64,"tag":295,"props":489,"children":491},{"id":490},"_3-target-trial-emulation",[492],{"type":70,"value":493},"3. Target Trial Emulation",{"type":64,"tag":80,"props":495,"children":496},{},[497],{"type":70,"value":498},"Map every observational study to a hypothetical randomized trial. This framework forces explicit specification of each design element and reveals hidden assumptions.",{"type":64,"tag":375,"props":500,"children":501},{},[502,518],{"type":64,"tag":379,"props":503,"children":504},{},[505],{"type":64,"tag":383,"props":506,"children":507},{},[508,513],{"type":64,"tag":387,"props":509,"children":510},{},[511],{"type":70,"value":512},"Target trial component",{"type":64,"tag":387,"props":514,"children":515},{},[516],{"type":70,"value":517},"Specification in observational data",{"type":64,"tag":398,"props":519,"children":520},{},[521,537,553,569,585,601,617],{"type":64,"tag":383,"props":522,"children":523},{},[524,532],{"type":64,"tag":405,"props":525,"children":526},{},[527],{"type":64,"tag":99,"props":528,"children":529},{},[530],{"type":70,"value":531},"Eligibility criteria",{"type":64,"tag":405,"props":533,"children":534},{},[535],{"type":70,"value":536},"Inclusion\u002Fexclusion applied at time zero (index date) using pre-index data only",{"type":64,"tag":383,"props":538,"children":539},{},[540,548],{"type":64,"tag":405,"props":541,"children":542},{},[543],{"type":64,"tag":99,"props":544,"children":545},{},[546],{"type":70,"value":547},"Treatment strategies",{"type":64,"tag":405,"props":549,"children":550},{},[551],{"type":70,"value":552},"Initiate Drug A vs initiate Drug B (new-user design)",{"type":64,"tag":383,"props":554,"children":555},{},[556,564],{"type":64,"tag":405,"props":557,"children":558},{},[559],{"type":64,"tag":99,"props":560,"children":561},{},[562],{"type":70,"value":563},"Treatment assignment",{"type":64,"tag":405,"props":565,"children":566},{},[567],{"type":70,"value":568},"Observational — handled by propensity scores or IP weighting",{"type":64,"tag":383,"props":570,"children":571},{},[572,580],{"type":64,"tag":405,"props":573,"children":574},{},[575],{"type":64,"tag":99,"props":576,"children":577},{},[578],{"type":70,"value":579},"Follow-up start",{"type":64,"tag":405,"props":581,"children":582},{},[583],{"type":70,"value":584},"Index date (= treatment initiation). Must be identical for both arms",{"type":64,"tag":383,"props":586,"children":587},{},[588,596],{"type":64,"tag":405,"props":589,"children":590},{},[591],{"type":64,"tag":99,"props":592,"children":593},{},[594],{"type":70,"value":595},"Outcome",{"type":64,"tag":405,"props":597,"children":598},{},[599],{"type":70,"value":600},"Same definition as the target trial; ascertained after time zero",{"type":64,"tag":383,"props":602,"children":603},{},[604,612],{"type":64,"tag":405,"props":605,"children":606},{},[607],{"type":64,"tag":99,"props":608,"children":609},{},[610],{"type":70,"value":611},"Causal contrast",{"type":64,"tag":405,"props":613,"children":614},{},[615],{"type":70,"value":616},"Intention-to-treat (follow regardless of adherence) or per-protocol (censor\u002Fweight at discontinuation)",{"type":64,"tag":383,"props":618,"children":619},{},[620,628],{"type":64,"tag":405,"props":621,"children":622},{},[623],{"type":64,"tag":99,"props":624,"children":625},{},[626],{"type":70,"value":627},"Analysis plan",{"type":64,"tag":405,"props":629,"children":630},{},[631],{"type":70,"value":632},"Pre-specified; registered if possible",{"type":64,"tag":80,"props":634,"children":635},{},[636,641],{"type":64,"tag":99,"props":637,"children":638},{},[639],{"type":70,"value":640},"Critical rule:",{"type":70,"value":642}," If any component cannot be mapped cleanly, the study has a structural bias that no statistical method can fix. The most common failure is misaligned time zero (see immortal time bias below).",{"type":64,"tag":295,"props":644,"children":646},{"id":645},"_4-immortal-time-bias",[647],{"type":70,"value":648},"4. Immortal Time Bias",{"type":64,"tag":80,"props":650,"children":651},{},[652,654,659],{"type":70,"value":653},"Immortal time is the period between cohort entry and treatment start during which the outcome ",{"type":64,"tag":86,"props":655,"children":656},{},[657],{"type":70,"value":658},"cannot",{"type":70,"value":660}," occur (because occurrence of the outcome would prevent the patient from being classified as treated). Misclassifying this time inflates survival in the treated group.",{"type":64,"tag":80,"props":662,"children":663},{},[664],{"type":64,"tag":99,"props":665,"children":666},{},[667],{"type":70,"value":668},"How it arises:",{"type":64,"tag":151,"props":670,"children":671},{},[672,677],{"type":64,"tag":155,"props":673,"children":674},{},[675],{"type":70,"value":676},"Cohort entry is defined by diagnosis, but treatment starts later. The gap is \"immortal\" for the treated group — they had to survive long enough to receive treatment.",{"type":64,"tag":155,"props":678,"children":679},{},[680],{"type":70,"value":681},"Comparing \"ever-treated\" vs \"never-treated\" without aligning time zero.",{"type":64,"tag":80,"props":683,"children":684},{},[685],{"type":64,"tag":99,"props":686,"children":687},{},[688],{"type":70,"value":689},"Solutions:",{"type":64,"tag":375,"props":691,"children":692},{},[693,714],{"type":64,"tag":379,"props":694,"children":695},{},[696],{"type":64,"tag":383,"props":697,"children":698},{},[699,704,709],{"type":64,"tag":387,"props":700,"children":701},{},[702],{"type":70,"value":703},"Method",{"type":64,"tag":387,"props":705,"children":706},{},[707],{"type":70,"value":708},"How it works",{"type":64,"tag":387,"props":710,"children":711},{},[712],{"type":70,"value":713},"When to use",{"type":64,"tag":398,"props":715,"children":716},{},[717,738,759],{"type":64,"tag":383,"props":718,"children":719},{},[720,728,733],{"type":64,"tag":405,"props":721,"children":722},{},[723],{"type":64,"tag":99,"props":724,"children":725},{},[726],{"type":70,"value":727},"New-user design",{"type":64,"tag":405,"props":729,"children":730},{},[731],{"type":70,"value":732},"Time zero = treatment initiation; no gap exists",{"type":64,"tag":405,"props":734,"children":735},{},[736],{"type":70,"value":737},"Default — prevents the problem entirely",{"type":64,"tag":383,"props":739,"children":740},{},[741,749,754],{"type":64,"tag":405,"props":742,"children":743},{},[744],{"type":64,"tag":99,"props":745,"children":746},{},[747],{"type":70,"value":748},"Landmark analysis",{"type":64,"tag":405,"props":750,"children":751},{},[752],{"type":70,"value":753},"Define a fixed time point (e.g., 90 days post-diagnosis); classify exposure status at the landmark; start follow-up there",{"type":64,"tag":405,"props":755,"children":756},{},[757],{"type":70,"value":758},"When treatment timing varies and you want a common time origin",{"type":64,"tag":383,"props":760,"children":761},{},[762,770,775],{"type":64,"tag":405,"props":763,"children":764},{},[765],{"type":64,"tag":99,"props":766,"children":767},{},[768],{"type":70,"value":769},"Time-varying exposure",{"type":64,"tag":405,"props":771,"children":772},{},[773],{"type":70,"value":774},"Model treatment as a time-dependent covariate in a Cox model; person-time before treatment counts as unexposed",{"type":64,"tag":405,"props":776,"children":777},{},[778],{"type":70,"value":779},"When treatment can start at any time and you want to use all person-time",{"type":64,"tag":80,"props":781,"children":782},{},[783,788],{"type":64,"tag":99,"props":784,"children":785},{},[786],{"type":70,"value":787},"Rule:",{"type":70,"value":789}," If the study compares \"ever-users\" vs \"never-users\" with follow-up starting at a time point before treatment initiation, immortal time bias is present. The new-user design eliminates it by construction.",{"type":64,"tag":295,"props":791,"children":793},{"id":792},"_5-propensity-score-methods",[794],{"type":70,"value":795},"5. Propensity Score Methods",{"type":64,"tag":80,"props":797,"children":798},{},[799],{"type":70,"value":800},"The propensity score (PS) is the probability of receiving treatment A (vs B) conditional on measured baseline covariates. It reduces a high-dimensional covariate space to a single balancing score.",{"type":64,"tag":368,"props":802,"children":804},{"id":803},"estimation",[805],{"type":70,"value":806},"Estimation",{"type":64,"tag":201,"props":808,"children":809},{},[810,821,826],{"type":64,"tag":155,"props":811,"children":812},{},[813,815],{"type":70,"value":814},"Fit a logistic regression: ",{"type":64,"tag":483,"props":816,"children":818},{"className":817},[],[819],{"type":70,"value":820},"treatment ~ age + sex + comorbidities + prior_meds + ...",{"type":64,"tag":155,"props":822,"children":823},{},[824],{"type":70,"value":825},"Include all pre-index covariates that predict treatment, outcome, or both. Do NOT include instruments (variables that predict treatment but not outcome) — they increase variance without reducing bias.",{"type":64,"tag":155,"props":827,"children":828},{},[829],{"type":70,"value":830},"Check overlap: both groups should have PS distributions that substantially overlap. Trim or truncate extreme weights if needed.",{"type":64,"tag":368,"props":832,"children":834},{"id":833},"three-approaches",[835],{"type":70,"value":836},"Three approaches",{"type":64,"tag":375,"props":838,"children":839},{},[840,864],{"type":64,"tag":379,"props":841,"children":842},{},[843],{"type":64,"tag":383,"props":844,"children":845},{},[846,850,854,859],{"type":64,"tag":387,"props":847,"children":848},{},[849],{"type":70,"value":703},{"type":64,"tag":387,"props":851,"children":852},{},[853],{"type":70,"value":396},{"type":64,"tag":387,"props":855,"children":856},{},[857],{"type":70,"value":858},"Strengths",{"type":64,"tag":387,"props":860,"children":861},{},[862],{"type":70,"value":863},"Limitations",{"type":64,"tag":398,"props":865,"children":866},{},[867,893,919],{"type":64,"tag":383,"props":868,"children":869},{},[870,878,883,888],{"type":64,"tag":405,"props":871,"children":872},{},[873],{"type":64,"tag":99,"props":874,"children":875},{},[876],{"type":70,"value":877},"Matching (1:1, caliper)",{"type":64,"tag":405,"props":879,"children":880},{},[881],{"type":70,"value":882},"Pair each treated patient with the nearest untreated patient within a caliper (typically 0.2 × SD of logit-PS)",{"type":64,"tag":405,"props":884,"children":885},{},[886],{"type":70,"value":887},"Intuitive; easy to check balance; mimics an RCT",{"type":64,"tag":405,"props":889,"children":890},{},[891],{"type":70,"value":892},"Discards unmatched patients → reduced sample size and generalizability",{"type":64,"tag":383,"props":894,"children":895},{},[896,904,909,914],{"type":64,"tag":405,"props":897,"children":898},{},[899],{"type":64,"tag":99,"props":900,"children":901},{},[902],{"type":70,"value":903},"IPTW (inverse probability of treatment weighting)",{"type":64,"tag":405,"props":905,"children":906},{},[907],{"type":70,"value":908},"Weight each patient by 1\u002FPS (treated) or 1\u002F(1−PS) (comparator) to create a pseudo-population",{"type":64,"tag":405,"props":910,"children":911},{},[912],{"type":70,"value":913},"Uses all patients; estimates ATE; flexible",{"type":64,"tag":405,"props":915,"children":916},{},[917],{"type":70,"value":918},"Extreme weights destabilize estimates; requires truncation or stabilized weights",{"type":64,"tag":383,"props":920,"children":921},{},[922,930,935,940],{"type":64,"tag":405,"props":923,"children":924},{},[925],{"type":64,"tag":99,"props":926,"children":927},{},[928],{"type":70,"value":929},"Stratification",{"type":64,"tag":405,"props":931,"children":932},{},[933],{"type":70,"value":934},"Divide PS into quantiles (typically 5–10); estimate treatment effect within each stratum; pool",{"type":64,"tag":405,"props":936,"children":937},{},[938],{"type":70,"value":939},"Simple; transparent",{"type":64,"tag":405,"props":941,"children":942},{},[943],{"type":70,"value":944},"Residual confounding within strata; less precise than IPTW",{"type":64,"tag":368,"props":946,"children":948},{"id":947},"decision-tree-which-ps-method",[949],{"type":70,"value":950},"Decision tree: which PS method?",{"type":64,"tag":476,"props":952,"children":955},{"className":953,"code":954,"language":70},[479],"Start\n│\n├── Is sample size limited or matching feasible?\n│     ├── Yes → 1:1 PS matching with caliper = 0.2 × SD(logit-PS).\n│     │         Report number matched and unmatched.\n│     └── No  → Continue.\n│\n├── Do you need the full sample (e.g., rare outcome)?\n│     ├── Yes → IPTW. Use stabilized weights. Truncate at 1st\u002F99th percentile\n│     │         if max weight > 10.\n│     └── No  → Continue.\n│\n├── Is the goal transparency and simplicity?\n│     └── PS stratification (5–10 strata). Report stratum-specific effects.\n│\n└── Multiple analyses?\n      └── Use matching as primary, IPTW as sensitivity (or vice versa).\n          Concordant results strengthen the conclusion.\n",[956],{"type":64,"tag":483,"props":957,"children":958},{"__ignoreMap":485},[959],{"type":70,"value":954},{"type":64,"tag":368,"props":961,"children":963},{"id":962},"balance-diagnostics",[964],{"type":70,"value":965},"Balance diagnostics",{"type":64,"tag":80,"props":967,"children":968},{},[969],{"type":70,"value":970},"After PS adjustment, verify covariate balance:",{"type":64,"tag":151,"props":972,"children":973},{},[974,984,994,1004],{"type":64,"tag":155,"props":975,"children":976},{},[977,982],{"type":64,"tag":99,"props":978,"children":979},{},[980],{"type":70,"value":981},"Standardized mean difference (SMD)",{"type":70,"value":983},": target \u003C 0.1 for all covariates. SMD = |mean_treated − mean_comparator| \u002F √((s²_treated + s²_comparator)\u002F2).",{"type":64,"tag":155,"props":985,"children":986},{},[987,992],{"type":64,"tag":99,"props":988,"children":989},{},[990],{"type":70,"value":991},"Variance ratios",{"type":70,"value":993},": should be between 0.5 and 2.0.",{"type":64,"tag":155,"props":995,"children":996},{},[997,1002],{"type":64,"tag":99,"props":998,"children":999},{},[1000],{"type":70,"value":1001},"Visual",{"type":70,"value":1003},": Love plot (dot plot of SMDs before and after adjustment).",{"type":64,"tag":155,"props":1005,"children":1006},{},[1007,1012],{"type":64,"tag":99,"props":1008,"children":1009},{},[1010],{"type":70,"value":1011},"Do NOT use p-values",{"type":70,"value":1013}," for balance assessment — they conflate balance with sample size.",{"type":64,"tag":80,"props":1015,"children":1016},{},[1017,1021],{"type":64,"tag":99,"props":1018,"children":1019},{},[1020],{"type":70,"value":787},{"type":70,"value":1022}," If any covariate has SMD > 0.1 after adjustment, the PS model is inadequate. Add interactions, non-linear terms, or additional covariates and re-estimate.",{"type":64,"tag":295,"props":1024,"children":1026},{"id":1025},"_6-covariate-selection-for-confounding-adjustment",[1027],{"type":70,"value":1028},"6. Covariate Selection for Confounding Adjustment",{"type":64,"tag":80,"props":1030,"children":1031},{},[1032],{"type":70,"value":1033},"Which variables to include in the propensity score or outcome model is a design decision, not a data-driven one. Get it wrong and the estimate is biased or inefficient.",{"type":64,"tag":368,"props":1035,"children":1037},{"id":1036},"rules-for-covariate-inclusion",[1038],{"type":70,"value":1039},"Rules for covariate inclusion",{"type":64,"tag":201,"props":1041,"children":1042},{},[1043,1053,1063,1073,1083],{"type":64,"tag":155,"props":1044,"children":1045},{},[1046,1051],{"type":64,"tag":99,"props":1047,"children":1048},{},[1049],{"type":70,"value":1050},"Include confounders",{"type":70,"value":1052}," — variables that cause both treatment and outcome. These are the primary targets.",{"type":64,"tag":155,"props":1054,"children":1055},{},[1056,1061],{"type":64,"tag":99,"props":1057,"children":1058},{},[1059],{"type":70,"value":1060},"Include outcome risk factors",{"type":70,"value":1062}," — variables that predict the outcome but not treatment. They reduce variance (increase precision) without introducing bias.",{"type":64,"tag":155,"props":1064,"children":1065},{},[1066,1071],{"type":64,"tag":99,"props":1067,"children":1068},{},[1069],{"type":70,"value":1070},"Exclude instruments",{"type":70,"value":1072}," — variables that predict treatment but NOT outcome. Including them amplifies bias from unmeasured confounding and inflates variance.",{"type":64,"tag":155,"props":1074,"children":1075},{},[1076,1081],{"type":64,"tag":99,"props":1077,"children":1078},{},[1079],{"type":70,"value":1080},"Exclude mediators",{"type":70,"value":1082}," — variables on the causal pathway between treatment and outcome. Adjusting for them blocks part of the effect you are trying to estimate.",{"type":64,"tag":155,"props":1084,"children":1085},{},[1086,1091],{"type":64,"tag":99,"props":1087,"children":1088},{},[1089],{"type":70,"value":1090},"Exclude colliders",{"type":70,"value":1092}," — variables caused by both treatment and outcome (or their descendants). Conditioning on a collider opens a non-causal path and introduces bias.",{"type":64,"tag":368,"props":1094,"children":1096},{"id":1095},"typical-covariate-categories-in-claims-data",[1097],{"type":70,"value":1098},"Typical covariate categories in claims data",{"type":64,"tag":375,"props":1100,"children":1101},{},[1102,1123],{"type":64,"tag":379,"props":1103,"children":1104},{},[1105],{"type":64,"tag":383,"props":1106,"children":1107},{},[1108,1113,1118],{"type":64,"tag":387,"props":1109,"children":1110},{},[1111],{"type":70,"value":1112},"Category",{"type":64,"tag":387,"props":1114,"children":1115},{},[1116],{"type":70,"value":1117},"Examples",{"type":64,"tag":387,"props":1119,"children":1120},{},[1121],{"type":70,"value":1122},"Measurement window",{"type":64,"tag":398,"props":1124,"children":1125},{},[1126,1144,1162,1180,1197,1214,1231],{"type":64,"tag":383,"props":1127,"children":1128},{},[1129,1134,1139],{"type":64,"tag":405,"props":1130,"children":1131},{},[1132],{"type":70,"value":1133},"Demographics",{"type":64,"tag":405,"props":1135,"children":1136},{},[1137],{"type":70,"value":1138},"Age, sex, race, region",{"type":64,"tag":405,"props":1140,"children":1141},{},[1142],{"type":70,"value":1143},"At index date",{"type":64,"tag":383,"props":1145,"children":1146},{},[1147,1152,1157],{"type":64,"tag":405,"props":1148,"children":1149},{},[1150],{"type":70,"value":1151},"Comorbidities",{"type":64,"tag":405,"props":1153,"children":1154},{},[1155],{"type":70,"value":1156},"Charlson\u002FElixhauser score, specific ICD-10 codes",{"type":64,"tag":405,"props":1158,"children":1159},{},[1160],{"type":70,"value":1161},"365 days pre-index",{"type":64,"tag":383,"props":1163,"children":1164},{},[1165,1170,1175],{"type":64,"tag":405,"props":1166,"children":1167},{},[1168],{"type":70,"value":1169},"Comedications",{"type":64,"tag":405,"props":1171,"children":1172},{},[1173],{"type":70,"value":1174},"Concurrent drug classes (statins, antihypertensives)",{"type":64,"tag":405,"props":1176,"children":1177},{},[1178],{"type":70,"value":1179},"180 days pre-index",{"type":64,"tag":383,"props":1181,"children":1182},{},[1183,1188,1193],{"type":64,"tag":405,"props":1184,"children":1185},{},[1186],{"type":70,"value":1187},"Healthcare utilization",{"type":64,"tag":405,"props":1189,"children":1190},{},[1191],{"type":70,"value":1192},"Hospitalizations, ED visits, outpatient visits, distinct prescribers",{"type":64,"tag":405,"props":1194,"children":1195},{},[1196],{"type":70,"value":1161},{"type":64,"tag":383,"props":1198,"children":1199},{},[1200,1205,1210],{"type":64,"tag":405,"props":1201,"children":1202},{},[1203],{"type":70,"value":1204},"Disease severity proxies",{"type":64,"tag":405,"props":1206,"children":1207},{},[1208],{"type":70,"value":1209},"Number of specialist visits, prior procedures, lab orders",{"type":64,"tag":405,"props":1211,"children":1212},{},[1213],{"type":70,"value":1161},{"type":64,"tag":383,"props":1215,"children":1216},{},[1217,1222,1227],{"type":64,"tag":405,"props":1218,"children":1219},{},[1220],{"type":70,"value":1221},"Frailty indicators",{"type":64,"tag":405,"props":1223,"children":1224},{},[1225],{"type":70,"value":1226},"Skilled nursing facility use, home oxygen, wheelchair claims",{"type":64,"tag":405,"props":1228,"children":1229},{},[1230],{"type":70,"value":1161},{"type":64,"tag":383,"props":1232,"children":1233},{},[1234,1239,1244],{"type":64,"tag":405,"props":1235,"children":1236},{},[1237],{"type":70,"value":1238},"Calendar time",{"type":64,"tag":405,"props":1240,"children":1241},{},[1242],{"type":70,"value":1243},"Year\u002Fquarter of index date",{"type":64,"tag":405,"props":1245,"children":1246},{},[1247],{"type":70,"value":1143},{"type":64,"tag":80,"props":1249,"children":1250},{},[1251,1255],{"type":64,"tag":99,"props":1252,"children":1253},{},[1254],{"type":70,"value":787},{"type":70,"value":1256}," Always include a measure of healthcare utilization intensity. Patients who interact more with the healthcare system are more likely to receive new drugs and to have outcomes detected — this is a major confounder in claims data.",{"type":64,"tag":368,"props":1258,"children":1260},{"id":1259},"proxy-variables-and-the-healthy-user-bias",[1261],{"type":70,"value":1262},"Proxy variables and the healthy-user bias",{"type":64,"tag":80,"props":1264,"children":1265},{},[1266,1268,1273],{"type":70,"value":1267},"Claims data lack direct measures of lifestyle (smoking, BMI, exercise, diet). Patients who initiate preventive medications (e.g., statins, vaccines) tend to be healthier and more health-conscious. This ",{"type":64,"tag":99,"props":1269,"children":1270},{},[1271],{"type":70,"value":1272},"healthy-user\u002Fhealthy-adherer bias",{"type":70,"value":1274}," can make new drugs appear protective simply because their users are healthier. Mitigate by:",{"type":64,"tag":151,"props":1276,"children":1277},{},[1278,1283,1288],{"type":64,"tag":155,"props":1279,"children":1280},{},[1281],{"type":70,"value":1282},"Including preventive care markers (flu vaccination, cancer screening) as covariates.",{"type":64,"tag":155,"props":1284,"children":1285},{},[1286],{"type":70,"value":1287},"Using negative control outcomes to detect residual healthy-user bias.",{"type":64,"tag":155,"props":1289,"children":1290},{},[1291],{"type":70,"value":1292},"Reporting the E-value to quantify how strong unmeasured healthy-user confounding would need to be.",{"type":64,"tag":295,"props":1294,"children":1296},{"id":1295},"_7-time-varying-confounding-and-marginal-structural-models",[1297],{"type":70,"value":1298},"7. Time-Varying Confounding and Marginal Structural Models",{"type":64,"tag":80,"props":1300,"children":1301},{},[1302],{"type":70,"value":1303},"Standard regression fails when a confounder is both:",{"type":64,"tag":151,"props":1305,"children":1306},{},[1307,1312],{"type":64,"tag":155,"props":1308,"children":1309},{},[1310],{"type":70,"value":1311},"Affected by prior treatment (e.g., lab values change because of the drug), AND",{"type":64,"tag":155,"props":1313,"children":1314},{},[1315],{"type":70,"value":1316},"A predictor of future treatment and outcome.",{"type":64,"tag":80,"props":1318,"children":1319},{},[1320,1322,1327],{"type":70,"value":1321},"Adjusting for such a confounder blocks part of the treatment effect (over-adjustment); not adjusting leaves confounding. This is the ",{"type":64,"tag":99,"props":1323,"children":1324},{},[1325],{"type":70,"value":1326},"treatment-confounder feedback",{"type":70,"value":1328}," problem.",{"type":64,"tag":80,"props":1330,"children":1331},{},[1332],{"type":64,"tag":99,"props":1333,"children":1334},{},[1335],{"type":70,"value":1336},"Solution: Marginal Structural Models (MSMs) with stabilized IPTW.",{"type":64,"tag":80,"props":1338,"children":1339},{},[1340],{"type":70,"value":1341},"Steps:",{"type":64,"tag":201,"props":1343,"children":1344},{},[1345,1350,1355,1360],{"type":64,"tag":155,"props":1346,"children":1347},{},[1348],{"type":70,"value":1349},"At each time point, estimate the probability of receiving the observed treatment given past treatment and covariate history (denominator of the weight).",{"type":64,"tag":155,"props":1351,"children":1352},{},[1353],{"type":70,"value":1354},"Estimate the probability of receiving the observed treatment given past treatment only (numerator — stabilized weight).",{"type":64,"tag":155,"props":1356,"children":1357},{},[1358],{"type":70,"value":1359},"Stabilized weight = cumulative product of (numerator \u002F denominator) over time.",{"type":64,"tag":155,"props":1361,"children":1362},{},[1363],{"type":70,"value":1364},"Fit a weighted outcome model (e.g., weighted pooled logistic regression or weighted Cox model) using these weights.",{"type":64,"tag":80,"props":1366,"children":1367},{},[1368],{"type":64,"tag":99,"props":1369,"children":1370},{},[1371],{"type":70,"value":1372},"Rules for MSMs:",{"type":64,"tag":151,"props":1374,"children":1375},{},[1376,1381,1386,1391],{"type":64,"tag":155,"props":1377,"children":1378},{},[1379],{"type":70,"value":1380},"Stabilized weights should have a mean near 1.0. If not, the model is misspecified.",{"type":64,"tag":155,"props":1382,"children":1383},{},[1384],{"type":70,"value":1385},"Truncate extreme weights (e.g., at 1st and 99th percentiles) and report sensitivity to truncation thresholds.",{"type":64,"tag":155,"props":1387,"children":1388},{},[1389],{"type":70,"value":1390},"The denominator model must include all time-varying confounders; the numerator model includes only baseline covariates and past treatment.",{"type":64,"tag":155,"props":1392,"children":1393},{},[1394,1396,1401],{"type":70,"value":1395},"MSMs estimate a ",{"type":64,"tag":86,"props":1397,"children":1398},{},[1399],{"type":70,"value":1400},"marginal",{"type":70,"value":1402}," (population-average) causal effect, not a conditional one.",{"type":64,"tag":295,"props":1404,"children":1406},{"id":1405},"_8-sensitivity-analyses-for-unmeasured-confounding",[1407],{"type":70,"value":1408},"8. Sensitivity Analyses for Unmeasured Confounding",{"type":64,"tag":80,"props":1410,"children":1411},{},[1412],{"type":70,"value":1413},"No observational study can rule out unmeasured confounding. Quantify its potential impact.",{"type":64,"tag":375,"props":1415,"children":1416},{},[1417,1436],{"type":64,"tag":379,"props":1418,"children":1419},{},[1420],{"type":64,"tag":383,"props":1421,"children":1422},{},[1423,1427,1432],{"type":64,"tag":387,"props":1424,"children":1425},{},[1426],{"type":70,"value":703},{"type":64,"tag":387,"props":1428,"children":1429},{},[1430],{"type":70,"value":1431},"What it does",{"type":64,"tag":387,"props":1433,"children":1434},{},[1435],{"type":70,"value":713},{"type":64,"tag":398,"props":1437,"children":1438},{},[1439,1460,1481,1502],{"type":64,"tag":383,"props":1440,"children":1441},{},[1442,1450,1455],{"type":64,"tag":405,"props":1443,"children":1444},{},[1445],{"type":64,"tag":99,"props":1446,"children":1447},{},[1448],{"type":70,"value":1449},"E-value",{"type":64,"tag":405,"props":1451,"children":1452},{},[1453],{"type":70,"value":1454},"Reports the minimum strength of association (on the risk ratio scale) that an unmeasured confounder would need with both treatment and outcome to explain away the observed effect",{"type":64,"tag":405,"props":1456,"children":1457},{},[1458],{"type":70,"value":1459},"Always — report alongside primary results",{"type":64,"tag":383,"props":1461,"children":1462},{},[1463,1471,1476],{"type":64,"tag":405,"props":1464,"children":1465},{},[1466],{"type":64,"tag":99,"props":1467,"children":1468},{},[1469],{"type":70,"value":1470},"Negative control outcomes",{"type":64,"tag":405,"props":1472,"children":1473},{},[1474],{"type":70,"value":1475},"Outcomes known to be unaffected by the treatment; a non-null association signals residual bias",{"type":64,"tag":405,"props":1477,"children":1478},{},[1479],{"type":70,"value":1480},"Include 3–5 negative controls; if they show associations, the primary result is suspect",{"type":64,"tag":383,"props":1482,"children":1483},{},[1484,1492,1497],{"type":64,"tag":405,"props":1485,"children":1486},{},[1487],{"type":64,"tag":99,"props":1488,"children":1489},{},[1490],{"type":70,"value":1491},"Negative control exposures",{"type":64,"tag":405,"props":1493,"children":1494},{},[1495],{"type":70,"value":1496},"Exposures known to be unrelated to the outcome; test whether the analytic pipeline produces null results for them",{"type":64,"tag":405,"props":1498,"children":1499},{},[1500],{"type":70,"value":1501},"Useful for validating the study design",{"type":64,"tag":383,"props":1503,"children":1504},{},[1505,1513,1518],{"type":64,"tag":405,"props":1506,"children":1507},{},[1508],{"type":64,"tag":99,"props":1509,"children":1510},{},[1511],{"type":70,"value":1512},"Quantitative bias analysis (QBA)",{"type":64,"tag":405,"props":1514,"children":1515},{},[1516],{"type":70,"value":1517},"Formally models the impact of a hypothesized unmeasured confounder with specified prevalence and effect sizes",{"type":64,"tag":405,"props":1519,"children":1520},{},[1521],{"type":70,"value":1522},"When a specific unmeasured confounder is suspected (e.g., smoking, BMI in claims data)",{"type":64,"tag":80,"props":1524,"children":1525},{},[1526,1530],{"type":64,"tag":99,"props":1527,"children":1528},{},[1529],{"type":70,"value":787},{"type":70,"value":1531}," Every pharmacoepidemiology study should report at minimum the E-value and include at least one negative control analysis.",{"type":64,"tag":295,"props":1533,"children":1535},{"id":1534},"_9-key-design-decisions-summary-table",[1536],{"type":70,"value":1537},"9. Key Design Decisions Summary Table",{"type":64,"tag":375,"props":1539,"children":1540},{},[1541,1562],{"type":64,"tag":379,"props":1542,"children":1543},{},[1544],{"type":64,"tag":383,"props":1545,"children":1546},{},[1547,1552,1557],{"type":64,"tag":387,"props":1548,"children":1549},{},[1550],{"type":70,"value":1551},"Design element",{"type":64,"tag":387,"props":1553,"children":1554},{},[1555],{"type":70,"value":1556},"Recommended approach",{"type":64,"tag":387,"props":1558,"children":1559},{},[1560],{"type":70,"value":1561},"Red flag",{"type":64,"tag":398,"props":1563,"children":1564},{},[1565,1583,1601,1619,1637,1655,1673,1691,1708],{"type":64,"tag":383,"props":1566,"children":1567},{},[1568,1573,1578],{"type":64,"tag":405,"props":1569,"children":1570},{},[1571],{"type":70,"value":1572},"User type",{"type":64,"tag":405,"props":1574,"children":1575},{},[1576],{"type":70,"value":1577},"New (incident) users only",{"type":64,"tag":405,"props":1579,"children":1580},{},[1581],{"type":70,"value":1582},"Prevalent users included without justification",{"type":64,"tag":383,"props":1584,"children":1585},{},[1586,1591,1596],{"type":64,"tag":405,"props":1587,"children":1588},{},[1589],{"type":70,"value":1590},"Comparator",{"type":64,"tag":405,"props":1592,"children":1593},{},[1594],{"type":70,"value":1595},"Active comparator (same indication)",{"type":64,"tag":405,"props":1597,"children":1598},{},[1599],{"type":70,"value":1600},"Non-users or general population as comparator",{"type":64,"tag":383,"props":1602,"children":1603},{},[1604,1609,1614],{"type":64,"tag":405,"props":1605,"children":1606},{},[1607],{"type":70,"value":1608},"Time zero",{"type":64,"tag":405,"props":1610,"children":1611},{},[1612],{"type":70,"value":1613},"Treatment initiation date",{"type":64,"tag":405,"props":1615,"children":1616},{},[1617],{"type":70,"value":1618},"Diagnosis date with treatment starting later",{"type":64,"tag":383,"props":1620,"children":1621},{},[1622,1627,1632],{"type":64,"tag":405,"props":1623,"children":1624},{},[1625],{"type":70,"value":1626},"Washout",{"type":64,"tag":405,"props":1628,"children":1629},{},[1630],{"type":70,"value":1631},"180–365 days",{"type":64,"tag":405,"props":1633,"children":1634},{},[1635],{"type":70,"value":1636},"No washout or \u003C 90 days",{"type":64,"tag":383,"props":1638,"children":1639},{},[1640,1645,1650],{"type":64,"tag":405,"props":1641,"children":1642},{},[1643],{"type":70,"value":1644},"Covariates",{"type":64,"tag":405,"props":1646,"children":1647},{},[1648],{"type":70,"value":1649},"Pre-index only",{"type":64,"tag":405,"props":1651,"children":1652},{},[1653],{"type":70,"value":1654},"Post-index covariates in PS model",{"type":64,"tag":383,"props":1656,"children":1657},{},[1658,1663,1668],{"type":64,"tag":405,"props":1659,"children":1660},{},[1661],{"type":70,"value":1662},"PS balance",{"type":64,"tag":405,"props":1664,"children":1665},{},[1666],{"type":70,"value":1667},"SMD \u003C 0.1 for all covariates",{"type":64,"tag":405,"props":1669,"children":1670},{},[1671],{"type":70,"value":1672},"Balance not reported or p-values used instead of SMD",{"type":64,"tag":383,"props":1674,"children":1675},{},[1676,1681,1686],{"type":64,"tag":405,"props":1677,"children":1678},{},[1679],{"type":70,"value":1680},"Follow-up",{"type":64,"tag":405,"props":1682,"children":1683},{},[1684],{"type":70,"value":1685},"Starts at index date",{"type":64,"tag":405,"props":1687,"children":1688},{},[1689],{"type":70,"value":1690},"Starts before treatment (immortal time)",{"type":64,"tag":383,"props":1692,"children":1693},{},[1694,1698,1703],{"type":64,"tag":405,"props":1695,"children":1696},{},[1697],{"type":70,"value":611},{"type":64,"tag":405,"props":1699,"children":1700},{},[1701],{"type":70,"value":1702},"ITT or per-protocol (explicit)",{"type":64,"tag":405,"props":1704,"children":1705},{},[1706],{"type":70,"value":1707},"Undefined or as-treated without censoring weights",{"type":64,"tag":383,"props":1709,"children":1710},{},[1711,1716,1721],{"type":64,"tag":405,"props":1712,"children":1713},{},[1714],{"type":70,"value":1715},"Sensitivity",{"type":64,"tag":405,"props":1717,"children":1718},{},[1719],{"type":70,"value":1720},"E-value + negative controls",{"type":64,"tag":405,"props":1722,"children":1723},{},[1724],{"type":70,"value":1725},"No sensitivity analysis for unmeasured confounding",{"type":64,"tag":295,"props":1727,"children":1729},{"id":1728},"_10-intention-to-treat-vs-per-protocol-in-observational-data",[1730],{"type":70,"value":1731},"10. Intention-to-Treat vs Per-Protocol in Observational Data",{"type":64,"tag":375,"props":1733,"children":1734},{},[1735,1756],{"type":64,"tag":379,"props":1736,"children":1737},{},[1738],{"type":64,"tag":383,"props":1739,"children":1740},{},[1741,1746,1751],{"type":64,"tag":387,"props":1742,"children":1743},{},[1744],{"type":70,"value":1745},"Contrast",{"type":64,"tag":387,"props":1747,"children":1748},{},[1749],{"type":70,"value":1750},"Implementation",{"type":64,"tag":387,"props":1752,"children":1753},{},[1754],{"type":70,"value":1755},"Bias concern",{"type":64,"tag":398,"props":1757,"children":1758},{},[1759,1780],{"type":64,"tag":383,"props":1760,"children":1761},{},[1762,1770,1775],{"type":64,"tag":405,"props":1763,"children":1764},{},[1765],{"type":64,"tag":99,"props":1766,"children":1767},{},[1768],{"type":70,"value":1769},"ITT analog",{"type":64,"tag":405,"props":1771,"children":1772},{},[1773],{"type":70,"value":1774},"Follow from index date regardless of adherence or switching",{"type":64,"tag":405,"props":1776,"children":1777},{},[1778],{"type":70,"value":1779},"Diluted effect if many patients switch or discontinue",{"type":64,"tag":383,"props":1781,"children":1782},{},[1783,1791,1796],{"type":64,"tag":405,"props":1784,"children":1785},{},[1786],{"type":64,"tag":99,"props":1787,"children":1788},{},[1789],{"type":70,"value":1790},"Per-protocol analog",{"type":64,"tag":405,"props":1792,"children":1793},{},[1794],{"type":70,"value":1795},"Censor at treatment discontinuation or switching; use IPCW (inverse probability of censoring weights) to adjust for informative censoring",{"type":64,"tag":405,"props":1797,"children":1798},{},[1799],{"type":70,"value":1800},"Informative censoring if sicker patients stop treatment",{"type":64,"tag":80,"props":1802,"children":1803},{},[1804,1808],{"type":64,"tag":99,"props":1805,"children":1806},{},[1807],{"type":70,"value":787},{"type":70,"value":1809}," The ITT analog is the default because it avoids informative censoring. Use the per-protocol analog only when the clinical question specifically concerns sustained treatment, and always apply IPCW.",{"type":64,"tag":73,"props":1811,"children":1813},{"id":1812},"when-not-to-use-this-skill",[1814],{"type":70,"value":1815},"When NOT to Use This Skill",{"type":64,"tag":151,"props":1817,"children":1818},{},[1819,1824,1829],{"type":64,"tag":155,"props":1820,"children":1821},{},[1822],{"type":70,"value":1823},"Replacing pre-specified statistical analysis plans (needs biostatistician sign-off)",{"type":64,"tag":155,"props":1825,"children":1826},{},[1827],{"type":70,"value":1828},"When unmeasured confounding is the primary concern and no negative controls exist",{"type":64,"tag":155,"props":1830,"children":1831},{},[1832],{"type":70,"value":1833},"Individual patient risk-benefit decisions (clinical medicine, not epidemiology)",{"type":64,"tag":73,"props":1835,"children":1837},{"id":1836},"when-to-escalate-to-a-human-expert",[1838],{"type":70,"value":1839},"When to Escalate to a Human Expert",{"type":64,"tag":151,"props":1841,"children":1842},{},[1843,1848,1853],{"type":64,"tag":155,"props":1844,"children":1845},{},[1846],{"type":70,"value":1847},"When study results will be submitted to regulatory agencies as RWE",{"type":64,"tag":155,"props":1849,"children":1850},{},[1851],{"type":70,"value":1852},"When E-value suggests unmeasured confounding could explain the entire effect",{"type":64,"tag":155,"props":1854,"children":1855},{},[1856],{"type":70,"value":1857},"When the target trial protocol requires clinical input on eligibility criteria",{"type":64,"tag":73,"props":1859,"children":1861},{"id":1860},"common-mistakes",[1862],{"type":70,"value":1863},"Common Mistakes",{"type":64,"tag":151,"props":1865,"children":1866},{},[1867,1891,1912,1933,1954,1975,1996,2017,2038,2059,2080,2101,2122,2143],{"type":64,"tag":155,"props":1868,"children":1869},{},[1870,1875,1877,1882,1884,1889],{"type":64,"tag":99,"props":1871,"children":1872},{},[1873],{"type":70,"value":1874},"Wrong:",{"type":70,"value":1876}," Including prevalent users in the study cohort\n",{"type":64,"tag":99,"props":1878,"children":1879},{},[1880],{"type":70,"value":1881},"Right:",{"type":70,"value":1883}," Always require a 180–365 day washout period and restrict to new initiators\n",{"type":64,"tag":99,"props":1885,"children":1886},{},[1887],{"type":70,"value":1888},"Why:",{"type":70,"value":1890}," Depletion of susceptibles biases toward a protective effect",{"type":64,"tag":155,"props":1892,"children":1893},{},[1894,1898,1900,1904,1906,1910],{"type":64,"tag":99,"props":1895,"children":1896},{},[1897],{"type":70,"value":1874},{"type":70,"value":1899}," Comparing drug users to non-users\n",{"type":64,"tag":99,"props":1901,"children":1902},{},[1903],{"type":70,"value":1881},{"type":70,"value":1905}," Use an active comparator with the same indication\n",{"type":64,"tag":99,"props":1907,"children":1908},{},[1909],{"type":70,"value":1888},{"type":70,"value":1911}," Confounding by indication is nearly impossible to fully adjust for without an active comparator",{"type":64,"tag":155,"props":1913,"children":1914},{},[1915,1919,1921,1925,1927,1931],{"type":64,"tag":99,"props":1916,"children":1917},{},[1918],{"type":70,"value":1874},{"type":70,"value":1920}," Starting follow-up before treatment initiation (immortal time)\n",{"type":64,"tag":99,"props":1922,"children":1923},{},[1924],{"type":70,"value":1881},{"type":70,"value":1926}," Use the new-user design (time zero = treatment start) or a landmark analysis\n",{"type":64,"tag":99,"props":1928,"children":1929},{},[1930],{"type":70,"value":1888},{"type":70,"value":1932}," The treated group gets \"free\" survival time, inflating apparent benefit",{"type":64,"tag":155,"props":1934,"children":1935},{},[1936,1940,1942,1946,1948,1952],{"type":64,"tag":99,"props":1937,"children":1938},{},[1939],{"type":70,"value":1874},{"type":70,"value":1941}," Including post-index covariates in the propensity score model\n",{"type":64,"tag":99,"props":1943,"children":1944},{},[1945],{"type":70,"value":1881},{"type":70,"value":1947}," Only include covariates measured before the index date in the PS model\n",{"type":64,"tag":99,"props":1949,"children":1950},{},[1951],{"type":70,"value":1888},{"type":70,"value":1953}," Post-index variables may be mediators or colliders, introducing bias",{"type":64,"tag":155,"props":1955,"children":1956},{},[1957,1961,1963,1967,1969,1973],{"type":64,"tag":99,"props":1958,"children":1959},{},[1960],{"type":70,"value":1874},{"type":70,"value":1962}," Using p-values to assess covariate balance after PS adjustment\n",{"type":64,"tag":99,"props":1964,"children":1965},{},[1966],{"type":70,"value":1881},{"type":70,"value":1968}," Use standardized mean differences (SMD) with a threshold of \u003C 0.1\n",{"type":64,"tag":99,"props":1970,"children":1971},{},[1972],{"type":70,"value":1888},{"type":70,"value":1974}," P-values depend on sample size and can show \"balance\" in large samples despite meaningful differences",{"type":64,"tag":155,"props":1976,"children":1977},{},[1978,1982,1984,1988,1990,1994],{"type":64,"tag":99,"props":1979,"children":1980},{},[1981],{"type":70,"value":1874},{"type":70,"value":1983}," Ignoring extreme propensity score weights\n",{"type":64,"tag":99,"props":1985,"children":1986},{},[1987],{"type":70,"value":1881},{"type":70,"value":1989}," Truncate weights at the 1st\u002F99th percentile and report sensitivity to truncation\n",{"type":64,"tag":99,"props":1991,"children":1992},{},[1993],{"type":70,"value":1888},{"type":70,"value":1995}," A single patient with weight 500 can dominate the entire analysis",{"type":64,"tag":155,"props":1997,"children":1998},{},[1999,2003,2005,2009,2011,2015],{"type":64,"tag":99,"props":2000,"children":2001},{},[2002],{"type":70,"value":1874},{"type":70,"value":2004}," Adjusting for time-varying confounders in a standard Cox model\n",{"type":64,"tag":99,"props":2006,"children":2007},{},[2008],{"type":70,"value":1881},{"type":70,"value":2010}," Use marginal structural models with stabilized IPTW when confounders are affected by prior treatment\n",{"type":64,"tag":99,"props":2012,"children":2013},{},[2014],{"type":70,"value":1888},{"type":70,"value":2016}," Standard adjustment blocks part of the causal pathway when treatment-confounder feedback exists",{"type":64,"tag":155,"props":2018,"children":2019},{},[2020,2024,2026,2030,2032,2036],{"type":64,"tag":99,"props":2021,"children":2022},{},[2023],{"type":70,"value":1874},{"type":70,"value":2025}," Omitting sensitivity analyses for unmeasured confounding\n",{"type":64,"tag":99,"props":2027,"children":2028},{},[2029],{"type":70,"value":1881},{"type":70,"value":2031}," Always report the E-value and run at least one negative control analysis\n",{"type":64,"tag":99,"props":2033,"children":2034},{},[2035],{"type":70,"value":1888},{"type":70,"value":2037}," Claims data lack BMI, smoking, lab values, and socioeconomic detail that may confound results",{"type":64,"tag":155,"props":2039,"children":2040},{},[2041,2045,2047,2051,2053,2057],{"type":64,"tag":99,"props":2042,"children":2043},{},[2044],{"type":70,"value":1874},{"type":70,"value":2046}," Running \"as-treated\" analyses without defining the causal contrast\n",{"type":64,"tag":99,"props":2048,"children":2049},{},[2050],{"type":70,"value":1881},{"type":70,"value":2052}," Explicitly specify ITT or per-protocol estimand and apply censoring weights for per-protocol\n",{"type":64,"tag":99,"props":2054,"children":2055},{},[2056],{"type":70,"value":1888},{"type":70,"value":2058}," Ambiguous estimands produce uninterpretable results",{"type":64,"tag":155,"props":2060,"children":2061},{},[2062,2066,2068,2072,2074,2078],{"type":64,"tag":99,"props":2063,"children":2064},{},[2065],{"type":70,"value":1874},{"type":70,"value":2067}," Defining exposure based on cumulative dose over follow-up or \"ever-use\"\n",{"type":64,"tag":99,"props":2069,"children":2070},{},[2071],{"type":70,"value":1881},{"type":70,"value":2073}," Define exposure at time zero; do not condition on future behavior or survival\n",{"type":64,"tag":99,"props":2075,"children":2076},{},[2077],{"type":70,"value":1888},{"type":70,"value":2079}," Conditioning on the future introduces selection bias",{"type":64,"tag":155,"props":2081,"children":2082},{},[2083,2087,2089,2093,2095,2099],{"type":64,"tag":99,"props":2084,"children":2085},{},[2086],{"type":70,"value":1874},{"type":70,"value":2088}," Ignoring the positivity assumption\n",{"type":64,"tag":99,"props":2090,"children":2091},{},[2092],{"type":70,"value":1881},{"type":70,"value":2094}," Check PS overlap and trim non-overlapping regions where one treatment has near-zero probability\n",{"type":64,"tag":99,"props":2096,"children":2097},{},[2098],{"type":70,"value":1888},{"type":70,"value":2100}," PS methods break down in strata with no treatment variation",{"type":64,"tag":155,"props":2102,"children":2103},{},[2104,2108,2110,2114,2116,2120],{"type":64,"tag":99,"props":2105,"children":2106},{},[2107],{"type":70,"value":1874},{"type":70,"value":2109}," Using a single PS method without sensitivity analysis\n",{"type":64,"tag":99,"props":2111,"children":2112},{},[2113],{"type":70,"value":1881},{"type":70,"value":2115}," Run at least two approaches (e.g., matching + IPTW) and compare results\n",{"type":64,"tag":99,"props":2117,"children":2118},{},[2119],{"type":70,"value":1888},{"type":70,"value":2121}," Discordant results signal model sensitivity and fragile conclusions",{"type":64,"tag":155,"props":2123,"children":2124},{},[2125,2129,2131,2135,2137,2141],{"type":64,"tag":99,"props":2126,"children":2127},{},[2128],{"type":70,"value":1874},{"type":70,"value":2130}," Failing to pre-specify the analysis plan\n",{"type":64,"tag":99,"props":2132,"children":2133},{},[2134],{"type":70,"value":1881},{"type":70,"value":2136}," Register the protocol or document outcome definitions, subgroups, and model choices before data analysis\n",{"type":64,"tag":99,"props":2138,"children":2139},{},[2140],{"type":70,"value":1888},{"type":70,"value":2142}," Post-hoc choices inflate false-positive rates",{"type":64,"tag":155,"props":2144,"children":2145},{},[2146,2150,2152,2156,2158,2162],{"type":64,"tag":99,"props":2147,"children":2148},{},[2149],{"type":70,"value":1874},{"type":70,"value":2151}," Reporting observational associations as causal without the target trial framework\n",{"type":64,"tag":99,"props":2153,"children":2154},{},[2155],{"type":70,"value":1881},{"type":70,"value":2157}," Explicitly map every study to a hypothetical target trial to reveal hidden assumptions\n",{"type":64,"tag":99,"props":2159,"children":2160},{},[2161],{"type":70,"value":1888},{"type":70,"value":2163}," Unmapped assumptions lead to structural biases that no statistical method can fix",{"type":64,"tag":73,"props":2165,"children":2167},{"id":2166},"references",[2168],{"type":70,"value":2169},"References",{"type":64,"tag":151,"props":2171,"children":2172},{},[2173,2186,2197,2208,2219,2230,2241,2252],{"type":64,"tag":155,"props":2174,"children":2175},{},[2176,2178],{"type":70,"value":2177},"Hernán MA, Robins JM. Causal Inference: What If. Chapman & Hall\u002FCRC 2020, ",{"type":64,"tag":2179,"props":2180,"children":2184},"a",{"href":2181,"rel":2182},"https:\u002F\u002Fwww.hsph.harvard.edu\u002Fmiguel-hernan\u002Fcausal-inference-book\u002F",[2183],"nofollow",[2185],{"type":70,"value":2181},{"type":64,"tag":155,"props":2187,"children":2188},{},[2189,2191],{"type":70,"value":2190},"Hernán MA, Alonso A, Logan R et al. Observational studies analyzed like randomized experiments: an application to postmenopausal hormone therapy and coronary heart disease. Epidemiology 2008, ",{"type":64,"tag":2179,"props":2192,"children":2195},{"href":2193,"rel":2194},"https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0b013e3181875e61",[2183],[2196],{"type":70,"value":2193},{"type":64,"tag":155,"props":2198,"children":2199},{},[2200,2202],{"type":70,"value":2201},"Lund JL, Richardson DB, Stürmer T. The active comparator, new user study design in pharmacoepidemiology. Epidemiology 2015, ",{"type":64,"tag":2179,"props":2203,"children":2206},{"href":2204,"rel":2205},"https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0000000000000231",[2183],[2207],{"type":70,"value":2204},{"type":64,"tag":155,"props":2209,"children":2210},{},[2211,2213],{"type":70,"value":2212},"Suissa S. Immortal time bias in pharmacoepidemiology. Am J Epidemiol 2008, ",{"type":64,"tag":2179,"props":2214,"children":2217},{"href":2215,"rel":2216},"https:\u002F\u002Fdoi.org\u002F10.1093\u002Faje\u002Fkwn138",[2183],[2218],{"type":70,"value":2215},{"type":64,"tag":155,"props":2220,"children":2221},{},[2222,2224],{"type":70,"value":2223},"Robins JM, Hernán MA, Brumback B. Marginal structural models and causal inference in epidemiology. Epidemiology 2000, ",{"type":64,"tag":2179,"props":2225,"children":2228},{"href":2226,"rel":2227},"https:\u002F\u002Fdoi.org\u002F10.1097\u002F00001648-200009000-00011",[2183],[2229],{"type":70,"value":2226},{"type":64,"tag":155,"props":2231,"children":2232},{},[2233,2235],{"type":70,"value":2234},"VanderWeele TJ, Ding P. Sensitivity analysis in observational research: introducing the E-value. Ann Intern Med 2017, ",{"type":64,"tag":2179,"props":2236,"children":2239},{"href":2237,"rel":2238},"https:\u002F\u002Fdoi.org\u002F10.7326\u002FM16-2607",[2183],[2240],{"type":70,"value":2237},{"type":64,"tag":155,"props":2242,"children":2243},{},[2244,2246],{"type":70,"value":2245},"Austin PC. An introduction to propensity score methods for reducing the effects of confounding in observational studies. Multivariate Behav Res 2011, ",{"type":64,"tag":2179,"props":2247,"children":2250},{"href":2248,"rel":2249},"https:\u002F\u002Fdoi.org\u002F10.1080\u002F00273171.2011.568786",[2183],[2251],{"type":70,"value":2248},{"type":64,"tag":155,"props":2253,"children":2254},{},[2255,2257],{"type":70,"value":2256},"Lipsitch M, Tchetgen Tchetgen E, Cohen T. Negative controls: a tool for detecting confounding and bias in observational studies. Epidemiology 2010, ",{"type":64,"tag":2179,"props":2258,"children":2261},{"href":2259,"rel":2260},"https:\u002F\u002Fdoi.org\u002F10.1097\u002FEDE.0b013e3181d61eeb",[2183],[2262],{"type":70,"value":2259},{"items":2264,"total":2361},[2265,2283,2296,2310,2325,2338,2351],{"slug":2266,"name":2266,"fn":2267,"description":2268,"org":2269,"tags":2270,"stars":26,"repoUrl":27,"updatedAt":2282},"aws-genai-ml-architect","design AWS GenAI and ML architectures","Reasoning skill for designing AWS GenAI and ML architectures for healthcare and life sciences workloads. Use when the user asks to choose between SageMaker and Bedrock, design a RAG system over medical literature, architect clinical NLP or medical imaging inference, plan genomics or drug discovery pipelines on AWS, address HIPAA\u002FPHI compliance in ML systems, design MLOps for regulated clinical models, or optimize cost for HCLS ML workloads. Triggers include \"AWS architecture\", \"SageMaker vs Bedrock\", \"HIPAA ML\", \"clinical RAG\", \"medical imaging inference\", \"genomics on AWS\", \"PHI training\", \"MLOps healthcare\", \"Bedrock guardrails\", \"HealthLake\", \"HCLS cloud architecture\", \"BAA compliance\", \"SageMaker endpoint\", \"Bedrock knowledge base\", \"clinical NLP on AWS\", \"FDA SaMD on AWS\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2271,2274,2277,2278,2279],{"name":2272,"slug":2273,"type":16},"Architecture","architecture",{"name":2275,"slug":2276,"type":16},"AWS","aws",{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":2280,"slug":2281,"type":16},"LLM","llm","2026-07-12T08:38:07.975937",{"slug":2284,"name":2284,"fn":2285,"description":2286,"org":2287,"tags":2288,"stars":26,"repoUrl":27,"updatedAt":2295},"biomarker-discovery","guide biomarker discovery and validation","Reason about biomarker discovery and validation in HCLS — classifying biomarker intent, choosing feature-selection and cross-validation strategies, avoiding leakage, and planning external replication. Use when the user asks to discover, develop, or validate a biomarker; select features from high-dimensional omics or clinical data; design a validation study; choose evaluation metrics; justify sample size; combine multi-omics signals; or assess clinical utility. Triggers include \"discover a biomarker\", \"validate biomarker\", \"prognostic vs predictive\", \"feature selection\", \"LASSO vs elastic net\", \"nested cross-validation\", \"data leakage\", \"C-index\", \"time-dependent AUC\", \"decision curve analysis\", \"external validation cohort\", \"events per variable\", \"optimism-corrected\", \"multi-omics integration\", \"clinical utility of a biomarker\", \"is this biomarker ready\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2289,2290,2293,2294],{"name":2275,"slug":2276,"type":16},{"name":2291,"slug":2292,"type":16},"Bioinformatics","bioinformatics",{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},"2026-07-12T08:37:49.295301",{"slug":2297,"name":2297,"fn":2298,"description":2299,"org":2300,"tags":2301,"stars":26,"repoUrl":27,"updatedAt":2309},"cdisc-compliance","reason about CDISC SDTM and ADaM implementation","Reason about CDISC SDTM and ADaM implementation for regulatory submissions. Use when the user asks about SDTM domain mapping, ADaM dataset design, controlled terminology versioning, define.xml completeness, FDA or PMDA submission requirements, query prioritization by clinical impact, SUPPQUAL usage, or CDISC compliance review. Triggers include \"SDTM mapping\", \"ADaM dataset\", \"CDISC compliance\", \"controlled terminology\", \"define.xml\", \"FDA submission data\", \"PMDA submission\", \"SDTM domain\", \"ADSL\", \"ADAE\", \"ADLB\", \"BDS structure\", \"SUPPQUAL\", \"RELREC\", \"value-level metadata\", \"CDISC CT\", \"regulatory submission data standards\", \"eCTD datasets\", \"SDTM 3.3\", \"ADaM 1.1\", \"query prioritization\", \"clinical data review\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2302,2305,2306],{"name":2303,"slug":2304,"type":16},"Clinical Trials","clinical-trials",{"name":21,"slug":22,"type":16},{"name":2307,"slug":2308,"type":16},"Regulatory Compliance","regulatory-compliance","2026-07-12T08:37:33.35594",{"slug":2311,"name":2311,"fn":2312,"description":2313,"org":2314,"tags":2315,"stars":26,"repoUrl":27,"updatedAt":2324},"cell-type-annotation","annotate single-cell RNA-seq clusters","Generate code to assign cell type labels to single-cell RNA-seq clusters using CellTypist, SingleR, marker-based annotation, or reference label transfer (scANVI\u002Fingest). Triggers on requests to \"annotate cell types\", \"label clusters\", \"run CellTypist\", \"SingleR annotation\", \"marker gene dotplot\", \"transfer labels from reference atlas\", \"cell identity\", \"automated annotation\", \"reference mapping\", \"scANVI label transfer\", \"canonical markers\", \"immune cell types\", \"hierarchical annotation\", \"majority voting CellTypist\", \"over-clustering annotation\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2316,2317,2320,2321],{"name":2291,"slug":2292,"type":16},{"name":2318,"slug":2319,"type":16},"Data Analysis","data-analysis",{"name":21,"slug":22,"type":16},{"name":2322,"slug":2323,"type":16},"RNA-seq","rna-seq","2026-07-12T08:38:05.443454",{"slug":2326,"name":2326,"fn":2327,"description":2328,"org":2329,"tags":2330,"stars":26,"repoUrl":27,"updatedAt":2337},"cheminformatics","calculate molecular properties with RDKit","Cheminformatics pipeline for small-molecule property calculation, filtering, and similarity analysis using RDKit. Use when the user asks to compute molecular descriptors, filter compounds by Lipinski or Veber rules, detect PAINS, calculate fingerprint similarity, run matched molecular pair analysis, generate ADMET descriptors, or process SMILES. Triggers include \"RDKit\", \"molecular descriptors\", \"Lipinski\", \"rule of five\", \"Veber\", \"PAINS\", \"pan-assay interference\", \"Morgan fingerprint\", \"Tanimoto\", \"fingerprint similarity\", \"matched molecular pair\", \"MMP\", \"mmpdb\", \"ADMET\", \"druglikeness\", \"SMILES\", \"cheminformatics\", \"compound filtering\", \"chemical similarity\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2331,2332,2335,2336],{"name":2291,"slug":2292,"type":16},{"name":2333,"slug":2334,"type":16},"Chemistry","chemistry",{"name":2318,"slug":2319,"type":16},{"name":14,"slug":15,"type":16},"2026-07-12T08:37:28.334619",{"slug":2339,"name":2339,"fn":2340,"description":2341,"org":2342,"tags":2343,"stars":26,"repoUrl":27,"updatedAt":2350},"claims-analytics","analyze and parse healthcare claims data","Pipeline skill for healthcare claims data parsing, analysis, and fraud detection. Use when the user asks to parse X12 837 or 835 claim files, manipulate ICD-10 CPT or HCPCS codes, detect billing pattern anomalies, profile providers against specialty peers, identify outlier billing behavior, validate NCCI edits programmatically, detect duplicate claims, run Benford's law analysis on charges, build claims data pipelines, or analyze E&M code distributions. Triggers include \"parse X12 837\", \"parse 835\", \"claims SQL\", \"ICD-10 manipulation\", \"CPT code analysis\", \"provider profiling\", \"billing outlier\", \"NCCI validation code\", \"duplicate claim detection\", \"Benford's law charges\", \"claims ETL\", \"E&M distribution analysis\", \"claims analytics pipeline\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2344,2345,2346,2349],{"name":2318,"slug":2319,"type":16},{"name":18,"slug":19,"type":16},{"name":2347,"slug":2348,"type":16},"Insurance","insurance",{"name":21,"slug":22,"type":16},"2026-07-12T08:37:34.815088",{"slug":2352,"name":2352,"fn":2353,"description":2354,"org":2355,"tags":2356,"stars":26,"repoUrl":27,"updatedAt":2360},"claims-billing-rules","analyze healthcare claims billing rules","Reasoning skill for healthcare claims billing rules and fraud detection logic. Use when the user asks about CMS billing rules, place of service codes, global surgery periods, modifier usage (25 59 76 77), NCCI edit logic, column 1 column 2 code pairs, mutually exclusive procedures, modifier indicators, fraud waste and abuse patterns, E&M upcoding, unbundling, phantom billing, impossible day detection, coding error versus fraud distinction, FWA investigation methodology, or claims audit logic. Triggers include \"CMS billing rules\", \"NCCI edits\", \"modifier 25\", \"modifier 59\", \"global surgery period\", \"upcoding\", \"unbundling\", \"phantom billing\", \"impossible day\", \"FWA\", \"fraud waste abuse\", \"coding error vs fraud\", \"claims audit\", \"billing compliance\", \"E&M level selection\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2357,2358,2359],{"name":18,"slug":19,"type":16},{"name":2347,"slug":2348,"type":16},{"name":2307,"slug":2308,"type":16},"2026-07-12T08:38:28.210856",40,{"items":2363,"total":2539},[2364,2383,2404,2414,2427,2440,2450,2460,2481,2496,2511,2526],{"slug":2365,"name":2365,"fn":2366,"description":2367,"org":2368,"tags":2369,"stars":2380,"repoUrl":2381,"updatedAt":2382},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2370,2371,2374,2377],{"name":2275,"slug":2276,"type":16},{"name":2372,"slug":2373,"type":16},"Debugging","debugging",{"name":2375,"slug":2376,"type":16},"Logs","logs",{"name":2378,"slug":2379,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":2384,"name":2385,"fn":2386,"description":2387,"org":2388,"tags":2389,"stars":2380,"repoUrl":2381,"updatedAt":2403},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2390,2393,2394,2397,2400],{"name":2391,"slug":2392,"type":16},"Aurora","aurora",{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},"Database","database",{"name":2398,"slug":2399,"type":16},"Serverless","serverless",{"name":2401,"slug":2402,"type":16},"SQL","sql","2026-07-12T08:36:45.053393",{"slug":2405,"name":2406,"fn":2386,"description":2387,"org":2407,"tags":2408,"stars":2380,"repoUrl":2381,"updatedAt":2413},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2409,2410,2411,2412],{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},{"name":2398,"slug":2399,"type":16},{"name":2401,"slug":2402,"type":16},"2026-07-12T08:36:42.694299",{"slug":2415,"name":2416,"fn":2386,"description":2387,"org":2417,"tags":2418,"stars":2380,"repoUrl":2381,"updatedAt":2426},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2419,2420,2421,2424,2425],{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},{"name":2422,"slug":2423,"type":16},"Migration","migration",{"name":2398,"slug":2399,"type":16},{"name":2401,"slug":2402,"type":16},"2026-07-12T08:36:38.584057",{"slug":2428,"name":2429,"fn":2386,"description":2387,"org":2430,"tags":2431,"stars":2380,"repoUrl":2381,"updatedAt":2439},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2432,2433,2434,2437,2438],{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},{"name":2435,"slug":2436,"type":16},"PostgreSQL","postgresql",{"name":2398,"slug":2399,"type":16},{"name":2401,"slug":2402,"type":16},"2026-07-12T08:36:46.530743",{"slug":2441,"name":2442,"fn":2386,"description":2387,"org":2443,"tags":2444,"stars":2380,"repoUrl":2381,"updatedAt":2449},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2445,2446,2447,2448],{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},{"name":2398,"slug":2399,"type":16},{"name":2401,"slug":2402,"type":16},"2026-07-12T08:36:48.104182",{"slug":2451,"name":2451,"fn":2386,"description":2387,"org":2452,"tags":2453,"stars":2380,"repoUrl":2381,"updatedAt":2459},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2454,2455,2456,2457,2458],{"name":2275,"slug":2276,"type":16},{"name":2395,"slug":2396,"type":16},{"name":2422,"slug":2423,"type":16},{"name":2398,"slug":2399,"type":16},{"name":2401,"slug":2402,"type":16},"2026-07-12T08:36:36.374512",{"slug":2461,"name":2461,"fn":2462,"description":2463,"org":2464,"tags":2465,"stars":2478,"repoUrl":2479,"updatedAt":2480},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2466,2469,2472,2475],{"name":2467,"slug":2468,"type":16},"Accounting","accounting",{"name":2470,"slug":2471,"type":16},"Analytics","analytics",{"name":2473,"slug":2474,"type":16},"Cost Optimization","cost-optimization",{"name":2476,"slug":2477,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":2482,"name":2482,"fn":2483,"description":2484,"org":2485,"tags":2486,"stars":2478,"repoUrl":2479,"updatedAt":2495},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2487,2488,2489,2492],{"name":2275,"slug":2276,"type":16},{"name":2476,"slug":2477,"type":16},{"name":2490,"slug":2491,"type":16},"Management","management",{"name":2493,"slug":2494,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":2497,"name":2497,"fn":2498,"description":2499,"org":2500,"tags":2501,"stars":2478,"repoUrl":2479,"updatedAt":2510},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2502,2503,2504,2507],{"name":2470,"slug":2471,"type":16},{"name":2476,"slug":2477,"type":16},{"name":2505,"slug":2506,"type":16},"Financial Statements","financial-statements",{"name":2508,"slug":2509,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":2512,"name":2512,"fn":2513,"description":2514,"org":2515,"tags":2516,"stars":2478,"repoUrl":2479,"updatedAt":2525},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2517,2520,2523],{"name":2518,"slug":2519,"type":16},"Automation","automation",{"name":2521,"slug":2522,"type":16},"Documents","documents",{"name":2524,"slug":2512,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":2527,"name":2527,"fn":2528,"description":2529,"org":2530,"tags":2531,"stars":2478,"repoUrl":2479,"updatedAt":2538},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2532,2533,2534,2535],{"name":2467,"slug":2468,"type":16},{"name":2318,"slug":2319,"type":16},{"name":2476,"slug":2477,"type":16},{"name":2536,"slug":2537,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150]