Matrix 皮尔逊/斯皮尔曼秩相关矩阵与Stata中的显著性星组合

Matrix 皮尔逊/斯皮尔曼秩相关矩阵与Stata中的显著性星组合,matrix,latex,stata,correlation,Matrix,Latex,Stata,Correlation,我想计算一个相关矩阵,其中下三角由Pearson组成,上三角由Spearman秩相关系数组成。 我正在使用corr和spearman,效果很好。但是使用corr我无法获得显著性(p值或星星等)。所以我尝试了pwcorr,list,它给出了确切的结果,但意义重大 使用此“新组合”,我无法创建与corr相同的矩阵 //Get Pearson Matrix corr var1 var2 var3 matrix R = r(C) //Get Row and Column Names local rn

我想计算一个相关矩阵,其中下三角由Pearson组成,上三角由Spearman秩相关系数组成。 我正在使用
corr
spearman
,效果很好。但是使用
corr
我无法获得显著性(p值或星星等)。所以我尝试了
pwcorr,list
,它给出了确切的结果,但意义重大

使用此“新组合”,我无法创建与
corr
相同的矩阵

//Get Pearson Matrix
corr var1 var2 var3

matrix R = r(C)

//Get Row and Column Names
local rnames : rownames R
local cnames : colnames R

//Get Spearman Rank Matrix
spearman var1 var2 var3, matrix star(0.05)
matrix S = r(Rho)

//Convert Pearson Matrix to Mata Matrix
mata: mataR = st_matrix("R")

//Convert Spearman Rank Matrix to Mata Matrix
mata: mataS = st_matrix("S")

//Clone Mata Pearson Matrix for Combined mataRS Mata Matrix
//Pearsson and Spearman Rank Matrix in Mata
mata: mataRS = mataR

//Replace Pearson r with Spearman rho in Top Half of Combined mataRS Mata Matrix
mata: mataRS[1,2] = mataS[2,1]
mata.... and so on.

//Display Pearson, Spearman Rank, and combined Matrices in Mata
mata: mataR
mata: mataS
mata: mataRS

//Convert combined mataRS Mata Matrix to Stata Matrix RS
mata: st_matrix("RS", mataRS)
matrix rownames RS = `rnames'
matrix colnames RS = `cnames'

//Display combined Stata Matrix RS
matlist RS, format(%8.4f)
当我将
corr
替换为
pwcorr时,list
会出现以下错误:

mata: mataRS[1,2] = mataS[2,1]
<istmt>:  3301  subscript invalid" for the command
mata:mataRS[1,2]=mataS[2,1]
:3301命令的下标无效
(使用的代码取自。)


有没有一个“聪明”的方法来解决这个问题?(顺便说一句,我和TeXMaker一起工作,所以如果输出可以转移到乳胶上那就太好了。)

该方法采用了本·詹(Ben Jann)的《周五下午的懒惰》中的方法,并利用了斯皮尔曼相关性只是等级上的皮尔逊相关性这一事实。将等级和原始数据叠加在同一个变量中,使缝合弗兰肯矩阵变得更加容易

它获取一个变量列表并生成一个LaTeX文件,该文件在主对角线下方包含Pearson相关性,在主对角线上方包含Spearman相关性。两者都有显著性

eststo clear
set more off
sysuse auto, clear
capture ssc install estout

local vlist "price mpg weight"
local upper
local lower `vlist'

expand 2, gen(version)

foreach v of local vlist {
    egen rank = rank(`v') if version == 1
    replace `v' = rank if version ==1
    drop rank
}

foreach v of local vlist {

   estpost correlate `v' `lower' if version == 0
   foreach m in b rho p count {
       matrix `m' = e(`m')
   }

   if "`upper'"!="" {
   estpost correlate `v' `upper' if version == 1
       foreach m in b rho p count {
           matrix `m' = e(`m'), `m'
       }
   }
   ereturn post b
   foreach m in rho p count {
       quietly estadd matrix `m' = `m'
   }
   eststo `v', title(`v')
   local lower: list lower - v
   local upper `upper' `v'
 }

/* Export the LaTeX matrix */
esttab using "frankenmatrix.tex", nonumbers mtitles noobs not tex replace title("Correlations")

/* Clean up the data and make sure we did things right */
drop if version ==1
drop version

corr `vlist'
spearman `vlist'
您应该在tex文档中使用
\input{frankenmatrix.tex}
来合并此文件。输出应如下所示:

遵循您在(旧)Statalist上引用的线程。它指向
corsp
,这是用户在SSC上编写的命令,也会生成p值


至于导出到LaTeX,有几个用户编写的命令,只需在Stata中键入
findit LaTeX

亲爱的Dimitry,谢谢你的代码。它工作得很好,但我确实从上面使用的代码中得到了不同的结果。假设我有5个变量A B C D E,其中A、B和C有两个版本:1)A、B和C(正常)和2)已经排名A、B和C。@eternity1我不完全确定你在问什么。首先,你的代码似乎没有生成正确的Spearman值,因为你没有完成“mata…”。。。。以此类推。“步骤。您需要为每个Spearman单元格添加一个步骤,以匹配
Spearman
的输出。第二部分对我来说毫无意义。我的代码为您创建变量的排名版本。您不需要这样做。差异可以通过您在计算排名时如何调整关系来解释(相等的观察值应与斯皮尔曼一起分配平均等级)如果您是手动进行的。亲爱的迪米特里,很抱歉让您感到困惑。例如:我有var1、var2、var3、var4。我的分析是使用转换后的变量完成的:var1和var2(手动)排列到dvar1和dvar2。因此,我想要的是一个皮尔逊相关矩阵,其中包含dvar1、dvar2、var3和var4。斯皮尔曼的秩相关应该包括var1、var2、var3和var4。斯皮尔曼应该“使用”原始变量var1、var2,因为(在我的研究中)对已排序的变量进行排序没有意义。谢谢:)亲爱的Dimitry,我很难将此表导出到excel作为csv文件。如果我使用“简单”版本,效果会很好:estpost关联adsue1 adsue2 adsue3 dspot dslope dleverage dvola升级降级索引\u bhar index\u casc,矩阵列表esttab。使用P\u correlation\u csv.csv,而不是取消堆叠noobs标题(“Pearson correlation matrix”)非数字替换我以为你想要输出为乳胶?