このページは、nAGライブラリのJupyterノートブックExampleの日本語翻訳版です。オリジナルのノートブックはインタラクティブに操作することができます。
不均一な時系列に対する反復指数移動平均
このノートブックでは、シミュレーションされた不均一な時系列に対して、3つの減衰率(
inhom_iema
ルーチンは、以下の形式の減衰カーネルを使用しています:
これにより、指数移動平均(EMA)演算子の以下の反復式が導かれます:
ここで、
この関数の詳細については、nAG Library for Pythonのドキュメントを参照してください:nAG Library for Python docs
パッケージのインポート、データのセットアップ、パラメータの設定
以下のプロットパッケージの他に、nAG Libraryの時系列分析サブモジュールのみをインポートする必要があります
from naginterfaces.library import tsa
30個の不均一な時点において、30個のシミュレーションされた観測値があります。
= [
obs 0.6, 0.6, 0.8, 0.1, 0.2, 0.2, 0.5, 0.7, 0.1, 0.4, 0.7, 0.8,
0.3, 0.2, 0.5, 0.2, 0.3, 0.8, 0.6, 0.1, 0.7, 0.9, 0.6, 0.3,
0.1, 0.1, 0.4, 1.0, 1.0, 0.1,
]
= [
t 7.5, 8.2, 18.1, 22.8, 25.8, 26.8, 31.1, 38.4, 45.9, 48.2, 48.9,
57.9, 58.5, 63.9, 65.2, 66.6, 67.4, 69.3, 69.9, 73.0, 75.6,
77.0, 84.7, 86.8, 88.0, 88.5, 91.0, 93.0, 93.7, 94.0,
]
初期パラメータを設定します。これらは以下で構成されています:
tau
- 減衰パラメータ。このスクリプトは3つの 値に対して同時にIEMAを計算しますτ sinit
- 最初の2つの要素は初期時点と対応する観測値を表し、それ以降の要素は必要な反復回数分のEMAの初期値を表します(例:sinitが3つの要素を持つ場合、反復は1回のみ)inter
- 最初の反復とそれ以降の反復に対する補間方法をそれぞれ選択します。詳細はドキュメントを参照してください前の点:
ν=1 線形:
ν=(1−μ)/α 次の点:
ν=μ
= [0.5, 2., 8.]
tau = [5., 0.5, 0.5, 0.5]
sinit = [3, 2] # you can only choose 1, 2, or 3 for each of the two elements inter
inhom_iema
を呼び出し、プロットし、結果を表示する
= [tsa.inhom_iema(obs, t, tau_i, inter, sinit=sinit).iema for tau_i in tau] iema
# Jupyter の表示バックエンドを選択:
%matplotlib nbagg
import matplotlib.pyplot as plt
= plt.plot(t, obs, 'r*', label='observations')
v0, = plt.plot(t, iema[0], 'b-', label=r'$\tau =$ {:2.2}'.format(tau[0]))
e0, = plt.plot(t, iema[1], 'g-', label=r'$\tau =$ {:2.2}'.format(tau[1]))
e1, = plt.plot(t, iema[2], 'y-', label=r'$\tau =$ {:2.2}'.format(tau[2]))
e2, 0,1.5)
plt.ylim(=[e0, e1, e2, v0], loc='upper right')
plt.legend(handles'Time')
plt.xlabel('Value')
plt.ylabel('Exponential Moving Averages')
plt.suptitle(r'3 $\tau$' + ' values applied to simulated data', fontsize=10)
plt.title( plt.show()
= "| Time | EMA for | EMA for | EMA for |"
header_str = "\n| pts. | tau={:2.2} | tau={:2.2} | tau={:2.2} |"
second_str print(header_str + second_str.format(tau[0], tau[1], tau[2]))
print('-'*(len(header_str)))
for i, t_i in enumerate(t):
print('{:6.3f} {:6.3f} {:6.3f} {:6.3f}'.format(t_i, iema[0][i], iema[1][i], iema[2][i]))
| Time | EMA for | EMA for | EMA for |
| pts. | tau=0.5 | tau=2.0 | tau=8.0 |
--------------------------------------
7.500 0.580 0.531 0.504
8.200 0.595 0.544 0.506
18.100 0.790 0.754 0.606
22.800 0.175 0.406 0.590
25.800 0.183 0.232 0.532
26.800 0.198 0.217 0.512
31.100 0.465 0.357 0.459
38.400 0.686 0.630 0.490
45.900 0.140 0.263 0.444
48.200 0.333 0.241 0.409
48.900 0.487 0.279 0.403
57.900 0.790 0.713 0.488
58.500 0.651 0.717 0.499
63.900 0.223 0.385 0.505
65.200 0.381 0.346 0.493
66.600 0.298 0.330 0.480
67.400 0.267 0.315 0.471
69.300 0.658 0.409 0.463
69.900 0.694 0.459 0.464
73.000 0.191 0.377 0.448
75.600 0.583 0.411 0.437
77.000 0.817 0.536 0.446
84.700 0.619 0.632 0.511
86.800 0.374 0.538 0.518
88.000 0.195 0.444 0.512
88.500 0.142 0.401 0.508
91.000 0.340 0.331 0.486
93.000 0.843 0.495 0.487
93.700 0.957 0.585 0.494
94.000 0.875 0.612 0.497