首页 > 其他分享 >计量经济学(十三)——一元线性回归模型分析

计量经济学(十三)——一元线性回归模型分析

时间:2024-10-20 16:12:21浏览次数:1  
标签:一元 plt 回归 残差 计量经济学 beta 线性 hat 模型

回归分析是一种用于研究因变量(目标)和自变量(预测器)之间关系的预测性建模技术,常用于预测分析、时间序列建模和探索变量间的因果关系。它通过拟合曲线或直线,使得模型与数据点的差异最小,从而揭示变量之间的相互关系。在经济学和数据分析中,回归模型广泛应用于量化解释变量(自变量)对被解释变量(因变量)的影响。一元线性回归模型是仅包含一个自变量的回归模型,其目标是通过建立一个线性方程,表达自变量\(X\)和因变量\(Y\)之间的关系,并通过最小二乘法估计模型参数,随后对这些参数进行显著性检验,评估模型的合理性和有效性。

一、一元回归模型的数学表达

一元线性回归分析,是根据自变量x和因变量Y的相关关系,建立x与Y的线性回归方程进行预测的方法。由于市场现象一般是受多种因素的影响,而并不是仅仅受一个因素的影响。所以应用一元线性回归分析预测法,必须对影响市场现象的多种因素做全面分析。只有当诸多的影响因素中,确实存在一个对因变量影响作用明显高于其他因素的变量,才能将它作为自变量,应用一元相关回归分析市场预测法进行预测。一元线性回归是通过一条直线来拟合这些数据点,使得各个数据点到直线距离的累积最小,如下图所示。

一元线性回归模型的基本形式为:

\[Y = \beta_0 + \beta_1 X + \epsilon \]

其中:

  • $ Y $ 为因变量,即我们希望通过模型解释或预测的目标变量。
  • $ X $ 为自变量,即用来解释 $ Y $ 变化的变量。
  • $ \beta_0 $ 为截距项,表示当 $ X = 0 $ 时,$ Y $ 的期望值。
  • $ \beta_1 $ 为回归系数,表示自变量每增加一个单位时,因变量的平均变化量。
  • $ \epsilon $ 为误差项,用来表示因变量中无法被自变量解释的部分。

回归模型的核心目的是估计\(\beta_0\) 和 \(\beta_1\),并通过这些估计值建立起 \(X\) 和 \(Y\) 之间的预测关系。

1.1 最小二乘法(OLS)求解

在回归分析中,最小二乘法(OLS) 是用于估计回归系数 $ \beta_0 $ 和 $ \beta_1 $ 的一种常用方法。OLS 的基本思想是通过最小化预测值与实际观测值之间的误差平方和,来找到最优的回归系数。

假设我们有一组观测数据:$ (X_1, Y_1), (X_2, Y_2), \dots, (X_n, Y_n) $,其中 $ n $ 是样本量。对于每一个观测点 $ i $,模型预测的 $ Y $ 值为:

\[\hat{Y}_i = \beta_0 + \beta_1 X_i \]

实际值和预测值之间的误差 $ e_i $ 为:

\[e_i = Y_i - \hat{Y}_i = Y_i - (\beta_0 + \beta_1 X_i) \]

最小二乘法通过最小化误差的平方和(即残差平方和,SSE)来确定最佳的回归系数:

\[S(\beta_0, \beta_1) = \sum_{i=1}^{n} (Y_i - (\beta_0 + \beta_1 X_i))^2 \]

通过对 $ S(\beta_0, \beta_1) $ 分别对 $ \beta_0 $ 和 $ \beta_1 $ 求偏导,并令其等于零,可以得到最小二乘法的解:

\[\hat{\beta_1} = \frac{\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})}{\sum_{i=1}^{n}(X_i - \bar{X})^2} \]

\[\hat{\beta_0} = \bar{Y} - \hat{\beta_1} \bar{X} \]

其中,$ \hat{\beta_1} $ 和 $ \hat{\beta_0} $ 分别是 $ \beta_1 $ 和 $ \beta_0 $ 的估计值,$ \bar{X} $ 和 $ \bar{Y} $ 是 $ X $ 和 $ Y $ 的均值。
这个公式表明,$ \hat{\beta_1} $ 是通过 $ X $ 和 $ Y $ 的协方差与 $ X $ 的方差来确定的,而 $ \hat{\beta_0} $ 则是通过 $ \hat{\beta_1} $ 调整后的均值差异来确定。

1.2 模型的参数估计与检验

在估计出回归系数 $ \hat{\beta_0} $ 和 $ \hat{\beta_1} $ 之后,我们需要对它们的可靠性进行检验,以判断模型的有效性。

