Rollaplly для временных рядов

У меня есть набор данных с 358 строк, быстрый взгляд выглядит следующим образом

>        unempts gdpts
> [1,]    7.03   4.2
> [2,]    7.17   3.7
> [3,]    6.97   3.2
> [4,]    6.83   2.9
> [5,]    6.60   2.7
> [6,]    6.27   3.4

Мне нужно запустить регрессию столбца 1 в столбце 2 для 60 скользящих окон и сохранить все результаты в матрице, чтобы я мог построить то же самое и запустить HAC,

Я попробовал следующее:

regRO <- rollapply(datam, 60, lm, by.column = TRUE,fill=NA)

но получите ошибку следующим образом

Ошибка в form.default(объект, env = baseenv()): неверная формула

Посоветуйте пожалуйста что нужно поменять.

1 ответ

Решение

Вы должны указать вызов функции явно, чтобы X сначала преобразуется в фрейм данных, чтобы удовлетворить входные требования lm:

library(zoo)

set.seed(123) # ensure runif in next line uses same random numbers each time run
datam <-matrix(runif(200),ncol=2)

out <- rollapplyr(datam,
          width = 60,
          FUN = function(X) coef(lm(as.data.frame(X))),
          by.column=FALSE,
          fill = NA) # omit fill=NA if NA rows not wanted

давая:

> tail(out)
       (Intercept)         V2
[95,]    0.5071618 -0.1041905
[96,]    0.5015140 -0.1032419
[97,]    0.5196683 -0.1404855
[98,]    0.5171599 -0.1401534
[99,]    0.5122871 -0.1288700
[100,]   0.5176396 -0.1297019
Другие вопросы по тегам