Как отложить серию списка и применить функцию к каждой серии - PullRequest
1 голос
/ 03 октября 2019

У меня есть список, содержащий 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" ", который я интерпретирую как мой список, все еще являющийся списком .....

Я чувствую себя так близко ... что я делаю не так? Есть ли невероятно простой способ сделать это?

1 Ответ

1 голос
/ 04 октября 2019

Вы были близки. Ответ намного проще. Просто используйте sapply(), чтобы применить функцию к каждому элементу в списке. Так как ваш список имеет доходность акций как отдельные элементы, вам не нужно использовать diag(). Просто используйте sapply(), чтобы применить код корреляции, который вы имеете к каждому элементу в списке. sapply() возвращает фрейм данных, поэтому он заполнит строки в шестом столбце значениями.

DescStat[,6] <- sapply(lRet, function(x) x <- cor(x[-1], lag(x, 1)[-1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...