Ground truth · archaeology · a grave file and its printed tables

A Coin in Every Third Grave

Emma Brownlee published her early medieval grave file and its R code under an open licence, which is what makes this check possible. Read under its own headers the file puts a coin in 31.6 per cent of the graves of four regions; with those regions' flag columns moved back one place the figure is 2.4 per cent, and only then do all 11 coefficients and 11 P-values of her Table 13 come back at the printed precision, so the article's results stand and the shift is in the download. Then the question a grave-level P-value skips: shuffle end dates among cemeteries, and 13 to 15 of the 61 category trends Tables 13 to 21 print as significant stay below 0.05.

Reading the record...

In 2021 Emma Brownlee published a study of how the burial of objects with the dead declined across early medieval north-western Europe, in the open-access journal Internet Archaeology. With it she deposited the grave-by-grave file behind the study and the R code that computes its tables, under a CC BY 3.0 licence. Deposits like that are rarer than they should be, and everything on this page depends on this one.

Four regions' flag columns sit one place off their headers; realigning them restores Brownlee's Table 13, returning 11 coefficients and 11 P-values at printed precision while reducing the apparent coin share from 31.6 per cent to 2.4 per cent.

So, plainly, before anything else. The shift is in the file anyone downloads. With those four regions' columns read in their right places, Brownlee's Table 13 comes back in full, every coefficient and every P-value at the printed precision (its printed sample size does not, and the page says why below), and across the four regions' own category tables 32 of their 44 printed coefficients come back exactly, against 0 read as labelled. Her tables were computed from correctly aligned data, and the article's results stand. Nothing here says her analysis, her conclusions or her archaeology are wrong, and nothing here can say how the shift happened. What would settle it for certain is a corrected file from the author or the journal.

It still matters, because the file is the part that gets reused. Run the published R code on the published file and, for unfurnished burial in those four regions, it returns the opposite sign to the printed coefficient in 6 of 7 cases.

I

One grave, twelve yes-or-no columns

The file has one row per grave: a cemetery, a grave number, a count of objects (number_grave_goods), then twelve yes-or-no columns, then a date and a region. The first of the twelve is headed none, the unfurnished flag. The other eleven are Brownlee's categories, from dress_accessories to coins.

This is grave 16 at Fellbach-Schmiden, in northern Alamannia. Its object count is 0. Read under the file's own headers, it has no dress accessories, no jewellery, no weapons, no vessels: nothing at all, except a coin.

Graves with a coin, the four regions...the other seven regions: 2.1 per cent either way
Table 2, unfurnished burial, northern Alamannia...Brownlee printed 0.193
Table 13 coefficients that come back...out of 11 printed
Table 13, northern Alamannia: Kendall's tau-b between each category and the date a cemetery went out of use, as printed and as computed from the file under the switch
TypePrintedFrom the fileSame at the printed digits

Flip the switch. Nothing in the file changes; the same digits are read differently. In the four regions each column holds the category named in the next header along, and the last column, headed coins, holds the unfurnished flag. Grave 16 becomes what a grave with no objects ought to be: unfurnished. Across those regions the share of graves with a coin falls from 31.6 per cent to 2.4 per cent (and 31.8 per cent of their graves have no objects at all, which is where the coins were coming from). Brownlee's unfurnished trend for northern Alamannia goes from -0.123 to 0.193, the value she printed, and Table 13 goes from 0 to 11 of its eleven coefficients.

Only four regions

The shift is not everywhere. Choose which regions to read rotated. Every region's own category table is recomputed from the file each time, so you can watch Kent or Bavaria break instead.

Each region's category table, under the regions chosen above
RegionColumns readGraves with a coinIts tableCoefficients that come backP-values that come back

Read as printed, Bavaria's Table 17 comes back with 11 of its eleven coefficients and 11 of its eleven P-values; rotate Bavaria and 0 of them do. Northern Alamannia is its mirror image.

II

Three routes to the same shift

A switch that makes numbers agree could be a coincidence somebody went looking for. So here are three separate reasons to think the shift is real, and none of them leans on the others.

Route one: the file checks itself

Every grave carries its count of objects as well as the twelve flags, and the count is not part of the shifted block. A grave with no objects should have no category marked, and a grave with a category marked should have at least one object.

