五、线性回归建模及检验★

在第四章中,已经完成回归分析之线性回归模型构建。接下来是模型诊断,可以结合第四章线性回归一起学习。

  1. 当Y服从正态分布时,模型表现指标会好。如 R 2 R^2 R2(精确度)、β(稳定性)。
  2. 模型要求:
    精确度 R 2 R^2 R2变化不大且稳定性β长期保持在一个水平上。
  3. 要保持模型精确和稳定,就要进行模型检验,使模型满足假设。

1 多元回归假设★★★

多元回归假设:

  • Y的平均值能够准确地被由X组成的线性函数建模出来的。(回归均值)
  • 解释变量X和随机扰动项 ϵ \epsilon ϵ不存在线性关系。(回归公式: Y = β X + ϵ Y = \beta X+\epsilon Y=βX+ϵ)
  • 解释变量X之间不存在线性关系(或强相关)
  • 假设随机误差项 ϵ \epsilon ϵ是一个均值为0的正态分布
  • 假设随机误差项 ϵ \epsilon ϵ的方差恒为 σ 2 \sigma^2 σ2
  • 误差是独立的

线性关系:解释变量和被解释变量之间是线性关系

解释1和解释4 ϵ \epsilon ϵ(不能被X所解释的其他因素)和Y的分布是完全一样的,只是Y的均值是βX,所以 ϵ \epsilon ϵ是均值为0 的正态分布。

解释2:X是拿到的数据对Y的解释。 ϵ \epsilon ϵ是没有拿到的数据对Y的解释。所以解释变量和扰动项之间不存在线性关系。
多元线性回归 Y = β 1 X 1 + β 2 X 2 + ϵ Y = \beta_1X_1 + \beta_2X_2 +\epsilon Y=β1X1+β2X2+ϵ【扰动项:影响Y但是没有被纳X中的】

例子:孩子的收入【Y】 = 孩子教育水平【X】 + 父亲职业
父亲职业不影响孩子教育水平
=>父亲职业纳入扰动项孩子的收入【Y】 = 孩子教育水平【X】 + 父亲职业【扰动项】
父亲职业影响孩子教育水平
=>父亲职业纳入解释变量 : 孩子收入=$\beta_1$孩子教育+$\beta_2$父亲收入
=>若未纳入解释变量,则变为:孩子收入=( β 1 + β 2 \beta_1+\beta_2 β1+β2)孩子教育 +父亲职业【扰动项】,导致孩子教育对孩子收入的影响虚高。
所以解释变量和扰动项之间不存在线性关系,如果存在线性关系,就将跟X相关的进行多的变量纳入模型中。这也是多元回归存在的必要性

解释3
一元线性回归 : Y = β 1 X 1 + β 0 + ϵ Y = \beta_1X_1 +\beta_0 +\epsilon Y=β1X1+β0+ϵ
一元线性回归进行估计时,估计的是回归系数的均值(见第四章)和回归系数的标准差
S β = S ϵ ∣ X ∣ S_\beta = \frac{S_\epsilon}{|X|} Sβ=XSϵ
S β S_\beta Sβ是回归系数的标准差, S ϵ S_\epsilon Sϵ是扰动项(残差)的标准差。残差 e = y − y ^ e = y - \hat{y} e=yy^
|X|中如果X中两列线性相关,那么行列式为0,由于分母不能为0,所以解释变量(X)之间不存在线性相关。

解释5
下图是Y的预测值和残差的关系图。
在这里插入图片描述
y ^ = β x \hat{y} = \beta x y^=βx, β \beta β是常量,所以 y ^ \hat{y} y^与x的分布是一致的。由图可知,随着x的增大,扰动项的方差是不变的。

解释6:Y是客观存在的、独立的,产生的误差是独立的。

2 模型检验之残差检验

模型检验目的:检验模型和假设是否一致,若不一致调整到一致即可。

  • 检验的根本:画图,对数据有一个感性认识。

  • 残差检验标准:
    1.残差是否离群
    2.残差是否和某个X有曲线关系
    3.残差是否和某个X有关

2.1 查看残差图

在这里插入图片描述

  • 残差独立同分布且服从正态分布。
  • 图形横坐标是Y的预测值,纵坐标是扰动项(残差)。
  • 点到线的竖直距离是残差。
  • 翻转的正态分布图形是Y的预测值, y ^ = β x \hat{y} = \beta x y^=βx

在这里插入图片描述
正常残差图:随着X的增加,残差是随机分布的。
X为非线性:随着X的变化,残差呈现抛物线变化,需要将 X 2 X^2 X2放进模型。
异方差:随着X的增大,残差呈现扇面式的分布。常出现在横截面数据(样本在同一个时间采集到的)。
自相关:随着X的变化,残差呈现周期式波动。常出现在时间序列数据上。

