Вот мой набор данных, с которым я работаю:
df<-read.table(header=T,text="
group, test1
2, 8212
2, 10025
2, 7054
2, 9462
2, 9875
2, 8403
2, 9566
2, 7276
2 , 9488
2, 9515
2, 11322
2, 10037
2, 9885
2, 10090
2, 9013
2 , 8682
2, 10356
2 , 9545
2 , 9646
2, 9186
2 , 8464
2, 8870
2, 9095
2, 8301
2, 10961
2, 11102
2, 9710
2, 10343
2, 10828
2 , 7371
2 ,8125
2 , 8047
2 , 9028
2 , 8149
2, 9974
2, 10255
2, 9583
2, 8423
2, 9089
1, 10915
1, 9820
1, 9809
1, 9071
1, 10610
1, 9258
1, 9047
1 , 7444
1, 10250
1 , 9538
1 ,10107
1 ,10080
1 , 9189
1 ,10319
1 , 8108
1 ,10891
1 , 7471
1 ,11864
1 ,10653
1 , 9322
1, 9609
1, 8982
1, 9962
1, 10013
1, 9832
1, 10270
1, 8882
1, 8035
1, 9103
1, 10103
1, 11999
1, 7265
1, 9457
1, 9049
1, 9166
1, 9701
1, 9465
1, 10298
1, 8404
1, 11771
1, 10249
1, 9036
1, 8056
1, 9356
1 9827")
Мне нужно сделать две вещи.Сначала мне нужно было определить, сколько выбросов существовало в группе test1 BY (2, 1).
Я обнаружил, что было 5 выбросов из обеих групп, используя следующую функцию:
outlier <- function(x, SD = 2){
mu <- mean(x)
sigma <- sd(x)
out <- x < mu - SD*sigma | x > mu + SD*sigma
out
}
with(df, ave(test1, group, FUN = outlier)) # 5 outliers
Затем я приступил к worsorize этих выбросов, используя следующее:
library(robustHD)
df.wins= df%>% group_by(group) %>% mutate(measure_winsorized.test1 = winsorize(test1))
Единственная проблема заключается в том, что когда я смотрю на то, сколько значений было winzorized (10) по сравнению с тем, сколько изначально было выбросов (5), эти два значения не совпадают.То же самое число выбросов должно было быть winsorized
Код неверен или я неправильно понимаю, что я сделал?