【问题标题】:rolling autocorrelation function for a R dataframeR数据帧的滚动自相关函数
【发布时间】:2017-09-03 06:20:21
【问题描述】:

我有一个 R 数据框,我需要为它的每一列计算几个滚动时间窗口的自相关。 我使用了以下解决方案

myacf=function(x,lag){
return(acf(x, na.action=na.pass,lag.max=lag)[lag])
}

for(i in 2:dim(dfres)[1]){
  print(i)
  col=rollapply(as.numeric(dfres[,i]),width=oneday,FUN=myacf,lag=oneday) 
}

其中 dfres 是一个矩阵(我排除了第一列,因为它包含时间戳),而 rollapply 来自包 zoo。 我得到以下错误:plot.window 中的错误(需要有限的 'ylim' 值)。 无论如何,我不需要绘图,只需要所选滞后中的自相关值。有人可以帮我吗?

【问题讨论】:

  • 您能否详细说明“它们都不起作用”。为了让我们就这个问题提供建议,使用minimum reproducible example 更新您的帖子可能会有所帮助。
  • 我用一个例子编辑了原帖。

标签: r dataframe time-series correlation


【解决方案1】:

使用lapply,您可以在每一列上操作rollapply 函数,从而导致 acf 系列用于选定的滞后值。然后我们使用Reduce 来合并上述步骤的结果。

我在这个演示中使用了来自PerformanceAnalytics 包的数据集edhec。你 可以相应地更改width 参数。

library("PerformanceAnalytics")

#load test dataset
data(edhec,package="PerformanceAnalytics")

#select subset with fewer columns
edhec_sub = edhec[,1:5]

fn_lag_ACF = function(lagValue = x) {


#for width as 1 year calculate acf for input lagValue for each column

acfList = lapply(edhec_sub,function(x) {


 TS = rollapply(x, width = 12,
 FUN = function(z) acf(z,na.action=na.pass,lag.max= lagValue,plot=FALSE)$acf[lagValue],
                by.column = FALSE, align = "right")
 colnames(TS) = colnames(x)             

 return(TS) 

})

#combine acf output for all columns from above step
acfMerge  = Reduce(function(x,y) merge.xts(x,y), acfList)

return(acfMerge)
}

#test with lagValue = 2
lag2DF = fn_lag_ACF(lagValue = 2)

输出:

head(lag2DF,15)
#           Convertible.Arbitrage CTA.Global Distressed.Securities Emerging.Markets
#1997-01-31                    NA         NA                    NA               NA
#1997-02-28                    NA         NA                    NA               NA
#1997-03-31                    NA         NA                    NA               NA
#1997-04-30                    NA         NA                    NA               NA
#1997-05-31                    NA         NA                    NA               NA
#1997-06-30                    NA         NA                    NA               NA
#1997-07-31                    NA         NA                    NA               NA
#1997-08-31                    NA         NA                    NA               NA
#1997-09-30                    NA         NA                    NA               NA
#1997-10-31                    NA         NA                    NA               NA
#1997-11-30                    NA         NA                    NA               NA
#1997-12-31             0.5560540 -0.3010264            0.02908761        0.3305791
#1998-01-31             0.5055951 -0.4245876            0.04278214        0.1761287
#1998-02-28             0.5195872 -0.4298767            0.01375580        0.1605579
#1998-03-31             0.5070003 -0.4656213           -0.04519778        0.2061610
#           Equity.Market.Neutral
#1997-01-31                    NA
#1997-02-28                    NA
#1997-03-31                    NA
#1997-04-30                    NA
#1997-05-31                    NA
#1997-06-30                    NA
#1997-07-31                    NA
#1997-08-31                    NA
#1997-09-30                    NA
#1997-10-31                    NA
#1997-11-30                    NA
#1997-12-31           -0.11842164
#1998-01-31           -0.05986578
#1998-02-28           -0.09663855
#1998-03-31           -0.09680819

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多