Guides  /  missing data

Missing data: MCAR, MAR and MNAR

Every real dataset has gaps, and what you may do about them depends entirely on why they are there. This guide explains the three missingness mechanisms in plain terms, why the default of deleting incomplete rows is a decision rather than a neutral starting point, what multiple imputation can and cannot fix, and how to report any of it so a reviewer is satisfied.

Sidra Khan Written and reviewed by Sidra Khan, Lead Biostatistician
Updated 26 October 202611 min read
What are MCAR, MAR and MNAR?

Three descriptions of why data is missing. Missing completely at random means the gaps are unrelated to anything, observed or unobserved. Missing at random means the gaps are related to things you did measure, so they can be accounted for. Missing not at random means the gaps are related to the missing values themselves, which no standard method can fix from the data alone. The names are unhelpful, because missing at random does not mean random. It means explainable by what you have.

Definitions

The three mechanisms

MechanismThe gaps depend onExampleFixable?
MCAR
completely at random
NothingA freezer fails and destroys a random batch of samplesYes. Deletion is unbiased, just wasteful.
MAR
at random
Things you measuredYounger patients skip the income question, and you recorded ageYes, if the predictors are in your model.
MNAR
not at random
The missing value itselfThe highest earners decline to state incomeNot from the data alone.

MCAR is rare outside equipment failure and deliberate sampling. MAR is the working assumption behind most modern methods. MNAR is common in exactly the settings people most want to study: dropout from treatment, non-response on sensitive questions, and people who stop using an app because they recovered or deteriorated.

You cannot test for MAR

You can test whether data is MCAR, and Little's test does that. You cannot test MAR against MNAR, because distinguishing them requires the values you do not have. Any claim that data "was shown to be MAR" is at best a claim that it was not MCAR. The mechanism is an argument from how the data arose, not a result.

Consequences

Why the mechanism decides everything

The mechanism determines which methods stay valid, and the hierarchy is strict.

✓Under MCAR almost anything works, including deleting incomplete rows. You lose precision, not accuracy.
✓Under MAR, likelihood-based methods including mixed effects models, and multiple imputation, remain valid. Complete-case analysis generally does not.
✓Under MNAR nothing standard is valid. You move to sensitivity analysis, which asks how wrong the answer could be rather than producing a correct one.

This is also where GEE differs sharply from mixed models. Standard GEE requires MCAR, a stronger assumption than the MAR that mixed models tolerate. In a study with dropout related to anything observed, that difference can decide which method is defensible.

The default

Complete-case analysis is a choice

Deleting rows with any missing value is what software does unless told otherwise, which is why it rarely gets described as a decision. It is one, and it has two costs.

The first is power. With ten variables each missing five per cent at random, around forty per cent of rows can disappear, and the loss compounds silently. The second is bias. Unless data is MCAR, the complete cases are a selected subgroup, and the analysis describes them rather than your sample.

There is a narrower case where complete-case analysis is fine even under MAR: when missingness depends only on variables that are already covariates in your model and the outcome is fully observed. That is a real exemption, worth knowing, and it is not the situation most people are in.

Worked example

How much complete-case analysis costs you

A study measures an outcome Y in two equally sized groups defined by X. Y is missing for some people, and how often depends on X.

XShare of sampleTrue mean of YP(Y missing)Share of complete cases
050%10.00.266.7%
150%20.00.633.3%

Missingness depends only on X, which you observed. That makes this missing at random, the condition most modern methods are built for.

Step 1. The answer you want

true mean of Y = (0.5 × 10.0) + (0.5 × 20.0) = 15.00

Step 2. What complete-case analysis gives you

Work out what fraction of the surviving records come from each group. Group X = 0 retains 80% of its half, so 0.40 of the original sample; group X = 1 retains 40% of its half, so 0.20. Together 0.60 of the sample survives.

complete-case mean = (0.40 × 10.0 + 0.20 × 20.0) / 0.60
    = 8.0 / 0.60 = 13.33

Step 3. The damage

bias = 13.33 − 15.00 = −1.67

Two things happened at once. You lost 40% of your data, which costs precision. And the surviving records over-represent the low-Y group, which costs accuracy. The second is the serious one, because it shifts the answer rather than widening the interval, and nothing in the output flags it.

