3

またはオブジェクトに対してローリング計算を実行できるzoo関数に精通しており、パラメーターを使用してローリング増分を指定できます。私は特に毎月関数を適用することに興味がありますが、計算には過去の毎日のデータをすべて使用します。たとえば、私のデータセットは次のようになります。rollapplyzooxtsby

dte, val
1/01/2001, 10
1/02/2001, 11
...
1/31/2001, 2
2/01/2001, 54
2/02/2001, 34
...
2/30/2001, 29

apply月末と日次データをすべて使用する機能を選択したいと思います。rollapply議論は時々30、他の29か月などになるので、これはうまくいかないようですby。私の現在の考えは次のとおりです。

f <- function(xts_obj) { coef(lm(a ~ b, data=as.data.frame(xts_obj)))[1] }
month_end <- endpoints(my_xts, on="months", k=1)
rslt <- apply(month_end, 1, function(idx) { my_xts[paste0("/",idx)] })

確かに、これを行うためのより良い方法がありますか?明確にするために:私は重複する期間を使用したいのですが、ローリングは毎月行われるべきです。

4

3 に答える 3

3

私が正しく理解していれば、エンドポイントの日付を取得できます。次に、エンドポイントごとに(つまり、lapplyまたはを使用して)、その時点までのデータを使用してfor呼び出します。rollapply

getSymbols("SPY", src='yahoo', from='2012-01-01', to='2012-08-01')
idx <- index(SPY)[endpoints(SPY, 'months')]
out <- lapply(idx, function(i) {
  as.xts(rollapplyr(as.zoo(SPY[paste0("/", i)]), 5, 
                    function(x) coef(lm(x[, 4] ~ x[, 1]))[2], by.column=FALSE))
})
sapply(out, NROW)
#[1]  16  36  58  78 100 121 142 143

メソッドが(エクスポートされていないメソッドではなく)使用されていることを確認するzooために一時的に強制し、次に強制的に戻しますrollapplyrrollapply.zoorollapply.xtsxts

于 2012-08-18T18:55:32.427 に答える
2

「zoo/xts変換は必要ですか?」への回答として:この場合は必要ありませんが、このStackOverflowの回答から最近発見したように、データフレームを送信するとrollapplyは機能しません

于 2012-11-16T15:47:57.680 に答える
0

両方ともxtsでperiod.apply()、またはその便利なヘルパーが必要です。apply.monthly()

例:

R> foo <- xts(1:100, order.by=Sys.Date()+0:99)
R> apply.monthly(foo, sum)
           [,1]
2012-08-31  105
2012-09-30  885
2012-10-31 1860
2012-11-25 2200
R> 

または同等に

R> apply.monthly(foo, quantile)
           0%   25%  50%   75% 100%
2012-08-31  1  4.25  7.5 10.75   14
2012-09-30 15 22.25 29.5 36.75   44
2012-10-31 45 52.50 60.0 67.50   75
2012-11-25 76 82.00 88.0 94.00  100
R> 

複数の値を返す関数も使用できることを証明するためだけに。

于 2012-08-18T18:32:39.767 に答える