Updated November 2026
Longer papers on statistical and machine-learning methods: how each one works, what it assumes, and where it breaks. The articles are the shorter, practical guides.
Written and kept up to date by the MCP Analytics Team. How our content is made.
| Milk-first cups named | Chance by luck |
|---|---|
| 4 of 4 | 1/70 = 0.0143 |
| 3 of 4 | 17/70 = 0.2429 |
No paper matches that search. Try a shorter word, or choose All topics.
Each paper on this shelf explains a method with its assumptions. Here is one method run end to end, so you can see the kind of result the papers work toward.
The data. In The Design of Experiments (1935), Ronald Fisher described a lady who said she could taste whether milk or tea went into the cup first. The test: eight cups, four poured milk first and four tea first, served in random order. She is told there are four of each and must name the four milk-first cups. The data set is these eight cups.
The method. Fisher's exact test. It asks: if she were only guessing, how likely is a result at least this good? With four cups chosen out of eight, there are 70 equally likely ways to guess (8 choose 4). The p-value is the share of those 70 guesses that score as well as she did or better.
Assumptions. The cups are served in random order; she knows there are exactly four of each kind (so both row and column totals are fixed); and under "only guessing" every set of four is equally likely. If the cups were not randomized, the p-value does not mean what it says.
# Fisher's lady-tasting-tea design: 8 cups, 4 with milk poured first.
# Rows: what was poured first (milk, tea). Columns: what the taster said.
from math import comb
from scipy.stats import fisher_exact
for correct in (4, 3):
table = [[correct, 4 - correct],
[4 - correct, correct]]
_, p = fisher_exact(table, alternative="greater")
ways = sum(comb(4, k) * comb(4, 4 - k) for k in range(correct, 5))
print(f"{correct} of 4 milk-first cups named, chance of {correct} or more by luck: p = {p:.4f}"
f" (= {ways}/{comb(8, 4)} by counting)")
4 of 4 milk-first cups named, chance of 4 or more by luck: p = 0.0143 (= 1/70 by counting)
3 of 4 milk-first cups named, chance of 3 or more by luck: p = 0.2429 (= 17/70 by counting)
Command: python3 -I tea.py with SciPy 1.16.3. The counting column checks SciPy against plain arithmetic: one of the 70 guesses gets all four right, and 16 more get exactly three right.
| Result | p-value | Reading |
|---|---|---|
| All 4 named | 0.0143 | A guesser does this 1 time in 70. That is below the common 0.05 cut-off, so guessing is a poor explanation. |
| 3 of 4 named | 0.2429 | A guesser does this well or better about 1 time in 4. These data alone cannot tell skill from luck. |
The full method, including larger tables, two-sided p-values and when chi-square works instead, is in the Fisher's exact test paper.
On MCP Analytics you upload a CSV and tested statistical methods run on it. Each result shows the method used, and the same data gives the same numbers.
alternative="greater" option, and its reference to Fisher, The Design of Experiments (1935).Your turn
Bring your own data and the question you actually need answered.
MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai
Tell us what went wrong, in your own words. We capture the page you're on automatically, so no need to describe where you are.