HomeDescriptive StatisticsT-Score Calculator - t-Test, p-Value & T = 50 + 10z Scale

T-Score Calculator – t-Test, p-Value & T = 50 + 10z Scale

T-Score Calculator - t-Test, p-Value & T = 50 + 10z Scale

T-Score Calculator

Both meanings of "t-score" in one place. Run a one-sample, two-sample, Welch or paired t-test with degrees of freedom, p-values, confidence intervals and effect sizes. Or convert to the T = 50 + 10z psychometric scale used by the MMPI, BASC and ASEBA, and read a bone-density DXA T-score.

0. Quick Answer

A t-score is one of two completely different things, and confusing them is the most common mistake on this topic.

📊 Meaning 1: the t-statistic

An inferential test statistic. It measures how many standard errors a sample mean sits from a hypothesised value.

t = (x̄ − μ) ÷ (s ÷ √n)

It always comes with degrees of freedom, and you convert it to a p-value using the t-distribution. Typical values run from about −4 to +4. This is what you want if you are testing a hypothesis.

🧠 Meaning 2: the T-score scale

A standardised score scale with a mean of 50 and a standard deviation of 10. It is just a z-score, rescaled to avoid decimals and negative numbers.

T = 50 + 10z

Used in psychometrics (MMPI, BASC, ASEBA, where T above 65 is clinically significant) and, on a different scale entirely, in bone-density DXA scans. Typical values run from 20 to 80.

Which one do you need? If you have a sample and want a p-value, you want meaning 1, the t-statistic. If you have a test report showing a score near 50 or 60, or a DXA bone scan, you want meaning 2, the T-score scale. The calculator below does both: the first four tabs are the t-test, the last two are the conversion scales.

Key takeaways

  • The t-statistic uses the standard error, not the standard deviation. Dividing by s alone is the single most common arithmetic error in a t-test.
  • Degrees of freedom drive everything. With df = 4 you need |t| > 2.776 for significance at the 5% level; with df = 100 you only need 1.984, and by df = 1000 it has converged on the normal value of 1.96.
  • Use t, not z, whenever you estimated the standard deviation from your data. That is almost always. The t-distribution has heavier tails to account for that extra uncertainty.
  • Welch's t-test should be your default for two independent samples. It does not assume equal variances and costs almost nothing when they happen to be equal.
  • A p-value is not an effect size. Report Cohen's d and a confidence interval alongside every t-test, because with a large enough sample a trivial difference becomes significant.
  • T = 50 + 10z has nothing to do with the t-distribution. They share a letter and nothing else. A T-score of 70 means two standard deviations above the mean, not a test statistic of 70.

📚 1. What Is a T-Score?

1.1 The t-statistic, and why it exists

Suppose you want to know whether a sample mean differs from some hypothesised value. If you knew the population standard deviation you would compute a z-score and read the p-value off the normal curve. In practice you almost never know it, so you estimate it from the same small sample you are testing. That estimate is itself uncertain, and ignoring that uncertainty makes your p-values too small.

William Sealy Gosset worked out the correct distribution in 1908 while employed at the Guinness brewery in Dublin, where he was testing small batches of barley. The brewery would not let staff publish under their own names, so he used the pseudonym "Student", and the distribution has been called Student's t ever since.

The formula looks almost identical to a z-score. The only change is the denominator:

t = (x̄ − μ) ÷ (s ÷ √n)

The quantity s ÷ √n is the standard error of the mean. It is smaller than s, because sample means vary far less than individual observations do, and it shrinks as the sample grows.

1.2 Degrees of freedom, in plain terms

Degrees of freedom count how many values in a calculation are genuinely free to vary. Once you have computed a sample mean from n numbers, only n − 1 of those numbers can vary freely: the last one is pinned down by the requirement that they average to the mean you already used. That is why a one-sample t-test has df = n − 1.

Degrees of freedom matter because they set the shape of the distribution. At df = 1 the t-distribution has extraordinarily heavy tails and the 5% critical value is 12.706. At df = 10 it is 2.228. At df = 30 it is 2.042. As df grows the distribution converges on the standard normal, and by df = 1000 the critical value is 1.962, essentially the normal 1.960.

The practical rule. Below about df = 30 the difference between t and z is large enough to change conclusions. Above it, the two agree closely, but there is never a penalty for using t, so use t whenever the standard deviation was estimated.

1.3 The four t-tests

TestUse whenDegrees of freedom
One-sampleComparing one sample mean against a known or hypothesised valuen − 1
Two-sample, StudentTwo independent groups, variances assumed equaln₁ + n₂ − 2
Two-sample, WelchTwo independent groups, variances not assumed equal. The safer defaultWelch-Satterthwaite, usually fractional
PairedTwo measurements on the same subjects, such as before and aftern pairs − 1

1.4 The T-score scale, which is a different animal entirely

The other T-score is not a test statistic at all. It is a linear rescaling of the z-score, chosen so that scores are positive, whole-ish numbers clustered around 50:

T = 50 + 10z

A z of 0 becomes T = 50, a z of +1 becomes T = 60, a z of +2 becomes T = 70. Because the transformation is linear, it changes nothing about the data: the percentile attached to T = 70 is exactly the percentile attached to z = 2, which is 97.7%.

Psychological instruments use it heavily. On the MMPI-2, the BASC-3 and the ASEBA family, a T-score of 65 or above (z = 1.5, the 93rd percentile) is conventionally the clinical threshold, with 60 to 64 flagged as at-risk. This convention is why the scale exists: clinicians wanted a single memorable cut-off rather than decimals.

Bone density T-scores are different again. A DXA scan reports a T-score comparing your bone mineral density against a healthy young adult reference, using the same T = number of standard deviations idea but without the 50 + 10 rescaling. A DXA T-score of −2.5 or below means osteoporosis, −1.0 to −2.5 means osteopenia. It is closer to a plain z-score than to the psychometric T. The calculator handles it in its own tab so the two never get mixed up.

🧮 2. Set Up Your Calculation

Tests whether one sample mean differs from a hypothesised population value. Paste your raw numbers and the calculator works out the mean, standard deviation, standard error and degrees of freedom.

One column is loaded by default. Press Add cluster to test several groups at once.
The value you are testing against. Often a published norm, a specification, or zero.
📁 Or upload a CSV / Excel file
Supports .csv, .txt, .xlsx and .xls. Every column you click becomes its own cluster.

Compares the means of two independent groups. Welch's version does not assume the two variances are equal and is the safer default; both are reported side by side so you can see whether the choice matters.

Both are always computed. This choice only decides which one headlines the results.

For two measurements on the same subjects, such as before and after a treatment. The test runs on the differences, so the two columns must be the same length and in matching order.

If you only have the published summary statistics and not the raw data, enter them here. This is the usual situation when re-analysing a result from a paper.

The psychometric T-score scale, mean 50 and standard deviation 10. Convert in either direction, and see the percentile plus the clinical band used by instruments such as the MMPI-2, BASC-3 and ASEBA.

Bone mineral density T-score from a DXA scan. This compares your BMD against a healthy young adult reference and uses the WHO diagnostic thresholds. It is not the 50 + 10z scale.

Not medical advice. This reproduces the WHO arithmetic so you can understand a report you already have. Diagnosis, and any decision about treatment, belongs with your doctor.
Site and manufacturer specific. Your report lists it.

📊 3. Results

Enter your numbers above and press Calculate T-Score. The t-statistic, degrees of freedom, p-value, confidence interval, effect size, charts and reporting sentences will appear here.

🧠 4. Interpretation of Results, In Detail

Run the calculator to fill this section with your own numbers. The ten sub-sections below explain every part of the output.

4.1 What the t-statistic actually measures

A t-statistic is a signal-to-noise ratio. The numerator is the effect you observed, such as how far a sample mean sits from a hypothesised value or how far two group means sit from each other. The denominator is the standard error, which is how much that same quantity would be expected to wobble from sample to sample by chance alone.

So t = 3 means the observed effect is three times larger than the typical chance wobble. t = 0.5 means the effect is smaller than the noise, and you would see something that large routinely even if nothing real were going on. That is the entire logic, and everything else on this page is bookkeeping around it.

4.2 Degrees of freedom, and why the same t means different things

A t of 2.5 is not a fixed amount of evidence. On 3 degrees of freedom it gives p = 0.088 and would not be significant at the 5% level. On 30 degrees of freedom the same 2.5 gives p = 0.018 and would be. On 300 it gives p = 0.013.

The reason is that the t-distribution's shape depends on df. With few degrees of freedom the standard deviation estimate is unreliable, so the distribution has heavy tails to accommodate that, and you need a larger statistic to be convincing. As df grows, the estimate settles down and the distribution converges on the normal curve. Chart 3 in the results plots this convergence directly.

Always report df with t. Writing "t = 2.5, p = 0.02" without the degrees of freedom is like giving a distance without units. The conventional format is t(df) = value, for example t(18) = 2.50.

4.3 What a p-value does and does not say

The p-value is the probability of observing a statistic at least this extreme if the null hypothesis were true. That conditional clause carries all the weight. It is not the probability that the null hypothesis is true, it is not the probability that your result is a fluke, and it is not a measure of how large or important the effect is.

A p-value above your alpha does not demonstrate that there is no effect. It means this particular sample was not able to distinguish the effect from zero, which is a statement about your study's power as much as about reality. Absence of evidence is not evidence of absence, and with small samples the two are easily confused.

4.4 Why the confidence interval is the more useful output

A p-value collapses everything into a single yes-or-no verdict. A confidence interval tells you the range of effect sizes the data are compatible with, which is almost always the thing you actually wanted to know.

Two studies can both report p = 0.04, but if one has an interval from 0.1 to 9.8 and the other from 4.2 to 5.6, they are telling you completely different things. The first has established little beyond a direction; the second has pinned the effect down. Reporting the interval also makes non-significant results informative: an interval from −0.2 to 0.3 rules out any large effect, whereas one from −12 to 15 rules out nothing at all.

4.5 Effect size, and why significance is not importance

Statistical significance depends on both the size of the effect and the size of the sample. With 10,000 observations a difference of no practical consequence will be highly significant; with 8 observations a large and important difference may not reach significance at all.

Cohen's d strips out the sample size by expressing the difference in standard deviation units. Cohen's rough conventions are 0.2 for small, 0.5 for medium and 0.8 for large, though he was explicit that these were rules of thumb for fields with no better benchmarks. Where your discipline has its own norms, use those instead. For two-sample tests, Hedges' g applies a small-sample correction to d and is preferable below about n = 20 per group.

4.6 Welch versus Student, and why Welch should be your default

Student's two-sample test assumes both groups have the same population variance and pools them into a single estimate. Welch's test does not, and adjusts the degrees of freedom downwards using the Welch-Satterthwaite equation, which usually produces a fractional value like 15.49.

The evidence favours Welch as a routine default. When the variances really are equal, Welch loses almost nothing. When they are not, particularly with unequal sample sizes, Student's test can have a false positive rate far above the nominal 5%. Both are always computed and displayed side by side in the results table so you can see whether the choice made any difference in your case.

Do not use a preliminary variance test to choose. Running Levene's or an F-test first and then picking a t-test based on the result is a two-stage procedure that distorts the overall error rate. Just use Welch.

4.7 Paired versus independent, and why the distinction matters so much

If each subject contributes two measurements, the paired test analyses the differences and the between-subject variability cancels out entirely. This usually produces a far smaller standard error and a much more sensitive test.

Applying an independent two-sample test to paired data throws that advantage away and is a genuine statistical error, not merely a conservative choice. The reverse error is worse: pairing observations that are not actually linked manufactures a relationship that is not there. The test to use is determined by how the data were collected, not by which gives the nicer p-value.

