“傻瓜”学计量——稳健性检验的10种方法(持续更新)

提纲:“10种” 稳健性检验的方法

我们为何要做稳健性检验?要确保结论的稳健性

1.变量替换(自变量 因变量,比例、自然对数、程度变量)

在文献中一般表现为:参考其他大佬的测量方法、和指标选择。

在实证中,变量替换的对象主要是所考察主题的因变量(被解释变量)、自变量(解释变量)。根据不同论文的度量 方法,可以引用不同的变量替换方式,来考察问题或者亚久假设的稳健性。

2.检验方法替换(连续变量 离散变量)

大部分情况下,会根据因变量的特征来选择方法。 例如,当主题所考察的因变量为连续变量,其存在不少0样本时,文章选择最小二乘法(OLS)、tobit模型都比较合适,显然这两种方法在一定程度上来讲 都是可以替换的。

少部分情况下,选择方法时,也要考虑样本的特性。例如,当样本时截面数据或面板数据时,选用的方法也会不同。

3.内生性问题(工具变量法、DID等)

内生性是社科领域中研究因果关系时必须要关注和考察的。

内生性问题产生的原因遗漏变量
反向因果
自我选择偏误
样本选择偏误
内生性问题的解决方法工具变量法
Heckmann二阶段模型考察
自然实验法
DID双重差分法

内生性具体内容及stata指令 参考我的另一篇笔记:

CSDN

4.特殊样本剔除(特殊年份 特殊地区 特殊个体)

在文献中的出现形式:放大或缩小样本时间窗口、剔除例如武汉新冠时期GDP、剔除我国大量增发货币的年份的数据。

5.增加其他控制变量(个体、企业、地区等)

增加那些,在模型回归分析中我们经常忽视或者遗漏的一些重要因素,而这些因素将是影响我们考察因果关系中的重要变量。根据以往文献选取控制变量。

在文献中的出现形式:增加控制变量、修改模型设定(在基准模型中加入固定效应、行业✖年份交互固定效应)。

6.变换样本

即:作者用某个数据库的样本得出结论后,再通过其他样本(或数据库)进行检验分析,从而进一步夯实了这个结论。

(比较麻烦)
 

7.排除其他理论依据假说

用实证研究推翻别人的逻辑。

8.多重共线性问题(膨胀因子分析法)

逐步回归法:第一种:将显著的变量逐步进行剔除。

                      第二种:若存在交乘项时,应先对变量进行中心化处理,再得出交乘项。

9.排除(非)线性关系(构建平方项纳入方程等)

基本思路:在基准模型中引入自变量的二次方项就可以了。

为避免多重共线性问题,需将二次方向先进行中心化处理再引入基准方程。

10.剔除异常值的影响

对连续变量进行缩尾处理


资料来源:z值得收藏:实证研究中,稳健性检验思路有哪些?_哔哩哔哩_bilibili

关于稳健性检验_哔哩哔哩_bilibili

  • 14
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
稳健回归(Robust Regression)是一针对数据异常值影响的回归分析方法。相比于传统的最小二乘法,稳健回归能够忽略掉数据中的异常值,从而得到更加可靠的回归结果。 C++中可以使用类来实现稳健回归算法,主要包括以下步骤: 1. 定义类RobustRegression,包含以下成员变量和成员函数: 成员变量: - vector<double> x:自变量 - vector<double> y:因变量 - double b0:截距 - double b1:斜率 - int n:样本量 - double w:迭代权重 成员函数: - 构造函数RobustRegression(vector<double>& x, vector<double>& y):初始化自变量和因变量 - double getB0():获取截距 - double getB1():获取斜率 - double getR():获取相关系数 - void fit():拟合回归模型 2. 在构造函数中初始化自变量和因变量。在拟合回归模型时,使用Huber估计量来计算迭代权重。具体实现如下: ``` void RobustRegression::fit() { double delta = 1.345 * median(abs(x - median(x))); // Huber阈值 vector<double> residuals(n); // 残差 double w_sum = 0; // 权重和 for (int i = 0; i < n; i++) { residuals[i] = y[i] - (b0 + b1 * x[i]); // 计算残差 if (abs(residuals[i]) <= delta) { w = 1; // 权重为1 } else { w = delta / abs(residuals[i]); // 权重为delta/|residuals| } w_sum += w; // 累加权重 b0 += w * residuals[i]; // 更新截距 b1 += w * residuals[i] * x[i]; // 更新斜率 } b0 /= w_sum; // 计算截距的加权平均值 b1 /= w_sum; // 计算斜率的加权平均值 } ``` 3. 在类中实现获取截距、斜率和相关系数的成员函数。其中相关系数可以使用Pearson相关系数来计算: ``` double RobustRegression::getR() { double x_sum = 0, y_sum = 0, xy_sum = 0, x2_sum = 0, y2_sum = 0; for (int i = 0; i < n; i++) { x_sum += x[i]; y_sum += y[i]; xy_sum += x[i] * y[i]; x2_sum += x[i] * x[i]; y2_sum += y[i] * y[i]; } double r = (n * xy_sum - x_sum * y_sum) / sqrt((n * x2_sum - x_sum * x_sum) * (n * y2_sum - y_sum * y_sum)); return r; } ``` 4. 编写一个测试程序,读入自变量和因变量数据,创建RobustRegression对象并拟合回归模型,输出截距、斜率和相关系数。 完整的C++类实现代码如下: ``` #include <iostream> #include <vector> #include <algorithm> #include <cmath> using namespace std; class RobustRegression { public: RobustRegression(vector<double>& x, vector<double>& y) : x(x), y(y), b0(0), b1(0), n(x.size()), w(0) {} double getB0() { return b0; } double getB1() { return b1; } double getR(); void fit(); private: vector<double> x; vector<double> y; double b0; double b1; int n; double w; }; void RobustRegression::fit() { double delta = 1.345 * median(abs(x - median(x))); // Huber阈值 vector<double> residuals(n); // 残差 double w_sum = 0; // 权重和 for (int i = 0; i < n; i++) { residuals[i] = y[i] - (b0 + b1 * x[i]); // 计算残差 if (abs(residuals[i]) <= delta) { w = 1; // 权重为1 } else { w = delta / abs(residuals[i]); // 权重为delta/|residuals| } w_sum += w; // 累加权重 b0 += w * residuals[i]; // 更新截距 b1 += w * residuals[i] * x[i]; // 更新斜率 } b0 /= w_sum; // 计算截距的加权平均值 b1 /= w_sum; // 计算斜率的加权平均值 } double RobustRegression::getR() { double x_sum = 0, y_sum = 0, xy_sum = 0, x2_sum = 0, y2_sum = 0; for (int i = 0; i < n; i++) { x_sum += x[i]; y_sum += y[i]; xy_sum += x[i] * y[i]; x2_sum += x[i] * x[i]; y2_sum += y[i] * y[i]; } double r = (n * xy_sum - x_sum * y_sum) / sqrt((n * x2_sum - x_sum * x_sum) * (n * y2_sum - y_sum * y_sum)); return r; } int main() { vector<double> x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector<double> y = {2.1, 4.2, 6.3, 8.4, 10.5, 12.6, 14.7, 16.8, 18.9, 21}; RobustRegression rr(x, y); rr.fit(); cout << "b0 = " << rr.getB0() << endl; cout << "b1 = " << rr.getB1() << endl; cout << "r = " << rr.getR() << endl; return 0; } ``` 上述程序中,自变量和因变量数据都是手动输入的。在实际应用中,可以从文件或数据库中读取数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值