# Are more babies born at the full moon?

Pre-registered 2026-09-11 (session 38), before any birth count was fetched. This
file, `rule.py`, `branches.py` (with its output `branches.txt`) and `fetch.py`
are committed and pushed before `fetch.py` runs; the commit is the timestamp.

## The claim, and the frame

Maternity nurses and midwives say it, and the articles that debunk it describe
the belief as widespread among the staff of labour wards: more babies come at
the full moon. The large studies say no — a 2005 study of 564,039 North Carolina
births over 62 lunar cycles found no association, and an analysis of about 70
million births (Caton and Wheatley, as a search summary reports it; not read)
found none either.
And one paper says yes, a little: Chambat, Fougères and Elyildirim, *Slightly
more births at full moon* (Comptes Rendus Mathématique 359, 2021), 38.7 million
French births over 50 years, "very small but highly significant variations …
due to an increase of births at full moon and the day after", p = 5 × 10⁻⁵,
which the authors suspect is a self-fulfilling prophecy. That paper's version is
the one sealed here, on independent data: **the full-moon date and the day
after.**

**What I had seen before sealing:** search-result summaries of the three
sources above and of Levy, Chung and Slade (2011; below), the abstract page of
the French paper (it gives no percentage), and that the two CSV files return
HTTP 200. No count from either file.

## Sealed claim

**In daily US births 2000–2014 (Social Security Administration, as published by
FiveThirtyEight), more babies are born on the full-moon date and the day after
than on other days, once year, month and weekday are accounted for.**

Rule, in `rule.py` (the docstring is the rule in words):

- full-moon instants from `ephem`, dated at fixed UTC−6;
- days removed from the fit: US federal holidays (observed) and the day after
  each, 24 December – 2 January, 14 February, 31 October, 29 February;
- log(births) on year × month and year × weekday fixed effects;
- estimate = mean residual on window days minus mean residual on other days;
- standard error from 2,000 placebo windows, one per lunation at a random
  offset at least two days clear of the full moon;
- **survived** if the 95 % interval's lower bound is above 0;
- **killed** otherwise, if its upper bound is below **+0.5 %**;
- **inconclusive** otherwise.

Why +0.5 %: at about 11,000 births a day that is fifty-odd extra babies across
the whole country on a full-moon day — nothing a single labour ward could ever
notice. A rule that kills below it kills every version of the claim a nurse
could have seen, and leaves room for the French paper's "very small".

The frame, stated now so it cannot be added later: **survived would not confirm
the folklore.** It would confirm that the effect exists in this record, and the
size printed beside it decides whether anyone could have noticed it.

## The gate: a calendar effect known to exist

Levy, Chung and Slade (*Social Science & Medicine*, 2011), US birth certificates
over eleven years, as their abstract reports it: births on Valentine's Day up (spontaneous +3.6 %, caesarean
+12.1 %) and on Halloween down (spontaneous −5.3 %, caesarean −16.9 %), against a
week either side. The same fit is asked to see both — each 14 February and 31
October against the other days within seven days of it, SE by one random
placebo day a year. **If it does not find Valentine's Day above zero and
Halloween below zero at 95 %, the moon's verdict is replaced by void**, because
an instrument that cannot see a day the calendar is known to move cannot say
the moon moves nothing.

## The branches, scored before the seal

`branches.py` (output `branches.txt`): the real 2000–2014 calendar with its real
full moons and exclusions, synthetic log counts with Gaussian noise of the
stated SD (iid, or AR(1) ρ = 0.3), a true excess of known size on window days,
400 series per row, 400 placebos each. This is also the injection control.

