Home / Tools / Pearson r Table
Pearson r Table: Critical Values, Made Interactive
A Pearson r table answers one question: how strong does a correlation have to be, in a sample this size, before you can say it is not just noise? Drop in your sample size and the r you computed, and you get the critical value your r has to beat, a verdict in plain English, and the exact p-value. The full printable table is below, and every cell in it comes from R.
I want to check whether the correlation I computed is significant
Compute r first if you have raw numbers: the correlation calculator takes two columns and hands back r, and this page turns that r into a verdict.
Significant
r = 0.42 clears the critical value for n = 30.
How this is computed
✓ No data leaves your browser
✓ Verified against R's cor.test() and qt() across 927 cases
✓ Free, no sign-up
Full Pearson correlation table
Critical values of r by degrees of freedom and significance level. Each column serves both a two-tailed α and its one-tailed half, because splitting 0.05 across two tails leaves the same 0.025 in the upper tail as a one-tailed test at 0.025. Your current row and column are highlighted as you change the inputs above.
| one-tailed α | .05 | .025 | .01 | .005 |
|---|---|---|---|---|
| two-tailed α | .10 | .05 | .02 | .01 |
| df | critical value of r | |||
| 1 | .9877 | .9969 | .9995 | .9999 |
| 2 | .9000 | .9500 | .9800 | .9900 |
| 3 | .8054 | .8783 | .9343 | .9587 |
| 4 | .7293 | .8114 | .8822 | .9172 |
| 5 | .6694 | .7545 | .8329 | .8745 |
| 6 | .6215 | .7067 | .7887 | .8343 |
| 7 | .5822 | .6664 | .7498 | .7977 |
| 8 | .5494 | .6319 | .7155 | .7646 |
| 9 | .5214 | .6021 | .6851 | .7348 |
| 10 | .4973 | .5760 | .6581 | .7079 |
| 11 | .4762 | .5529 | .6339 | .6835 |
| 12 | .4575 | .5324 | .6120 | .6614 |
| 13 | .4409 | .5140 | .5923 | .6411 |
| 14 | .4259 | .4973 | .5742 | .6226 |
| 15 | .4124 | .4821 | .5577 | .6055 |
| 16 | .4000 | .4683 | .5425 | .5897 |
| 17 | .3887 | .4555 | .5285 | .5751 |
| 18 | .3783 | .4438 | .5155 | .5614 |
| 19 | .3687 | .4329 | .5034 | .5487 |
| 20 | .3598 | .4227 | .4921 | .5368 |
| 21 | .3515 | .4132 | .4815 | .5256 |
| 22 | .3438 | .4044 | .4716 | .5151 |
| 23 | .3365 | .3961 | .4622 | .5052 |
| 24 | .3297 | .3882 | .4534 | .4958 |
| 25 | .3233 | .3809 | .4451 | .4869 |
| 26 | .3172 | .3739 | .4372 | .4785 |
| 27 | .3115 | .3673 | .4297 | .4705 |
| 28 | .3061 | .3610 | .4226 | .4629 |
| 29 | .3009 | .3550 | .4158 | .4556 |
| 30 | .2960 | .3494 | .4093 | .4487 |
| 35 | .2746 | .3246 | .3810 | .4182 |
| 40 | .2573 | .3044 | .3578 | .3932 |
| 45 | .2429 | .2876 | .3384 | .3721 |
| 50 | .2306 | .2732 | .3218 | .3542 |
| 60 | .2108 | .2500 | .2948 | .3248 |
| 70 | .1954 | .2319 | .2737 | .3017 |
| 80 | .1829 | .2172 | .2565 | .2830 |
| 90 | .1726 | .2050 | .2422 | .2673 |
| 100 | .1638 | .1946 | .2301 | .2540 |
How to read this table
Three numbers get you to an answer: your sample size, your significance level, and the direction of your test.
- Turn n into df. Degrees of freedom for a correlation are
df = n - 2. With 30 pairs you read the row for df = 28, not 30. Two degrees of freedom are spent estimating the line through your points: one for the intercept, one for the slope. - Pick the column. Two-tailed at α = 0.05 and one-tailed at α = 0.025 share a column, because both leave 0.025 of the distribution in the upper tail. Read the header that matches the test you are running.
- Compare. The cell is the critical r. If
|r|exceeds it, your correlation is significant at that level. At df = 28 and α = 0.05 two-tailed the cell reads .3610, so r = 0.42 is significant and r = 0.30 is not.
Where these numbers come from
An r table looks like its own thing, but it is a t table wearing a disguise. A correlation is tested by converting it into a t statistic, and the critical r is what you get when you run that conversion backwards.
- The test statistic. R's
cor.test()does not test r directly. It converts r into a t statistic ondf = n - 2: t = r * sqrt(df) / sqrt(1 - r^2) The shape is intuitive: a bigger r pushes t up, and a bigger sample pushes t up too, which is why the same r means more in a large sample. - Set t to its critical value. The test rejects when
|t| > t_crit, wheret_crit = qt(1 - alpha/2, df)for a two-tailed test. So the boundary case is the r that produces exactly that t: t_crit = r * sqrt(df) / sqrt(1 - r^2) - Solve for r. Square both sides and collect the r terms: t_crit^2 * (1 - r^2) = r^2 * df t_crit^2 = r^2 * df + r^2 * t_crit^2 = r^2 * (df + t_crit^2) Take the square root and the critical r falls out: r_crit = t_crit / sqrt(df + t_crit^2)
- That one line is the whole table. Every cell above is
qt(1 - alpha/2, df)pushed through that formula. You can check it in R in two lines, and the df = 2 row makes a neat test: there the critical r comes out to exactly1 - alpha, which is why the 0.05 column reads .9500 and the 0.01 column reads .9900.
One-tailed or two-tailed
Use two-tailed unless you committed to a direction before you saw the data. A one-tailed test pours all of α into a single tail, which lowers the bar: at df = 28, the cutoff falls from .3610 to .3061. The catch is that it can only find an effect in the direction you named. If you predicted a positive correlation and the data comes back at r = -0.80, a one-tailed test reports nothing at all, however emphatic that -0.80 looks.
Significant is not the same as strong
The table has a habit of making this obvious. At n = 1000, an r of 0.07 clears the 0.05 bar while accounting for about half a percent of the variance. At n = 6, an r of 0.75 misses it while accounting for more than half. The critical value tells you whether a correlation is distinguishable from zero at your sample size. How much it matters is a separate question, and the honest answer usually needs r-squared and a confidence interval next to it.
How this compares with the alternatives
| Approach | What it gives you | When to use it |
|---|---|---|
| This table | Critical r by df and α, plus a verdict and an exact p-value | You already have r and n and want the cutoff or a decision |
cor.test(x, y) | r, t, df, exact p and a confidence interval, straight from the data | You have the raw pairs. This is the better answer whenever you do |
| A printed r table | The same cells on paper, rounded to 4 decimals | Exams and closed-book settings. It cannot give you a p-value |
| Confidence interval for r | A range for the true correlation, via Fisher's z | You care how big the correlation is, not only whether it beats zero |
The p-value here and the p-value from cor.test() are the same number computed the same way, because both run r through the t identity above. The table adds the cutoff, which cor.test() never prints.
Questions about the r table
How do I read a Pearson r table?
Find the row for your degrees of freedom, which is your sample size minus 2, and the column for your significance level. The cell where they meet is the critical r. If the absolute value of your correlation is larger than that cell, the correlation is significant at that level. With n = 30 (df = 28) at α = 0.05 two-tailed the critical r is .3610, so an observed r of 0.42 is significant.
Why is df equal to n minus 2 for a correlation?
Testing a correlation is the same as testing the slope of a regression line through the same points. Fitting that line costs two parameters, an intercept and a slope, so two degrees of freedom are spent and n − 2 remain. This is also why n = 3 is the smallest testable sample: with n = 2 any two points sit exactly on a line, r is always ±1, and there is nothing left to test.
What is the critical value of r for n = 30 at 0.05?
With n = 30 the degrees of freedom are 28, and the critical r for a two-tailed test at α = 0.05 is .3610. Any correlation above +.3610 or below −.3610 is significant at the 5% level. For a one-tailed test at 0.05 the cutoff drops to .3061.
How is the critical r related to the t distribution?
A Pearson r is tested by converting it to a t statistic, t = r * sqrt(df) / sqrt(1 - r^2) on df = n − 2. Inverting that identity turns a critical t into a critical r: r_crit = t_crit / sqrt(df + t_crit^2), where t_crit = qt(1 - alpha/2, df) for a two-tailed test. Every cell in this table is that one line of algebra, which is why an r table is really a t table in disguise.
Should I use a one-tailed or two-tailed critical r?
Two-tailed, unless you committed to a direction before seeing the data. A one-tailed test puts all of α in one tail, giving a smaller critical r and making significance easier to reach, but it can only detect an effect in the predicted direction. A correlation that comes out strongly the other way counts as not significant no matter how large it is.
Does a significant correlation mean the relationship is strong?
No. Significance answers whether the correlation is distinguishable from zero, not whether it is large. With n = 1000 an r of 0.07 is significant at 0.05 while explaining about half a percent of the variance. With n = 6 an r of 0.75 is not significant even though it explains more than half. Read the critical r alongside r-squared and a confidence interval.
Does this r table match R?
Yes. Every printed cell and every interactive result comes from the same routine, checked against R's cor.test() and qt() across 927 cases to better than eleven significant figures. The df = 2 row is a useful sanity check: the critical r there is exactly 1 − α, so the column headed 0.05 reads .9500.
Keep going
Have the raw pairs rather than an r? Start with the correlation calculator. Want the t values this table is built from? The t table has them.