Скользящая корреляция с параметром «сгруппировано по» — ошибка: неправильное количество измерений

Я пытаюсь рассчитать скользящие корреляции с пятилетним окном на основе ежедневных данных о запасах. Мой фрейм данных 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

Мы будем очень признательны за любую помощь в том, как исправить эти ошибки или альтернативные способы расчета скользящей корреляции по группам.

Обновлено: Спасибо Г. Гротендику за указание на некоторые недостатки в моем вопросе. Я имею в виду его ответ для воспроизводимого ввода и буду помнить об этом для дальнейших сообщений.

Пробовали x[, "logRet3"]?

demarsylvain 22.05.2019 12:14

@demarsylvain: я только что попробовал, и это все еще приводит к первой ошибке, упомянутой выше.

bajk2019 22.05.2019 13:05
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
2
356
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть несколько проблем:

  • rollapply применяется к каждому столбцу отдельно, если не используется by.column = FALSE.

  • использование test внутри group_by не приведет к подмножеству test. Он будет относиться ко всему набору данных. Вместо этого используйте имена отдельных столбцов.

  • имена столбцов в коде вопроса должны быть заключены в кавычки; в противном случае он говорит, что существуют переменные с этими именами, содержащие имена столбцов.

  • при публикации в SO вам нужно свести свою проблему к полному воспроизводимому примеру и опубликовать это. На этот раз я сделал это для вас в примечании в конце.

Со ссылкой на примечание используйте этот код:

library(dplyr)
library(zoo)

mycor <- function(x) cor(x[, 1], x[, 2])
DF %>%
  group_by(stock) %>%
  mutate(Cor = rollapplyr(cbind(a, b), 4, mycor, by.column = FALSE, fill = NA)) %>%
  ungroup

или этот код, который использует только зоопарк. mycor сверху.

library(zoo)

n <- nrow(DF)
roll <- function(i) rollapplyr(DF[i, c("a", "b")], 4, mycor, by.column = FALSE, fill = NA)
transform(DF, Cor = ave(1:n, stock, FUN = roll))

Примечание

Вход в воспроизводимой форме:

DF <- data.frame(stock = rep(LETTERS[1:2], each = 6), a = 1:6, b = (1:6)^3)

Другие вопросы по теме