Concentric

Notebook

26 August 2026

Borrowing 619,150 people

A percentile needs a reference sample. I have no lab, so I used somebody else’s — and it doubles as the largest test in the project.

A percentile is meaningless without a stated comparison group, and I have no lab, no budget and no participant pool.

What I do have is John Johnson's IPIP-NEO-120 dataset: 619,150 people, released publicly, free to use including commercially. After excluding the under-18s and the cases with no usable age, 512,295 of them form the reference sample behind every percentile on this site.

That is the single largest reason this project is possible at all. Somebody spent years collecting it and then gave it away.

The build is also the test

Scoring 619,150 real cases with the same functions that score a live web request turns out to be the most valuable test in the repository — far more than any unit test I have written.

Because the numbers it produces are checkable against published work. Kajonius and Johnson published domain statistics on this data in 2019. My build reproduces them:

mine published
Neuroticism alpha .901 .90
Extraversion alpha .890 .89
Openness alpha .820 .82
Agreeableness alpha .855 .85
Conscientiousness alpha .903 .90

Alpha is the sharpest of those checks, because it is a property of the instrument rather than of which slice of respondents you happen to have — and it is the statistic that moves first if the reverse-keying is wrong. Roughly half the items are worded backwards, and getting that half inverted produces facet scores that sit in exactly the right range while meaning the opposite. No error, no crash, just a quietly inverted instrument. The alphas would collapse, which is why that table is pinned in a test.

Three ways to get it silently wrong

The dataset has traps, and every one produces a plausible number rather than an error.

Missing answers are coded 0. Adding a zero as though it were a response drags a facet toward the floor by exactly the number of items somebody skipped. Everything still runs.

Reverse-keyed items are already flipped in the file. The codebook says so. Feeding those values into an engine that does its own keying computes 6 - (6 - raw) and scores fifty-five of the hundred and twenty items backwards — nearly half the instrument, inverted, across all 619,150 cases, silently.

Column order is not bank order. The file stores questionnaire positions. Mapping column n to the nth item of my bank scrambles the whole instrument while still producing facet sums in the right range.

I mention these partly because they are interesting and partly as a warning to anyone else planning to use the file. It is a gift, and it has sharp edges.

What we owe it

Citation, obviously — Goldberg (1999, 2006) and Johnson (2014), on every page that uses the items. But also the thing that made it useful: it was published without a gate, with a codebook, in a format anybody could read. That is the model this project is copying, and the next entries about the data are all downstream of it.