2020-11-18 多重共线性相关知识

多重共线性问题


前言

本文介绍多重共线性的相关知识


以下是本篇文章正文内容

一、多重共线性是什么?

要点:

  • 定义在线性回归模型中
  • 解释变量之间的
  • 精确相关关系或高度相关关系

对要点的解释:

  • 线性回归模型的一般形式:
    Y = β 0 + β 1 X 1 + ⋯ + β p X p + ε = β 0 + ∑ i = 1 p β i X i + ε . Y=\beta_0+\beta _1X_1+\cdots +\beta _pX_p+\varepsilon \\=\beta_0+\sum_{i=1}^p{\beta _iX_i}+\varepsilon. Y=β0+β1X1++βpXp+ε=β0+i=1pβiXi+ε.
  • 解释变量:即自变量(自变量是随机变量)。在spss里又称为“预测变量”。
  • 精确相关关系:即完全的线性相关:存在多重共线性的各个变量线性相关。此时称自变量之间存在完全共线性。其数学表示为:存在一组不全为0的 C 1 , C 2 , ⋯   , C r C_1,C_2,\cdots ,C_r C1,C2,,Cr,使 C 1 X 1 + C 2 X 2 + ⋯ + C r X r = 0. C_1X_1+C_2X_2+\cdots +C_rX_r=0. C1X1+C2X2++CrXr=0.
  • 高度相关关系:不是完全的线性相关:添加了随机误差(即随机扰动项) v v v v v v满足条件: E ( v ) = 0 , E ( v 2 ) < ∞ E(v)=0,E(v^2)<\infty E(v)=0,E(v2)<)。此时称自变量之间存在不完全共线性。数学表示为:存在一组不全为0的 C 1 , C 2 , ⋯   , C r C_1,C_2,\cdots ,C_r C1,C2,,Cr,使 C 1 X 1 + C 2 X 2 + ⋯ + C r X r + v = 0. C_1X_1+C_2X_2+\cdots +C_rX_r+v=0. C1X1+C2X2++CrXr+v=0.

二、statsmodels最小二乘法的步骤及结果解读

2.1 数据展示

在这里插入图片描述

2.2 相关性和散点图

2.2.1 相关系数热力图

def test(df):
    dfData = df.corr()
    plt.subplots(figsize=(9, 9)) # 设置画面大小
    sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Blues")
    plt.savefig('./BluesStateRelation.png')
    plt.show()
test(data_log.iloc[:,:-1])

结果:
在这里插入图片描述

2.2.2 各变量散点图

画图代码:

#8个变量与Y的散点图
varia=data_log.columns.tolist()
color=['r','b','g','darkorange','navy','m','c','y']
fig=plt.figure(figsize=(24,12))
plt.rc('font',size=16)
for i in range(8):
    ax1 = fig.add_subplot(241+i)
    ax1.set_xlabel(varia[i])
    ax1.set_ylabel('$lnEM_{LND}+lnEM_{CIT}+lnEM_{AGR}$',labelpad=-75,position=(10,0.6))#设置文本标签与坐标轴的距离为负
    ax1.scatter(data_log[varia[i]],data_log['$lnEM_{LND}+lnEM_{CIT}+lnEM_{AGR}$'], c=color[i], marker='o')
plt.show()

结果:
在这里插入图片描述

2.3 多元线性回归(最小二乘法)

2.3.1 回归结果

回归代码:

#加载表中x1,x2,x3,x4,x5,x6,x7,x8,y的数据
d={'x1':data_log['$lnLND_2$'],'x2':data_log['$lnLND_1$'],\
   'x3':data_log['$lnW_{IND}$'],'x4':data_log['$lnCIT_1$'],\
   'x5':data_log['$lnCIT_2$'],'x6':data_log['$lnW_{CIT}$'],\
   'x7':data_log['$lnAGR_2$'],'x8':data_log['$lnW_{AGR}$'],\
   'y':data_log['$lnEM_{LND}+lnEM_{CIT}+lnEM_{AGR}$']}
