Blog
Statistics on data

Chi-square test of independence online

Counts in a table, not measurements: how many people from each channel bought and how many did not. The chi-square test asks whether the split differs between rows more than random assignment would produce — that is, whether the channel and the outcome are related at all.

Your data never leaves this device

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

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

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.

Related tools

All tools