事前に指定されたスパースパターンで対称正定行列を生成します


9

事前に指定されたスパース構造(ノードのグラフで指定)を使用して相関行列(対称psd)を生成しようとしています。グラフで接続されているノードには相関関係、残りはすべて0、対角線はすべて1です。p×ppρU(0,1)

この行列を何度か生成しようとしましたが、有効な相関行列が得られることはまれです。

相関行列whpを保証する方法はありますか?私は正の相関しか持つことができないので、などはオプションではないことに注意してください。ρU(1,1)

どんな助けでも大歓迎です!


多分RのMatrixパッケージの関数nearPDが役立ちます。
niandra82

固定されているスパース性の尺度は何ですか?データはバイナリまたは非負の連続でなければなりませんか?
ttnphns 2015年

@ niandra82:nearPDはマトリックスのスパース性を破壊するので良くありません。
ブレードランナー、

1
一般に、この質問で説明されているようなマトリックス分布はありません。たとえば、3つの係数持つケースを考えます。もしと、次に行列が正定値である場合にのみ。ただし、と両方を持つことはできません。ρ σ τ τ = 0 ρ > 0 σ > 0 ρ 2 + σ 2 < 1 ρ U 0 1 σ U 0 1 3×3ρ,σ,ττ=0ρ>0,σ>0ρ2+σ2<1ρU(0,1)σU(0,1)
whuber

3
次に、最初に相関行列を生成しないでください。次に、インデックス付けされた要素を0に強制するその行列の対称インデックスを作成します。Sparcityはインデックスのサイズによって指定され、rのサンプルのような関数を使用してランダムを組み込むことができます。0に強制する対角要素がいくつあっても、マトリックスは引き続きpdになります
Zachary Blumenfeld

回答:


2

閉じますが、@ Rodrigo de Azevedoの葉巻はありません。

溶液は、最大値を見つけるために、半正定値計画を使用することである、および最小値(非負のある対象)の、所定スパースパターンとの相関行列が正であるように半確定(psd)。となるようなすべての値は、psd行列を生成します(読者のための演習) ρmaxρminρρρmaxρρmax

したがって、値のみを取ることができる分布を選択するか、受け入れ/拒否を使用して、生成されない生成された値を拒否する必要がありますpsdマトリックス。ρ[ρmax,ρmax]ρ

MATLABでYALMIPを使用した4 x 4行列の例

sdpvar rho % declare rho to be a scalar variable
% find maximum value of rho (by minimizing -rho) subject to prescribed matrix being psd.
optimize([1 0 rho 0;0 1 rho 0;rho rho 1 rho;0 0 rho 1] >= 0,-rho) 
% find minimum value of rho subject to prescribed matrix being psd and rho being >= 0.
optimize([[1 0 rho 0;0 1 rho 0;rho rho 1 rho;0 0 rho 1] >= 0,rho >= 0],rho) 

結果:最大rho = 0.57735、最小rho =0。次元またはスパースパターンに関係なく、rhoが負でなく、指定された行列がpsdであることを条件として、ゼロがrhoの最小値になることはすぐにわかります。したがって、非負の最小値を見つけるために半確定最適化を実行する必要はありません。ρ


4
これは、質問の興味深い解釈です。非ゼロの非対角係数がすべて等しいと仮定します(これにより、問題が大幅に簡素化されます)。それが意図された解釈であったのか、またはすべての非ゼロの非対角係数が共通の分布からの独立した実現であると想定されているのかは明らかではありません。
whuber

それが私がした解釈です。あなたがそれを言及した今、私は別の解釈が可能であるのを見ることができました。少なくとも私の解釈には、かなり明確な問題が発生するという長所があります。ρの最大値を見つけるために問題を定式化でき、その解決策は研究していませんが、相関行列の1つの三角形のすべての非ゼロの非対角要素は、必ずしも等しくない非負の値≤で埋めることができます。その値、そして必然的に完全に入力された行列がpsdになるようにします。
Mark L. Stone

0

相関行列は、対称、半正定値であり、かつ持つ「は、その主対角線のS。相関行列は、目的関数が任意、たとえばゼロ関数である次の半定値プログラム(SDP)を解くことによって見つけることができます。1n×n

minimizeOn,Xsubject tox11=x22==xnn=1XOn

