Stata绘图:相关系数可视化

发布时间:2023-04-20 阅读 982

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:林友晖 (中山大学岭南学院)
邮箱linyh78@mail2.sysu.edu.cn

编者按:本文参考自 fahad-mirza/correlogram_stata,特此致谢!


目录


1. 引言

在建立模型时,我们往往需要通过相关性分析对变量进行初步筛选,即模型中的控制变量和因变量之间应该具有一定的相关关系。通过 correlatepwcorr 等命令,我们可以轻松实现上述的相关性分析,但是如何用图像更加直观地将结果展示出来呢?

本文参考 GitHub 项目 correlogram_stata 提供的代码来说明如何使“相关系数可视化”。

2. 命令介绍

2.1 schemepack 命令

ssc install schemepack, replace

由于 Stata 自带的绘图模板有限,因此我们可以利用作者 Asjad Naqvi 推出的 schemepack 去绘制更加美观的图案。设定绘图模板的形式如下:

* 在绘图之前设定绘图模板
set scheme white_tableau
* 永久设定绘图模板
set scheme white_tableau, perm
* 在 twoway 选项 scheme() 中指定绘图模板
twoway (scatter var2 date if group==1), scheme(white_tableau)  

其中,模板 white_tableau 可以按需替换,有 30 种绘图模板可供选择,详细介绍可参考推文 史上最牛Stata绘图模版-schemepack:酷似R中的ggplot2

2.2 palettes 命令

ssc install palettes, replace

palettes 为调色板工具,命令语法如下:

* 语法1:从一个或者多个调色板中检索/显示颜色,并返回至 r() 中
colorpalette [argument] [, palette_options macro_options graph_options ]

* 其中,argument 设定如下
palette [[, palette_options] / [ palette [, palette_options] / ... ]]

* 语法2:浏览多个调色板,但不在r()中返回颜色
colorpalette [, palette_options graph_options ] : pspec [ / pspec / ... ]

* 其中,pspec 设定如下
palette [, palette_options]

由于我们需要利用返回值 r(),以便在绘图时调用调色板,因此选用语法 1。下面介绍一下本文利用语法 1 绘图时主要利用到的几个选项。

