相互情報量に基づく時系列データの相関次元推定方法について

このQ&Aのポイント
  • 時系列データの相関次元を求める際に、自己相関関数ではなく相互情報量を使用する方法についての質問です。
  • 具体的には、元のデータ列と遅れ時間τだけずらしたデータ列に対してデータを規格化し、格子に分割して確率を求めることで相互情報量を推定しようとしています。
  • しかし、遅れ時間τが0の場合には相互情報量が0となってしまう問題が発生しています。どこか理解に誤りがあるか、指摘していただきたいです。
回答を見る
  • ベストアンサー

時系列データから求める相互情報量について

初めまして.相関次元を求めるプログラムを作成しています.遅れ時間を自己相関関数からではなく,相互情報量(I)から求めたいと考えています.元のデータ列とそれからτだけデータをずらしたデータ列の2つに対してデータを規格化した後にL×Lの格子にわけてデータが各格子に存在する確率P(x∩x_τ)を求め,下記の式からIを求めようとしています. I(x;x_τ)=-ΣP(x∩x_τ)log(P(x∩x_τ)/P(x)/P(x_τ)) τ=0の時,I(x;x_τ)=H(x)となるはずですが,上記の方法では,P(x∩x_τ)=P(x)=P(x_τ)となり,I=0となってしまいました.どこかを勘違いしているとおもうのですが,どうしても分かりません.稚拙な文章で理解しづらいとは思いますが何かご指摘頂ければ幸いです.御回答のほど宜しくお願い致します.

質問者が選んだベストアンサー

  • ベストアンサー
  • goma_2000
  • ベストアンサー率48% (62/129)
回答No.1

離散化して相互情報量を求めたということですね。 式の上からはP(x∩x_τ)=P(x)=P(x_τ)なら、 I=ΣP(x∩x_τ)log(P(x∩x_τ)/P(x)/P(x_τ)) =ΣP(x)log(1/P(x)) となります。よって、I=0にはならないと思いますが。 ラグを相関ではなく相互情報量から取るというのはアイディアとしては面白いですね。実際は偏自己相関関数(他の時間の効果を取り除いた上での自己相関関数)を考えなくてはならないので、単純には行かなさそうですが。

kavu2004
質問者

お礼

勘違いをしておりました。ご指摘ありがとうございます。プログラムは正常にできたようですが偏自己相関関数についても調べてみようと思います。ありがとうございました。

関連するQ&A

  • 確率変数変換時の相互情報量について

    標題に関し教えて頂ければ幸いです. x, yを確率変数とするとき,同時確率分布P(x,y)および周辺確率分布P(x),P(y)から x, yに関する相互情報量I(x,y)は下記の様に得られると思います. ∫∫P(x,y)*log(P(x,y)/P(x)/P(y)) dxdy このとき,x, yをr2, θへ変数変換した時の相互情報量I(r2,θ)はどのように求めれば 良いのでしょうか. (r2 = x^2+ y^2, θ = tan^-1(y/x)とします) 宜しくお願い致します

  • 相互情報量について

    1,2,3,4が等確率で現れる確率変数をA, それが偶数か奇数である確率変数をBとします. 相互情報量I(A|B)を求めましょう. という問題です. これを求めていく際に必要となるP(A∧B)が分かりません. それ以前に,相互情報量が何なのかもよく分かっていないと思います. どうかご教授お願いいたします.

  • 統計量の行列表現について

    データセットx_i (i=1,2,...n)の 分散 v を考えます(式が面倒になるので、平均は0とします)。 通常でしたら、データの2乗の平均でいいのですが(平均は0なので)、これはデータセットの各データが均等の確率で現れるという前提で求められる分散です。 一般には、 v=Σ p(i) x_i^2 となると思います(p(i)はデータx_iが現れる確率)。 次にこれを行列で表すことを考えます。 データセットのベクトルをX (列ベクトル)とすると、 v = X^{T} W X という行列の積になります。 ここでWは W=diag (p_1, p_2,...p_n) という対角行列で、まあ加重行列とでも呼びましょう。 さて、ここからが質問なのですが、この方式で歪度は表現できるのでしょうか? 平均が0なので、歪度はデータの3乗の平均です。加重を考えると、 歪度 = Σp(i)\times x_i^3 です。 これを X と Wで表現したいのですが、どうもうまくいきません。 何か知恵がございましたらよろしくご教示ください。

  • フォートランでの相互相関関数の計算

    酒器について質問です。 ある2つのポイントで計測した実験データがあります。 その2つの実験データの間の時間のずれΔtを相互相関関数を用いて求めたいと考えています。 参考書やインターネットを通して理論は理解できるのですが、それをフォートランを用いた場合どのようにして計算させるのか分かりません。 具体的のどのようにして計算したらよいのでしょうか? どのようなプログラム文を打てばよいか教えていただきたいです。 流れとしてはデータ数1000の場合 2つのファイルをopen データ読み込み f() g() do p=-500,500 do i=1,1000 s=f(i)*g(i+p) ss=ss+s ........... のような流れになるのでしょうか? どなたか分かる方是非教えてください よろしくお願いします

  • 情報理論の問題

    入力Xと独立かつ記憶のない誤り源Eとの積Y=XEが出力となる2元通信路を考える。 このときの相互情報量I(X;Y)と通信路容量を求めなさいという問題です。 ただし、2元誤り源P_E(1)=p、入力Xの0および1の発生確率はP_X(0)=p1,P_X(1)=p2としp1+p2=1とします。 通信路行列までしか求められていない状況です。 よろしくお願いします。

  • 相互相関関数 使い方

    x(t)、y(t)の信号があるとき、互いの距離は22cmであり、行路差はLとする。行路差Lを求めたい。 相互相関関数は Φxy(t1,t2)=E[x(t1),y(t1)] 定常性、エルゴード性より、 Φxy(τ)=x(t)y(t+τ)の平均     =lim(T→∞)1/T*∫(0からT)x(t)y(t+τ)dt となると習いました。 結果は(0からτまで5.8msなので)L=13.9cm だそうです。 どのような計算を行ったのか”おそらく”でもいいので教えていただきたいです! よろしくお願いします。。

  • [arduino]数値の大きなデータを二次配列へ

    シリアル通信で得たデータを二次元配列へ格納するために、 以前では、 if(Serial.available()>120){ for(int k=0;k<8;k++){ for(int l=0;l<15;l++){ //読み込んだ値を配列に代入 matrix[k][l]=Serial.read(); } } } このようなやり方で読み込んだ値を二次元配列に代入していたのですが、 128個以上のデータを扱いたい場合、Serial.availableでは保持できず、困っています。 方法として、 (1)一つずつデータを読み込み、128回ループを繰り返し配列に貯めていく。その後配列を2次元配列に代入する。 (2)一つデータを読みこんだら二次元配列の1行目1列目のドットに格納、もう一つデータを読みこんだら二次元配列の1行目2列目のドットに格納…というように、 読みこんだデータをそのまま二次元配列のそれぞれの場所へ格納していく。 というような二つの方法を思いついたのですが、 (1)の方法では、配列にデータを貯蓄していくコードをこのように↓書いたのですがうまくいかず、 for(int i=0;i<128;i++){ if(Serial.available()>0){ data[128] = Serial.read(); } } (2)の方法では、データを二次元配列のそれぞれの場所へ格納していく指定方法が分かりませんでした。 正しい書き方や、良いアイデアをお持ちの方がいましたら、是非御教授お願いします。

  • エントロピーを計算?

    こんにちは、大学のレポートでエントロピーを実際に計算しろ。 というものが出てしまって困っています。 実際講義では一切計算には触れていないので、何がなんだかよくわかりません。 説明で ○言語Lにおいて、単語列w1w2…wkの出現確率をP(w1w2…wk) とすれば、言語LのエントロピーH0(L)は次式で定義される。  H0(L)=-ΣP(w1w2・・・wk) log2 P(w1w2・・・wk) ○1単語あたりのエントロピーH(L)  H(L) = -Σ1/kP(w1w2・・・wk) log2 P(w1w2・・・wk) ○パープレキシティ  Fp(L)=2H(L) 問題の例は、 ●10個の数字が等確立で発生される場合 解:H=-Σ9 i=0 p(i)log2p(i)= 10 × log2 10/10= 3.32(bits) となるようです。 Σの上と下に付く数字はΣの後ろについてる「9」と「i=0」です。 問題は ●10個の数字のうち、0の確率が0.91で、残りの数字がそれぞれ0.01である場合 ●「はい」「いいえ」の2単語が等確率で発生される場合 というものです。 是非、分かるかた教えてください。お願いします。

  • 量子力学

    2つ質問があります。 (1)粒子の0≦x≦Lの範囲に制限された一次元の運動は波動関数 ψ(x)=Csin(πx/L) で記述される。 ここでCは規格化定数である。 粒子が次の範囲にある確率を求めよ。 1)L/2≦x≦L 2)L/4≦x≦3L/4 これの答えは両方1/2で合ってますか?解答がないのでわからないのですが。。 間違っているとしたらどのように解けばいいのでしょうか? (2)量子化とはどういうことを言うのでしょうか? たとえば、 運動量pの量子化→pハット=-ihバー∇ ハミルトニアンHの量子化→Hハット=pハット^2/2m=(-ihバー∇)^2/2m=-hバー∇^2/2m のようにすることが量子化ということですか?

  • 残差に自己相関がある時系列データy(1),y(2),y(3),...,

    残差に自己相関がある時系列データy(1),y(2),y(3),...,y(n) に対して上昇トレンド(線形)が有意に存在することを 統計的検定で示したい場合はどのようにすればよいのでしょうか? 単にデータ 時刻(x) 値(y) 1 1.512472 2 1.594956 3 1.636873 4 1.711896 5 1.570067 6 1.440109 7 1.550716 8 1.55284 9 1.372756 ・・・ ・・・ に対して単回帰分析(y=a+b*x)を行い、初級の統計で習うように 係数aの仮説検定H0:a=0 H1:a!=0に対応するp値を見ようとも 最初は思ったのですが、どうも系列相関を 無視して分析しているのが気になっていまいちすっきりしません。 適切な方法がわかる方がいたら、ご教示いただければ幸いです。