标准误差

标准误差是用于衡量回归系数估计值精度的一个指标。系数的标准误差越小,意味着估计值越精确。
$ \beta_1 $ 的标准误差公式为:

\[SE(\hat{\beta_1}) = \sqrt{\frac{\sigma^2}{\sum_{i=1}^{n}(X_i - \bar{X})^2}} \]

其中,$ \sigma^2 $ 是误差项 $ \epsilon $ 的方差。对于 $ \beta_0 $,其标准误差的计算稍微复杂,反映了它在样本均值 $ \bar{X} $ 附近的不确定性:

\[SE(\hat{\beta_0}) = \sqrt{\sigma^2 \left( \frac{1}{n} + \frac{\bar{X}^2}{\sum_{i=1}^{n}(X_i - \bar{X})^2} \right)} \]

t 检验

t 检验用于检验回归系数是否显著不为零。检验假设为:

  • \(H_0\):自变量对因变量没有显著影响,\(\beta_1 = 0\)。
  • \(H_1\):自变量对因变量有显著影响,\(\beta_1 \neq 0\)。
    t 检验的统计量为:

\[t = \frac{\hat{\beta_1}}{SE(\hat{\beta_1})} \]

通过查找 t 分布表,判断该 t 值是否大于临界值。如果 t 值大于临界值,则拒绝原假设,认为自变量对因变量有显著影响。

显著性水平与置信区间

在回归分析中,我们通常使用显著性水平($ \alpha $)来衡量结果的可靠性。常用的显著性水平有 1%、5%、10% 等。此外,回归系数的置信区间也能为我们提供估计的可信范围。置信区间的计算公式为:

\[\text{置信区间} = \hat{\beta_1} \pm t_{\alpha/2, n-2} \cdot SE(\hat{\beta_1}) \]

通过计算回归系数的置信区间,我们可以在 $ 1 - \alpha $ 的置信水平下,推断真实系数的可能范围。

F 检验

F 检验用于检验整个回归模型的显著性,特别是在多元回归中尤为重要。在一元回归中,F 检验的结果与 t 检验结果是一致的。F 检验的统计量为:

\[F = \frac{\text{回归平方和 / 自由度}}{\text{残差平方和 / 自由度}} \]

通过比较 F 值与临界值,可以判断自变量是否显著影响因变量。

二、回归模型的评估

在估计出回归系数并进行检验后,我们还需要评估回归模型的整体拟合效果。以下几种指标可以用来衡量模型的适用性。

2.1. R平方(R-squared)

R平方是衡量模型解释能力的重要指标,取值范围为0到1,值越接近1,说明模型解释力越强,其实就是相关系数的平方。R平方的计算公式为:

\[R^2 = 1 - \frac{\text{残差平方和}}{\text{总平方和}} \]

R平方越高,表明自变量 $ X $ 对因变量 $ Y $ 的解释能力越强。

2.2 残差分析

通过分析模型的残差,我们可以评估模型是否存在系统性误差。绘制残差图可以直观地观察残差的分布情况。如果残差呈现随机分布,则表明模型拟合较好;如果残差有明显的模式或趋势,说明模型可能存在问题。

2.3 Durbin-Watson 检验

Durbin-Watson 检验用于检测残差之间是否存在自相关性,特别是在时间序列数据中,残差自相关会导致估计结果偏差。Durbin-Watson 统计量的取值范围为0到4,值接近2表明不存在自相关,接近0或4则表明存在正相关或负相关。在一元回归中这个指标没有判定价值。

三、回归分析示例

例1 一家保险公司收集了每周加班时间和新保单签发的数据,数据如下表:

周序号 1 2 3 4 5 6 7 8 9 10
\(x\) (单位:小时) 825 215 1070 550 480 920 1350 325 670 1215
\(y\) (单位:新签保单数) 3.5 1.0 4.0 2.0 1.0 3.0 4.5 1.5 3.0 5.0

拟讨论这两个变量之间是否有显著的回归关系,以便对加班时间进行控制与管理。

3.1 散点图直观分析

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置中文字体支持
rcParams['font.sans-serif'] = ['SimHei']  # 用SimHei显示中文
rcParams['axes.unicode_minus'] = False  # 解决负号显示为方块的问题

# 数据
x = np.array([825, 215, 1070, 550, 480, 920, 1350, 325, 670, 1215])
y = np.array([3.5, 1.0, 4.0, 2.0, 1.0, 3.0, 4.5, 1.5, 3.0, 5.0])

# 创建图形
plt.scatter(x, y, color='blue', marker='o')

