0

RTAQ パッケージの MedRV 関数をループする方法を知っている人はいますか? 私は持っている

##find days in data
ddx.f = endpoints(full, on="days");
days.full = format(index(full)[ddx.f], "%Y-%m-%d");

for (day in days.full) {
  x = full[day]

}

毎日抽出しますが、毎日 MedRV 関数をループするために何を追加すればよいかわかりません。何か案は?また、ジャンプをテストするためにRに有意性テストがあることを知っている人はいますか?

前もって感謝します。

4

2 に答える 2

0

別のアプローチは、period.apply関数またはそのapply.dailyラッパーを使用することです。代わりにをperiod.apply使用するという事実のために、過去にいくつかの予期しない結果が得られました(少なくともそれが理由だと思います)ので、私は通常、他の回答で行った方法でそれを行います。sapplylapply

set.seed(123)
full <- .xts(rnorm(2880), 1:2880*5*60)
ddx.f = endpoints(full, on="days")
period.apply(full, ddx.f, MedRV)

apply.daily(full, MedRV) # same as period.apply but, endpoints are created for you
#                         [,1]
# 1969-12-31 23:55:00  58.2340
# 1970-01-01 23:55:00 268.5672
# 1970-01-02 23:55:00 260.3016
# 1970-01-03 23:55:00 310.5664
# 1970-01-04 23:55:00 302.1562
# 1970-01-05 23:55:00 272.9567
# 1970-01-06 23:55:00 291.0333
# 1970-01-07 23:55:00 309.7571
# 1970-01-08 23:55:00 229.9853
# 1970-01-09 23:55:00 298.3878
# 1970-01-10 18:00:00 215.6014
于 2012-06-16T01:16:25.307 に答える
0

アイデアはあなたの最後の質問と同じです

データを日ごとに分割し、各日に関数を適用します。以下split(dxts, "days")は、各要素が 1 日分のデータであるリストを作成します。lapply毎日に関数を適用します。

set.seed(123)
full <- .xts(rnorm(2880), 1:2880*5*60)
mrv <- lapply(split(full, "days"), function(x) {
    #return an xts-object, which requires a timeBased index
    xts(MedRV(x), end(x)) #use the last timestamp of the day
})

次にrbind、結果を単一の xts オブジェクトにします

do.call(rbind, mrv)
#                         [,1]
# 1969-12-31 23:55:00  58.2340
# 1970-01-01 23:55:00 268.5672
# 1970-01-02 23:55:00 260.3016
# 1970-01-03 23:55:00 310.5664
# 1970-01-04 23:55:00 302.1562
# 1970-01-05 23:55:00 272.9567
# 1970-01-06 23:55:00 291.0333
# 1970-01-07 23:55:00 309.7571
# 1970-01-08 23:55:00 229.9853
# 1970-01-09 23:55:00 298.3878
# 1970-01-10 18:00:00 215.6014

編集/代替構文

mrv <- lapply(split(full, "days"), MedRV)
names(mrv) <- index(full)[endpoints(full, on="days")]
as.xts(do.call(rbind, mrv))
于 2012-06-16T00:37:04.233 に答える