Step 4. What fixes it

Because missingness depends only on X, and X is observed, both multiple imputation and inverse probability weighting recover 15.00. Imputation does so by filling in Y from its relationship with X; weighting does so by up-weighting the under-represented group. Either works; neither would work if missingness depended on Y itself.

The one case where complete-case analysis is still fine

If you are fitting a regression of Y on X, missingness depends only on X, and X is in your model, then complete-case analysis is unbiased for the regression coefficients even under MAR. You lose precision, not accuracy. That exemption is real and worth knowing, and it does not extend to estimating the mean of Y, which is what went wrong above.

Options

What the methods actually do

MethodWhat it doesVerdict
Complete-caseDrops any row with a gapValid under MCAR. Declare it, do not let it happen by default.
Mean substitutionFills gaps with the column meanAvoid. It shrinks variance and manufactures false precision.
Last observation carried forwardRepeats the previous valueAvoid. It assumes people froze at the moment they left.
Single regression imputationPredicts each gap onceBetter, but treats a guess as a known value.
Multiple imputationCreates several completed datasets and pools resultsThe practical default under MAR.
Full information maximum likelihoodUses all available data directly in estimationEquivalent to MI under MAR, and simpler where available.
Inverse probability weightingUpweights those resembling the missingUseful, especially for dropout; needs a model of missingness.

Mean substitution and last observation carried forward still appear in submitted papers. Both are now treated as red flags by reviewers, and the second was effectively retired from regulated trial work years ago.

In practice

Multiple imputation in practice

Multiple imputation fills the gaps several times over, with the variation between those versions carrying the uncertainty that single imputation throws away. Analyse each completed dataset, then pool using Rubin's rules, which combine the estimates and inflate the standard errors to reflect how much the imputations disagreed.

✓Include the outcome in the imputation model. Leaving it out biases associations towards zero. This is the most common mistake.
✓Make the imputation model at least as rich as the analysis model, including any interactions and non-linear terms you will later use.
✓Add auxiliary variables that predict missingness or the missing values, even if they are not in the analysis.
✓Use enough imputations. Five was the old advice; a reasonable modern rule is at least as many as the percentage of incomplete cases.
✓Respect the structure. Clustered or repeated-measures data needs imputation that accounts for the grouping, or you flatten the very structure your analysis relies on.
Imputation does not create information

It lets you use the information you already hold without discarding partial records. If a variable is eighty per cent missing, multiple imputation will produce numbers and they will be mostly assumption. There is no threshold at which it becomes dishonest, but there is a point where you should say plainly how much of the result is carried by the imputation model.

The hard case

When it is not at random

If people left because of the thing you are measuring, no complete-data method recovers the truth. What you can do is show how much the conclusion depends on the assumption.

The usual approach is a delta-adjusted sensitivity analysis: impute under MAR, then shift the imputed values by a specified amount in the plausible direction, and repeat across a range of shifts. The output is not a corrected estimate. It is a statement of how large the departure from MAR would have to be before your conclusion changes. If the answer is "a small one", that is important for your reader to know.

In app and wearable research this is routine rather than exceptional. People stop logging for reasons tied to their symptoms, so the gaps are informative by construction, and the same filtering that produces self-selection at recruitment keeps operating throughout follow-up.

Doing it

In R, SPSS and Stata

R

mice is the standard package and handles the whole impute-analyse-pool cycle.

library(mice)
imp <- mice(df, m = 30, method = "pmm", seed = 123)
fit <- with(imp, lm(outcome ~ treatment + age))
summary(pool(fit))

Three details matter. m = 30 rather than the default 5, since a reasonable rule is at least as many imputations as the percentage of incomplete cases. Predictive mean matching keeps imputed values inside the observed range, which avoids impossible values. And pool() applies Rubin's rules, which is what inflates the standard errors to reflect the uncertainty in the imputation. Analysing a single completed dataset skips that entirely.

Inspect the result with densityplot(imp), comparing imputed against observed distributions.

SPSS

Multiple imputation is under Analyze, Multiple Imputation, Impute Missing Data Values.