# 添加标题和标签
plt.title("数据散点图")
plt.xlabel("x 轴")
plt.ylabel("y 轴")

# 显示图形
plt.tight_layout()
plt.show()

观察发现数据之间具有很好的相关关系,计算其相关系数为0.9489428,可以进一步探索他们之间的回归关系。

3.2 回归方程和回归曲线

在Python语言中,使用lm函数可以非常容易地求出回归方程,用它来拟合线性模型,可以进行回归、方差分析和协方差分析。

import numpy as np
import matplotlib.pyplot as plt

# 数据
x = np.array([825, 215, 1070, 550, 480, 920, 1350, 325, 670, 1215])
y = np.array([3.5, 1.0, 4.0, 2.0, 1.0, 3.0, 4.5, 1.5, 3.0, 5.0])

# 拟合回归模型
coefficients = np.polyfit(x, y, 1)
slope, intercept = coefficients

# 绘制散点图和回归直线
plt.scatter(x, y, color='blue', label='数据点')
plt.plot(x, slope * x + intercept, color='red', label=f'拟合线: y={slope:.2f}x + {intercept:.2f}')

# 添加图表标题和标签
plt.title("数据散点图和拟合回归线")
plt.xlabel("x 轴")
plt.ylabel("y 轴")
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()

# 输出回归方程
print(f"回归方程: y = {slope:.2f}x + {intercept:.2f}")

回归方程: y = 0.00x + 0.12

3.3 方差分析和回归系数检验

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

# 数据
x = np.array([825, 215, 1070, 550, 480, 920, 1350, 325, 670, 1215])
y = np.array([3.5, 1.0, 4.0, 2.0, 1.0, 3.0, 4.5, 1.5, 3.0, 5.0])

# 添加常数项(截距)
x_with_constant = sm.add_constant(x)

# 拟合回归模型
model = sm.OLS(y, x_with_constant)
results = model.fit()

# 输出回归结果表
print(results.summary())

# 绘制散点图和回归直线
plt.scatter(x, y, color='blue', label='数据点')
plt.plot(x, results.predict(x_with_constant), color='red', label=f'拟合线: y = {results.params[1]:.2f}x + {results.params[0]:.2f}')

# 添加图表标题和标签
plt.title("数据散点图和拟合回归线")
plt.xlabel("x 轴")
plt.ylabel("y 轴")
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()
OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.900
Model:                            OLS   Adj. R-squared:                  0.888
Method:                 Least Squares   F-statistic:                     72.40
Date:                Sun, 20 Oct 2024   Prob (F-statistic):           2.79e-05
Time:                        15:54:01   Log-Likelihood:                -5.7345
No. Observations:                  10   AIC:                             15.47
Df Residuals:                       8   BIC:                             16.07
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.1181      0.355      0.333      0.748      -0.701       0.937
x1             0.0036      0.000      8.509      0.000       0.003       0.005
==============================================================================
Omnibus:                        0.930   Durbin-Watson:                   0.753
Prob(Omnibus):                  0.628   Jarque-Bera (JB):                0.754
Skew:                          -0.525   Prob(JB):                        0.686
Kurtosis:                       2.160   Cond. No.                     1.97e+03
==============================================================================

3.4 残差分析

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import scipy.stats as stats

# 数据
x = np.array([825, 215, 1070, 550, 480, 920, 1350, 325, 670, 1215])
y = np.array([3.5, 1.0, 4.0, 2.0, 1.0, 3.0, 4.5, 1.5, 3.0, 5.0])

# 添加常数项(截距)
x_with_constant = sm.add_constant(x)

# 拟合回归模型
model = sm.OLS(y, x_with_constant)
results = model.fit()

# 残差
residuals = results.resid

# 1. 绘制残差图(残差 vs 拟合值)
plt.figure(figsize=(10, 6))
plt.scatter(results.fittedvalues, residuals, color='blue')
plt.axhline(y=0, color='red', linestyle='--')
plt.title("残差图: 残差 vs 拟合值")
plt.xlabel("拟合值")
plt.ylabel("残差")
plt.tight_layout()
plt.show()

# 2. 残差的正态性检验 (Q-Q 图)
plt.figure(figsize=(10, 6))
sm.qqplot(residuals, line='s')
plt.title("残差的 Q-Q 图")
plt.tight_layout()
plt.show()

# 3. Durbin-Watson 检验 (检测残差的自相关性)
dw_value = sm.stats.stattools.durbin_watson(residuals)
print(f"Durbin-Watson 值: {dw_value:.2f}")

# 4. Shapiro-Wilk 正态性检验
shapiro_test = stats.shapiro(residuals)
print(f"Shapiro-Wilk 正态性检验的 p 值: {shapiro_test.pvalue:.4f}")

# 输出回归结果
print(results.summary())
   OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.900
Model:                            OLS   Adj. R-squared:                  0.888
Method:                 Least Squares   F-statistic:                     72.40
Date:                Sun, 20 Oct 2024   Prob (F-statistic):           2.79e-05
Time:                        15:57:24   Log-Likelihood:                -5.7345
No. Observations:                  10   AIC:                             15.47
Df Residuals:                       8   BIC:                             16.07
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.1181      0.355      0.333      0.748      -0.701       0.937
x1             0.0036      0.000      8.509      0.000       0.003       0.005
==============================================================================
Omnibus:                        0.930   Durbin-Watson:                   0.753
Prob(Omnibus):                  0.628   Jarque-Bera (JB):                0.754
Skew:                          -0.525   Prob(JB):                        0.686
Kurtosis:                       2.160   Cond. No.                     1.97e+03
==============================================================================

3.5 回归预测

# 虚构的 5 期 x 值
new_x = np.array([1400, 1600, 1800, 2000, 2200])
# 添加常数项(截距)
new_x_with_constant = sm.add_constant(new_x)
# 使用之前拟合的模型预测新的 y 值
predicted_y = results.predict(new_x_with_constant)
# 输出预测结果
for i, (x_val, y_pred) in enumerate(zip(new_x, predicted_y), 1):
    print(f"第{i}期: x = {x_val}, 预测的 y = {y_pred:.2f}")


第1期: x = 1400, 预测的 y = 5.14
第2期: x = 1600, 预测的 y = 5.85
第3期: x = 1800, 预测的 y = 6.57
第4期: x = 2000, 预测的 y = 7.29
第5期: x = 2200, 预测的 y = 8.01

例2:中国全体居民的消费水平与经济发展数量关系的分析。随着中国经济的快速发展,人民生活水平不断提高,居民的消费水平也在不断增长。研究中国全体居民的消费水平与经济发展的数量关系,对于探寻居民消费增长的规律性,预测居民消费的发展趋势有重要意义。影响居民人均消费水平的因素有多种,但从理论和经验分析,最主要的影响因素应是经济发展水平。从理论上说经济发展水平越高,居民消费越多,这里选择:被解释变量选择能代表城乡所有居民消费的“全体居民人均年消费水平”(元/人);解释变量选择表现经济增长水平的“人均国民生产总值(人均GDP)”(元/人)。数据来源:1978年至2007年中国“全体居民人均年消费水平”与“人均国内生产总值(人均GDP)” 的时间序列数据。

年份 全体居民消费水平(元)Y 人均GDP(元)X 年份 全体居民消费水平(元)Y 人均GDP(元)X 年份 全体居民消费水平(元)Y 人均GDP(元)X
1978 184 381 1979 208 419 1980 238 463
1981 264 492 1982 288 528 1983 316 583
1984 361 695 1985 446 858 1986 497 963
1987 565 1112 1988 714 1366 1989 788 1519
1990 833 1644 1991 932 1893 1992 1116 2311
1993 1393 2998 1994 1833 4044 1995 2355 5046
1996 2789 5846 1997 3002 6420 1998 3159 6796
1999 3346 7159 2000 3632 7858 2001 3869 8622
2002 4106 9398 2003 4411 10542 2004 4925 12336
2005 5463 14053 2006 6138 16165 2007 7081 18934
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from matplotlib.font_manager import FontProperties

# 设置中文字体以避免图中中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 数据
Y = np.array([184, 208, 238, 264, 288, 316, 361, 446, 497, 565, 714, 788, 833, 932, 
              1116, 1393, 1833, 2355, 2789, 3002, 3159, 3346, 3632, 3869, 4106, 
              4411, 4925, 5463, 6138, 7081])
X = np.array([381, 419, 463, 492, 528, 583, 695, 858, 963, 1112, 1366, 1519, 
              1644, 1893, 2311, 2998, 4044, 5046, 5846, 6420, 6796, 7159, 
              7858, 8622, 9398, 10542, 12336, 14053, 16165, 18934])

# 绘制散点图
plt.scatter(X, Y)
plt.xlabel('人均GDP(元) X')
plt.ylabel('全体居民消费水平(元) Y')
plt.title('全体居民消费水平与人均GDP的散点图')
plt.show()

# 一元回归分析
X_with_const = sm.add_constant(X)
model = sm.OLS(Y, X_with_const)
results = model.fit()

# 输出回归结果和回归方程
print(results.summary())
regression_eq = f"Y = {results.params[0]:.4f} + {results.params[1]:.4f} * X"
print("回归方程:", regression_eq)

# 残差图
residuals = results.resid
plt.scatter(X, residuals)
plt.axhline(0, color='red', linestyle='--')
plt.xlabel('人均GDP(元) X')
plt.ylabel('残差')
plt.title('残差图')
plt.show()
散点图 残差图

总结

一元回归模型是分析两个变量之间线性关系的重要工具,其核心目的是通过建立简单的线性方程来描述自变量与因变量之间的关系。通过最小二乘法,我们可以有效地估计这些模型参数,进而进行显著性检验,以评估自变量对因变量的影响程度和方向。回归分析的意义不仅在于量化变量间的关系,还在于为预测提供科学依据。在经济学中,分析人均收入与消费支出之间的关系,可以为政策制定者提供重要的决策支持。此外,回归分析还可以揭示潜在的因果关系,帮助我们理解数据背后的机制。

参考文献

  1. python:一元线性回归模型案例分析
  2. 完整详细的回归分析实例R语言实现(含数据代码)
  3. [学习笔记 第九章(上)一元线性回归分析](https://cloud.tencent.com/developer/article/1412088}

标签:一元,plt,回归,残差,计量经济学,beta,线性,hat,模型
From: https://www.cnblogs.com/haohai9309/p/18486974

相关文章

  • 【NOIP提高组】一元三次方程求解
    【NOIP提高组】一元三次方程求解......
  • 线性可分支持向量机的原理推导【补充知识部分】9-10最大化函数max α,β L(x,α,β)关
    本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。在主文章中,有一个部分是关于补充拉格朗日对偶性的相关知识,此公式即为这部分里的内容。公式9-10是基于公式9-9的进一步引申,它通过引入拉格朗日乘子,将约束优化问......
  • 数据结构与算法之线性表的基本操作
    数据结构之线性表的基本操作初始化,插入,获取#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineOK1#defineOVERFLOW-1#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefintElemType;typedefstruct{ ElemType*elem; intlength; i......
  • 线性表学习1
    线性结构若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且除了首尾节点外所有结点都最多只有一个直接前趋和一个直接后继。可表示为:(a1,a2,a3,...)特点:只有一个首结点和尾结点本质特征:除首尾结点外,其他结点只有一个直接前驱和一个直接后继。简言之,线性结构反映......
  • 15章2节:线性判别分析预测模型构建评估和可视化演示
    线性判别分析(LDA)作为一种经典的分类方法,通过最大化类间差异与最小化类内差异来实现样本的有效分类。LDA在理论上建立了坚实的数学基础,并且在多个领域具有广泛的应用。然而,在应用时需要注意其假设条件,并根据数据的实际情况选择合适的分类方法。在本篇文章中,我们通过Iris数据集......
  • 计量经济学(十一)——联立方程模型的估计
    联立方程模型(SimultaneousEquationsModel,SEM)是一类包含多个相互依赖变量的统计模型,用来描述这些变量之间的相互关系。在传统的单一方程模型中,通常假设某个因变量仅仅受到若干自变量的影响,而这些自变量是外生的。然而,在现实经济中,变量之间往往是相互影响的,比如收入和消费。联......
  • 83. 删除排序链表中的重复元素 线性法&快慢双指针
    83.删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0,300] 内-100<=......
  • 线性代数--向量
    向量n个数a1a2......an组成的有序数组(a1a2......an)a1..又称为分量维数行向量列向量只是形式不同零向量分量全是0负向量相反数两个向量相等同维向量向量相加减k是数另一个是向量向量间的线性关系线性关系:用某些向量能表示一个向量线性组合:β,α1,......
  • 线性回归与梯度下降
    什么是回归回归分析是一种基于已有数据建立模型的方法,旨在帮助我们进行未来的预测。通过回归分析,我们可以探索因变量(目标变量)与一个或多个自变量(特征变量)之间的关系。损失函数在回归分析中,我们通常需要衡量模型的预测效果,这就涉及到损失函数。常见的损失函数包括绝对值损失和......
  • 计量经济学(九)——向量自回归VAR模型检验
    向量自回归(VAR,VectorAutoregression)模型是一种广泛用于时间序列分析的统计工具,特别是在经济学和金融学领域中。VAR模型的关键优势在于其可以捕捉多个变量之间的相互依赖关系,而无需预设变量之间的因果顺序。这使得VAR模型在处理复杂动态系统时极具灵活性。VAR模型的基本结构是将......