首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回归方程中的rollapply应用问题

回归方程中的rollapply应用问题
EN

Stack Overflow用户
提问于 2019-09-28 19:56:21
回答 1查看 114关注 0票数 0

我正在处理每日股票数据,并试图从t-11个月时间窗口的每日股票数据中计算月β值(例如,Dec的beta值包含从1月到12月的每日股票数据)。另外,我想在回归方程中包含至少150个观测值。->Link to data screenshot

我想通过计算过去12个月超额股票回报率的回归系数来计算β值。我的样本数据列出了每只股票的超额回报(股票按一个数字分类)和最后一栏中的市场回报mktrf。

我想出了以下代码,但不幸的是我找不到错误:我在过去的12个月中使用了width=252,但还没有在代码中包含至少150个观察的先决条件。当股票被退市时,我也遇到了NAs的麻烦。我已经搜索了论坛,我只能在答案中找到相同的代码,所以我不知道我做错了什么。

代码语言:javascript
复制
rollingbeta <- rollapply(joined_data,
                     width=252,
                     FUN = function(x) {
                       t = lm(formula=paste0(" ` ", x , " ` ~ mktrf"), data = x, na.rm=T);
                       return(t$coef) },
                     by.column=TRUE, 
                      align="right")

理想情况下,我希望以与输入表相同的数据格式查找输出。

对此有什么想法吗?会很感激你的帮助!

下面是用dput创建的示例:

结构(Date=structure(Date= structure(c(16804,16805,16806,16807,16808,16811,16812,16813,16814,16815),class = "Date"),10001 = c(NA,-0.0132978723404255,0.0132978723404255,0.0132978723404255,10001=c),93436 =c,93436= c(NA,8.95215075422673e-05,-05,-0.0215627173661025,-0.0215627173661025)。-0.0149289099526067,0.0101996632186674,-0.0460065723674811,0.0293045779042485,-0.00577165583470751),mktrf = c(-0.0159,0.0012,-0.0135,-0.0244,-0.0111,-6e-04,0.0071,-0.0267,0.0165,-0.0214),row.names = c(NA,10L),class =“data.frame”

EN

回答 1

Stack Overflow用户

发布于 2019-09-28 20:22:12

我无法读取您的数据,但是使用BOD (即R附带的),我们使用5行窗口执行滚动回归,如果5行不可用,则使用可用的行数,前提是至少有3行可用。此外,我们检查至少有3个完整的案例。

我们使用宽度向量而不是单一宽度来完成上述操作。此向量指示要使用的行数。如果至少有5行可用,我们使用5,否则使用可用行数;但是,如果可用行数小于3,则使用3,这将导致为该行生成NAs。

coefs中,我们还检查是否有少于3个完整的情况,如果有,则返回NAs。

代码语言:javascript
复制
library(zoo)

n <- nrow(BOD)  # 6
w <- pmax(pmin(1:n, 5), 3)  # 3 3 3 4 5 5

coefs <- function(x) {
  if (sum(complete.cases(x)) >= 3) coef(lm(as.data.frame(x))) else c(NA, NA)
}
rollapplyr(BOD[2:1], w, coefs, by.column = FALSE, fill = NA)

给予:

代码语言:javascript
复制
     (Intercept)     Time
[1,]          NA       NA
[2,]          NA       NA
[3,]    1.833333 5.350000
[4,]    5.450000 3.180000
[5,]    7.750000 2.030000
[6,]   10.674324 1.301351

这也提供了同样的信息:

代码语言:javascript
复制
rbind(c(NA, NA), 
      c(NA, NA), 
      coefs(BOD[1:3, 2:1]), 
      coefs(BOD[1:4, 2:1]), 
      coefs(BOD[1:5, 2:1]), 
      coefs(BOD[2:6, 2:1]))

更新

添加的较短的dput输出给出了语法错误,但这一次它足够短,所以我能够将它编辑成可以工作的东西(请参阅最后的备注)。

我们使用8的宽度,或者如果可用的宽度小于8,我们至少使用4,否则我们返回NAs。另外,如果coefs的话,我们至少要使用3种完整的情况。

我们将DF转换成一个动物园对象,并假设最后一列(第3列)是因变量,其余2列是自变量。

代码语言:javascript
复制
library(zoo)

n <- nrow(DF)  # 10
w <- pmax(pmin(1:n, 8), 4)  #  [1] 4 4 4 4 5 6 7 8 8 8


coefs <- function(x) {
  if (sum(complete.cases(x)) >= 3) coef(lm(as.data.frame(x))) else c(NA, NA)
}

z <- read.zoo(DF)[, c(3, 1, 2)]
rollapplyr(z, w, coefs, by.column = FALSE, fill = NA)

给这个动物园的对象:

代码语言:javascript
复制
            (Intercept)     `10001`    `93436`
2016-01-04           NA          NA         NA
2016-01-05           NA          NA         NA
2016-01-06           NA          NA         NA
2016-01-07 -0.031077046 -2.44567879 -2.7398798
2016-01-08 -0.034601587 -2.65028219 -3.2757924
2016-01-11  0.003069533  0.35951677  1.2452355
2016-01-12 -0.001737647  0.15052197  0.7341502
2016-01-13 -0.001773568  0.09143210  0.5979455
2016-01-14 -0.001173643  0.07543222  0.6164919
2016-01-15 -0.005337689  0.28461054  0.6305395

备注

代码语言:javascript
复制
DF <- structure(list(date = structure(c(16804, 16805, 16806, 16807, 
16808, 16811, 16812, 16813, 16814, 16815), class = "Date"), `10001` = c(NA, 
-0.0132978723404255, 0.0148247978436657, 0.0146082337317397, 
0.0196335078534031, 0.0346598202824133, 0.0235732009925558, 0, 
-0.0145454545454544, -0.0172201722017221), `93436` = c(NA, 8.95215075422673e-05, 
-0.0196482119679542, -0.0154766252739225, -0.0215627173661025, 
-0.0149289099526067, 0.0101996632186674, -0.0460065723674811, 
0.0293045779042485, -0.00577165583470751), mktrf = c(-0.0159, 
0.0012, -0.0135, -0.0244, -0.0111, -6e-04, 0.0071, -0.0267, 0.0165, 
-0.0214)), row.names = c(NA, 10L), class = "data.frame")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58149846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档