Rollregres с множественной регрессией и панельными данными - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть набор данных панели:*

Возвращает ~ a + ß1 * Mkt.RF + ß3 * SMB.y + ß3 * HML.y + e

Ширина окна должна составлять 36 месяцев.

Использование rollRegresФункция работает с одной независимой переменной, но я хотел бы знать, как настроить этот пакет для трех независимых переменных.Код для получения альфа-перехвата в новом столбце с одна зависимая переменная будет выглядеть следующим образом:

Возвращает ~ a + ß1 * Mkt.RF + e

dt[, alpha:=
   roll_regres.fit(x = cbind(1, .SD[["Mkt.RF"]]), y = .SD[["return"]],
                   width = 36L)$coefs[, 1],
   by = id]

Так что я хотел бы знать, как настроить это для трех или более независимых переменных.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Чтобы дополнительно получить R² в столбце, можно использовать следующий код:

func <- function(SD){
+                     x <- roll_regres.fit(
+                      x = cbind(1, SD$Mkt.RF, SD$SMB.y, SD$HML.y), y = SD$Returns, 
+         width = 36L, do_compute = c("sigmas", "r.squareds", "1_step_forecasts"))$r.squareds}
>  dt[, c("R2") := func(.SD), by = id]

Интересно, будет ли возможно скорректированное R²?

0 голосов
/ 16 сентября 2018

Кажется, вы используете data.table, так что я тоже. Вы можете достичь того, что вы хотите, следующим образом

#####
# simulate data 
n_gr   <- 100 
n_date <- 50
n <- n_gr * n_date
id <- gl(n_gr, n_date)
date. <- rep(1:n_date, n_gr)

set.seed(39820955)
X <- matrix(rnorm(n * 3), n, 
            dimnames = list(NULL, c("Mkt.RF", "SMB.y", "HML.y")))
library(data.table)  
dt <- data.table(id = id, date1 = date., Returns = rowSums(X) + rnorm(n), X)

#####
# estimate coefficients
setkey(dt, id, date1) # sort data

library(rollRegres)
func <- function(SD){
  x <- roll_regres.fit(
    x = cbind(1, SD$Mkt.RF, SD$SMB.y, SD$HML.y), y = SD$Returns, 
    width = 36L)$coefs
  split(x, rep(1:ncol(x), each = nrow(x))) # turn matrix into list of column vectors
}
dt[, c("alpha", "b.Mkt", "b.SMB", "b.HML") := func(.SD), by = id]

tail(dt)
#R     id date1  Returns  Mkt.RF  SMB.y  HML.y  alpha b.Mkt b.SMB b.HML
#R 1: 100    45  1.08926  1.0470  0.277 -0.179 -0.355 0.854  1.25  1.09
#R 2: 100    46 -0.09738 -0.0718 -0.190  0.860 -0.318 0.813  1.26  1.06
#R 3: 100    47  0.00525  1.3981  1.618 -1.335 -0.349 0.742  1.18  1.09
#R 4: 100    48  0.65891 -0.3901 -0.239  1.558 -0.266 0.732  1.02  1.11
#R 5: 100    49 -0.18841 -0.4336  0.266  0.657 -0.265 0.761  1.06  1.14
#R 6: 100    50 -1.55515 -0.6723 -1.567  1.014 -0.275 0.769  1.08  1.14

Столбцы alpha, b.Mkt, b.SMB и b.HML являются наклонами и перехватами.

Использование функции rollRegres работает с одной независимой переменной, но я хотел бы знать, как настроить этот пакет для трех независимых переменных.

Это не правда. Функции работают для множественной регрессии. На момент написания статьи единственными примерами на страницах виньетки и руководства являются множественная регрессия ... См., Например, help("roll_regres") или vignette("Comparisons", package = "rollRegres").

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