调色板选项 palette options

  • n(#):指定调色板的颜色数量;
  • intensity(numlist):设置颜色强度,数值范围为 0 到 255。其中 0 到 1 的值使颜色变淡,大于 1 的值使颜色变深。

附加图形选项:

  • nograph:禁止生成调色板预览图。

另外,语法 1 的返回值 r() 储存着以下内容:

  • r(n):返回的颜色数量;
  • r(ptype):颜色;
  • r(pname):调色板名称;
  • r(p):以空格分隔的颜色列表;
  • r(p#):第 # 个颜色。

若出现错误 colrspace_library_palettes.sthlp not found,则需要 ssc install colrspace, replace。如果想要了解更多,可以 help colorpalette 或者参考连享会往期推文:Stata绘图:自定义绘图利器-palettes

2.3 labutil 命令

ssc install labutil, replace

利用 labmask 可以将字符变量定义为另一个变量的值标签,命令语法如下:

labmask varname [if exp] [in range] , values(varname) [ lblname(lblname) decode ]

其中,

  • values(varname):指定一个变量,其值 (默认) 或值标签 (可选) 将被用作 varname 的值标签。这是一个必选项。
  • lblname(lblname):指定要定义的值标签的标签名为 lblname。默认情况下,它们将具有与 varname 相同的名称。
  • decode:指定变量的值标签应该用作 varname 的值标签。默认使用 varname 的值。

3. 实例演示

3.1 数据处理

本节采用 Stata 内置的 auto.dta 来演示。首先,导入原始数据。

. sysuse auto, clear

在此,我们利用数据集中的 7 个变量 pricempgtrunklengthturnforeign 作为示范。

. * 定义存放变量暂元
. local var_corr price mpg trunk weight length turn foreign 
. * 定义存放变量个数暂元
. local countn : word count `var_corr'  

“相关系数可视化”的关键在于对相关系数矩阵的数据、列名和行名进行提取,之后所有的操作皆是基于该矩阵。

* 计算相关系数矩阵
. quietly correlate `var_corr'
. matrix C = r(C)
. mat list C  //矩阵如下

利用暂元存放矩阵的行名,在后续作图中作为横轴和纵轴的名称。

. local rnames : rownames C  // 存放行名
. dis "`rnames'"

接下来,清除原数据集,并利用相关系数矩阵生成新的数据集。

. * 现在从相关系数矩阵中生成变量
. local tot_rows : display `countn' * `countn'
. clear
. set obs `tot_rows' // 生成7*7个观察值

从相关系数矩阵中生成相关系数变量 corrabs_corr,同时生成相关系数对应的两个变量。

. * 生成字符型变量 corrname1、corname2,和数值型变量 y、x、corr、abs_corr
. generate corrname1 = ""
. generate corrname2 = ""
. generate y = .
. generate x = .
. generate corr = .
. generate abs_corr = .              
. local row = 1
. local y = 1
. local rowname = 2                    
. foreach name of local var_corr {
  2.    forvalues i = `rowname'/`countn' { 
  3.        local a : word `i' of `var_corr'
  4.        replace corrname1 = "`name'" in `row'
  5.        replace corrname2 = "`a'" in `row'
  6.        replace y = `y' in `row'
  7.        replace x = `i' in `row'
  8.        replace corr = round(C[`i',`y'], .01) in `row'
  9.        replace abs_corr = abs(C[`i',`y']) in `row'
 10.        local ++row                     
 11.     }
 12.     local rowname = `rowname' + 1
 13.     local y = `y' + 1               
 14. }
. drop if missing(corrname1)  // 去除多余的观察值
. replace abs_corr = 0.1 if abs_corr < 0.1 & abs_corr > 0.04
. list in 1/10
     +-----------------------------------------------+
     | corrna~1   corrna~2   y   x   corr   abs_corr |
     |-----------------------------------------------|
  1. |    price        mpg   1   2   -.47   .4685967 |
  2. |    price      trunk   1   3    .31   .3143316 |
  3. |    price     weight   1   4    .54   .5386115 |
  4. |    price     length   1   5    .43   .4318312 |
  5. |    price       turn   1   6    .31   .3096174 |
     |-----------------------------------------------|
  6. |    price    foreign   1   7    .05         .1 |
  7. |      mpg      trunk   2   3   -.58    .581585 |
  8. |      mpg     weight   2   4   -.81   .8071749 |
  9. |      mpg     length   2   5    -.8   .7957795 |
 10. |      mpg       turn   2   6   -.72   .7191863 |
     +-----------------------------------------------+

. * 其中 y 和 corrname1,以及 x 和 corrname2 的对应关系如下:
. list corrname1 y corrname2 x in 1/10
     +-----------------------------+
     | corrna~1   y   corrna~2   x |
     |-----------------------------|
  1. |    price   1        mpg   2 |
  2. |    price   1      trunk   3 |
  3. |    price   1     weight   4 |
  4. |    price   1     length   5 |
  5. |    price   1       turn   6 |
     |-----------------------------|
  6. |    price   1    foreign   7 |
  7. |      mpg   2      trunk   3 |
  8. |      mpg   2     weight   4 |
  9. |      mpg   2     length   5 |
 10. |      mpg   2       turn   6 |
     +-----------------------------+

3.2 绘制图像

利用 colorpalette 设置图像颜色,并利用返回值 r(p#) 对不同区间中的相关系数 corr 定义不同的颜色。

. colorpalette HCL pinkgreen, n(10) nograph intensity(0.65)
. colorpalette CET CBD1, n(10) nograph // 此处对应着最后相关系数图的图像颜色。
. generate colorname = ""
. local col = 1
. forvalues colrange = -1(0.2)0.8 {
  2.     replace colorname = "`r(p`col')'" if corr >= `colrange' & corr < `=`colrange' + 0.2'
  3.     replace colorname = "`r(p10)'" if corr == 1
  4.     local ++col
  5. }       
. list corr colorname in 1/10 // 不同区间的corr对应不同的颜色
     +--------------------+
     | corr     colorname |
     |--------------------|
  1. | -.47   160 185 249 |
  2. |  .31   221 206 167 |
  3. |  .54   205 185 121 |
  4. |  .43   205 185 121 |
  5. |  .31   221 206 167 |
     |--------------------|
  6. |  .05   234 228 215 |
  7. | -.58   160 185 249 |
  8. | -.81    58 144 254 |
  9. |  -.8    58 144 254 |
 10. | -.72   119 164 252 |
     +--------------------+

调色板颜色组合的预览图如下图所示:

. * 利用暂元保存绘图命令
. forvalues i = 1/`=_N' {
  2.     local slist "`slist' (scatteri `=y[`i']' `=x[`i']' "`: display %3.2f corr[`
> i']'", mlabposition(0) msize(`=abs_corr[`i']*15') mcolor("`=colorname[`i']'"))"
  3. }
. * 保存纵轴标签
. labmask y, val(corrname1)
. labmask x, val(corrname2)      
. levelsof y, local(yl)
. foreach l of local yl {
  2.    local ylab "`ylab' `l'  `" "`:lab (y) `l''" "'"         
  3. }       

. * 保存横轴标签
. levelsof x, local(xl)
. foreach l of local xl {
  2.     local xlab "`xlab' `l'  `" "`:lab (x) `l''" "'"     
  3. }       
. * 利用上述保存的暂元绘制图像
. twoway `slist', title("Correlogram of Auto Dataset Cars", size(3) pos(11)) ///
>     note("Dataset Used: Sysuse Auto", size(2) margin(t=5))                 ///
>     xlabel(`xlab', labsize(2.5)) ylabel(`ylab', labsize(2.5))              ///
>     xscale(range(1.75)) yscale(range(0.75)) ytitle("") xtitle("")          ///
>     legend(off) aspect(1) scheme(white_tableau)

. * 以 PNG 格式输出图像            
. graph export "correlogram_stata_cbf.png", as(png) width(1920) replace 

当颜色设定为 HCL pinkgreen 时,最后的图像如下图所示:

当颜色设定为 CET CBD1 时,最后的图像如下图所示:

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 可视化, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh