Say you write that the mean age of your 28 participants was 5.19 years. It looks like any other figure. But no set of 28 whole-number ages has a mean of 5.19: the nearest possible means are 5.18 and 5.21. That arithmetic impossibility is what the GRIM test detects, and you check it with one multiplication.
GRIM stands for granularity-related inconsistency of means. James Brown and Nicholas Heathers proposed it in 2017 and it rests on a simple idea: if the data are whole numbers, the sum of all of them has to be a whole number, so not every mean is possible for a given n. It is a cheap check that needs no raw data, only the mean and the sample size, and it can be applied by a reviewer by hand or by a verification program on the text.
This guide explains how it works, when it is informative, when it is not, what causes a failure and what to do if a mean in your manuscript does not pass. It is nearly always a transcription or n error, not a problem of substance.
If every value of a variable is a whole number (ages in years, number of children, responses to a 1 to 7 item), the sum of n participants’ values is another whole number. The mean is that sum divided by n. So for a given n the mean can only take values on a grid: sum/n, for whole-number sums. If the mean you wrote is not on the grid, it cannot be correct.
The check is mechanical. Multiply the mean by n and look at the nearest whole numbers; divide each by n and round to the number of decimals you reported the mean with. If none matches your figure, the mean is inconsistent.
n = 28 and mean = 5.19. The product is 145.32, which points to sums of 145 and 146. Divided by 28 they give 5.1786 and 5.2143, which at two decimals are 5.18 and 5.21. Neither is 5.19: the mean is impossible with 28 whole-number data points.
n = 25 and mean = 3.48. The product is 87.00: a sum of 87 gives exactly 3.48. It is possible. By contrast, with n = 25 a mean of 3.47 is not: the product is 86.75 and the possible sums give 3.44 (86) or 3.48 (87).
GRIM is not a universal test; it works under specific conditions, and it is worth knowing them so you do not draw conclusions where there are none.
A mean that fails GRIM is a signal to check, not an accusation. The most usual causes are ordinary:
If you want to check your manuscript’s means by hand before submitting, the process for each mean of a whole-number variable is the same. First, find the exact n for that variable, not the total sample. Second, multiply the mean by n and take the two nearest whole numbers. Third, divide each by n, round to the number of decimals in your mean and compare.
In R, for a mean m with d decimals and a given n, it is enough to try the whole numbers around m * n: any(round((floor(m * n) - 1):(ceiling(m * n) + 1) / n, d) == m). If it returns FALSE, the mean is inconsistent. There are also online calculators and packages that run it over a whole table.
And a point of judgement: if you are unsure between two rounding conventions, check both; you should only worry if it fails with neither.
Go back to the program’s original output, not the draft. Check the n for that variable and recompute the mean. The reason nearly always shows up within a minute: a different n, an excluded case, a figure from another version. Correct the manuscript and check that the change does not affect other figures that depended on that mean (a standard deviation, a test, an effect size).
If you have checked everything and the mean still does not fit because your variable is not truly whole-number or you made a transformation, add a short note explaining it. A reviewer who sees the clarification does not have to ask. There are more consistency checks in our guide to p values that do not match the test statistic and in the one on the statistical errors a reviewer spots first.
Paste your descriptives table or your results section and the check finds the means of integer variables that come with their n and applies the GRIM test, with the same rule as this guide: counts and age in completed years only, never scale scores, and with n of 100 or less, where the test has power. Every impossible mean comes with the quoted sentence and the n it was checked against.
In the same pass it recomputes every p value from its test statistic and degrees of freedom, and cross-checks the total N between sections. Everything runs in your browser: nothing is sent to any server and no account is needed. If a mean does not show up, check that its n is in the same sentence or the same row.
Granularity-related inconsistency of means. It refers to the fact that, with whole-number data and a given n, only certain means are possible, and the rest cannot be correct.
James Brown and Nicholas Heathers, who published it in 2017 in Social Psychological and Personality Science. They presented it as a simple check for detecting anomalies in the reporting of results in psychology.
No. It is nearly always a transcription error, an n that changed or missing data that were not accounted for. It is a signal to check, not an accusation. That is why the check should come with the program’s original output.
With a single whole-number item (1 to 7), yes. With a scale that sums or averages several items it loses power, because each person contributes several data points and almost any mean is possible. In those cases it is not a useful check.
With means to two decimals, only with fewer than 100 participants; with one decimal, fewer than 10. Above those sizes any mean is arithmetically possible and the test can detect nothing.
Yes, only to variables that are whole numbers in themselves, such as a count or age in completed years, and against the sample size nearest to the mean in the text. It does not apply it to multi-item scales, where it is uninformative, and each warning appears with the figures that triggered it so you can verify it.