Я пытаюсь выполнить следующую скользящую регрессию: stock_return = α + β market_return.
Мой набор данных "data" выглядит следующим образом:
Company Date stock_return market_return Alpha Beta
AAPL 01.01.2014 3% 4%
…
AAPL 31.12.2019 5% 1%
MSFT 01.01.2014 2% 4%
…
MSFT 31.12.2019 6% 1%
Более того, у меня есть фрейм данных с событиями, при которых должна выполняться регрессия:
Company Date
AAPL 05.02.2015
…
MSFT 04.08.2018
Я использую пакет бегуна для скользящей регрессии:
running_regression <- function(z) {
coef(lm(stock_return ~ market_return , data = as.data.frame(z)))
}
output <- runner(seq_along(data$market_return),
k = 180,
lag = 5,
at = ?
f = running_regression)
Однако я борюсь со своей функцией и с тем, что поставить в "at", чтобы просто выполнить регрессию для событий во втором кадре данных.
Пожалуйста, см. ниже минимальный пример:
Date <- seq(from = as.Date("2014-01-01"), to = as.Date("2019-12-31"), by = 'day')
Date <- format(Date, format="%d.%m.%Y")
Company.name <- c(replicate(2191, ""))
AAPL <- data.frame(Company.name = "AAPL",Date)
market_return <- c(rnorm(2191))
AAPL <- cbind(AAPL, market_return)
MSFT <- c(replicate(2191, "MSFT"))
MSFT <- data.frame(Company.name = "MSFT",Date)
MSFT <- cbind(MSFT, market_return)
df <- rbind(AAPL, MSFT)
stock_return <- c(rnorm(4382))
df <- cbind(df,stock_return)
df[,"Alpha"] <- NA
df[,"Beta"] <- NA
Company.name2 <- c(replicate(450, "AAPL"),replicate(450, "MSFT"))
Event_date <- sample(seq(as.Date('2015/01/01'), as.Date('2019/12/31'), by="day"), 900)
Event_date <- format(Event_date, format="%d.%m.%Y")
df2 <- data.frame(Company.name2, Event_date)
#____
running_regression <- function(z) {
coef(lmList(stock_return ~ market_return | Company.name, data=z))
}
runner(df$market_return,
k = 180,
lag = 5,
f = running_regression)