Я проверил существующие решения и не смог найти примеров, где я мог бы интегрировать задержку (в несколько дней) для выполнения скользящей регрессии в течение 60 дней. скажем (-60, -11), принимая строки в качестве ссылки на индекс.
У меня есть три столбца данных: даты, y (return_ake), x (return_cac_40). Примером может быть следующий:
Date return_ake return_cac_40
2014-01-02 NA NA
2014-01-03 -0.0091245 -0.0027052
2014-01-06 0.0083230 -0.0005976
2014-01-07 0.0041348 0.0105484
2014-01-08 0.0234186 0.0070954
2014-01-09 0.0057054 0.0017447
2014-01-10 -0.0141937 0.0012804
2014-01-13 -0.0165286 -0.0087191
2014-01-14 -0.0052142 -0.0001558
Я хотел бы добавить столбцы к моей существующей df с коэффициентами (параметр перехвата и наклона) и стандартным отклонением.
Я видел в предыдущих решениях, roll_regres был лучшим встроенным fct для реализации скользящей регрессии и добавления df с указанными выше параметрами. Однако, это не включает лаги.
temp <- roll_regres(daily_return_ake ~ daily_return_cac , DF, width = 60L, na.action=na.exclude)
tail(temp$coefs)
ПБ. хочу вынести первые 10 наблюдений.
Я попытался сделать следующее:
a- создать столбец отставания для x -> x11 и запустить roll_regres, используя значение отставания (x11) в качестве объясняющей переменной с окном 50.
DF_2 <-
DF %>%
select(date = date, daily_return_ake = daily_return_ake, daily_return_cac = daily_return_cac) %>%
mutate(lag11 = dplyr::lag(daily_return_cac, n=11, default = NA))
и применить roll_regres
temp <- roll_regres(daily_return_ake ~ lag11 , DF_2, width = 50L, na.action=na.exclude)
tail(temp$coefs)
Но он возвращает ошибку с na.action (неиспользуемый аргумент) или ошибку отсутствующих значений (при удалении). Более ранняя попытка с return_ca c приняла na.action и позволила избежать ошибки пропущенного значения.
b - переработать существующее решение Линейная регрессия с использованием только предыдущих значений в перемещающемся окне Я изменил последовательность def и адаптировал ее к своему собственному фрейму данных.
fun <- function(x) unlist(tidy(lm(as.data.frame(x)))[, -1])
new_DF <- do.call("rbind", by(DF, function(x)
cbind(x, rollapplyr(x[2:3], list(seq(from = -11, to =-60)), FUN = fun, fill = NA, by.column = FALSE))))
и здесь , У меня есть ошибки: Ошибка в unique.default (x, nmax = nmax): unique () применяется только к векторам
ожидаемый результат
Date return_ake return_cac_40 intercept X1 sd
2014-01-02 NA NA ....
2014-01-03 -0.0091245 -0.0027052
2014-01-06 0.0083230 -0.0005976
2014-01-07 0.0041348 0.0105484
2014-01-08 0.0234186 0.0070954
....
1 - кто-нибудь может подтвердить, что roll_regres с ширина скажет 60L принимает последние 60 записей, включая текущую дату? Это не совсем ясно в документации.
2 - кто-нибудь может мне помочь с отставанием? (попытки описаны выше)
Thxs