• 締切済み

単純移動平均について

単純移動平均について 時系列に無限に発生するデータのうち、最近の何個かの平均を求め続けたい。例えば最近の10個の移動平均を求めるなら 移動平均=(Pm+Pm-1+Pm-2+・・・・・+Pm-9)/10 で求められますが、これを計算するためにはPmからPm-9まで10個のデータを記憶しておく場所が必要になります。 マイコンでは連続して沢山の記憶域を確保するのが困難なので、これを連続域を使用しないように手抜きして 新10個の合計=現10個の合計ー現10個の平均+新データ 新10個の平均=新10個の合計/10 で計算できれば大きな記憶域が不要になるので、10個ではなくて1000個の移動平均でもマイコンで計算できるようになるはずです。 そこでお聞きしたいのは、このような手法で本来の単純移動平均と同等の効果が期待できるかということです。 私が欲しいのは時系列データの長時間変化の傾向が知りたいのです。そのために短時間の変化は大きな流れの中に埋没させてしまいたい。それだけの要求なので、これでも何とか使い物になるかと期待しているのですが。 工学部系でして数学に弱いもので、よろしくお願いします。

みんなの回答

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.4

> どんな分野で使い物になるのか興味があります。 > もし、私のデータがそのような傾向があればと予想する材料にもなります。 > よろしければ、再度どのような分野かご教示ください。 ネットワーク分野です。 ネットワークで用いられるTCPでは、 データを転送する時に転送データをある程度小さな塊に分割し、 その塊を転送します。 この塊のうち、いくつかがデータ受信者に届かなかった場合は 届かなかったデータを再転送します。 しかしデータが届かないという事はネットワークが過負荷になっている可能性があります。 そんな時にすぐ再転送してしまうとネットワークがさらに過負荷になりますし、 再びデータの塊が消失してしまうかもしれません。 適切な時間待機して再転送を行うため、 TCPでは往復時間(RTT)というものを用いて再転送時間を決めています。 TCPでは受信者がデータの塊を受け取ると、受信者は送信者に応答を返します。 この時、送信者がデータの塊を送ってから応答が帰ってくるまでにかかる時間がRTTです。 RTTが短くなってくれば、その時はネットワーク負荷が軽い可能性があります。 この場合はすぐに再転送しても問題ないかも知れません。 RTTが長くなってくれば、その時はネットワーク負荷が高い可能性があります。 この場合は少し時間をおいてから再転送した方が良いかも知れません。 TCPではRTTの平均値(のようなもの)を求めるために、次の計算式を使っています。 (最新RTT平均値) = t(旧RTT平均値) + (1-t)(計測RTT値) 元のTCPではtの値は0.9が推奨されていたと思います。 他にもt = 1/8を用いる場合もあります (t = 1/8ならシフト演算で割り算ができるため)。 この再転送の話では「全時間のネットワーク負荷」よりも 「最近の時間のネットワーク負荷」の方が大事になってくると思います。 なのである程度旧データの傾向が弱くなっても良いのかもしれません。

uran2048
質問者

お礼

懐かしいお話をありがとうございます。昔、TAOという組織に属していた頃にネットワークの勉強をしていた頃に再転送までの時間はランダムに決定すると聞いていた記憶がありますが、そんな実情があったとは。 それでも私との違いは0.9の重み付けをしている点ですね。大変参考になりました。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

その時系列に、誤差を乗っけてみます。 P[m] = (1 + ε[m]) (0.85) P[m-1] , ε[m] は -0.5 ~ 0.5 くらいの大きさで 何かランダムっぽい感じのデータ である場合を考えましょう。 m が大きめの値のとき、P[m] に対する影響は、 ε[m] と ε[1] のどちらが大きいですか?

uran2048
質問者

お礼

色々とヒントをいただけるのですが、そのセンスがないのでピンときません。 一般に雑音が大きくなれば信号が埋もれてS/Nは悪くなりますが、10個の記憶域を使う移動平均と比べてS/Nが更に悪くなると言われているのでしょうか。 実は、お二人の回答からデータによっては使えない場合が起きそうなのに、私のデータが未知の状態なので両方やってみるしかないと思い始めています。 少ない記憶域をやりくりすれば64個ほど確保できそうです。ただ、64個では瞬間的なノイズが1/64にしかならないのが不満です。

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.2

その方法だと、最初のほうのデータの影響が、 指数減衰するとはいえ、後々まで残ります。 Pm 自身が、9/10 倍よりも早く指数減衰する系列 だった場合に何が起こるか、考えてみると 面白いかもしれません。

uran2048
質問者

お礼

