【问题标题】:Linear regression for multivariate time series in RR中多元时间序列的线性回归
【发布时间】:2014-09-11 22:36:50
【问题描述】:

作为数据分析的一部分,我使用线性回归分析来检查我是否可以使用今天的数据预测明天的价值。

我的数据是大约 100 个公司回报的时间序列。到目前为止,这是我的代码:

returns <- read.zoo("returns.csv", header=TRUE, sep=",", format="%d-%m-%y")
returns_lag <- lag(returns)
lm_univariate <- lm(returns_lag$companyA ~ returns$companyA)

这没有问题,现在我希望对 100 家公司中的每家公司进行线性回归。由于手动设置每个线性回归模型会花费太多时间,因此我想使用某种循环(或应用函数)来缩短过程。

我的做法:

test <- lapply(returns_lag ~ returns, lm)

但这会导致错误““test2”中出现意外符号”,因为那里无法识别波浪号。

所以,基本上我想对每家公司分别进行线性回归。

唯一看起来与我想要的相似的问题是 Linear regression of time series over multiple columns ,但是那里的数据似乎存储在一个矩阵中,并且与我正在寻找的代码示例相比,代码示例相当混乱。

【问题讨论】:

    标签: r time-series linear-regression


    【解决方案1】:

    当您知道要包含在回归中的变量的确切名称时,公式非常有用。当您遍历值时,它们并不是那么好。这是一个使用索引为每次迭代提取感兴趣的列的示例

    #sample data
    x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1
    returns <- zoo(cbind(companya=rnorm(10), companyb=rnorm(10)), x.Date)
    returns_lag <- lag(returns)
    
    $loop over columns/companies
    xx<-lapply(setNames(1:ncol(returns),names(returns)), function(i) {
        today <-returns_lag[,i]
        yesterday <-head(returns[,i], -1)
        lm(today~yesterday) 
    })
    xx
    

    这会将每列的结果作为列表返回。

    【讨论】:

      【解决方案2】:

      使用 dyn 包(加载 zoo)我们可以这样做:

      library(dyn) 
      z <- zoo(EuStockMarkets) # test data
      
      lapply(as.list(z), function(z) dyn$lm(z ~ lag(z, -1)))
      

      【讨论】:

      • 这看起来真的很有用。为什么我在搜索时间序列回归时从未找到 dyn 库。