MULTIPLE IMPUTATION outcome treatment age
  /IMPUTE METHOD = AUTO NIMPUTATIONS = 30
  /CONSTRAINTS outcome (MIN = 0)
  /OUTFILE IMPUTATIONS = imputed.

SPSS then pools automatically when you run supported procedures on the imputed file, showing the pooled row at the bottom of the output. Not every procedure supports pooling, and where it does not SPSS silently reports each imputation separately, so check for the pooled row before reporting anything.

Stata

The mi suite declares the structure, imputes, then prefixes the analysis.

mi set wide
mi register imputed outcome
mi impute chained (pmm, knn(5)) outcome = treatment age, add(30)
mi estimate: regress outcome treatment age

mi estimate applies Rubin's rules and reports the fraction of missing information, which is worth reading: a high value means the result rests heavily on the imputation model rather than on observed data.

Put the outcome in the imputation model

Leaving it out is the single most common error in applied multiple imputation and it biases associations towards zero. It feels circular and it is not: the imputation model and the analysis model do different jobs. The imputation model should be at least as rich as the analysis model, including any interactions you intend to fit.

Avoid these

Six mistakes that cost marks

MistakeWhy it matters
Letting complete-case happen by defaultSoftware drops incomplete rows silently. Under MAR this shifted a true mean of 15.00 to 13.33 while discarding 40% of the data.
Omitting the outcome from the imputation modelBiases the associations you then estimate towards zero. The commonest error in applied imputation.
Using five imputationsOld guidance. Use at least as many as the percentage of incomplete cases; imputations are cheap and instability is not.
Mean substitution or last observation carried forwardBoth manufacture false precision. The second assumes people froze at the moment they left.
Claiming data "was shown to be MAR"Nothing can distinguish MAR from MNAR. Little's test assesses MCAR only. The mechanism is argued, not demonstrated.
Ignoring structure when imputingClustered or repeated-measures data needs imputation that respects the grouping, or you flatten the structure the analysis depends on.

Writing it up

How to report it

✓Give the amount missing for each variable, not an overall figure.
✓Compare complete and incomplete cases on your key variables, in a table.
✓State the assumed mechanism and the reasoning behind it, as an argument rather than a test result.
✓Describe the method fully: for imputation, the variables in the model, the number of imputations and the pooling rule.
✓Report a sensitivity analysis under a different assumption, and say whether the conclusion survived it.

Item 12c of the STROBE statement asks for most of this directly, and it is among the items reviewers read first. Answering it properly in the methods removes an entire line of objection before it is raised.

Common questions

Frequently asked questions

What is the difference between MCAR, MAR and MNAR?

MCAR means the gaps are unrelated to anything. MAR means they are related to variables you measured. MNAR means they are related to the missing values themselves. The mechanism decides which methods stay valid: almost anything works under MCAR, likelihood methods and multiple imputation work under MAR, and nothing standard works under MNAR.

Can I test which mechanism applies?

Only partly. Little's test assesses MCAR. Nothing can distinguish MAR from MNAR, because doing so would require the values you do not have. The mechanism is argued from how the data arose, not demonstrated, and papers claiming data "was shown to be MAR" are overstating what is possible.

How much missing data is too much?

There is no valid threshold, and the once-common five or ten per cent rules have no basis. Five per cent missing not at random can do more damage than forty per cent missing completely at random. The mechanism matters more than the amount, though at very high levels you should say plainly how much of the result rests on the imputation model.

Is it acceptable to just delete incomplete rows?

Under MCAR, yes, at a cost in power. Under MAR it generally biases results, with one exception: when missingness depends only on variables already in your model and the outcome is fully observed. Either way it should be a stated decision rather than a software default you never noticed.

Should I include the outcome when imputing?

Yes. Omitting the outcome from the imputation model biases the associations you then estimate towards zero. It feels like circular reasoning and it is not: the imputation model and the analysis model have different jobs, and leaving the outcome out is the single most common error in applied multiple imputation.

How many imputations do I need?

More than the five often quoted from older guidance. A practical rule is at least as many imputations as the percentage of cases with any missing data, so thirty per cent incomplete suggests at least thirty imputations. Imputations are cheap; instability in your results is not.