「R で移動平均を求める--R プログラミングの小ネタ」で,
> Rには移動平均そのものずばりを求める関数はないようです。
とあるが,latticeExtra の simpleSmoothTs というのがある。width はデフォルトでは NROW(x) %/%10 + 1 なので,自分で決めた方がよいようだが。
x = c(67, 59.2, 48.4, 56.5, 66.9, 79.1, 91.8, 87.6, 52.2, 66.4, 99.3,
159.3, 74.3, 57.3, 38.5, 42.7, 46.2, 42, 24.7, 26.4, 43.4, 38.5,
44, 31.8, 12.5, 41.9, 31.3, 44.2, 26.6, 23.2, 18, 20.8, 33, 9.4,
16.6, 11.1, 15.2, 10.9, 9.6, 8.3, 14.4, 18.3, 8, 8.6, 8.1, 6.9,
10, 10.4, 10.8, 19.1, 7.2, 2.2, 1, 4.2, 3.2, 0, 5.6, 3.9, 0.9,
0, 3, 7.4, 3.5, 12.8, 20.8, 5.9, 3, 7.2, 6.8, 6.6, 7.9, 13.3,
27.9, 26.5, 35.1, 19, 36.9, 66, 43.1, 42.7, 90.9, 108.8, 111.4,
94, 75.6, 75.1, 77.9, 78.4, 59.3, 68, 46.4, 76.2, 71.4, 72.2,
79.2, 112.3, 98.1, 117.5, 70.3, 94.2, 99.7, 116.7, 134.4, 136.7,
100.8, 117, 80.7, 88.5, 97.7, 123.6, 97.8, 119.3, 143.9, 111,
175.7, 143.1, 128.3, 130, 140.7, 105.7, 90.1, 83.6, 67.9, 123.5,
124.5, 112.8, 110, 121.5, 135.4, 106.1, 77.8, 57.2, 54.1, 63.1,
84, 70.7, 68, 89.1, 73.4, 110.2, 74.1, 61.1, 67.3, 70.7, 46.2,
43.4, 46.8, 31.5, 31.4, 66.3, 79.4, 70.4, 77.4, 50.9, 43.8, 39.3,
38, 48.7, 56.2, 68.8, 26.1, 11.2, 13.3, 21.8, 17, 19.2, 31.2,
24.8, 13.1, 40.9, 27.6, 32.3, 11.7, 9.1, 14.8, 16.2, 11.7, 6,
8.2, 14.4, 1.4, 0.9, 9.8, 0, 1.7, 4.1, 2, 14, 10.3, 12.8, 9.7,
23.7, 17.1, 6.9, 19.4, 33.3, 29.9, 35.1, 30.8, 25.2)
library(latticeExtra)
plot(x, type="l", lty=3)
lines(simpleSmoothTs(x), col=2, lwd=2)
lines(simpleSmoothTs(x, width=11), col=4, lwd=2)
その他にも,いくつかあるが...それぞれの関数の仕様の違いに注意すべし。
m を整数としたとき,パッケージ TTR の SMA(x, m+1) は simpleSmoothTs(x, width=m, sides=1) と同じ結果になる。
標準パッケージ stats の filter(x, rep(1, m))/m は simpleSmoothTs(x, width=m) と同じ結果になる。