R: Winsorizing (надежный HD) не совместим с NA?
Я хочу использовать функцию winsorize, предоставляемую в пакете "robustHD", но она не работает с NA, как видно из примера
## generate data
set.seed(1234) # for reproducibility
x <- rnorm(10) # standard normal
x[1] <- x[1] * 10 # introduce outlier
x[11]<- NA ## adding NA
## winsorize data
x
winsorize(x)
Я погуглил проблему, но не нашел решения или даже кого-то с подобной проблемой. Может ли винсоризация считаться "плохой" техникой или как вы можете объяснить этот недостаток информации?
2 ответа
Некоторые, возможно, полезные мысли:
- Stack Overflow - это доска для программирования, где задаются вопросы, связанные с программированием, и даются ответы. На вопрос, являются ли определенные статистические процедуры подходящими или считаются "плохими", вы с большей вероятностью найдете знающих людей на перекрестной проверке.
- Статистический метод и внедрение статистического метода в определенную программную среду часто довольно независимы. То есть, если разработчик пакета не включил определенные функции (например,
NA
обработка) в его пакет, это не очень много значит для метода как такового. Сказав это, конечно, может. Единственный способ убедиться в том, что упущение функции пакета было преднамеренным, - это спросить у разработчика пакета. Если вопрос больше ориентирован на статистику и валидность метода при наличии пропущенных значений, перекрестная проверка, вероятно, будет более полезной. - Я не знаю, почему вы не можете найти информацию по этой теме. Хотя я могу с уверенностью сказать, что я впервые слышу термин "winsorized". На самом деле мне пришлось искать его, и я могу с уверенностью сказать, что я никогда не сталкивался с таким подходом, и я бы лично никогда не использовал его.
Простым решением вашей проблемы с вычислительной точки зрения было бы исключить все незавершенные случаи перед началом работы с функцией. Также интуитивно понятно, что случаи с пропущенными значениями нельзя легко украсить. Во-первых, вычисление среднего значения и стандартного отклонения в любом случае должно быть выполнено для полных случаев, и затем неясно, какое значение присваивать тем, у кого пропущены значения, поскольку они не обязательно являются выбросами, даже если они могут быть.
Если вы не можете исключить неполные случаи, вы можете поискать методы вменения (в резюме).
Если у вас есть только Winsorize вектор, то winsor2
определенную здесь функцию можно легко изменить, установив na.rm = TRUE
для median
а также mad
функции в коде. Это обеспечивает ту же функциональность, что и winsorize{robustHD}, с одним отличием: winsorize
звонки robStandardize
, что включает в себя некоторые корректировки для очень малых значений. Я не понимаю, что он делает, поэтому будьте осторожны, если вы воздержитесь от этого.
Если вы хотите winsorize отдельные столбцы матрицы (в отличие от многовариантного winsorization с использованием эллипса допуска, доступного в качестве другого параметра в winsorize
) вы должны быть в состоянии перехватить необходимый код с winsorize.default
а также standardize
, Они делают то же самое, что и winsor2
но в матричной форме. Опять же, вам нужно добавить свой собственный na.rm = TRUE
настройки в функции по мере необходимости.