4.8 The assumptions, ranked by how much they matter

Independence matters most. If observations are clustered, repeated or autocorrelated, the effective sample size is smaller than n and the p-value will be too small. No amount of sample size fixes this, and nothing in the output will warn you: it has to be handled in the design.

Normality matters least, and less as n grows. The central limit theorem means the sampling distribution of the mean approaches normality even when the raw data do not, so above roughly n = 30 per group the t-test is quite robust. Below about n = 15 it does real work, and a strongly skewed small sample is a genuine problem. Note that for a paired test the assumption applies to the differences, not the raw columns.

Equal variances matter only for Student's version, which is a good reason to use Welch's instead.

4.9 Reading the four charts

Chart 1 draws the t-distribution for your degrees of freedom with the standard normal dashed behind it, so you can see directly how much heavier the tails are at your df. Your statistic is marked and the p-value region shaded. Chart 2 shows the raw observations with group means, which is where you check for skew and stray values. Chart 3 plots the critical value against degrees of freedom, the single clearest picture of why small samples demand larger statistics. Chart 4 shows the confidence interval against the null value, so you can see at a glance whether it crosses.

4.10 The other T-score, and how to tell which you are looking at

If your number is between about 20 and 80 and came from a psychological questionnaire or a school report, it is the T = 50 + 10z scale, not a test statistic. It has no degrees of freedom and no p-value, because it is a position on a scale rather than a hypothesis test.

If your number is between about −4 and +1 and came from a bone density scan, it is the DXA T-score, which is a plain count of standard deviations from a healthy young adult reference with no rescaling.

If your number is roughly between −5 and +5, arrived with a df and a p-value, and came from analysing a sample, it is the t-statistic. The three share a letter and nothing else.

5. How to Write Your Results in Research

▶ Run the analysis above to auto-fill all five examples with your results.

Example 1, Full APA 7th Sentence
Run the calculator to generate this sentence from your data.
📌 Key conventions for this style
  • Italicise t, p, M, SD, n and d. Degrees of freedom go in parentheses immediately after t.
  • Report p to three decimals, or as p < .001. Never write p = .000.
  • Drop the leading zero on p and d, because neither can exceed 1 in absolute terms for p.
  • Always give the confidence interval and an effect size, not just the p-value.
  • State the tail direction and say that it was chosen in advance.
Example 2, Compact Inline Format
Run the calculator to generate this snippet.
📌 Key conventions for this style
  • For use in parentheses mid-sentence, or in a table footnote.
  • Still include df, the CI and the effect size. Space is not an excuse to drop them.
  • Useful when the same test is reported many times across a results section.
Example 3, Plain-Language Summary
Run the calculator to generate this summary.
📌 Key conventions for this style
  • For an abstract, a press release, or a report to a non-technical audience.
  • Never write t, p, df or "significant" in the statistical sense; general readers hear "significant" as "important".
  • Give the size of the effect in the original units, which is what people actually care about.
  • Be careful not to overstate a non-significant result as proof of no difference.
Example 4, Assumptions and Method Note
Run the calculator to generate this methods note.
📌 Key conventions for this style
  • Belongs in the methods section, not the results.
  • State which t-test variant you used and why, particularly Welch versus Student.
  • Say how normality was assessed, and what you would have done if it failed.
  • Confirm that alpha and the tail direction were fixed before looking at the data.
Example 5, Power and Precision Statement
Run the calculator to generate this statement.
📌 Key conventions for this style
  • Essential whenever a result is non-significant, because it distinguishes "no effect" from "no power".
  • Report the width of the confidence interval, which is the honest measure of precision.
  • Avoid post-hoc observed power, which is a deterministic function of the p-value and adds nothing.
  • If the study was powered in advance, state the target effect size and the assumptions used.

6. Formulas Used

One-Sample t-Test
t = (x̄ − μ₀) ÷ (s ÷ √n)  ·  df = n − 1
The sample mean
μ₀The hypothesised population mean you are testing against
s ÷ √nThe standard error of the mean. This is the denominator, not s
UndefinedIf s = 0 or n = 1 there is no t-statistic
Two-Sample t-Test, Student's Pooled Version
sₚ² = [(n₁−1)s₁² + (n₂−1)s₂²] ÷ (n₁+n₂−2)
t = (x̄₁ − x̄₂) ÷ √[sₚ²(1/n₁ + 1/n₂)]  ·  df = n₁ + n₂ − 2
sₚ²The pooled variance, a weighted average of the two group variances
AssumesBoth populations share the same variance
Fails whenVariances differ and sample sizes are unequal. Then the false positive rate can be far above 5%
Two-Sample t-Test, Welch's Version
t = (x̄₁ − x̄₂) ÷ √(s₁²/n₁ + s₂²/n₂)
df = (s₁²/n₁ + s₂²/n₂)² ÷ [ (s₁²/n₁)²/(n₁−1) + (s₂²/n₂)²/(n₂−1) ]
Welch-SatterthwaiteThe df formula. It usually returns a fractional value such as 15.49
RangeThe df always falls between min(n₁,n₂) − 1 and n₁ + n₂ − 2
RecommendedUse this as the default for independent samples. R's t.test() does
Paired t-Test
dᵢ = xᵢ − yᵢ  ·  t = d̄ ÷ (sₑ ÷ √n)  ·  df = n − 1
dᵢThe difference for each pair, in a consistent direction
The mean of those differences
sₑThe standard deviation of the differences, not of the raw values
nThe number of pairs, not the total number of measurements
NoteThis is just a one-sample t-test on the differences against zero
Confidence Interval for the Mean or the Difference
estimate ± tₐ⁄₂,ₖₔ × SE
tₐ⁄₂,ₖₔThe critical value: 2.228 at df = 10, 2.042 at df = 30, 1.984 at df = 100
EquivalenceIf the interval excludes the null value, the test is significant at that alpha. They always agree
WidthShrinks with √n, so quadrupling the sample halves the width
Effect Size: Cohen's d and Hedges' g
d = (x̄₁ − x̄₂) ÷ sₚ  ·  g = d × [1 − 3 ÷ (4(n₁+n₂) − 9)]
Conventions0.2 small, 0.5 medium, 0.8 large. Cohen intended these only as rough defaults
One-sampled = (x̄ − μ₀) ÷ s
Hedges' gCorrects the small-sample upward bias in d. Prefer it below about n = 20 per group
Key propertyDoes not change as sample size grows, unlike the p-value
The T-Score Scale, T = 50 + 10z
z = (x − M) ÷ SD  ·  T = 50 + 10z  ·  z = (T − 50) ÷ 10
M, SDThe mean and standard deviation of the normative reference sample
T = 50Exactly average, the 50th percentile
T = 60One SD above, 84th percentile. Commonly the at-risk threshold
T = 651.5 SD above, 93rd percentile. The usual clinical threshold
T = 70Two SD above, 98th percentile
WarningNothing to do with the t-distribution. No df, no p-value
Bone Density T-Score (DXA)
T = (BMDₘₑₐₛ − BMDₘₑₐₙ,ⱼₒᵤₙᴳ) ÷ SDⱼₒᵤₙᴳ
ReferenceHealthy young adults at peak bone mass, matched for sex
T ≥ −1.0Normal
−1.0 > T > −2.5Osteopenia, low bone mass
T ≤ −2.5Osteoporosis (WHO, 1994)
Z-score insteadCompares against age-matched peers. Use it for premenopausal women, men under 50 and children

📝 7. How to Use This Calculator

  1. Decide first which t-score you actually need. If you have a sample and want a p-value, use one of the first four tabs, which run t-tests. If you have a score from a psychological test or a school report, use the T = 50 + 10z tab. If you have a bone density scan, use the DXA tab. These are three unrelated quantities that happen to share a letter.
  2. Paste your numbers into the data column. One-sample opens first because it is the most common. Enter values comma-separated exactly as the placeholder shows, and set the hypothesised mean you are testing against. The calculator works out the mean, standard deviation, standard error and degrees of freedom for you.
  3. For two independent groups, use the two-sample tab. Paste each group into its own box. Both Welch and Student results are always computed and shown side by side, so you can see whether the equal-variance assumption changed anything.
  4. For before-and-after data, use the paired tab. The two columns must be the same length and in matching order, because row 1 in the first column is paired with row 1 in the second. The counter under the boxes warns you if the lengths do not match.
  5. If you only have published summary statistics, use the fourth tab. Enter the mean, standard deviation and sample size, and it reconstructs the test. This is the usual situation when re-analysing a result from a paper.
  6. Add clusters to test several groups at once. Each gets its own mean, standard deviation and t against the same hypothesised value. Every column has its own Clear and Remove button, and Remove is disabled on the last remaining column.
  7. Or upload a CSV or Excel file. Open the upload panel and click the column names you want. Every column you click becomes its own cluster.
  8. Choose your tail and alpha before you look at the result. Two-tailed asks whether there is any difference; one-tailed commits to a direction and must be decided in advance. Switching afterwards halves your p-value without justification.
  9. Press Calculate T-Score. Nothing is computed until you do, and changing any input clears the results so you never read stale numbers.
  10. Read the confidence interval and effect size, not just the p-value. The interval tells you which effect sizes are compatible with your data, and Cohen's d tells you whether the difference matters. A significant p-value with a trivial d usually just means a large sample.

📊 8. How to Run a t-Test in Excel

Excel has a one-call function that does the whole test, plus the building blocks if you want to see the working. Below is the complete workflow in ten steps, each with a picture of what your sheet should look like.

The functions that matter. T.TEST for a p-value in one call, T.DIST.2T and T.INV.2T for the distribution, AVERAGE, STDEV.S and SQRT for the components, and CONFIDENCE.T for the interval.
Xt-tests.xlsx - ExcelA1fxGroup 1ABCDE1Group 1Group 2StatisticResult25271Mean 134868SD 145575n 156166SE 164773t75870df

Step 1. Lay the two groups out in columns with headers, and reserve a block for the statistics.

Xt-tests.xlsx - ExcelE2fx=AVERAGE(A2:A11)ABCDE1Group 1Group 2StatisticResult25271Mean 153.500034868SD 145575n 156166SE 164773t75870df

Step 2. AVERAGE gives the mean of group 1, 53.5000.

Xt-tests.xlsx - ExcelE3fx=STDEV.S(A2:A11)ABCDE1Group 1Group 2StatisticResult25271Mean 153.500034868SD 16.096445575n 11056166SE 164773t75870df

Step 3. STDEV.S divides by n minus 1, which is what a t-test requires. STDEV.P would be wrong here.

Xt-tests.xlsx - ExcelE5fx=E3/SQRT(E4)ABCDE1Group 1Group 2StatisticResult25271Mean 153.500034868SD 16.096445575n 11056166SE 11.927964773t75870df

Step 4. The standard error, s divided by the square root of n. This is the denominator of t, and forgetting the SQRT is the most common mistake.

Xt-tests.xlsx - ExcelE6fx=(E2-50)/E5ABCDE1Group 1Group 2StatisticResult25271Mean 153.500034868SD 16.096445575n 11056166SE 11.927964773t1.815575870df9

Step 5. The one-sample t-statistic against a hypothesised mean of 50, with df = n minus 1 = 9.

Xt-tests.xlsx - ExcelB4fx=T.DIST.2T(ABS(B2),B3)AB1QuantityResult2t1.81553df94p two-tailed0.10285p one-tailed6critical t

Step 6. T.DIST.2T gives the two-tailed p-value directly, 0.1028. It requires a positive t, hence the ABS.

Xt-tests.xlsx - ExcelB6fx=T.INV.2T(0.05,B3)AB1QuantityResult2t1.81553df94p two-tailed0.10285p one-tailed0.05146critical t2.2622