スパース制約などの追加の制約がある場合

xij=0 for all (i,j)Z[n]×[n]

と非負性制約、場合、次のSDPを解きますXOn

minimizeOn,Xsubject tox11=x22==xnn=1xij=0 for all (i,j)Z[n]×[n]XOnXOn

3×3

我々が持っているしたいとしと。これは、MATLAB + CVXスクリプトです。のx 12xは230をx13=0x12,x230

cvx_begin sdp

    variable X(3,3) symmetric

    minimize( trace(zeros(3,3)*X) )
    subject to

        % put ones on the main diagonal
        X(1,1)==1
        X(2,2)==1
        X(3,3)==1

        % put a zero in the northeast and southwest corners
        X(1,3)==0

        % impose nonnegativity
        X(1,2)>=0
        X(2,3)>=0

        % impose positive semidefiniteness
        X >= 0

cvx_end

スクリプトを実行し、

Calling sedumi: 8 variables, 6 equality constraints
------------------------------------------------------------
SeDuMi 1.21 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 6, order n = 6, dim = 12, blocks = 2
nnz(A) = 8 + 0, nnz(ADA) = 36, nnz(L) = 21
 it :     b*y       gap    delta  rate   t/tP*  t/tD*   feas cg cg  prec
  0 :            3.00E+000 0.000
  1 : -1.18E-001 6.45E-001 0.000 0.2150 0.9000 0.9000   1.86  1  1  1.2E+000
  2 : -6.89E-004 2.25E-002 0.000 0.0349 0.9900 0.9900   1.52  1  1  3.5E-001
  3 : -6.48E-009 9.72E-007 0.097 0.0000 1.0000 1.0000   1.01  1  1  3.8E-006
  4 : -3.05E-010 2.15E-009 0.000 0.0022 0.9990 0.9990   1.00  1  1  1.5E-007
  5 : -2.93E-016 5.06E-015 0.000 0.0000 1.0000 1.0000   1.00  1  1  3.2E-013

iter seconds digits       c*x               b*y
  5      0.3   5.8  0.0000000000e+000 -2.9302886987e-016
|Ax-b| =  1.7e-015, [Ay-c]_+ =  6.1E-016, |x|= 2.0e+000, |y|= 1.5e-015

Detailed timing (sec)
   Pre          IPM          Post
1.563E-001    2.500E-001    1.094E-001    
Max-norms: ||b||=1, ||c|| = 0,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 1.
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +0

CVXが見つけたソリューションを見てみましょう、

>> X

X =

    1.0000    0.4143         0
    0.4143    1.0000    0.4143
         0    0.4143    1.0000

この行列は半正定ですか?正定ですか?

>> rank(X)

ans =

     3

>> eigs(X)

ans =

    1.5860
    1.0000
    0.4140

予想通り正定です。非ゼロ(線形)目的関数を選択することにより、正の半定相関行列を見つけることができます。


このサイトでは、「生成」は「ランダム分布から引き出す」ことを意味すると理解されるため、コードがランダム相関行列を生成する方法を説明し、それらが従う分布を示すことができますか?
whuber

@whuber OPは不可能を求めています。2015年1月1日にコメントしました。ランダムな相関行列を生成する場合は、ランダムな正方行列を生成し、上記の半定値プログラムの目的関数で使用します。あるいは、立方体にわたって均一である確率変数の実現を生成する(相関)の非対角エントリに入れと行列上の主対角線、正の半正定値でないものを破棄します。非負性制約がある場合は、キューブ均一にサンプリングします
[1,1](n2)
1
[0,1](n2)
Rodrigo de Azevedo

3
@whuber これは、相関行列のセットにマップする3D楕円 [png] です。OPが必要とするのは、楕円を非負のオクタントと交差させ、次に形式の平面と交差させることです。行列が場合、それは楕円の内部になければなりません。非ゼロの目的関数でSDPを使用すると、楕円の表面をサンプリングできます。楕円形は凸型であるため、サーフェスポイントの凸型の組み合わせも相関行列にマッピングされます。3×3xij=00
ロドリゴデアゼベド

1
それは状況を説明する優れた方法です。
whuber

3
相対ボリュームがどのように縮小するかについては正しいです。これがまさにこれが難しい問題である理由です。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.