F00001-陈强高级计量经济学笔记:Python、Matlab实现模型估计与机器学习模型
F00001-陈强高级计量经济学笔记,使用python、matlab实现各模型估计,机器学习模型

计量经济学这玩意儿,真不是光靠背公式就能玩转的。当年啃陈强老师那本蓝皮书的时候,我对着MATLAB的报错信息干瞪眼的场景还历历在目。现在咱们有了Python这种更友好的工具,很多模型实现起来就像拼乐高——虽然零件还是那些零件,但拼装过程舒坦多了。

先说说最基础的线性回归。在Python里用statsmodels搞OLS估计,代码比点外卖还简单:
import statsmodels.api as sm
X = sm.add_constant(data[['x1','x2']]) # 记得手动加截距项
model = sm.OLS(data['y'], X).fit()
print(model.summary()) # 这个summary信息量爆炸
但这里有个坑:statsmodels默认不检验多重共线性。这时候得掏出方差膨胀因子检查:
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(f"VIF值:{vif}") # 超过10的变量建议处理
相比之下,MATLAB的实现更学院派:
X = [ones(size(data,1),1), data(:,2:3)]; % 手动构造设计矩阵
[beta, sigma, resid] = mvregress(X, y); % 自带白噪声检验
不过Python在结果展示上确实贴心,summary()直接把t值、P值、R²打包给你,连置信区间都画好了。

F00001-陈强高级计量经济学笔记,使用python、matlab实现各模型估计,机器学习模型

当遇到离散选择模型时,Probit估计是个绕不开的坎。Python的scikit-learn虽然方便,但要做边际效应分析还是得自己动手:
from scipy.stats import norm
probit_model = sm.Probit(y, X).fit()
margeff = probit_model.get_margeff() # 获取边际效应
print("X1的边际效应:", norm.pdf(X.mean()) * probit_model.params[1]) # 手工计算版
这里有个冷知识:get_margeff()默认用的是样本均值处的偏效应,和Stata的处理方式不同。想复现陈强书里的结果,得把at='overall'参数改成at='mean'。

说到机器学习模型,随机森林在变量选择上简直是个神器。但别直接无脑上RandomForestRegressor,试试特征重要性可视化:
from sklearn.inspection import permutation_importance
result = permutation_importance(model, X_test, y_test, n_repeats=30)
sorted_idx = result.importances_mean.argsort()[::-1]
plt.boxplot(result.importances[sorted_idx].T,
vert=False, labels=X.columns[sorted_idx])
plt.title("Permutation Importance")
这个比默认的.featureimportances更可靠,特别当存在高度相关特征时。不过要注意,经济学论文里用机器学习模型,审稿人八成会怼你:"经济意义呢?"这时候就得把SHAP值分析搬出来救场。

最后吐槽下MATLAB的机器学习工具箱——2023年了还在用fitctree这种命名方式,Python的scikit-learn早把API设计得亲妈都不认识了。不过在做GMM估计时,MATLAB的gmm函数确实比Python的linearmodels包省心,特别是处理动态面板数据的时候。工具没有绝对优劣,关键看应用场景,就像陈强老师说的:"模型是死的,数据是活的,别让软件限制了想象力。"

更多推荐
所有评论(0)