如何计算statsmodels OLS模型X变动0.25单位的边际效应95%置信区间
我得到如下模型:
$y = \beta_0 + \beta_1 X + \beta_2 X^2 + \epsilon$
因此,X每增加1单位时输出的预期变化由下式给出:
$\frac{\partial y}{\partial X} = \beta_1 + 2\beta_2 X$
假设X的取值为40,请问如何计算X增加0.25单位时对应效应的95%置信区间?
以下是可复现示例:
# 生成数据 import pandas as pd from scipy import stats as st from statsmodels.api import OLS df = pd.DataFrame({'const':1,'X':st.norm(loc=40, scale=5).rvs(1000)}) df['X_sq'] = df['X'].pow(2) df['y'] = 1200 + df['X'] + df['X_sq'] + st.norm().rvs(1000) df = df[['y','const','X','X_sq']] # 声明并拟合模型 y = df['y'] X = df[['const','X','X_sq']] m1 = OLS(endog=y, exog=X).fit() # 设定`Xi`的取值 x = 40 # 计算`Xi`增加1单位的预测边际效应 Mg = m1.params['X'] + (2 * m1.params['X_sq'] * x)
如上,X从40增加到41时y的预期变化等于Mg。请问如何计算X边际变动0.25单位时对应的95%置信区间?
提示:可通过m1.t_test()方法实现。
解答
计算逻辑
X每变动1单位的边际效应是回归系数的线性组合:$\beta_1 + 2\beta_2 \times x$,因此X变动0.25单位的效应就是该值乘以0.25,等价于新的线性组合:$0 \times \beta_0 + 0.25 \times \beta_1 + (0.25 \times 2x) \times \beta_2$。直接调用OLS模型的t_test方法即可计算该线性组合的95%置信区间。
代码实现
在现有代码基础上补充以下内容即可:
# 构造线性组合的系数向量,顺序和模型变量顺序保持一致:const、X、X_sq r_matrix = [0, 0.25, 0.25 * 2 * x] # 执行t检验 test_result = m1.t_test(r_matrix) # 提取95%置信区间 ci_95 = test_result.conf_int(alpha=0.05) print(f"X增加0.25单位的效应95%置信区间:[{ci_95[0][0]:.4f}, {ci_95[0][1]:.4f}]")
如果需要查看对应点估计值、标准误、t值等统计量,直接打印test_result.summary()即可。
内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

