微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

滚动回归 4 年的每日数据,每个新回归和不同的因变量向前移动一个月

如何解决滚动回归 4 年的每日数据,每个新回归和不同的因变量向前移动一个月

我有 5 个自变量(附加数据中的 B-F 列)和一些因变量(附加数据中的 G-M 列),我需要针对所有独立变量对每个因变量进行多元回归。回归必须有 4 年的数据窗口,并且必须为每个新估计提前一个月。我需要提取系数并对每个系数进行 vasicek 调整(截距除外)。这种调整只是:

adjustment of betas

数据看起来像

Data organization

整个数据是:

Data.xls

自变量放在 B-F 列中,因变量放在 G-M 列中。我一直在努力解决这个问题,我已经构建了两部分代码。首先,我提取了每个因变量的回归系数,并根据 vasicek 调整对它们进行了调整,但不使用我需要的移动窗口:

depvar <- c("LYB_UN_Equity","AXP_UN_Equity","VZ_UN_Equity","Avgo_UW_Equity","BA_UN_Equity","CAT_UN_Equity","JPM_UN_Equity")
regresults <- lapply(depvar,function(dv) {
tmplm <- lm(get(dv) ~ Mkt + SMB + HML + RMW + CMA,data=newdata
#,subset=(Newdata$Fecha > "1996-01-01" & Newdata$Fecha < "1999-12-31"),na.action = na.exclude )
 k=length(tmplm$cofficients)-1
 SSE=sum(tmplm$residuals**2)
 n=length(tmplm$residuals)
 SE=sqrt(SSE/(n-(1-k))
coef(tmplm)*(summary(tmplm)$coef[,2]/SE+summary(tmplm)$coef[,2]) +coef(tmplm)*(SE/SE+summary(tmplm)$coef[,2])
})


allresults <- data.frame(depvar = depvar,do.call(rbind,regresults))
names(allresults)[2] <- "intercept"
allresults}

它有效,但正如我所说,我需要 4 年每日数据的滚动窗口,每个新估计都会提前一个月,所以我尝试使用嵌套 for 循环,但它没有用:

for (j in 1:7) {
for (i in 1:length(newdata)) {
 #try(
  Model<-lm(newdata[seq(i,1056,24),j+6] ~ newdata[seq(i,2:6])
  #,silent=T)
betas <- as.matrix(coefficients(Model))
}}

错误是:

Error in model.frame.default(formula = newdata[seq(i,j + 6] ~  :  invalid type (list) for variable 'newdata[seq(i,j + 6]'

我是初学者,非常感谢您的帮助

解决方法

问题中没有足够的数据来运行 4 年,并且因变量的值缺失,所以这里是一个使用 w 3 个月(而不是 4 年)和一个简化的示例可以通过更改输入和 reg 来调整的一组统计信息。

请注意,yearmon 类将仅由年和月组成的日期存储为年 + 分数,其中分数 = 0、1/12、...、11/12 表示一月、二月、...、十二月,因此w 个月的间隔是 w/12。

library(zoo)

# inputs
set.seed(123)
ndata <- data.frame(date = as.Date("2000-01-01") + 0:365,z = rnorm(366))
A <- sqrt(0:365)
B <- (0:365)^0.25
w <- 3 # number of trailing months to regress over
depvars <- c("A","B")
indep <- c("date","z")

reg <- function(ym_,depvar,indep,data,w,ym) {
  ok <- ym > ym_ - w/12 & ym <= ym_
  fo <- reformulate(indep,depvar)
  fm <- lm(fo,subset = ok)
  co <- coef(fm)
  n <- nobs(fm)
  c(co,n = n)
}

ym <- as.yearmon(ndata$date)
ym_u <- tail(unique(ym),-(w-1))

L <- Map(function(depvar) {
  data.frame(yearmon = ym_u,t(sapply(ym_u,reg,depvar = depvar,indep = indep,data = ndata,w = w,ym = ym)),check.names = FALSE)
},depvars)

L

给出以下数据框列表,其中 yearmon 是执行回归的 w 个月期间最后一个月的年和月,n 是该期间的天数。

$A
    yearmon (Intercept)       date             z  n
1  Mar 2000   -931.0836 0.08520186 -3.783475e-02 91
2  Apr 2000   -645.7504 0.05930666  5.638294e-03 90
3  May 2000   -536.6141 0.04942836  3.528984e-03 92
4  Jun 2000   -468.3192 0.04326379 -6.769498e-03 91
5  Jul 2000   -420.6956 0.03897671 -7.307754e-05 92
6  Aug 2000   -384.5289 0.03573000  1.343427e-03 92
7  Sep 2000   -356.8805 0.03325475 -1.272157e-03 92
8  Oct 2000   -333.4633 0.03116400  1.980825e-03 92
9  Nov 2000   -314.3980 0.02946651  2.223839e-04 91
10 Dec 2000   -298.0596 0.02801567 -2.949753e-04 92

$B
    yearmon (Intercept)        date             z  n
1  Mar 2000  -206.66238 0.019006840 -7.802128e-03 91
2  Apr 2000  -110.66468 0.010294703  1.301456e-03 90
3  May 2000   -83.11581 0.007801199  8.920903e-04 92
4  Jun 2000   -67.34099 0.006377318 -1.520903e-03 91
5  Jul 2000   -57.03138 0.005449255 -1.435477e-05 92
6  Aug 2000   -49.58352 0.004780660  2.702669e-04 92
7  Sep 2000   -44.11908 0.004291454 -2.438281e-04 92
8  Oct 2000   -39.65054 0.003892493  3.683646e-04 92
9  Nov 2000   -36.12215 0.003578342  4.162776e-05 91
10 Dec 2000   -33.18009 0.003317091 -5.103712e-05 92

或者如果首选数据框,则:

dplyr::bind_rows(L,.id = "depvar")

给予:

   depvar  yearmon (Intercept)        date             z  n
1       A Mar 2000  -931.08360 0.085201863 -3.783475e-02 91
2       A Apr 2000  -645.75036 0.059306657  5.638294e-03 90
3       A May 2000  -536.61413 0.049428357  3.528984e-03 92
4       A Jun 2000  -468.31918 0.043263786 -6.769498e-03 91
5       A Jul 2000  -420.69558 0.038976709 -7.307754e-05 92
6       A Aug 2000  -384.52887 0.035729997  1.343427e-03 92
7       A Sep 2000  -356.88052 0.033254748 -1.272157e-03 92
8       A Oct 2000  -333.46329 0.031163998  1.980825e-03 92
9       A Nov 2000  -314.39800 0.029466506  2.223839e-04 91
10      A Dec 2000  -298.05960 0.028015670 -2.949753e-04 92
11      B Mar 2000  -206.66238 0.019006840 -7.802128e-03 91
12      B Apr 2000  -110.66468 0.010294703  1.301456e-03 90
13      B May 2000   -83.11581 0.007801199  8.920903e-04 92
14      B Jun 2000   -67.34099 0.006377318 -1.520903e-03 91
15      B Jul 2000   -57.03138 0.005449255 -1.435477e-05 92
16      B Aug 2000   -49.58352 0.004780660  2.702669e-04 92
17      B Sep 2000   -44.11908 0.004291454 -2.438281e-04 92
18      B Oct 2000   -39.65054 0.003892493  3.683646e-04 92
19      B Nov 2000   -36.12215 0.003578342  4.162776e-05 91
20      B Dec 2000   -33.18009 0.003317091 -5.103712e-05 92

注意

我不清楚问题中统计计算的意图。我确实在 this document 的第 8 页顶部找到了公式,但它似乎与问题中提到的有所不同。无论如何,至少似乎问题中的代码需要对某些未平方的项目进行平方,并注意 coef(fm)sigma(fm)diag(vcov(fm)) 是系数,残差标准误和系数标准误的平方。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?