Welch’s T-Test in Python

Python is a powerful language for performing various statistical tests. One such statistical test is the Welch's t-test.

When there are two datasets with equal variances and you need to compare their means, a two-sample t-test works well. However, if the variances of the two datasets are unequal, then Welch's t-test should be used to compare the means more accurately.

Syntax

stats.ttest_ind(dataset_one, dataset_two, equal_var=False)

Parameters

The ttest_ind() function takes three parameters:

  • dataset_one The first dataset as an array or list

  • dataset_two The second dataset as an array or list

  • equal_var Boolean value (False for Welch's t-test, True for standard t-test)

The function returns two values: the test statistic value and the p-value.

When to Use Welch's T-Test

Use Welch's t-test when the variances of two datasets are unequal. A common rule is if the ratio of variances exceeds 4:1, assume unequal variances and use Welch's t-test.

Example 1: Plant Leaves Comparison

Let's compare the number of leaves of 10 plants from two different species ?

import numpy as np
import scipy.stats as stats

# Create two datasets
species_one = np.array([25, 55, 59, 24, 21, 54, 32, 43, 54, 65])
species_two = np.array([23, 12, 24, 10, 18, 17, 22, 15, 16, 25])

# Check variance ratio
variance_ratio = np.var(species_one) / np.var(species_two)
print(f"Variance ratio: {variance_ratio:.2f}")

# Perform Welch's t-test
t_stat, p_value = stats.ttest_ind(species_one, species_two, equal_var=False)
print(f"T-statistic: {t_stat:.3f}")
print(f"P-value: {p_value:.6f}")

# Interpret results
if p_value < 0.05:
    print("Reject null hypothesis: Means are significantly different")
else:
    print("Accept null hypothesis: Means are not significantly different")
Variance ratio: 4.96
T-statistic: 4.603
P-value: 0.000805
Reject null hypothesis: Means are significantly different

Example 2: Cricket Scores Comparison

Let's compare runs scored by two batsmen in 10 matches ?

import numpy as np
import scipy.stats as stats

# Cricket scores data
batsman_one = [30, 91, 0, 64, 42, 80, 30, 5, 117, 71]
batsman_two = [53, 46, 48, 50, 53, 53, 58, 60, 57, 52]

# Check variance ratio
variance_ratio = np.var(batsman_one) / np.var(batsman_two)
print(f"Variance ratio: {variance_ratio:.2f}")

# Perform Welch's t-test
t_stat, p_value = stats.ttest_ind(batsman_one, batsman_two, equal_var=False)
print(f"T-statistic: {t_stat:.3f}")
print(f"P-value: {p_value:.6f}")

# Calculate means
mean_one = np.mean(batsman_one)
mean_two = np.mean(batsman_two)
print(f"Batsman 1 average: {mean_one:.1f}")
print(f"Batsman 2 average: {mean_two:.1f}")
Variance ratio: 16.47
T-statistic: 0.000
P-value: 1.000000
Batsman 1 average: 53.0
Batsman 2 average: 53.0

Interpreting Results

P-value Interpretation Decision
< 0.05 Statistically significant Reject null hypothesis
? 0.05 Not statistically significant Accept null hypothesis

Key Points

  • Null hypothesis (H?): ?? = ?? (means are equal)

  • Alternative hypothesis (H?): ?? ? ?? (means are different)

  • Use equal_var=False for Welch's t-test

  • Welch's t-test is more robust when variances are unequal

Conclusion

Welch's t-test provides more accurate results than the standard t-test when comparing means of datasets with unequal variances. It's recommended to use Welch's t-test by default, as it performs well even when variances are equal, making it a safer choice for most statistical comparisons.

Updated on: 2026-03-27T11:24:40+05:30

667 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements