
以下の行列を考えます.
行列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の成分の値を示しています.
上述した現象の原因についてご教授いただけると幸いです.

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))

検証していただきありがとうございます。
そうですか、計算結果は同じようになりましたか。
> 繰り返し回数を増やしたら各成分が小さくなると思っていたのですが、逆に大きくなりました。
有限長の小数で演算を繰り返すほどに、誤差が膨らんでいくという可能性が考えられますね。
私が用いた言語と異なる言語で検証していただき、たいへん参考になりました。ありがとうございました。
No.3
- 回答日時:
M列N行だと思いますが、
NがMに対して少ないので、
独立したガウスノイズになっているか疑問です。
なので逆行列が正確に求められるかも疑問です。
・・・がinvでも似たような結果になるのでは・・・・。
> M列N行だと思いますが、
> NがMに対して少ないので、
> 独立したガウスノイズになっているか疑問です。
N行M列でした。失礼しました。独立したガウスノイズになっていることも確認しました。
ご指摘ありがとうございます。
No.1
- 回答日時:
>行列X(M行N列,成分の値は分散1のガウスノイズ)
これは、N行M列の間違いですか?
で、発生させたガウスノイズ自体は独立(共分散=0)ということなんですかね。
ということは、求めた分散共分散行列は、ほとんど単位行列に近いものと思ってよいですか?
多分、その現象は、数値計算上の不安定性(誤差)によるものだと思います。S行列は、基本的には逆行列が存在するんだと思いますが、pinvではなくて、普通にinvを使えばどうでしょう。
ご回答ありがとうございます。
> N行M列の間違いですか?
はい、間違いでした。N行M列ですね。失礼しました。
> 発生させたガウスノイズ自体は独立(共分散=0)ということなんですかね。
> ということは、求めた分散共分散行列は、ほとんど単位行列に近いものと思ってよいですか?
はい、仰るとおりです。
> 多分、その現象は、数値計算上の不安定性(誤差)によるものだと思います。S行列は、基本的には逆行列が存在す> るんだと思いますが、pinvではなくて、普通にinvを使えばどうでしょう。
pinvの場合とinvの場合で計算結果はほぼ同じでした。
ただ、現象の原因としては、rabbit_catさんの仰るように、数値の誤差が膨らんだことは十分に考えられます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセル 自動計算 1 2023/01/30 13:28
- 数学 確率について 事象Aが起こる確率が0.25である独立行列において、試行回数を5回とした時Aの起こった 2 2022/06/06 19:46
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) エクセルで最初に値が入っているセルを見つける方法はありますか? 2 2023/07/18 14:58
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3行3列の行列の和と積の計算...
-
基本行列の積
-
Aが2次正方行列とする。 (1)A...
-
線形代数です。 正方行列A,BがA...
-
回転行列の4行4列の意味について
-
高次の最小2乗法の計算
-
matlabで条件をみたしたデータ...
-
det(-A) = (-1)^n detA
-
有名な行列式
-
数値演算言語 octaveの "不正な...
-
逆行列(LU分解)を求める数値的...
-
電卓の使い方 乗数はどうした...
-
15%増しの計算方法
-
サイン二乗xの微分を教えてく...
-
原価25000円に利益10%を上乗せ...
-
「原価に20%乗っけて販売」っ...
-
積分で1/x^2 はどうなるのでし...
-
2割乗せる。
-
エクセル:6E-05という表現は?
-
2の6乗の答えと計算方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
3行3列の行列の和と積の計算...
-
線形代数です。 正方行列A,BがA...
-
matlabで条件をみたしたデータ...
-
【数値解析】行列の可約、既約...
-
数学「行列」の実生活への応用
-
Zパラメータの求め方
-
掃き出し法は、行の基本変形と...
-
行列を分割するメリットを教え...
-
行列の指数関数
-
Statviewでの解析で
-
統計数学の問題でノルム1に基準...
-
ansatzとは
-
行列の書き方
-
基本行列の積
-
線形代数学のユニタリ行列の質問
-
[☆急いでます!!☆] 基本変形の解...
-
零行列 O のことも 零因子 と呼...
-
考え方が全くわかりません。お...
-
行列の消去法のコツなど教えて...
-
ブロック基本行列は どのような...
おすすめ情報