回归系数与条件均值不匹配

Regression coefficients do not match conditional means

您可以下载以下数据集from this repo

Y CONST T X1 X1T X2 X2T
0 2.31252 1 1 0 0 1 1
1 -0.836074 1 1 1 1 1 1
2 -0.797183 1 0 0 0 1 0

我有一个因变量 (Y) 和三个二进制列 (TX1X2)。根据这些数据,我们可以创建四个组:

  1. X1 == 0X2 == 0
  2. X1 == 0X2 == 1
  3. X1 == 1X2 == 0
  4. X1 == 1X2 == 1

在每个组中,我想计算 T == 1T == 0 观察值之间 Y 平均值的差异。

我可以使用以下代码:

# Libraries
import pandas as pd

# Group by T, X1, X2 and get the mean of Y
t = df.groupby(['T','X1','X2'])['Y'].mean().reset_index()

# Reshape the result and rename the columns
t = t.pivot(index=['X1','X2'], columns='T', values='Y')
t.columns = ['Teq0','Teq1']

# I want to replicate these differences with a regression
t['Teq1'] - t['Teq0']

> X1  X2
> 0   0     0.116175
>     1     0.168791
> 1   0    -0.027278
>     1    -0.147601

问题

我想使用以下回归模型 (m) 重新创建这些结果。

# Libraries
from statsmodels.api import OLS

# Fit regression with interaction terms
m = OLS(endog=df['Y'], exog=df[['CONST','T','X1','X1T','X2','X2T']]).fit()

# Estimated values
m.params[['T','X1T','X2T']]

> T      0.162198
> X1T   -0.230372
> X2T   -0.034303

我期待系数:

  1. T = 0.116175
  2. T + X1T = 0.168791
  3. T + X2T = -0.027278
  4. T + X1T + X2T = -0.147601

问题

为什么回归系数与第一个块的输出结果不匹配 (t['Teq1'] - t['Teq0'])?

感谢@Josef 注意到 TX1X2 有八种不同的组合,而我的回归模型有六个参数。因此,我缺少两个交互项(因此缺少两个参数)。

即回归模型需要考虑X1X2之间的交互作用以及X1X2和[=12=之间的交互作用].

这可以通过声明缺少的交互列并拟合模型来完成:

# Declare missing columns
df = df.assign(X1X2 = df['X1'].multiply(df['X2']),
               X1X2T = df['X1'].multiply(df['X2T']))

# List of independent variables
cols = ['CONST','T','X1','X1T','X2','X2T','X1X2','X1X2T']

# Fit model
m = OLS.fit(endog=df['Y'], exog=df[cols]).fit()

或者,我们可以使用公式界面:

# Declare formula
f = 'Y ~ T + X1 + I(X1*T) + X2 + I(X2*T) + I(X1*X2) + I(X1*X2*T)'

# Fit model
m = OLS.from_formula(formula=f, data=df).fit()