早速のレスポンスありがとうございます。 >Pm 自身が、9/10 倍よりも早く指数減衰する系列だった場合に何が起こるか、考えてみると面白いかもしれません。 私の頭では考えても分からないので、実際にEXCELでグラフを書いてみました。 Pm=0.85*Pm-1 で発生させた200個くらいの数列です。 その結果、原データから少し遅れて、原データと似たようなカーブで減衰しただけで、何が面白いか理解できませんでした。 よろしければ、再度何が面白いかご教示ください。 ただ、最初のほうのデータの影響が尾を引くのが私のケースで有効なのか悪影響なのか。 まだ、自分が扱うデータがどのように発生してくるか予想できないので自分でも困っています。

  • R_Earl
  • ベストアンサー率55% (473/849)
回答No.1

> 新10個の合計=現10個の合計ー現10個の平均+新データ > 新10個の平均=新10個の合計/10 > で計算できれば大きな記憶域が不要になるので、10個ではなくて1000個の移動平均でもマイコンで計算できるようになるはずです。 質問者さんの提案している式はもっと簡略化できます。 まず、上の式の「現10個の合計 - 現10個の平均」の部分ですが、これは 現10個の合計 - 現10個の平均 = 9(現10個の平均) という風に変形できます。 あとは質問者さんが提案している2式をまとめてしまって、 (新10個の平均) = 0.9(現10個の平均) + 0.1(新データ) としてしまえば良いと思います。 こうすれば現在の平均値と新データのみで、 新しい平均値を計算する事が出来ます。 > そこでお聞きしたいのは、このような手法で本来の単純移動平均と同等の効果が期待できるかということです。 ある状況によっては単純移動平均と大差ない結果がでるかもしれませんが、 別の状況では大きく結果が異なるかもしれません。 > 私が欲しいのは時系列データの長時間変化の傾向が知りたいのです。そのために短時間の変化は大きな流れの中に埋没させてしまいたい。それだけの要求なので、これでも何とか使い物になるかと期待しているのですが。 今回の計算式だと過去のデータがどんどん0.9倍されてしまいます。 つまり過去のデータの影響は指数関数的に減少していきます。 なので最近のデータの影響がやや強くなる傾向が出るはずです。 結局のところ、納得できる結果が得られるかどうかは 実際に試してみるまで分からないと思います。 一応、質問者さんが考えている方法は既に別の分野で使われたりしています。

uran2048
質問者

お礼

面白い考え方をありがとうございます。 残念ながら私が使っているマイコンには乗除算命令がありません。それでシフト命令で代行しますので2のべき乗で乗除することしか考えていませんでした。 >結局のところ、納得できる結果が得られるかどうかは実際に試してみるまで分からないと思います。 自分でも扱うデータの素性が予想できないので、結局試してみるしかなさそうですね。 >質問者さんが考えている方法は既に別の分野で使われたりしています。 どんな分野で使い物になるのか興味があります。もし、私のデータがそのような傾向があればと予想する材料にもなります。よろしければ、再度どのような分野かご教示ください。

