У меня есть список, содержащий 29 временных рядов - список называется «lRet»
Мне нужно отложить все серии на один период времени и вычислить первую автокорреляцию. Затем мне нужно сохранить эти 29 чисел в 6-м столбце матрицы.
> head(lRet$TRV)
TRV.Adjusted
2018-01-03 0.3177055
2018-01-04 0.0000000
2018-01-05 -0.1814193
2018-01-08 -0.5386908
2018-01-09 0.7729854
2018-01-10 -0.2721412
> head(lag(lRet$TRV))
TRV.Adjusted
2018-01-03 NA
2018-01-04 0.3177055
2018-01-05 0.0000000
2018-01-08 -0.1814193
2018-01-09 -0.5386908
2018-01-10 0.7729854
Автокорреляция - это просто корреляция между двумя сериями выше. Мне нужно сделать это для всех 29 серий (выше всего 1).
DescStat[,6] <- diag(cor(lRet[-1], lag(lRet, 1)[-1]))
, где я удалил первое наблюдение, так как оператор задержки генерирует «NA» в качестве первой записи. Это не работает, потому что "x has to be numeric"
(ошибка в R). Я использую diag
, потому что cor
создает матрицу, и мне нужна только корреляция с самой акцией, а не корреляция между акциями.
Затем я попытался изменить все значения в списке на числовые значения с помощью "as.numeric ":
DescStat[,6] <- diag(cor(sapply(lRet, as.numeric)[-1], sapply(lag(as.numeric(lRet),1))[-1]))
, но я получаю ошибку" (список), не может быть приведен к типу "double" ", который я интерпретирую как мой список, все еще являющийся списком .....
Я чувствую себя так близко ... что я делаю не так? Есть ли невероятно простой способ сделать это?