1

3 と 7 の R でローリング メジアン..(ランニング メジアン) を実行し、それらをプロットする必要があります。smooth(x,"3R")収束するまで繰り返し使用することを知っています。しかし、比較するために7の実行中の中央値を実行したいので、変数として入力しています。

xR7 <- rollmedian(x,7)
Age # at Age
0   558
1   513
2   582
3   604
4   584
5   566
6   562
7   524
8   529
9   430
10  497

収束したことをどのように知ることができますか? テストはありますか?

4

1 に答える 1

4

中央値を使用して平滑化を繰り返すと、 の両端がx消えるまで次第に侵食されます。両端の移動中央値に値を割り当てるには、いくつかの規則が必要です。1 つの方法は「コピー」です。最初の有効な値を最初に複製し、最後の有効な値を最後に複製します。

収束をチェックする 1 つの方法 (かなり厳しいものですが、このコンテキストではおそらく安全です) は、連続する反復がまったく同じである場合にのみ停止することです。を使用しidenticalます。

これにより、次の手順が実行されます。

library(zoo)

rollmedianR <- function(x, k=3) {
  n <- length(x)
  k.low <- floor((k+1)/2)
  k.high <- n + 1 - k.low
  repeat {
    y <- rollmedian(x, k, na.pad=TRUE)
    y[1:k.low] <- y[k.low]; y[k.high:n] <- y[k.high]
    if (identical(x, y)) break
    x <- y
  }
  return(y)
}

smoothテストとして、いくつかのランダム データと比較してみましょう。

set.seed(17)
x <- sin(seq(0, 2*pi, 2*pi/1000)) + rnorm(1001, 0.25)
0 >= var((smooth(x,"3R") - rollmedianR(x, 3)), rep(0.0, length(x)))

1

2 つの結果の違いに変化がないため、両者は一致しています。良い。(ちなみに、この分散テストはrollmedianR、 の代わりに収束をチェックするために内部でうまく機能しidenticalます。浮動小数点エラーに対してより堅牢です。数値の変化が発生していないため、原則として、これは中央値には関係ありません。値はちょうどコピーされていますが、他のアプリケーションでは、そのような堅牢性が重要です。)

プロットは、長時間の中央値が何をするかを示すことができます。

plot(x, col="Gray", cex=0.8)
lines(rollmedianR(x,37), lwd=2, col="Red")

データと移動中央値のプロット

于 2012-12-12T18:09:16.777 に答える