15  线性回归(初步)

快速提示:

  1. 经济学中的回归,基本目标是解释2个变量之间的关系:x如何影响y?
  2. 这里更重视解释变量的系数 \(\beta_i\) 及其显著性,而不是太关心 \(R^2\) 等统计量
  3. 因此,回归模型的设计,以及对系数的进行统计检验以及解释,是经济学中回归的重点。

15.1 基本多元回归

15.1.1 分析目标和数据

这个案例来自伍德里奇的《计量经济学导论》。

本案希望研究的问题是:教育水平对工资有什么影响?即:每多读一年书,工资会有什么变化?

数据采用《导论》中的数据Wage1

# 加载并查看wage1.csv数据集
import pandas as pd

# 加载数据
wage1_data = pd.read_csv("data/wage1.csv")

# 查看数据集的前几行和列名
wage1_data.head(), wage1_data.columns
(   wage  educ  exper  tenure  nonwhite  female  married  numdep  smsa  \
 0  3.10    11      2       0         0       1        0       2     1   
 1  3.24    12     22       2         0       1        1       3     1   
 2  3.00    11      2       0         0       0        0       2     0   
 3  6.00     8     44      28         0       0        1       0     1   
 4  5.30    12      7       2         0       0        1       1     0   
 
    northcen  ...  trcommpu  trade  services  profserv  profocc  clerocc  \
 0         0  ...         0      0         0         0        0        0   
 1         0  ...         0      0         1         0        0        0   
 2         0  ...         0      1         0         0        0        0   
 3         0  ...         0      0         0         0        0        1   
 4         0  ...         0      0         0         0        0        0   
 
    servocc     lwage  expersq  tenursq  
 0        0  1.131402        4        0  
 1        1  1.175573      484        4  
 2        0  1.098612        4        0  
 3        0  1.791759     1936      784  
 4        0  1.667707       49        4  
 
 [5 rows x 24 columns],
 Index(['wage', 'educ', 'exper', 'tenure', 'nonwhite', 'female', 'married',
        'numdep', 'smsa', 'northcen', 'south', 'west', 'construc', 'ndurman',
        'trcommpu', 'trade', 'services', 'profserv', 'profocc', 'clerocc',
        'servocc', 'lwage', 'expersq', 'tenursq'],
       dtype='object'))

15.1.2 回归公式

我们建立的回归模型可以表达为:

\[ \text{wage} = \beta_0 + \delta_0 \cdot \text{female} + \beta_1 \cdot \text{educ} + \beta_2 \cdot \text{exper} + \beta_3 \cdot \text{tenure} + u \]

其中:

  • \(\text{wage}\) 是工资。
  • \(\text{female}\) 是一个虚拟变量,女性为1,男性为0。
  • \(\text{educ}\), \(\text{exper}\), 和 \(\text{tenure}\) 分别代表教育年数、工作经验和在当前工作的年限。
  • \(u\) 是误差项。

教育水平对工资的影响体现在系数\(\beta_1\)中,这就是我们关心的目标。

15.1.3 进行回归分析

在进行回归分析之前,我们需要准备数据和定义模型。这个过程包括设置自变量(解释变量)和因变量(被解释变量),以及确保数据格式适合进行回归分析。

15.1.3.1 定义因变量和自变量

  • 因变量 \(y\): 因变量是我们想要预测或解释的变量。在本例中,因变量是 wage,即工资,我们希望了解其他变量如何影响工资。

  • 自变量 \(X\): 自变量是可能影响因变量的变量。在这个模型中,我们选择了四个自变量:female, educ, exper, 和 tenure。这些变量分别表示:

    • female: 表示性别,是一个二分类变量,女性为1,男性为0。
    • educ: 表示受教育年数,是一个连续变量。
    • exper: 表示总工作经验年数,是一个连续变量。
    • tenure: 表示在当前工作的年限,也是一个连续变量。

15.1.3.2 构造自变量 \(X\) 和因变量 \(y\)

在开始构建模型之前,我们需要从数据集中提取这些变量。使用Pandas库,我们可以轻松地从DataFrame中选择需要的列。同时,为了进行回归分析,我们需要向自变量矩阵 \(X\) 中添加一个常数项,以便模型包含截距 \(\beta_0\)

import statsmodels.api as sm

# 选择自变量和因变量
X = wage1_data[["female", "educ", "exper", "tenure"]]
y = wage1_data["wage"]

# 向自变量矩阵X添加常数项,以便包含截距
X = sm.add_constant(X)

15.1.3.3 拟合回归模型

使用statsmodels库的OLS类,我们可以定义并拟合一个普通最小二乘回归模型。OLS类的第一个参数是因变量 \(y\),第二个参数是自变量 \(X\)

# 创建OLS回归模型的实例并拟合数据
model = sm.OLS(y, X)
results = model.fit()

15.1.3.4 查看回归结果

模型拟合后,我们可以通过调用 summary() 方法来查看详细的回归分析结果,包括每个变量的系数、标准误、t 值、p 值等统计指标。

