全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
6146 4
2013-06-18
看别人的论文中,在给出变量的相关系数时,往往是行变量名称比列变量名称少一个,这样生成的相关系数矩阵在对角线位置上就免于显示行、列的变量名称相同时相关系数为1.000的那部分内容。

或者可以这样问:在输出相关系数矩阵时,如何使得对角线上的元素缺省显示(不显示)

比如
默认的pwcorr_a命令生成的相关系数矩阵为如下格式 5×5
  a b c d e
a   1
b   1
c      1
d      1
e        1

而论文中常见的格式为 4×5
  a b c d e
b   
c      
d      
e        
这样对角线上不会是相同变量之间的相关系数了。

请问:在stata中,有什么办法生成论文中格式的相关系数矩阵?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-6-18 11:23:20
--------------------------------------------------------------------
Stata 2014寒假培训研讨班
(北京, 2014 年 1月 15-23 日,http://baoming.pinggu.org/Default.aspx?id=93
--------------------------------------------------------------------


时间有限,花了 10 多分钟改了一下,能初步实现你所说的功能,但还需要调整一些细节。
新程序命名为 pwcorr_x


范例:
     sysuse nlsw88, clear
     pwcorr_x age wage hours tenure tenure //最后一个变量需要输入两遍,输出结果后还需要删除第一行

             |      age     wage    hours   tenure
-------------+---------------------------------------------
         age |
        wage |  -0.036*  
       hours |  -0.028     0.159***
      tenure |   0.074***  0.178***  0.161***



*-存在问题:

* 1 最后一个变量需要输入两遍
* 2 输出结果后还需要删除第一行
* 3 结果的显示格式控制的不好,还需调整


程序下载:
(下载,解压后放置于 D:\stata12\ado\plus\x 文件夹下即可,帮助文件没有制作,使用 help pwcorr 即可)

pwcorr_x.rar
大小:(1.43 KB)

 马上下载

本附件包括:

  • pwcorr_x.ado




修改细节:
*! version 3.0.8  13sep2000
* Modified by Arlion, 2005.7.12
* To add star at 1% , 5% , 10% significant levels

*! [NOONE] option 2013.06.18 删除对角线上的 1

cap program drop pwcorr_x
program define pwcorr_x, byable(recall)
version 6
syntax [varlist(min=2)] [if] [in] [aw fw] [, NOONE /*
  */ Bonferroni Obs Print(real -1) SIDak SIG star1(real 0.01) star5(real 0.05) star10(real 0.1) ]
tempvar touse
mark `touse' `if' `in'   /* but do not markout varlist */
tokenize `varlist'

local i 1
while "``i''" != "" {
  capture confirm str var ``i''
  if _rc==0 {
   di in gr "(``i'' ignored because string variable)"
   local `i' " "
  }
  local i = `i' + 1
}
local varlist `*'
tokenize `varlist'
local nvar : word count `varlist'
if `nvar' < 2 { error 102 }

local weight "[`weight'`exp']"
local nvar : word count `varlist'
local adj 1
if "`bonferr'"!="" | "`sidak'"!="" {
  if "`bonferr'"!="" & "`sidak'"!="" { error 198 }
  local nrho=(`nvar'*(`nvar'-1))/2
  if "`bonferr'"!="" { local adj `nrho' }
}
/*
if (`star'>=1) {
  local star = `star'/100
  if `star'>=1 {
   di in red "star() out of range"
   exit 198
  }
}
*/
if (`print'>=1) {
  local print = `print'/100
  if `print'>=1 {
   di in red "print() out of range"
   exit 198
  }

}
  
local j0 1
while (`j0'<=`nvar') {
  di
  local j1=min(`j0'+6,`nvar')
  local j `j0'
  di in smcl in gr _skip(13) "{c |}" _c
    *while (`j'<=`j1') {
  while (`j'<`j1') {                         //2013-06-18 modify
   di in gr %9s abbrev("``j''",8) _c
   local j=`j'+1
  }
  local l=9*(`j1'-`j0'+1)
  di in smcl in gr _n "{hline 13}{c +}{hline `l'}"

  local i `j0'
    *while `i'<=`nvar' {
  while `i'<`nvar' {                        //2013-06-18 modify
   di in smcl in gr %12s abbrev("``i''",12) " {c |} " _c
   local j `j0'
     *while (`j'<=min(`j1',`i')) {
   while (`j'<min(`j1',`i')) {           //2013-06-18 modify
    cap corr ``i'' ``j'' if `touse' `weight'
    if _rc == 2000 {
     local c`j' = .
    }
    else {
     local c`j'=r(rho)
    }        
    local n`j'=r(N)
    local p`j'=min(`adj'*tprob(r(N)-2,/*
    */ r(rho)*sqrt(r(N)-2)/ /*
    */ sqrt(1-r(rho)^2)),1)
    if "`sidak'"!="" {
     local p`j'=min(1,1-(1-`p`j'')^`nrho')
    }
    local j=`j'+1
   }
   local j `j0'
*************************************************
//Modifying begin ,by Arlion
           *while (`j'<=min(`j1',`i')) {
   while (`j'<min(`j1',`i')) {                         //2013-06-18 modify
                        if (`p`j''<=`star1'&`i'!=`j'){
                                local ast "***"   
                        }
                        else if (`p`j''>`star1'&`p`j''<=`star5'&`i'!=`j'){
                                local ast "** "   
                        }
                        else if (`p`j''>`star5'&`p`j''<=`star10'&`i'!=`j'){
                                local ast "*  "   
                        }
                    
    else local ast "   "
    if `p`j''<=`print' | `print'==-1 |`i'==`j' {
//     di " " %7.4f `c`j'' "`ast'" _c
                             di _col(1) %7.3f `c`j'' "`ast'" _col(2) _c
    }
    else  di _skip(9) _c
    local j=`j'+1
   }
// Modifying end, by Arlion
***************************************************
   di
   if "`sig'"!="" {
    di in smcl in gr _skip(13) "{c |}" _c
    local j `j0'
      *while (`j'<=min(`j1',`i'-1)) {
    while (`j'<min(`j1',`i'-1)) {                         //2013-06-18 modify
     if `p`j''<=`print' | `print'==-1 {
      di "   " %7.4f `p`j'' _c
     }
     else di _skip(9) _c
     local j=`j'+1
    }
    di
   }
   if "`obs'"!="" {
    di in smcl in gr _skip(13) "{c |}" _c
    local j `j0'
      *while (`j'<=min(`j1',`i')) {
    while (`j'<=min(`j1',`i')) {                       //2013-06-18 modify
     if `p`j''<=`print' | `print'==-1 /*
     */ |`i'==`j' {
      di "  " %7.0g `n`j'' _c
     }
     else di _skip(9) _c
     local j=`j'+1
    }
    di
   }
   if "`obs'"!="" | "`sig'"!="" {
    di in smcl in gr _skip(13) "{c |}"
   }
   local i=`i'+1
  }
  local j0=`j0'+7
}
end

------------------------------------------------------------------------------
Stata 2014寒假培训研讨班
(北京, 2014 年 1月 15-23 日,http://baoming.pinggu.org/Default.aspx?id=93
------------------------------------------------------------------------------



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-18 12:11:48
arlionn 发表于 2013-6-18 11:23
--------------------------------------------------------------------
Stata 暑期培训研讨班
(北京,  ...
连老师,太感谢您了!
您辛苦!现在的这个pwcorr_x已经能减少在表格调整方面很大的工作量了!


我再贪心一点的话,希望改进后的版本 能够将【显示不显示对角线上的元素】作为pwcorr_a或者pwcorr_x的一个【选项】,
比如叫 nodiag(#),#号代表 row column,表示在行变量列表 或者  列变量列表中,第一个变量的名称省略,从而实现取消显示对角线上的元素。
当然,以上只是我的建议,仅供您参考。

同时感谢您给出源代码,供我和坛友们学习体会!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-18 18:33:23
学习
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-11-24 12:38:11
好用
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群