md=sm.formula.ols('y~x1+x2+x3+x4+x5+x6+x7+x8',d).fit()  #构建并拟合模型']
print(md.summary(),'\n------------\n')  #显示模型所有信息
ypred=md.predict({'x1':data_log['$lnLND_2$'],'x2':data_log['$lnLND_1$'],\
   'x3':data_log['$lnW_{IND}$'],'x4':data_log['$lnCIT_1$'],\
   'x5':data_log['$lnCIT_2$'],'x6':data_log['$lnW_{CIT}$'],\
   'x7':data_log['$lnAGR_2$'],'x8':data_log['$lnW_{AGR}$']})  #计算预测值

statsmodels给出的回归结果:
在这里插入图片描述

2.3.2 回归结果的分析

2.3.2.1 第一部分左边:
  1. Dep. Variable:即dependent variable,因变量
  2. OLS:普通最小二乘法
  3. least squares:最小化残差平方和
  4. No. Observations:个案数,即样本容量
  5. df residuals:残差自由度(观测数No.Observations - (参数数目Df Model+1)),这里的1是常量参数
  6. df model:模型中自变量(即参数)个数
2.3.2.2 第一部分右边
  1. R-squared:R方
  2. Adj . R-squared:调整后的R方
  3. F-statistic:F统计量,均方误差/残差的均方误差。值越大, H 0 H_0 H0 越不可能,从而回归系数显著
  4. Prob(F-statistic):当 p r o b ( F − s t a t i s t i c ) < α prob(F-statistic)<α prob(Fstatistic)<α时,表示拒绝原假设,即认为模型是显著的
  5. Log likelihood :对数似然比LLR。值越大,模型拟合得越好。
  • (Davidson 与MacKinnon年说:对于线性回归模型,不管它误差是不是正态分布,都不需要过问LM,W,LLR,因为这些信息已被F检验所含有)
  1. AIC: A I C = 2 k − 2 l n ( L ) AIC=2k-2ln(L) AIC=2k2ln(L)。其中:k是参数的数量,L是似然函数。它衡量拟合优良性,应选择AIC最小的模型, 引入了惩罚项,避免参数过多,过拟合
    在这里插入图片描述
  2. BIC: 贝叶斯信息准则 B I C = k l n ( n ) − 2 l n ( L ) BIC=kln(n)-2ln(L) BIC=kln(n)2ln(L) ,BIC相比AIC在大数据量时对模型参数惩罚得更多,导致BIC更倾向于选择参数少的简单模型。
2.3.2.3 第二部分(模型描述部分)
  1. intercept:还不知道是什么意思
  2. coef:各自变量的估计系数
  3. std err:系数估计的标准差
  4. t : 即t统计量,衡量显著性的指标
  5. P > ∣ t ∣ P>|t| P>t H 0 H_0 H0(系数=0)为真的概率。 p < α p< \alpha p<α表示估计的系数在统计学意义上显著
  6. [ 0.025 , 0.975 ] [0.025,0.975] [0.025,0.975]: 95%置信区间的下限和上限值
2.3.2.4 第三部分
  1. Omnibus :属于一种统计测验,测试一组数据中已解释方差是否显著大于未解释方差,但omnibus不显著,模型也可能存在合法的显著影响, 比如两个变量中有一个不显著,即便另一个显著.通常用于对比
  2. Prob(Omnibus):将上面的统计数据变成概率
  3. Skewness: 偏度
  4. Kurtosis:峰度
  5. Durbin-Watson:德宾-沃森检验(检验残差自相关最常用的方法),它用于检验一阶自相关性。
  • 自相关系数 − 1 < ρ < 1 ⇒ 0 ≤ D W ≤ 4 -1<ρ<1\Rightarrow0≤DW≤4 1<ρ<10DW4
  • 并且
    D W = 0 ⇔ ρ = 1 DW=0 \Leftrightarrow ρ=1 DW0ρ  即存在正自相关性
    D W = 4 ⇔ ρ = - 1 DW=4\Leftrightarrow ρ=-1 DWρ即存在负自相关性
    D W = 2 ⇔ ρ = 0 DW=2\Leftrightarrow ρ=0 DWρ  即不存在(一阶)自相关性
  1. Jarque-Bera(JB) : Jarque–Bera检验。如果统计量 ≫ 0 \gg0 0,则表示数据不是正态分布。
  2. Prob(JB): JB统计量的概率形式
  3. Cond. No :条件数。用于诊断多重共线性

2.3.3 结果分析

  1. 模型不显著、拟合系数不显著
  2. 存在严重多重共线性
  3. 减少变量后:仍存在多重共线性、x5的拟合系数不通过显著性检验、将x5变为 x 5 2 x5^2 x52后仍无较大改变

三、消除多重共线性影响——基于python的逐步回归

1.引入库、读取数据、数据结构的转换

引入库:

import numpy as np
import pandas as pd

读取数据:

data_reg_df=pd.read_excel(r'文件的路径')#用于回归的数据,是dataframe结构

数据结构的转换:

data_reg=data_reg_df.values.copy()
#将DataFrame对象转化为数组,数组的最后一列为预报对象(即因变量)

2.计算相关系数(即单变量回归系数)、计算相关系数矩阵

1.计算相关系数:

def get_regre_coef(X,Y):
    S_xy=0
    S_xx=0
    S_yy=0
    # 计算预报因子和预报对象的均值
    X_mean = np.mean(X)
    Y_mean = np.mean(Y)
    for i in range(len(X)):
        S_xy += (X[i] - X_mean) * (Y[i] - Y_mean)
        S_xx += pow(X[i] - X_mean, 2)
        S_yy += pow(Y[i] - Y_mean, 2)
    return S_xy/pow(S_xx*S_yy,0.5)

2.计算相关系数矩阵(即原始增广矩阵):

全部变量之间的相关系数矩阵为: R = ( R 11 R 12 ⋯ R 1 m R 1 y R 21 R 22 ⋯ R 2 m R 2 y ⋮ ⋮ ⋱ ⋮ ⋮ R m 1 R m 2 ⋯ R m m R m y R y 1 R y 2 ⋯ R y m R y y ) . R=\left( \begin{matrix} R_{11}& R_{12}& \cdots& R_{1m}& R_{1y}\\ R_{21}& R_{22}& \cdots& R_{2m}& R_{2y}\\ \vdots& \vdots& \ddots& \vdots& \vdots\\ R_{m1}& R_{m2}& \cdots& R_{mm}& R_{my}\\ R_{y1}& R_{y2}& \cdots& R_{ym}& R_{yy}\\ \end{matrix} \right) . R=R11R21Rm1Ry1R12R22Rm2Ry2R1mR2mRmmRymR1yR2yRmyRyy.

def get_original_matrix():
    # 创建一个数组存储相关系数,data.shape几行()几列,结果用一个tuple表示
    # print(data.shape[1])
    col=data.shape[1]
    # print(col)
    r=np.ones((col,col))#np.ones参数为一个元组(tuple)
    # print(np.ones((col,col)))
    # for row in data.T:#运用数组的迭代,只能迭代行,迭代转置后的数组,结果再进行转置就相当于迭代了每一列
        # print(row.T)
    for i in range(col):
        for j in range(col):
            r[i,j]=get_regre_coef(data[:,i],data[:,j])
    return r

3.计算方差贡献率和方差比(即变量引入的F值)

  1. 计算方差贡献率:
def get_vari_contri(r):
    col = data.shape[1]
     #创建一个矩阵来存储方差贡献值
    v=np.ones((1,col-1))
    # print(v)
    for i in range(col-1):
        v[0, i] = pow(r[i, col - 1], 2) / r[i, i]
    return v

该段代码基于第 l l l步计算的自变量 X j X_j Xj的方差贡献率的计算公式: v j ( l ) = ( R j y ( l − 1 ) ) 2 R j j ( l ) v_{j}^{\left( l \right)}=\frac{\left( R_{jy}^{\left( l-1 \right)} \right) ^2}{R_{jj}^{\left( l \right)}} vj(l)=Rjj(l)(Rjy(l1))2

  1. 计算变量引入的F值:

