Измените обычную функцию hpfilter, чтобы игнорировать na

Я новый пользователь R, пытаюсь быстро научиться, но не смог » Я сам это взламываю. Я работаю в основном с экономическими временными рядами - поэтому стараюсь поддерживать свой набор данных в многоколоночном формате xts, например:

> head(USDATAq)
         tq   ngdp    rgdp  profit
1947 Q1   0  237.2  1770.7    20.7
1947 Q2   1  240.4  1768.0    23.9
1947 Q3   2  244.5  1766.5    23.8
1947 Q4   3  254.3  1793.3    25.5
1948 Q1   4  260.3  1821.8    29.4
1948 Q2   5  267.3  1855.3    31.2

Я применяю функцию hpfilter для фильтрации. В другом месте. на этом сайте я нашел эту реализацию, которая использует функцию coredata для применения hpfilter к объектам xts:

hpfilter <- function(x, lambda=2){
  eye <- diag(length(x))
  dcrossprod <- crossprod(diff(eye, lag=1, d=2))
  coredata(x) <- solve(eye + lambda * dcrossprod, coredata(x))
  return(x)
}

Мой вопрос:

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

Я могу передать набор данных как na.omit (USDATAq) , который работает, но это сокращает все переменные в наборе данных до минимума наблюдений. Но разные переменные доступны до разных дат, за которыми следуют NA. Я хотел бы, чтобы в конечном итоге Примените функцию к каждому столбцу набора данных в цикле или mapply , чтобы функция возвращала каждую отфильтрованную серию, используя все доступные наблюдения этой серии.

5
задан Community 23 May 2017 в 12:27
поделиться