---
kind: concept
slug: missing-data-imputation
title: Missing data imputation
summary: >-
  Learning from and filling in datasets whose entries are missing completely at random. One card so far, MisGAN, trains a complete-data GAN and a mask GAN, then an adversarial imputer. It reports better FID than several baselines on image data, but worse RMSE than matrix factorisation on block-missing MNIST. No other card compares alternatives.
tags: [missing-data, imputation, generative-models, gan]
papers: ["1902.09599"]
related: [generative-adversarial-network, gradient-penalty, time-series-imputation, generative-model-evaluation]
status: draft
updated_at: 2026-11-08
---

## Overview

Some entries of a dataset are not recorded: pixels, sensor readings or survey
answers. Two tasks follow. One is to train a generative model on the incomplete
data, without discarding every example that has a gap. The other is to fill
the gaps in a partial example. The paper addresses both and assumes that the
missingness is completely random, so the mask does not depend on the data
[arxiv:1902.09599 §1] [arxiv:1902.09599 §2].

Each incomplete example is a pair of values and a binary mask, where a mask
entry of 1 marks an observed value [arxiv:1902.09599 §2]. Missing entries are
filled with a constant τ before they reach a critic [arxiv:1902.09599 eq. 3].
The paper's identifiability results show that the choice of τ does not change
whether the true distribution can be uniquely recovered. Uniqueness depends
only on the null space of the masks [arxiv:1902.09599 §3].

## Variants

### Adversarial generation with a learned mask

The approach in [MisGAN](/papers/1902.09599) has three networks. A data
generator and a mask generator each have a critic. The data critic judges real
and generated examples after the same mask is applied, so the comparison is
between like-for-like inputs [arxiv:1902.09599 §2] [arxiv:1902.09599 eq. 5].
The mask generator is trained on its own mask critic, and it also receives a
weighted copy of the data loss [arxiv:1902.09599 eq. 7]. A separate imputer,
trained with its own critic, fills the gaps in a partial example, and it
keeps the observed entries unchanged [arxiv:1902.09599 §4] [arxiv:1902.09599
eq. 12].

What it does not need is a known model of the missingness process. The paper
contrasts this with AmbientGAN, which treats missingness as a corruption with
a known, parameterised form [arxiv:1902.09599 §1].

## When to use which

The card supports only one variant, so the table compares this approach
against the constraints it can meet, not against other methods.

| Situation | Use | Why |
|---|---|---|
| Missingness is plausibly independent of the values | MisGAN-style masked critic | The paper analyses and trains only this case [arxiv:1902.09599 §2] [arxiv:1902.09599 §3] |
| Missingness depends on the values (MAR or NMAR) | Not covered by this card | The paper's theory and mask design assume completely random missingness [arxiv:1902.09599 §2] |
| You need a generator, not only imputations | Train the data pair | The data critic needs no knowledge of the mask or τ, so standard complete-data architectures can be reused [arxiv:1902.09599 §2] |
| You need imputations only, and the generator is not needed | Generator plus imputer, or the imputer alone | The paper trains a stand-alone imputer on a pretrained generator without the incomplete data [arxiv:1902.09599 §4] |
| Metric is RMSE on block-missing data | Check before choosing | The paper reports MisGAN worse than GAIN and matrix factorisation there, while better on FID [arxiv:1902.09599 app. C] |
| Limited compute | Budget for four networks | Generation uses two generators and two critics. Imputation adds an imputer and a third critic. No wall-clock or memory figures are given [arxiv:1902.09599 §5] |

## Implementation sketch

The masking and imputation steps below follow the paper's equations. The
training loop is in the card, which cites the release
[arxiv:1902.09599 §2]. Shapes are (batch, dim).

```pseudocode
# Fill missing entries with a constant  [arxiv:1902.09599 eq. 3]
def mask_fill(x, m, tau):
    return x * m + tau * (1 - m)

# Keep observed entries; fill the rest with imputer output
# [arxiv:1902.09599 eq. 12]
def impute(x, m, omega, g_hat):
    # noise only where entries are missing
    noisy = x * m + omega * (1 - m)
    # the imputer's output is used only at missing positions
    fill = g_hat(noisy) * (1 - m)
    return x * m + fill
```

The mask generator's output is soft, in (0, 1), while real masks are binary.
The paper relaxes the mask with a sigmoid at temperature λ = 0.66
[arxiv:1902.09599 §2].

## Contradictions

Only one card lists this concept, so there are no disagreements between
papers to report. Within the paper, the release differs from the text in
several places. These are not resolved here.

- The text says the imputer's loss term β trains the data generator through
  an L_i term that scores G_x(z) [arxiv:1902.09599 §4] [arxiv:1902.09599 eq. 10].
  The card's reading of the release suggests that term does not reach the
  data generator as written there (see the card's Paper vs code).
- The text gives the MNIST imputer as three layers with 500 hidden units
  [arxiv:1902.09599 §5.1]. The default script uses four linear layers of
  width 784.
- The text gives 300 training epochs for MisGAN on every dataset
  [arxiv:1902.09599 app. D]. The scripts default to 500 for MNIST and 600 for
  CelebA.

## Papers

- [MisGAN: Learning from Incomplete Data with Generative Adversarial Networks](/papers/1902.09599):
  the only card for this concept. It gives a masked-critic GAN, a learned mask
  generator and an adversarial imputer for data missing completely at random.
