Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:林友晖 (中山大学岭南学院)
邮箱:linyh78@mail2.sysu.edu.cn
编者按:本文参考自 fahad-mirza/correlogram_stata,特此致谢!
目录
在建立模型时,我们往往需要通过相关性分析对变量进行初步筛选,即模型中的控制变量和因变量之间应该具有一定的相关关系。通过 correlate
、pwcorr
等命令,我们可以轻松实现上述的相关性分析,但是如何用图像更加直观地将结果展示出来呢?
本文参考 GitHub 项目 correlogram_stata 提供的代码来说明如何使“相关系数可视化”。
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。
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。
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
的值。
本节采用 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 |
+-----------------------------+
利用 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
时,最后的图像如下图所示:
Note:产生如下推文列表的 Stata 命令为:
lianxh 可视化, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh