2017-04-07 12 views
0

私はRデータフレームを持っており、いくつかのローリング時間ウィンドウのすべての列に対して自己相関を計算する必要があります。 私はdfresは(それがタイムスタンプを含んでいるので、私は最初の列を除外する)行列であり、rollapplyがパッケージ動物園からのものである以下の溶液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) 
} 

を用います。 次のエラーが表示されます。plot.windowのエラー(有限のylim値が必要)。 とにかく私はプロットは必要ありませんが、選択した遅れの自己相関の値だけです。誰か助けてくれますか?

+0

あなたは "それらのどれもが動作しない" に詳しく説明でした。私たちがこの問題について助言を与えるために、あなたの投稿を[最小再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)で更新すると、助けて。 – OdeToMyFiddle

+0

元の投稿を例で編集しました。 – lapally

答えて

0

lapplyを使用すると、 acfシリーズが選択されたラグ値になり、各列にrollapply関数を操作することができます。次に、Reduceを使用して、上記のステップの結果を組み合わせます。

このデモではデータセットedhecPerformanceAnalyticsから使用しています。 は、それに応じて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 
関連する問題