Loading [MathJax]/jax/output/CommonHTML/jax.js

不均一な時系列に対する反復指数移動平均

nAG Library for Python Example集

このページは、nAGライブラリのJupyterノートブックExampleの日本語翻訳版です。オリジナルのノートブックはインタラクティブに操作することができます。

不均一な時系列に対する反復指数移動平均

このノートブックでは、シミュレーションされた不均一な時系列に対して、3つの減衰率(τ)で同時に反復指数移動平均を計算します。

inhom_iemaルーチンは、以下の形式の減衰カーネルを使用しています:

eti/ττ

これにより、指数移動平均(EMA)演算子の以下の反復式が導かれます:

EMA[τ;z](ti)=μEMA[τ;z](ti1)+(νμ)zi1+(1ν)zi

ここで、tは不均一(ただし順序付けられた)時間点、zは観測値の集合、そして:

μ=eαandα=titi1τ

νの値は選択された補間方法に依存します。

この関数の詳細については、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

    2. 線形: ν=(1μ)/α

    3. 次の点: ν=μ

tau = [0.5, 2., 8.]
sinit = [5., 0.5, 0.5, 0.5]
inter = [3, 2] # you can only choose 1, 2, or 3 for each of the two elements

inhom_iemaを呼び出し、プロットし、結果を表示する

iema = [tsa.inhom_iema(obs, t, tau_i, inter, sinit=sinit).iema for tau_i in tau]
# Jupyter の表示バックエンドを選択:
%matplotlib nbagg
import matplotlib.pyplot as plt
v0, = plt.plot(t, obs, 'r*', label='observations')
e0, = plt.plot(t, iema[0], 'b-', label=r'$\tau =$ {:2.2}'.format(tau[0]))
e1, = plt.plot(t, iema[1], 'g-', label=r'$\tau =$ {:2.2}'.format(tau[1]))
e2, = plt.plot(t, iema[2], 'y-', label=r'$\tau =$ {:2.2}'.format(tau[2]))
plt.ylim(0,1.5)
plt.legend(handles=[e0, e1, e2, v0], loc='upper right')
plt.xlabel('Time')
plt.ylabel('Value')
plt.suptitle('Exponential Moving Averages')
plt.title(r'3 $\tau$' + ' values applied to simulated data', fontsize=10)
plt.show()

header_str = "| Time | EMA for | EMA for | EMA for |"
second_str = "\n| pts. | tau={:2.2} | tau={:2.2} | tau={:2.2} |"
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
関連情報
MENU
© 日本ニューメリカルアルゴリズムズグループ株式会社 2024
Privacy Policy  /  Trademarks