Skip to content

Statistics Calculator

Run t-tests, ANOVA with post-hoc comparisons, correlation and non-parametric tests on pasted or uploaded data, with effect sizes, confidence intervals, assumption checks, a descriptive table and a plot.

Try a worked example

Each loads real data and picks the matching test.

Step 1: Add your data

Wide = each column is a group. Long = one value column split by a label column.

Read as you type or paste.

Step 2: Choose a test

Add data in step 1 to run a test.

Method and references

What each test computes, and how to read it

Every statistic is computed in your browser from its standard definition. The Student t and central F tail probabilities come from jStat's incomplete beta function and the studentized range from jStat; the normal tail uses jStat's erfc up to |z| = 8 and an asymptotic series beyond that, and the χ² upper tail is computed by STEMKit itself with a continued fraction, so very small p-values are not rounded to zero. The independent-samples default is Welch's t-test, which does not assume equal variances, and every test reports an effect size and, where standard, a 95% confidence interval. Each result comes with a table of descriptive statistics, a plot of the data, and, for three or more groups, post-hoc pairwise comparisons. Assumptions are checked as you choose, and a suggestion appears when another test would suit the data better; the page never changes the test for you.

The tests

TestUse whenStatistic & df
Welch's t-test (default)Two independent groups; variances may differ (the common real-world case).t with Welch–Satterthwaite df
Student's pooled t-testTwo independent groups with equal variances (confirm with Levene).t, df = n₁+n₂−2
Mann–Whitney UTwo independent groups when normality fails.U; exact p, or the tie-corrected normal approximation
Paired t-testTwo measurements on the same units (before/after).t on differences, df = n−1
Wilcoxon signed-rankPaired data when the differences aren't normal.W; exact p, or the tie-corrected normal approximation
One-sample t-testOne set of values against a stated value μ₀: a certified concentration, a literature value, zero change.t = (x̄ − μ₀)/(s/√n), df = n−1
One-sample Wilcoxon signed-rankThe same question when the values are skewed; tests the median against μ₀.W on x − μ₀; exact p, or the tie-corrected normal approximation
One-way ANOVAThree or more independent groups with similar variances (also valid for 2, where F = t²). Followed by Tukey HSD.F, df = (k−1, N−k)
Welch's ANOVAThree or more independent groups whose variances differ. Followed by Games–Howell.F, df = (k−1, Welch df)
Kruskal–Wallis HThree or more independent groups that are skewed, ordinal or outlier-prone. Followed by Dunn's test.H (tie-corrected), χ² on k−1 df
Pearson correlationLinear association between two continuous variables.r, t = r√((n−2)/(1−r²))
Spearman rank correlationAny monotonic association, straight or curved, or when either variable is skewed.ρ on ranks, t on n−2 df

The Welch–Satterthwaite degrees of freedom are generally non-integer and smaller than the pooled df, which is the price of not assuming equal variances. For two groups the one-way ANOVA reduces exactly to the pooled t-test (F = t²), and Welch's ANOVA to Welch's t-test, useful internal checks. Welch's ANOVA weights each group by n/s² (Welch 1951). Kruskal–Wallis ranks all groups together, gives tied values their average rank and divides H by the tie correction C = 1 − Σ(t³ − t)/(N³ − N), as SciPy and R do; its p-value is the chi-squared approximation, rough with five or fewer values per group. Mann–Whitney and Wilcoxon choose their p-value as SciPy's default does. Mann–Whitney's is exact, from the distribution of U, when no values are tied and a group has 8 or fewer. The signed-rank tests drop zero differences, and their p is exact when there are 50 or fewer pairs (values, in the one-sample test) with no tied or zero differences, or 13 or fewer with some, counted then over every way of signing the differences. Otherwise both use the normal approximation, with the tie correction to its variance and no continuity correction. The result line says which. Spearman's ρ is Pearson's r computed on the ranks, which stays exact when there are ties.

Post-hoc comparisons

A significant ANOVA or Kruskal–Wallis test says the groups are not all alike; it does not say which differ. Each k-group test is followed by the pairwise comparison that matches its assumptions, adjusted so that the chance of any false positive across all pairs stays at 5%.