Step 7. T.INV.2T returns the critical value, 2.2622 at df = 9. Since |t| = 1.82 is below it, the result is not significant at 5%.

Xt-tests.xlsx - ExcelC4fx=T.TEST(A2:A11,B2:B11,2,3)ABC1TestExcel typep-value2Paired17.22E-063Two-sample, equal var27.52E-074Two-sample, Welch31.88E-065

Step 8. T.TEST does the whole thing in one call. The third argument is the number of tails and the fourth is the type: 1 paired, 2 equal variance, 3 Welch. Use 3 unless you have a reason not to.

Xt-tests.xlsx - ExcelB6fx=CONFIDENCE.T(0.05,B3,B4)AB1QuantityResult2Mean53.50003SD6.09644n105Critical t2.26226Margin4.36117CI lower8CI upper

Step 9. CONFIDENCE.T returns the margin of error using the t-distribution, 4.3611. Do not use CONFIDENCE.NORM, which assumes you know the population SD.

Xt-tests.xlsx - ExcelB7fx=B2-B6AB1QuantityResult2Mean53.50003SD6.09644n105Critical t2.26226Margin4.36117CI lower49.13898CI upper57.8611

Step 10. Mean minus and plus the margin gives the 95% confidence interval, 49.14 to 57.86. It contains 50, which is the same conclusion the p-value gave.

The formula cheat sheet

What you wantExcel formulaNotes
Mean=AVERAGE(A2:A11)Ignores blanks and text
Sample SD=STDEV.S(A2:A11)Divides by n minus 1. Always this one for a t-test
Count=COUNT(A2:A11)Counts numbers only, so it matches what AVERAGE used
Standard error=STDEV.S(A2:A11)/SQRT(COUNT(A2:A11))The denominator of t
One-sample t=(AVERAGE(A2:A11)-50)/E5Replace 50 with your hypothesised mean
Degrees of freedom=COUNT(A2:A11)-1For a one-sample or paired test
Two-tailed p from t=T.DIST.2T(ABS(t),df)Needs a positive t, hence ABS
Right-tail p from t=T.DIST.RT(t,df)One-tailed, upper
Left-tail p from t=T.DIST(t,df,TRUE)Cumulative, so this is the lower tail
Critical t, two-tailed=T.INV.2T(0.05,df)2.2622 at df = 9
Critical t, one-tailed=T.INV(0.95,df)Note this takes the cumulative probability
Paired t-test p=T.TEST(A2:A11,B2:B11,2,1)Type 1 is paired
Two-sample, equal variance=T.TEST(A2:A11,B2:B11,2,2)Type 2 is Student's pooled
Two-sample, Welch=T.TEST(A2:A11,B2:B11,2,3)Type 3. Use this as your default
Margin of error=CONFIDENCE.T(0.05,sd,n)Uses t, not z
Confidence interval=mean-margin and =mean+marginExcludes the null value exactly when p < alpha
Pooled SD=SQRT(((n1-1)*s1^2+(n2-1)*s2^2)/(n1+n2-2))For Cohen's d on two samples
Cohen's d=(mean1-mean2)/pooledSDNo built-in function exists

The T = 50 + 10z scale in Excel

What you wantExcel formulaResult for a raw score of 68, M 50, SD 12
Z-score=STANDARDIZE(68,50,12)1.5000
T-score=50+10*STANDARDIZE(68,50,12)65.00
Percentile=NORM.S.DIST((T-50)/10,TRUE)0.9332, so the 93rd percentile
Back to z=(T-50)/101.5000
T from a percentile=50+10*NORM.S.INV(0.93)64.76
Clinical flag=IF(T>=65,"Clinical",IF(T>=60,"At-risk","Typical"))Clinical

Six mistakes that catch people out

  • Using STDEV.P instead of STDEV.S. A t-test is built on a sample estimate. The population version gives a slightly smaller SD, a slightly larger t and a p-value that is too small.
  • Forgetting SQRT in the standard error. Dividing by n instead of the square root of n is the most frequent arithmetic error in the whole procedure.
  • Passing a negative t to T.DIST.2T. It returns an error. Wrap it in ABS.
  • Confusing T.INV with T.INV.2T. T.INV.2T(0.05,9) gives 2.2622, while T.INV(0.05,9) gives −1.8331. They answer different questions.
  • Choosing T.TEST type 2 out of habit. Type 3, Welch, is the safer default and R uses it by default for good reason.
  • Using CONFIDENCE.NORM for a small sample. It assumes the population SD is known and gives an interval that is too narrow.
Google Sheets. Every formula above works unchanged, and Sheets also accepts the legacy TTEST, TDIST and TINV names. Be careful with legacy TDIST, whose third argument is the number of tails rather than a cumulative flag.
The Analysis ToolPak. Data > Data Analysis offers "t-Test: Two-Sample Assuming Unequal Variances", which is Welch, and gives you t, df, both p-values and both critical values in one table. It is worth enabling, but note that it pastes static values rather than live formulas, so the output will not update when your data change.

📈 9. How to Run a t-Test in R

Base R does all four t-tests with a single function, t.test(), and no packages at all. The script below runs every variant, converts to the T = 50 + 10z scale, and draws one figure. Copy it whole and it will run.

The one trap in R. t.test(x, y) defaults to var.equal = FALSE, meaning it runs Welch, not Student. This is a sensible default, but it surprises people who expect the textbook pooled test and then cannot reproduce a result from SPSS. If you need Student's version you must write var.equal = TRUE explicitly.
R, base packages only
# T-Score Calculator in R (base R, no packages)

# ---- 1. Your data -----------------------------------------------------
g1  <- c(52, 48, 55, 61, 47, 58, 50, 63, 45, 56)
g2  <- c(71, 68, 75, 66, 73, 70, 69, 77, 64, 72)
mu0 <- 50          # hypothesised mean for the one-sample test
alpha <- 0.05

# ---- 2. One-sample t-test ---------------------------------------------
one <- t.test(g1, mu = mu0, conf.level = 1 - alpha)
print(one)

# the same thing by hand, so you can see where every number comes from
n1  <- length(g1)
m1  <- mean(g1)
s1  <- sd(g1)               # sd() always divides by n - 1
se1 <- s1 / sqrt(n1)
t1  <- (m1 - mu0) / se1
df1 <- n1 - 1
p1  <- 2 * pt(-abs(t1), df1)
tcrit1 <- qt(1 - alpha/2, df1)
d1  <- (m1 - mu0) / s1      # Cohen's d

# ---- 3. Two-sample t-tests ---------------------------------------------
welch   <- t.test(g1, g2)                     # Welch is the DEFAULT in R
student <- t.test(g1, g2, var.equal = TRUE)   # Student's pooled version

n2 <- length(g2); m2 <- mean(g2); s2 <- sd(g2)
sp <- sqrt(((n1-1)*s1^2 + (n2-1)*s2^2) / (n1+n2-2))
d_two <- (m1 - m2) / sp
g_hedges <- d_two * (1 - 3/(4*(n1+n2) - 9))

# ---- 4. Paired t-test ---------------------------------------------------
before <- c(128,135,142,119,151,133,126,147,138,130)
after  <- c(121,128,133,115,140,127,122,136,129,124)
paired <- t.test(before, after, paired = TRUE)

# ---- 5. The OTHER t-score: the T = 50 + 10z scale ----------------------
raw <- 68; ref_mean <- 50; ref_sd <- 12
z_scale <- (raw - ref_mean) / ref_sd
T_scale <- 50 + 10 * z_scale
pct     <- pnorm(z_scale) * 100

cat(sprintf("ONE-SAMPLE  t(%d) = %.4f, p = %.6f, d = %.4f\n", df1, t1, p1, d1))
cat(sprintf("            mean %.4f, SD %.4f, SE %.4f, %d%% CI [%.4f, %.4f]\n",
            m1, s1, se1, round((1-alpha)*100), one$conf.int[1], one$conf.int[2]))
cat(sprintf("WELCH       t(%.4f) = %.4f, p = %.3e\n",
            welch$parameter, welch$statistic, welch$p.value))
cat(sprintf("STUDENT     t(%.0f) = %.4f, p = %.3e\n",
            student$parameter, student$statistic, student$p.value))
cat(sprintf("            Cohen's d = %.4f, Hedges' g = %.4f\n", d_two, g_hedges))
cat(sprintf("PAIRED      t(%.0f) = %.4f, p = %.3e, mean diff %.4f\n",
            paired$parameter, paired$statistic, paired$p.value,
            mean(before - after)))
cat(sprintf("T-SCALE     raw %g -> z = %.4f -> T = %.2f (%.2fth percentile)\n",
            raw, z_scale, T_scale, pct))

# ---- 6. One figure ------------------------------------------------------
grid <- seq(-5, 5, length.out = 600)
plot(grid, dt(grid, df1), type = "l", lwd = 2.2, col = "#4338ca", bty = "n",
     xlab = "t value", ylab = "density",
     main = sprintf("One-Sample t-Test   n=%d, mean=%.2f, SD=%.2f, tested against %g",
                    n1, m1, s1, mu0))
lines(grid, dnorm(grid), lwd = 1.5, lty = 2, col = "#94a3b8")

# shade both tails beyond |t|
tail_r <- grid[grid >=  abs(t1)]
tail_l <- grid[grid <= -abs(t1)]
polygon(c(tail_r, rev(tail_r)), c(dt(tail_r, df1), rep(0, length(tail_r))),
        col = adjustcolor("#f59e0b", 0.40), border = NA)
polygon(c(tail_l, rev(tail_l)), c(dt(tail_l, df1), rep(0, length(tail_l))),
        col = adjustcolor("#f59e0b", 0.40), border = NA)

abline(v = t1, col = "#be185d", lwd = 2.4)
abline(v = c(-tcrit1, tcrit1), col = "#b45309", lty = 3, lwd = 1.4)
text(tcrit1, max(dt(grid, df1)) * 0.92,
     sprintf(" critical %.3f", tcrit1), pos = 4, cex = 0.8, col = "#b45309")

legend("topright", bty = "n", cex = 0.85,
       legend = c(sprintf("t-distribution, df = %d", df1),
                  "normal for comparison",
                  sprintf("p = %.4f", p1),
                  sprintf("observed t = %.3f", t1)),
       col = c("#4338ca", "#94a3b8", "#f59e0b", "#be185d"),
       lwd = c(2.2, 1.5, 6, 2.4), lty = c(1, 2, 1, 1))

What the script prints

ONE-SAMPLE  t(9) = 1.8155, p = 0.102838, d = 0.5741
            mean 53.5000, SD 6.0964, SE 1.9279, 95% CI [49.1389, 57.8611]
WELCH       t(15.4903) = -7.3843, p = 1.876e-06
STUDENT     t(18) = -7.3843, p = 7.519e-07
            Cohen's d = -3.3024, Hedges' g = -3.1628
PAIRED      t(9) = 9.1864, p = 7.217e-06, mean diff 7.4000
T-SCALE     raw 68 -> z = 1.5000 -> T = 65.00 (93.32th percentile)

These are the same numbers the Python script produces and the same numbers the calculator at the top of this page produces, which is a useful sanity check whenever you port an analysis between tools.

Line-by-line explanation

  • Block 1 holds the only things you change. Everything below is generic.
  • Block 2 runs the one-sample test twice: once with t.test() and once by hand. The manual version exists so you can see that pt() is the t-distribution's CDF and qt() its inverse, exactly parallel to pnorm() and qnorm() for the normal.
  • Block 3 shows the Welch and Student versions side by side. Notice that t is identical in this case, at −7.3843, but the degrees of freedom differ (15.49 versus 18) and therefore so do the p-values. When sample sizes are equal, only the df changes; when they are unequal, t changes too.
  • Block 4 runs the paired test. paired = TRUE makes R analyse the differences, which is not the same as passing the differences to a one-sample test only in that R handles the bookkeeping for you.
  • Block 5 is the completely unrelated T-score scale, included so the two never get confused. It uses pnorm(), the normal CDF, not the t-distribution.
  • Block 6 draws one figure containing everything: the t-distribution for your df, the normal dashed behind it so the heavier tails are visible, the shaded p-value region, your observed t and the critical values.

Useful one-liners

TaskR
One-sample t-testt.test(x, mu = 50)
Two-sample, Welch (default)t.test(x, y)
Two-sample, Studentt.test(x, y, var.equal = TRUE)
Pairedt.test(x, y, paired = TRUE)
One-tailedt.test(x, mu = 50, alternative = "greater")
Formula interfacet.test(value ~ group, data = df)
99% confidence intervalt.test(x, conf.level = 0.99)
Extract just the p-valuet.test(x, y)$p.value
Extract the CIt.test(x, y)$conf.int
p from t2 * pt(-abs(t), df)
Critical tqt(0.975, df)
Check normalityshapiro.test(x)
Non-parametric alternativewilcox.test(x, y)
Cohen's d (effsize package)effsize::cohen.d(x, y)
Power analysis (pwr package)pwr::pwr.t.test(d = 0.5, power = 0.8)
T = 50 + 10z50 + 10 * scale(x)

🐍 10. How to Run a t-Test in Python

SciPy has one function per test and returns the statistic, the p-value and the degrees of freedom. The script below was run before being published, so the printed output shown underneath is real, not typed by hand.

The two traps in Python. First, np.std() defaults to ddof=0, the population divisor, so you must write ddof=1 whenever you compute a standard deviation by hand for a t-test. Second, scipy.stats.ttest_ind defaults to equal_var=True, which is Student's test. R defaults to Welch. That single difference is why the same data can give two different p-values in the two languages.
Python 3, NumPy + SciPy + Matplotlib
# T-Score Calculator in Python
# Runs one-sample, two-sample (Welch and Student) and paired t-tests,
# converts to the T = 50 + 10z scale, and draws one summary figure.
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# ---- 1. Your data -----------------------------------------------------
g1  = np.array([52, 48, 55, 61, 47, 58, 50, 63, 45, 56], dtype=float)
g2  = np.array([71, 68, 75, 66, 73, 70, 69, 77, 64, 72], dtype=float)
mu0 = 50.0          # hypothesised mean for the one-sample test
alpha = 0.05

# ---- 2. One-sample t-test ---------------------------------------------
n1   = g1.size
m1   = g1.mean()
s1   = g1.std(ddof=1)          # ddof=1 is essential: sample SD
se1  = s1 / np.sqrt(n1)
t1   = (m1 - mu0) / se1
df1  = n1 - 1
p1   = 2 * stats.t.sf(abs(t1), df1)
tcrit1 = stats.t.ppf(1 - alpha/2, df1)
ci1  = (m1 - tcrit1*se1, m1 + tcrit1*se1)
d1   = (m1 - mu0) / s1         # Cohen's d

# ---- 3. Two-sample t-tests --------------------------------------------
welch   = stats.ttest_ind(g1, g2, equal_var=False)
student = stats.ttest_ind(g1, g2, equal_var=True)

n2, m2, s2 = g2.size, g2.mean(), g2.std(ddof=1)
sp = np.sqrt(((n1-1)*s1**2 + (n2-1)*s2**2) / (n1+n2-2))
d_two = (m1 - m2) / sp
g_hedges = d_two * (1 - 3/(4*(n1+n2) - 9))

# ---- 4. Paired t-test --------------------------------------------------
before = np.array([128,135,142,119,151,133,126,147,138,130], dtype=float)
after  = np.array([121,128,133,115,140,127,122,136,129,124], dtype=float)
paired = stats.ttest_rel(before, after)
diffs  = before - after

# ---- 5. The OTHER t-score: the T = 50 + 10z scale ---------------------
raw, ref_mean, ref_sd = 68.0, 50.0, 12.0
z_scale = (raw - ref_mean) / ref_sd
T_scale = 50 + 10*z_scale
pct     = stats.norm.cdf(z_scale) * 100

print(f"ONE-SAMPLE  t({df1}) = {t1:.4f}, p = {p1:.6f}, d = {d1:.4f}")
print(f"            mean {m1:.4f}, SD {s1:.4f}, SE {se1:.4f}, "
      f"{int((1-alpha)*100)}% CI [{ci1[0]:.4f}, {ci1[1]:.4f}]")
print(f"WELCH       t({welch.df:.4f}) = {welch.statistic:.4f}, p = {welch.pvalue:.3e}")
print(f"STUDENT     t({student.df:.0f}) = {student.statistic:.4f}, p = {student.pvalue:.3e}")
print(f"            Cohen's d = {d_two:.4f}, Hedges' g = {g_hedges:.4f}")
print(f"PAIRED      t({paired.df}) = {paired.statistic:.4f}, p = {paired.pvalue:.3e}, "
      f"mean diff {diffs.mean():.4f}")
print(f"T-SCALE     raw {raw:g} -> z = {z_scale:.4f} -> T = {T_scale:.2f} "
      f"({pct:.2f}th percentile)")

# ---- 6. One figure -----------------------------------------------------
fig, ax = plt.subplots(figsize=(9, 5))
grid = np.linspace(-5, 5, 600)
ax.plot(grid, stats.t.pdf(grid, df1), color="#4338ca", lw=2.2,
        label=f"t-distribution, df = {df1}")
ax.plot(grid, stats.norm.pdf(grid), color="#94a3b8", lw=1.5, ls="--",
        label="normal for comparison")
ax.fill_between(grid, stats.t.pdf(grid, df1), where=np.abs(grid) >= abs(t1),
                color="#f59e0b", alpha=.40, label=f"p = {p1:.4f}")
ax.axvline(t1, color="#be185d", lw=2.4, label=f"observed t = {t1:.3f}")
for c in (-tcrit1, tcrit1):
    ax.axvline(c, color="#b45309", ls=":", lw=1.4)
ax.text(tcrit1, ax.get_ylim()[1]*.92, f" critical {tcrit1:.3f}",
        fontsize=9, color="#b45309")
ax.set_xlabel("t value")
ax.set_ylabel("density")
ax.set_title(f"One-Sample t-Test   n={n1}, mean={m1:.2f}, SD={s1:.2f}, "
             f"tested against {mu0:g}")
ax.legend(frameon=False, fontsize=9)
ax.spines[["top", "right"]].set_visible(False)
fig.tight_layout()
fig.savefig("t_test_summary.png", dpi=150)
plt.show()

Actual output from running the script

ONE-SAMPLE  t(9) = 1.8155, p = 0.102838, d = 0.5741
            mean 53.5000, SD 6.0964, SE 1.9279, 95% CI [49.1389, 57.8611]
WELCH       t(15.4903) = -7.3843, p = 1.876e-06
STUDENT     t(18) = -7.3843, p = 7.519e-07
            Cohen's d = -3.3024, Hedges' g = -3.1628
PAIRED      t(9) = 9.1864, p = 7.217e-06, mean diff 7.4000
T-SCALE     raw 68 -> z = 1.5000 -> T = 65.00 (93.32th percentile)

Line-by-line explanation

  • Block 1 is the only part you edit. Setting dtype=float avoids integer surprises later.
  • Block 2 computes the one-sample test from first principles rather than calling ttest_1samp, so every intermediate quantity is visible. stats.t.sf is the survival function, which is 1 - cdf computed accurately in the far tail, and doubling it gives the two-tailed p-value.
  • Block 3 runs both two-sample variants. Note that welch.df is 15.4903, a fractional value produced by the Welch-Satterthwaite equation, while Student's is a whole 18. Hedges' g applies the small-sample correction to Cohen's d, and here it pulls the estimate from −3.3024 down to −3.1628.
  • Block 4 runs the paired test with ttest_rel. The name means "related samples". Passing paired data to ttest_ind instead would be a genuine error, not a conservative choice.
  • Block 5 handles the unrelated T = 50 + 10z scale, which uses the normal distribution rather than the t-distribution. It is included here purely so the two never get mixed up.
  • Block 6 draws a single figure with the t-distribution, the normal dashed behind it so the heavier tails are visible, the shaded p-value region, the observed t and the critical values.

Useful one-liners

TaskPython
One-sample t-teststats.ttest_1samp(x, 50)
Two-sample, Welchstats.ttest_ind(x, y, equal_var=False)
Two-sample, Student (the default)stats.ttest_ind(x, y)
Pairedstats.ttest_rel(x, y)
One-tailedstats.ttest_ind(x, y, alternative='greater')
From summary statistics onlystats.ttest_ind_from_stats(m1,s1,n1,m2,s2,n2)
Confidence interval (SciPy 1.10+)stats.ttest_1samp(x,50).confidence_interval()
p from t2 * stats.t.sf(abs(t), df)
Critical tstats.t.ppf(0.975, df)
Sample SDx.std(ddof=1)
Check normalitystats.shapiro(x)
Non-parametric alternativesstats.mannwhitneyu(x,y), stats.wilcoxon(x,y)
Power analysisstatsmodels.stats.power.TTestIndPower().solve_power(...)
Pandas group comparisonstats.ttest_ind(*[g.values for _,g in df.groupby('grp')['v']])
T = 50 + 10z50 + 10*stats.zscore(x, ddof=1)
Reproducibility note. If you are comparing a Python result against R or SPSS and they disagree, check equal_var first. It accounts for the overwhelming majority of such discrepancies, and the difference is entirely in the degrees of freedom.

📋 11. Reference Tables

11.1 Critical values of t, two-tailed

Find your degrees of freedom down the left, then read across to your alpha. If your |t| exceeds the value in the cell, the result is significant at that level. The bottom row is the normal distribution, which is where t converges as df grows.

df0.20.10.050.020.010.0020.001
13.07776.313812.706231.820563.6567318.309636.619
21.88562.92004.30276.96469.924822.327131.5991
31.63772.35343.18244.54075.840910.214512.9240
41.53322.13182.77643.74694.60417.17328.6103
51.47592.01502.57063.36494.03215.89346.8688
61.43981.94322.44693.14273.70745.20765.9588
71.41491.89462.36462.99803.49954.78535.4079
81.39681.85952.30602.89653.35544.50085.0413
91.38301.83312.26222.82143.24984.29684.7809
101.37221.81252.22812.76383.16934.14374.5869
111.36341.79592.20102.71813.10584.02474.4370
121.35621.78232.17882.68103.05453.92964.3178
131.35021.77092.16042.65033.01233.85204.2208
141.34501.76132.14482.62452.97683.78744.1405
151.34061.75312.13142.60252.94673.73284.0728
161.33681.74592.11992.58352.92083.68624.0150
171.33341.73962.10982.56692.89823.64583.9651
181.33041.73412.10092.55242.87843.61053.9216
191.32771.72912.09302.53952.86093.57943.8834
201.32531.72472.08602.52802.84533.55183.8495
211.32321.72072.07962.51762.83143.52723.8193
221.32121.71712.07392.50832.81883.50503.7921
231.31951.71392.06872.49992.80733.48503.7676
241.31781.71092.06392.49222.79693.46683.7454
251.31631.70812.05952.48512.78743.45023.7251
261.31501.70562.05552.47862.77873.43503.7066
271.31371.70332.05182.47272.77073.42103.6896
281.31251.70112.04842.46712.76333.40823.6739
291.31141.69912.04522.46202.75643.39623.6594
301.31041.69732.04232.45732.75003.38523.6460
351.30621.68962.03012.43772.72383.34003.5911
401.30311.68392.02112.42332.70453.30693.5510
451.30061.67942.01412.41212.68963.28153.5203
501.29871.67592.00862.40332.67783.26143.4960
601.29581.67062.00032.39012.66033.23173.4602
701.29381.66691.99442.38082.64793.21083.4350
801.29221.66411.99012.37392.63873.19533.4163
901.29101.66201.98672.36852.63163.18333.4019
1001.29011.66021.98402.36422.62593.17373.3905
1201.28861.65771.97992.35782.61743.15953.3735
1501.28721.65511.97592.35152.60903.14553.3566
2001.28581.65251.97192.34512.60063.13153.3398
3001.28441.64991.96792.33882.59233.11763.3233
5001.28321.64791.96472.33382.58573.10663.3101
10001.28241.64641.96232.33012.58083.09843.3003
∞ (z)1.28161.64491.96002.32632.57583.09023.2905
The three you should recognise on sight. 12.706 at df = 1, 2.228 at df = 10, and 1.960 at df = infinity. If a paper reports a critical value of 1.96 with a small sample, someone used z when they should have used t.

