我目前正在对挪威股票市场上的每家公司进行回归分析,在那儿我会根据基准对每家公司的股票收益进行回归。期间是2009-2018。我设法在整个期间对每个公司进行了回归,但我也想对每个公司每个月进行回归。我们的数据集包含每月的库存回报。
原始数据集包含26000个观测值,然后我将其转换为总共390个元素(公司)的子集。
我到目前为止所做的如下:
data_subset <- by(data,data$Name, subset)
data_lm <-lapply(data_subset,function(data) lm(data$CompanyReturn~data$DJReturn))
data_coef <- lapply(data_lm, coef)
data_tabell <- matrix(0,length(data_subset),2)
for (i in 1:length(data_subset)) {
data_tabell[i,]<-coef(data_lm[[i]])
}
colnames(data_tabell)<-c("Intercept","Coefficient")
rownames(data_tabell)<-names(data_subset)
有人知道我如何指定我只想对特定时期内的公司进行回归分析,例如对每个公司每年还是每月?
预先感谢您的帮助!
答案 0 :(得分:0)
如果在这种情况下使用tidyverse
软件包,则可以轻松完成所有这些事情。假设您的数据具有以下结构,
data:
| CompanyID | CompanyName | Date | CompanyReturn | DJReturn |
|-----------|-------------|------------|---------------|----------|
| 1 | abc | 01-01-2002 | 500 | 250 |
| | | | | |
| | | | | |
使用tidyVerse
,您可以只使用group_by
创建子集并运行回归,
data %>%
group_by(CompanyID, month = month(as.Date(Date))) %>%
nest() %>%
mutate(model = map(data, ~lm(CompanyReturn ~ DJReturn, data = .)))
这将为您提供一个包含列CompanyID
,month
和model
的表,其中列model
被称为列表列,并包含相应的拟合线性回归模型