← All notes

Statistical note

Descriptive and robust statistics with SciPy

Mean, median, variance, IQR, MAD, skewness, and kurtosis: what each summary measures and when it can mislead.

9 min read

Summary statistics compress a distribution, but each compression preserves different information. For observations x1,,xnx_1,\ldots,x_n, the arithmetic mean is

xˉ=1ni=1nxi,\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i,

while the sample variance is

s2=1n1i=1n(xixˉ)2.s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2.

Mean, median, IQR, and outliers on a skewed distribution

Robust alternatives

The median resists isolated extreme values. The interquartile range is IQR=Q0.75Q0.25IQR=Q_{0.75}-Q_{0.25}. The median absolute deviation is MAD=median(ximedian(x))MAD=\operatorname{median}(|x_i-\operatorname{median}(x)|); multiplying by approximately 1.48261.4826 makes it comparable to the standard deviation under normality.

import numpy as np
from scipy import stats

area = np.array([42, 45, 46, 48, 51, 53, 55, 58, 190])
summary = stats.describe(area)
print(summary.mean, np.median(area))
print(stats.iqr(area), stats.median_abs_deviation(area, scale="normal"))
print(stats.skew(area, bias=False), stats.kurtosis(area, bias=False))

Case study: segmented cell area

One merged segmentation can make the mean cell area jump while the median changes little. Report a distribution plot and robust summaries before interpreting a treatment effect. Skewness describes asymmetry; kurtosis describes tail weight relative to a reference convention, not simply “peakedness.”

Functions: scipy.stats.describe, iqr, median_abs_deviation, skew, and kurtosis.