在逐步回归的过程中,不仅要引入方差贡献率最大的自变量,还要剔除贡献率最小的自变量。因此需要对自变量的存留与否进行F假设检验。

F检验(F-test):又称联合假设检验(joint hypotheses test),也称方差比率检验、方差齐性检验。是对统计量F是否服从F-分布的检验。

#选择因子是否进入方程,
#参数说明:r为增广矩阵,v为方差贡献值,k为方差贡献值最大的因子下标,p为当前进入方程的因子数
def select_factor(r,v,k,p):
    row=data.shape[0]#样本容量
    col=data.shape[1]-1#预报因子数
    #计算方差比
    f=(row-p-2)*v[0,k-1]/(r[col,col]-v[0,k-1])
    # print(calc_vari_contri(r))
    return f
  1. 调用以上函数计算方差贡献率和方差比:
#计算第零步增广矩阵
r=get_original_matrix()
# print(r)
#计算方差贡献值
v=get_vari_contri(r)
print(v)
#计算方差比
# print(data.shape[0])
f=select_factor(r,v,4,0)
print(f)
#######输出##########
22.79852020138227

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 R Studio 中,如果你使用的是 `lm()` 函数进行回归分析,那么通常会使用 `summary()` 函数来查看回归模型的结果。在 `summary()` 的输出中,会有一个 `VIF` 列(即方差膨胀因子)。如果某个变量的 `VIF` 值大于 10,就可以认为存在多重共线性的风险。 所以,如果你想检查你的回归模型中是否存在多重共线性,可以查看 `summary()` 输出中的 `VIF` 值。如果有任何一个变量的 `VIF` 值大于 10,就可以认为存在多重共线性。 ### 回答2: 在RStudio中进行多重共线性分析后,通常会得到一些统计数据以判断是否存在多重共线性问题。其中,一个常用的指标是方差膨胀因子(VIF,Variance Inflation Factor)。VIF是通过计算自变量之间的相关程度,来评估其对多重共线性的贡献程度。 在多重共线性分析的结果中,一般会列出各个自变量的VIF值。VIF值越高,表示对应的自变量与其他自变量之间存在较强的相关性,从而可能存在多重共线性问题。一般而言,当自变量的VIF值大于10或20时,可以认为存在较为严重的多重共线性。 值得注意的是,多重共线性只是用指标来衡量,在分析实际问题时,需要结合背景知识和具体情况来判断是否存在真正的多重共线性。此外,还有其他指标和方法可以用于检测多重共线性,如条件数(Condition Number)、特征值(Eigenvalue)等,也可以在分析结果中找到这些指标的数值。 总之,在RStudio的多重共线性分析结果中,VIF值是用于判断存在多重共线性的一个重要指标。通过观察各个自变量的VIF值,可以初步判定是否存在多重共线性问题。 ### 回答3: 在RStudio中进行多重共线性检验后,可以通过查看结果中的VIF(方差膨胀因子)来判断数据是否存在多重共线性。 VIF是判断多重共线性的指标之一,它衡量了某个自变量与其他自变量之间的相关性。VIF的计算公式为:VIF = 1 / (1 - R^2),其中R^2是该自变量与其他自变量之间的线性相关性系数的平方。 通常而言,当某个自变量的VIF值超过10或者20时,就可以认为该变量存在较严重的多重共线性。这是因为,VIF值越大,表示自变量与其他自变量之间的相关性越高,进而说明了用户输入的自变量之间存在较强的共线性。 因此,在RStudio的多重共线性结果中,我们可以通过查看各个自变量的VIF值来判断是否存在多重共线性。若某些自变量的VIF值超过了10或者20,就可以认为这些自变量之间存在较严重的多重共线性问题。 需要注意的是,多重共线性可能会导致模型的稳定性降低、系数估计不准确以及模型结果的不可靠性,因此在建立模型时需要警惕多重共线性的存在,并采取相应的解决方法,如删除某些相关性较高的自变量、使用正则化技术等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值