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.
The data or the test changed after this run. Run the analysis again to update these results.
t statistic--
p-value--
Effect size--
Plot
The plot for the test appears here
Box plots with every observation, or a scatter plot for a correlation.
Descriptive statistics
Pairwise comparisons
Mathematical theory
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
Test
Use when
Statistic & 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-test
Two independent groups with equal variances (confirm with Levene).
t, df = n₁+n₂−2
Mann–Whitney U
Two independent groups when normality fails.
U; exact p, or the tie-corrected normal approximation
Paired t-test
Two measurements on the same units (before/after).
t on differences, df = n−1
Wilcoxon signed-rank
Paired data when the differences aren't normal.
W; exact p, or the tie-corrected normal approximation
One-sample t-test
One 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-rank
The same question when the values are skewed; tests the median against μ₀.
W on x − μ₀; exact p, or the tie-corrected normal approximation
One-way ANOVA
Three 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 ANOVA
Three or more independent groups whose variances differ. Followed by Games–Howell.
F, df = (k−1, Welch df)
Kruskal–Wallis H
Three or more independent groups that are skewed, ordinal or outlier-prone. Followed by Dunn's test.
H (tie-corrected), χ² on k−1 df
Pearson correlation
Linear association between two continuous variables.
r, t = r√((n−2)/(1−r²))
Spearman rank correlation
Any 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%.
After
Comparison
How it works
Reports
One-way ANOVA
Tukey 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 ANOVA
Games–Howell
Each pair keeps its own standard error and Welch df; |t| × √2 against the studentized range.
Difference, simultaneous 95% CI, t, df, adjusted p
Kruskal–Wallis
Dunn's test, Holm-adjusted
Mean 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:
Design
Normal (or too small to check)
Normality rejected
Two independent groups
Welch's t-test, whatever Levene's test says
Mann–Whitney U
Three or more groups
One-way ANOVA; Welch's ANOVA if Levene's test is significant
Kruskal–Wallis
Paired
Paired t-test (normality of the differences)
Wilcoxon signed-rank
One group against μ₀
One-sample t-test
One-sample Wilcoxon
Two variables
Pearson correlation
Spearman 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.
Test
Effect size
Rough benchmarks
Independent t
Cohen's d (pooled SD); Hedges' g corrects small-sample bias
0.2 small, 0.5 medium, 0.8 large
Paired t
Cohen's dz = d̄ / sd
same d benchmarks
One-sample t
Cohen's d = (x̄ − μ₀)/s
same d benchmarks
ANOVA and Welch's ANOVA
η² (variance explained); ω² is less biased
0.01 small, 0.06 medium, 0.14 large
Kruskal–Wallis
ε² = H/(N − 1), between 0 and 1
read as η²
Pearson
r and r² (shared variance)
|r|: 0.1 weak, 0.3 moderate, 0.5 strong
Spearman
ρ itself
same r benchmarks
Mann–Whitney / Wilcoxon
rank-biserial r / z⁄√n
same 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.
Check
What it tests
If 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
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.
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.)
Student [W. S. Gosset] (1908). The probable error of a mean. Biometrika, 6(1), 1–25.
Fisher, R. A. (1925). Statistical Methods for Research Workers. Oliver & Boyd. (ANOVA, F-distribution, and the z-transformation of the correlation coefficient.)
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.
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.
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.)
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.
Holm, S. (1979). A simple sequentially rejective multiple test procedure. Scandinavian Journal of Statistics, 6(2), 65–70.
Spearman, C. (1904). The proof and measurement of association between two things. American Journal of Psychology, 15(1), 72–101. doi:10.2307/1412159.
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.
Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Lawrence Erlbaum. (Cohen's d, η², and the small/medium/large benchmarks.)
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".)
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.)
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.
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).
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.
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
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
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.
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.
American Psychological Association (2020). Publication Manual of the APA (7th ed.). (Statistical reporting conventions.)
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.