2016-11-17 12 views
0

私の変数間の相関関係を使っていくつかのテストを計算しています。私は2つの主な問題があります:svmatを使用して、マトリックスをデータエディタに貼り付けています。私の行列はもともと対角線上の1つで、これより下のすべての相関関係です。私がsvmatを使うと、それは私の相関を二重にカウントする対称的な行列を貼り付けます。例えば、相関行列をデータエディタに貼り付ける

1 
0.5 1 
0.3 0.5 1 

は、その後、私は私のコードは、現在のように見える

1 0.5 0.3 
0.5 1  0.5 
0.3 0.5 1 

ような何かを得る svmatを使用して:

matrix accum R = e1-e48 
matrix R = corr(R) 
matrix list R 
clear 
svmat R 

を私はすべての和である変数を作成したいです行列の要素これを行う簡単な方法はありますか?私はこの時点で行ごとにそれをやっています。

答えて

0

プログラミングフォーラムで困惑している完全で再現性のあるコードは表示されませんが、良い例を投稿するにはhttps://stackoverflow.com/help/mcveを参照してください。

バックアップした目標は、相関行列の合計です。ここでは、correlateの使用法を説明します。このコマンドの直後にマトリックスが利用可能です。同じテクニックは、あなたのコードのように他の方法で得られた相関行列にも適用されることに注意してください。

. sysuse auto, clear 
(1978 Automobile Data) 

. corr headroom trunk length turn displacement 
(obs=74) 

      | headroom trunk length  turn displa~t 
-------------+--------------------------------------------- 
    headroom | 1.0000 
     trunk | 0.6620 1.0000 
     length | 0.5163 0.7266 1.0000 
     turn | 0.4245 0.6011 0.8643 1.0000 
displacement | 0.4745 0.6086 0.8351 0.7768 1.0000 

. ret li 

scalars: 
        r(N) = 74 
       r(rho) = .6620111289412028 

matrices: 
        r(C) : 5 x 5 

. mata : sum(st_matrix("r(C)")) 
    17.97943754 

したがって、行列をMataに渡して合計を取得します。

また、戻すこともできます。

行列の和は単なる定数であるため、Stata変数に保持する必要はありません。これも無駄になります。スカラーまたはローカルマクロが適切な選択肢です。あなたはスカラーとして戻っStataのに合計を渡すことができます:

. mata : st_numscalar("rsum", sum(st_matrix("r(C)"))) 

. di rsum 
17.979438 

明らかにあなたはまた、トレースを引く変数の数に等しく、そして残りを半減させることができ、最後のポイントを表示するには

。あなたはそれを行うためにマタに滞在することも、Stataで行うこともできます。要するに、相関行列をStataデータに変換することは、目的に応じて避けることができます。

関連する問題