1

月末の VaR をヒストリカル方式で計算したい。私の時系列は 2000 年の初めから現在までです。十分なデータを得るには、2005 年に計算を開始する必要があります。同様のポストローリング計算が xts by monthにあり、私の場合のコードを変更しようとしました。毎月末の VaR は過去のデータを使用する必要があります。

これが私のコードです(そうでなければ時間がかかるため、ここでは2012年に始まります):

library(quantmod)
getSymbols("^GSPC",return.class = "zoo",from = "2012-01-01",to = Sys.Date())
sp500 <- Ad(GSPC)
ldr_sp500 <- Return.calculate(sp500, method = "log")
ldr_sp500 <- na.omit(ldr_sp500)
idx <- index(ldr_sp500)[endpoints(ldr_sp500, 'months')]
out <- lapply(idx, function(i) {
    as.xts(rollapplyr(as.zoo(ldr_sp500), 30, VaR))
})
sapply(out, NROW)

まず、コードに大きなエラーがあります。幅はどのくらいですか?出力をzooオブジェクトとして与えることも可能ですか? 私はこの種の関数の初心者です...履歴法ではなくガウス法を使用したくない場合は、次のようにします。

apply.monthly(as.xts(ldr_sp500), VaR, method="gaussian")

これは、重複しない期間でうまく機能するようです...

4

1 に答える 1

1

あなたのコードでは、関数 inlapplyはその引数を使用しませんi。同じこと (期間内の各日の VaR) を何度も計算しています。

さらに、 のデフォルトのメソッドVaRmodified: を指定する必要がありますmethod="historical"

当月の毎日のリターンからバリュー アット リスクを計算したい場合は、 use を使用するという提案がapply.monthly実際に機能します。

apply.monthly(ldr_sp500, VaR, method="historical")

代わりに拡大ウィンドウが必要な場合:

library(quantmod)
library(PerformanceAnalytics)
getSymbols("^GSPC", from = "2012-01-01" )
x <- Return.calculate( Ad(GSPC), method = "log" )
idx <- index(x)[endpoints(x, 'months')]
result <- sapply( idx,
  function(i) VaR( x[paste0("/",i)], method = "historical" )
)
xts( result, idx )
于 2013-05-18T17:17:52.707 に答える