kuroの覚え書き

96の個人的覚え書き

不等間隔なデータにおける区間移動平均

ある推移データをプロットした時に、おおまかな推移の傾向を掴みたいとき区間移動平均によるカーブフィットが用いられる場合がある。例えば株価の推移データから底値を予測したりといった時など。

しかし、例えばx軸に時系列をおいたプロットで、サンプリング時間がランダムな間隔であったときに単純な区間移動平均、例えば5区間移動平均などをとったとしたら、間隔の密なところと疎なところで同じ評価はできないのではないか?

そこで5区間とかポイント数で平均を取るのでなく、一定の時間間隔での平均を順番に取っていくといいのではないだろうか。
例えば密なところでは10ポイントの平均、疎なところでは2ポイントの平均などになるかもしれない。

COUNTIF と SUMIF関数を使って一定間隔内にあるプロットの個数とそれらの合計を求め、平均を計算してやるというのでどうだろう。
Aにx軸、Bにy軸 C1に平均を取る幅(片側)
とした時、xがn番目のポイントにおいて
Dn=COUNTIF($An:$A$last,"<"&An+$C$1)
En=SUMIF($An:$A$last,"<"&An+$C$1,$Bn:$B$last)
Fn=COUNTIF($A$first:$An,">"&An-$C$1)
Gn=SUMIF($A$first:$An,">"&An-$C$1,$B$first:$Bn)
をそれぞれ計算し、
(En+Gn-Bn)/(Dn+Fn-1)を求めて区間平均とする。
中心の値を2回カウントしてしまうのでBnと1をそれぞれ引いている。