Вы почти там, только что вы выбрали ограничительные пробники для квантилей. Ваш вектор уже имеет значительное количество равных значений по краям. Возможно, оно уже было winsorized раньше?
library(DescTools)
x <- c(0.66, 2.8, 87.75, 6.89, 134.73, 0.09, 22.78, 1.36,
5.48, 0.7, 0.79, 0.35, 31.37, 0.55, 0.94, 0.06, 12.36, 13.58,
7.95, 0.29, 7.8, 0.39, 73.55, 0.09, 23.07, 0.27, 0.32, 0.08,
0.05, 0.41, 29.47, 0.66, 20.91, 0.67, 0.05, 1.39, 0.17, 0.14,
1.79, 0.05, 2.52, 3.68, 0.24, 0.09, 109.65, 8.43, 0.2, 0.17,
35.93, 3.05, 0.07, 0.05, 0.82, 0.57, 26.21, 0.28, 0.05, 5.72,
6.12, 4.09, 0.05, 0.22, 134.73, 94.43, 41.35, 0.2, 17.32, 5.63,
3.25, 0.12, 0.05, 0.07, 10.89, 3.79, 1.89, 134.73, 9.98, 10.58,
54.98, 134.73, 15.55, 15.21, 5.93, 42.65, 1.59, 3, 11.19, 6.1,
0.08, 134.73, 31.37, 17.74, 20.92, 6.46, 3.18, 0.05, 0.81, 9.15,
29.47, 0.05, 1.34, 7.97, 109.65, 28.45, 35.93, 0.38, 0.65, 134.73,
9.44, 8.66, 5.3, 11.83, 20.06, 29.55, 1.15, 2.32, 46.14, 134.73,
9.98, 10.58, 11.05, 54.98, 134.73, 15.55, 15.21, 5.93, 1.59,
1.03, 3, 11.19, 6.1)
summary()
в этом случае несколько грубовато.
summary(Winsorize(x))
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 0.05 0.48 5.48 19.73 17.53 134.73
Использование Desc()
дает вам более подробное представление о том, что происходит вваши данные.
Desc(Winsorize(x))
# -----------------------------------------------------
# Winsorize(x) (numeric)
#
# length n NAs unique 0s mean meanCI
# 131 131 0 95 0 19.73 13.53
# 100.0% 0.0% 0.0% 25.92
#
# .05 .10 .25 median .75 .90 .95
# 0.05 0.08 0.48 5.48 17.53 54.98 134.73
#
# range sd vcoef mad IQR skew kurt
# 134.68 35.84 1.82 7.87 17.05 2.35 4.42
#
# lowest : 0.05 (9), 0.06, 0.07 (2), 0.08 (2), 0.09 (3)
# highest: 73.55, 87.75, 94.43, 109.65 (2), 134.73 (8)
Вы видите, что у вас есть 9 раз значение 0,05 и 8 раз значение 134,73. Таким образом, квантили с датчиками 0.05 и 0.95 такие же, как крайние значения, а winsorized вектор остается таким же, как и исходный.
quantile(x=x, probs=c(0.05, 0.95))
# 5% 95%
# 0.05 134.73
Просто увеличьте пробники до c (0,1, 0,9), и вы увидите эффект.
PS: Winsorize()
нужен вектор в качестве аргумента и он не может обработатьdata.frames. (Это также описано в файле справки…)
PPS: воспроизводимый пример поможет…; -)