如何在Statsmodels或Linearmodels中实现2SLS系数相等性检验
2SLS模型多处理组系数相等性检验实现方法
核心原理:Statsmodel的IV2SLS和linearmodel的LM2SLS拟合得到的结果对象,均支持Wald检验逻辑,只需构造对应约束矩阵即可完成多处理组系数相等性检验,无需依赖OLS专属的t_test_pairwise()方法。
假设场景:3个处理组对应的内生变量系数分别为treat1、treat2、treat3,检验原假设为三个处理组的效应系数完全相等,可拆解为两个独立约束:treat1系数 - treat2系数 = 0、treat2系数 - treat3系数 = 0。
Statsmodel IV2SLS 实现代码
- 首先确认参数顺序,避免约束矩阵构造错误:
print(model.params)
- 按照参数索引构造约束矩阵并执行检验:
from statsmodels.sandbox.regression.gmm import IV2SLS as SM2SLS import numpy as np # 模型拟合逻辑 model = SM2SLS(tdf[endog],tdf['elect_lpd'],tdf[inst]).fit() # 构造约束矩阵:假设3个处理组系数对应params的索引为0、1、2,其余位置填0 n_params = len(model.params) r_matrix = np.zeros((2, n_params)) r_matrix[0, 0] = 1 r_matrix[0, 1] = -1 r_matrix[1, 1] = 1 r_matrix[1, 2] = -1 # 执行Wald检验 wald_res = model.wald_test(r_matrix, use_f=False) print(wald_res)
结果解读:若输出的p值小于预设显著性水平(如0.05),即可拒绝原假设,认为不同处理组的效应存在统计层面的显著差异。
Linearmodel LM2SLS 实现代码
操作逻辑与Statsmodel一致,调用方法略有差异:
import numpy as np # 模型拟合逻辑 model = LM2SLS(tdf.elect_lpd, tdf[controls], tdf[endog], tdf[inst]).fit(cov_type='clustered') # 确认参数索引 print(model.params) # 构造约束矩阵:按需修改处理组系数对应的索引值 n_params = len(model.params) r_matrix = np.zeros((2, n_params)) r_matrix[0, 0] = 1 r_matrix[0, 1] = -1 r_matrix[1, 1] = 1 r_matrix[1, 2] = -1 # 执行Wald检验 wald_res = model.wald_test(r_matrix) print(wald_res)
注意事项:构造约束矩阵前必须先确认处理组系数对应的参数索引,索引匹配错误会直接导致检验结果无效。如果需要做两两处理组的差异检验,只需构造仅含单个约束的矩阵,重复执行检验即可。
内容的提问来源于stack exchange,提问作者Jameson
相关产品推荐
相关产品推荐