2.2 解决方案★★
  • X为非线性:加入X的高阶形式(如 X 2 X^2 X2)
  • 异方差:横截面数据经常出现异方差现象,修正的方法如:加权最小二乘法、稳健回归,最简单的是对Y取自然对数
  • 自相关:分析时间序列和空间数据时易出现,复杂方法是使用时间序列或空间计量方法分析,简单方法是加入Y的一阶滞后项进行回归。

注:
在描述性统计分析中,连续变量只会有四种可能:正态分布泊松分布伽马分布对数正态分布;其中对数正态分布又是右偏最严重的函数,对于对数正态分布来说,对函数取对数之后就是正态分布。

2.3 案例:线性回归诊断——模型检验
2.3.1 导入数据
import matplotlib.pyplot as plt
import os
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

os.chdir(r"E:\7linearmodel")
raw = pd.read_csv(r'creditcard_exp.csv', skipinitialspace=True)
raw.head()

在这里插入图片描述

- 数据基本情况
# 有支出数据的情况
exp = raw[raw['avg_exp'].notnull()].copy().iloc[:, 2:].drop('age2',axis=1)
# 没有支出数据的情况,数据待预测
exp_new = raw[raw['avg_exp'].isnull()].copy().iloc[:, 2:].drop('age2',axis=1)

exp.describe(include='all')

在这里插入图片描述

2.3.2 相关性分析
- 1.散点图:收入与支出关系
exp.plot('Income', 'avg_exp', kind='scatter')
plt.show()

在这里插入图片描述

- 2.pearson相关系数
exp[['Income', 'avg_exp', 'Age', 'dist_home_val']].corr(method='pearson')

在这里插入图片描述

2.3.3 简单线性回归
- 1.建立线性回归模型
lm_s = ols('avg_exp ~ Income', data=exp).fit()
lm_s.summary()

在这里插入图片描述

- 2.线性回归模型预测、残差值
lm_s.predict(exp)
lm_s.resid
pd.DataFrame([lm_s.predict(exp),lm_s.resid],index=['predict','resid']).T.head()

在这里插入图片描述

- 3.待预测数据集中得到预测值
lm_s.predict(exp_new)[:5]

在这里插入图片描述

2.3.4 多元线性回归
  1. 建立多元线性回归模型
- 建立多元线性回归模型
lm_m = ols('avg_exp ~ Age + Income + dist_home_val + dist_avg_income',
           data=exp).fit()
lm_m.summary()

在这里插入图片描述

  1. 模型筛选,找出最好模型【见四、线性回归模型构建】
2.3.5 线性回归诊断——模型检验(模型调优)
2.3.5.1 检验残差分析
- 1.建立线性回归模型
ana1 = ols('avg_exp ~ Income',exp).fit()
ana1.summary()

在这里插入图片描述

- 2.散点图:计算预测值与残差值并散点图分析
# 回归模型
ana1 = lm_s
# 保留预测值
exp['Pred'] = ana1.predict(exp)
# 保留残差
exp['resid'] = ana1.resid
# 收入和残差进行分析,作收入的预测值
exp.plot('Income','resid',kind = 'scatter')   
plt.show()

在这里插入图片描述

模型解释:
图形呈扇形(喇叭状),所以是异方差,其解决方法是取对数。

2.3.5.2 模型调优(检验)
  • 根据残差分析的散点图进行调优
- 3.建立新的线性回归模型,计算预测值、残差值
exp['avg_exp_ln'] = np.log(exp['avg_exp']) #对Y取对数
ana2 = ols('avg_exp_ln ~ Income',exp).fit()
exp['Pred'] = ana2.predict(exp)
exp['resid'] = ana2.resid
ana2.summary()

在这里插入图片描述

- 4.新的散点图分析
exp.plot('Income','resid',kind='scatter')

在这里插入图片描述
模型解释:
根据结果 R 2 R^2 R2比未取对数时下降了,所以模型效果变差了。需要再次调优。

2.3.5.3 模型调优

因为根据散点图判断残差分析是异方差,所以需要对Y、X都取对数再次检验。

- 5.建立新的线性回归模型,判断残差分析
# 对X取对数
exp['Income_ln'] = np.log(exp['Income'])
# 回归模型
ana3 = ols('avg_exp_ln ~ Income_ln',exp).fit()
# 预测Y值
exp['Pred'] = ana3.predict(exp)
# 计算残差
exp['resid'] = ana3.resid
# 散点图
exp.plot('Income_ln','resid',kind='scatter')

在这里插入图片描述

- 6.模型效果
ana3.summary()

在这里插入图片描述
模型解释:
R 2 R^2 R2增加,模型效果变好;一个人的年收入每增加一个百分点,支出增加0.89个百分点。

