👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:最新专题 | 计量专题 | 关于连享会
🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)
课程特色 · 2024机器学习与因果推断:
懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。
作者: 连玉君 (中山大学)
邮箱: arlionn@163.com
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
仓库地址:连享会-Lasso专题
图形模板
. ssc install schemepack, replace //white_tableau 模板
. set scheme white_tableau //设定绘图风格为white_tableau
DGP
*-生成数据
clear
set obs 100
set seed 123
gen obsid = _n
gen x1 = rnormal()
gen x2 = rnormal()
gen e = rnormal()*0.7
gen y = 0.3*x1 + 0.9*x2 + e
*-不同参数设定下的 RSS
set obs 100000
gen b1 = .
gen b2 = .
gen yhat = .
gen ehat2 = .
gen rss = .
gen L1 = .
gen L2 = .
local id = 1 // 计数器
forvalues b1 = -1.2(0.01)0.8{ //-0.2(0.03)0.8
forvalues b2 = -1.3(0.01)1.5{ //0.3(0.03)1.5
qui{
replace yhat = x1*`b1' + x2*`b2' in 1/100 // yhat
replace ehat2 = (y - yhat)^2 in 1/100 // e^2
sum ehat2 in 1/100
replace rss = r(sum) in `id' // RSS
replace L1 = abs(`b1') + abs(`b2') in `id' // L1-norm
replace L2 = (`b1')^2+ (`b2')^2 in `id' // L2-norm,加括号!
replace b1 = `b1' in `id'
replace b2 = `b2' in `id++'
}
if mod(`id',50)==0 {
dis "." _c
}
}
}
save "lasso_sim_contourline.dta", replace
RSS 与 系数估计值的关系
*-RSS v.s. b1 and b2
use "lasso_sim_contourline.dta", clear
sum b1 rss b2
sort rss
list rss b1 b2 in 1/10
*-对比:OLS
reg y x1 x2
dis e(rss)
*-图示:RSS = f(b1)|b2
use "lasso_sim_contourline.dta", clear
line rss b1, sort
line rss b2, sort
line rss b1 if abs(b2-0.9)<0.01
line rss b2 if abs(b1-0.3)<0.01, sort
tw (line rss b1 if abs(b2-0.9)<0.01) ///
(line rss b2 if abs(b1-0.3)<0.01, sort), ///
xline(0.3 0.9) xlabel(-1 0 0.3 0.9 2) legend(off)
RSS 等值曲线
*-RSS 等值曲线
local J "rss"
twoway contourline `J' b1 b2 if rss!=., ///
level(20) colorlines
Lasso 约束集
*-L1-norm 约束集
local J "L1" // L1-norm = |b1| + |b2|
twoway contourline `J' b1 b2 if rss!=., ///
level(30) colorlines aspectratio(0.7)
Ridge 约束集
*-L2-norm 约束集
local J "L2" // L2-norm = |b1|^2 + |b2|^2
twoway contourline `J' b1 b2 if rss!=., ///
level(30) colorlines aspectratio(0.7)
Lasso
*-Lasso 图示 // L1-norm = |b1| + |b2|
local k=30 // 圆圈个数
twoway contourline L1 b1 b2 if rss!=., ///
level(`k') aspectratio(0.8) ///
xline(0,lc(red)) yline(0,lc(red))
addplot: contourline rss b1 b2 if rss!=., ///
level(`k') colorlines xlabel(none)
Ridge
*-Ridge 图示 // L2-norm = |b1|^2 + |b2|^2
local k=30 // 圆圈个数
twoway contourline L2 b1 b2 if rss!=., ///
level(`k') aspectratio(0.8) ///
xline(0,lc(red)) yline(0,lc(red))
addplot: contourline rss b1 b2 if rss!=., ///
level(`k') colorlines xlabel(none)
完整代码
2022/1/11 11:47
*-生成数据
clear
set obs 100
set seed 123
gen obsid = _n
gen x1 = rnormal()
gen x2 = rnormal()
gen e = rnormal()*0.7
gen y = 0.3*x1 + 0.9*x2 + e
*-不同参数设定下的 RSS
set obs 100000
gen b1 = .
gen b2 = .
gen yhat = .
gen ehat2 = .
gen rss = .
gen L1 = .
gen L2 = .
local id = 1 // 计数器
forvalues b1 = -1.2(0.01)0.8{ //-0.2(0.03)0.8
forvalues b2 = -1.3(0.01)1.5{ //0.3(0.03)1.5
qui{
replace yhat = x1*`b1' + x2*`b2' in 1/100 // yhat
replace ehat2 = (y - yhat)^2 in 1/100 // e^2
sum ehat2 in 1/100
replace rss = r(sum) in `id' // RSS
replace L1 = abs(`b1') + abs(`b2') in `id' // L1-norm
replace L2 = (`b1')^2+ (`b2')^2 in `id' // L2-norm,加括号!
replace b1 = `b1' in `id'
replace b2 = `b2' in `id++'
}
if mod(`id',50)==0 {
dis "." _c
}
}
}
save "lasso_sim_contourline.dta", replace
*-RSS v.s. b1 and b2
use "lasso_sim_contourline.dta", clear
sum b1 rss b2
sort rss
list rss b1 b2 in 1/10
*-对比:OLS
reg y x1 x2
dis e(rss)
*-图示:RSS = f(b1)|b2
use "lasso_sim_contourline.dta", clear
line rss b1, sort
line rss b2, sort
line rss b1 if abs(b2-0.9)<0.01
line rss b2 if abs(b1-0.3)<0.01, sort
tw (line rss b1 if abs(b2-0.9)<0.01) ///
(line rss b2 if abs(b1-0.3)<0.01, sort), ///
xline(0.3 0.9) xlabel(-1 0 0.3 0.9 2) legend(off)
*-RSS 等值曲线
local J "rss"
twoway contourline `J' b1 b2 if rss!=., ///
level(20) colorlines
*-L1-norm 约束集
local J "L1" // L1-norm = |b1| + |b2|
twoway contourline `J' b1 b2 if rss!=., ///
level(30) colorlines aspectratio(0.7)
*-L2-norm 约束集
local J "L2" // L2-norm = |b1|^2 + |b2|^2
twoway contourline `J' b1 b2 if rss!=., ///
level(30) colorlines aspectratio(0.7)
*-Lasso 图示 // L1-norm = |b1| + |b2|
use "lasso_sim_contourline.dta", clear
local k=30 // 圆圈个数
twoway contourline L1 b1 b2 if rss!=., ///
level(`k') aspectratio(0.8) ///
xline(0,lc(red)) yline(0,lc(red))
addplot: contourline rss b1 b2 if rss!=., ///
level(`k') colorlines xlabel(none)
graph export "$Out/lasso-stata-regular01.png", replace width(3000)
*-Ridge 图示 // L2-norm = |b1|^2 + |b2|^2
use "lasso_sim_contourline.dta", clear
local k=30 // 圆圈个数
twoway contourline L2 b1 b2 if rss!=., ///
level(`k') aspectratio(0.8) ///
xline(0,lc(red)) yline(0,lc(red))
addplot: contourline rss b1 b2 if rss!=., ///
level(`k') colorlines xlabel(none)
🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)
尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下: 连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。