11.2 Critical values of t, one-tailed

Same table for a directional hypothesis. Note that the one-tailed value at alpha 0.025 equals the two-tailed value at alpha 0.05, which is the arithmetic behind the warning about switching tails after seeing your data.

df0.10.050.0250.010.0050.0010.0005
13.07776.313812.706231.820563.6567318.309636.619
21.88562.92004.30276.96469.924822.327131.5991
31.63772.35343.18244.54075.840910.214512.9240
41.53322.13182.77643.74694.60417.17328.6103
51.47592.01502.57063.36494.03215.89346.8688
61.43981.94322.44693.14273.70745.20765.9588
71.41491.89462.36462.99803.49954.78535.4079
81.39681.85952.30602.89653.35544.50085.0413
91.38301.83312.26222.82143.24984.29684.7809
101.37221.81252.22812.76383.16934.14374.5869
111.36341.79592.20102.71813.10584.02474.4370
121.35621.78232.17882.68103.05453.92964.3178
131.35021.77092.16042.65033.01233.85204.2208
141.34501.76132.14482.62452.97683.78744.1405
151.34061.75312.13142.60252.94673.73284.0728
161.33681.74592.11992.58352.92083.68624.0150
171.33341.73962.10982.56692.89823.64583.9651
181.33041.73412.10092.55242.87843.61053.9216
191.32771.72912.09302.53952.86093.57943.8834
201.32531.72472.08602.52802.84533.55183.8495
211.32321.72072.07962.51762.83143.52723.8193
221.32121.71712.07392.50832.81883.50503.7921
231.31951.71392.06872.49992.80733.48503.7676
241.31781.71092.06392.49222.79693.46683.7454
251.31631.70812.05952.48512.78743.45023.7251
261.31501.70562.05552.47862.77873.43503.7066
271.31371.70332.05182.47272.77073.42103.6896
281.31251.70112.04842.46712.76333.40823.6739
291.31141.69912.04522.46202.75643.39623.6594
301.31041.69732.04232.45732.75003.38523.6460
351.30621.68962.03012.43772.72383.34003.5911
401.30311.68392.02112.42332.70453.30693.5510
451.30061.67942.01412.41212.68963.28153.5203
501.29871.67592.00862.40332.67783.26143.4960
601.29581.67062.00032.39012.66033.23173.4602
701.29381.66691.99442.38082.64793.21083.4350
801.29221.66411.99012.37392.63873.19533.4163
901.29101.66201.98672.36852.63163.18333.4019
1001.29011.66021.98402.36422.62593.17373.3905
1201.28861.65771.97992.35782.61743.15953.3735
1501.28721.65511.97592.35152.60903.14553.3566
2001.28581.65251.97192.34512.60063.13153.3398
3001.28441.64991.96792.33882.59233.11763.3233
5001.28321.64791.96472.33382.58573.10663.3101
10001.28241.64641.96232.33012.58083.09843.3003
∞ (z)1.28161.64491.96002.32632.57583.09023.2905

11.3 How fast t converges on z

This is the table that answers "when can I just use z?". The difference is 15% at df = 5, under 3% by df = 30, and under 1% by df = 100. There is never a penalty for using t, so the honest answer is: always use t when you estimated the standard deviation.

dfCritical t (5%, two-tailed)Critical zDifferenceRelative
112.70621.9600+10.7462+548.29%
24.30271.9600+2.3427+119.53%
33.18241.9600+1.2225+62.37%
52.57061.9600+0.6106+31.15%
102.22811.9600+0.2682+13.68%
152.13141.9600+0.1715+8.75%
202.08601.9600+0.1260+6.43%
252.05951.9600+0.0996+5.08%
302.04231.9600+0.0823+4.20%
402.02111.9600+0.0611+3.12%
502.00861.9600+0.0486+2.48%
602.00031.9600+0.0403+2.06%
1001.98401.9600+0.0240+1.22%
2001.97191.9600+0.0119+0.61%
5001.96471.9600+0.0048+0.24%
10001.96231.9600+0.0024+0.12%

11.4 The same t gives very different p-values

Read across any row to see how much the degrees of freedom matter. A t of 2.5 is not significant at df = 3 (p = 0.088) but is at df = 20 (p = 0.021). This is why reporting t without df is meaningless.

|t|df 3df 5df 10df 20df 30df 60df 120z (df ∞)
1.00.39100.36320.34090.32930.32530.32130.31930.3173
1.50.23060.19390.16450.14920.14410.13890.13620.1336
2.00.13930.10190.07340.05930.05460.05000.04780.0455
2.50.08770.05450.03140.02120.01810.01520.01380.0124
3.00.05770.03010.01330.00710.00540.00390.00330.0027
3.50.03950.01730.00570.00230.00150.00090.00070.0005

11.5 The T = 50 + 10z scale, full conversion table

Every standardised score system in this table is the same z-score wearing different clothes. The clinical bands are the conventions used across the MMPI, BASC and ASEBA families; your specific test manual takes precedence.

T-scorezPercentileIQ scale
M 100, SD 15
Scaled
M 10, SD 3
StanineStenNCETypical clinical band
20-3.00.1355.01.011-13.2Low
25-2.50.6262.52.511-2.6Low
30-2.02.2870.04.0127.9Low
35-1.56.6877.55.52218.4Low
40-1.015.8785.07.03428.9Low
45-0.530.8592.58.54439.5Average
50+0.050.00100.010.05650.0Average
55+0.569.15107.511.56660.5Average
60+1.084.13115.013.07871.1At-risk / elevated
65+1.593.32122.514.58881.6Clinically significant
70+2.097.72130.016.091092.1Clinically significant, marked
75+2.599.38137.517.5910102.7Clinically significant, marked
80+3.099.87145.019.0910113.2Clinically significant, marked
85+3.599.98152.520.5910123.7Clinically significant, marked

Conversion formulas: z = (T − 50) ÷ 10, IQ = 100 + 15z, Wechsler scaled = 10 + 3z, stanine = 5 + 2z rounded and clipped to 1-9, sten = 5.5 + 2z rounded and clipped to 1-10, NCE = 50 + 21.06z.

11.6 Statistical power and the sample size you need

Power is the probability of detecting an effect that is really there. The right-hand column is the number you should look at before collecting data, not after. These figures are for a two-sample test at alpha 0.05, two-tailed.

Cohen's dn=10
per group
n=20n=30n=50n=100n=200n needed for
80% power
0.27.1%9.5%11.9%16.8%29.1%51.4%394
0.518.5%33.8%47.8%69.7%94.0%99.9%7470
0.839.5%69.3%86.1%97.7%100.0%100.0%2107
1.056.2%86.9%96.8%99.9%100.0%nan%2643
1.271.8%95.9%99.5%100.0%100.0%nan%1250
The uncomfortable implication. Detecting a small effect (d = 0.2) at 80% power needs 394 participants per group. Most published studies with n = 20 per group have about 33% power for a medium effect, which means two thirds of real effects of that size would be missed entirely. A non-significant result from a small study is usually uninformative rather than negative.

11.7 Bone density T-score thresholds (WHO)

T-scoreWHO categoryPercentile of young adultsTypical interpretation
≥ −1.0Normal16th and aboveBone density within the expected range for a healthy young adult
−1.0 to −2.5Osteopenia (low bone mass)1st to 16thBelow normal but not osteoporosis. Monitoring and lifestyle measures usually discussed
≤ −2.5OsteoporosisBelow the 1stMeets the WHO diagnostic definition
≤ −2.5 with a fractureSevere / established osteoporosisBelow the 1stOsteoporosis plus one or more fragility fractures

Defined for the lumbar spine, total hip and femoral neck. The Z-score, which compares against age-matched and sex-matched peers rather than young adults, is used instead for premenopausal women, men under 50 and children, where a Z below −2.0 prompts investigation for secondary causes.

11.8 Which test do you actually need?

Your situationTestDegrees of freedomNon-parametric alternative
One sample against a known valueOne-sample t-testn − 1Wilcoxon signed-rank
Two independent groupsWelch's t-testWelch-SatterthwaiteMann-Whitney U
Two independent groups, equal variances knownStudent's t-testn₁ + n₂ − 2Mann-Whitney U
Before and after on the same subjectsPaired t-testpairs − 1Wilcoxon signed-rank
Three or more groupsOne-way ANOVAk−1 and N−kKruskal-Wallis
Population SD genuinely knownz-testnone-
Proportions rather than meansChi-square or a proportions testvariesFisher's exact
A score against published normsNot a test. Use the T = 50 + 10z scalenone-

11.9 Effect size benchmarks

Cohen's dLabelOverlap between the two distributionsProbability a random case from group 1 exceeds one from group 2
0.0None100%50.0%
0.2Small85%55.6%
0.5Medium67%63.8%
0.8Large53%71.4%
1.2Very large38%80.0%
2.0Huge19%92.1%

Cohen was explicit that these labels were rough defaults for fields lacking their own benchmarks, and he later regretted how rigidly they were applied. Where your discipline has established effect sizes for comparable work, use those instead.

11.10 The same calculation in five packages

TaskExcelRPythonSPSSStata
One-sampleT.TEST via workaroundt.test(x,mu=50)ttest_1samp(x,50)T-TEST /TESTVALttest x==50
Two-sample, WelchT.TEST(a,b,2,3)t.test(x,y)ttest_ind(x,y,equal_var=False)T-TEST (reads both rows)ttest x, by(g) welch
Two-sample, StudentT.TEST(a,b,2,2)t.test(x,y,var.equal=TRUE)ttest_ind(x,y)T-TEST GROUPSttest x, by(g)
PairedT.TEST(a,b,2,1)t.test(x,y,paired=TRUE)ttest_rel(x,y)T-TEST PAIRSttest x==y
Critical tT.INV.2T(0.05,df)qt(0.975,df)stats.t.ppf(.975,df)IDF.T(.975,df)invttail(df,.025)
p from tT.DIST.2T(ABS(t),df)2*pt(-abs(t),df)2*stats.t.sf(abs(t),df)2*(1-CDF.T(ABS(t),df))2*ttail(df,abs(t))
Two-sample defaultyou chooseWelchStudentreports bothStudent
Read the last row twice. R defaults to Welch, while SciPy and Stata default to Student. Running the same data through R and Python without setting equal_var will give you two different p-values and a confusing afternoon.

💡 12. Eight Worked Examples

Every number below was computed with the calculator on this page and cross-checked against SciPy. Each example has its own colour and its own figure. The first six are t-tests; the last two are the other two things called a T-score, included so the difference is unmistakable.

1📝 Example 1, One-Sample t-Test

Data: 52, 48, 55, 61, 47, 58, 50, 63, 45, 56, 54, 49  ·  tested against μ₀ = 50

-5-4-3-2-10+1+2+3+4+5crit 2.201t = 1.935Exam marks vs a pass mark of 50, n = 12p = 0.0792, not significant
Figure 1. The t-distribution for these degrees of freedom (solid) against the standard normal (dashed), with the shaded p-value region, the observed statistic and the critical values.
n12
Mean53.1667
SD5.6702
Standard error1.6369
t-statistic1.9346
df11
p (two-tailed)0.0792
Critical t at 0.05±2.2010
95% CI49.5640 to 56.7694
Cohen's d0.5585

Reading it: The class averaged 53.17 against a pass mark of 50, a gap of 3.17. But the standard error is 1.64, so t = 1.935 on 11 degrees of freedom, and p = 0.079 does not clear the 5% bar. The critical value at df = 11 is 2.201, marked as the dashed line, and the observed t falls short of it. Notice the confidence interval, 49.56 to 56.77, includes 50: the interval and the p-value always agree.

2⚖ Example 2, Two-Sample t-Test, Welch vs Student

Data: Site A: 52, 48, 55, 61, 47, 58, 50, 63, 45, 56
Site B: 71, 68, 75, 66, 73, 70, 69, 77, 64, 72

-7-5-3-1+1+3+5+7crit 2.126t = -7.384Two sites compared, n = 10 eachWelch df = 15.49
Figure 2. The t-distribution for these degrees of freedom (solid) against the standard normal (dashed), with the shaded p-value region, the observed statistic and the critical values.
Site A mean (SD)53.5000 (6.0964)
Site B mean (SD)70.5000 (3.9791)
Difference-17.0000
Welch t-7.3843
Welch df15.4903
Welch p1.876e-06
Student t-7.3843
Student df18
Student p7.519e-07
Variance ratio2.3474
Cohen's d-3.3024

Reading it: The two sites differ by 17 points and the result is overwhelming either way. What this example shows is the mechanics: because the sample sizes are equal, t is identical at -7.3843 for both methods, but the degrees of freedom differ, 15.49 for Welch against 18 for Student. That alone changes the p-value by a factor of about 2.5. When sample sizes are unequal too, t itself changes.

3🔁 Example 3, Paired t-Test, and Why Pairing Matters

Data: Before: 128, 135, 142, 119, 151, 133, 126, 147, 138, 130
After: 121, 128, 133, 115, 140, 127, 122, 136, 129, 124

-9-7-5-3-1+1+3+5+7+9crit 2.262t = 9.186Blood pressure before and after, 10 patientsp = 7.22e-06
Figure 3. The t-distribution for these degrees of freedom (solid) against the standard normal (dashed), with the shaded p-value region, the observed statistic and the critical values.
Mean difference7.4000
SD of the differences2.5473
Standard error0.8055
Paired t9.1864
df9
Paired p7.217e-06
95% CI for the change5.5778 to 9.2222
Cohen's d2.9050
If wrongly run unpairedt = 1.8929, p = 0.0746

Reading it: Every patient dropped, by between 4 and 11 points. The paired test gives t = 9.19 and p = 7.2e-06. The last row is the lesson: running an independent two-sample test on exactly the same numbers gives t = 1.89 and p = 0.075, nowhere near significance. Pairing removes the large between-patient variation, and throwing it away costs you the entire result.

4🚨 Example 4, When Welch and Student Really Disagree

Data: Control: 20, 21, 19, 22, 20, 21, 19, 20, 21, 20
Treatment: 25, 12, 38, 8, 31, 19, 44, 6, 28, 15

-5-4-3-2-10+1+2+3+4+5crit 2.258t = -0.567Unequal variances, n = 10 eachvariance ratio 182:1
Figure 4. The t-distribution for these degrees of freedom (solid) against the standard normal (dashed), with the shaded p-value region, the observed statistic and the critical values.
Control mean (SD)20.3000 (0.9487)
Treatment mean (SD)22.6000 (12.7906)
Variance ratio181.78
Welch t-0.5671
Welch df9.0990
Welch p0.5844
Student t-0.5671
Student df18
Student p0.5777

Reading it: The two group means are almost identical, but the treatment group is wildly more variable: a variance ratio of 182 to 1. Welch responds by collapsing the degrees of freedom from 18 to 9.10, because effectively only the small noisy group carries information. Neither test is significant here, but this is the configuration where Student’s pooled test becomes unreliable, and with unequal sample sizes on top it can produce false positives well above the nominal 5%.

5📏 Example 5, A Small Sample and the Price You Pay

Data: 104, 97, 111, 99, 108, 102  ·  tested against μ₀ = 100

-5-4-3-2-10+1+2+3+4+5crit 2.571t = 1.612n = 6, tested against 100critical value 2.571
Figure 5. The t-distribution for these degrees of freedom (solid) against the standard normal (dashed), with the shaded p-value region, the observed statistic and the critical values.
n6
Mean103.5000
SD5.3198
Standard error2.1718
t-statistic1.6116
df5
p (two-tailed)0.1680
Critical t at 0.05±2.5706
Critical t if df were 30±2.0423
95% CI97.9172 to 109.0828
Cohen's d0.6579

Reading it: With five degrees of freedom the critical value is 2.571, far out in the tail, compared with 2.042 at df = 30. The effect here is a respectable d = 0.66, but n = 6 simply cannot deliver the precision needed, and the confidence interval spans nearly 12 units. The heavier tails of the t-distribution are clearly visible against the dashed normal curve in the figure. Small samples are not merely less convincing, they are held to a much higher numerical bar.

6📊 Example 6, Significant but Meaningless

Data: Summary statistics only: n = 5,000, mean = 50.30, SD = 5.00, tested against μ₀ = 50. Enter these in the "From summary stats" tab to reproduce it.

-5-4-3-2-10+1+2+3+4+5crit 1.960t = 4.243n = 5,000, a trivially small effectCohen's d = 0.060
Figure 6. At df = 4,999 the t-distribution is indistinguishable from the normal, and the tiny shaded region is the p-value.
n5,000
Mean50.3000
SD5.0000
Difference from 500.3000
Standard error0.0707
t-statistic4.2426
df4,999
p (two-tailed)2.25e-05
Cohen's d0.0600 (negligible)
95% CI50.1614 to 50.4386
Same effect at n = 30t = 0.329, p = 0.745

Reading it: The mean differs from 50 by just 0.30 on a scale whose standard deviation is 5.0. That is an effect size of 0.060, which Cohen would call negligible, and no practitioner would care about. Yet p = 2.2e-05, comfortably significant, purely because n = 5,000 shrinks the standard error to 0.0707. The last row makes the point directly: the exact same effect in a sample of 30 gives p = 0.745 and would be dismissed. This is the single most important caveat about p-values, and the reason the effect size and confidence interval belong in every write-up.

7🧠 Example 7, The Other T-Score, T = 50 + 10z

Data: A raw questionnaire score of 68, against published norms with a mean of 50 and an SD of 12

T 10z -4T 20z -3T 30z -2T 40z -1T 50z +0T 60z +1T 70z +2T 80z +3T 90z +4T 60 / T 65T = 65.0Psychometric T-score scale, mean 50 and SD 1093.3th percentile
Figure 7. The normal curve on the T-score scale, with the conventional T = 60 and T = 65 thresholds marked.
Raw score68
Reference mean50
Reference SD12
Z-score1.5000
T-score65.00
Percentile93.32%
IQ-scale equivalent122.5
Wechsler scaled score14.5
Stanine8
Sten8
NCE81.6
Clinical bandClinically significant

Reading it: This is not a hypothesis test and has no p-value or degrees of freedom. It is a position on a scale. A raw score of 68 is 1.5 reference standard deviations above the norm mean, which the T scale expresses as 65, the conventional clinical threshold on instruments in the MMPI, BASC and ASEBA families. Note the reference SD is 12 here while the T scale itself always uses 10: the raw SD rescales to z, and z rescales to T.

8🦴 Example 8, Bone Density T-Score (DXA)

Data: Measured BMD 0.780 g/cm², young adult reference mean 0.942 with SD 0.122, lumbar spine

T 10z -4T 20z -3T 30z -2T 40z -1T 50z +0T 60z +1T 70z +2T 80z +3T 90z +4T 60 / T 65T = 36.7DXA bone density T-score, lumbar spine9.2th percentile of young adults
Figure 8. The normal curve on the T-score scale, with the conventional T = 60 and T = 65 thresholds marked.
Measured BMD0.780 g/cm²
Young adult reference mean0.942 g/cm²
Young adult reference SD0.122 g/cm²
T-score-1.33
WHO categoryOsteopenia (low bone mass)
Percentile of young adults9.21%
Percent of young adult mean82.8%
Osteoporosis threshold-2.50

Reading it: A third meaning of "T-score" again, and a third set of arithmetic. There is no 50 + 10 rescaling here: the DXA T-score is a plain count of standard deviations below the healthy young adult mean, so -1.33 means 1.33 SD below. That falls between -1.0 and -2.5, the WHO band for osteopenia. Your report will also show a Z-score comparing you against your own age group; for premenopausal women, men under 50 and children that Z-score is the one to read. None of this is medical advice.

📋 13. Data Collection Protocol

Most t-test failures are design failures, not arithmetic ones. By the time you have numbers in a spreadsheet the important decisions have already been made. This is the protocol that keeps them defensible.

  1. Decide the test before you collect the data. One-sample, two-sample or paired is determined by your design, not by which gives the smaller p-value. Write it into the protocol.
  2. Do a power calculation and commit to a sample size. Table 11.6 gives the numbers: detecting a medium effect (d = 0.5) at 80% power needs 64 per group. Collecting 20 and hoping is how underpowered literatures are built.
  3. Fix alpha and the tail direction in advance. A one-tailed test is legitimate only when a result in the other direction would be treated exactly like no result at all. If you would report a surprise in the opposite direction, you need two tails.
  4. Never peek and then continue collecting. Checking the p-value partway through and stopping when it dips below 0.05 inflates the false positive rate to well over 20%. If you need interim analyses, use a sequential design with the alpha spending built in.
  5. Ensure the observations really are independent. Two measurements from the same person, two plants from the same pot, two readings from the same instrument run: none of these count as two independent observations. This is the assumption that no software will warn you about and that no sample size can repair.
  6. Randomise assignment where you can, and record how. A t-test compares groups, but only randomisation lets you attribute the difference to the treatment rather than to whatever determined group membership.
  7. For paired designs, keep the pairing explicit in the data file. One row per subject with both measurements side by side. Sorting the two columns independently at any point destroys the pairing silently and irreversibly.
  8. Use one consistent measurement protocol. Same instrument, same units, same conditions, same operator instructions. Switching mid-study inflates the variance and makes a real effect harder to detect.
  9. Record raw values, not rounded ones. Round only at the reporting stage. Rounding before computing an SD shifts the t-statistic in the second decimal.
  10. Log every exclusion when it happens, with a reason. Reviewers will compare your stated n against the number in your tables, and "we removed some outliers" is not a method.
  11. Plan what to do if the assumptions fail. Decide in advance that you will switch to Mann-Whitney or Wilcoxon if the data are badly skewed, rather than deciding after you have seen both p-values.
  12. Keep the raw file untouched. Do all cleaning in a script so that any reported number can be traced back to the original record.
The most damaging protocol failure. Running a t-test on every variable you measured and reporting the ones that came out significant. With 20 variables at alpha 0.05 you expect one false positive by chance alone. Either pre-register which comparison is primary, or correct for multiplicity and say that you did.

🎯 14. When to Use a t-Test, and When Not To

Use a t-test when

  • You are comparing one or two means and estimated the standard deviation from your data. This is the overwhelmingly common case, and it is exactly what Gosset designed the test for.
  • Your outcome is continuous on an interval or ratio scale: lengths, times, concentrations, scores built from many items.
  • The observations are independent within each group, or properly paired between them.
  • The data are roughly symmetric, or the sample is large enough for the central limit theorem to do the work, which is about 30 per group.
  • You want a confidence interval for a difference, not just a yes-or-no verdict. The t-test gives you both.

Do not use a t-test when

  • You have three or more groups. Running all pairwise t-tests inflates the false positive rate: with four groups that is six tests and about a 26% chance of at least one spurious result. Use ANOVA, then post-hoc comparisons with a correction.
  • Your outcome is a proportion or a count. Use a chi-square test, a proportions test, Fisher's exact test or a Poisson model.
  • Your outcome is ordinal. Likert items, rankings and grades have no meaningful mean. Use Mann-Whitney or an ordinal model.
  • The data are heavily skewed and the sample is small. Below about n = 15 per group, strong skew genuinely matters. Use Mann-Whitney or Wilcoxon, or transform first and say that you did.
  • Observations are clustered or repeated. Students within classes, measurements within patients, sites within regions. Use a mixed model, which is what those designs require.
  • You measured the same subjects at more than two time points. Repeated-measures ANOVA or a mixed model, not a series of paired t-tests.
  • You genuinely know the population standard deviation. Then a z-test is marginally more powerful, though the situation is rare outside textbooks.
  • You want to test whether two groups are equivalent. A non-significant t-test does not demonstrate equivalence. Use a TOST equivalence test with a pre-specified margin.

What to use instead

SituationBetter choiceWhy
Three or more groupsOne-way ANOVAControls the overall false positive rate across all comparisons
Skewed data, small sampleMann-Whitney U or Wilcoxon signed-rankMakes no normality assumption
Ordinal outcomeMann-Whitney UUses ranks, which ordinal data actually support
ProportionsChi-square or Fisher's exactDesigned for categorical outcomes
Clustered or repeated dataLinear mixed modelModels the dependence rather than ignoring it
More than two time pointsRepeated-measures ANOVA or a mixed modelAvoids multiplicity and uses all the data at once
Testing for equivalenceTOSTA non-significant result is not evidence of no difference
Unequal variancesWelch's t-testAlready built into this calculator, and the default in R
Outliers you cannot justify removingYuen's trimmed-mean t-test or a bootstrapRobust to a few extreme values
Very small samples with no distributional assumptionPermutation testExact, and makes no assumption beyond exchangeability

🔧 15. Troubleshooting

SymptomCauseFix
R and Python give different p-values on the same dataR defaults to Welch, SciPy defaults to StudentSet equal_var=False in Python or var.equal=TRUE in R
Your t is much smaller than expectedDivided by the standard deviation instead of the standard errorThe denominator is s divided by the square root of n
The tool refuses to runStandard deviation is zero, or n is 1A t-test needs at least two values that are not all identical
Paired test rejected the dataThe two columns have different lengthsPairing requires equal lengths in matching order. Remove incomplete pairs
Welch gives a fractional df like 15.49That is correct and expectedThe Welch-Satterthwaite formula rarely returns a whole number. Report it to two decimals
p is significant but the effect looks trivialLarge sample sizeReport Cohen's d and the confidence interval. See Example 6
p is not significant but the effect looks largeSmall sample, low powerReport the confidence interval, which will be wide. Do not claim there is no effect
Excel returns #NUM! from T.DIST.2TA negative t was passed inWrap it in ABS
Excel's T.INV.2T and T.INV disagreeThey answer different questionsT.INV.2T(0.05,9) = 2.2622, T.INV(0.05,9) = −1.8331
Your p-value halved unexpectedlyThe tail setting changed from two to oneChoose the tail before seeing the data and keep it
The confidence interval and the p-value seem to disagreeDifferent alpha, or a one-tailed p with a two-tailed intervalThey always agree when alpha and tails match
A T-score of 65 was reported as "significant"Confusing the T scale with the t-statisticT = 50 + 10z has no p-value. It is a percentile position
Bone density T-score does not match the reportDifferent reference database or measurement siteT-scores are manufacturer and site specific. Use the values printed on your report
Results changed after adding dataOptional stoppingFix the sample size in advance, or use a sequential design
t is negative and you expected positiveGroup order, or subtraction direction in a paired testThe sign follows your subtraction order. State the direction in words
SPSS reports two rows and you do not know which to useSPSS prints Student and Welch togetherRead the "equal variances not assumed" row, which is Welch

16. Assumptions and Limitations

What a t-test assumes, ranked by how much it matters

AssumptionHow much it mattersWhat happens if it failsHow to check
Independence of observationsCriticalP-values far too small. No sample size repairs itNot testable. It is a property of the design
Correct pairingCriticalWrong test entirely, in either directionDetermined by how the data were collected
Continuous outcomeHighThe mean is not meaningful for ordinal or categorical dataInspect the measurement scale
Approximate normalityModerate, falling as n growsInaccurate p-values below about n = 15. Largely harmless above n = 30Histogram, Q-Q plot, Shapiro-Wilk
Normality of the differences (paired only)ModerateThe raw columns may be skewed without harm; the differences must not bePlot the differences, not the columns
Equal variances (Student only)Low if you use WelchFalse positive rate can far exceed 5% with unequal nVariance ratio, or simply use Welch
No extreme outliersModerateThe mean and SD both shift, so t can move either wayBoxplot, or a z-score screen
Alpha and tail fixed in advanceCriticalThe p-value no longer means what it claimsYour protocol

Limitations worth stating in a write-up

  • A p-value is not a measure of importance. It confounds effect size with sample size, which is why Example 6 on this page is significant at p = 0.00002 with an effect size of 0.06.
  • A non-significant result is not evidence of no effect. It is the absence of evidence for one, and with a small sample that absence is nearly uninformative. Report the confidence interval so readers can see what remains possible.
  • The test compares means only. Two distributions can have identical means and differ enormously in spread, shape or skew. Example 4 on this page is exactly that situation.
  • Statistical significance says nothing about causation. That comes from the design, principally randomisation, not from the arithmetic.
  • Multiple testing is not handled. Each t-test carries its own alpha. Twenty of them carry a 64% chance of at least one false positive.
  • Cohen's benchmarks are conventions. He proposed them reluctantly for fields with no better anchors, and later regretted how rigidly they were applied.
  • The T = 50 + 10z scale carries measurement error. A change of two or three T-points is usually well inside the standard error of measurement and should not be read as a real change.
  • Bone density T-scores depend on the reference database. The same patient can get slightly different T-scores from different manufacturers' machines, which is why serial monitoring should stay on one scanner.
  • Post-hoc power is not informative. Computed from the observed effect it is a deterministic function of the p-value and adds nothing. Power calculations belong before data collection.

🏁 17. Conclusion

The word "t-score" points at three unrelated things, and sorting out which one you have is most of the battle. The t-statistic is an inferential test statistic, a signal-to-noise ratio that measures how many standard errors an observed effect sits from zero. The T = 50 + 10z scale is a psychometric convention, a rescaled z-score built so that clinicians can talk about a threshold of 65 rather than 1.5. The DXA T-score is a plain count of standard deviations below a healthy young adult's bone density, with no rescaling at all. They share a letter and nothing else, and the calculator on this page keeps them in separate tabs for exactly that reason.

If it is the statistic you want, the formula is a z-score with one substitution: divide by the standard error, s over the square root of n, not by the standard deviation. That single change is the most common arithmetic error in the whole procedure. Gosset's contribution in 1908 was to work out that when you estimate the standard deviation from the same small sample you are testing, the resulting statistic does not follow a normal curve but one with heavier tails, whose shape depends on the degrees of freedom.

Those degrees of freedom do more work than anything else in the output. A t of 2.5 is not a fixed quantity of evidence: it gives p = 0.088 at df = 3, p = 0.021 at df = 20 and p = 0.013 at df = 300. This is why reporting t without df is meaningless, and why the conventional format is t(df) = value. The critical value falls from 12.706 at df = 1 to 1.960 as df approaches infinity, and table 11.3 shows that convergence is essentially complete by df = 100.

For two independent groups, use Welch's version by default. It does not assume the variances are equal, it costs almost nothing when they happen to be, and it protects you when they are not, particularly with unequal sample sizes. R has made it the default for good reason, while SciPy and Stata have not, which is the single most common source of the "why do R and Python disagree" question. Do not run a preliminary variance test to decide between them; that two-stage procedure distorts the error rate. Just use Welch.

The two biggest interpretive traps sit at opposite ends of the sample size range. With a large sample, any non-zero difference becomes significant: Example 6 on this page reaches p = 0.00002 on an effect size of 0.06, which no practitioner would care about. With a small sample the opposite happens, and a real, substantial effect fails to clear a critical value that has been pushed far out into the tail. Detecting a medium effect at 80% power needs 64 observations per group, so most studies with 20 per group are running at roughly one-third power and will miss two real effects out of three. The remedy for both traps is the same: report the effect size and the confidence interval alongside the p-value, and treat the interval as the primary result. It tells you which effects the data are compatible with, which is almost always the question you actually had.

Finally, the assumptions are not equally important. Independence is critical and no software will warn you when it fails; it has to be handled in the design. Normality matters least, and less as n grows, though it does real work below about 15 per group and, for a paired test, applies to the differences rather than the raw columns. Equal variances matter only if you insisted on Student's test, which is a good argument for not insisting.

Get the design right, pick the test from the design rather than from the p-value, use Welch, report the interval and the effect size, and the t-test remains what it has been for over a century: the most useful single tool in applied statistics.

18. Frequently Asked Questions