2.4 强影响点

强影响点作用:构建关于强影响点的统计量去更好识别强影响点,如:学生化残差

学生化残差 = 残差/标准误差,将样本残差作学生标准化。
强影响点的识别:
样本量为三位数,|SR|>2为强影响点;
样本量为四位数,|SR|>3为强影响点。

2.4.1 案例:强影响点
- 1.学生化残差:标准化残差
exp['resid_t'] = (exp['resid'] - exp['resid'].mean())/exp['resid'].std()
exp['resid_t'].sort_values()

在这里插入图片描述

- 2.选择标准化残差小于等于2的样本,利用数据进行建模
# 样本量为三位数,|SR|>2为异常值
exp2 = exp[abs(exp['resid_t'])<=2].copy()  
ana4 = ols('avg_exp_ln ~ Income_ln',exp2).fit()
exp2['Pred'] = ana4.predict(exp2)
exp2['resid'] = ana4.resid
exp2.plot('Income','resid',kind='scatter')
plt.show()

在这里插入图片描述
去除异常值,异常值只去除一次

- 3.回归模型
- R^2上升,模型效果变好了
ana4.summary()

在这里插入图片描述

3 共线性问题——X与X之间的关系

  • 若X之间有共线性问题,模型是不稳定的。方差膨胀因子>10表示某变量的多重共线性严重。

  • 方差膨胀因子公式
    V I i = 1 1 − R i 2 VI_i = \frac{1}{1-R_i^2} VIi=1Ri21
    例:模型 Y = β 1 X 1 + β 2 X 2 Y = \beta_1X_1 +\beta_2X_2 Y=β1X1+β2X2检验共线性

    1. 利用X1和X2做回归即 X 1 ‾ = β X 2 \overline{X_1} = \beta X_2 X1=βX2,得到 R 2 R^2 R2
    2. R 2 R^2 R2带入方差膨胀因子公式,方差膨胀因子>10则存在多重共线性。
- 1.建立回归模型
exp2['dist_home_val_ln'] = np.log(exp2['dist_home_val'])
exp2['dist_avg_income_ln'] = np.log(exp2['dist_avg_income'])
ana5 = ols('avg_exp_ln ~ Age + Income_ln + dist_home_val_ln + dist_avg_income_ln',exp2).fit()

ana5.summary()

在这里插入图片描述

- 2. 方差膨胀因子(VIF)
def vif(df,col_i):
	 '''
    将每个X与剩下的X做线性回归,得到R^2
    返回VIF = 1. / (1. - r2)
    '''
    cols = list(df.columns)
    cols.remove(col_i)
    cols_noti = cols
    formula = col_i + '~' + '+'.join(cols_noti)
    r2 = ols(formula, df).fit().rsquared
    return 1. / (1. - r2)
exog = exp2[['Income_ln', 'dist_home_val_ln',
             'dist_avg_income_ln']]

for i in exog.columns:
    print(i, '\t', vif(df=exog, col_i=i))

在这里插入图片描述
模型解释:
步骤一: 方差膨胀因子>10的表示某变量多重共线性严重。可看出Income、avg_income存在多重共线性问题。
步骤二:对模型进行调整,删除不显著的变量。图中存在共线性问题且不显著的是Income_ln,所以删除Income_ln重新建立回归模型。

ana6 = ols('avg_exp_ln ~ Age + dist_home_val_ln + dist_avg_income_ln',exp2).fit()

ana6.summary()

在这里插入图片描述
注:根据一个标准(如VIF、AIC等),一般是不能将所有不显著的变量都去除掉的,需要结合使用。

4 线性回归建模流程★

初始分析
变量选择
验证模型假定
多重共线性与强影响点的诊断与分析
模型是否有问题
预测和解释
  1. 初始分析:分析X、Y的分布【单变量:Y是否右偏、X和Y有无异常值】
  2. 变量选择:观察X和Y之间的关系,保留显著的X并放入模型【检验X、Y是否显著】
  3. 验证模型假设:X和Y的函数关系【看散点图】
  4. 多重共线性和强影响点:检验共线性和影响点的问题

所有后续模型的检验都少于线性模型,因为只有线性模型做的特别精确。

5 线性回归假设归纳★★★

多元线性回归的六个假设:
假设一:模型设置,选择何种回归方法、如何选变量、变量以何种形式放入模型【看散点图
假设二:解释变量和扰动项不相关【理论或常识判断,无法检验】
假设三:解释变量之间不能强相关【方差膨胀因子
假设四:扰动项独立同分布【异方差检验、DW检验
假设五:扰动项服从正态分析【看直方图是否是正态分布
注:只要Y不是正态分布,残差必然是异方差

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值