【问题标题】:Looping over two variables?循环两个变量?
【发布时间】:2017-07-03 11:08:45
【问题描述】:

早安!

我有一个相当大的(面板)数据集,其中包含 30 年期间 289 家公司的每日股票回报数据。此外,我还拥有市场投资组合相应回报的数据。

现在,我的目标是为每只股票获得一个每年的 beta 度量。因此,长度为 30 的 289 个不同的“beta 系列”。

我对 R 很陌生,但我认为存档此文件的最佳方法是循环查看公司以及年份指标。

  for (i in 1:length(unique(company), j in 1:length(unique(year))){
  data_ij <- data[which(data$company==i,data$year==j),]
  beta_ij <- lm(data_ij$RETURN ~ data_ij$MARKET)
}

但是,这似乎根本不起作用。有人可以给我一些指导吗? :)

/亚历克斯

【问题讨论】:

    标签: r loops finance


    【解决方案1】:
     for (i in 1:length(unique(company)){
       for( j in 1:length(unique(year))){
      data_ij <- data[which(data$company==i,data$year==j),]
      beta_ij <- lm(data_ij$RETURN ~ data_ij$MARKET)
       }
     }
    

    【讨论】:

      【解决方案2】:

      为什么不用嵌套循环,

      for (i in 1:length(unique(company))) {
          for (j in 1:length(unique(year))) {
              ....
           }
      }
      

      【讨论】:

        【解决方案3】:
        beta_series <- lapply(levels(data$company), 
                         function(x) lapply(unique(data$year), 
                                       function(y) lm(RETURN ~ MARKET,
                                       data = subset(data, company == x & year == y))))
        

        您可以使用嵌套的lapply() 调用来首先循环您的company 变量的级别(如果您的级别比您要分析的公司多,则可以使用unique(data$company))。在此循环中,您可以遍历独特的年份,并在当前迭代定义的 subset 上调用 lm()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-11
          • 1970-01-01
          • 2013-09-10
          • 2016-12-13
          • 2016-10-31
          • 2017-02-27
          • 2014-03-29
          • 2017-03-01
          相关资源
          最近更新 更多