2014-06-30 145 views
0

作为我的数据分析(按时间序列)的一部分,我正在检查对数收益与已实现波动率之间的相关性。许多线性回归

我的数据由跨越数百个不同公司(大型动物园对象,〜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函数,但我不确定如何在这种情况下使用它。

回答

1

至于你的问题如何以简单的方式保存所有的回归结果,由于我们不知道你需要做什么以及你认为什么“简单”,所以这有点难以回答。但是,您可以在循环外部定义一个列表,并将每个回归模型存储在此列表中,以便以后可以访问模型而不必稍后重新设置它们。尝试

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) 

它给你一个摘要列表。

+0

使用你的方法,出现了许多警告: “项替换的数目不替换长度的倍数” 此外,当我输入摘要(lm_rollvar5 [1])的输出是不是线性的摘要回归模型(显示残差统计数据,标准误差等),但只是数据类型的总结,表示有2个系数(数字)。 – Olorun

+0

一个错字,我很抱歉。再试一次。顺便说一句,当你用'[]'对列表进行子集化时,你会得到一个列表。要检索存储在该列表中的元素,您需要使用'[[]]'。例如,'summary(lm_rollvar5 [[1]])'应该给出所需的输出。 – coffeinjunky

+0

非常感谢,完美无瑕! – Olorun