Winsorize матрица - PullRequest
       7

Winsorize матрица

0 голосов
/ 10 июня 2018

Я хочу winsorize матрицу с 6 столбцами и без NA и без бесконечных значений.

Я использую пакет robustHD и код

winsorize(df)

, но я получаю следующеесообщение об ошибке:

Ошибка в собственных (R, симметричный = ИСТИНА): бесконечные или пропущенные значения в «х»

Кто-нибудь знает, в чем проблема или есть другойспособ сделать это с другим пакетом, который я мог бы попробовать?

1 Ответ

0 голосов
/ 10 июня 2018

Winsorizing очень прост и очень гибок.Легко создать функцию собственного дизайна.Трудная часть заключается в выборе наиболее подходящего дизайна.

Один из примеров

set.seed(1)

mat <- matrix(sample(-99:99, 30), 6)

ran <- quantile(mat, c(0.20, 0.80))

mat.w <- mat
mat.w[mat < ran[1]] <- ran[1]
mat.w[mat > ran[2]] <- ran[2]

mat.w - mat

#       [,1]  [,2]  [,3]  [,4] [,5]
# [1,]   0.0 -38.8   0.0   0.0  0.0
# [2,]   0.0   0.0   0.0   0.0  0.0
# [3,]   0.0   0.0   0.0 -23.8 36.8
# [4,] -34.8  27.8   0.0   1.8  0.0
# [5,]   0.0   0.8   0.0   0.0 -4.8
# [6,] -30.8   5.8 -36.8  16.8  0.0

Здесь мы сделали так, чтобы все, что ниже двадцатого процентиля, было привязано к этому значению, ивсе, что выше восьмидесятого процентиля, ограничено этим значением.Это делает эту версию винсоризации симметричной относительно медианы, и медиана не будет изменена (в отличие от обрезки), но среднее будет.

median(mat.w) - median(mat)
# 0

mean(mat.w) - mean(mat)
# -2.6667

Этот способ винсоризации, основанный на процентилях, вероятно, является наиболее распространенным подходом, но нет никаких реальных ограничений или правил, как это должно быть сделано.

Например, мы можем основывать его на отклонениях от среднего.

cen <- mean(mat)
range(mat - cen)
# -91.8  88.2

Мы видим, что значения отклоняются от среднего значения на 91,8 ниже и на 88,2 выше максимум.Скажем, мы хотим ограничить это до 70?Легко.

mat.w <- mat
mat.w[mat - cen < -70] <- -70
mat.w[mat - cen >  70] <-  70

mat.w - mat

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    0  -13    0    0    0
# [2,]    0    0    0    0    0
# [3,]    0    0    0    2   27
# [4,]   -9   18    0    0    0
# [5,]    0    0    0    0    0
# [6,]   -5    0  -11    7    0

И так далее.Любой метод winsorizing, который вы пожелаете, просто peasy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...