精华内容
下载资源
问答
  • Belsley、Kuh 和 Welsch [1] 提出了一种使用以下条件诊断退化共线性的策略: 1) 用大条件指数判断的奇异值,并且与2) 两个或多个协变量的大方差分解比例 大条件索引的数量标识了设计矩阵的列之间的接近相关性的数量...
  • sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) ...amp;utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share     多元共线性   在一个回归...

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程)

    https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

     

     

    多元共线性

     

    在一个回归方程中,假如两个或两个以上解释变量彼此高度相关,那么回归分析的结果将有可能无法分清每一个变量与因变量之间的真实关系。例如我们要知道吸毒对SAT考试分数的影响,我们会询问对象是否吸收过可卡因或海洛因,并用软件计算它们之间的系数。

    虽然求出了海洛因和可卡因额回归系数,但两者相关性发生重叠,使R平方变大,依然无法揭开真实的情况。
    因为吸食海洛因的人常常吸食可卡因,单独吸食一种毒品人很少。

    当两个变量高度相关时,我们通常在回归方程中只采用其中一个,或创造一个新的综合变量,如吸食可卡因或海洛因。

    又例如当研究员想要控制学生的整体经济背景时,他们会将父母双方的受教育程度都纳入方程式中。

    如果单独把父亲或母亲的教育程度分离考虑,会引起混淆,分析变得模糊,因为丈夫和妻子的教育程度有很大相关性。

     
    多元共线性带来问题:
    (1)自变量不显著
    (2)参数估计值的正负号产生影响
     

    共线性统计量:
    (1)容忍度tolerance
             tolerance<0.1 表示存在严重多重共线
    (2)方差扩大因子 variance inflation factor (VIF)
             VIF>10表示存在严重多重共线性

     

     自变量为x1和x2时

     

    spss共线性诊断

    spss导入excel数据

     

    条件指数第三个为30.866,大于10,说明共线性很高

    F检验是对整个模型而已的,看是不是自变量系数不全为0,这里F检验值23,对应P概率=0,P<0.05,H1成立,说明显著性非常高

    t检验则是分别针对某个自变量的,看每个自变量是否有显著预测效力。这里t检验对应概率大于0.05,为0.23和0.48,说明显著性很差

     

     x1 的t分数p值0.232,P值>0.05,不否定H0假设,显著性不高

      x2 的t分数p值0.487,P值>0.05,不否定H0假设,显著性不高

     

     

     

     

    Python脚本分析

    condition num=670 ,未能检测出共线性

    Python目前支持2D和3D绘图,可解决两元回归绘图。但目前没发现4D绘图,即解决三元回归及其以上绘图

     

    # -*- coding: utf-8 -*-
    """
    Created on Fri Feb 23 16:54:54 2018
    
    @author: Administrator
    """
    
    # Import standard packages
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    import seaborn as sns
    from sklearn import datasets, linear_model
    from matplotlib.font_manager import FontProperties 
    font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)  
    # additional packages
    import sys
    import os
    sys.path.append(os.path.join('..', '..', 'Utilities'))
    
    try:
    # Import formatting commands if directory "Utilities" is available
        from ISP_mystyle import showData 
        
    except ImportError:
    # Ensure correct performance otherwise
        def showData(*options):
            plt.show()
            return
    
    # additional packages ...
    # ... for the 3d plot ...
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib import cm
    
    # ... and for the statistic
    from statsmodels.formula.api import ols
    #生成组合
    from itertools import combinations
    
    x1=[5,2,4,2.5,3,3.5,2.5,3]
    x2=[1.5,2,1.5,2.5,3.3,2.3,4.2,2.5]
    y=[96,90,95,92,95,94,94,94]
    
    
    #自变量列表
    list_x=[x1,x2]
    
    #绘制多元回归三维图
    def Draw_multilinear():
        
        df = pd.DataFrame({'x1':x1,'x2':x2,'y':y})
        # --- >>> START stats <<< ---
        # Fit the model
        model = ols("y~x1+x2", df).fit()
        param_intercept=model.params[0]
        param_x1=model.params[1]
        param_x2=model.params[2]
        rSquared_adj=model.rsquared_adj
        
        #generate data,产生矩阵然后把数值附上去
        x = np.linspace(-5,5,101)
        (X,Y) = np.meshgrid(x,x)
        
        # To get reproducable values, I provide a seed value
        np.random.seed(987654321)   
        Z = param_intercept + param_x1*X+param_x2*Y+np.random.randn(np.shape(X)[0], np.shape(X)[1])
    
        # 绘图
        #Set the color
        myCmap = cm.GnBu_r
        # If you want a colormap from seaborn use:
        #from matplotlib.colors import ListedColormap
        #myCmap = ListedColormap(sns.color_palette("Blues", 20))
        
        # Plot the figure
        fig = plt.figure("multi")
        ax = fig.gca(projection='3d')
        surf = ax.plot_surface(X,Y,Z, cmap=myCmap, rstride=2, cstride=2, 
            linewidth=0, antialiased=False)
        ax.view_init(20,-120)
        ax.set_xlabel('X')
        ax.set_ylabel('Y')
        ax.set_zlabel('Z')
        ax.set_title("multilinear with adj_Rsquare %f"%(rSquared_adj))
        fig.colorbar(surf, shrink=0.6)
        
        outFile = '3dSurface.png'
        showData(outFile)
    
        
    #检查独立变量之间共线性关系
    def Two_dependentVariables_compare(x1,x2):
        # Convert the data into a Pandas DataFrame
        df = pd.DataFrame({'x':x1, 'y':x2})
        # Fit the model
        model = ols("y~x", df).fit()
        rSquared_adj=model.rsquared_adj
        print("rSquared_adj",rSquared_adj)
        if rSquared_adj>=0.8:
            print("high relation")
            return True
        elif 0.6<=rSquared_adj<0.8:
             print("middle relation")
             return False
        elif rSquared_adj<0.6:
             print("low relation")
             return False
    
    #比较所有参数,观察是否存在多重共线
    def All_dependentVariables_compare(list_x):  
        list_status=[]
        list_combine=list(combinations(list_x, 2))
        for i in list_combine:
            x1=i[0]
            x2=i[1]
            status=Two_dependentVariables_compare(x1,x2)
            list_status.append(status)
        if True in list_status:
            print("there is multicorrelation exist in dependent variables")
            return True
        else:
            return False
        
            
    #回归方程,支持哑铃变量
    def regressionModel(x1,x2,y):
        '''Multilinear regression model, calculating fit, P-values, confidence intervals etc.'''
        # Convert the data into a Pandas DataFrame
        df = pd.DataFrame({'x1':x1,'x2':x2,'y':y})
        
        # --- >>> START stats <<< ---
        # Fit the model
        model = ols("y~x1+x2", df).fit()
        # Print the summary
        print((model.summary()))
        return model._results.params  # should be array([-4.99754526,  3.00250049, -0.50514907])
    
        
    # Function to show the resutls of linear fit model
    def Draw_linear_line(X_parameters,Y_parameters,figname,x1Name,x2Name):
        #figname表示图表名字,用于生成独立图表fig1 = plt.figure('fig1'),fig2 = plt.figure('fig2')
        plt.figure(figname)
        #获取调整R方参数    
        df = pd.DataFrame({'x':X_parameters, 'y':Y_parameters})
        # Fit the model
        model = ols("y~x", df).fit()
        rSquared_adj=model.rsquared_adj 
        
        #处理X_parameter1数据
        X_parameter1 = []
        for i in X_parameters:
            X_parameter1.append([i])
        
        # Create linear regression object
        regr = linear_model.LinearRegression()
        regr.fit(X_parameter1, Y_parameters)
        plt.scatter(X_parameter1,Y_parameters,color='blue',label="real value")
        plt.plot(X_parameter1,regr.predict(X_parameter1),color='red',linewidth=4,label="prediction line")
        plt.title("linear regression %s and %s with adj_rSquare:%f"%(x1Name,x2Name,rSquared_adj))
        plt.xlabel('x', fontproperties=font_set)  
        plt.ylabel('y', fontproperties=font_set)  
        plt.xticks(())
        plt.yticks(())
        plt.legend()
        plt.show()      
        
    
    #绘制多元回归三维图
    Draw_multilinear()  
    #比较所有参数,观察是否存在多重共线
    All_dependentVariables_compare(list_x)              
    Draw_linear_line(x1,x2,"fig1","x1","x2")
    Draw_linear_line(x1,y,"fig4","x1","y")
    Draw_linear_line(x2,y,"fig5","x2","y")
    regressionModel(x1,x2,y)
    

      

     

     

     

    当自变量为x1,x2,x3三个时

     

    spss分析

     

     

    python脚本

    程序运行后,cond.no数值过高,提醒有多重共线可能

     

    可视化分析

    x1和y成线性关系

     

    x2和y成线性关系

    x3和y成非线性关系,所以x3变量应该剔除,和y没啥关系

     

     

    x1和x2成线性关系,这引起了多重共线性问题

     

    x1和x3成非线性关系

    x2和x3成非线性关系

     

     

     

    multiLinearIsBetterThanSimpleLinearRegression1.py

    从excel调取数据,适用于数据量百万级分析

    # -*- coding: utf-8 -*-
    """
    Created on Fri Feb 23 16:54:54 2018
    
    @author: Toby QQ:231469242
    多元回归的多重共线性检测,数据可视化
    """
    
    # Import standard packages
    import matplotlib.pyplot as plt
    import pandas as pd
    from sklearn import linear_model
    from matplotlib.font_manager import FontProperties 
    font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)  
    # ... and for the statistic
    from statsmodels.formula.api import ols
    #生成组合
    from itertools import combinations
    
    
    df=pd.read_excel("旅行公里-投递数量-行驶时间.xlsx")  
    array_values=df.values
    x1=[i[0] for i in array_values]
    x2=[i[1] for i in array_values]
    x3=[i[2] for i in array_values]
    y=[i[3] for i in array_values]
    sample=len(x1)
    #自变量列表
    list_x=[x1,x2]
    
    
    #检查独立变量之间共线性关系,如果两个变量有共线性返回TRUE,反之返回FALSE
    def Two_dependentVariables_compare(x1,x2):
        # Convert the data into a Pandas DataFrame
        df = pd.DataFrame({'x':x1, 'y':x2})
        # Fit the model
        model = ols("y~x", df).fit()
        rSquared_adj=model.rsquared_adj
        print("rSquared_adj",rSquared_adj)
        if rSquared_adj>=0.8:
            print("high relation")
            return True
        elif 0.6<=rSquared_adj<0.8:
             print("middle relation")
             return False
        elif rSquared_adj<0.6:
             print("low relation")
             return False
    
    #比较所有参数,观察是否存在多重共线
    def All_dependentVariables_compare(list_x):  
        list_status=[]
        #对变量列表的多个自变量进行组合,2个为一组
        list_combine=list(combinations(list_x, 2))
        for i in list_combine:
            x1=i[0]
            x2=i[1]
            status=Two_dependentVariables_compare(x1,x2)
            list_status.append(status)
        if True in list_status:
            print("there is multicorrelation exist in dependent variables")
            return True
        else:
            return False
        
            
    #回归方程,支持哑铃变量,这个函数是有三个自变量,自变量个数可以自己改
    def regressionModel(x1,x2,x3,y):
        '''Multilinear regression model, calculating fit, P-values, confidence intervals etc.'''
         
        # Convert the data into a Pandas DataFrame
        df = pd.DataFrame({'x1':x1, 'x2':x2,'x3':x3,'y':y})
         
        # --- >>> START stats <<< ---
        # Fit the model
        model = ols("y~x1+x2+x3", df).fit()
        # Print the summary
        print((model.summary()))
        # --- >>> STOP stats <<< ---
        return model._results.params  # should be array([-4.99754526,  3.00250049, -0.50514907])
    
        
    # Function to show the resutls of linear fit model
    def Draw_linear_line(X_parameters,Y_parameters,figname,x1Name,x2Name):
        #figname表示图表名字,用于生成独立图表fig1 = plt.figure('fig1'),fig2 = plt.figure('fig2')
        plt.figure(figname)
        #获取调整R方参数    
        df = pd.DataFrame({'x':X_parameters, 'y':Y_parameters})
        # Fit the model
        model = ols("y~x", df).fit()
        rSquared_adj=model.rsquared_adj 
        
        #处理X_parameter1数据
        X_parameter1 = []
        for i in X_parameters:
            X_parameter1.append([i])
        
        # Create linear regression object
        regr = linear_model.LinearRegression()
        regr.fit(X_parameter1, Y_parameters)
        plt.scatter(X_parameter1,Y_parameters,color='blue',label="real value")
        plt.plot(X_parameter1,regr.predict(X_parameter1),color='red',linewidth=4,label="prediction line")
        plt.title("linear regression %s and %s with adj_rSquare:%f"%(x1Name,x2Name,rSquared_adj))
        plt.xlabel('x', fontproperties=font_set)  
        plt.ylabel('y', fontproperties=font_set)  
        plt.xticks(())
        plt.yticks(())
        plt.legend()
        plt.show()      
        
    
    
    #比较所有参数,观察是否存在多重共线
    All_dependentVariables_compare(list_x)  
    #两个变量散点图可视化            
    Draw_linear_line(x1,x2,"fig1","x1","x2")
    Draw_linear_line(x1,x3,"fig2","x1","x3")
    Draw_linear_line(x2,x3,"fig3","x2","x3")
    Draw_linear_line(x1,y,"fig4","x1","y")
    Draw_linear_line(x2,y,"fig5","x2","y")
    Draw_linear_line(x3,y,"fig6","x3","y")
    #回归分析
    regressionModel(x1,x2,x3,y)
    

     

     

    多元回归共线性详细解释

    多元回归是一元回归升级版,含有多个变量

     

    overffiting:过多独立变量不一定会让模型更好,事实上可能更糟

    multicollinearity:变量之间互相关联,造成多重共线

     

    理想模型是所有独立变量和依赖变量都相关,但独立变量之间不能相互关联,独立变量必须独立

     

    多元回归有很多事前工作做,包括发行overffitng和multilinear

     

     

    独立变量之间有潜在的多重共线可能

     

    如果有四个变量,就有十种关系考虑

     

    总结

     

     

     

     

     

    x1和x2有多重共线性

     

     

     

     

    python风控评分卡建模和风控常识(博客主亲自录制视频教程)

     

     

    展开全文
  • 一、多元线性回归1.多元线性回归的基本表达式在多元线性回归中会有多个解释变量:预测解释变量的估计方程如下:注:额外的假设条件①解释变量之间不能存在太强的线性相关关系(一般ρ<0.7)②其他条件与一元线性...

    一、多元线性回归

    1.多元线性回归的基本表达式

    • 在多元线性回归中会有多个解释变量:

    da30fdf2a33cf9d999f1d83740735de9.png

    • 预测解释变量的估计方程如下:

    9201b3fc27f624f21f0482a6256a2655.png

    注:额外的假设条件

    ①解释变量之间不能存在太强的线性相关关系(一般ρ<0.7)

    ②其他条件与一元线性回归类似。

    2.回归方程的模型拟合度

    在进行回归模型之前,我们可以计算总的波动误差如下:

    2e9890a452115a40dfb27141bb829840.png

        在运用回归模型后,总误差可以分解为以下两种:

        1)不能解释变量误差(误差项的平方)

    d6aca0386fc0ae86bd54accb2fdb99ce.png

        2)被回归方程可以解释的误差

    e1f55c821093925af1e2a4a839c668cf.png

    14cc2e379a75ae7a5a5b08cad54937ee.png

    c9cbb238d0465b97f9d1c8bec8d8b0ff.png

    根据以上解释我们可以整理出以下方差分析表:

    df自由度

    SS

    MSS(方差)

    Explained可以解释的误差

    k

    ESS

    ESS/k

    Residual 误差项

    n-k-1

    RSS

    RSS/(n-k-1)

    Total 总误差

    n-1

    TSS

           3)拟合判定系数R方

    0f7634ba2a7e6e20b3c4fa0b06b9a92a.png

    注:一元线性回归的R方比较特殊,为相关系数的平方:

    43a90525a45a6c93faba4e8ba3f16e8e.png

    通常情况下R方越大,说明模型拟合的解释力度越好,但有时通过不断增加解释变量可以相应提高R方,这时候拟合效果并不一定是最好,所以提出以下修正R方来进行判断:

    9a6f2dfa94c1e2c5a336ce033e1ed566.png

    3.回归方程的推论

    ①置信区间(同一元线性回归类似)

    c9196bfa7afcaf5b6e56119a012e24d7.png

    ②假设检验(同一元线性回归类似)

    c589bd2ceedcd1bbfafd9c166122c4cc.png

    ③联合假设检验

    通常F检验被用于检测多元线性回归的解释变量斜率是否同时等于0:

    71b1b5e860e194399b93c1c9174dd147.png

    判断准则:如果F(T检验计算值)>F(关键值),则拒绝原假设H0.

    Python案例分析:

    #导入cv模块import numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltimport pandas as pddata=pd.read_excel('D:/欧晨的金学智库/线性回归案例.xlsx',header=0,index_col=0)data.head()

    b596e6b39ec86692a613cbe9949fa609.png

    #多元线性回归import statsmodels.api as sm model3 = sm.OLS(data['weight'],sm.add_constant(data[['age','height']]))result = model3.fit()result.summary()  print(result.summary())

    6f780312fb03758dc8a7fa971dacd07c.png

    分析:经过调整的R方=0.639,拟合系数一般,并不是特别好。

    F统计量=26.67(检验解释变量系数是否全为0?),P-value=4.05*10-7,非常小,拒绝原假设;

    常数项估计-140.762,P值很小,说明截距项显著,不为0;

    age项估计-0.0485,P值较大>0.05,说明age项不显著,可以尝试剔除该解释变量;

    height项1.1973,P值很小,说明height项显著,不为0。

    二、模型诊断

    1.自变量选择偏差的权衡

    (1)丢失重要变量

    • 剩余变量吸收了丢失的重要变量的信息,即用剩余变量进行了过度拟合;

    • 过于高估残差项(包含真实残差项的信息、忽略重要变量的信息)

    (2)加入无关变量

    • 变量系数的估计偏差(大样本,无关变量会收敛于0)

    • 增加了模型参数估计的不确定性

    • 增加了R方的值,但是使得调整的R方减小

    (3)两种合理估计线性回归系数的方法

    ①一般情况模型变量的选择方法

    a.将所有变量加入进行回归;

    b.移除拟合效果最差的一个变量(尤其是不显著的变量);

    c.移除后继续采用线性回归模型进行拟合,再次移除不显著的变量;

    d.重复以上步骤,直至所有变量的拟合结果都显著;

    注:通常选择显著性α在1%~0.1%(相应t值至少为2.57或3.29)

    Python案例分析:在上述案例中,我们得到age项不显著,可以剔除该解释变量,只用height进行线性回归:

    #载入OLS回归库import statsmodels.api as sm model1 = sm.OLS(data['weight'], sm.add_constant(data['height']))result = model1.fit()result.summary()  print(result.summary())

    1269323063f18aa9a9de1ced0f704dff.png

    分析:经过调整的R方=0.652>0.639,说明剔除age变量后,拟合效果更好。剩余的截距项和身高的P值均很小,说明显著不为0,所以应当保留。 

    ②K折交叉检验

        a.确定模型数量(有n个解释变量——每个变量选择有或无,通常有2^n个模型)

        b.将数据分成相等数量的k个集合,其中k-1个集合作为训练集拟合回归方程,剩下的1个集合作为验证集;重复进行交叉拟合验证(总计有k次)。

        c.每个模型都采用b的方式进行验证。

        d.计算每个模型的总的残差项(验证k次)的和,选择残差项和或其均值最小的一组模型最为最优模型。

    Python案例分析:依旧使用以上案例,有2个解释变量,所以应当有2^2=4个模型,我们排除解释变量均为0的情况,来做3个模型的K折交叉检验:

    y=data.weightX1=data[['age','height']]from sklearn.linear_model import LinearRegression #载入机器学习中线性回归包lm = LinearRegression()from sklearn.model_selection import cross_val_score #载入机器学习中交叉检验包scores1 = cross_val_score(lm, X1, y, cv=10)  #cv=10,数据分成10等均匀份print (scores1)

    8f75188bc844b68e79a07b0efc5bca87.png

    分析:上面的scores都是负数,为什么均方误差会出现负数的情况呢?因为这里的mean_squared_error是一种损失函数,优化的目标的使其最小化,而分类准确率是一种奖励函数,优化的目标是使其最大化,因而选择只用height做变量。

    print('用age,height做自变量:',np.sqrt(-scores1.mean()))np.sqrt(-scores1.mean())X2=data[['age']]scores2 = cross_val_score(lm, X2, y, cv=10)print('只用age做自变量:',np.sqrt(-scores2.mean()))X3=data[['height']]scores3 = cross_val_score(lm, X3, y, cv=10)print('只用height做自变量:',np.sqrt(-scores3.mean()))lm.fit(X3,y)

    4df3e212c4acd576ecc8aef923f48e9d.png

    print('intercept_:%.3f' % lm.intercept_)print('coef_:%.3f' % lm.coef_)

    2fd67a3f0bacd73c45134650403d0a9c.png

    2.残差的异方差性

        如果残差项的方差恒定不变(即为常数),则通常认定为同方差性,反之如果方差一直在变动并未恒定则认定为有异方差性。

    898508b656de2f3db1acf3a02c7e68f0.png

    注:如果存在异方差性进行线性回归,则回归系数的假设检验以及置信区间的估计通常是有偏差的。

    采用怀特检验法来验证异方差性:

    例如检验有2个自变量的线性回归方程:

    b6032993d112a23bd85a15111755b5f9.png

    ①采用OLS最小二乘法估计模型的残差

    dd95e60cdda5562b1643c87e2bc47c40.png 

    ②将自变量和自变量之间的组合与残差的平方建立回归模型检验

    49ab3d36b192ba1a681c1ab25fe0cf2b.png

    如果数据满足同方差性,则残差项的平方无法被任何自变量变量解释,即 928072e41c9bd3c293eb63c19c918ac3.png 注:残差项的方程的检验统计量的解释力度记为nR2(即第②步中计算),其检验分布为卡方分布(自由度为——k(k+3)/2)

    Python案例分析:依旧以weight~age+height为例

    import statsmodels.api as sm model3 = sm.OLS(data['weight'],sm.add_constant(data[['age','height']]))result3 = model3.fit()sm.stats.diagnostic.het_white(result3.resid, exog = result3.model.exog)

    1503b9e9b92d7ed1b10c73246aee11af.png

    分析:

    第一个为:LM统计量值

    第二个为:响应的p值,0.53远大于显著性水平0.05,因此接受原假设,即残差方差是一个常数

    第三个为:F统计量值,用来检验残差平方项与自变量之间是否独立,如果独立则表明残差方差齐性

    第四个为:F统计量对应的p值,也是远大于0.05的,因此进一步验证了残差方差的齐性。

    3.多重共线性

    ①完美多重共线性

        自变量之间存在相关系数=1的情况,即一个自变量可以被另一个自变量完全解释,完全替代。

    ② 一般的多重共线性
    • 一个自变量或多个自变量之间可以大部分相互解释,存在较高的相关性
    • 当数据存在多重共线性时,通常发现系数之间有较强的显著关系,删除t统计量较小的(如t<1.96)

    4.绘制残差图与异常值

    残差图即自变量与残差之间的散点图,异常值即偏离正常中心值较大的奇异点。

    我们以上节一元线性回归的案例的身高与体重的回归结果残差图为例:

    116bb0213eab52895bbb2d3ffca5d0f7.png

    很明显上图中对应x在170的时候存在异常值。

    异常值的判断:库克距离(Cook’sdistance)

    9c61a9072cded1929593491175d9487b.png

    9a9f3288fbef1803424437fa1cbe4a09.png

    Python案例分析:

    #异常值的检验#使用Cook距离描绘这个模型的影响图:import statsmodels.api as sm model3 = sm.OLS(data['weight'],sm.add_constant(data[['age','height']]))result3 = model3.fit()fig, ax = plt.subplots(figsize=(19.2, 14.4))fig = sm.graphics.influence_plot(result3, ax=ax, criterion="cooks")plt.grid()

    8fa5f42ebb6ff33eb45b611fc8afe0af.png

    分析:由上图可以得到,第7个数据是偏离较远的,气泡很大。

    真实数据如下:

    258661b1dbe7ea4b14990dc043bf6ace.png

    展开全文
  • 使用R语言对数据分析主成分分析实现多元线性回归。包括源数据和代码。
  • 数学建模-多元线性回归(Stata实现)

    万次阅读 多人点赞 2019-09-24 17:31:53
    回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是, 通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y...

    回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是, 通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。

    回归分析的使命:

    使命1回归分析要去识别并判断:哪些X

    展开全文
  • 我们来看其中共线性诊断的部分,如下所示,如果有条件指数>10,则表明有线性。现在最大的是9.659,仍然处于可以接受的范围。 Python脚本 # -*- coding: utf-8 -*- """ Created on Thu Feb 22 17:12:03 ...

     

     

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章

    sklearn实战-乳腺癌细胞数据挖掘

     https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

     

     

    在一个回归方程中,假如两个或两个以上解释变量彼此高度相关,那么回归分析的结果将有可能无法分清每一个变量与因变量之间的真实关系。例如我们要知道吸毒对SAT考试分数的影响,我们会询问对象是否吸收过可卡因或海洛因,并用软件计算它们之间的系数。

    虽然求出了海洛因和可卡因额回归系数,但两者相关性发生重叠,使R平方变大,依然无法揭开真实的情况。
    因为吸食海洛因的人常常吸食可卡因,单独吸食一种毒品人很少。

    当两个变量高度相关时,我们通常在回归方程中只采用其中一个,或创造一个新的综合变量,如吸食可卡因或海洛因。

    又例如当研究员想要控制学生的整体经济背景时,他们会将父母双方的受教育程度都纳入方程式中。

    如果单独把父亲或母亲的教育程度分离考虑,会引起混淆,分析变得模糊,因为丈夫和妻子的教育程度有很大相关性。

     
    多元共线性带来问题:
    (1)自变量不显著
    (2)参数估计值的正负号产生影响
     

    共线性统计量:
    (1)容忍度tolerance
             tolerance<0.1 表示存在严重多重共线
    (2)方差扩大因子 variance inflation factor (VIF)
             VIF>10表示存在严重多重共线性


     http://blog.csdn.net/baimafujinji/article/details/49799409

    回归分析是数据挖掘中最基本的方法,其中基于普通最小二乘法的多元线性回归要求模型中的特征数据不能存在有多重共线性,否则模型的可信度将大打折扣。但是就是技术而言,如何确定模型中的各各特征之间是否有多重共线性呢?

    先来看一组数据

     

    然后单击菜单栏上的【分析】->【回归】->【线性...】,则进入如下图所示的线性回归对话框。当选择好因变量和自变量之后,选择右上角的【Statistics...】,然后在弹出的新对话框里选定【共线性诊断】

     

    红色框所标出的条件指数高达23.973(>10),可见共线性是确凿无疑的了!

     

     python代码

    # -*- coding: utf-8 -*-
    """
    Created on Thu Feb 22 17:12:03 2018
    
    @author: Administrator
    """
    import pandas as pd
    from statsmodels.formula.api import ols
    
    df=pd.read_excel("工农业产值与货运量-存在共线性.xlsx")  
    
    #多元回归函数
    def MulitiLinear_regressionModel(df):
        '''Multilinear regression model, calculating fit, P-values, confidence intervals etc.'''
        # --- >>> START stats <<< ---
        # Fit the model
        model = ols("y ~ x1 + x2", df).fit()
        # Print the summary
        print((model.summary()))
        # --- >>> STOP stats <<< ---
        return model._results.params  # should be array([-4.99754526,  3.00250049, -0.50514907])
    
    MulitiLinear_regressionModel(df)
    

     

     

    condition num=192

    R **2  为0.992,和spss的结果一致

     

    x1和x2, x1和y,x2和y的相关系数对比

    # -*- coding: utf-8 -*-
    """
    Created on Thu Feb 22 11:35:50 2018
    
    @author: Administrator
    """
    import pandas as pd
    import scipy.stats as stats
    
    
    df=pd.read_excel("工农业产值与货运量-存在共线性.xlsx")  
    array_values=df.values
    x1=[i[0] for i in array_values]
    x2=[i[1] for i in array_values]
    y=[i[2] for i in array_values]
    sample=len(x1)
    
    
    print("use Pearson,parametric tests x1 and x2")
    r,p=stats.pearsonr(x1,x2)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")
    print("-"*100)
        
    print("use Pearson,parametric tests x1 and y")
    r,p=stats.pearsonr(x1,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")    
    print("-"*100)
    
        
    print("use Pearson,parametric tests x2 and y")
    r,p=stats.pearsonr(x2,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")       
    print("-"*100)    
      
    

    程序结果:

    x1和x2的R平方0.83,相关性强  -------暗示变量多重共线性问题

    x1和y的R平方0.98,相关性强

    x2和y的R平方0.897,相关性强

      

     

     

     

     

     

     

     

     

     

     

    例子2

    我们能否用这组数据来建立多元线性回归模型呢?同样再来绘制散点图如下,自变量之间似乎还是有点共线性,但是又不像上面例子中的那么明显,现在该怎么办?

    所以我们还是建议采用一种更加能够便于量化的方法来描述问题的严重性,而不是仅仅通过肉眼观察来做感性的决定。下面我演示在SPSS 22中检验多重共线性的方法。首先导入数据,如下所示

     

    然后单击菜单栏上的【分析】->【回归】->【线性...】,则进入如下图所示的线性回归对话框。当选择好因变量和自变量之后,选择右上角的【Statistics...】,然后在弹出的新对话框里选定【共线性诊断】

    回到上图左边的对话框之后,选择确定,SPSS给出了线性回归分析的结果。我们来看其中共线性诊断的部分,如下所示,如果有条件指数>10,则表明有共线性。现在最大的是9.659,仍然处于可以接受的范围。

    Python脚本

    # -*- coding: utf-8 -*-
    """
    Created on Thu Feb 22 17:12:03 2018
    
    @author: Administrator
    """
    import pandas as pd
    from statsmodels.formula.api import ols
    
    df=pd.read_excel("土壤沉淀物吸收能力采样数据-不存在共线性.xlsx")  
    
    #多元回归函数
    def MulitiLinear_regressionModel(df):
        '''Multilinear regression model, calculating fit, P-values, confidence intervals etc.'''
        # --- >>> START stats <<< ---
        # Fit the model
        model = ols("y ~ x1 + x2", df).fit()
        # Print the summary
        print((model.summary()))
        # --- >>> STOP stats <<< ---
        return model._results.params  # should be array([-4.99754526,  3.00250049, -0.50514907])
    
    MulitiLinear_regressionModel(df)

     

      

    condition num=566

    R平方=0.948,和spss一样准确

     

    x1和x2, x1和y,x2和y的相关系数对比

    # -*- coding: utf-8 -*-
    """
    Created on Thu Feb 22 11:35:50 2018
    
    @author: Administrator
    """
    import pandas as pd
    import scipy.stats as stats
    
    
    df=pd.read_excel("土壤沉淀物吸收能力采样数据-不存在共线性.xlsx")  
    array_values=df.values
    x1=[i[0] for i in array_values]
    x2=[i[1] for i in array_values]
    y=[i[2] for i in array_values]
    sample=len(x1)
    
    
    print("use Pearson,parametric tests x1 and x2")
    r,p=stats.pearsonr(x1,x2)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")
    print("-"*100)
        
    print("use Pearson,parametric tests x1 and y")
    r,p=stats.pearsonr(x1,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")    
    print("-"*100)
    
        
    print("use Pearson,parametric tests x2 and y")
    r,p=stats.pearsonr(x2,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")       
    print("-"*100)    
    

    程序结果:

    x1和x2的R平方0.63,相关性弱

    x1和y的R平方0.825,相关性强

    x2和y的R平方0.874,相关性强

     

     

     

    案例

    # -*- coding: utf-8 -*-
    """
    Created on Thu Feb 22 11:35:50 2018
    
    @author: Administrator
    """
    import pandas as pd
    import scipy.stats as stats
    
    
    df=pd.read_excel("两元回归测试.xlsx")  
    array_values=df.values
    x1=[i[0] for i in array_values]
    x2=[i[1] for i in array_values]
    y=[i[2] for i in array_values]
    sample=len(x1)
    
    if sample<500:
        print("the sample size are:",sample)
        print("The p-values are not entirely reliable but are probably reasonable for datasets larger than 500 or so.")
    print("use Pearson,parametric tests x1 and x2")
    r,p=stats.pearsonr(x1,x2)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")
    print("-"*100)
        
    print("use Pearson,parametric tests x1 and y")
    r,p=stats.pearsonr(x1,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")    
    print("-"*100)
    
        
    print("use Pearson,parametric tests x2 and y")
    r,p=stats.pearsonr(x2,y)
    print("pearson r**2:",r**2)
    print("pearson p:",p)
    if sample<30:
        print("when sample <30,pearson has no mean")       
    print("-"*100)    
        
       
        
    

      

     

     

     

    展开全文
  • 多元线性回归模型

    万次阅读 多人点赞 2019-07-02 19:22:12
    多元线性回归模型通常用来研究一个应变量依赖多个自变量的变化关系,如果二者的以来关系可以用线性形式来刻画,则可以建立多元线性模型来进行分析。 1.模型简介 1.1模型的结构 多元线性回归模型通常用来描述变脸y和x...
  • 多元线性回归模型检验-续上篇

    千次阅读 2020-04-04 20:42:46
    其实上一篇讨论的多元线性回归还不是很全面,而且训练和测试集都没有分,在这里继续讨论多元线性回归模型检验的相关问题。 多元线性回归的输出变量是连续变量,输入变量中如果包含离散变量需要做哑变量或One-hot编码...
  • 多元回归自变量存在共线性

    千次阅读 2020-10-09 20:32:37
    多重线性回归要求各个自变量之间相互独立,不存在多重共线性。所谓多重共线性,是指自变量之间存在某种相关或者高度相关的关系,其中某个自变量可以被其他自变量组成的线性组合来解释。 医学研究中常见的生理资料,...
  • 本人为SAS新手, 照书做了一个某金属材料的化学成份与机械性能的多元线性回归模型, 发现有严重的多重线性, 但是读不懂共线性诊断结果的含义, 现我把程序的输出结果放在名为20110904的文档中, 请高人解答。...
  • 多元线性回归的假设 Y的平均值能够准确地被由X组成的线性函数建模出来 解释变量和随机扰动项不存在线性关系 解释变量之间不存在线性关系(或强相关) 假设随机误差项 ε 是一个均值为0的正态分布 假设随机误差...
  • 多重共线性诊断与R语言实践

    千次阅读 2020-03-23 23:25:05
    文章目录变量的多重共线性诊断特征根分析法条件数法方差扩大因子法直观判定法举个例子(R语言) 变量的多重共线性诊断 多元线性回归模型的一个基本假设,就是要求自变量矩阵X列满秩,即秩rank(X)=p,也就是要求X的列...
  • 利用MATLAB进行多元线性回归

    千次阅读 2021-04-21 02:46:03
    利用MATLAB进行多元线性回归 2.线性回归 b=regress(y,X) [b,bint,r,rint,s]=regress(y,X,alpha) 输入: y~因变量(列向量), X~1与自变量组成的矩阵, Alpha~显著性水平(缺省时设定为0.05) s: 3个统计统计 量:决定...
  • 针对徐州雾霾情况,通过搜集徐州市2017年365天的日空气质量指数AQI数据,其9个...通过拟合优度检验、显著性检验、多重共线性诊断和异常值残差诊断后,绘制出拟合对比图,验证了所得四元线性回归模型的准确性和实用性。
  • 转载, 太经典了,学习了 ... 第一节 多元线性回归分析的概述  回归分析中所涉及的变量常分为自变量与因变量。当因变量是非时间的连续性变量(自变量可包括连续性的和离散性... 多元回归分析的任务就是用数理统计方...
  • Python实现多元线性回归

    万次阅读 多人点赞 2018-04-12 21:39:25
    Python实现多元线性回归 线性回归介绍 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的...
  • 多元线性回归,主要是研究一个因变量与多个自变量之间的相关关系,跟一元回归原理差不多,区别在于影响因素(自变量)更多些而已,例如:一元线性回归方程 为:毫无疑问,多元线性回归方程应该为:上图中的 x1, x2, xp...
  • 线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量)。例如,餐厅根据每天的营业数据(包括菜谱价格、就餐人数、预定人数、特价菜折扣等)预测就餐...
  • 多元线性回归多元线性回归模型实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示。为了方便计算,我们将上式写成矩阵形式:Y = XW假设自变量维度为NW为自变量的系数,下标0...
  • 1.多元线性回归SPSS分析 四步搞定SPSS多元线性回归视频教程(含详细操作及结果解读)_哔哩哔哩_bilibili订阅陈老师B站送福利!订阅后加陈老师QQ1622275006送数据分析教程及软件福利哟~关注微信公众号:杏花开医学...
  • 相关系数公式 y=βx ,β为相关系数的标准化后取值 线性回归分析 小数据 import statsmodels.formula.api as smf result=smf.ols('体重~饮食+性别+亲缘+运动时间+骑行时间',data=data1).fit() result.summary()#汇总...
  • 4、spss做多元线性回归

    千次阅读 2015-04-15 15:19:34
    回归一直是个很重要的主题。因为在数据分析的领域里边,模型重要的也是主要...本文主要讨论多元线性回归(包括一般多元回归,含有虚拟变量的多元回归,以及一点广义差分的知识)。请大家不要觉得本人偷奸耍滑,居然只有
  • 多元线性回归属于监督机器学习算法,通过已知数据训练得到模型或决策函数。应用此算法时,不能盲目地套用算法,必须对数据的有效性、正确性、假设合理性进行验证,如果发现数据本身不正确,就需要纠正。多元线性回归...
  • 实验目的:了解R语言多元线性回归模型中变量的选择和诊断分析 实验要求:对给出的数据用逐步回归的方法选择变量,并对实验结果进行诊断分析。 实验数据:1. 对给出数据进行变量选择,并进行回归诊断。 实验代码: a1...
  • 如何用R实现多元线性回归分析

    万次阅读 2017-03-08 11:45:59
    构建了线性模型后,如果是一元线性回归,可以画模型图初步判断一下线性关系(多元回归模型不好可视化): 2、模型诊断 确定了回归模型的自变量并初步得到一个线性回归模型,并不是直接可以拿来用的,...
  • R判断逻辑回归参数共线性

    千次阅读 2016-12-16 22:45:31
    方差膨胀因子(Variance Inflation Factor,VIF):是指解释变量之间存在多重共线性时的方差与不存在多重共线性时的方差之比。容忍度的倒数,VIF越大,显示共线性越严重。经验判断方法表明:当0多重共线性;当10≤...
  • SPSS 多元线性回归结果重要参数解读

    千次阅读 2020-12-19 08:56:05
    选择共线性诊断用于判断多个变量之间是否相互关联以及关联的程度德宾-沃森(Durbin-Watson)DW用来检验回归分析中的残差项是否存在自相关(序列相关)现象“DEPENDNT”:因变量“ZPRED”:标准化预测值“ZRESID”:标准...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,181
精华内容 872
关键字:

多元回归共线性诊断