10

ローリング20期間の過去のボラティリティを計算しようとしています。私は毎日の返品を受け取ります:

ret<-ROC(data1)

次に、rollapplyを使用して、各列の20日間のHVを取得します。

vol<-rollapply(ret,20,sd,by.column=T,fill=NA)

問題は、volの観測値が10日後に表示され始めることです。これは、私が20を指定したのとは間違っています。

ここでのデモンストレーションのために、データのサンプルがあります:

0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821,
0.007853403,-0.012987013,  0.007894737,  0.015665796,  0.000000000, -0.002570694,
0.002577320, -0.015424165, 0.002610966,  0.010416667,  0.002577320,  0.015424165, 
0.000000000, -0.002531646, -0.002538071, 0.030534351,  0.014814815, -0.007299270,
-0.009803922, -0.012376238,  0.002506266, -0.015000000,-0.002538071,  0.002544529

上記のデータがxに格納されていると仮定すると、次のようになります。

rollapply(x,20,sd,fill=NA)

20ではなく10行目に最初の観測値が生成されます。また、sdも間違っています。

私はここで何かが欠けているはずです...

4

2 に答える 2

24

align='right'デフォルトであるを使用する代わりにalign='center'、またはを使用する代わりに、デフォルトとして持つラッパーをrollapply使用する必要があります。rollapplyralign='right'

差出人?rollapply

alignは、結果のインデックスを、観測のローリングウィンドウと比較して、左揃えにするか、右揃えにするか、中央揃えにするか(デフォルト)を指定します。この引数は、widthが幅を表す場合にのみ使用されます。

ただし、個人的には、コンパイルされたコードを使用し、高速になるためrunSDTTRパッケージから使用します。

これらのいずれかが期待どおりに機能するはずですが、2番目の方が高速になります。

library(zoo)
rollapply(x, 20, sd, fill=NA, align='right')

library(TTR)
runSD(x, 20)
于 2012-11-06T01:43:33.787 に答える
4

ローリングウィンドウにR関数を適用するには、ランナーrunnerパッケージの関数をお勧めします。以下の出力は。と同じです。runnerzoo

library(runner)

runner(
  x, 
  function(x) sd(x),
  k = 20, 
  na_pad = TRUE
)


runner出力を再現できzoo、不等間隔のデータやその他の処理などのオプションもあります(詳細については、ドキュメントやビネットを参照してください)。

library(runner)
library(zoo)

x <- c(0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821,
       0.007853403,-0.012987013,  0.007894737,  0.015665796,  0.000000000, -0.002570694,
       0.002577320, -0.015424165, 0.002610966,  0.010416667,  0.002577320,  0.015424165, 
       0.000000000, -0.002531646, -0.002538071, 0.030534351,  0.014814815, -0.007299270,
       -0.009803922, -0.012376238,  0.002506266, -0.015000000,-0.002538071,  0.002544529)

identical(
  runner(x, sd, k = 20, na_pad = TRUE),
  rollapply(x, 20, sd, fill = NA, align = "right")
)

# centered alignment
identical(
  runner(x, sd, k = 20, lag = -10, na_pad = TRUE),
  rollapply(x, 20, sd, fill = NA, align = "center")
)
于 2020-01-27T17:10:55.087 に答える