Written and maintained by CASRAI Editorial Board
Last updated
A resistant measure is a summary statistic that is not unduly affected by extreme values. The median and the interquartile range are resistant; the mean, the standard deviation and the range are not. This guide defines the idea, shows the arithmetic on one small dataset before and after a single outlier, and gives Excel, R and Python code you can reuse.
Definition: what is a resistant measure?
A resistant measure (also called a resistant statistic) is a number that describes a dataset and changes little when a few observations are replaced by extreme values. A statistic that moves a long way when one value becomes very large or very small is not resistant. The NIST/SEMATECH e-Handbook of Statistical Methods says that extreme values in the tails distort the mean, while they do not distort the median because the median is based on ranks. It describes trimmed, mid-mean and winsorized means as not unduly affected by extremes in the tails (NIST/SEMATECH e-Handbook; see Sources).
What does it mean if a statistic is resistant?
It means you can trust it to describe the typical value or typical spread of the bulk of the data even if a few values are mistakes, rare events or from a different population. It does not mean the statistic is always the better choice: a resistant statistic ignores how large the extremes are, and sometimes the extremes are exactly what you need to know about.
Formula: the resistant and non-resistant summaries
There is no single formula for “resistant”. Each summary has its own, and the property comes from how it uses the data.
- Mean: x̄ = (x1 + x2 + … + xn) / n, where xi is the i-th observation and n is the number of observations. Every value enters the sum at its full size.
- Median: the middle value of the sorted data when n is odd, or the average of the two middle values when n is even. It depends on the order of the values, not their size.
- Interquartile range: IQR = Q3 – Q1, where Q1 and Q3 are the first and third quartiles (the 25th and 75th percentiles). The quartile method matters: this page uses the linear-interpolation method that Excel’s QUARTILE.INC, R’s quantile() default and NumPy’s percentile() default all share.
- Median absolute deviation: MAD = median(|xi – median(x)|), the median of each value’s distance from the median.
- Sample standard deviation: s = √[Σ(xi – x̄)² / (n – 1)]. It is built from the mean and squares each distance, so large values weigh even more.
- Range: maximum minus minimum. It uses only the two most extreme values.
- Trimmed mean: the mean after dropping a fixed number or share of the smallest and largest values.
Worked example with real numbers
Take nine measurements, sorted: 12, 14, 15, 17, 18, 19, 21, 22, 23. Now suppose the last value was mistyped as 230. Only that one value changes. The arithmetic for each statistic follows. (Both sets were computed by hand and checked with code.)
Original data (n = 9). Sum = 12 + 14 + 15 + 17 + 18 + 19 + 21 + 22 + 23 = 161, so the mean is 161 / 9 = 17.89. The median is the 5th sorted value, 18. With linear interpolation, Q1 sits at position 1 + 0.25 x 8 = 3, which is 15, and Q3 sits at position 1 + 0.75 x 8 = 7, which is 21, so IQR = 21 – 15 = 6. The range is 23 – 12 = 11. The absolute distances from the median 18 are 6, 4, 3, 1, 0, 1, 3, 4, 5; sorted they are 0, 1, 1, 3, 3, 4, 4, 5, 6, so MAD = 3. The sample standard deviation is 3.76. Dropping the lowest and highest value leaves 14, 15, 17, 18, 19, 21, 22, whose mean is 126 / 7 = 18.00.
With the typo (23 becomes 230). Sum = 161 – 23 + 230 = 368, so the mean is 368 / 9 = 40.89. The sorted order is unchanged, so the median is still 18, Q1 is still 15, Q3 is still 21, the IQR is still 6, and MAD is still 3. The range becomes 230 – 12 = 218, and the sample standard deviation becomes 70.99. The trimmed mean (dropping 12 and 230) is still 18.00.
| Statistic | Original data | With 23 replaced by 230 | Change |
|---|---|---|---|
| Mean | 17.89 | 40.89 | +23.00 |
| Sample standard deviation | 3.76 | 70.99 | +67.23 |
| Range | 11 | 218 | +207 |
| Median | 18 | 18 | 0 |
| Interquartile range | 6 | 6 | 0 |
| MAD | 3 | 3 | 0 |
| Trimmed mean (1 value cut from each end) | 18.00 | 18.00 | 0 |
The mean more than doubled because one value out of nine was changed. The mean moved by exactly the change in that value divided by n: (230 – 23) / 9 = 23.00. That is the mechanism: the mean includes the size of every value, so a single unbounded value can move it as far as you like.
Interpretation: reading guidance
Is the median resistant to outliers?
Yes. The median depends on the rank order, so making the largest value larger does not change which value sits in the middle. In the example, 23 became 230 and the median stayed at 18. OpenStax Introductory Statistics makes the same point: the median is generally a better measure of the center when there are extreme values or outliers, because it is not affected by the precise numerical values of the outliers.
Is the mean resistant to outliers?
No. OpenStax gives a town of 50 people in which one person earns $5,000,000 and the other 49 earn $30,000 each. The mean is ($5,000,000 + 49 x $30,000) / 50 = $129,400 while the median is $30,000. The mean describes nobody in the town.
| Summary | What it describes | Resistant? | Why (from the example) |
|---|---|---|---|
| Median | Center | Yes | Rank-based; unchanged at 18 |
| Trimmed mean | Center | Yes, up to the share trimmed | Extremes are removed before averaging; unchanged at 18.00 |
| Interquartile range | Spread | Yes | Uses Q1 and Q3 only; unchanged at 6 |
| MAD | Spread | Yes | Median of distances from the median; unchanged at 3 |
| Mean | Center | No | Moved from 17.89 to 40.89 |
| Standard deviation | Spread | No | Moved from 3.76 to 70.99 |
| Range | Spread | No | Moved from 11 to 218 |
A large gap between the mean and the median is a quick warning that the data are skewed or contain extreme values. The skewness guide explains what that pattern looks like in a distribution.
Assumptions and common mistakes
- Resistant is not the same as unaffected by everything. A trimmed mean resists only as many extremes as you trim. If more than the trimmed share of the data are extreme, it moves too.
- Do not delete outliers just because they move the mean. Check whether the value is a data-entry error, a measurement fault or a real observation. A resistant summary lets you report the center honestly while you investigate; the winsorizing versus trimming guide covers how those two treatments differ.
- Do not use mean and standard deviation to find outliers if outliers are present. NIST notes that the ordinary Z-score approach can be misleading and recommends a modified Z-score built on the median and MAD instead, for exactly this reason (NIST outlier section).
- Quartile methods differ between software. The IQR of a small dataset can change with the method, so state which one you used. See the interquartile range and five-number summary guide.
- A resistant summary hides magnitude. The median cannot tell you that one value was ten times the rest. Report it alongside a plot such as a boxplot.
How to report it
When extremes are present, report the median with the IQR rather than the mean with the standard deviation. An example sentence in APA style: “Response times were right-skewed, so the median is reported (Mdn = 18, IQR = 6, n = 9).” If you also give the mean, say why: “The mean (M = 40.89) was strongly influenced by a single extreme value.” For the wider set of descriptive summaries, see the descriptive statistics guide.
How to calculate it in Excel, R or Python
Each snippet below uses the data with the typo (the last value is 230) and reproduces the table above.
Excel
=MEDIAN(A1:A9) returns 18
=QUARTILE.INC(A1:A9,3)-QUARTILE.INC(A1:A9,1) returns 6
=TRIMMEAN(A1:A9,0.25) returns 18 (cuts 2 of 9 values, one from each end)
=AVERAGE(A1:A9) returns 40.89
R
x <- c(12, 14, 15, 17, 18, 19, 21, 22, 230)
median(x) # 18
IQR(x) # 6
mad(x, constant = 1) # 3 (default constant = 1.4826 rescales it)
mean(x, trim = 0.12) # 18 (trims floor(0.12 * 9) = 1 value from each end)
mean(x) # 40.89
Python
import numpy as np
x = np.array([12, 14, 15, 17, 18, 19, 21, 22, 230])
np.median(x) # 18.0
np.subtract(*np.percentile(x, [75, 25])) # 6.0
np.median(np.abs(x - np.median(x))) # 3.0
np.sort(x)[1:-1].mean() # 18.0 (drops lowest and highest)
x.mean() # 40.89
FAQ
What is a resistant measure in statistics?
A summary statistic that is not unduly affected by extreme values, such as the median or the interquartile range.
Is the mean resistant to outliers?
No. In the example above, changing one of nine values moved the mean from 17.89 to 40.89.
Is the median resistant to outliers?
Yes. It depends only on the rank order, so it stayed at 18 when the largest value changed from 23 to 230.
What does it mean if a statistic is resistant?
It means the statistic is not unduly affected by a few extreme values, so it still describes the bulk of the data when a value is a typo, a rare event or from a different population.
Is the standard deviation resistant?
No. It is built from the mean and squared distances, and it rose from 3.76 to 70.99 in the example.
Is a trimmed mean resistant?
Yes, for as many extreme values as were trimmed from each end; NIST lists trimmed and winsorized means among the measures not unduly affected by extremes in the tails.
Sources
- NIST/SEMATECH e-Handbook of Statistical Methods, “Measures of Location”: itl.nist.gov/div898/handbook/eda/section3/eda351.htm (checked 2026-10-29).
- NIST/SEMATECH e-Handbook of Statistical Methods, “Detection of Outliers”: itl.nist.gov/div898/handbook/eda/section3/eda35h.htm (checked 2026-10-29).
- OpenStax, Introductory Statistics, “Measures of the Center of the Data”: openstax.org/books/introductory-statistics/pages/2-5-measures-of-the-center-of-the-data (checked 2026-10-29).
- All numbers in the worked example were computed for this page from the nine values shown.








