---
name: brycewang-stanford/lifelines
source: https://app.decimal.ai/s/brycewang-stanford-lifelines@1/SKILL.md
source_sha256: 886b4337379c
---

# Lifelines - Survival Analysis

In medicine, we often care about "Time to Event" (death, recovery, relapse). Lifelines handles the complexity of "censored" data (patients who left the study).

## When to Use

- Analyzing clinical trial data (time to death, disease progression).
- Comparing survival between treatment groups.
- Identifying risk factors using Cox Proportional Hazards regression.
- Building survival models for prognosis.
- Epidemiology studies (time to infection, recovery).

## Core Principles

### Censoring

Patients who haven't experienced the event by the end of the study are "censored". Lifelines properly accounts for this.

### Hazard Ratios

In Cox regression, a hazard ratio > 1 means increased risk; < 1 means decreased risk.

### Survival Curves

Kaplan-Meier estimates the probability of survival over time without assuming a distribution.

## Quick Reference

### Standard Imports

```python
from lifelines import KaplanMeierFitter, CoxPHFitter
from lifelines.statistics import logrank_test
import pandas as pd
```

### Basic Patterns

```python
# 1. Kaplan-Meier (Visualizing survival)
kmf = KaplanMeierFitter()
kmf.fit(durations=df['days'], event_observed=df['died'])
kmf.plot_survival_function()
kmf.median_survival_time_  # Time when 50% have died

# 2. Cox Proportional Hazards (Risk factors)
cph = CoxPHFitter()
cph.fit(df, duration_col='days', event_col='died')
cph.print_summary() # See hazard ratios for age, drug type, etc.
cph.plot_partial_effects_on_outcome(covariates=['age'], values=[30, 50, 70])
```

## Critical Rules

### ✅ DO

- **Use event_observed correctly** - 1 = event occurred, 0 = censored.
- **Check proportional hazards assumption** - Use `cph.check_assumptions()` to validate Cox model.
- **Compare groups with logrank test** - Statistical test for survival curve differences.
- **Plot confidence intervals** - Survival estimates have uncertainty, especially with small samples.

### ❌ DON'T

- **Don't ignore censoring** - Treating censored patients as "survived" biases results.
- **Don't use regular regression** - Time-to-event data requires specialized methods.
- **Don't assume proportional hazards** - If violated, use stratified Cox or parametric models.

## Advanced Patterns

### Comparing Multiple Groups

```python
from lifelines.statistics import multivariate_logrank_test

# Compare survival across treatment groups
results = multivariate_logrank_test(df['days'], df['group'], df['died'])
print(results.p_value)
```

### Parametric Models

```python
from lifelines import WeibullFitter, ExponentialFitter

# When you need to extrapolate beyond observed data
wf = WeibullFitter()
wf.fit(df['days'], df['died'])
wf.plot()
```

Lifelines transforms complex survival data into actionable medical insights, enabling evidence-based decisions in clinical research and practice.