Missing at Random (MAR) vs MCAR vs MNAR
Every missing-data decision — drop, impute, model — depends on why the values are missing. Statisticians classify missingness into three mechanisms: MCAR, MAR, and MNAR. The names are famously confusing (MAR does not mean "random" in the everyday sense), so this guide walks all three through one concrete dataset.
Quick answer: MCAR means missingness is unrelated to anything — a pure coin flip. MAR (Missing at Random) means missingness depends only on other observed variables, not on the missing value itself. MNAR means missingness depends on the unobserved value itself (e.g. high earners hide their income). Deletion is safe only under MCAR; imputation handles MAR; MNAR requires modeling the missingness itself.
Running example: an employee survey with columns age, department, and salary, where some salary values are blank. Same dataset, three very different reasons the blanks could exist.
What does MCAR (Missing Completely at Random) mean?
Under MCAR, the probability that salary is missing has nothing to do with salary, age, department, or anything else — the blanks are a pure random sample of all rows. In our example: a server glitch dropped 4% of survey submissions at random. Whether a row is blank tells you nothing about the row.
MCAR is the only mechanism where complete cases are a true random subsample. That's why listwise deletion is unbiased under MCAR: you lose sample size (power), but averages, correlations, and regression coefficients stay honest. MCAR is also the least common mechanism in real data — genuine glitches happen, but most missingness has a reason.
What does MAR (Missing at Random) actually mean?
Under MAR, missingness depends on other variables you observed, but not on the missing value itself once you account for those. In our example: engineers skip the salary question more often than sales staff — but within each department, who skips is effectively random. Department (observed) predicts the blanks; the hidden salary value itself does not add anything.
This is why the name misleads: MAR missingness is not random overall — engineers are clearly overrepresented among the blanks. It's "random" only conditional on observed data. A more accurate name would be "missing conditionally at random," and reading it that way prevents most confusion.
MAR is the workable middle ground: because observed variables explain the missingness, methods that use those variables — multiple imputation (MICE), KNN imputation, maximum likelihood — can correct the bias. See imputation methods compared.
What does MNAR (Missing Not at Random) mean?
Under MNAR, the probability of missingness depends on the missing value itself, even after accounting for everything you observed. In our example: the highest-paid employees decline to state their salary because it is high. Within the same department and age band, the blanks still hide systematically bigger numbers than the filled-in cells.
MNAR is the dangerous case. The observed salaries are biased low, and no standard imputation can fix it — the information needed to correct the bias is exactly what's missing. Handling MNAR honestly means modeling the missingness mechanism (selection models, pattern-mixture models), running sensitivity analyses ("what if the blanks are 20% higher than predicted?"), or collecting follow-up data from non-responders.
Can you test which mechanism you have?
Only partially. You can test MCAR against MAR: compare observed variables between rows with and without missing salary (or use Little's MCAR test). If rows with blanks differ on department or age, MCAR is ruled out. But you cannot test MAR against MNAR from the data alone — that would require knowing the missing values. Distinguishing them is a judgment call about how the data was collected, not a statistical test.
Practical reasoning process:
- Ask why a value would be missing. Technical/process reasons (system migration, optional new field) suggest MCAR or MAR. Human choice about sensitive values (income, weight, drug use) suggests MNAR.
- Check whether missingness correlates with observed columns:
df.assign(miss=df['salary'].isna()).groupby('department')['miss'].mean(). Strong patterns mean not-MCAR. - If MNAR is plausible, don't pretend otherwise — run your analysis under multiple assumptions and report the range.
What are the practical implications of each mechanism?
The mechanism determines which handling strategies produce unbiased results. Deletion is only safe under MCAR; standard imputation assumes MAR; MNAR needs explicit modeling or sensitivity analysis. This table is the cheat sheet:
| Mechanism | Missingness depends on… | Example (salary survey) | Listwise deletion | Imputation (MICE/KNN) |
|---|---|---|---|---|
| MCAR | Nothing | Random server glitch | Unbiased, loses power | Works, adds precision |
| MAR | Observed variables only | Engineers skip the question more | Biased | Unbiased if predictors included |
| MNAR | The missing value itself | High earners hide high salaries | Biased | Still biased — needs sensitivity analysis |
For choosing a concrete strategy once you've reasoned about the mechanism, see deletion vs imputation: how to choose and the overview of missing data handling.
Pro Tip: Write one sentence in every analysis: "Missingness in [column] is assumed [MCAR/MAR/MNAR] because [collection-process reason]." Forcing yourself to name the mechanism and the reason catches more missing-data mistakes than any statistical test — and reviewers trust analyses that state their assumptions out loud.
← Back to Data Analysis Tips