Я пытаюсь рассчитать скользящие корреляции с пятилетним окном на основе ежедневных данных о запасах. Мой фрейм данных test
состоит из 20 столбцов, причем "logRet3"
находится в столбце № 17 и "logMarRet3"
в № 18. Я хочу рассчитать соотношение этих двух показателей возврата.
Что затрудняет, так это то, что я хочу, чтобы скользящая корреляция была сгруппирована по моему показателю доли "PERMNO"
в столбце № 1. Под этим я подразумеваю, что скользящая корреляция «перезапускается» всякий раз, когда заканчиваются данные временных рядов конкретного запаса.
В ходе исследования я придумал следующий код, используя пакеты dplyr
, zoo
и magrittr
:
test <- test %>%
group_by(PERMNO) %>%
mutate(CorSecMar = zoo::rollapply(test, width = 1255, function(x) cor(x[,logRet3], x[,logMarRet3]), fill = NA, align = "right"))
Однако, когда я запускаю этот код, я получаю следующую ошибку:
Error in x[,logMarRet3]: Incorrect number of dimensions
Будучи новичком, я попытался настроить код, удалив ,
:
test <- test %>%
group_by(PERMNO) %>%
mutate(CorSecMar = zoo::rollapply(test, width = 1255, function(x) cor(x[logRet3], x[logMarRet3]), fill = NA, align = "right"))
, приводящий к следующей ошибке (перевод на английский):
Error in x[logMarRet3]: Only zeros are allowed to be mixed with negative indices
Любая помощь в том, как исправить эти ошибки или альтернативные способы расчета скользящей корреляции по группам, будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Спасибо Г. Гротендик за то, что указал на некоторые недостатки в моем вопросе. Я имею в виду его ответ для воспроизводимого ввода и учту это для дальнейших сообщений.