Stata绘图:相关系数可视化
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会课程 · 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. 引言
在建立模型时,我们往往需要通过相关性分析对变量进行初步筛选,即模型中的控制变量和因变量之间应该具有一定的相关关系。通过 correlate
、pwcorr
等命令,我们可以轻松实现上述的相关性分析,但是如何用图像更加直观地将结果展示出来呢?
本文参考 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 个变量 price、mpg、trunk、length、turn、foreign 作为示范。
. * 定义存放变量暂元
. 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个观察值
从相关系数矩阵中生成相关系数变量 corr、abs_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 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。