AfterComparisonHow it worksReports
One-way ANOVATukey HSD (Tukey–Kramer)q = |x̄ᵢ − x̄ⱼ| / √(MSW/2 × (1/nᵢ + 1/nⱼ)) against the studentized range for k means on N−k df; the pooled MSW assumes equal variances.Difference, simultaneous 95% CI, q, adjusted p
Welch's ANOVAGames–HowellEach pair keeps its own standard error and Welch df; |t| × √2 against the studentized range.Difference, simultaneous 95% CI, t, df, adjusted p
Kruskal–WallisDunn's test, Holm-adjustedMean ranks from the joint ranking, tie-corrected variance, two-sided normal p-values without continuity correction, then Holm's step-down adjustment across all pairs.Mean-rank difference, z, p, Holm p

Tukey's and Games–Howell's p-values and intervals are simultaneous: they already cover all k(k−1)/2 comparisons, so no further correction is applied, and an interval excludes zero exactly when its adjusted p is below .05. Holm's method sorts the p-values, multiplies the i-th smallest by (m − i + 1) and keeps them in order; it controls the family-wise error rate as Bonferroni does and is never less powerful. A difference in mean ranks has no confidence interval in the units of the data, so Dunn's table gives none. When the overall test is not significant the table still appears, with a warning, because the pairs are not evidence of a difference on their own. The studentized-range tail is accurate to about 10⁻⁹, so smaller adjusted p-values are written as "<1e-9" in the CSV.

How the suggestion is made

The "Which test?" box under the test picker reads the design from the test you chose (independent groups, paired, one group against a value, or two variables), takes the columns you selected, and runs the same assumption checks the results use. It then suggests a test with one line of reasoning. The rules are deliberately simple and stated here so you can disagree with them:

DesignNormal (or too small to check)Normality rejected
Two independent groupsWelch's t-test, whatever Levene's test saysMann–Whitney U
Three or more groupsOne-way ANOVA; Welch's ANOVA if Levene's test is significantKruskal–Wallis
PairedPaired t-test (normality of the differences)Wilcoxon signed-rank
One group against μ₀One-sample t-testOne-sample Wilcoxon
Two variablesPearson correlationSpearman rank correlation

Normality is D'Agostino–Pearson K² at α = .05 for each group, each variable, or the paired differences. A group of fewer than 8 values cannot be tested; it counts as no evidence against normality, and the reason says it was not checked rather than calling it normal. For two groups Welch's t is suggested even when variances look equal, because it costs little then and protects when they are not, and a pre-test for equal variances is a poor gatekeeper for the pooled test (Delacre, Lakens & Leys 2017). A suggestion is only applied when you press Use this test. Tests on normality lack power in small samples and flag trivial departures in large ones, so read the suggestion alongside the plot.

A caveat. Choosing the test from a normality test on the same data is common practice but contested: the two-stage procedure changes the error rates it is meant to protect, and a normality test has little power in small samples and flags trivial departures in large ones (Rochon, Gondan & Kieser, 2012; Zimmerman, 2004). Treat the suggestion as a starting point. Where you can, choose the test from the design and what is known about the measurement before looking at the data, and say which test you used and why.

Effect sizes & intervals

A p-value tells you whether an effect is distinguishable from zero, not how big it is. Each test therefore reports an effect size and, where standard, a confidence interval.

TestEffect sizeRough benchmarks
Independent tCohen's d (pooled SD); Hedges' g corrects small-sample bias0.2 small, 0.5 medium, 0.8 large
Paired tCohen's dz = d̄ / sdsame d benchmarks
One-sample tCohen's d = (x̄ − μ₀)/ssame d benchmarks
ANOVA and Welch's ANOVAη² (variance explained); ω² is less biased0.01 small, 0.06 medium, 0.14 large
Kruskal–Wallisε² = H/(N − 1), between 0 and 1read as η²
Pearsonr and r² (shared variance)|r|: 0.1 weak, 0.3 moderate, 0.5 strong
Spearmanρ itselfsame r benchmarks
Mann–Whitney / Wilcoxonrank-biserial r / z⁄√nsame r benchmarks

The 95% CI for the mean difference uses the same standard error and df as the test. The CI for Pearson's r uses the Fisher z-transformation, which stabilises the variance of r before building a symmetric interval and transforming back. Spearman's ρ uses the same transformation with the Bonett–Wright variance (1 + ρ²/2)/(n − 3), since 1/(n − 3) is too narrow for ρ. Welch's ANOVA reports the ordinary η², which describes the data rather than the test. Benchmarks (Cohen) are conventions, not laws: interpret them against your field's typical effects.

