【问题标题】:Many linear regressions许多线性回归
【发布时间】:2014-08-20 12:06:13
【问题描述】:

作为我的数据分析(时间序列)的一部分,我正在检查对数回报和实际波动率之间的相关性。

我的数据包含跨越数年的时间序列,涉及大约数百家不同的公司(大型动物园对象,约 2 MB 文件大小)。为了检查上述相关性,我使用以下代码计算了几个滚动方差(也称为实际波动率):

rollvar5 <- sapply(returns, rollVar, n=5, na.rm=TRUE)
rollvar10 <- sapply(returns, rollVar, n=10, na.rm=TRUE)

使用简单的 fTrading 函数 rollVar。然后我将滚动方差转换为动物园对象并添加日期索引(通过将结果导出到 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循环只输出了数百个回归结果,在分析结果时效率很低。

我也尝试使用 apply 函数,但我不确定在这种情况下如何使用它,因为有多个时间序列对象(如您所见,返回和滚动方差保存在不同的对象中)。

【问题讨论】:

    标签: r for-loop time-series regression 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-th 位置为您提供公司i 的拟合模型。同样的方法,你也可以保存summary的输出。或者你喜欢做某事

     my.summaries_5 <- lapply(lm_rollvar5, summary)
    

    它会为您提供摘要列表。

    【讨论】:

    • 使用您的方法,出现许多警告:“要替换的项目数不是替换长度的倍数”另外,当我输入 summary(lm_rollvar5[1]) 时,输出不是线性回归模型(显示残差统计、标准误差等),但只是数据类型的摘要,说有 2 个系数(数字)。
    • 一个错字,我很抱歉。再试一次。顺便说一句,当您使用[] 子集列表时,您会得到一个列表。要检索存储在该列表中的元素,您需要使用[[]]。例如,summary(lm_rollvar5[[1]]) 应该提供所需的输出。
    • 我有一个小的后续问题:我现在想从我尝试过的 my.summaries_5 中提取所有 r-squared 值:rsquare5
    • 试试rsquare5 &lt;- sapply(my.summaries5, function(x) x$r.squared)
    • 同样的结果 :( [[1]] NULL [[2]] NULL [[3]] NULL 等等
    猜你喜欢
    • 2010-11-23
    • 2014-11-03
    • 1970-01-01
    • 2013-07-17
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    相关资源
    最近更新 更多