> INSUFFICIENT-n explained: why a completeness bar is set before the run, what the refusal tells you, and what to do next when a battery declines to estimate.

- Canonical: https://hadalinstruments.com/docs/insufficient-n/

---

Reading output

# When an instrument refuses to answer

What INSUFFICIENT-n means, why the bar is set before the run, and why a refusal is the feature.

- **Page kind** — Reference

- **Applies to** — Every battery that declares a completeness bar

- **Describes** — Intended behaviour — nothing has shipped

- **Instrument version** — NOT YET PUBLISHED

Not on this page This page covers one of the three empty results. The other two, and the limits that apply even when an estimate does publish, are elsewhere. [Reading a result](https://hadalinstruments.com/docs/reading-results/)[What a result does not establish](https://hadalinstruments.com/docs/limits/)

At some point a battery will hand back a refusal where you expected a number. The panel will name the dimension, state the observations required, state the observations present, and stop. This page explains why that behaviour exists and what to do when you meet it. It describes intended behaviour; no instrument has shipped.

## What the refusal says

An `INSUFFICIENT-n` result is a statement about your sample, not about the market. It means the estimator for that dimension has a declared minimum — a floor on observations, covered sessions, or events of the relevant kind — and the sample you supplied sits below it. The panel reports the shortfall plainly: what was needed, what was there, and which dimension is affected. Other dimensions in the same run may well publish normally, because they have different floors.

It is not an error, and there is no way to acknowledge it away. The instrument has done exactly what it was built to do.

## Why the bar is set before the run

The floor is fixed in the method, ahead of any data, and published as part of the [pre-registration](https://hadalinstruments.com/methodology/) for that battery. That ordering is the whole point.

A threshold chosen after seeing the data is not a threshold, it is a preference. Once you can move the bar, every sample clears it — you simply lower it until the number you wanted appears, and you will do this sincerely, believing you are being reasonable. Deciding in advance removes that discretion from the moment when you have the strongest incentive to use it. It is the same discipline that makes a declared exclusion rule meaningful rather than decorative.

The cost is real: sometimes you have data, you want an answer, and the instrument will not give you one. That is the price of the guarantee, and there is no version of the guarantee that does not charge it.

## Why a refusal is a feature

A tool that always produces a number is not more capable than one that sometimes refuses. It is less honest by exactly the difference.

The alternative — estimating anyway on thirty observations, printing a figure, and letting the reader supply their own scepticism — produces output that is indistinguishable from a real finding at a glance and wrong at depth. That output then gets screenshotted, quoted, and used to make a decision, stripped of every caveat that made it defensible. The refusal cannot be stripped, because there is nothing there to strip.

This is also the property that makes the published measurements worth anything. A method that can refuse can also fail. If nothing an instrument could ever encounter would cause it to decline, then its agreement with you carries no information — see the standing [can-fail](https://hadalinstruments.com/methodology/) requirement, which applies the same test to the published corpus.

## What to do next

After a refusal the completeness bar stays where the method put it, before any data arrived.

- **Widen the window.** The usual cause is a capture that is short, not defective. More sessions is the first thing to try, and the panel tells you how many observations short you were.

- **Check the session filter.** Restricting to one session and then asking a question about cross-session behaviour will starve the estimator. The filter you set is in the sample block.

- **Check the file is raw.** Aggregated bars carry a fraction of the observations of the tick stream they came from. A tick-level dimension will refuse on a bar file almost immediately, and correctly.

- **Ask a different question.** Some dimensions need events that are simply rare in your market. If contract rollovers happen four times a year, a rollover panel is not going to publish from six weeks of data, ever.

- **Record the refusal.** Keep it in the artifact alongside the dimensions that did publish. This we could not measure belongs in the record for the same reason the estimates do.

## Related

The three distinct kinds of empty output — nothing found, sample too thin, and out of scope — are separated in [reading a result](https://hadalinstruments.com/docs/reading-results/). What an estimate cannot support even when it does publish is covered in [what a result does not establish](https://hadalinstruments.com/docs/limits/).

## Frequently asked

Answered at the honest state of the project. Where an answer would need a figure or a date that has not been fixed, it says so rather than supplying a plausible one.

### What happens if there is not enough data?

The affected dimension prints a refusal instead of a number, and the panel states three things: which dimension is affected, how many observations the estimator required, and how many were present. Other dimensions in the same run may publish normally, because each has its own floor. The refusal is written into the artifact alongside the estimates that did publish, so the record shows what could not be measured as well as what could.

### Why does an instrument refuse rather than estimate?

Because an under-powered estimate is indistinguishable from a real finding at a glance and wrong at depth. A figure produced from thirty observations gets screenshotted, quoted and used to make a decision, stripped of every caveat that made it defensible. A refusal cannot be stripped, because there is nothing there to strip. A tool that always produces a number is not more capable than one that sometimes refuses; it is less honest by exactly the difference.

### Can I lower the completeness bar for my own run?

No, and there is no acknowledge-and-continue path. The floor is fixed in the method ahead of any data and published as part of the [pre-registration](https://hadalinstruments.com/glossary/pre-registration/) for that battery. A threshold you can move after seeing the sample is not a threshold, it is a preference: you lower it until the number you wanted appears, sincerely, believing you are being reasonable. Removing that discretion from the moment you have the strongest incentive to use it is the entire mechanism.

[Methodology](https://hadalinstruments.com/methodology/)

### Does a refusal mean something is wrong with my broker or my data?

Neither. INSUFFICIENT-n is a statement about the size of your sample, not about its quality and not about the market. A refusal on a rollover panel usually means rollovers are rare in your market and six weeks of capture cannot contain enough of them. It says nothing at all about the venue, and reading it as a finding about the venue is the one interpretation the result explicitly does not support.

### Is a refusal the same as finding nothing?

No, and confusing the two is the mistake this behaviour exists to prevent. Finding nothing means the battery ran, the sample cleared its bar, and the effect was not present at a level the estimator can distinguish from noise. That is a real finding about your feed. A refusal means the battery never estimated at all. Reporting a refusal as though it were a null invents evidence of absence.

[The three shapes of an empty result](https://hadalinstruments.com/docs/reading-results/)

Documentation — page 5 of 9 , in reading order