In the four regions, “no category marked” agrees with “no objects” in 64.3 per cent of graves as labelled and 99.2 per cent rotated. In the other seven regions it is 99.7 per cent as labelled and 55.1 per cent rotated. Read as labelled, 2,752 graves in the four regions have more categories marked than objects counted; rotated, 76 do. Of those regions' 65 cemeteries, 63 read better rotated.

Each dot is a cemetery, its area set by its number of graves. the four regions; the other seven. Above the dashed diagonal, a cemetery's own object counts agree better with its flags read rotated. Hover or long-press a dot for its name, or open the table under the chart.
Every cemetery on the chart, as a table
CemeteryRegionGravesAgreement as labelledAgreement rotated

Two cemeteries in the four regions are labelled on the chart. Hollogne-aux-Pierres has 0 graves with no objects among its 15, so this test cannot tell the readings apart there. Eichstetten, with 169 graves, agrees better as labelled, 71.6 per cent against 64.5. The next route shows why.

Route two: the author's own counts

The article's interactive Figure 1 loads a table of sites that the data page does not list, with each site's number of graves, of unfurnished graves and of graves with each category. Joined to the grave file by name, with accents, case and punctuation ignored, 58 sites in the four regions match. For 52 of them all eleven category counts equal the file's counts rotated; for 0, as labelled. Their count of unfurnished graves equals the column headed coins at 54 sites and the column headed none at 0. Of 105 matched sites in the other regions, 73 equal the file as labelled and 0 rotated.

Brownlee's cemetery summary file agrees. Its category percentages sit closer to the rotated reading for 57 of the 57 cemeteries it shares with the four regions, and closer to the labelled reading for 107 of 107 elsewhere. The summaries, too, were built from aligned data.

And Eichstetten. The site table's category counts equal the rotated reading in 11 of eleven categories, and its 33 unfurnished graves equal the rotated flag, 33. What disagrees is the object count: the file gives 43 Eichstetten graves with no objects and a mean of 2.882 objects per grave, where the site table gives 2.402. Eichstetten fails the zero-object test on its object column, not on its flags. Why its object counts differ between the two files is a question this page cannot answer.

Every matched site in the four regions
Site (as the site table spells it)Graves: site table / fileCategories equal as labelledCategories equal rotatedUnfurnished: site table / none / coins

Route three: Brownlee's printed tables

The third route is the anchor, and it is Brownlee's own numbers. The engine reads from her R code which cemeteries each test used, computes Kendall's tau-b and the P-value that R's cor.test() reports, and compares both with the values printed in the article. Nothing printed is fed in.

Realigned, with every other choice below at its default, Table 13 (northern Alamannia) gives back 11 of eleven coefficients and 11 of eleven P-values at the printed precision. Its printed sample size, N=2622, does not come back: the subset that reproduces those values has 2,449 graves. Table 2's unfurnished trend for the period of furnished burial comes back as 0.122 with P 1.046e-11, where Brownlee printed 0.122 and 1.046e-11. Table 14 (southern Alamannia) gives 10 coefficients and 11 P-values; as labelled, 0 coefficients. Table 17 (Bavaria), outside the four, is the control: exact as labelled, broken if rotated. Across the eleven category tables, 77 of the 121 printed coefficients come back exactly and 102 within 0.002 when realigned; as labelled, 45 and 65.

Every printed statistics table, recomputed from the file under the choices above
TableRegion, as printedPrinted valuesCoefficients exactP-values exactWithin the tolerance
Every printed coefficient, cell by cell
CellPrintedFrom the filePrinted PP from the fileGravesR code line

What the printed tables do not settle

What the record leaves open

III

The shift is only in the download, and the article's tables were computed from aligned data, so nothing about early medieval burial changes. And with twenty-six thousand graves, every trend is overwhelmingly significant anyway.

The objection, in this page's words

The first half is what the three routes above show, for the values they reproduce, and none of them can say how the shift got into the file; a corrected file from the author or the journal would settle that. The second half is worth testing, and the test is a question about statistics, not about Brownlee.

Every grave in the file carries its cemetery's date, the date the cemetery went out of use. Brownlee is clear about it: all of the graves from one cemetery were labelled with the same date, which in many cases would have been later than the actual date of each grave, and Yet this is unavoidable if we want to make use of the large numbers of undated graves, which are usually the poorly furnished ones. She notes that this weakens the coefficients. It has a second effect. A grave-level P-value treats Table 13's 2,449 graves as that many independent observations, but the date in that test is carried by just 15 cemeteries, sharing 8 dates between them.

