Stata:R-squared有用吗?

文摘   2024-11-11 22:00   中国  

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

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

课程特色 · 2024机器学习与因果推断

  • 懂原理、会应用。本次课程邀请了两位老师合作讲授,目的在于最大限度地实现理论与应用的有机结合。为期四天的课程,分成两个部分:第一部分讲解常用的机器学习算法和适用条件,以及文本分析和大语言模型;第二部分通过精讲 4-6 篇发表于 Top 期刊的论文,帮助大家理解各类机器学习算法的应用场景,以及它们与传统因果推断方法的巧妙结合。
  • 以 Top 期刊论文为范例。目前多数人的困惑是不清楚如何将传统因果推断方法与机器学习结合起来。事实上,即便是 MIT 和 Harvard 的大牛们也都在「摸着石头过河」。为此,通过论文精讲和复现来学习这部分内容或许是目前最有效的方式了。张宏亮老师此前在浙江大学按照这一模式教授了「因果推断和机器学习」课程,效果甚佳:学生们能够逐渐建立起研究设计的理念,并在构造识别策略时适当地嵌入机器学习方法。

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

作者:高文歆 (中国科学技术大学)
邮箱:wenxin_irl@mail.ustc.edu.cn

编者按:本文主要参考自「Is R-squared Useless?」,特此致谢!

1. 背景

(R-squared) 是回归分析中的标准统计度量,通常用于评估线性回归模型的拟合优度,可以反映模型解释变异量占总变异量比例。尽管如此,但 真的有用吗?

2. 的真实面目

2.1 基本定义

(R-squared) 反映模型解释变异量占总变异量的比例,在统计学中亦称决定系数 (coefficient of determination),是回归分析中用以评估模型拟合优度的统计指标之一。 的本质是衡量自变量对因变量变异的解释能力。在最小二乘法估计的线性回归模型中, 最初被定义为拟合值方差 与因变量方差 之比:

可以认为, 反映了模型通过回归线拟合数据点的程度。由于在线性模型中,误差项和拟合值的协方差为 0,则有:

即因变量与拟合值的协方差 将会等于拟合值方差 。由此,我们可以把式子变化为:

在最小二乘法线性模型中,有拟合值方差 ,则有:

又因斜率 等于 协方差 与自变量方差 之比,代入可得:

2.2 并非衡量模型优度的万能指标

根据 ,说明 反映了 之间线性关系强度。理想情况下, 意味着模型能够完美解释所有变异,拟合效果极佳,而 则意味着模型没有解释任何因变量的变异性。然而, 高并不总意味着模型就是最优的。

举个简单例子,一个用于预测消费者支出的模型中 高,在某种程度上表明模型能够解释大部分的消费者支出的变异性。但如果该模型包括了大量不必要、不相关的预测变量 (例如,宏观经济指标等),则可能会捕捉到特定样本特征,过度拟合特定样本,从而影响

3. 的局限性与误区

「Is R-squared Useless?」一文给出了 的四个基本结论:

  1. 不能衡量模型好坏
  2. 不能预测误差
  3. 不适用于比较变换后的响应模型
  4. 不解释变量间的因果关系

3.1 不能衡量模型好坏

3.1.2 反例1:模型正确, 也可能很小

并不能衡量拟合优度,因为在某些时候,即使模型完全正确,其模型 也可能会很低。

实验思路

  1. 生成一个线性数据集
  2. 计算 在已知数据集确实为线性模型生成的情况下,我们将其拟合进线性模型, 应该很高才对。
  3. 增加 发现即使模型正确,随着 的增多, 居然在变小。
