Отстающие переменные в R - PullRequest
11 голосов
/ 21 августа 2009

Каков наиболее эффективный способ сделать матрицу из лаговых переменных в R для произвольной переменной (т.е. не регулярного временного ряда)

Например:

Input

x <- c(1,2,3,4) 

2 лага, вывод :

[1,NA, NA]
[2, 1, NA]
[3, 2,  1]
[4, 3,  2]

Ответы [ 4 ]

21 голосов
/ 21 августа 2009

Этого можно добиться с помощью встроенной функции embed(), где ее второй аргумент «размерность» эквивалентен тому, что вы назвали «лагом»:

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() обсуждалось в предыдущем ответе Джошуа Рейха. (Обратите внимание, что я добавил х с символами NA, чтобы воспроизвести желаемый результат).

Он не особо хорошо назван, но он довольно полезен и эффективен для операций с скользящими окнами, таких как скользящие суммы и скользящие средние.

8 голосов
/ 21 августа 2009

Используйте правильные class для ваших объектов; база R имеет ts, которая имеет функцию lag() для работы. Обратите внимание, что эти ts объекты появились в то время, когда «дельта» или «частота» были постоянными: ежемесячные или квартальные данные, как в макроэкономических рядах.

Для нестандартных данных, таких как (бизнес-) ежедневно, используйте пакеты zoo или xts , которые также могут (очень хорошо!) Работать с лагами. Чтобы пойти дальше, вы можете использовать пакеты типа dynlm или dlm , позволяющие модели динамической регрессии с лагами.

Виды задач по временным рядам, эконометрике, финансам имеют дополнительные указатели.

2 голосов
/ 21 августа 2009

Функция 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
1 голос
/ 29 июня 2015

метод, который работает лучше всего для меня использовать функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...