Your data
Paste a table straight from Excel or Google Sheets, or drop a CSV file. Nothing is uploaded anywhere — the whole calculation runs inside this browser tab.
CSV, TSV or plain text. Files saved in windows-1251 are detected and re-read automatically, so Cyrillic headers do not turn into garbage.
Parsing options
Result
Save and share
The drawing library is downloaded only when you press the button, and only on this page.
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Input | A contingency table: categories in rows, outcome counts in columns |
|---|---|
| Statistic | χ² = Σ (observed − expected)² / expected |
| Expected counts | Row total × column total ÷ grand total, shown in full |
| Degrees of freedom | (rows − 1) × (columns − 1) |
| p-value | Exact right tail of the chi-square distribution via the incomplete gamma function |
| Effect size | Cramér’s V, from 0 to 1 |
When it misleads you
- The approximation requires expected counts of at least 5 in every cell. Below that the p-value becomes unreliable, so the tool counts the offending cells and says so rather than reporting a number that looks authoritative and is not.
- The test needs raw counts, not percentages or averages. Feeding it proportions produces a χ² that is mathematically computable and completely meaningless, because the statistic depends on how many observations lie behind each figure.
- A significant result says the variables are related, not how or how strongly. Cramér’s V answers the second question; the first requires looking at which cells deviate most from their expected counts.
- Like every test, it grows more sensitive with sample size. On 100,000 rows a trivial deviation becomes significant, which is why the effect size deserves more attention than the p-value once the dataset is large.
How it is calculated
Each cell’s expected count is what it would be if the row and column variables were unrelated: the row total times the column total, divided by the grand total. The statistic sums the squared differences between observed and expected, each divided by expected, which weights a deviation by how surprising it is at that scale.
The p-value is the right tail of the chi-square distribution with (rows−1)×(columns−1) degrees of freedom, evaluated through the regularised incomplete gamma function. This is exact rather than table-interpolated, which matters for the awkward degrees of freedom that printed tables round away.
The full table of expected counts is displayed, not just the verdict. Comparing it cell by cell against your observed table is how you find out where the relationship actually lives — the statistic aggregates all the cells and tells you nothing about which one drove it.
Cramér’s V rescales the statistic to the range 0–1 by dividing out the sample size and the table dimensions. Unlike χ² itself, it can be compared between tables of different sizes, which is what makes it the number to report alongside the p-value.
Questions and answers
What should my table look like?
Categories down the rows and outcome counts across the columns, with the counts themselves as numbers. The sample data has three channels as rows and two outcome columns, giving a 3×2 table.
Some of my expected counts are below 5. Is the result wrong?
It is unreliable rather than wrong. The chi-square approximation assumes reasonably large expected counts. Combine sparse categories into a larger group, or collect more data.
Can I use percentages instead of counts?
No. The test depends on the actual number of observations, and percentages discard exactly that. A 60/40 split from ten people and from ten thousand are very different pieces of evidence.
What is a large Cramér’s V?
As a rough guide, 0.1 weak, 0.3 moderate, 0.5 strong. Unlike χ², it does not grow just because you collected more rows, which makes it the honest measure of strength.
Is anything uploaded?
No. Expected counts, the statistic and the p-value are all computed in your browser.