lapply
を使用すると、 acf
シリーズが選択されたラグ値になり、各列にrollapply
関数を操作することができます。次に、Reduce
を使用して、上記のステップの結果を組み合わせます。
このデモではデータセットedhec
をPerformanceAnalytics
から使用しています。 は、それに応じて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
あなたは "それらのどれもが動作しない" に詳しく説明でした。私たちがこの問題について助言を与えるために、あなたの投稿を[最小再現可能な例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)で更新すると、助けて。 – OdeToMyFiddle
元の投稿を例で編集しました。 – lapally