Скользящая регрессия за 36 месяцев, минимум 24 наблюдения - PullRequest
1 голос
/ 17 июня 2020

Например, предположим, что данные начинаются с января 1999 г., а затем для выполнения первой регрессии в 36-месячном окне с января 1999 г. по декабрь 2001 г. требуется, чтобы выходные данные приходили только в том случае, если доступны данные как минимум за 24 месяца. В противном случае эту акцию следует пропустить для данной конкретной регрессии. Следующая скользящая регрессия начнется с февраля 1999 г. и закончится в январе 2002 г. (с учетом минимального количества наблюдений) и так далее до марта 2020 г. Поскольку это ежемесячная скользящая регрессия, результаты регрессии будут сообщаться ежемесячно, начиная с декабря. С 2001 по март 2020 года. Требуемое уравнение регрессии, которое необходимо запустить:

E (ri) = α + β1 (rmt) + β2 (rmt-1) + ut

E (ri) = ожидаемая избыточная доходность по ценным бумагам α = точка пересечения, β1 = коэффициент избыточной рыночной доходности, β2 = коэффициент отложенной избыточной рыночной доходности, rm t = избыточная доходность на рынках в момент времени t, rm t-1 = избыточная доходность на рынке в момент времени t-1, ut = срок ошибки

Приведенный ниже код был запущен, но он не учитывает посещение нескольких акций и не проверяет условие

Использование этого в R studio

library(ggplot2)
library(tseries)

spy <- get.hist.quote(instrument="SPY", start="2003-01-01",
                      end=Sys.Date(), quote="AdjClose",
                      provider="yahoo", origin="1970-01-01",
                      compression="d", retclass="zoo")
ief <- get.hist.quote(instrument="IEF", start="2003-01-01",
                      end=Sys.Date(), quote="AdjClose",
                      provider="yahoo", origin="1970-01-01",
                      compression="d", retclass="zoo")
z <- merge.zoo(spy,ief)

rollingbeta <- rollapply(z.logrtn,
                         width=262,
                         FUN = function(Z)
                         {
                           t = lm(formula=SPY~IEF, data = as.data.frame(Z), na.rm=T);
                           return(t$coef)
                         },
                         by.column=FALSE, align="right")

enter image description here

1 Ответ

0 голосов
/ 17 июня 2020

Рекомендую раннер пакет. Существует пример скользящей регрессии в зависимости от даты в виньетки. Ваш пример может быть решен следующим образом:

# work with df
df <- as.data.frame(z)
df$date <- as.Date(rownames(df))

# calculate rolling coefficients 
library(runner)
df$intercept <- runner(
  df,
  idx = "date",
  k = "36 months",
  f = function(x) {
    if (nrow(x) < 24) return(NA)
    t <- lm(Adjusted.spy ~ Adjusted.ief, x)
    t$coef[1]
  }  
)


df$slope <- runner(
  df,
  idx = "date",
  k = "36 months",
  f = function(x) {
    if (nrow(x) < 24) return(NA)
    t <- lm(Adjusted.spy ~ Adjusted.ief, x)
    t$coef[2]
  }  
)


plot(y = df$slope, x = df$date)

enter image description here

...