精华内容
下载资源
问答
  • 2021-10-21 09:24:41

    一、概念

    • 在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。

    二、EXCEL进行多元线性回归

    • 1.删掉表里的非数据项,以进行多元线性回归
      在这里插入图片描述
    • 2.选中要进行多元线性回归的区域,点击文件在这里插入图片描述
    • 3.选择更多里面的选项在这里插入图片描述
    • 4.进入加载项,点击转到在这里插入图片描述
    • 5.选择分析数据库在这里插入图片描述
    • 6.点击数据里的数据分析在这里插入图片描述
    • 7.选择回归在这里插入图片描述
    • 8.分别选中x和y值的区域,输出选项可以选新工作表组,这样就可以在新工作表里看到了,弄好之后点击确认就行了。在这里插入图片描述
    • 10、结果,intercept为截距,下面几行就是对应自变量的系数在这里插入图片描述

    三、代码方式实现多元线性回归

    3.1 用sklearn包实现

    3.1.1 不进行数据处理

    • 1.导入包
    import pandas as pd
    import numpy as np
    import seaborn as sns
    from sklearn import datasets
    from sklearn.linear_model import LinearRegression
    
    • 2.读取文件
    df = pd.read_csv('..\\source\\house_prices.csv')
    df.info()#显示列名和数据类型类型
    df.head(6)#显示前n行,n默认为5
    
    • 3.取出自变量和因变量
    #取出自变量
    data_x=df[['area','bedrooms','bathrooms']]
    data_y=df['price']
    
    • 4.进行多元线性回归并得出结果
    # 进行多元线性回归
    model=LinearRegression()
    l_model=model.fit(data_x,data_y)
    print('参数权重')
    print(model.coef_)
    print('模型截距')
    print(model.intercept_)
    
    • 结果
      在这里插入图片描述

    3.1.2 进行数据处理

    • 1.前面两步的步骤是一样的,接下来是进行异常值检测
    # 异常值处理
    # ================ 异常值检验函数:iqr & z分数 两种方法 =========================
    def outlier_test(data, column, method=None, z=2):
        """ 以某列为依据,使用 上下截断点法 检测异常值(索引) """
        """ 
        full_data: 完整数据
        column: full_data 中的指定行,格式 'x' 带引号
        return 可选; outlier: 异常值数据框 
        upper: 上截断点;  lower: 下截断点
        method:检验异常值的方法(可选, 默认的 None 为上下截断点法),
                选 Z 方法时,Z 默认为 2
        """
        # ================== 上下截断点法检验异常值 ==============================
        if method == None:
            print(f'以 {column} 列为依据,使用 上下截断点法(iqr) 检测异常值...')
            print('=' * 70)
            # 四分位点;这里调用函数会存在异常
            column_iqr = np.quantile(data[column], 0.75) - np.quantile(data[column], 0.25)
            # 1,3 分位数
            (q1, q3) = np.quantile(data[column], 0.25), np.quantile(data[column], 0.75)
            # 计算上下截断点
            upper, lower = (q3 + 1.5 * column_iqr), (q1 - 1.5 * column_iqr)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            print(f'第一分位数: {q1}, 第三分位数:{q3}, 四分位极差:{column_iqr}')
            print(f"上截断点:{upper}, 下截断点:{lower}")
            return outlier, upper, lower
        # ===================== Z 分数检验异常值 ==========================
        if method == 'z':
            """ 以某列为依据,传入数据与希望分段的 z 分数点,返回异常值索引与所在数据框 """
            """ 
            params
            data: 完整数据
            column: 指定的检测列
            z: Z分位数, 默认为2,根据 z分数-正态曲线表,可知取左右两端的 2%,
               根据您 z 分数的正负设置。也可以任意更改,知道任意顶端百分比的数据集合
            """
            print(f'以 {column} 列为依据,使用 Z 分数法,z 分位数取 {z} 来检测异常值...')
            print('=' * 70)
            # 计算两个 Z 分数的数值点
            mean, std = np.mean(data[column]), np.std(data[column])
            upper, lower = (mean + z * std), (mean - z * std)
            print(f"取 {z} 个 Z分数:大于 {upper} 或小于 {lower} 的即可被视为异常值。")
            print('=' * 70)
            # 检测异常值
            outlier = data[(data[column] <= lower) | (data[column] >= upper)]
            return outlier, upper, lower
    
    • 2.得到异常集并进行丢弃
    outlier, upper, lower = outlier_test(data=df, column='price', method='z')#获得异常数据
    outlier.info(); outlier.sample(5)
    df.drop(index=outlier.index, inplace=True)#丢弃异常数据
    
    • 3.取出自变量和因变量
    #取出自变量
    data_x=df[['area','bedrooms','bathrooms']]
    data_y=df['price']
    
    • 4.进行多元线性回归并得出结果
    # 进行多元线性回归
    model=LinearRegression()
    l_model=model.fit(data_x,data_y)
    print('参数权重')
    print(model.coef_)
    print('模型截距')
    print(model.intercept_)
    
    • 结果
      在这里插入图片描述

    3.2 用线性回归模型的统计学库实现

    • 3.2.1 数据的预处理都是一样的,只是后面的导入的函数不一样了,下面是进行了虚拟变量设置并进行数据拼接
    # 对名义变量neighborhood进行处理
    # 设置虚拟变量
    nominal_data = df['neighborhood']
    # 设置虚拟变量
    dummies = pd.get_dummies(nominal_data)
    dummies.sample() # pandas 会自动帮你命名
    # 每个名义变量生成的虚拟变量中,需要各丢弃一个,这里以丢弃C为例
    dummies.drop(columns=['C'], inplace=True)
    dummies.sample()
    # 对名义变量style进行处理
    # 设置虚拟变量
    nominal_style_data = df['style']
    # 设置虚拟变量
    style_dummies = pd.get_dummies(nominal_style_data)
    style_dummies.sample() # pandas 会自动帮你命名
    # 每个名义变量生成的虚拟变量中,需要各丢弃一个,这里以丢弃lodge
    #原因:转化后的虚拟变量需要舍弃一个,才能得到满秩矩阵,可理解为当变量名可划分为n类时,只需要n-1个虚拟变量就能获取所有信息了
    style_dummies.drop(columns=['lodge'], inplace=True)
    style_dummies.sample()
    #数据拼接
    results = pd.concat(objs=[df, dummies], axis='columns') # 按照列来合并
    results = pd.concat(objs=[results, style_dummies], axis='columns') # 按照列来合并
    results.sample(3)
    
    • 3.2.2进行预测
    from statsmodels.formula.api import ols
    #使用虚拟变量
    lm = ols('price ~ area + bedrooms + bathrooms + A + B', data=results).fit()
    lm.summary()
    
    • 3.2.3 预测结果,结果会比用sklearn详细许多在这里插入图片描述

    • 3.2.4 提示可能出现多元共线性,检验一下,再次建模

    def vif(df, col_i):
        """
        df: 整份数据
        col_i:被检测的列名
        """
        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)
    test_data = results[['area', 'bedrooms', 'bathrooms', 'A', 'B']]
    for i in test_data.columns:
        print(i, '\t', vif(df=test_data, col_i=i))
    
    • 3.2.5 检验结果如下,可以看到bedroom和bathroom相关程度较高在这里插入图片描述
    • 3.2.6 去掉bedroom,再次建模
    # 去掉bedroom再次建模
    lm = ols(formula='price ~ area + bathrooms + A + B', data=results).fit()
    lm.summary()
    
    • 3.2.7 得出结果在这里插入图片描述

    3.3 分析

    当不进行数据处理时,用jupyter和使用excel进行数据分析的结果是一样的,但进行了数据清理之后回归方程与之前相差的挺大的,而进行了多元共线性检测以后,结果变得更为合理了。

    四、总结

    初步了解了多元线性回归的步骤,也清楚了异常数据对于回归方程的影响,在进行数据处理之前应该先进行数据预处理,同时也要考虑两个变量的关系。

    五、参考

    Excel-一元线性回归和多元线性回归(借助数据分析功能和直接计算)

    更多相关内容
  • python源码集锦-多元线性回归模型预测房价
  • 线性回归模型建模步骤 (一元线性回归、多元线性回归)
  • 基于MATLAB的多元线性回归模型学习资料
  • 用Java完成多元线性回归相关算法编程。资源是从百度文库上下载的https://wenku.baidu.com/view/070d30eb988fcc22bcd126fff705cc1755275f61.html。
  • 通过具体的案例讲解时间序列下多元线性回归在eviews里的操作
  • 多元线性回归代码以及多元线性回归代码数学建模
  • 自行推导公式多元线性回归的编程一、导入文本店铺面积和营业额的关系图车站距离和营业额的关系图二、计算下图三、计算R² 一、导入文本 import pandas as pd import numpy as np import matplotlib.pyplot as plt ...
  • 主要大家详细介绍了python实现机器学习之多元线性回归,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • MATLAB源码集锦-多元线性回归代码
  • 多元线性回归模型的推广.pptx
  • 文件分为两种:一种是针对随机产生的数据写的多元回归模型;另一种是根据真实的文件数据写的多元回归模型。两个模型大同小异,主要的不同就是数据的生成方式,一个是随机,一个是文件导入。多元线性回归模型是基于...
  • 这个是用来做多元线性分析的财政收入数据,一共有50组,影响因素选择了工业生产总值、GDP、社会商品零售总额等9个,因此数据50*10(其中一维财政收入),可以用来给同学们来作为多元线性回归分析的例子。
  • 机器学习 回归篇(1)——多元线性回归摘要线性回归简介python实现运行结果及可视化 摘要 本文介绍了最基础的回归问题——多元线性回归,并通过python进行实现及可视化展示运行结果。 线性回归简介 线性回归问题的...
  • 通过对可能影响处理耗时的各个特征数据及其耗时进行多元线性回归训练,后根据待预测特征数据来估计耗时
  • 原始数据在这里 1.观察数据 首先,用Pandas打开数据,并进行观察。 import numpy import pandas as pd import matplotlib.pyplot as plt ...我们的问题是得到一个线性的关系,对应PE是样本输出,而AT/V/
  • 主要用于数学建模(Matlab)的学习,下载下来换成你的数据就可以用了。
  • 多元线性回归分析
  • 包括基于矩阵运算的多元线性回归、基于多元计算程序包以及计算共线性容忍度
  • 关于如何使用Matlab构建多元线性回归模型在数学建模中有许多情况需要用到多远非线性回归
  • 使用R语言对数据分析主成分分析实现多元线性回归。包括源数据和代码。
  • 多元线性回归模型

    千次阅读 2022-05-14 18:32:20
    如果这个关系是线性的,则可以采用线性多元回归模型来描述。反之,则用非线性多元回归模型。对于多元线性模型而言,因变量若连续型变量,则采用普通的线性模型;若因变量离散型变量(类型变量或计数变量),则需...

            多元回归模型(multivariate regression model)是描述一个因变量与多个自变量之间的相关关系。如果这个关系是线性的,则可以采用线性多元回归模型来描述。反之,则用非线性多元回归模型。对于多元线性模型而言,因变量若为连续型变量,则采用普通的线性模型;若因变量为离散型变量(类型变量或计数变量),则需采用广义多元线性模型。下面就线性模型展开说明讲解。

    一、普通多元线性模型

            我们选用一个例子来讲述普通多元线性回归模型。

    e.g. 计量经济学涉及数学、统计学、经济学的知识,还要借助软件完成计算分析。因此对于很多同学来说,计量经济学是一门特别容易挂科的课程。大学教授Mr.Li想研究大学生计量经济学考试成绩与其影响因素之间的关系,根据初步分析,他认为学生的计量经济学考试成绩y与学生的微积分成绩x1,线性代数成绩x2,统计学成绩x3,大学计算机成绩x4,西方经济学成绩x5有相关关系。对此他抽取36名学生成绩进行分析。数据网盘提取码:d1d8

            我们可以简单将模型写为:y_i=\beta_0+\beta_1x_i_1+\cdots+\beta_5x_i_5+\epsilon _i,i=1,2,\cdots,n

    其中\epsilon_i\sim {N(0,\sigma^{2})},模型可以视为一个普通正态线性模型。在正态假定下,如果X^TX是满秩的(矩阵的满秩与可逆),则参数\beta的最小二乘估计为:

    {\hat{\beta}}=(X^{T}X)^{-1}X^{T}y

    于是y 的估计值为:

    {\hat{y}}=X{\hat{\beta}}

    残差e=y-{\hat{y}}=y-X{\hat{\beta}},则随机误差方差\sigma^2的最小二乘估计为:

    {\hat{\sigma}^2}=\frac{e^Te}{n-p-1}

    对于多元线性模型而言,我们是需要找到最合适的模型参数\beta_i ,使得残差平方和达到最小。


     二、回归方程的显著性检验

            从回归系数的最小二乘估计{\hat{\beta_0}},\cdots,{\hat{\beta_5}}可以看出,对任意给定的n对数据(x_i,y_i),都可以求出{\hat{\beta_0}},\cdots,{\hat{\beta_5}},从而给出回归方程y_i=\beta_0+\beta_1x_i_1+\cdots+\beta_5x_i_5+\epsilon _i,i=1,2,\cdots,n,但是这样给出的回归方程不一定有意义。
      在使用回归方程作进一步的分析以前,首先应对回归方程是否有意义进行判断,什么叫回归方程有意义呢?我们知道,建立回归方程的目的是寻找y的均值随x变化的规律,即找出回归方程y_i=\beta_0+\beta_1x_i_1+\cdots+\beta_5x_i_5+\epsilon _i,i=1,2,\cdots,n,如果\beta_i=0,i=1,\cdots,5,那么不管x如何变化,E(y)不随x的变化作线性变化,那么这时求得的线性回归方程就没有意义,称回归方程不显著。如果\beta_i\neq 0,那么当x变化时,E(y)x的变化作线性变化,那么这时求得的回归方程就有意义,称回归方程是显著的
      综上,对回归方程是否有意义作判断就是要作如下的显著性检验H_0:\beta_i= 0;H_1:\beta\neq0,拒绝H_0表示回归方程是显著的。


            对回归方程有以下几种显著性的检验方法:F检验,t检验

    2.1 F检验

            F检验是对方程整体的显著性进行检验,即所有变量对被解释变量的显著性检验。

    2.2 t检验

            t检验是对单个变量的显著性检验,一般是看p值。如果p值小于0.05表示该自变量对因变量解释性很强。t检验值大于0.05则该变量显著,反之不显著。

            t检验回归系数是否等于某一特定值,在回归方程中这一特定值为0,因此t值=回归系数/回归系数的标准误差因此t值的正负应该与回归系数的正负一致,回归系数的标准误差越大,t值越小,回归系数的估计值越不可靠,越接近于0。另外,回归系数的绝对值越大,t值的绝对值越大。

            我们查看一下所举的例子。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LinearRegression as LM
    import statsmodels.api as sm 
    data=pd.read_csv("eg2.1.csv")
    data.head()
    d={'x1':data['x1'],'x2':data['x2'],'x3':data['x3'],'x4':data['x4'],'x5':data['x5'],'y':data['y']}
    md=sm.formula.ols('y~x1+x2+x3+x4+x5',d).fit()
    print(md.summary())

            输出结果为

            由输出结果我们可以看到,模型的p值为9.36\times{10^{-14}},明显小于0.05,因此我们认为方程式显著的。模型的拟合优度R^2=0.895,调整后的拟合优度R^2=0.877

            整体回归方程拟合优度检验,R方的结果越接近于1越好,但是R方会因增加变量而增大,所以引进了调整R方检验。

            在进行多元线性回归时,常用到的是F检验和t检验,F检验是用来检验整体方程系数是否显著异于零,如果F检验的p值小于0.05,就说明,整体回归是显著的。然后再看各个系数的显著性,也就是t检验,计量经济学中常用的显著性水平为0.05,如果t值大于2或p值小于0.05就说明该变量前面的系数显著不为0,选的这个变量是有用的。

    三、多重共线性

            但是模型的相关系数为4.15\times10^3,说明变量之间的相关性很高,即变量之间存在多重共线性。因此我们需要对变量进行调整,消除多重共线性。

    3.1 多重共线性的影响

            在进行线性回归分析时,自变量即解释变量很容易出现共线性问题。当出现共线性问题时,可能导致回归系数的符号与实际情况完全相反,本应该显著的自变量不显著,本不显著的自变量却呈现出显著性;共线性问题会导致数据研究出来严重偏差甚至完全相反的结论,因而需要解决此问题。

    3.2 多重共线性产生的原因

            多重共线性问题就是说一个解释变量的变化引起另一个解释变量地变化。如果各个自变量x之间有很强的线性关系,就无法固定其他变量了,就找不到x和y之间真实的关系了。通俗地讲共线性是指,自变量X(解释变量)影响因变量Y(被解释变量)的时候,多个X之间本身就存在很强的相关关系,即X之间有着比较强的替代性,因而导致共线性问题。

    3.3 消除多重共线性

    对于如何消除多重共线性,请查看下一章《解决多元线性回归的多重共线性问题》

    展开全文
  • 最后整合系数矩阵W,求解后分别对应截距b、a1、和a2。可见计算一个矩阵的逆是相当耗费时间且复杂的,而且求逆也会存在数值不稳定的情况。 梯度下降法迭代的次数可能会比较多,但是相对来说计算量并不是很大。且其有...
  • 基于spss的一元线性回归多元线性回归案例,个人整理出的,包含了部分案例、实验报告、题目,及部分题目答案,适合作为spss、MATLAB等软件数据分析题目联系
  • 矿井瓦斯涌出量受众多因素的影响。...该模型兼顾了多元回归分析的非线性特性和神经网络的时序特性,通过具体的实例研究,对比了各种方法的预测结果。结果显示,组合预测的结果与实际有较高的拟合度,可靠性高。
  • 上一篇文章讲述了梯度下降法的数学思想,趁热打铁,这篇博客笔者将使用梯度下降法完成多元线性回归,话不多说,直接开始。 我们假设我们的目标函数是长这样的: import numpy as np import pandas as pd # 读入...
  • Mathematica在多元线性回归分析中的应用,黄志鹏,李思泽,从多元线性回归分析的原理出发,利用最小二乘法准则,将回归分析归结用Seidel迭代法求矩阵方程组解,确定待定系数,利用mathematica�
  • 包括指数、对数、幂指数、双曲线、Logistic、多项式、Gamma等模型的非线性拟合,每行代码均有中文注释便于理解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,015
精华内容 10,806
关键字:

多元回归模型为什么是线性的