# 输出回归结果摘要
print(results.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                   wage   R-squared:                       0.364
Model:                            OLS   Adj. R-squared:                  0.359
Method:                 Least Squares   F-statistic:                     74.40
Date:                Sun, 12 May 2024   Prob (F-statistic):           7.30e-50
Time:                        16:34:24   Log-Likelihood:                -1314.2
No. Observations:                 526   AIC:                             2638.
Df Residuals:                     521   BIC:                             2660.
Df Model:                           4                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         -1.5679      0.725     -2.164      0.031      -2.991      -0.145
female        -1.8109      0.265     -6.838      0.000      -2.331      -1.291
educ           0.5715      0.049     11.584      0.000       0.475       0.668
exper          0.0254      0.012      2.195      0.029       0.003       0.048
tenure         0.1410      0.021      6.663      0.000       0.099       0.183
==============================================================================
Omnibus:                      185.864   Durbin-Watson:                   1.794
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              715.580
Skew:                           1.589   Prob(JB):                    4.11e-156
Kurtosis:                       7.749   Cond. No.                         141.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

15.1.4 回归线

可以得到回归线(或者样本回归函数):

\[ wage = -1.568 + (-1.811) \cdot female + 0.572 \cdot educ + 0.025 \cdot exper + 0.141 \cdot tenure + u \]

15.1.5 解释回归结果

从回归结果中,我们可以提取以下关键信息:

  • 模型拟合情况: \(R^2\) 值为 0.364,说明模型解释了 36.4% 的因变量(wage)的方差。这表明模型有一定的解释能力,但仍有大部分变异未被模型捕捉。
  • 系数解释:
    • const(截距): \(-1.568\), 在统计上显著(\(p < 0.05\)),表示当所有解释变量为0时,预测的工资值。
    • female: \(-1.811\), 显著地负相关(\(p < 0.001\)),表明女性的工资平均比男性低约 $1.81,条件是其他变量保持不变。
    • educ(教育年数): \(0.572\), 显著正相关(\(p < 0.001\)),意味着每增加一年的教育,工资平均增加约 $0.57,其他条件不变。
    • exper(工作经验): \(0.025\), 在边际上显著(\(p = 0.029\)),表示每增加一年工作经验,工资增加约 $0.03,其他条件不变。
    • tenure(在当前工作的年限): \(0.141\), 显著正相关(\(p < 0.001\)),每增加一年在当前工作的年限,工资增加约 $0.14,其他条件不变。
  • 模型诊断:
    • Durbin-Watson 统计量为 1.794,接近2,说明残差中不存在自相关问题。
    • OmnibusJarque-Bera 测试的 \(p\) 值都接近0,表明残差不符合正态分布,这可能影响了某些统计测试的有效性,尤其是在小样本数据中。

15.1.6 回归结果的经济学解释

在经济学研究中,分析者往往特别关注模型中的系数(\(\beta_i\)),因为这些系数能够揭示不同变量之间的关系,如大小、方向和显著性。这些关系有助于解释经济理论中的假设或验证特定的经济行为。每个系数的解释性质能够表达自变量对因变量的预期变化量,即当其他条件保持不变时,自变量每变化一个单位,因变量平均预期会如何变化。

15.1.6.1 对系数的解释

  1. 大小:系数的大小告诉我们,当自变量增加一个单位时,因变量预期会增加或减少多少。在经济学中,了解这种影响的规模是至关重要的,因为它有助于量化政策变动或市场条件变化对经济行为的影响。

  2. 方向:系数的符号(正或负)表明变量间的关系是正向还是负向。例如,如果某个变量的系数为正,则表明这两个变量是正相关的;如果系数为负,则两者是负相关的。

  3. 显著性:统计显著性(通常通过p值来衡量)告诉我们系数是否在统计上显著,即我们观察到的关系是否有可能仅仅是由于抽样误差。p值较小(通常小于0.05)意味着我们有足够的证据认为该系数在总体中不为零。

以前面的回归分析为例,我们研究了教育水平(educ)对工资(wage)的影响。根据回归结果,教育的系数是0.572,且非常显著(p值 < 0.001)。

这就回答了我们最初的问题:在其他因素不变的情况下,每增加一年的教育,工资平均预期增加0.572单位。

15.1.7 多元回归练习题

在一项研究中,研究人员收集了一批学生的高中成绩(hsGPA)、大学入学考试成绩(ACT)以及他们在大学第一年的成绩(colGPA)。该研究目的是探索高中GPA和ACT成绩对大学第一年GPA的影响。

数据集包含以下变量:

  • hsGPA:高中GPA
  • ACT:大学入学考试成绩
  • colGPA:大学第一年GPA

研究问题: 高中GPA和ACT成绩如何影响大学第一年的GPA?

回归模型: 使用以下回归模型分析数据: \[ \text{colGPA} = \beta_0 + \beta_1 \times \text{hsGPA} + \beta_2 \times \text{ACT} + u \]

其中:

  • \(\beta_0\) 是截距
  • \(\beta_1\) 是高中GPA对大学GPA的影响。
  • \(\beta_2\) 是ACT成绩对大学GPA的影响。
  • \(u\) 是误差项。

任务:

  1. 利用提供的数据,估计上述回归模型。
  2. 解释高中GPA和ACT成绩的系数,包括意义和显著性。
  3. 思考题:讨论模型的适用性和限制。
# 读取数据
gpa1_data = pd.read_csv("data/gpa1.csv")

# 显示列名
gpa1_data.columns
Index(['age', 'soph', 'junior', 'senior', 'senior5', 'male', 'campus',
       'business', 'engineer', 'colGPA', 'hsGPA', 'ACT', 'job19', 'job20',
       'drive', 'bike', 'walk', 'voluntr', 'PC', 'greek', 'car', 'siblings',
       'bgfriend', 'clubs', 'skipped', 'alcohol', 'gradMI', 'fathcoll',
       'mothcoll'],
      dtype='object')