So test the same coefficient another way. Keep every grave in its own cemetery, shuffle the cemeteries' end dates among themselves, and recompute Brownlee's own statistic each time. The shuffle P-value is the share of shuffles that give a coefficient at least as strong as the observed one. It asks whether the observed coefficient is unusual among those the same cemeteries give when their dates are handed out at random; it does not count how many cemeteries carry a trend. A pattern that a few large cemeteries make by happening to be early or late is one that shuffled dates tend to make too. Brownlee's own caution points the same way: This is because the statistical tests below are reliant on a rapid turnover of cemeteries for accurate results.

Every shuffle figure written into this section's sentences comes from one default run: seed 1, 9,999 shuffles per coefficient, judged by the shuffle. The explorer and the census below start from that run and recompute for whatever you choose; these sentences stay as they are, and the census names the default run beside yours.

First, northern Alamannia's dress accessories. The grave-level P-value is 3.757e-06, as printed (3.757e-06). Shuffle the end dates 9,999 times among its 15 cemeteries and a coefficient at least as strong turns up with P = 0.354 ± 0.005 (the second number is the Monte Carlo standard error). Those fifteen cemeteries cannot tell that trend apart from shuffled dates.

Pick any printed coefficient, what to measure on its cemeteries, and the unit to judge it at. Brownlee's code tests counts with Spearman's rho and yes-or-no flags with Kendall's tau-b, and the explorer does the same. When she printed no coefficient for a measure on those cemeteries (the number of categories present never appears in her tables), the readout says the value is the page's own.

the coefficient with end dates shuffled among cemeteries; the spread a grave-level P-value assumes, drawn at its true height and cut off at the top of the frame; the black line is the observed value. Judged at one point per cemetery, the bars and the line are the cemetery-level coefficient instead, and there is no curve.
The same trend one cemetery at a time: each dot is a cemetery at the date it went out of use, its area set by its graves. This is the kind of view Brownlee plots in Figures 55 to 65. Every dot is also in the table below.
The cemeteries in this test, as a table
CemeteryGravesOut of useShare of graves or mean per grave

The picture shows why. The bars are the coefficients that shuffled dates produce. The curve is the spread the grave-level P-value assumes, far narrower, because it counts graves as independent. The dots are the cemeteries, which are the things that actually carry the dates.

The census

Now run the shuffle on every coefficient Brownlee printed. Of the 61 category trends that Tables 13 to 21 print with P below 0.05, 14 stay below it when the end dates are shuffled among cemeteries (seed 1, 9,999 shuffles). The count moves slightly with the seed, from 13 to 15 across ten seeds, because 2 trends sit on the line; that range was computed by the verifier, not in your browser. Across Tables 2 to 23, 29 of 97 printed significant trends hold. Judge the same 61 at the grave instead, as R reports it, and 60 are below the line; take one point per cemetery, a different statistic, and 17 are. The census below can judge its verdicts at any of the three.

One coefficient goes the other way. Amulets in Kent, printed with P 0.06037 in Table 21, fall to 0.010 ± 0.001 when shuffled among Kent's cemeteries, and Brownlee's text does list amulets among Kent's decreases: In Kent (Figure 63), many different object types saw no clear decline in their use, but dress accessories, fittings, and amulets all decreased in the frequency with which they were placed in graves. Her statistically significant increase in vessels in Kent (printed P 0.01288) shuffles to 0.184 ± 0.004 across 17 cemeteries with 6 dates. The Anglian decline in dress accessories holds easily: 0.0002 ± 0.0001.

Read a failure here carefully. Burgundy's Table 20 rests on 10 cemeteries with 7 dates, which can be handed out in only 151,200 distinct ways, so the page tries every one of them and there is no Monte Carlo error at all. 0 of its 11 printed significant trends stay below the line; its P-values run from 0.081 to 0.370. That does not mean Burgundy saw no change. It means these cemeteries cannot tell the trend apart from shuffled dates. The Lower Rhine is the case Brownlee herself flagged: When so many cemeteries were in use for such a long period of time, this region will appear to have more static practice than it did in reality. Among its 11 cemeteries, 0 of its 9 printed significant trends hold.

