Кажется, вы используете 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")
.