As you suspect, this is not a valid strategy for data removal. The
"outliers" falling outside Tukey's fences are worth a second look. They may or may not have arisen through legitimate random sampling from the population of an experiment.
Some datasets may contain observations arising from data entry errors, equipment failure, sampling from the wrong population, etc. Perhaps one can check with original sources to see
if these values are correct; perhaps 129
was input as 921
, perhaps there is a lab note about an unusual occurrence.
In some cases (such as: a negative height, a human age of 1078) a value may be obviously wrong. Perhaps more commonly, outliers are correct, but unexpectedly low or high values.
Also, the boxplot outlier detection rules work better for data that are approximately normally distributed (e.g., scores on certain kinds of tests) than for highly skewed data, such as exponential or Pareto data (e.g., waiting times, bank balances).
Using R software, it is easy to count the outliers in
a randomly generated sample. For example, in one sample of size $n=50$ from an exponential distribution with rate $1/5$ (mean $5),$ there were $3$ outliers of the kind you mention.
set.seed(2021)
length(boxplot.stats(rexp(50, 1/5))$out)
[1] 3
set.seed(2021); x = rexp(50, 1/5)
boxplot(x, horizontal=T)
Then we can look at 100,000 such samples to get a good idea
how many outliers to expect among such exponential samples.
It seems that the average number is around 2.45 outliers
per sample. These outliers are characteristic of the
distribution, and deleting them would give a false
impression of the actual population.
set.seed(1010)
nr.out = replicate(10^5,
length(boxplot.stats(rexp(50,1/5))$out))
summary(nr.out)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00 1.00 2.00 2.45 3.00 10.00
With the huge datasets in common use nowadays, I don't know
what you mean by "small" sample size--10, 100, or 1000.
In a normal dataset of size 100 one should not be surprised
to see an outlier. [I used standard normal samples, but the result would be the same sampling from a normal population with any $\mu$ amd $\sigma.]$
set.seed(1234)
nr.out = replicate(10^5,
length(boxplot.stats(rnorm(100))$out))
summary(nr.out)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 0.000 1.000 0.923 1.000 15.000
Note: I have tried to give a direct answer to your specific question.
But you may find some useful additional information by looking
at the links in the margin of this page to "Related" Q&A's