Каков наиболее эффективный способ сделать матрицу запаздывающих переменных в R для произвольной переменной (т.е. не регулярного временного ряда)
Например:
Ввод
x <- c(1,2,3,4)
2 лага, вывод:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
Каков наиболее эффективный способ сделать матрицу запаздывающих переменных в R для произвольной переменной (т.е. не регулярного временного ряда)
Например:
Ввод
x <- c(1,2,3,4)
2 лага, вывод:
[1,NA, NA]
[2, 1, NA]
[3, 2, 1]
[4, 3, 2]
Вы можете добиться этого, используя встроенную функцию embed()
, где ее второй аргумент "размерность" эквивалентен тому, что вы назвали "lag":
x <- c(NA,NA,1,2,3,4)
embed(x,3)
## returns
[,1] [,2] [,3]
[1,] 1 NA NA
[2,] 2 1 NA
[3,] 3 2 1
[4,] 4 3 2
embed()
обсуждался в предыдущем ответе от Joshua Reich. (Обратите внимание, что я добавил x с NA, чтобы воспроизвести желаемый результат).
Это не особенно хорошо названный, но он весьма полезен и эффективен для операций с раздвижными окнами, такими как скользящие суммы и скользящие средние.
Используйте подходящие class
для ваших объектов; база R имеет ts
, которая имеет функцию lag()
для работы. Обратите внимание, что эти объекты ts
пришли из времени, когда "дельта" или "частота", где постоянны: ежемесячные или квартальные данные, как в макроэкономических рядах.
Для нерегулярных данных, таких как (business-) ежедневно, используйте zoo или xts, которые также могут обрабатывать (очень хорошо!) с задержками. Чтобы идти дальше оттуда, вы можете использовать такие пакеты, как dynlm или dlm позволяют использовать модели динамической регрессии с задержками.
В представлениях задач по временным рядам, эконометрике, финансам есть дополнительные указатели.
Функция running
в пакете gtools
делает более или менее то, что вы хотите:
> require("gtools")
> running(1:4, fun=I, width=3, allow.fewer=TRUE)
$`1:1`
[1] 1
$`1:2`
[1] 1 2
$`1:3`
[1] 1 2 3
$`2:4`
[1] 2 3 4
Метод, который лучше всего подходит для меня
заключается в использовании функции lag
из пакета dplyr
.
Пример:
> require(dplyr)
> lag(1:10, 1)
[1] NA 1 2 3 4 5 6 7 8 9
> lag(1:10, 2)
[1] NA NA 1 2 3 4 5 6 7 8