r - скользящая линейная регрессия с заданным окном - PullRequest
0 голосов
/ 02 марта 2020

Я проверил существующие решения и не смог найти примеров, где я мог бы интегрировать задержку (в несколько дней) для выполнения скользящей регрессии в течение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...