rollapply (zoo
パッケージまたは同様のものから) 最適化された関数 (rollmean
などrollmedian
) を使用して、観測数に基づくものではなく、時間ベースのウィンドウでローリング関数を計算する方法はありますか? 私が望むのは単純です。不規則な時系列の各要素について、N 日間のウィンドウでローリング関数を計算したいと考えています。つまり、ウィンドウには、現在の観測の N 日前までのすべての観測が含まれている必要があります。時系列にも重複が含まれる場合があります。
次に例を示します。次の時系列があるとします。
date value
1/11/2011 5
1/11/2011 4
1/11/2011 2
8/11/2011 1
13/11/2011 0
14/11/2011 0
15/11/2011 0
18/11/2011 1
21/11/2011 4
5/12/2011 3
右側に配置された 5 日間のウィンドウを持つローリング中央値は、次の計算になります。
> c(
median(c(5)),
median(c(5,4)),
median(c(5,4,2)),
median(c(1)),
median(c(1,0)),
median(c(0,0)),
median(c(0,0,0)),
median(c(0,0,0,1)),
median(c(1,4)),
median(c(3))
)
[1] 5.0 4.5 4.0 1.0 0.5 0.0 0.0 0.0 2.5 3.0
私はすでにいくつかの解決策を見つけましたが、それらは通常扱いにくいものであり、通常は遅いことを意味します。独自のローリング関数計算を実装することができました。問題は、非常に長い時系列の場合、最適化されたバージョンの中央値 (rollmedian) では、ウィンドウ間のオーバーラップが考慮されるため、大きな時間差が生じる可能性があることです。再実装は避けたい。rollapply パラメーターを使用して機能させるトリックがあると思われますが、それを理解することはできません。助けてくれてありがとう。