查看原文
其他

Stata绘图:相关系数可视化

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会课程 · 2023 五一论文班

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

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

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 引言

  • 2. 命令介绍

    • 2.1 schemepack 命令

    • 2.2 palettes 命令

    • 2.3 labutil 命令

  • 3. 实例演示

    • 3.1 数据处理

    • 3.2 绘制图像

  • 4. 相关推文



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

  • 专题:数据处理
    • Stata:边际处理效应及其可视化-mtefe-T309
    • Stata: 约翰霍普金斯大学 COVID-19 疫情数据处理及可视化
  • 专题:Stata绘图
    • Stata绘图:COVID-19数据可视化
    • Stata可视化:能用图形就不用表格
    • Stata绘图:回归系数可视化-multicoefplot
    • Stata绘图-可视化:组间差异比较散点图
    • Stata可视化:biplot一图看尽方差、相关性和主成分
    • Stata绘图-组间差异可视化:不良事件火山图、点阵图
    • forest-森林图:分组回归系数可视化
    • Stata绘图:回归系数可视化-论文更出彩
    • Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图
    • Stata绘图:随机推断中的系数可视化
  • 专题:结果输出
    • Stata可视化:让他看懂我的结果!
  • 专题:回归分析
    • Stata:在线可视化模拟-OLS-的性质
  • 专题:面板数据
    • Stata绘图:面板数据可视化-panelview
  • 专题:Python-R-Matlab
    • Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化
  • 专题:工具软件
    • 知乎热议:有哪些一用就爱上的可视化工具?
  • 专题:其它
    • 数据可视化:带孩子们边玩边学吧
  • 专题:公开课
    • ⏩连享会公开课:实证研究中的数据可视化

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存