分散共分散行列の逆行列について

このQ&Aのポイント
  • 分散共分散行列の逆行列についての数学的な疑問とその現象について説明します。
  • N=M+1の場合とそれ以外の場合で逆行列の成分の大きさに違いがある現象が確認されました。
  • 500回の計算結果から得られる平均値を示した行列Yの例を提供します。
回答を見る
  • ベストアンサー

分散共分散行列の逆行列

以下の行列を考えます. 行列X(M行N列,成分の値は分散1のガウスノイズ) 行列Xの分散共分散行列S(M行M列), 行列Sの逆行列Y(M行M列) N=M+1のときはN≠M+1のときに比べて行列Yの各成分の大きさがかなり大きくなる,という結果が得られました. (計算にはMATLABの関数covとpinvを用いました.) これは数学的に正しいことなのでしょうか. また,正しいとしたらどうしてこのようなことが起こるのでしょうか. 行列Yの計算結果の例を以下に示します.(行列Yを500回算出し,それらの平均値を示しています.) http://wisteria.orz.ne.jp/download/pinvcovX.jpg 縦・横方向の軸は行列Yのインデックスを,高さ方向の軸は行列Yの成分の値を示しています. 上述した現象の原因についてご教授いただけると幸いです.

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

  • ベストアンサー
noname#227064
noname#227064
回答No.2

Rで試してみたら同じような結果になりました。 その結果が添付画像です。 それぞれのz軸の上限は「z:上限」で表しています。 繰り返し回数を増やしたら各成分が小さくなると思っていたのですが、逆に大きくなりました。 Nが大きくなるにつれ、単位行列に近づいていくようです。 これ自体は分散共分散行列が単位行列に近づくことから当然ですか。 試したコード func1 <- function(x, M) { y <- matrix(x, ncol = M) z <- cov(y) c(as.vector(z), as.vector(solve(z))) } func2 <- function(M = 20, N = 21, R = 500) { x <- matrix(rnorm(M*N*R), nrow = R) y <- apply(x, 1, function(t) func1(t, M)) z <- rowMeans(y) list(cov = matrix(z[1:(M*M)], ncol = M), covinv = matrix(z[(M*M+1):(2*M*M)], ncol = M)) } x <- func2(20, 21, 10000) y <- func2(20, 21, 500) z <- func2(20, 22, 500) w <- func2(20, 100, 500) par(mfrow = c(2, 2)) persp(x$covinv, zlim = c(-0.5, 10^10), xlab = "x", main = "M = 20, N = 21, 10000回の平均, z:10^10") persp(y$covinv, zlim = c(-0.5, 10^5), xlab = "x", main = "M = 20, N = 21, 500回の平均, z:10^5") persp(z$covinv, zlim = c(-0.5, 10^3), xlab = "x", main = "M = 20, N = 22, 500回の平均, z:10^3") persp(w$covinv, zlim = c(-0.5, 10), xlab = "x", main = "M = 20, N = 100, 500回の平均, z:10") par(mfrow = c(1, 1))

tanakarakusamoti
質問者

お礼

検証していただきありがとうございます。 そうですか、計算結果は同じようになりましたか。 > 繰り返し回数を増やしたら各成分が小さくなると思っていたのですが、逆に大きくなりました。 有限長の小数で演算を繰り返すほどに、誤差が膨らんでいくという可能性が考えられますね。 私が用いた言語と異なる言語で検証していただき、たいへん参考になりました。ありがとうございました。

その他の回答 (2)

回答No.3

M列N行だと思いますが、 NがMに対して少ないので、 独立したガウスノイズになっているか疑問です。 なので逆行列が正確に求められるかも疑問です。 ・・・がinvでも似たような結果になるのでは・・・・。

tanakarakusamoti
質問者

お礼

> M列N行だと思いますが、 > NがMに対して少ないので、 > 独立したガウスノイズになっているか疑問です。 N行M列でした。失礼しました。独立したガウスノイズになっていることも確認しました。 ご指摘ありがとうございます。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

>行列X(M行N列,成分の値は分散1のガウスノイズ) これは、N行M列の間違いですか? で、発生させたガウスノイズ自体は独立(共分散=0)ということなんですかね。 ということは、求めた分散共分散行列は、ほとんど単位行列に近いものと思ってよいですか? 多分、その現象は、数値計算上の不安定性(誤差)によるものだと思います。S行列は、基本的には逆行列が存在するんだと思いますが、pinvではなくて、普通にinvを使えばどうでしょう。

tanakarakusamoti
質問者

お礼

ご回答ありがとうございます。 > N行M列の間違いですか? はい、間違いでした。N行M列ですね。失礼しました。 > 発生させたガウスノイズ自体は独立(共分散=0)ということなんですかね。 > ということは、求めた分散共分散行列は、ほとんど単位行列に近いものと思ってよいですか? はい、仰るとおりです。 > 多分、その現象は、数値計算上の不安定性(誤差)によるものだと思います。S行列は、基本的には逆行列が存在す> るんだと思いますが、pinvではなくて、普通にinvを使えばどうでしょう。 pinvの場合とinvの場合で計算結果はほぼ同じでした。 ただ、現象の原因としては、rabbit_catさんの仰るように、数値の誤差が膨らんだことは十分に考えられます。

関連するQ&A

  • 二つの確率ベクトルの共分散行列

    n次元確率ベクトルXについての分散共分散行列 Cov(Xi, Xj)の説明は多くの教科書にあり理解しているのですが,p次元確率ベクトルPとq次元確率ベクトルQについての共分散行列 Cov(Pi, Qj) が何の指標になっているのかがわかりません.行列の各成分は何を表しているのでしょうか.直感的・幾何学的なイメージがつかめないのですが...

  • 共分散について

    分散が 1 の確率変数 X,Y の共分散を Cov[X, Y] とするとき、 Cov[aX + Y, X - aY] = 0 となる条件を求めよ。 という問題があるのですが・・・・これは Cov[X, Y] に関して X,Y が独立の場合は Cov[X, Y] = E[X, Y] - E[X]E[Y] = 0 ---- (*) となることを用いて、与式の (aX + Y) と (X - aY) が独立であるということを示せばよいのでしょうか? また、結局 a の値が 0 のときは (*) と等しくなるので、 a = 0 というのも条件となるのでしょうか? そのほか、別の解法もあるかもしれませんが・・・・回答よろしくお願いしますm(__)m

  • 共分散行列の固有値・固有ベクトルの行列

    以下のようなデータを用いて、共分散行列を生成するとします。 (各No.にはそれぞれx1~x5の5つのデータ) x1 x2 x3 x4 x5 No.1 [2 4 5 2 1] No.2 [3 10 8 7 9] No.3 [11 3 2 1 6] すると、共分散行列は3×3の正方行列になり、その固有値も3つ求まりますよね。 しかし、固有ベクトルに関してはデータがx1,x2,..,x5と5次元で考えているので、 ひとつの固有値に対して5つの成分を持つ固有ベクトルが求まりますよね。 よって、共分散行列の固有値行列は必ず正方行列になりますが、固有ベクトルの 行列は上の例の場合なら5×3行列(列は対応する固有値の数、行はベクトルの成分の数)となり、 必ずしも正方行列にはなりませんよね?そのあたりを教えて頂きたいと思います。 よろしくお願いします。

  • 分散の計算

    V(2X+3Y)-21=Cov(X+Y,X-Y)-2=0を満たす確率変数X,Yの分散V(X),V(Y)の値を求めよ。という問題なのですが、V(2X+3Y)=4V(X)+9V(Y)+12Cov(X,Y)となるのはわかるのですが、Cov(X+Y,X-Y)をどのように扱ったらよいのかわかりません。どなたか教えていただけないでしょうか?よろしくお願いします。

  • 共分散行列の求め方

    数個のデータから共分散行列を生成するプログラムを実装しようと 考えています。そこで、次のようなプログラムを書きましたが、 結果があっているかがわかりません。共分散行列の生成方法に 詳しい方がおられましたら、どうか教えて頂きたいと思います。 共分散行列生成に用いた式は Σ = E[(X-E[X])(X-E[X])^T]  です。 (Σ:共分散行列 X:データ E[X]:Xの平均 ^T:転置行列) double xave = 0.0; //式のE[x]にあたる部分 double work [ ]; //データを入れる一次元配列(式のXにあたる) double a[][]; //共分散行列を入れる配列 work[0] = 3; //5つのデータを格納 work[1] = -2; work[2] = 5; work[3] = -3; work[4] = 2; for(i = 0; i < N; i++){   //E[x]を求めるためにxaveに全要素合計を入れる xave += work[i]; } xave /= N;        //全要素合計をデータ数で割る for(i = 0; i < N; i++){   //要素Xから平均を引く(X-E[x]にあたる) work[i] -= xave; } for(i = 0; i < N; i++){ for(j = 0; j < N; j++){ a[i][j] = work[i]*work[j]/N;  //a[][]に値を格納 Nで割っているのは式の一番外側のEにあたる } } <実行結果> 0.0 | 0.0 | 0.0 | 0.0 | 0.0 0.0 | 4.0 | -6.0 | 8.0 | -8.0 0.0 | -6.0 | 9.0 | -12.0 | 12.0 0.0 | 8.0 | -12.0 | 16.0 | -16.0 0.0 | -8.0 | 12.0 | -16.0 | 16.0

  • 逆行列の有無

    2行2列の行列で逆行列を持たないものの一般形として (ka ma)ですべての場合を表せているでしょうか?(k,mは実数) (kb mb) 「ある行列は逆行列を持たない」という設定で成分計算するときに、逆行列の場合分けのパターンが結構あるので大変です。

  • Σの計算について(行列を含む)

    よろしくお願いします。 以下のΣの計算になりますが行列を含みます。 このことによりちょっと混乱が生じ、正しい解答を導くことができません。 順序立てて回答を頂けると幸いです。 N=10で構いません。 N Y = Σ(A) ・x^n・x^(N-n) n=1 行列 A は以下のように1行2列です(括弧がうまく書けません)。 N n

  • 最小二乗法の過程で分散共分散行列が・・・

    最小二乗法の過程で分散共分散行列が目にしました。 重回帰モデルが y=Xβ+ε で与えられるとき、最小二乗法を施すと βの期待値bが (X'・X)-1・X'・yで表せるのですが、 (ただし、X'は行列Xの転置行列、-1は逆行列を表します。) このbの分散共分散行列を計算すると E[(b-E(b))(b-E(b))'] = σ^2 (X'X)^(-1) となるのですが、 この計算をする際にE(b)=β とするのですが、どうしてこれが成り立つのでしょうか? 教えてください!!よろしくお願いします。 また、もしよろしければ、次のことを教えてください。ご存じなければ、上の質問だけでももちろん助かります。 bの分散共分散行列 E[(b-E(b))(b-E(b))'] を計算すると E[εε']=σ^2I となる過程が出てくるはずです。(Iは単位行列) どうしてこの変形が出来るのでしょうか? 単位行列にはならないはずですが、単位行列になるという 仮定を用いているようです。 どうしてこの仮定が生じたのか、ご存知の方いらっしゃれば教えてください。とても困っています。

  • ある行列とその転置行列の積の逆行列は?

    今エクセルで行列を使って問題を解いています。 問題は 行列X、A、Yがあり、Xは1行4列、Aは1行2列、Yは1行4列です。 X・A=Y という式があり、Aの行列は未知数a,bの要素からなっています。 X,Yはそれぞれ数値として要素が決まっています。 ここからはヒントとして表示されていました。 そこでXの逆行列を両辺の左からかけるとAは求まるはずですが、 Xは正方行列ではないので、Xの転置行列を左からかけます。 X(T)・Xは正方行列になるのでこれを行列Pとおくと Pの逆行列を求められ、右辺にP^-1をかけるとAが求まる。 というものです。 エクセルで書かれている通りにやってみて、エラーになるので調べてみると、XとXの転置行列の積の行列式は要素にかかわらず0になるようです。 実際に数値ではなく、abcdでやってみたところ0のようです。 この場合、逆行列は存在しないのではないかと思いますが、このヒントが間違っているとはあまり思えず、困っています。 補足ですが、この問題は最小二乗法をエクセルで行列を用いて行うという趣旨です。 もとのデータとして(x、y)の座標が4点与えられており、行列Xはxの要素を縦にならべたもの、Aは最小二乗法で求める一次関数式のパラメーターa,bで、YはXと同様座標のy要素です。 私の理解が間違っていて、何行何列という部分に誤りがあるなどの指摘があれば、ぜひお願いいたします。 そもそもある行列とその転置行列の積の逆行列は存在するのかどうかもお願いします。 締め切りが近く、ちょっとあせっています。 よろしくお願いします!!

  • 行列

    D=M[{2x/y,-(2x/√yz)cosa}{-(2x/√yz)cosa,2x/z}] Mは行列を表す。{(1行1列),(1行2列)}{(2行1列),(2行2列)} D=x{(1/y)+(1/z)}±x√[{(1/y)+(1/z)}^2+{-4sin^2(a)/yz}] なぜこのようになるかを教えて下さい。詳しい途中式お願いします。