. set obs 20
. egen sigmas = fill(0.5(1)20)
. list sigmas
. gen rout = .
. forval i = 1/20 {
2. set obs 100
3. gen x = _n/10
4. local sig = sigmas[`i']
5. gen y = 2 + 1.2 * x + rnormal(100, `sig')
6. regress y x
7. scalar r_squared = e(r2)
8. replace rout = r_squared in `i'
9. drop x y
10. }
. twoway (line rout sigmas) (scatter rout sigmas), title("R-squared vs Sigma" ) ///
> xtitle("Sigma") ytitle("R-squared") legend(order(1 "R-squared"))

3.1.2 反例2:模型错误, 也可能接近于 1

实验思路

  1. 生成一个非线性数据集
  2. 用线性模型拟合,计算 在已知数据集由非线性模型生成的情况下,模型错误, 应接近于 0。但是我们发现,发现即使模型错误,,接近于1.

由此看来,我们并不能单纯地使用 去衡量模型的准确性。

. set seed 1
. set obs 50
. gen x = -log(runiform())/0.005
. gen u = runiform(0.8, 1.2)
. gen y = (x - 1)^2 * u
. scatter y x
. regress y x

Source | SS df MS Number of obs = 50
-------------+---------------------------------- F(1, 48) = 352.27
Model | 7.8210e+11 1 7.8210e+11 Prob > F = 0.0000
Residual | 1.0657e+11 48 2.2202e+09 R-squared = 0.8801
-------------+---------------------------------- Adj R-squared = 0.8776
Total | 8.8867e+11 49 1.8136e+10 Root MSE = 47119

------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | 661.5637 35.24815 18.77 0.000 590.6926 732.4349
_cons | -64992.85 10426.59 -6.23 0.000 -85956.92 -44028.78
------------------------------------------------------------------------------

3.2 不能测量预测误差

原文认为,只考虑 ,我们可能会倾向于选择 更高的模型,但实际上,两个模型的相同预测效力可能相同。

实验思路

  1. 生成一个线性数据集
  2. 改变 取值范围,对自变量 进行线性缩放,并不会影响均方误差 和模型的预测效力。
  3. 此时再计算 ,在模型预测效力并无变化的情况下, 本应保持不变,但是在实验结果中,我们发现: 取值范围从 (1,10) 缩小至 (1,2) ,均方误差 为 0.86,但是 却从 0.92 下降至 0.12。
. set obs 100
. gen x = 1 + (10-1)/(100-1)*( _n-1 )
. set seed 1
. gen epsilon = rnormal(0, 0.9)
. gen y = 2 + 1.2*x + epsilon
. regress y x

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 1126.51
Model | 990.802154 1 990.802154 Prob > F = 0.0000
Residual | 86.1940222 98 .879530839 R-squared = 0.9200
-------------+---------------------------------- Adj R-squared = 0.9192
Total | 1076.99618 99 10.8787493 Root MSE = .93783

------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | 1.199495 .035738 33.56 0.000 1.128574 1.270416
_cons | 2.059504 .2177861 9.46 0.000 1.627315 2.491694
------------------------------------------------------------------------------

. predict yhat
. gen resid = y - yhat
. summarize resid

Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
resid | 100 2.38e-08 .9330845 -2.584171 1.996068

. scalar mse = e(rss) / e(N)
. display mse
.86194022

接下来改变 的取值范围:

. clear
. set obs 100
. gen x = 1 + (2-1)/(100-1)*( _n-1 )
. set seed 1
. gen epsilon = rnormal(0, 0.9)
. gen y = 2 + 1.2*x + epsilon
. regress y x

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 13.81
Model | 12.1498912 1 12.1498912 Prob > F = 0.0003
Residual | 86.1940261 98 .879530879 R-squared = 0.1235
-------------+---------------------------------- Adj R-squared = 0.1146
Total | 98.3439174 99 .993372903 Root MSE = .93783
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | 1.195456 .3216422 3.72 0.000 .5571678 1.833745
_cons | 2.063543 .4914938 4.20 0.000 1.088189 3.038896
------------------------------------------------------------------------------

. predict yhat
. gen resid = y - yhat
. summarize resid

Variable | Obs Mean Std. Dev. Min Max
-------------+---------------------------------------------------------
resid | 100 2.38e-09 .9330845 -2.584171 1.996068

. scalar mse = e(rss) / e(N)
. display mse
.86194026

保持不变一般意味着模型预测效力相同,但随 取值范围的变化, 也在不断变化。

3.3 不适用于比较变换后的响应模型

实验思路

  1. 生成一个数据集;
  2. 对结果进行对数变换;
  3. 比较结果变换前后 模型的
. set obs 100
. gen x = 1 + (2-1)/(100-1)*(_n-1)
. set seed 1
. gen y = exp(-2 - 0.09*x + rnormal(0, 2.5))
. regress y x

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 0.02
Model | .34396913 1 .34396913 Prob > F = 0.9016
Residual | 2192.69133 98 22.3744013 R-squared = 0.0002
-------------+---------------------------------- Adj R-squared = -0.0100
Total | 2193.0353 99 22.1518717 Root MSE = 4.7302
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | -.2011441 1.62227 -0.12 0.902 -3.420487 3.018199
_cons | 1.903103 2.478953 0.77 0.445 -3.016298 6.822505
------------------------------------------------------------------------------

. rvfplot

此时 ,发现残差图中有一些异常值,进行对数变换处理这些异常值。

. gen log_y = log(y)
. regress log_y x

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 0.01
Model | .089532146 1 .089532146 Prob > F = 0.9088
Residual | 665.077356 98 6.78650364 R-squared = 0.0001
-------------+---------------------------------- Adj R-squared = -0.0101
Total | 665.166888 99 6.71885746 Root MSE = 2.6051
------------------------------------------------------------------------------
log_y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | -.1026212 .8934507 -0.11 0.909 -1.875645 1.670403
_cons | -1.823492 1.365261 -1.34 0.185 -4.532808 .8858231
------------------------------------------------------------------------------
. rvfplot, yline(0)

通常对数变换通常会使得 有所增加,但在本例中, 的拟合效果看起来比 好,但是 却从下降了。因此,对于不同结果转换的模型而言, 不能直接用于模型评估。

3.4 不解释变量间的因果关系

这个实验设计相对比较简单,我们发现,无论是用 解释 ,还是用 解释 ,其 都是完全相等的。

. clear
. set obs 100
. gen x = _n/10
. gen y = 2 + 1.2*x + rnormal(0, 2)
. regress y x

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 321.47
Model | 1239.54591 1 1239.54591 Prob > F = 0.0000
Residual | 377.869634 98 3.85581259 R-squared = 0.7664
-------------+---------------------------------- Adj R-squared = 0.7640
Total | 1617.41555 99 16.3375308 Root MSE = 1.9636
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x | 1.219674 .0680253 17.93 0.000 1.08468 1.354668
_cons | 1.555459 .3956885 3.93 0.000 .7702286 2.34069
------------------------------------------------------------------------------

. di e(r2)
.76637443

. regress x y

Source | SS df MS Number of obs = 100
-------------+---------------------------------- F(1, 98) = 321.47
Model | 638.581491 1 638.581491 Prob > F = 0.0000
Residual | 194.668509 98 1.98641335 R-squared = 0.7664
-------------+---------------------------------- Adj R-squared = 0.7640
Total | 833.25 99 8.41666667 Root MSE = 1.4094
------------------------------------------------------------------------------
x | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
y | .6283438 .0350448 17.93 0.000 .5587985 .6978892
_cons | .2024458 .304895 0.66 0.508 -.4026085 .8075001
------------------------------------------------------------------------------

. di e(r2)
.76637443

. di "Is rsquared_x_y equal to rsquared_y_x? " (rsquared_x_y == rsquared_y_x)
Is rsquared_x_y equal to rsquared_y_x? 1

由此看来, 只能说明 间存在相关性,但并不能说明它们之间的因果关系。

4. 如何正确理解和使用

是衡量线性回归模型拟合效力的有用指标,其可以一定程度上反映模型在数据集上的拟合程度,但这不一定意味着模型在预测新数据时也会表现良好。

例如,添加更多的自变量可以提高 ,但过多的自变量可能导致过拟合——为了得到一致假设,使假设变得过度严格。

统计模型的目的是为了理解数据的行为并预测未来趋势。有效的模型应该能够捕捉数据的基本关系。我们肯定 在评价模型效力的作用,但不应该为了得出一个良好的 而塑造模型,这样就是本末倒置了。

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 拟合 控制变量, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

  • 专题:回归分析
    • 付一帆, 2022, Stata:控制变量与核心解释变量地位对等吗?, 连享会 No.1019.
  • 专题:交乘项-调节-中介
    • 伊凌雪, 2021, 调节效应是否需要考虑对控制变量交乘?, 连享会 No.789.
    • 修博文, 2024, 交乘项困惑:交互模型中的控制变量如何选择?, 连享会 No.1497.
  • 专题:Stata绘图
    • 刘东, 2023, Stata绘图:精美的散点图和线性拟合图-scatterfit-slopefit, 连享会 No.1251.
  • 专题:面板数据
    • 刘欣妍, 史柯, 2022, Stata:双向固定效应模型中是否要控制公司年龄?, 连享会 No.942.
    • 刘琦, 2020, 不用太关心控制变量,真的!, 连享会 No.222.
    • 孔亦泽, 2023, 拟合优度:R2知多少?, 连享会 No.1281.
  • 专题:Stata命令
    • 左祥太, 2022, Stata:控制变量组合的筛选-tuples, 连享会 No.987.
  • 专题:其它
    • 张沛康, 2020, 锚定情境法(一):有效控制变量自评偏差, 连享会 No.445.
  • 专题:论文写作
    • 张雪娇, 2022, 控制变量如何选?大牛们的10条建议, 连享会 No.1011.
    • 张雪娇, 2022, 控制变量越多越好吗?, 连享会 No.1025.
  • 专题:IV-GMM
    • 徐云娇, 2021, Lasso一下:再多的控制变量和工具变量我也不怕-T217, 连享会 No.635.
  • 专题:内生性-因果推断
    • 曹昊煜, 2022, A-理论部分:控制变量!控制变量!Good-Controls-Bad-Controls, 连享会 No.1037.
    • 李烨阳, 2022, B-Stata模拟:控制变量!控制变量!Good-Controls-Bad-Controls, 连享会 No.1056.
    • 秦利宾, 2021, 控制变量!控制变量!, 连享会 No.713.
    • 范佳颖, 2024, 小心误用!基于残差或拟合值的两阶段估计, 连享会 No.1400.
  • 专题:断点回归RDD
    • 谭睿鹏, 2021, RDD:断点回归可以加入控制变量吗?, 连享会 No.517.
    • 连享会, 2020, Stata新命令-pdslasso:众多控制变量和工具变量如何挑选?, 连享会 No.330.
    • 连享会, 2020, Stata:RDD-中可以加入控制变量, 连享会 No.371.
  • 专题:回归分析
    • 连享会,张静瑶, 2020, 加入控制变量后结果悲催了!, 连享会 No.135.
    • 陈卓然, 2022, 敏感性分析A-理论基础:控制变量内生时的系数敏感性分析-regsensitivity, 连享会 No.1007.
    • 陈卓然, 2022, 敏感性分析B-Stata实操:控制变量内生时的系数敏感性分析-regsensitivity, 连享会 No.1010.
    • 雷诺, 2023, 好IV坏控制:一个好的工具变量一定是个坏的控制变量, 连享会 No.1271.
    • 黄锦兰, 2024, 论文推介-用auto.dta发SSCI:如何正确使用控制变量?, 连享会 No.1397.

🍓 课程推荐:2024 机器学习与因果推断专题
主讲老师:司继春 (上海对外经贸大学) ;张宏亮(浙江大学)
课程时间:2024 年 11 月 9-10 日 ;16-17日
课程咨询:王老师 18903405450(微信)

尊敬的老师 / 亲爱的同学们:

连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。 请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。 我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

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

🍏 关于我们

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


连享会
连玉君老师团队分享,主页:lianxh.cn。白话计量,代码实操;学术路上,与君同行。
 最新文章