Существует ли пакет R, который ускоряет отставание и различие в анализе временных рядов? - PullRequest
0 голосов
/ 03 февраля 2020

В настоящее время мне нужно определить свои собственные функции lagpad() и diffpad() (кредиты Эндрю и flexponsive), которые автоматически добавляют NA в первые строки:

lagpad <- function(x, k) {
  if (k>0) {
    return (c(rep(NA, k), x)[1 : length(x)] );
  }
  else {
    return (c(x[(-k+1) : length(x)], rep(NA, -k)));
  }
}

diffpad <- function(x,k){
  diff(zoo(x), na.pad=TRUE)
}

И если я буду sh, чтобы регрессировать изменение определенной переменной по отношению к определенной переменной с задержкой, мне нужно создать новые переменные в моем наборе данных следующим образом:

muf$d.abc <- diffpad(muf$abc)
muf$l.xyz <- lagpad(muf$xyz, k=1)

Прежде чем я смогу наконец регрессировать их:

lm(d.abc ~ l.xyz, data=muf)

Существуют ли пакеты R, которые помогут мне вообще пропустить первые два фрагмента кода?

1 Ответ

0 голосов
/ 03 февраля 2020

Заполнение в зоопарке не требуется, поскольку в первую очередь не требуется ручное выравнивание. Например, это регрессирует первое различие x в его первых двух лагах, давая fm2, а затем только в одно отставание, давая fm1, а затем выполняет анову между ними. Обратите внимание, что здесь anova вызывает anova.dyn, который автоматически уменьшает аргументы по сравнению с тем же вектором ответа, чтобы сделать их сопоставимыми (в противном случае вы не можете законно выполнить анову).

library(dyn)

set.seed(123)
x0 <- rnorm(10)
x <- zoo(x0)

fm2 <- dyn$lm(diff(x) ~ lag(x, -(1:2)))
fm2 
##     Call:
##     lm(formula = dyn(diff(x) ~ lag(x, -(1:2))))
##    
##     Coefficients:
##         (Intercept)  lag(x, -(1:2))1  lag(x, -(1:2))2  
## 

fm1 <- dyn$lm(diff(x) ~ lag(x, -1))
anova(fm1, fm2)
## Analysis of Variance Table
## 
## Model 1: diff(x) ~ lag(x, -1)
## Model 2: diff(x) ~ lag(x, -(1:2))
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1      6 7.4369                           
## 2      5 6.2441  1    1.1928 0.9551 0.3733

Пакет dynlm является альтернативой к дин. Это также облегчает выполнение регрессий с объектами зоопарка.

Примечание

Выше приведен вызов lag generi c в ядре R, который в свою очередь отправляет lag.zoo. Убедитесь, что у вас не загружен dplyr lag, поскольку он перезаписывает R lag версией, несовместимой с R lag. Либо не загружайте dplyr, либо он вам нужен, тогда в достаточно свежих версиях R используется library(dplyr, exclude = c("lag", "filter"))

...