Why observed values must stay fixed
Fully conditional specification (FCS) fills in missing entries by updating variables in turn from conditional models. During these updates, some entries are simulated and others provide information for the models. A basic rule governs the distinction: an entry that was observed in the input data is not an imputation target. Its value remains fixed throughout the algorithm.
This rule is an algorithmic invariant, not a claim that the observed values are error-free or that the missingness mechanism is ignorable. It says that FCS completes the data by supplying values only where values were missing. If an observed value is accidentally overwritten, the algorithm is no longer completing the supplied data set: it is replacing part of it.
The indicator \(R_{ij}\) is determined from the input data and remains fixed during ordinary FCS imputation. The values in missing cells, \(R_{ij}=0\), can change from one update to the next. A missing cell may receive an initial value before the first sweep, then be replaced by a stochastic conditional draw. Neither initialization nor later updating changes which cells were originally observed.
How the invariant enters a conditional update
Suppose variable \(j\) is next in the update order. The conditional model for \(X_j\) uses the other variables as predictors, along with its model parameters. The fitting and parameter-drawing details are part of the stochastic conditional update; the key point here is how the resulting draw is applied. Draw new values for the missing entries of variable \(j\), and leave its observed entries alone:
The predictors in that conditional distribution may include values imputed earlier in the sweep. That does not change the rule for the target variable: its observed entries are still copied unchanged from the input. When another variable is updated, the same principle applies to that variable’s own observed entries. Thus the current data table contains a mixture of fixed observed values and evolving imputed values.
This update assumes the missingness mask has been recorded correctly, the conditional model and its predictors are specified as intended, and random draws are assigned only to rows with missing target values. These conditions describe correct implementation of the update; they do not establish that a chosen model is well specified or that the missingness assumptions needed for a particular analysis hold.
Worked Example: Updating Only Missing Biomarker Values
Consider a hypothetical data set with five records. The biomarker values in records 1, 3, and 5 were observed; values in records 2 and 4 were missing. Suppose an FCS update produces draws of 14.2 and 16.1 for the two missing values.
| Record | Original biomarker | \(R_{i,\mathrm{bio}}\) | After the update |
|---|---|---|---|
| 1 | 12.0 | 1 | 12.0 |
| 2 | Missing | 0 | 14.2 |
| 3 | 18.0 | 1 | 18.0 |
| 4 | Missing | 0 | 16.1 |
| 5 | 15.0 | 1 | 15.0 |
For records 1, 3, and 5, the update assigns the original observed values. For records 2 and 4, it assigns the simulated values. The observed-cell check is therefore \(12.0=12.0\), \(18.0=18.0\), and \(15.0=15.0\); both originally missing cells have received values. The draws are hypothetical and illustrate assignment, not a claim about a fitted model.
Why the rule holds throughout a sweep
The invariant follows directly from how each update is defined. Before the first update, store the original observed values and the fixed mask. At a particular update, only the missing entries of the target variable are assigned new draws; the observed entries of that variable are assigned their original values. Entries of other variables are not targets in this update. Therefore, if observed entries were unchanged before the update, they remain unchanged after it.
Applying this argument repeatedly establishes the rule for every step in a sweep and for every subsequent sweep. More formally, assume it holds at iteration \(t\). For each observed cell of the variable being updated, the update sets its value to \(X_{ij}^{\mathrm{obs}}\). For each observed cell in a different variable, no assignment changes it. Thus it holds at \(t+1\). Since it holds in the initialized data, induction gives the invariant at all iterations.
This justification depends on assignment being restricted to the intended target cells. An implementation that replaces an entire column with predictive draws does not satisfy that condition, even if its conditional model is otherwise correctly fitted.
Worked Example: Quantifying an Overwrite Error
Use the hypothetical biomarker values above. The three observed values are 12.0, 18.0, and 15.0, so their sum is \(12.0+18.0+15.0=45.0\). Suppose an implementation mistakenly predicts values for every row and replaces the whole column, producing 13.4, 14.2, 17.2, 16.1, and 16.0.
The observed cells have now changed: record 1 changed from 12.0 to 13.4, record 3 from 18.0 to 17.2, and record 5 from 15.0 to 16.0. Their replaced values sum to \(13.4+17.2+16.0=46.6\), rather than 45.0. The error is not repaired by the fact that the two intended missing cells received the same draws as before. The completed data set is corrupted because observed entries were replaced.
The correction is to use the mask when assigning results: retain 12.0, 18.0, and 15.0 for rows with \(R_{i,\mathrm{bio}}=1\), and take 14.2 and 16.1 only for rows with \(R_{i,\mathrm{bio}}=0\). If a software routine returns predictions for every row, treat those predictions as candidates, not as values to copy wholesale into the data.
Practical checks and common failure modes
The invariant is simple to state and easy to check. Keep an untouched copy of the input data, including its original missingness mask. After each update, compare the current values with the saved original values at all cells marked observed. Exact equality is appropriate when the algorithm is meant to copy values without transformation; for numeric processing that involves conversion, use a comparison that accounts for the documented numerical precision while still checking that no substantive change occurred.
A whole-data-set comparison is not the right test: missing cells are supposed to change. The check must be restricted to cells that were observed originally. Useful diagnostics include:
- Count the observed entries for each variable before and after a sweep; these counts must agree.
- Compare observed values to their saved originals, by variable and record, and report any changed cell.
- Check that every originally missing target cell has a current value when the update completes.
- Check that no placeholder for missingness, such as a special numeric code, has entered the analysis as if it were an observed measurement.
Worked Example: A Missing-Value Code Misread as Observed
Suppose a hypothetical laboratory data file uses 999 as a code for a missing measurement. Three recorded entries are 4.2, 999, and 5.1 in milligrams per litre. If the software treats every nonblank number as observed, it sets the mask to \(R=(1,1,1)\). Under the fixed-values rule, the value 999 then remains in the data, and the middle entry is never imputed.
That behavior preserves an incorrectly constructed mask; it does not solve the missing-data problem. Before forming \(R\), convert the documented code 999 to the software’s missing-value representation. The correct mask is then \(R=(1,0,1)\). If a hypothetical conditional draw for the middle entry is 4.7 milligrams per litre, the updated values are 4.2, 4.7, and 5.1. The two observed measurements remain unchanged, and the intended missing cell receives a draw.
This example also illustrates why preserving values is not the same as validating data coding. A mask cannot protect against an incorrect input representation: the missingness code must be identified correctly before FCS begins.
A second implementation risk arises from transformations used internally by software. A model may operate on standardized or otherwise transformed values, but the algorithm should still preserve the input’s observed data values when it returns to the stored data scale. For example, a harmless numerical round trip can produce tiny floating-point differences; a transformation applied to the wrong rows can create larger, unintended changes. Saving the original observed entries separately and restoring them after internal calculations is a direct safeguard.
What this safeguard does—and does not—establish
Keeping observed values fixed makes the imputation task faithful to the recorded data, and it prevents inadvertent replacement from changing the analysis sample’s known entries. It also makes debugging more precise: any changed observed cell identifies an implementation or data-handling problem that can be investigated directly.
The safeguard does not guarantee that the conditional models are appropriate, that draws for missing cells are plausible, or that the FCS procedure has reached a stable distribution. Nor does it determine whether the assumptions for inference with missing data are satisfied. Those are separate questions. Correctly preserving observed cells is necessary for a properly implemented imputation update, but it is not sufficient for valid inference.
Compared with a procedure that replaces observed and missing entries alike, FCS updates only the unknown entries and uses the observed entries as supplied data. Deterministic replacement of missing entries by conditional means is also distinct: it may leave observed values fixed, but it does not provide the stochastic variation used in multiple imputation. The observed-cell invariant applies regardless of the chosen conditional model or the stochastic method used for the missing cells.
Check Your Understanding
Answer each question using the fixed-mask rule. Brief solutions follow the questions.
- A variable has original values 7, missing, and 11. The update draws 9 for the missing cell. What values should the updated column contain?
- Why is it insufficient to check only that every missing cell has received a value?
- A file uses -1 to mean a missing score, but the software regards -1 as observed. What is the resulting problem, and what should be done before creating the mask?
- Does unchanged observed data establish that the conditional models are correctly specified? Explain.
Solutions. (1) The updated column is 7, 9, and 11; the first and third values are retained because they were observed. (2) Missing cells can be filled while observed cells are simultaneously overwritten, so also compare every observed cell with its saved original. (3) The incorrect mask treats -1 as an observed score, so that cell is never imputed and may enter model fitting as data. Convert the documented code to a missing value before constructing the mask. (4) No. The check establishes only that observed cells were preserved; it does not assess model specification, plausibility of draws, or assumptions needed for inference.