【问题标题】:panel data in RR中的面板数据
【发布时间】:2012-04-05 14:34:17
【问题描述】:

我一直在与 zoo 合作,为我的时间序列数据利用滞后和差分。我没有使用由公司和日期组成的面板数据集。单独滞后每个公司然后合并结果变得非常麻烦。有没有可以在 R 中处理面板数据的好包?我目前知道plm。其他的? plm 有一个奇怪的问题,即 lag 的顺序(即 -1 与 +1)与 zoots 完全相反,因此我预见到未来会令人头疼。有没有人喜欢的包?

【问题讨论】:

    标签: r panel time-series regression


    【解决方案1】:

    ddply 函数,在 plyr 包中, 通常使这种操作无痛 (但在大型数据集上可能会很慢)。

    # Sample data
    library(quantmod)
    d <- NULL
    for(s in c("^GSPC","^N225")) {
      tmp <- getSymbols(s,auto.assign=FALSE)
      tmp <- Ad(tmp)
      names(tmp) <- "price"
      tmp <- data.frame( date=index(tmp), id=s, price=coredata(tmp) )
      d[[s]] <- tmp
    }
    d <- do.call(rbind, d)
    rownames(d) <- NULL
    
    # Sample computations: lag the prices and compute the logarithmic returns
    library(plyr)
    d <- ddply(
      d, "id", 
      mutate,
      previous_price = lag(xts(price,date)),
      log_return = log(price / previous_price)
    ) 
    

    【讨论】:

    • ddply 可以很快!您可以将其并行计算功能与 library(doMC) registerDoMC(2) 一起使用并添加 .parallel=T 参数您可以使用 .progress="text" 跟踪进度
    • @EtienneLow-Décarie:慢的(我认为这部分不能并行化)是将 data.frame 拆分为许多较小的 data.frame。我的情况看起来像这样(100 万行,100,000 个组,每个组有 1 到 1000 个元素,使用用户定义的函数而不是 max):d &lt;- data.frame(g=round(1e5*rlnorm(1e6)),x=runif(1e6)); d1 &lt;- ddply(d,"g",summarize,max(x))。以下更快:d2 &lt;- sqldf("SELECT g, MAX(x) FROM d GROUP BY g").
    • 您能否详细介绍一下并行计算基础架构?
    • 我目前正在使用 plyr 来做这些事情,它非常慢,因为我有一个大数据集(大约 4 百万行,1000 个组)
    猜你喜欢
    • 2016-06-06
    • 2014-09-12
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2020-08-02
    相关资源
    最近更新 更多