将相关矩阵粘贴到数据编辑器中

时间:2016-11-17 23:50:48

标签: stata

我正在使用我的变量之间的相关性来计算一些测试。我有两个主要问题:我使用svmat将我的矩阵粘贴到数据编辑器中。我的矩阵在对角线上最初为1,并且在此之下的所有相关性。当我使用svmat时,它会粘贴一个对称的矩阵,它会重复计算我的相关性。例如,

1 
0.5  1
0.3  0.5  1

然后使用svmat我得到类似

的内容
1    0.5   0.3
0.5  1     0.5
0.3  0.5   1

我的代码目前看起来像:

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

我想创建一个变量,它是矩阵中所有元素的总和。是否有捷径可寻?我现在正在逐行进行。

1 个答案:

答案 0 :(得分: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数据是为了您的目的可以避免的转移。