関連するQ&A

  • 単純移動平均の計算について

    単純移動平均の計算について教えてください。 「3日間の移動平均線を求めたい場合は、求めたい日を含めて3日間の価格を合計し3で割る。その翌日の移動平均は、翌日を含めた3日間の合計を3で割るというように、ただ単純に平均値を計算する。」 というルールで計算してグラフを作成してみましたが、どうもインフォシークファイナンス等のチャートと見比べると違っているのです。 インフォシークの場合、チャートの上をマウスで移動するとチャートの左側の値が変わっていきますが、「日付アリ・終値なし」の日にも移動平均が計算されて入っているようなのです。 私は、終値がなければ計算しない、というルールでロジックを作成していたのですが、本当に正しい計算方法はインフォシークのようなやり方なのでしょうか?またその場合、ルールを教えていただけると助かります。

  • 移動平均の重み関数について

    ある点f[n]を中心に±2点の計5点の移動平均をあるデジタル信号について施すとします。nはデータの番号とします。 g[n]=Σh[i]f[n-i]という畳み込み計算で、上記の計算を行うとき、 h[i]はどの様に表せますか? 私も自分自身で考えましたがしっくりこなくて…。以下に記しておきます。 Nを前後何点取るか(5点平均ならN=2です)と設定し、 h[i]=1/(2N+1)。ただし、i=-(N-1)/2からi=(N-1)/2まで変化させるとしました。 h[i]を表したのですが、しっくりこなくて。 宜しくお願いします。

  • 移動平均線 角度 エクセルで・・・

    移動平均線 角度教えてください。 誰か株価の移動平均線の角度を測りたいんですが案をお聞きしたいです。 エクセル上にRSS関数でリアルタイム株価を引っ張れますが デイトレメインで移動平均線の角度を測りたいです。 楽天RSS(デイトレ)でエクセル上に株価を取得し移動平均線の値を求め、 移動平均線を出来れば描き角度を求めたいです。 例えば デイトレで 現在25本線 「45°」←リアルタイムで変化する。 上記をエクセル上で作成したいです。 方法、計算式など教えて頂きたいです。 よろしくお願い致します。

  • 分足の株価移動平均線の算出方法を教えてください

    最近マーケットスピードでネット株をはじめたのですが、日足の株価移動平均線(5本)と株価移動平均線(25本)の値と分足での株価移動平均線(5本)と株価移動平均線(25本)の値が違います。エクセルを利用してザラ場中に分足の株価移動平均線(5本)と株価移動平均線(25本)をリアルタイムに計算したいのですが計算式がわかりません。どなたか教えてください。ちなみに監視銘柄の過去1ヶ月の始・高・安・終値のデータは準備しています。 なぜマーケットスピードはリアルタイムに分足の株価移動平均線を算出できるのでしょうか?   

  • 平均値の計算の仕方は?

    教えてください!! 週1回C言語を勉強しはじめて約3ヶ月ですが、ますます難易度が増し、後1週間で締め切りになるにもかかわらず、文系の私はすでに挫折してしまいそうです。そこで質問があります。次の問題はどのようにプログラムを書いたらいいのですか。是非是非、教えて下さい!!! お願いいたします。ちなみに、「Turbo C」を使っているのですが、本を参考にしてもならっていない、switchやcase などがでできて参考にすることがむずかしいのです。是非、頼らせて下さい。 問題1 0より大きn個(最大100個)のデータを入力し、その合計と平均値を計算して出力する。さらに、n個のデータと平均値の差を出力し、平均値に最も近いデータを探す。 (実行結果例) データを入力(データの終了は、マイナスを入力) データ(1) : 30↓(← enter) データ(2) :100↓ データ(3) :45↓ データ(4) :9↓ データ(5) :-1↓ 4個のデータの合計= 184.0000 平均値= 46 データ(1)と平均値の差= 16.0000 データ(2)と平均値の差= 54.0000 データ(3)と平均値の差= 1.0000 データ(4)と平均値の差= 37.0000 平均値と最も近いデータ= データ(3): 45.0000 以下:貰ったヒント スタート―データ入力(関数1)―合計の計算(関数2)―データ選出(関数3) おわり indate関数1 sum関数2       Prdate関数3 引数 void      データの数 戻り値、データの数 戻り値 データの数 合計の結果 データの位置 Float x[100]

  • エクセルで開始時間の平均を出すには

    開始時刻の平均を算出したいのですが、うまくいきません。 単純に平均を出すと、合計数が9476÷11=861 61の60を繰り上げて、901では、ないようで…。シリアル値などの変換が必要? 時間計算を調べもしましたが、時間合計を算出する式しか見つからず、時間平均の計算方法がわかりません。 24時間表記で以下のような場合は、どうしたらいいかご存知の方がいましたら、ご教示いただけると幸いです。 854 850 854 855 853 854 853 852 851 900 900 つたない文章で恐縮ですが、どうぞよろしくお願いいたします。

  • テクニカル分析 等で

    単純移動平均  とか・・・・・・・で  3週 = 13週 = 26週 = まだ幾つか有りますが、 の数字は何日?   正確な計算式が知りたい。 時系列の デイリー より 取り込んだデータから計算をしたい *時系列の 週間 月間は利用したくない

  • (Excel)データの個数の平均が知りたい

    下記のような時系列的に並んでいる時間データが有ります。 00:00 00:00 00:00 00:01 00:01 00:01 00:01 00:02 00:02 00:03 00:03 00:03 実際には、各時間に約30個ずつあり(時間データによって個数が異なる)全部で約3万ものデータがあります。 各データの個数、個数の平均や範囲を示す方法はありませんか? 量が膨大でグラフにするとぐちゃぐちゃになってしまいます。 上手く伝えられなくてすみません。

  • エクセルでの平均時間の出し方

    休憩時間の平均時間を出そうと思っています。 9日間の休憩時間の合計が8時間50分です。 私が試した方法は8時間50分に60を掛けて530分とし9日間で割りました。 電卓で計算をすると「58.88」という答えになるのですが、エクセルでは「58.53」となります。 エクセルの計算式が足りてないのだと思うのですが、調べてもどうしてもわかりませんでした。 もし、わかる方がいましたら教えてください。 よろしくお願いいたします。

  • 平均電圧の計算方法

    一定のサイクルで電圧が変化する電源についてです。 例えば、DC90Vが3秒間出力された後にDC45Vが7秒間出力されたときの10秒間合計の平均電圧の計算式を教えてください。 また、DC90Vが3秒間出力された後にDC45Vが7秒間出力されたあとにOFF(DC0V)が10秒間となるときの合計20秒間の平均電圧の計算式もお願いします。