许多线性回归
作为我的数据分析的一部分(按时间序列),我正在检查对数收益与已实现波动率之间的相关性。
我的数据由跨越数百个不同公司(大型动物园对象,〜2 MB文件大小)的时间序列组成。 为了检查上述相关性,我使用下面的代码来计算几个滚动变化(又名已实现的波动性):
rollvar5 <- sapply(returns, rollVar, n=5, na.rm=TRUE)
rollvar10 <- sapply(returns, rollVar, n=10, na.rm=TRUE)
使用简单的fTrading函数rollVar。 然后,我将滚动变量转换为zoo对象,并添加日期索引(通过将结果导出到csv文件并手动添加日期,然后使用read.zoo - 不是很复杂,但工作得很好)。
现在我希望创建大约100个线性回归模型,每个模型将公司的对数回报与实现的波动性连接到指定的公司。 在个人的基础上,这将如下所示:
lm_rollvar5 <- lm(returns$[5:1000,1] ~ rollvar5[5:1000,1])
lm_rollvar10 <- lm(returns$[10:1000,1] ~ rollvar10[10:1000,1])
这工作没有问题。
现在我想扩展它来为所有100家公司自动创建线性回归模型。 我试过的是一个简单的for循环:
NC <- ncol(returns)
for(i in 1:NC){
lm_rollvar5 <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i])
summary(lm_rollvar5)
lm_rollvar10 <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i])
summary(lm_rollvar10)
}
有什么方法可以优化我的方法吗? (即如何以简单的方式保存所有回归结果)。 从现在开始,for-loop只输出数百个回归结果,这对分析结果是无效的。
我也尝试使用apply函数,但由于存在多个时间序列对象(返回值和滚动变量保存在不同的对象中,因此您可以看到),因此我不确定如何在此情况下使用它。
至于你的问题,你如何以简单的方式保存所有的回归结果,考虑到我们不知道你需要做什么以及你认为什么是“简单”,这有点难以回答。 但是,您可以在循环外部定义一个列表,并将每个回归模型存储在此列表中,以便以后可以访问模型而不必稍后重新设置它们。 尝试例如
NC <- ncol(returns)
lm_rollvar5 <- vector(mode="list", length=NC)
lm_rollvar10 <- vector(mode="list", length=NC)
for(i in 1:NC){
lm_rollvar5[[i]] <- lm(returns[5:1000],i] ~ rollvar5[5:1000,i])
lm_rollvar10[[i]] <- lm(returns[10:1000],i] ~ rollvar10[10:1000,i])
}
这给了你在列表中第i
位的公司i
的拟合模型。 以同样的方式,你也可以保存摘要的输出。 或者你这样做
my.summaries_5 <- lapply(lm_rollvar5, summary)
它给你一个总结清单。
链接地址: http://www.djcxy.com/p/30943.html