P-Value Calculator

Offline — showing the version cached on .

Show all explainers, focus on one, or collapse them. You can also open or close each section directly.

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
Find
Did this solve your problem?

How to use this calculator

  1. 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.
  2. 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.
  3. Enter Your test statistic
    Enter your calculated test statistic; this page accepts values from -100 to 1000.
  4. Enter Degrees of freedom
    Enter the degrees of freedom for your test, from 1 to 100000; for an F ratio this is the numerator degrees of freedom.
  5. Enter Denominator degrees of freedom
    Needed only for an F ratio: enter the denominator degrees of freedom, from 1 to 100000.
  6. Enter Significance level
    Enter the significance level you chose before running the test, such as 0.05; this page accepts values from 0.0001 to 0.9999.
  7. Read p-value

p-value () vs Your test statistic ()

00-1001000

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
    1. p-value: 0.93699
      Show arithmetic
      normal_cdf(1.53)
      Full branch logic0 == 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))))
    2. 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
      0
      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))))) < 0.05 ? 1 : 0
    3. 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
      0
      Full branch logicmin(((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
      1. p-value: 0.05000
        Show arithmetic
        2 * (1 - normal_cdf(abs(1.96)))
        Full branch logic0 == 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))))
      2. Decision at your significance level: The p-value is smaller than your significance level — reject the null hypothesis at that level
        Show arithmetic
        1
        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))))) < 0.05 ? 1 : 0
      3. 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
        1
        Full branch logicmin(((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
      • normal_cdf = the probability that a standard normal value is at most this
      • abs = absolute value
      Follow the calculation with your values
      1. p-value: 0.05000
        Show arithmetic
        2 * (1 - normal_cdf(abs(1.96)))
        Full branch logic0 == 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))))
      2. Decision at your significance level: The p-value is smaller than your significance level — reject the null hypothesis at that level
        Show arithmetic
        1
        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))))) < 0.05 ? 1 : 0
      3. 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
        1
        Full branch logicmin(((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?
        The standard normal table lists the area between zero and your z value. It uses the curve's symmetry. This tabled number equals the probability of landing between zero and the absolute value of your statistic. This page adds or subtracts that area. The result depends on whether you asked for a lower tail, an upper tail, or a two-tailed result. 3
        Can a p-value be negative?
        No. This page's p-value output is always a probability. So it stays between 0 and 1. This holds across every result this calculator can return, including 0 and 1 at the extremes. 1
        What does a p-value below the usual threshold mean?
        It means this page's decision result reads reject the null hypothesis at that level. Your p-value fell under the significance level you set. Does that finding stay firm at nearby levels? The level-sensitivity result is designed to flag exactly that. 1
        What should I remember before acting on a p-value?
        The direction you test has to match your question. For an upper one-sided test, the null hypothesis is rejected only when your statistic is greater than the relevant cut-off. 5
        What is a good p-value?
        It only describes one process. You compare your p-value against a significance level you pick in advance. Then you reject or do not reject the null hypothesis based on that comparison. 1
        Does a higher p-value mean better results?
        Does your p-value stay at or above your chosen significance level? If so, its decision field labels this as not enough evidence to reject the null hypothesis. 1
        How do I check a two-tailed t-test result by hand?
        Find the table column for 1 minus alpha divided by 2. Reject the null hypothesis if the absolute value of your test statistic is greater than that tabled value. This page carries out the same comparison for you. It reports the result as a p-value instead. 4
        How do I check an upper-tail chi-square result by hand?
        Find the column for 1 minus alpha in the table of upper-tail critical values. Reject the null hypothesis if your test statistic is greater than that tabled value. This page runs the equivalent comparison. It returns the result as a p-value. 6

        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.

        How we review

        Sources & methodology

        ConstantValueUnitSource
        p_value_significance_calculator_c122
        p_value_significance_calculator_c20.11
        p_value_significance_calculator_c30.051
        p_value_significance_calculator_c40.011

        Sources