Скорее всего, обнаружит, что Я новичок в R, но в SPSS очень легко справиться с задержками. Очевидно, это ошибка пользователя, но чего мне не хватает?
x <- sample(c(1:9), 10, replace = T)
y <- lag(x, 1)
ds <- cbind(x, y)
ds
Результатов в:
x y
[1,] 4 4
[2,] 6 6
[3,] 3 3
[4,] 4 4
[5,] 3 3
[6,] 5 5
[7,] 8 8
[8,] 9 9
[9,] 3 3
[10,] 7 7
Я полагал, что увижу:
x y
[1,] 4
[2,] 6 4
[3,] 3 6
[4,] 4 3
[5,] 3 4
[6,] 5 3
[7,] 8 5
[8,] 9 8
[9,] 3 9
[10,] 7 3
Любые указания будут очень признательны.
Еще один способ справиться с этим — использовать пакет zoo, в котором есть метод задержки, дополняющий результат NA:
require(zoo)
> set.seed(123)
> x <- zoo(sample(c(1:9), 10, replace = T))
> y <- lag(x, -1, na.pad = TRUE)
> cbind(x, y)
x y
1 3 NA
2 8 3
3 4 8
4 8 4
5 9 8
6 1 9
7 5 1
8 9 5
9 5 9
10 5 5
Результатом является многомерный объект зоопарка (который является расширенным матрица), но легко преобразуется в data.frame через
> data.frame(cbind(x, y))
Просто избавься от лагов. Измените строку для y на:
y <- c(NA, x[-1])
lag
не сдвигает данные, а только сдвигает "временную базу". x
не имеет "временной базы", поэтому cbind
не работает должным образом. Попробуйте cbind (as.ts (x), lag (x))
и обратите внимание, что «запаздывание», равное 1, сдвигает периоды вперед .
Я бы предложил использовать zoo
/ xts
для временных рядов. Особенно полезны виньетки из зоопарка
.
lag()
работает с временными рядами, тогда как вы пытаетесь использовать голые матрицы. Этот старый вопрос предлагает вместо этого использовать embed
, например так:
lagmatrix <- function(x,max.lag) embed(c(rep(NA,max.lag), x), max.lag+1)
например
> x
[1] 8 2 3 9 8 5 6 8 5 8
> lagmatrix(x, 1)
[,1] [,2]
[1,] 8 NA
[2,] 2 8
[3,] 3 2
[4,] 9 3
[5,] 8 9
[6,] 5 8
[7,] 6 5
[8,] 8 6
[9,] 5 8
[10,] 8 5