特定のサンプル共分散行列を使用してデータを生成する


22

共分散行列与えられた場合、サンプルの共分散行列を持つようにデータを生成する方法は?Σ = Σ SΣsΣ^=Σs


より一般的に:密度からデータを生成し、データパラメーターベクトル与えることに興味があります。これによりサンプルが生成され、そこから再び値推定できます。私が興味を持って中だと、逆の問題です:私たちは、パラメータのセットが指定されている場合はどうすれば、私たちはサンプルを生成したい、このような、その。X θ θ θ Sのx θ = θ Sfバツ|θバツθθ^θsバツθ^=θs

これは既知の問題ですか?そのような方法は便利ですか?アルゴリズムは利用可能ですか?


スケーラブルなソリューションはAttilio Meucciによって提供されます。この参照のリスク条およびMATLABコードを
ピーター・コットン

回答:


16

これらの種類の問題には、2つの異なる典型的な状況があります。

i)人口特性が指定された分布と一致する特定の分布からサンプルを生成します(ただし、サンプリングのばらつきにより、サンプルの特性が完全に一致していません)。

ii)サンプルの特性が指定されたものと一致するサンプルを生成したい(ただし、サンプルの数量を事前に指定された値のセットに正確に一致させる制約があるため、実際に希望する分布に由来しない)

2番目のケースが必要ですが、1番目のケースと同じアプローチに従い、追加の標準化手順を実行することで取得できます。

したがって、多変量法線の場合、どちらもかなり簡単な方法で実行できます。

最初のケースでは、母集団構造のないランダムな法線(期待値0および恒等共分散行列を持つiid標準法線など)を使用し、それを課すことができます-共分散行列を取得し、希望する意味に変換します。場合と平均人口であり、あなたが必要と共分散標準正規IIDされている、あなたは計算いくつかのために、(例えばA、適切なコレスキー分解を介して取得することができます) 。その後、、所望の人口特性を有します。Σ Z 、Y = LのZ + μ LのLをL ' = Σ L YμΣzy=Lz+μLLL=ΣLy

2番目の方法では、最初にランダムな法線を変換して、ゼロ平均と恒等共分散から離れたランダムな変動さえも除去する必要があります(サンプル平均をゼロにし、サンプル共分散)。しかし、正確な平均からサンプル偏差を除去する最初のステップである分散は、分布干渉します。(小さなサンプルでは、​​非常に厳しい場合があります。) 0 In0

これは、サンプルの平均値を減算することにより行うことができる()とのコレスキー分解計算。もしである左のコレスキー因子、次いで、サンプル平均0と同一のサンプル共分散を有するべきです。次に、を計算し、目的のサンプルモーメントのサンプルを得ることができます。(サンプルの量の定義方法によっては、などの要因による乗算/除算に関連する余分な小さなフィドルが存在する場合がありますが、その必要性を識別するのは簡単です。)zz=zz¯zLz0=L1zy=Lz0+μn1n


1
+1。先日、特定のサンプル共分散行列を使用してデータを生成する必要があり、その方法がわからず、何らかの理由で答えを見つけるのに時間がかかりました。このスレッドの可視性を高め、提案を説明するために、Matlabのコードを使用して別の回答をここに投稿しました。
アメーバは、モニカーを復活させる

@amoebaここに存在しない検索用語の1つを質問タグに入れる可能性があるかどうか(または、質問のテキストに小さな編集でいくつかを挿入する可能性があります。 )。私は今Rで同じことをすべきかどうか疑問に思っています...しかし、それは私の答えで、またはあなたの追加としてより良くなりますか?
Glen_b -Reinstateモニカ

1
私はすでに質問を編集する自由を取り、できるだけ多くのキーワードを含むように答えを定式化しようとしました。これが役立つことを願っています。ちなみに、この簡単なヒント(必要な共分散に変換する前に生成されたデータを白色化する)がグーグルにとって非常に難しいことに驚きました。私が最終的にあなたの答えを見つけるまで、何も(CVまたは他の場所で)見つけることができませんでした。
アメーバは、モニカを復活させる

1
@amoebaああ、わかりました、ありがとう。ええ、実際、多変量の場合についてはどこかで言及されたことを見たことはありません(特に一変量の場合について既に考えている場合や、すでに一変量の場合に見られます)。
Glen_b -Reinstateモニカ

@Glen_bおっしゃるように、これらの「クレンジングされた」サンプルの結果の分布は正規ではありません。結果として得られる分布がどのようなものか考えていますか?または、条件付き分布と等しい/等しくないかどうかZz¯=μCovz=Σ
gg

17

@Glen_bは良い回答(+1)を出しました。これをいくつかのコードで説明します。

与えられた共分散行列次元の多変量ガウス分布からサンプルを生成する方法は?これは、標準のガウス分布からサンプルを生成し、それらに共分散行列の平方根を乗算することにより、たとえばによって簡単に実行できます。これは、CVの多くのスレッドでカバーされています。たとえば、次のように、事前に指定された相関行列でデータを生成するにはどうすればよいですか Matlabの簡単な実装を次に示します。D Σ C 、H 、O LΣ ndΣcholΣ

n = 100;
d = 2;
Sigma = [ 1    0.7  ; ...
          0.7   1   ];
rng(42)
X = randn(n, d) * chol(Sigma);

結果のデータのサンプル共分散行列は、もちろん正確にははありません。たとえば、上記の例ではΣcov(X)

1.0690    0.7296
0.7296    1.0720

事前に指定されたサンプル相関または共分散行列でデータを生成する方法は?

@Glen_bが書いたように、標準のガウス分布からデータを生成した後、サンプルの共分散行列持つように、中心化、白色化、標準化ます。それから乗算します。c h o lΣ cholΣ

Matlabの例の続きを次に示します。

X = randn(n, d);
X = bsxfun(@minus, X, mean(X));
X = X * inv(chol(cov(X)));
X = X * chol(Sigma);

cov(X)、必要に応じて、リターン

1.0000    0.7000
0.7000    1.0000

+1。どういうわけか、この質問はCVのさまざまな場所でさまざまな形で行われています。多変量分布が非ガウス分布であることを認識している場合、続行する方法はありますか?
rgk

多変量分布の形式がわかっている場合は、おそらく場合によってはそれをどのように見せたいかを考えてください。
Glen_b-モニカの復職
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.