В R скользящее стандартное отклонение, которое может пропускать значения NA?

Мне интересно, есть ли какие-либо быстрые функции R, которые могут вычислять скользящее стандартное отклонение для вектора, пропуская любые значения NA в середине указанного вектора, чтобы вектор все еще соответствовал исходным данным?

Пакет TTR имеет runSD, но возвращает ошибку, если в середине вектора есть NA.

В пакете fTrading есть rollVar, в котором есть na.rm=TRUE. Извлечение квадратного корня из скользящей дисперсии дает стандартное отклонение. Однако на самом деле он удаляет значения NA, а это означает, что скользящее стандартное отклонение больше не совпадает с исходными данными.

Или есть способ временно удалить значения NA, а затем вставить их обратно после завершения расчета?

Обновить

См. раздел Повторная вставка NA в вектор.


person Contango    schedule 28.09.2013    source источник
comment
возможный дубликат Повторная вставка NA в вектор   -  person Frank    schedule 29.09.2013


Ответы (2)


Это то, что вы ищите?

library(zoo)
set.seed(1)
x <- sample(c(1:3, NA), replace = TRUE, size = 10)
r <- rollapply(data = x, width = 3, FUN = sd, fill = NA)
r
person Henrik    schedule 29.09.2013
comment
Великолепно, кажется, это работает хорошо. - person Contango; 29.09.2013
comment
Рад слышать, что это сработало. Но вы не получите много sd с шириной окна 1. - person Henrik; 29.09.2013
comment
Да, я понял это и изменил свой комментарий :) - person Contango; 29.09.2013

Код ниже работает хорошо.

Вычислите результат, используя na.omit(X), затем вставьте значения NA обратно, используя приведенную ниже функцию. В приведенном ниже коде используется квадратный корень, однако вы можете использовать любую функцию, включая runSD.

# Inserts NA back into result, based on a "template" (a vector with existing NA values)
ReNA <- function(NAtemplate,result) 
{
    NAtemplate[!is.na(NAtemplate)]<-result;NAtemplate
}

X=c(4,9,NA,16,NA)
X    
[1]  4 9 NA 16 NA
result <- sqrt(na.omit(X))
X=ReNA(X,result)
X
[1]  2 3 NA 4 NA
# These values are the square root of the previous, with NA values inserted back in.
person Contango    schedule 29.09.2013