Assumption checks

Two automatic checks run with each comparison, and feed the "Which test?" suggestion.

CheckWhat it testsIf it fails
D'Agostino–Pearson K²Normality, via combined skewness and kurtosis tests (omnibus). Needs n ≥ 8.Use the rank-based counterpart: Mann–Whitney, Wilcoxon, Kruskal–Wallis or Spearman.
Levene's test (Brown–Forsythe, median-centred)Homogeneity of variance across groups.Prefer Welch's t over the pooled t, and Welch's ANOVA with Games–Howell over the classic ANOVA with Tukey.

The median-centred (Brown–Forsythe) form of Levene's test is more robust to non-normality than the original mean-centred version, which is why it's used here. Normality is assessed per group (or on the paired differences); with n < 8 the K² test is skipped and the tool says so rather than guessing. The rank-based tests make no normality assumption but are not assumption-free: the Wilcoxon tests assume the differences are roughly symmetric, and Kruskal–Wallis and Mann–Whitney compare medians only when the groups have similar shapes.

Tables, plots and APA-style reporting

The publication summary follows APA conventions: test name, descriptives, the test statistic with df, an exact p-value (or p < .001), a confidence interval, and an effect size with its interpretation. Example, from the built-in Two groups sample:

"Welch's independent-samples t-test (unequal variances) compared Control (M = 23.42, SD = 0.57, n = 10) and Treatment (M = 29.06, SD = 0.90, n = 10). The difference was statistically significant, t(15.22) = -16.819, p < .001, 95% CI [-6.35, -4.93], Cohen's d = -7.52 (large)."

Leading zeros are dropped from p-values (APA style: p = .032, not 0.032). p-values below .001 are reported as "< .001" rather than a spuriously precise figure. For three or more groups the summary also names the pairs that differ after correction, and those that do not.

Descriptive statistics. Each group gets n, mean, SD (n − 1), SEM = SD/√n, the 95% t interval of the mean, median, IQR, minimum and maximum; a paired design adds the differences as a row. Quartiles interpolate linearly between observations, NumPy's default and R's type 7 (Hyndman & Fan 1996); SPSS and Minitab use type 6, which can differ in small samples. Values are shown to one decimal more than the data carry. Copy CSV gives full precision with the interval and quartiles in their own columns; Markdown and LaTeX give the rounded table, the LaTeX with booktabs rules, proper minus signs and the booktabs package named in a comment.

The plot. For group comparisons, a box shows the median and quartiles and whiskers reach the furthest values within 1.5 × IQR of the box (Tukey 1977); every observation is drawn, spread sideways by a fixed pattern so the plot is the same each time, and joined by pair in a paired design; the diamond and bar beside each box are the mean and its 95% CI, so skew shows as a gap between the median and the mean. One-sample tests add a dashed line at μ₀. Correlations are a scatter with the ordinary least-squares line of y on x, drawn across the data; for Spearman the line is for reference only. The preview is the saved figure: press Style to set its size, fonts, colours and axes, then save it as PDF, PNG or SVG. The Python script under the results holds the data the test used, reruns the test with scipy (for the rank tests, with the method the page used, exact or approximate, passed explicitly), prints the result, and draws the same plot with matplotlib.