The census table also shows a cemetery-level coefficient, and it is a different statistic: each cemetery counts once, whatever its size. It can disagree with the shuffle test (for northern Alamannia's dress accessories it is -0.403, with shuffle P 0.044) because a small cemetery weighs as much as a large one. It sits beside the test, not in place of it.

Every printed coefficient, tested at the grave and at the cemetery
CoefficientPrinted (P)FileGrave-level PShuffle PCemeteries / datesCemetery-level tau (shuffle P)Verdict at the chosen unit

A warning about ranks

One more thing the file invites, and should not be trusted with. Figure 12 plots 14 Kent cemeteries, 2,341 graves. Rank them by mean objects per grave and Mill Hill (3.7500, from 80 graves) edges out Gilton Ash (3.7232, from 112). Rank them by categories present and Gilton Ash leads, 2.7679 against 2.5250. Resample each cemetery's own graves 2,000 times and Mill Hill comes out above Gilton Ash in a share of 0.519 of the resamples on objects and 0.148 on categories, and the full observed order recurs in 0.0 and 0.3 per cent of them. The swap at the top is noise, and this page never ranks cemeteries as a result.

Black dot: each cemetery's observed rank. Bar: the middle 95 per cent of its ranks over the resamples (seed 1).

IV

What the record cannot tell you

Some questions this file invites, it cannot answer. The instrument refuses them, and says why.

The check

Waiting for the record.

The files

Every file is fetched from beside this page and its SHA-256 recomputed in your browser against record.json. Nothing else is fetched, from anywhere.

FileBytesSHA-256, computed hereAgainst record.json

The grave file is not UTF-8: it has 3,070 bytes outside the ASCII range and the first invalid UTF-8 sequence starts at byte 204,746. The page decodes it as ISO-8859-1, and 0 of its bytes fall where ISO-8859-1 and windows-1252 would disagree. It holds 1,615,111 bytes and 26,168 graves: 8,625 in the four regions, 17,543 in the other seven.

The arithmetic

Kendall's tau-b and its P-value follow R's cor.test() with ties: the normal approximation with the tie-corrected variance of S. Spearman's rho uses R's t approximation. The engine counts pairs from a table of dates by values, which is fast enough to shuffle thousands of times; the button below checks it against a plain loop over every pair of graves, which finishes tau-b and the variance of S with its own arithmetic and shares only the normal tail function with the engine. The verifier checks that function against scipy, and plants an error in the engine's own finish to show the button's comparison then disagrees. It also checks the engine against scipy's kendalltau and spearmanr on every printed cell.

Every choice, proved live

Each choice this page names is a parameter of the engine. The button runs every option of every choice and shows what moved. It takes a little while.

ChoiceOptionsWhat it movesMoved?

Other choices are fixed and named: the site-name join ignores accents, case and punctuation; a coefficient counts as close when it is within 0.002 of the printed value; the census tests against 0.05; shuffles are enumerated exactly when a subset has no more than 200,000 distinct arrangements of its dates; the Kent resampling uses 2,000 resamples with seed 1.

Planted faults

Each button changes a copy of what the engine reads, runs the unmodified engine, and reports what broke.

The transcription

The printed values in printed-tables.json were read from the article's HTML twice, once cell by cell and once as a stream of numbers in reading order, and compared with the spec writer's own hand-typed values for Tables 13 to 21: 0 disagreements. Each printed cell names the R code line that computes it. Every quotation on this page is checked against quotes.json in your browser, and against the frozen article by the verifier.

The graves whose unfurnished flag still disagrees with their object count
CemeteryRegionGraveObjectsUnfurnished flag (realigned)

Not modelled

Sex, age, grave disturbance, the date a cemetery came into use, radiocarbon dates on individual graves, and the value of objects are not in the file and not in this page. The shuffle test treats cemeteries as exchangeable; it does not model geography, the different chronological schemes behind the dates, or cemeteries that were in use for different lengths of time. A shuffle P-value above the line is never evidence of no trend.

What we searched

We searched the Internet Archaeology article, its data page and R code, web searches for the file names all_graves.csv and Code_EM_grave_goods.R and for corrections, errata or reanalyses of the article, and the Artificial Wasteland corpus on 2026-09-14, and did not find a published notice that the downloadable grave file's flag columns are shifted for four regions, or a cemetery-level re-test of the article's printed trend statistics.

Sources