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 ответа

Решение

Некоторые, возможно, полезные мысли:

  1. Stack Overflow - это доска для программирования, где задаются вопросы, связанные с программированием, и даются ответы. На вопрос, являются ли определенные статистические процедуры подходящими или считаются "плохими", вы с большей вероятностью найдете знающих людей на перекрестной проверке.
  2. Статистический метод и внедрение статистического метода в определенную программную среду часто довольно независимы. То есть, если разработчик пакета не включил определенные функции (например, NA обработка) в его пакет, это не очень много значит для метода как такового. Сказав это, конечно, может. Единственный способ убедиться в том, что упущение функции пакета было преднамеренным, - это спросить у разработчика пакета. Если вопрос больше ориентирован на статистику и валидность метода при наличии пропущенных значений, перекрестная проверка, вероятно, будет более полезной.
  3. Я не знаю, почему вы не можете найти информацию по этой теме. Хотя я могу с уверенностью сказать, что я впервые слышу термин "winsorized". На самом деле мне пришлось искать его, и я могу с уверенностью сказать, что я никогда не сталкивался с таким подходом, и я бы лично никогда не использовал его.

Простым решением вашей проблемы с вычислительной точки зрения было бы исключить все незавершенные случаи перед началом работы с функцией. Также интуитивно понятно, что случаи с пропущенными значениями нельзя легко украсить. Во-первых, вычисление среднего значения и стандартного отклонения в любом случае должно быть выполнено для полных случаев, и затем неясно, какое значение присваивать тем, у кого пропущены значения, поскольку они не обязательно являются выбросами, даже если они могут быть.

Если вы не можете исключить неполные случаи, вы можете поискать методы вменения (в резюме).

Если у вас есть только Winsorize вектор, то winsor2 определенную здесь функцию можно легко изменить, установив na.rm = TRUE для median а также mad функции в коде. Это обеспечивает ту же функциональность, что и winsorize{robustHD}, с одним отличием: winsorize звонки robStandardize, что включает в себя некоторые корректировки для очень малых значений. Я не понимаю, что он делает, поэтому будьте осторожны, если вы воздержитесь от этого.

Если вы хотите winsorize отдельные столбцы матрицы (в отличие от многовариантного winsorization с использованием эллипса допуска, доступного в качестве другого параметра в winsorize) вы должны быть в состоянии перехватить необходимый код с winsorize.default а также standardize, Они делают то же самое, что и winsor2 но в матричной форме. Опять же, вам нужно добавить свой собственный na.rm = TRUE настройки в функции по мере необходимости.

Другие вопросы по тегам