References

  1. Welch, B. L. (1947). The generalization of "Student's" problem when several different population variances are involved. Biometrika, 34(1–2), 28–35. doi:10.1093/biomet/34.1-2.28.
  2. Welch, B. L. (1951). On the comparison of several mean values: an alternative approach. Biometrika, 38(3–4), 330–336. doi:10.1093/biomet/38.3-4.330. (Welch's ANOVA.)
  3. Student [W. S. Gosset] (1908). The probable error of a mean. Biometrika, 6(1), 1–25.
  4. Fisher, R. A. (1925). Statistical Methods for Research Workers. Oliver & Boyd. (ANOVA, F-distribution, and the z-transformation of the correlation coefficient.)
  5. Tukey, J. W. (1949). Comparing individual means in the analysis of variance. Biometrics, 5(2), 99–114. doi:10.2307/3001913. Kramer, C. Y. (1956). Extension of multiple range tests to group means with unequal numbers of replications. Biometrics, 12(3), 307–310. doi:10.2307/3001469.
  6. Games, P. A., & Howell, J. F. (1976). Pairwise multiple comparison procedures with unequal n's and/or variances: a Monte Carlo study. Journal of Educational Statistics, 1(2), 113–125. doi:10.3102/10769986001002113.
  7. Copenhaver, M. D., & Holland, B. (1988). Computation of the distribution of the maximum studentized range statistic with application to multiple significance testing of simple effects. Journal of Statistical Computation and Simulation, 30(1), 1–15. (The studentized-range tail, as in R's ptukey and jStat.)
  8. Kruskal, W. H., & Wallis, W. A. (1952). Use of ranks in one-criterion variance analysis. Journal of the American Statistical Association, 47(260), 583–621. doi:10.1080/01621459.1952.10483441.
  9. Dunn, O. J. (1964). Multiple comparisons using rank sums. Technometrics, 6(3), 241–252. doi:10.1080/00401706.1964.10490181.
  10. Holm, S. (1979). A simple sequentially rejective multiple test procedure. Scandinavian Journal of Statistics, 6(2), 65–70.
  11. Spearman, C. (1904). The proof and measurement of association between two things. American Journal of Psychology, 15(1), 72–101. doi:10.2307/1412159.
  12. Bonett, D. G., & Wright, T. A. (2000). Sample size requirements for estimating Pearson, Kendall and Spearman correlations. Psychometrika, 65(1), 23–28. doi:10.1007/BF02294183.
  13. Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Lawrence Erlbaum. (Cohen's d, η², and the small/medium/large benchmarks.)
  14. Hedges, L. V. (1981). Distribution theory for Glass's estimator of effect size and related estimators. Journal of Educational Statistics, 6(2), 107–128. (Small-sample bias correction, "Hedges' g".)
  15. Tomczak, M., & Tomczak, E. (2014). The need to report effect size estimates revisited. Trends in Sport Sciences, 21(1), 19–25. (Epsilon squared for Kruskal–Wallis.)
  16. D'Agostino, R. B., & Pearson, E. S. (1973). Tests for departure from normality. Biometrika, 60(3), 613–622. See also D'Agostino, Belanger & D'Agostino (1990), The American Statistician, 44(4), 316–321.
  17. Levene, H. (1960). Robust tests for equality of variances. In Contributions to Probability and Statistics (pp. 278–292). Stanford Univ. Press. Brown, M. B., & Forsythe, A. B. (1974), JASA, 69, 364–367 (median-centred variant).
  18. 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:10.5334/irsp.82.
  19. Rochon, J., Gondan, M., & Kieser, M. (2012). To test or not to test: Preliminary assessment of normality when comparing two independent samples. BMC Medical Research Methodology, 12, 81. doi:10.1186/1471-2288-12-81
  20. 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:10.1348/000711004849222
  21. Mann, H. B., & Whitney, D. R. (1947). On a test of whether one of two random variables is stochastically larger than the other. Annals of Mathematical Statistics, 18(1), 50–60. Wilcoxon, F. (1945). Individual comparisons by ranking methods. Biometrics Bulletin, 1(6), 80–83.
  22. Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley. (Box plots and the 1.5 × IQR whisker rule.) Hyndman, R. J., & Fan, Y. (1996). Sample quantiles in statistical packages. The American Statistician, 50(4), 361–365. doi:10.1080/00031305.1996.10473566.
  23. American Psychological Association (2020). Publication Manual of the APA (7th ed.). (Statistical reporting conventions.)
  24. jStat, JavaScript statistical library (distribution CDFs and inverse CDFs). jstat.github.io. Formulas typeset with KaTeX. Every test is checked in the stemkit-core test suite: against SciPy where SciPy has the test, against statsmodels for Welch's ANOVA, and for Games–Howell and Dunn's test against their formulas evaluated with SciPy's distributions.

All computation runs entirely in your browser, your data never leaves your device. Results are a rigorous starting point; for regulatory or high-stakes analyses, confirm in a validated package (R, SciPy, SAS).

Frequently asked questions

Which test should I use?
Pick the test that matches your design (two groups, paired measurements, three or more groups, one group against a value, or two variables) and look at the Which test? box under the picker. It runs the normality and equal-variance checks on the columns you chose and suggests a test with one line of reasoning; Use this test switches to it. The rules are listed under Method, "Which test?". The suggestion is a starting point: it cannot know that your data are ordinal, or that a paired design was intended, so the choice stays yours.
Why is Welch's t-test the default instead of the classic Student's t-test?
Because the equal-variance assumption behind the pooled Student's t-test is often violated in real data, and when it is, the pooled test's error rates are wrong. Welch's t-test does not assume equal variances, controls the Type I error rate well across a wide range of conditions, and loses very little power when variances happen to be equal. It's the modern recommended default; the pooled version is still offered for when you've confirmed equal variances.
What does the tool report besides a p-value?
An effect size for every test (Cohen's d, η²/ω², ε², r/r², ρ, or a rank-biserial correlation), a 95% confidence interval where one is standard, automatic assumption checks, a table of descriptive statistics per group, a plot of the data, and, for three or more groups, post-hoc pairwise comparisons. The tables copy as CSV, Markdown or LaTeX, and the plot downloads as SVG or PNG.
What data layouts are supported, wide or long?
Both. Wide format puts each group in its own column (e.g. columns GroupA, GroupB, GroupC). Long / tidy format, the default export from R, pandas and most statistical software, puts all the numbers in one value column and the group labels in another (e.g. value, group). The tool auto-detects which you've pasted; if the guess is wrong, use the Format dropdown to force Wide or Long, and in Long mode pick which column holds the values and which holds the group labels.
How do I compare more than two groups, and find out which ones differ?
Choose one of the tests under "Three or more independent groups" and the group selector switches to a multi-select: hold Ctrl/Cmd (or Shift) to pick every column that represents a group. In long format, every level of your group column becomes a selectable group. With three or more groups the results add a pairwise comparisons table: Tukey HSD after the one-way ANOVA, Games–Howell after Welch's ANOVA, and Dunn's test with Holm's adjustment after Kruskal–Wallis. Running separate t-tests between every pair instead would inflate the chance of a false positive: with 5 groups there are 10 pairs, and at .05 each the chance of at least one false positive approaches 40%.
How do I test my measurements against a certified or theoretical value?
Choose "One-sample t-test", pick the column, and enter the reference value in Compare with (μ₀): a certified concentration, a literature melting point, or 0 for "no change". The result gives the mean's 95% CI and the difference from μ₀ with its CI, and the plot draws μ₀ as a dashed line. If the replicates are skewed, the one-sample Wilcoxon signed-rank test compares their median with μ₀ instead.
When should I trust the non-parametric tests instead?
When the normality check flags a departure (especially with small samples), or when your data are ordinal or have heavy outliers. Mann–Whitney U replaces the independent t-test, Wilcoxon signed-rank the paired and one-sample t-tests, Kruskal–Wallis the ANOVA, and Spearman's ρ the Pearson correlation. They work on ranks and make no normality assumption. For small samples the Mann–Whitney and signed-rank p-values are exact, as SciPy computes them by default; otherwise, and for Mann–Whitney whenever values are tied, they use a tie-corrected normal approximation, and Kruskal–Wallis always uses a chi-squared one. These approximations are accurate for moderate-to-large n but rough for very small samples, which the result then flags for Kruskal–Wallis and Mann–Whitney.
What does the plot show, and can I put it in a paper?
For groups: a box plot (median, quartiles, whiskers to 1.5 × IQR), every observation as a dot, and the mean with its 95% CI beside each box, which together show the spread, the outliers, the sample size and the precision of the mean that a bar chart hides. For correlations: a scatter with the least-squares line. The figure has its own white background whatever theme you are viewing in; set its size and fonts with Style and save it as PDF, PNG or SVG (text stays editable in the PDF and SVG), or copy the Python script, which draws the same figure with matplotlib.
Why are my p-values reported without a leading zero?
That's APA style, probabilities that can't exceed 1 are written as p = .032, not 0.032. Values below .001 are shown as "< .001" because the exact figure isn't meaningfully precise at that scale.
Is my data sent anywhere?
No. Parsing (PapaParse), all statistics and the plot run locally in your browser. Nothing you paste or upload is transmitted or stored.

Built for reproducible, defensible statistical reporting.