What is a t-score in simple terms?
It depends which one you mean. The t-statistic is a signal-to-noise ratio: how many standard errors an observed effect sits from zero, used to get a p-value. The T = 50 + 10z scale is a standardised score with a mean of 50 and an SD of 10, used in psychological testing. A bone density T-score counts standard deviations below a healthy young adult's bone density. They share a letter and nothing else.
What is the formula for a t-score?
For a one-sample t-test, t = (x̄ − μ₀) ÷ (s ÷ √n), with df = n − 1. The denominator is the standard error, not the standard deviation. For the psychometric scale it is T = 50 + 10z, and for bone density it is T = (your BMD − young adult mean) ÷ young adult SD.
What is the difference between a t-test and a z-test?
A z-test uses a known population standard deviation and the normal distribution. A t-test uses an estimate from the sample and the t-distribution, which has heavier tails to account for that extra uncertainty. Since you almost never know the population SD, the t-test is almost always the right choice. The two converge as the sample grows: the critical value differs by 15% at df = 5 but under 1% by df = 100.
What are degrees of freedom and why do they matter?
They count how many values are genuinely free to vary. Once you have used the data to compute a mean, only n − 1 values can vary freely, which is why a one-sample t-test has df = n − 1. They matter because they set the shape of the distribution: the same t of 2.5 gives p = 0.088 at df = 3 but p = 0.021 at df = 20. Always report df alongside t.
Should I use Welch's or Student's t-test?
Welch, as a default. It does not assume equal variances, costs almost nothing when they are equal, and protects you when they are not, especially with unequal sample sizes where Student's test can have a false positive rate far above 5%. R uses Welch by default; SciPy and Stata use Student. Do not run a preliminary variance test to choose, because that two-stage procedure distorts the overall error rate.
Why do R and Python give me different p-values?
Because t.test(x,y) in R runs Welch by default, while scipy.stats.ttest_ind(x,y) runs Student by default. Set equal_var=False in Python or var.equal=TRUE in R to make them match. A second, smaller source is that np.std() defaults to ddof=0 while R's sd() always uses n − 1.
When should I use a paired t-test instead of a two-sample t-test?
Whenever the same subjects, items or matched units provide both measurements: before and after, left and right, twin pairs. The paired test analyses the differences, so between-subject variation cancels out and the test becomes far more sensitive. Example 3 on this page shows the same data giving p = 0.0000072 paired and p = 0.13 unpaired. Using the wrong one is a genuine error, not a conservative choice.
What is a good t-value?
There is no universal threshold, because it depends entirely on the degrees of freedom. At df = 5 you need |t| > 2.571 for significance at the 5% level; at df = 30 you need 2.042; at df = 100 you need 1.984. Look up your df in table 11.1 rather than memorising a single number. And a large t tells you the effect is detectable, not that it is important.
Can a t-value be negative?
Yes, and it simply reflects the direction of the subtraction. A negative t means the first mean is smaller than the second, or smaller than the hypothesised value. For a two-tailed test the sign is irrelevant to significance, since only the magnitude matters. Just be explicit in your write-up about which direction you subtracted.
What does the p-value actually mean?
It is the probability of observing a statistic at least this extreme if the null hypothesis were true. It is not the probability that the null is true, not the probability your result is a fluke, and not a measure of effect size. A p-value above your alpha means this sample could not distinguish the effect from zero, which is partly a statement about your study's power.
Why do I need to report an effect size as well as a p-value?
Because significance depends on both the effect and the sample size. Example 6 on this page has p = 0.00002 and a Cohen's d of 0.06, a difference no practitioner would care about, significant only because n = 5,000. The effect size does not change as you collect more data, which is exactly what makes it worth reporting. Cohen's rough benchmarks are 0.2 small, 0.5 medium and 0.8 large.
How many participants do I need for a t-test?
It depends on the effect size you want to be able to detect. For a two-sample test at 80% power and alpha 0.05: 394 per group for a small effect (d = 0.2), 64 per group for a medium effect (d = 0.5) and 26 per group for a large effect (d = 0.8). Table 11.6 gives the full picture. Do this calculation before collecting data, not after.
Does my data have to be normally distributed?
Approximately, and it matters much less than most people think. The central limit theorem means the sampling distribution of the mean approaches normality even when the raw data do not, so above about 30 per group the t-test is quite robust. Below about 15 it matters, and strong skew is a real problem. For a paired test the assumption applies to the differences, not the raw columns.
What should I do if my data are badly skewed?
With a large sample, usually nothing: the test is robust. With a small sample, use a non-parametric alternative, Mann-Whitney U for two independent groups or Wilcoxon signed-rank for paired data. You can also transform (a log transform often helps right-skewed data) or use a permutation test. Decide which route you will take before you see both p-values.
Can I use a t-test for three or more groups?
No. Running all pairwise comparisons inflates the false positive rate: with four groups that is six tests and about a 26% chance of at least one spurious result. Use a one-way ANOVA to test for any difference, then post-hoc comparisons with a correction such as Tukey's HSD.
What is a T-score of 65 on a psychological test?
It is 1.5 standard deviations above the normative mean, about the 93rd percentile, and on most instruments in the MMPI, BASC and ASEBA families it is the conventional threshold for clinical significance. T = 60 to 64 is usually flagged as at-risk or subclinical. These are conventions rather than universal rules, so your test manual takes precedence.
How do I convert a T-score to a percentile?
Convert to z first with z = (T − 50) ÷ 10, then read the percentile from the standard normal. T = 60 gives z = 1 and the 84th percentile; T = 65 gives z = 1.5 and the 93rd; T = 70 gives z = 2 and the 98th. Table 11.5 lists the full conversion alongside IQ, stanine, sten and NCE equivalents.
Is the T-score scale related to the t-distribution?
No, and this is the single most common confusion on the topic. T = 50 + 10z is a linear rescaling of a z-score and uses the normal distribution. It has no degrees of freedom and no p-value. The t-distribution is a sampling distribution used for hypothesis testing. The shared letter is a historical accident.
What does a bone density T-score of −2.5 mean?
It means your bone mineral density is 2.5 standard deviations below the mean for a healthy young adult, which meets the WHO definition of osteoporosis. Between −1.0 and −2.5 is osteopenia, and −1.0 or above is normal. Note that this T-score has no 50 + 10 rescaling: it is a plain count of standard deviations. A bone density result should be interpreted by your doctor alongside your other risk factors.
On a bone scan, should I read the T-score or the Z-score?
The T-score compares you against a healthy young adult and is what the WHO diagnostic categories use, which makes it the standard reading for postmenopausal women and men over 50. The Z-score compares you against people of your own age and sex, and is the appropriate one for premenopausal women, men under 50 and children. A Z-score below −2.0 suggests something beyond normal ageing and usually prompts investigation for secondary causes.

🔖 19. Cite This Tool

APA 7th
StatsUnlock. (2026). T-Score Calculator [Online tool]. https://statsunlock.com/t-score-calculator/
MLA 9th
"T-Score Calculator." StatsUnlock, 2026, statsunlock.com/t-score-calculator/.
Chicago
StatsUnlock. "T-Score Calculator." Accessed 2026. https://statsunlock.com/t-score-calculator/.
BibTeX
@misc{statsunlock_tscore, title={T-Score Calculator}, author={{StatsUnlock}}, year={2026}, url={https://statsunlock.com/t-score-calculator/}}

🔗 20. Related Calculators

📖 21. Glossary

TermMeaning
t-statisticAn observed effect divided by its standard error. A signal-to-noise ratio.
t-distributionStudent's distribution, the sampling distribution of the t-statistic. Heavier tails than the normal, converging on it as df grows.
StudentThe pseudonym of William Sealy Gosset, who published the distribution in 1908 while working at Guinness.
T-score scaleA standardised scale with mean 50 and SD 10, T = 50 + 10z. Unrelated to the t-distribution.
DXA T-scoreBone mineral density expressed as standard deviations from a healthy young adult mean, with no rescaling.
Degrees of freedom (df)The number of values free to vary. Sets the shape of the t-distribution.
Standard errors divided by the square root of n. The denominator of the t-statistic.
Standard deviationThe spread of individual observations. Not the denominator of t.
Null hypothesisThe proposition that there is no effect, which the test attempts to rule out.
p-valueThe probability of a statistic at least this extreme if the null hypothesis were true.
Alpha (α)The false positive rate you are willing to accept, fixed before the analysis. Usually 0.05.
Critical valueThe value of t that marks the boundary of the rejection region at a given alpha and df.
Two-tailed testTests for a difference in either direction. The default.
One-tailed testTests in one direction only, and must be chosen before seeing the data.
Confidence intervalThe range of values compatible with the data at a stated confidence level. More informative than a p-value.
Welch's t-testThe two-sample test that does not assume equal variances. The recommended default.
Welch-SatterthwaiteThe equation giving Welch's degrees of freedom, usually a fractional number.
Student's t-testThe two-sample test that pools the variances and assumes they are equal.
Pooled varianceA weighted average of two group variances, used by Student's test and by Cohen's d.
Paired t-testA one-sample t-test on the differences between matched measurements.
Cohen's dAn effect size: the difference expressed in standard deviation units. Independent of sample size.
Hedges' gCohen's d with a correction for small-sample upward bias.
Statistical powerThe probability of detecting an effect that is really there. Conventionally targeted at 80%.
Type I errorA false positive: rejecting a true null hypothesis.
Type II errorA false negative: failing to reject a false null hypothesis.
Central limit theoremThe result that sample means approach normality as n grows, whatever the shape of the raw data.
Optional stoppingChecking the p-value during collection and stopping when it looks good. Badly inflates false positives.
Mann-Whitney UThe rank-based alternative to a two-sample t-test.
Wilcoxon signed-rankThe rank-based alternative to a one-sample or paired t-test.
Stanine, sten, NCEOther standardised score scales, all linear rescalings of z.
OsteopeniaBone density between −1.0 and −2.5 on the DXA T-score scale.
OsteoporosisBone density at or below −2.5 on the DXA T-score scale (WHO, 1994).

📚 22. References

  1. Student [Gosset, W. S.] (1908). The probable error of a mean. Biometrika, 6(1), 1-25. doi.org/10.2307/2331554
  2. Welch, B. L. (1947). The generalization of Student's problem when several different population variances are involved. Biometrika, 34(1-2), 28-35. doi.org/10.1093/biomet/34.1-2.28
  3. Satterthwaite, F. E. (1946). An approximate distribution of estimates of variance components. Biometrics Bulletin, 2(6), 110-114. doi.org/10.2307/3002019
  4. Delacre, M., Lakens, D., & Leys, C. (2017). Why psychologists should by default use Welch's t-test instead of Student's t-test. International Review of Social Psychology, 30(1), 92-101. doi.org/10.5334/irsp.82
  5. Ruxton, G. D. (2006). The unequal variance t-test is an underused alternative to Student's t-test and the Mann-Whitney U test. Behavioral Ecology, 17(4), 688-690. doi.org/10.1093/beheco/ark016
  6. Zimmerman, D. W. (2004). A note on preliminary tests of equality of variances. British Journal of Mathematical and Statistical Psychology, 57(1), 173-181. doi.org/10.1348/000711004849222
  7. Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Lawrence Erlbaum. doi.org/10.4324/9780203771587
  8. Lakens, D. (2013). Calculating and reporting effect sizes to facilitate cumulative science. Frontiers in Psychology, 4, 863. doi.org/10.3389/fpsyg.2013.00863
  9. Hedges, L. V. (1981). Distribution theory for Glass's estimator of effect size. Journal of Educational Statistics, 6(2), 107-128. doi.org/10.3102/10769986006002107
  10. Wasserstein, R. L., & Lazar, N. A. (2016). The ASA statement on p-values: Context, process, and purpose. The American Statistician, 70(2), 129-133. doi.org/10.1080/00031305.2016.1154108
  11. Greenland, S., et al. (2016). Statistical tests, p-values, confidence intervals, and power: A guide to misinterpretations. European Journal of Epidemiology, 31, 337-350. doi.org/10.1007/s10654-016-0149-3
  12. Simmons, J. P., Nelson, L. D., & Simonsohn, U. (2011). False-positive psychology. Psychological Science, 22(11), 1359-1366. doi.org/10.1177/0956797611417632
  13. Button, K. S., et al. (2013). Power failure: Why small sample size undermines the reliability of neuroscience. Nature Reviews Neuroscience, 14, 365-376. doi.org/10.1038/nrn3475
  14. Hoenig, J. M., & Heisey, D. M. (2001). The abuse of power: The pervasive fallacy of power calculations for data analysis. The American Statistician, 55(1), 19-24. doi.org/10.1198/000313001300339897
  15. Lumley, T., Diehr, P., Emerson, S., & Chen, L. (2002). The importance of the normality assumption in large public health data sets. Annual Review of Public Health, 23, 151-169. doi.org/10.1146/annurev.publhealth.23.100901.140546
  16. Press, W. H., Teukolsky, S. A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical Recipes: The Art of Scientific Computing (3rd ed.). Cambridge University Press. numerical.recipes
  17. American Psychological Association (2020). Publication Manual of the American Psychological Association (7th ed.). apastyle.apa.org
  18. Kanis, J. A., et al. (2008). A reference standard for the description of osteoporosis. Bone, 42(3), 467-475. doi.org/10.1016/j.bone.2007.11.001
  19. World Health Organization (1994). Assessment of Fracture Risk and its Application to Screening for Postmenopausal Osteoporosis. WHO Technical Report Series 843. iris.who.int
  20. Virtanen, P., et al. (2020). SciPy 1.0: Fundamental algorithms for scientific computing in Python. Nature Methods, 17, 261-272. doi.org/10.1038/s41592-019-0686-2
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Important Plots & Charts

Most Popular