我正在使用我的变量之间的相关性来计算一些测试。我有两个主要问题:我使用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
我想创建一个变量,它是矩阵中所有元素的总和。是否有捷径可寻?我现在正在逐行进行。
答案 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数据是为了您的目的可以避免的转移。