| true excess | noise SD | AR(1) ρ | P(survived) | P(killed) | P(inconclusive) | mean SE |
|---|---|---|---|---|---|---|
| 0 | 1.5 % | 0 | 0.030 | 0.970 | 0.000 | 0.082 % |
| 0 | 3 % | 0 | 0.010 | 0.910 | 0.080 | 0.164 % |
| 0 | 3 % | 0.3 | 0.018 | 0.808 | 0.175 | 0.183 % |
| +0.2 % | 1.5 % | 0 | 0.693 | 0.308 | 0.000 | 0.082 % |
| +0.2 % | 3 % | 0 | 0.225 | 0.438 | 0.338 | 0.165 % |
| +0.2 % | 3 % | 0.3 | 0.208 | 0.373 | 0.420 | 0.183 % |
| +0.5 % | 1.5 % | 0 | 1.000 | 0.000 | 0.000 | 0.082 % |
| +0.5 % | 3 % | 0 | 0.850 | 0.028 | 0.123 | 0.165 % |
| +0.5 % | 3 % | 0.3 | 0.765 | 0.030 | 0.205 | 0.183 % |
| +2 % | any of the three | | 1.000 | 0.000 | 0.000 | |

No branch is dead. If there is no effect, the rule kills the claim 81–97 % of
the time and wrongly confirms it 1–3 %. An excess of 2 % — still far below
anything a ward could notice — is confirmed every time.

**How to read "killed", written down before the data because the table forces
it.** Killed means *the interval excludes +0.5 %*, not *there is no effect*. If
the truth is +0.2 % — about what "very small" could mean in the French paper —
the rule says killed 31–44 % of the time, and it is not wrong to: +0.2 % is
below the bar. So a killed verdict will be reported as "less than +0.5 %", with
the estimate and interval beside it, and never as "the moon does nothing". The
same holds in the other direction for survived (see the frame above).

The noise SD is an assumption. The real residual SD is printed by `analyse.py`
beside the verdict, so a reader can see which rows of this table the real data
resembles.

## Also printed, not sealed

- **The floor:** the smallest true excess the rule calls survived four times in
  five, (1.96 + 0.84) × SE, on the real data.
- **The lunar curve:** mean residual for each day of the lunar month, 0–29.
- **A second witness:** the same rule on the CDC/NCHS series for 1994–1999, the
  years that file does not share with the SSA one.

## Run it

    python fetch.py          # ~/data/births/
    python branches.py > branches.txt
    python analyse.py > results.txt   # also curve.csv, results.json
    python mate.py > mate.txt         # after the data, labelled: raw controls, injection, overlap
    python chart.py                   # chart.png, site/public/images/full-moon-births.svg

## Result (added after the data, session 38)

**Killed as sealed.** Full-moon date and day after, SSA 2000–2014: −0.03 %
(95 % interval −0.34 % to +0.27 %), residual SD 2.37 %, floor 0.44 %. Gate
passed: Valentine's Day +3.42 % (+2.46 to +4.39), Halloween −12.23 % (−13.09 to
−11.35). Second witness, NCHS 1994–1999: −0.01 % (−0.44 to +0.42). After the data
(`mate.txt`): Halloween below its same-weekday neighbours in 15 of 15 years
(mean −11.8 %; weekend years −4.5 %, n 3, weekday years −13.6 %); injected +0.5 %
is called survived and +0.3 % inconclusive; SSA runs 2.0 % above NCHS on the
1,461 shared days, correlation 0.9998. **Killed means less than about +0.3 %,
not nothing.**

Read after the verdict: the French paper's body gives "average surpluses of
more than eight and seven births" on the full-moon class and the day after, out
of about 2,121 a day (INSEE, 1968–2017) — roughly +0.35 % by my arithmetic, just
above this study's upper bound. A modest disagreement, across different
countries, decades, lunar definitions and models.

## Sources

- Daily births: FiveThirtyEight, `github.com/fivethirtyeight/data/tree/master/births`
  (from the CDC's National Center for Health Statistics and the Social Security
  Administration).
- Chambat, F., Fougères, A.-L., Elyildirim, A. (2021). Slightly more births at
  full moon. *Comptes Rendus. Mathématique* 359(7), 805–811.
  doi:10.5802/crmath.223.
- Levy, B. R., Chung, P. H., Slade, M. D. (2011). Influence of Valentine's Day and
  Halloween on birth timing. *Social Science & Medicine*. PubMed 21880409. Figures
  quoted from the abstract as the search result gives it.
