The FCI algorithm (hidden causes)
FCI is causal discovery for data where an important cause may be missing from the table. How it differs from PC, how to read the marks on its links, and when to choose it.
In short
FCI (Fast Causal Inference) extends PC to data where some common causes were never measured. Instead of assuming every cause is in the table, it marks where a hidden cause may be at work and leaves undecided what the data cannot decide.
Why hidden causes matter
If a variable you did not record drives two you did, those two look linked. PC, GES and LiNGAM would draw an arrow between them. FCI can recognise the pattern and say instead: these two share a cause that is not in the table.
Hidden causes are common in practice: customer intent in marketing data, cell state in biology, management decisions in operations.
How to read its output
FCI returns a partial ancestral graph (PAG). Each end of a link carries a mark:
| Link | Meaning |
|---|---|
| A → B | A is a cause of B (possibly through hidden steps); B is not a cause of A |
| A ↔ B | Neither causes the other; a hidden common cause drives both |
| A o→ B | B is not a cause of A; A may cause B, or a hidden cause drives both |
| A o–o B | The data cannot tell which of the possibilities holds |
The circles are honest uncertainty. The more circles, the more the result depends on what you know beyond the data.
What it assumes
- Faithfulness and suitable independence tests, as for PC (Fisher-z in UCMT Labs: roughly linear, bell-shaped noise).
- No feedback loops among the measured and hidden variables.
- It does not assume that every common cause is measured.
When to use it
- You know the table leaves out something important.
- PC finds a link that makes no sense in the domain: FCI may show it as a shared hidden cause.
- As a cautious second opinion next to PC or GES: links FCI marks with a plain arrow are among the firmest.
Practical tips
- FCI needs more rows than PC for the same certainty, and its output has more open ends.
- Measure the likely common causes if you can (season, segment, batch, size): every one you add turns a guess into a column.
- Use the marks to plan: an ↔ link says "find and measure the shared cause"; an o→ link says "a test on A would settle it".