P-Value Calculator
Updated How we review
Offline — showing the version cached on .
Unresolved errors (0)
Results
p-value is 0.05000. Decision at your significance level: The p-value is smaller than your significance level — reject the null hypothesis at that level. Does that conclusion depend on the level you chose? Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled.
- p-value
- Decision at your significance level
- The p-value is smaller than your significance level — reject the null hypothesis at that level what this means
- Does that conclusion depend on the level you chose?
- Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled what this means
Your recent calculations
Stored only on this device.
| Solved for | What did you calculate? | What are you testing? | Your test statistic | Degrees of freedom | Denominator degrees of freedom | Significance level | p-value | Decision at your significance level | Does that conclusion depend on the level you chose? |
|---|
* computed under superseded data
How to use this calculator
- Choose What did you calculate?Pick the statistic you already calculated: a Z score for the standard normal curve, a t score for Student's t, a chi-square statistic, or an F ratio.
- Choose What are you testing?Choose a difference in either direction if you are testing for any change, or the lower or upper tail if you only care about a value smaller or larger than expected.
- Enter Your test statisticEnter your calculated test statistic; this page accepts values from -100 to 1000.
- Enter Degrees of freedomEnter the degrees of freedom for your test, from 1 to 100000; for an F ratio this is the numerator degrees of freedom.
- Enter Denominator degrees of freedomNeeded only for an F ratio: enter the denominator degrees of freedom, from 1 to 100000.
- Enter Significance levelEnter the significance level you chose before running the test, such as 0.05; this page accepts values from 0.0001 to 0.9999.
- Read p-value
p-value () vs Your test statistic ()
p-value () Your test statistic ()
What this calculates
Hypothesis testing asks whether your data give enough evidence. That evidence would reject a claim about a process you are studying. 2
This page works like a standard table for the normal, t, chi-square, and F distributions. It lets you look up a p-value instead of paging through a printed table. Enter the test statistic you already calculated. Choose which tail you care about. Set the significance level you picked before you ran the test. 10
What Is a P-Value?
A p-value is the probability of the test statistic being at least as extreme as the one you observed, given that the null hypothesis is true. It is a single number that summarizes how surprising your result would be if the null hypothesis were true. 1
A small p-value is a sign that the null hypothesis is false. That is the basic logic behind every test this page runs, whatever statistic you started from. 1
How to Read the Decision
You reject the null hypothesis when the test statistic passes a critical value. Or, in the same way, you reject it when the p-value is smaller than your chosen significance level. Both routes lead to the same conclusion. 1
Choosing a significance level of 0.05 has a cost. The null hypothesis gets rejected 5% of the time, even when it is actually true. That is the price of picking that particular cutoff. 1
The choice of significance level is somewhat arbitrary. In practice, 0.1, 0.05, and 0.01 are common choices. Because of that, this page also checks something else. It checks whether your conclusion would flip at one of those other common levels. It flags the result as borderline when it would. 1
Z Scores and T Scores
A Z score compares your statistic to the standard normal curve. Tables for that curve list the area under it. This area runs from zero up to a given value. 3
Common Z cut-offs include 1.960 for a two-tailed test and 1.645 for a one-tailed test. Both are tied to a significance level of 0.05. More extreme cut-offs, such as 2.576 and 3.090, go with smaller levels, like 0.01 and 0.001. 3
A T score comes from Student's t distribution. This distribution is symmetric. So its upper and lower cut-offs mirror each other. The most commonly used significance level is 0.05. For a two-sided t-test, you compare against the 0.975 point of the curve. This is because 1 minus 0.05 divided by 2 equals 0.975. 4
What Is Chi-Square?
A chi-square statistic comes from squaring and summing independent variables. Each of these variables follows a standard normal distribution. It only takes values of zero or more. Its spread grows with its degrees of freedom. 7
The chi-square distribution is not symmetric. So separate tables exist for its upper and lower tails. That is why this page looks up different values for a lower-tail test, an upper-tail test, and a two-tailed test. It does this on the same chi-square statistic. 6
What Is an F Ratio?
An F ratio is the ratio of two chi-square distributions. Each one is first divided by its own degrees of freedom, numerator and denominator. That is why this page asks for two separate degrees-of-freedom values for an F test. 8
F tables such as this one cover one-sided tests. They commonly use the 0.05, 0.10, and 0.01 levels. The F distribution is not symmetric. So a proper two-sided test needs its own set of tables. 5
Worked Example
Z score 1.53 — lower tail: p-value 0.93699
See inputs and calculation
Starting values
- What did you calculate?
- Z score (standard normal)
- What are you testing?
- A value smaller than expected (lower tail)
- Your test statistic
- 1.53
- Significance level
- 0.05
- p-value: 0.93699
Show arithmetic
normal_cdf(1.53)Full branch logic
0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10)))) - Decision at your significance level: The p-value is not smaller than your significance level — there is not enough evidence to reject the null hypothesis
Show arithmetic
0Full branch logic
(0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.05 ? 1 : 0 - Does that conclusion depend on the level you chose?: No — your significance level and every level the source calls common all give the same conclusion
Show arithmetic
0Full branch logic
min(((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.01 ? 1 : 0)) == max(((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (1 == 0 ? 2 * (1 - normal_cdf(abs(1.53))) : (1 == 1 ? normal_cdf(1.53) : 1 - normal_cdf(1.53))) : (0 == 1 ? (1 == 0 ? 2 * (1 - t_cdf(abs(1.53), 10)) : (1 == 1 ? t_cdf(1.53, 10) : 1 - t_cdf(1.53, 10))) : (0 == 2 ? (1 == 0 ? 2 * min(chi2_cdf(1.53, 10), 1 - chi2_cdf(1.53, 10)) : (1 == 1 ? chi2_cdf(1.53, 10) : 1 - chi2_cdf(1.53, 10))) : (1 == 1 ? f_cdf(1.53, 10, 10) : 1 - f_cdf(1.53, 10, 10))))) < 0.01 ? 1 : 0)) ? 0 : 1
Z score 1.96 — two tails: p-value 0.05000
See inputs and calculation
Starting values
- What did you calculate?
- Z score (standard normal)
- What are you testing?
- A difference in either direction (two-tailed)
- Your test statistic
- 1.96
- Significance level
- 0.05
- p-value: 0.05000
Show arithmetic
2 * (1 - normal_cdf(abs(1.96)))Full branch logic
0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10)))) - Decision at your significance level: The p-value is smaller than your significance level — reject the null hypothesis at that level
Show arithmetic
1Full branch logic
(0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0 - Does that conclusion depend on the level you chose?: Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled
Show arithmetic
1Full branch logic
min(((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.01 ? 1 : 0)) == max(((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.01 ? 1 : 0)) ? 0 : 1
Original example and source context
Take a Z score of 1.53. It is tested as a value smaller than expected, called a lower tail test. The significance level is 0.05. Look up 1.53 in the standard normal table. This gives 0.43699. Add 0.5 for the probability below zero. This produces a p-value of 0.93699. 3
Now take a Z score of 1.96. It is tested as a difference in either direction. The standard normal table lists 1.960 as the critical value at this level. 3 But this page also flags it as borderline. At least one other common level would give the opposite answer. 1
How to Use the Calculator
This page produces the same figures as printed tables for the normal, t, chi-square, and F distributions. These figures match what general-purpose statistical software returns for these tests. 10
A two-tailed test guards against your result being either too small or too large. Pick it when either direction would matter to you. Pick a lower or upper tail only when you care about one direction. 2
It is good practice to decide in advance how small a p-value has to be. Only then will you reject the null hypothesis. Set your significance level before you look at the result, not after. 1
P-Values from a Correlation Coefficient (r)
Pearson's r measures the linear correlation between two sets of data. It always falls between -1 and 1. Unlike covariance, r has no units. 9
Take pairs drawn from an uncorrelated bivariate normal distribution. Here, r converts into a t-statistic. The degrees of freedom equal your sample size minus 2. The formula is t equal to r times the square root of that degrees of freedom over 1 minus r squared. Once you have that t-statistic, enter it above as a t score with the matching degrees of freedom. This gives you its p-value. 9
Limitations of P-Values
Lowering your significance level reduces the risk of a false rejection. But it raises a different risk, called beta. There is a trade-off between the two. So an especially small alpha is not automatically the safer choice. 2
Critical values depend on which test statistic you used and which significance level you picked. 1
Turning a Test Statistic Into a P-Value
You find your p-value by locating where your statistic falls on the matching distribution's table and reading off the area beyond that point 1. For a z score, the standard normal table gives the area between zero and your value, and you add 0.5 to cover the half of the curve below zero; a z of 1.53 reads as 0.43699 in the table, so the area works out to 0.93699 3. Rejecting the null hypothesis whenever the p-value falls under your significance level gives the same call as checking whether the test statistic exceeds the matching critical value for that level 1.
Where the Sources Stop Talking
Some things a calculator page like this might cover are not addressed by the material behind this page. What the sources do say that touches on this: the risk of rejecting a true null hypothesis, alpha, is chosen in advance and is typically 0.10, 0.05, or 0.01, and a related risk, beta, rises as alpha falls 2.
Key facts
- The risk of rejecting a true null hypothesis is called alpha, the test's significance level. 2
- A critical value marks where a rejection region begins; landing there is another way to see a small p-value. 1
- For an upper, one-sided t-test, compare your statistic against the table column for 1 minus alpha, and reject if it is greater. 4
- For a two-sided chi-square test, one column at alpha divided by 2 covers the lower tail and a separate column at 1 minus alpha divided by 2 covers the upper tail. 6
- A chi-square distribution's standard deviation equals the square root of twice its degrees of freedom. 7
How this is calculated
Find the tail probability for your selected test distribution and direction. Then compare the p-value with your significance level to obtain the decision.
p-value
2 × (1 - normal_cdf(abs(T)))- T = Test statistic
- DF = Degrees of freedom
- test_type = What did you calculate?: 0 = Z score (standard normal), 1 = t score (Student's t), 2 = Chi-square statistic, 3 = F ratio
- tail = What are you testing?: 0 = A difference in either direction (two-tailed), 1 = A value smaller than expected (lower tail), 2 = A value larger than expected (upper tail)
- stat = Your test statistic ()
- df1 = Degrees of freedom ()
- df2 = Denominator degrees of freedom ()
- alpha = Significance level ()
- p = p-value
- decision = Decision at your significance level: 0 = The p-value is not smaller than your significance level — there is not enough evidence to reject the null hypothesis, 1 = The p-value is smaller than your significance level — reject the null hypothesis at that level
- level_sensitivity = Does that conclusion depend on the level you chose?: 0 = No — your significance level and every level the source calls common all give the same conclusion, 1 = Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled
- normal_cdf = the probability that a standard normal value is at most this
- abs = absolute value
- t_cdf = the probability that a t value with these degrees of freedom is at most this
- min = the smaller of
- chi2_cdf = the probability that a chi-square value with these degrees of freedom is at most this
- f_cdf = the probability that an F value with these degrees of freedom is at most this
- max = the larger of
Follow the calculation with your values
- p-value: 0.05000
Show arithmetic
2 * (1 - normal_cdf(abs(1.96)))Full branch logic
0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10)))) - Decision at your significance level: The p-value is smaller than your significance level — reject the null hypothesis at that level
Show arithmetic
1Full branch logic
(0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0 - Does that conclusion depend on the level you chose?: Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled
Show arithmetic
1Full branch logic
min(((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.01 ? 1 : 0)) == max(((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.1 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.05 ? 1 : 0), ((0 == 0 ? (0 == 0 ? 2 * (1 - normal_cdf(abs(1.96))) : (0 == 1 ? normal_cdf(1.96) : 1 - normal_cdf(1.96))) : (0 == 1 ? (0 == 0 ? 2 * (1 - t_cdf(abs(1.96), 10)) : (0 == 1 ? t_cdf(1.96, 10) : 1 - t_cdf(1.96, 10))) : (0 == 2 ? (0 == 0 ? 2 * min(chi2_cdf(1.96, 10), 1 - chi2_cdf(1.96, 10)) : (0 == 1 ? chi2_cdf(1.96, 10) : 1 - chi2_cdf(1.96, 10))) : (0 == 1 ? f_cdf(1.96, 10, 10) : 1 - f_cdf(1.96, 10, 10))))) < 0.01 ? 1 : 0)) ? 0 : 1
Full formulas, symbols and sources
p = 2 * (1 - normal_cdf(abs(stat)))
Z score (standard normal)
p = 2 * (1 - normal_cdf(abs(stat)))
t score (Student's t)
p = 2 * (1 - t_cdf(abs(stat), df1))
Chi-square statistic
p = 2 * min(chi2_cdf(stat, df1), 1 - chi2_cdf(stat, df1))
F ratio
p = 1 - f_cdf(stat, df1, df2)
Decision at your significance level
decision = p < alpha ? 1 : 0
Does that conclusion depend on the level you chose?
level_sensitivity = min(decision, (p < 0.1 ? 1 : 0), (p < 0.05 ? 1 : 0), (p < 0.01 ? 1 : 0)) == max(decision, (p < 0.1 ? 1 : 0), (p < 0.05 ? 1 : 0), (p < 0.01 ? 1 : 0)) ? 0 : 1
- test_type
- What did you calculate?: 0 = Z score (standard normal), 1 = t score (Student's t), 2 = Chi-square statistic, 3 = F ratio
- tail
- What are you testing?: 0 = A difference in either direction (two-tailed), 1 = A value smaller than expected (lower tail), 2 = A value larger than expected (upper tail)
- stat
- Your test statistic ()
- df1
- Degrees of freedom ()
- df2
- Denominator degrees of freedom ()
- alpha
- Significance level ()
- p
- p-value
- decision
- Decision at your significance level: 0 = The p-value is not smaller than your significance level — there is not enough evidence to reject the null hypothesis, 1 = The p-value is smaller than your significance level — reject the null hypothesis at that level
- level_sensitivity
- Does that conclusion depend on the level you chose?: 0 = No — your significance level and every level the source calls common all give the same conclusion, 1 = Yes — at least one significance level that the source calls just as common would give the opposite conclusion, so treat this result as borderline rather than settled
- normal_cdf
- the probability that a standard normal value is at most this
- abs
- absolute value
- t_cdf
- the probability that a t value with these degrees of freedom is at most this
- min
- the smaller of
- chi2_cdf
- the probability that a chi-square value with these degrees of freedom is at most this
- f_cdf
- the probability that an F value with these degrees of freedom is at most this
- max
- the larger of
Frequently asked questions
How do I find a p-value from a z-score?
Can a p-value be negative?
What does a p-value below the usual threshold mean?
What should I remember before acting on a p-value?
What is a good p-value?
Does a higher p-value mean better results?
How do I check a two-tailed t-test result by hand?
How do I check an upper-tail chi-square result by hand?
Limitations & common mistakes
- This page only accepts a test statistic from -100 to 1000, degrees of freedom from 1 to 100000, and a significance level from 0.0001 to 0.9999; outside those ranges it refuses to answer, and these bounds are this page's own choice, not limits of the formulas themselves.
- The result is only as exact as the test statistic, degrees of freedom, and significance level you enter, and it is not a substitute for a measurement taken on site or for a professional's judgement where one is required.
- Chi-square and F statistics do not naturally fall below zero, but this page uses the same input range for every test type regardless.
- The level-sensitivity check only compares your result against 0.1, 0.05, and 0.01, the levels called common in practice; it does not test every possible significance level.
Formula, sources, and review
This calculation follows the formula published on this page and rests on 10 cited sources, listed under Sources below. Checked by the Editorial Team on . No reviewer with a statistics credential has signed this page.
Sources & methodology
Sources
- 1 NIST/SEMATECH e-Handbook of Statistical Methods, 7.1.3.1. Critical values and p values — last verified
- 2 NIST/SEMATECH e-Handbook of Statistical Methods, 7.1.3. What are statistical tests? — last verified
- 3 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.7.1. Cumulative Distribution Function of the Standard Normal Distribution — last verified
- 4 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.7.2. Critical Values of the Student's t Distribution — last verified
- 5 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.7.3. Upper Critical Values of the F Distribution — last verified
- 6 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.7.4. Critical Values of the Chi-Square Distribution — last verified
- 7 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.6.6. Chi-Square Distribution — last verified
- 8 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.6.5. F Distribution — last verified
- 9 Pearson correlation coefficient — last verified
- 10 NIST/SEMATECH e-Handbook of Statistical Methods, 1.3.6.7. Tables for Probability Distributions — last verified