精华内容
下载资源
问答
  • SPSS-相关性和回归分析(一元线性方程)案例解析,非常简单,适合在校生等初学者照着案例做作业等等
  • 一元线性回归及Excel回归分析

    千次阅读 2019-06-08 19:26:54
    一元线性回归可以说是数据分析中非常简单的一个知识点,有一点点统计、分析、建模经验的人都知道这个分析的含义,也会用各种工具来做这个分析。这里面想把这个分析背后的细节讲讲清楚,也就是后面的数学原理。 什么...

    摘要

    一元线性回归可以说是数据分析中非常简单的一个知识点,有一点点统计、分析、建模经验的人都知道这个分析的含义,也会用各种工具来做这个分析。这里面想把这个分析背后的细节讲讲清楚,也就是后面的数学原理。


    什么是一元线性回归

    回归分析(Regression Analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。举个例子来说吧:

    比方说有一个公司,每月的广告费用和销售额,如下表所示:

    案例数据

    如果我们把广告费和销售额画在二维坐标内,就能够得到一个散点图,如果想探索广告费和销售额的关系,就可以利用一元线性回归做出一条拟合直线:

    拟合直线

    这条线是怎么画出来的

    对于一元线性回归来说,可以看成Y的值是随着X的值变化,每一个实际的X都会有一个实际的Y值,我们叫Y实际,那么我们就是要求出一条直线,每一个实际的X都会有一个直线预测的Y值,我们叫做Y预测,回归线使得每个Y的实际值与预测值之差的平方和最小,即(Y1实际-Y1预测)^2+(Y2实际-Y2预测)^2+ …… +(Yn实际-Yn预测)^2的和最小(这个和叫SSE,后面会具体讲)。

    现在来实际求一下这条线:

    我们都知道直线在坐标系可以表示为Y=aX+b,所以(Y实际-Y预测)就可以写成(Y实际-(aX实际+b)),于是平方和可以写成a和b的函数。只需要求出让Q最小的a和b的值,那么回归线的也就求出来了。

      简单插播一下函数最小值怎么求:

    首先,一元函数最小值点的导数为零,比如说Y=X^2,X^2的导数是2X,令2X=0,求得X=0的时候,Y取最小值。

    那么实质上二元函数也是一样可以类推。不妨把二元函数图象设想成一个曲面,最小值想象成一个凹陷,那么在这个凹陷底部,从任意方向上看,偏导数都是0。

    因此,对于函数Q,分别对于a和b求偏导数,然后令偏导数等于0,就可以得到一个关于a和b的二元方程组,就可以求出a和b了。这个方法被称为最小二乘法。下面是具体的数学演算过程,不愿意看可以直接看后面的结论。

    先把公式展开一下:

    Q函数表达式展开

    然后利用平均数,把上面式子中每个括号里的内容进一步化简。例如

    Y^2的平均

    则:

    上式子两边×n

     

    于是

    Q最终化简结果

    然后分别对Q求a的偏导数和b的偏导数,令偏导数等于0。

    Q分别对a和b求偏导数,令偏导数为0

    进一步化简,可以消掉2n,最后得到关于a,b的二元方程组为

    关于a,b的 二元方程组

    最后得出a和b的求解公式:

    最小二乘法求出直线的斜率a和斜率b

    有了这个公式,对于广告费和销售额的那个例子,我们就可以算出那条拟合直线具体是什么,分别求出公式中的各种平均数,然后带入即可,最后算出a=1.98,b=2.25

    最终的回归拟合直线为Y=1.98X+2.25,利用回归直线可以做一些预测,比如如果投入广告费2万,那么预计销售额为6.2万

    评价回归线拟合程度的好坏

    我们画出的拟合直线只是一个近似,因为肯定很多的点都没有落在直线上,那么我们的直线拟合程度到底怎么样呢?在统计学中有一个术语叫做R^2(coefficient ofdetermination,中文叫判定系数、拟合优度,决定系数,简书不能上标,这里是R^2是“R的平方”),用来判断回归方程的拟合程度。

    首先要明确一下如下几个概念:

    总偏差平方和(又称总平方和,SST,Sum of Squaresfor Total):是每个因变量的实际值(给定点的所有Y)与因变量平均值(给定点的所有Y的平均)的差的平方和,即,反映了因变量取值的总体波动情况。如下:

    SST公式

    回归平方和(SSR,Sum of Squares forRegression):因变量的回归值(直线上的Y值)与其均值(给定点的Y值平均)的差的平方和,即,它是由于自变量x的变化引起的y的变化,反映了y的总偏差中由于x与y之间的线性关系引起的y的变化部分,是可以由回归直线来解释的。

    SSR公式

     

    残差平方和(又称误差平方和,SSE,Sum of Squaresfor Error):因变量的各实际观测值(给定点的Y值)与回归值(回归直线上的Y值)的差的平方和,它是除了x对y的线性影响之外的其他因素对y变化的作用,是不能由回归直线来解释的。

    这些概念还是有些晦涩,我个人是这么理解的:

    就拿广告费和销售额的例子来说,其实广告费只是影响销售额的其中一个比较重要的因素,可能还有经济水平、产品质量、客户服务水平等众多难以说清的因素在影响最终的销售额,那么实际的销售额就是众多因素相互作用最终的结果,由于销售额是波动的,所以用上文提到的每个月的销售额与平均销售额的差的平方和(即总平方和)来表示整体的波动情况。

    回归线只表示广告费一个变量的变化对于总销售额的影响,所以必然会造成偏差,所以才会有实际值和回归值是有差异的,因此回归线只能解释一部分影响

    那么实际值与回归值的差异,就是除了广告费之外其他无数因素共同作用的结果,是不能用回归线来解释的。

    因此SST(总偏差)=SSR(回归线可以解释的偏差)+SSE(回归线不能解释的偏差)

    那么所画回归直线的拟合程度的好坏,其实就是看看这条直线(及X和Y的这个线性关系)能够多大程度上反映(或者说解释)Y值的变化,定义

    R^2=SSR/SST 或 R^2=1-SSE/SST, R^2的取值在0,1之间,越接近1说明拟合程度越好

    假如所有的点都在回归线上,说明SSE为0,则R^2=1,意味着Y的变化100%由X的变化引起,没有其他因素会影响Y,回归线能够完全解释Y的变化。如果R^2很低,说明X和Y之间可能不存在线性关系

    还是回到最开始的广告费和销售额的例子,这个回归线的R^2为0.73,说明拟合程度还凑合。

    四、相关系数R和判定系数R^2的区别

    判定系数来判断回归方程的拟合程度,表示拟合直线能多大程度上反映Y的波动。

    在统计中还有一个类似的概念,叫做相关系数R(这个没有平方,学名是皮尔逊相关系数,因为这不是唯一的一个相关系数,而是最常见最常用的一个),用来表示X和Y作为两个随机变量的线性相关程度,取值范围为【-1,1】。

    当R=1,说明X和Y完全正相关,即可以用一条直线,把所有样本点(x,y)都串起来,且斜率为正,当R=-1,说明完全负相关,及可以用一条斜率为负的直线把所有点串起来。如果在R=0,则说明X和Y没有线性关系,注意,是没有线性关系,说不定有其他关系。

    就如同这两个概念的符号表示一样,在数学上可以证明,相关系数R的平方就是判定系数。

    变量的显著性检验

    变量的显著性检验的目的:剔除回归系数中不显著的解释变量(也就是X),使得模型更简洁。在一元线性模型中,我们只有有一个自变量X,就是要判断X对Y是否有显著性的影响;多元线性回归中,验证每个Xi自身是否真的对Y有显著的影响,不显著的就应该从模型去掉。

    变量的显著性检验的思想:用的是纯数理统计中的假设检验的思想。对Xi参数的实际值做一个假设,然后在这个假设成立的情况下,利用已知的样本信息构造一个符合一定分布的(如正态分布、T分布和F分布)的统计量,然后从理论上计算得到这个统计量的概率,如果概率很低(5%以下),根据“小概率事件在一次实验中不可能发生”的统计学基本原理,现在居然发生了!(因为我们的统计量就是根据已知的样本算出来的,这些已知样本就是一次实验)肯定是最开始的假设有问题,所以就可以拒绝最开始的假设,如果概率不低,那就说明假设没问题。

    其实涉及到数理统计的内容,真的比较难一句话说清楚,我举个不恰当的例子吧:比如有一个口袋里面装了黑白两种颜色的球一共20个,然后你想知道黑白球数量是否一致,那么如果用假设检验的思路就是这样做:首先假设黑白数量一样,然后随机抽取10个球,但是发现10个都是白的,如果最开始假设黑白数量一样是正确的,那么一下抽到10个白的的概率是很小的,但是这么小概率的事情居然发生了,所以我们有理由相信假设错误,黑白的数量应该是不一样的……

    总之,对于所有的回归模型的软件,最终给出的结果都会有参数的显著性检验,忽略掉难懂的数学,我们只需要理解如下几个结论:

    T检验用于对某一个自变量Xi对于Y的线性显著性,如果某一个Xi不显著,意味着可以从模型中剔除这个变量,使得模型更简洁。

    F检验用于对所有的自变量X在整体上看对于Y的线性显著性

    T检验的结果看P-value,F检验看Significant F值,一般要小于0.05,越小越显著(这个0.05其实是显著性水平,是人为设定的,如果比较严格,可以定成0.01,但是也会带来其他一些问题,不细说了)

    下图是用EXCEL对广告费和销售额的例子做的回归分析的结果(EXCEL真心是个很强大的工具,用的出神入化一样可以变成超神),可以看出F检验是显著的(Significance F为0.0017),变量X的T检验是显著的(P-value为0.0017),这俩完全一样也好理解,因为我们是一元回归,只有一个自变量X。

    用Excel做线性回归分析

    还有一点是intercept(截距,也就是Y=aX+b中的那个b)的T检验没有通过,是不显著的,一般来说,只要F检验和关键变量的T检验通过了,模型的预测能力就是OK的。

    使用Excel数据分析工具进行多元回归分析

    在“数据”工具栏中就出现“数据分析”工具库,如下图所示:

     使用Excel数据分析工具进行多元回归分析

    给出原始数据,自变量的值在A2:I21单元格区间中,因变量的值在J2:J21中,如下图所示:

     使用Excel数据分析工具进行多元回归分析
    假设回归估算表达式为:

     使用Excel数据分析工具进行多元回归分析

    试使用Excel数据分析工具库中的回归分析工具对其回归系数进行估算并进行回归分析:

    点击“数据”工具栏中中的“数据分析”工具库,如下图所示:

     使用Excel数据分析工具进行多元回归分析

    在弹出的“数据分析”-“分析工具”多行文本框中选择“回归”,然后点击 “确定”,如下图所示:

     使用Excel数据分析工具进行多元回归分析

    弹出“回归”对话框并作如下图的选择:

     使用Excel数据分析工具进行多元回归分析

    上述选择的具体方法是:

    在“Y值输入区域”,点击右侧折叠按钮,选取函数Y数据所在单元格区域J2:J21,选完后再单击折叠按钮返回;这过程也可以直接在“Y值输入区域”文本框中输入J2:J21;

    在“X值输入区域”,点击右侧折叠按钮,选取自变量数据所在单元格区域A2:I21,选完后再单击折叠按钮返回;这过程也可以直接在“X值输入区域”文本框中输入A2:I21;

    置信度可选默认的95%。

    在“输出区域”如选“新工作表”,就将统计分析结果输出到在新表内。为了比较对照,我选本表内的空白区域,左上角起始单元格为K10.点击确定后,输出结果如下:

    使用Excel数据分析工具进行多元回归分析
     

    第一张表是“回归统计表”(K12:L17): 

    其中:

    Multiple R:(复相关系数R)R2的平方根,又称相关系数,用来衡量自变量x与y之间的相关程度的大小。本例R=0.9134表明它们之间的关系为高度正相关。(Multiple:复合、多种)

    R Square:复测定系数,上述复相关系数R的平方。用来说明自变量解释因变量y变差的程度,以测定因变量y的拟合效果。此案例中的复测定系数为0.8343,表明用用自变量可解释因变量变差的83.43%

    Adjusted R Square:调整后的复测定系数R2,该值为0.6852,说明自变量能说明因变量y的68.52%,因变量y的31.48%要由其他因素来解释。( Adjusted:调整后的)

    标准误差:用来衡量拟合程度的大小,也用于计算与回归相关的其它统计量,此值越小,说明拟合程度越好

    观察值:用于估计回归方程的数据的观察值个数。

    第二张表是“方差分析表”:主要作用是通过F检验来判定回归模型的回归效果。

    该案例中的Significance F(F显著性统计量)的P值为0.00636,小于显著性水平0.05,所以说该回归方程回归效果显著,方程中至少有一个回归系数显著不为0.(Significance:显著)

    第三张表是“回归参数表”:

    K26:K35为常数项和b1~b9的排序默认标示.

    L26:L35为常数项和b1~b9的值,据此可得出估算的回归方程为:

    使用Excel数据分析工具进行多元回归分析

    该表中重要的是O列,该列的O26:O35中的 P-value为回归系数t统计量的P值。

    值得注意的是:其中b1、b7的t统计量的P值为0.0156和0.0175,远小于显著性水平0.05,因此该两项的自变量与y相关。而其他各项的t统计量的P值远大于b1、b7的t统计量的P值,但如此大的P值说明这些项的自变量与因变量不存在相关性,因此这些项的回归系数不显著

    展开全文
  • 剔除异常数据,重新调用regress函数作一元线性回归 1. 读取数据,绘制散点图 ClimateData = xlsread('examp08_01.xls'); % 从Excel文件读取数据 x = ClimateData(:, 1); % 提取ClimateData的第1列,即年平均气温...

    数据拟合效果预览:

    在这里插入图片描述


    1. 读取数据,绘制散点图

    ClimateData = xlsread('examp08_01.xls');    % 从Excel文件读取数据
    x = ClimateData(:, 1);    % 提取ClimateData的第1列,即年平均气温数据
    y = ClimateData(:, 5);    % 提取ClimateData的第5列,即全年日照时数数据
    plot(x, y, 'k.', 'Markersize', 15)    % 绘制x和y的散点图
    xlabel('年平均气温(x)')     % 给X轴加标签
    ylabel('全年日照时数(y)')    % 给Y轴加标签
    

    在这里插入图片描述

    2. 计算相关系数

    R = corrcoef(x, y)    %计算x和y的线性相关系数矩阵R
    
    
    %***********************调用regress函数作一元线性回归************************
    xdata = [ones(size(x, 1), 1), x];    % 在原始数据x的左边加一列1,即模型包含常数项
    [b, bint, r, rint, s] = regress(y, xdata);    % 调用regress函数作一元线性回归
    yhat = xdata*b;    % 计算y的估计值
    
    % 定义元胞数组,以元胞数组形式显示系数的估计值和估计值的95%置信区间
    head1 = {'系数的估计值','估计值的95%置信下限','估计值的95%置信上限'};
    [head1; num2cell([b, bint])]
    
    % 定义元胞数组,以元胞数组形式显示y的真实值、y的估计值、残差和残差的95%置信区间
    head2 = {'y的真实值','y的估计值','残差','残差的95%置信下限','残差的95%置信上限'};
    % 同时显示y的真实值、y的估计值、残差和残差的95%置信区间
    [head2; num2cell([y, yhat, r, rint])]
    
    % 定义元胞数组,以元胞数组形式显示判定系数、F统计量的观测值、检验的p值和误差方差的估计值
    head3 = {'判定系数','F统计量的观测值','检验的p值','误差方差的估计值'};
    [head3; num2cell(s)]
    

    在这里插入图片描述

    3. 绘制回归直线

    plot(x, y, 'k.', 'Markersize', 15)    % 画原始数据散点
    hold on
    plot(x, yhat, 'linewidth', 3)    % 画回归直线
    xlabel('年平均气温(x)')     % 给X轴加标签
    ylabel('全年日照时数(y)')   % 给Y轴加标签
    legend('原始散点','回归直线');    % 加标注框
    

    在这里插入图片描述

    4. 剔除异常数据,重新调用regress函数作一元线性回归

    %*******************************残差分析************************************
    figure    % 新建一个图形窗口
    rcoplot(r,rint)    %按顺序画出各组观测对应的残差和残差的置信区间
    
    %******************剔除异常数据,重新计算相关系数矩阵*************************
    xt = x(y<3000 & y>1250);    % 根据条件y<3000 & y>1250剔除异常数据
    yt = y(y<3000 & y>1250);
    figure    % 新建一个空的图形窗口
    plot(xt, yt, 'ko')    % 画剔除异常数据后的散点图
    xlabel('年平均气温(x)')    % 为X轴加标签
    ylabel('全年日照时数(y)')   % 为Y轴加标签
    Rt = corrcoef(xt, yt)    % 重新计算相关系数矩阵
    
    %**********************重新调用regress函数作一元线性回归*********************
    xtdata = [ones(size(xt, 1), 1),  xt];    % 在数据xt的左边加一列1
    % 调用regress函数对处理后数据作一元线性回归
    [b, bint, r, rint, s] = regress(yt, xtdata);
    b    % 显示常数项和回归系数的估计值
    s    % 显示判定系数 、 F统计量的观测值、 p值和误差方差的估计值
    ythat = xtdata*b;    % 重新计算y的估计值
    
    %*************************绘制两次回归分析的回归直线*************************
    figure;    % 新建一个图形窗口
    plot(x, y, 'ko');    % 画原始数据散点
    hold on;    % 图形叠加
    [xsort, id1] = sort(x);    % 为了画图的需要将x从小到大排序
    yhatsort = yhat(id1);    % 将估计值yhat按x排序
    plot(xsort, yhatsort, 'r--','linewidth',3);    % 画原始数据对应的回归直线,红色虚线
    plot(xt, ythat, 'linewidth', 3);    % 画剔除异常数据后的回归直线,蓝色实线
    legend('原始数据散点','原始数据回归直线','剔除异常数据后回归直线')    % 为图形加标注框
    xlabel('年平均气温(x)');    % 为X轴加标签
    ylabel('全年日照时数(y)');    % 为Y轴加标签
    

    在这里插入图片描述

    展开全文
  • R: 回归分析案例

    2019-11-05 16:04:07
    R学习之 回归分析案例

    案例所用数据集bschool0.txt

    1. 读数据

    一般我们用read.table()函数直接读入文件。如果是csv文件,可以用read.cvs()读入,内部参数设置都是一样的。其中路径的表达注意不要用反斜杠而要用斜杠/表示,header取T/F,表示是否第一行为列名,sep表示文件的分隔方式,这里为逗号。于是有

    x <- read.table("E:/R/bschool0.txt",header=T,sep=",")
    

    2. 数据初步认识

    查看维度

    dim(x)  #,60个观测9个变量
    
    >(60,9)
    

    查看前五行

    head(x)
    
    >                      FiveYearGain FiveYearGp
    Dartmouth (Tuck)                134         84
    Pennsylvania (Wharton)          129         75
    Chicago                         121         71
    Columbia                        120         74
    Yale                            119         84
    Stanford                        115         70
                           YearsToPayback SalaPreMBA
    Dartmouth (Tuck)                  2.9         54
    Pennsylvania (Wharton)            3.2         64
    Chicago                           3.3         60
    Columbia                          3.1         57
    Yale                              2.8         46
    Stanford                          3.2         58
                           SalaPostMBA Tuition GMAT
    Dartmouth (Tuck)               165      75  710
    Pennsylvania (Wharton)         177      75  716
    Chicago                        164      75  710
    Columbia                       160      75  707
    Yale                           134      72  700
    Stanford                       160      78  710
                                 Location State
    Dartmouth (Tuck)              Hanover    NH
    Pennsylvania (Wharton)   Philadelphia    PA
    Chicago                       Chicago    IL
    Columbia                     New York    NY
    Yale                        New Haven    CT
    Stanford                     Stanford    CA
    

    可用summary()函数对定量数据做一个描述性统计。

    summary(x)
    
     >FiveYearGain      FiveYearGp     YearsToPayback 
     Min.   :  2.00   Min.   :  2.00   Min.   :2.200  
     1st Qu.: 62.00   1st Qu.: 57.25   1st Qu.:2.900  
     Median : 79.00   Median : 67.00   Median :3.100  
     Mean   : 78.83   Mean   : 65.93   Mean   :3.190  
     3rd Qu.: 99.25   3rd Qu.: 76.00   3rd Qu.:3.325  
     Max.   :134.00   Max.   :126.00   Max.   :4.900  
                                                      
       SalaPreMBA     SalaPostMBA       Tuition     
     Min.   :24.00   Min.   : 70.0   Min.   :22.00  
     1st Qu.:38.00   1st Qu.: 94.0   1st Qu.:47.75  
     Median :42.50   Median :105.5   Median :61.50  
     Mean   :43.75   Mean   :112.4   Mean   :58.07  
     3rd Qu.:48.75   3rd Qu.:128.5   3rd Qu.:69.25  
     Max.   :64.00   Max.   :180.0   Max.   :78.00  
                                                    
          GMAT                Location      State   
     Min.   :560.0     Los Angeles: 3    CA    : 7  
     1st Qu.:640.0     Atlanta    : 2    NY    : 5  
     Median :660.0     Boston     : 2    MA    : 4  
     Mean   :659.9     New York   : 2    TX    : 4  
     3rd Qu.:690.0     Ann Arbor  : 1    FL    : 3  
     Max.   :716.0     Athens     : 1    GA    : 3  
                     (Other)      :49   (Other):34 
    

    3. 相关性度量

    这里选取SalaPostMBA作为被解释变量,则需要寻找和其具有较高相关关系的变量构建回归方程。可用cor()函数,$为索引号。例如度量SalaPreMBA与SalaPostMBA的皮尔逊相关系数:

    cor(x$SalaPostMBA,x$SalaPreMBA,method = "pearson")
    
    >0.9242337
    

    可见该变量与被解释变量的相关性很高,可以作为解释变量进行回归。因此有

    cor(x[,1:7])   #最后两列变量是字符,删去
    
      FiveYearGain  FiveYearGp YearsToPayback SalaPreMBA SalaPostMBA    Tuition
    FiveYearGain      1.0000000  0.69466576    -0.70818368  0.5310755  0.69842102  0.4540424
    FiveYearGp        0.6946658  1.00000000    -0.95323083 -0.1491163  0.03342518 -0.2422810
    YearsToPayback   -0.7081837 -0.95323083     1.00000000  0.1222730 -0.01691694  0.1623029
    SalaPreMBA        0.5310755 -0.14911629     0.12227301  1.0000000  0.92423368  0.7836609
    SalaPostMBA       0.6984210  0.03342518    -0.01691694  0.9242337  1.00000000  0.7811176
    Tuition           0.4540424 -0.24228099     0.16230293  0.7836609  0.78111759  1.0000000
    GMAT              0.6672689  0.13096436    -0.20274377  0.8250422  0.77723442  0.6621838
                         GMAT
    FiveYearGain    0.6672689
    FiveYearGp      0.1309644
    YearsToPayback -0.2027438
    SalaPreMBA      0.8250422
    SalaPostMBA     0.7772344
    Tuition         0.6621838
    GMAT            1.0000000
    

    同时,可以引入car包中的scatterplotMatrix()可迅速得到可视化的相关关系如下图。

    install.package("car")
    library(car)
    scatterplotMatrix(x,spread=F,lty.smooth=2)
    

    图1:9个变量之间的相关关系图

    4.回归方程构建

    第5行代表被解释变量SalaPostMBA与所有变量之间的相关关系,可见第1、4、6、7个变量具有较高的相关关系。我们选择这四个变量,利用lm()最小二乘法进行回归方程构建。

    lm.sol <- lm(SalaPostMBA ~ FiveYearGain + SalaPreMBA + Tuition + GMAT,x)
    # 方程具体摘要
    summary(lm.sol)
    
    > Call:
    lm(formula = SalaPostMBA ~ FiveYearGain + SalaPreMBA + Tuition + 
        GMAT, data = x)
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -12.3369  -6.0117   0.7479   4.4076  15.2953 
    
    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept)  65.72676   26.70138   2.462  0.01700 *  
    FiveYearGain  0.32540    0.04442   7.325 1.11e-09 ***
    SalaPreMBA    2.50162    0.23279  10.746 3.98e-15 ***
    Tuition       0.21477    0.10131   2.120  0.03853 *  
    GMAT         -0.15296    0.05185  -2.950  0.00466 ** 
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 7.15 on 55 degrees of freedom
    Multiple R-squared:  0.9307,	Adjusted R-squared:  0.9256 
    F-statistic: 184.6 on 4 and 55 DF,  p-value: < 2.2e-16
    

    得到方程形式在Coefficients组件中,可用summary(lm.sol)$coef查看。

    5.系数检验

    回归方程构建完了需要对方程及其系数做显著性检验。
    对方程来说,最后一行中

    F-statistic: 184.6 on 4 and 55 DF, p-value: < 2.2e-16

    方程的P值小于0.05,表明回归具有意义。对各系数检验,从

    Coefficients:
    Estimate Std. Error t value Pr(>|t|)
    (Intercept) 65.72676 26.70138 2.462 0.01700 *
    FiveYearGain 0.32540 0.04442 7.325 1.11e-09 ***
    SalaPreMBA 2.50162 0.23279 10.746 3.98e-15 ***
    Tuition 0.21477 0.10131 2.120 0.03853 *
    GMAT -0.15296 0.05185 -2.950 0.00466 **

    可见各系数的P值均小于0.05,因此不显著,变量都具有意义。
    因此方程可以投入使用,判定系数R2R^2= 0.9256,解释效果很好。

    全部代码如下:

    x <- read.table("E:/R/bschool0.txt",header = T,sep=",")
    dim(x)
    head(x)
    cor( x$SalaPostMBA, x$SalaPreMBA, method = "pearson")
    library(car)
    scatterplotMatrix(x, spread = F, lty.smooth = 2)
    cor(x[, 1:7]) 
    lm.sol <- lm(SalaPostMBA ~ FiveYearGain + SalaPreMBA + Tuition + GMAT,x)
    # 系数检验
    summary(lm.sol)
    # 一元画图
    lm.sol2 <- lm(x$SalaPostMBA ~  x$Tuition , data = x)
    plot(x$Tuition, x$SalaPostMBA)
    abline(lm.sol2)
    
    展开全文
  • 这是《Python数据挖掘课程》系列文章,也是我这学期大数据金融学院上课的部分内容。...随机数据集一元线性回归分析和三维回归分析案例 4.Pizza数据集一元线性回归和多元线性回归分析本篇文章为初始篇,基础文章

    这是《Python数据挖掘课程》系列文章,也是我这学期大数据金融学院上课的部分内容。本文主要讲述和分享线性回归作业中,学生们做得比较好的四个案例,经过我修改后供大家学习,内容包括:
        1.线性回归预测Pizza价格案例
        2.线性回归分析波士顿房价案例
        3.随机数据集一元线性回归分析和三维回归分析案例
        4.Pizza数据集一元线性回归和多元线性回归分析

    本篇文章为初始篇,基础文章希望对你有所帮助,如果文章中存在错误或不足支持,还请海涵~自己真的太忙了,只能挤午休或深夜的时间学习新知识,但也得加油。

    该系列github完整代码地址,欢迎点Star,谢谢!
    https://github.com/eastmountyxz/Python-for-Data-Mining

    前文参考:
    【Python数据挖掘课程】一.安装Python及爬虫入门介绍
    【Python数据挖掘课程】二.Kmeans聚类数据分析及Anaconda介绍
    【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
    【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析
    【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例
    【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
    【Python数据挖掘课程】七.PCA降维操作及subplot子图绘制
    【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
    【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据
    【python数据挖掘课程】十.Pandas、Matplotlib、PCA绘图实用代码补充
    【python数据挖掘课程】十一.Pandas、Matplotlib结合SQL语句可视化分析
    【python数据挖掘课程】十二.Pandas、Matplotlib结合SQL语句对比图分析
    【python数据挖掘课程】十三.WordCloud词云配置过程及词频分析
    【python数据挖掘课程】十四.Scipy调用curve_fit实现曲线拟合
    【python数据挖掘课程】十五.Matplotlib调用imshow()函数绘制热图
    【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据
    【python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)


     

    一. 线性回归预测Pizza价格案例
    1.数据集介绍

    本章主要使用线性回归预测Pizza的价格,由于直径大小不同的Pizza,其价格也是不同的。这是一个非常经典的案例,主要包括两个特征——Pizza直径(单位:英寸)和Pizza价格(单位:美元)。假设读者现在去到一家西餐厅,看到Pizza的菜单,现在需要通过机器学习的方法构造一个一元线性回归模型,通过分析匹萨的直径与价格的数据的线性关系,来预测任意直径匹萨的价格。 数据集共十行,包括两个特征,如下表10.1所示。

     

    2.线性回归分析

    线性回归基础步骤主要包括:
        1.导入数据集,采用列表的形式定义直接和价格两列数据。
        2.调用Scikit-learn机器学习包中线性回归模型。
        3.调用fit()函数对直径和价格进行训练。
        4.调用predice()函数对数据集进行预测。
        5.对线性回归算法进行评价。
        6.可视化分析并绘制相关图形,直观的呈现算法模型的结果。
    线性回归分析的完整代码如下:

    # -*- coding: utf-8 -*-
    from sklearn.linear_model import LinearRegression
    
    #数据集 直径、价格
    x = [[5],[6],[7],[8],[10],[11],[13],[14],[16],[18]]
    y = [[6],[7.5],[8.6],[9],[12],[13.6],[15.8],[18.5],[19.2],[20]]
    print x
    print y
    
    clf = LinearRegression()
    clf.fit(x,y)
    pre = clf.predict([12])[0]
    print(u'预测直径为12英寸的价格: $%.2f' % pre)

    通过调用sklearn机器学习包中linear_model子类的LinearRegression线性回归模型,然后fit()函数用来分析模型参数,predict()通过fit()算出模型参数构成的模型,对解释变量进行预测获得其结果。上面的代码输出如下所示:

    [[5], [6], [7], [8], [10], [11], [13], [14], [16], [18]]
    [[6], [7.5], [8.6], [9], [12], [13.6], [15.8], [18.5], [19.2], [20]]
    预测直径为12英寸的价格: $14.42

    可以发现直径为12英寸的Pizza价格为14.42美元。同时它生成了一个一元线性回归模型,即:y = a*x + b。其中,y表示响应变量的预测值,这个示例为Pizza的价格预测值;x为因变量,表示Pizza的直径。

    3.可视化分析

    接下来需要对数据集进行可视化分析,首先需要调用Matplotlib扩展包绘制直径和价格的散点图,代码如下:

    # -*- coding: utf-8 -*-
    from sklearn.linear_model import LinearRegression
    
    #数据集 直径、价格
    x = [[5],[6],[7],[8],[10],[11],[13],[14],[16],[18]]
    y = [[6],[7.5],[8.6],[9],[12],[13.6],[15.8],[18.5],[19.2],[20]]
    print x
    print y
    
    clf = LinearRegression()
    clf.fit(x,y)
    pre = clf.predict([12])[0]
    print(u'预测直径为12英寸的价格: $%.2f' % pre)
    x2 = [[0],[12],[15],[25]]
    y2 = clf.predict(x2)
    
    import matplotlib.pyplot as plt
    plt.figure()
    plt.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体
    plt.title(u"线性回归预测Pizza直径和价格")
    plt.xlabel(u"x")
    plt.ylabel(u"price")
    plt.axis([0,25,0,25])
    plt.scatter(x,y,marker="s",s=20)
    plt.plot(x2,y2,"g-")
    plt.show()

    输出图形如下所示,其中(x2,y2)是训练后的回归模型进行预测的结果,为一条直线。

     

     

    二. 线性回归分析波士顿房价案例

    1.数据集

    波士顿房价数据集(Boston House Price Dataset)包含对房价的预测(以千美元计数),给定的条件是房屋及其相邻房屋的详细信息。该数据集涉及一个回归问题,通过进行线性回归分析可以预测波斯顿房价数据。而且由于Sklearn机器学习包中已经自带了该数据集,故直接引用该数据集,获取其中某两列数据,对其进行分析预测。

    该数据集的下载地址为:http://lib.stat.cmu.edu/datasets/boston,也可以从UCI机器学习知识库中下载,每个类的观察值数量是均等的,共有 506 行数据,13 个输入变量和1个输出变量,数据集如下图11.1所示,这些数据从1978年开始统计,涵盖了波士顿不同郊区房屋14中特征信息。

    在做数据分析过程中,通常需要将数据集划分为训练集和预测集,这里作者将前406行作为训练集,最后100行作为预测集,划分代码如下:
    # -*- coding: utf-8 -*-
    #导入数据集boston
    from sklearn.datasets import load_boston
    import numpy as np 
    boston = load_boston()    
    print boston.data.shape, boston.target.shape
    print boston.data[0]
    print boston.target
    
    #划分数据集
    boston_temp = boston.data[:, np.newaxis, 5]   
    x_train = boston_temp[:-100]      #训练样本  
    x_test = boston_temp[-100:]       #测试样本 后100行  
    y_train = boston.target[:-100]    #训练标记  
    y_test = boston.target[-100:]     #预测对比标记

    2.线性回归分析

    线性回归过程主要如下:
        1.导入数据集,波士顿房价数据。
        2.划分数据集为训练集和测试集,采用406和100的比例。
        3.导入线性回归模型LinearRegression。
        4.对训练集进行训练操作,同时预测数据集结果。
        5.可视化画图分析及结果评估。

    线性回归分析波士顿房价数据集的代码如下:

    # -*- coding: utf-8 -*-
    from sklearn.datasets import load_boston
    import numpy as np 
    boston = load_boston()    
    print boston.data.shape, boston.target.shape
    
    #划分数据集
    boston_temp = boston.data[:, np.newaxis, 5]   
    x_train = boston_temp[:-100]      #训练样本  
    x_test = boston_temp[-100:]       #测试样本 后100行  
    y_train = boston.target[:-100]    #训练标记  
    y_test = boston.target[-100:]     #预测对比标记
    
    #回归分析
    from sklearn.linear_model import LinearRegression 
    clf = LinearRegression()  
    clf.fit(x_train, y_train)  
    
    #算法评估
    pre = clf.predict(x_test)
    print u"预测结果", pre
    print u"真实结果", y_test
    cost = np.mean(y_test-pre)**2  
    print u'平方和计算:', cost  
    print u'系数', clf.coef_   
    print u'截距', clf.intercept_    
    print u'方差', clf.score(x_test, y_test) 
    
    #绘图分析
    import matplotlib.pyplot  as plt
    plt.title(u'LinearRegression Boston')     
    plt.xlabel(u'x')                   
    plt.ylabel(u'price')          
    plt.scatter(x_test, y_test, color = 'black')  
    plt.plot(x_test, clf.predict(x_test), color='blue', linewidth = 3)
    for idx, m in enumerate(x_test):  
        plt.plot([m, m],[y_test[idx],pre[idx]], 'r-')    
    plt.show()   

    对该算法进行评估,线性回归算法可以计算线性方程的系数和截距,即coef_为系数、intercept_为截距。同时可以通过clf.score(x_test,y_test)计算其方差。

    平方和计算: 32.6621132918
    系数 [ 9.52462596]
    截距 -36.1965235122
    方差 -1.83449598504  

    输出如下图所示:

     

     

    三. 随机数据集线性回归分析和三维回归分析案例

    1.随机数据集

    本章将生成一个随机数据集供您使用,通过该数据集的线性回归分析,您也能了解到相关应用知识。同时,将进一步深入讲解线性回归拟合方程的知识,希望本章对您有所帮助。

    随机数生成主要调用Numpy扩展包中的random函数或arange,调用函数arange(0,50,0.2)实现,随机生成0到50个数据,其间隔为0.2。得到X数据集之后,作者随机定义一个函数绘制对应的Y坐标,再调用Matplotlib扩展包可以对数据集进行可视化分析,并绘制相关的散点图。核心代码如下:

    import numpy as np
    import math
    X =  np.arange(0,50,0.2) 
    print X
    xArr = []
    yArr = []
    for n in X:
        xArr.append(n)
        y = 0.7*n + np.random.uniform(0,1)*math.sin(n)*2 - 3
        yArr.append(y)
    
    import matplotlib.pyplot as plt
    plt.plot(X, yArr, 'go')
    plt.show()

    输出如下图所示:

    接下来需要调用Sklearn机器学习扩展包相关函数进行线性回归分析。


    2.线性回归

    完整代码如下:

    # -*- coding: utf-8 -*-
    import numpy as np
    import math
    
    #随机数生成
    X =  np.arange(0,50,0.2) 
    print X
    xArr = []
    yArr = []
    for n in X:
        xArr.append(n)
        y = 0.7*n + np.random.uniform(0,1)*math.sin(n)*2 - 3
        yArr.append(y)
    
    #线性回归分析
    from sklearn.linear_model import LinearRegression
    clf = LinearRegression()
    print clf
    X =  np.array(X).reshape((len(X),1))     #list转化为数组
    yArr = np.array(yArr).reshape((len(X),1))
    clf.fit(X,yArr)
    pre = clf.predict(X)
    
    import matplotlib.pyplot as plt
    plt.plot(X, yArr, 'go')
    plt.plot(X, pre, 'r', linewidth=3)
    plt.show()

    输出如下所示:

    同时补充一段3D绘制的代码,随机坐标生成后,需要调用mpl_toolkits.mplot3d子类中Axes3D类生成对应的3D图形。使用线性回归对其进行分析过程中,不同于二维可视化分析,三维需要将xx和yy标定成输入变量,zz为输出变量进行训练,再预测其结果。完整代码如下所示:

    # -*- coding: utf-8 -*-
    import numpy as np
    from sklearn import linear_model
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import math
    
    #linspace:开始值、终值和元素个数创建表示等差数列的一维数组
    xx, yy = np.meshgrid(np.linspace(0,10,20), np.linspace(0,100,20))
    zz = 2.4 * xx + 4.5 * yy + np.random.randint(0,100,(20,20))
    #构建成特征、值的形式
    X, Z = np.column_stack((xx.flatten(),yy.flatten())), zz.flatten()
    #线性回归分析
    regr = linear_model.LinearRegression()
    regr.fit(X, Z)
    #预测的一个特征
    x_test = np.array([[15.7, 91.6]])
    print regr.predict(x_test)
    #画图可视化分析
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.scatter(xx, yy, zz) #真实点
    #拟合的平面
    ax.plot_wireframe(xx, yy, regr.predict(X).reshape(20,20))
    ax.plot_surface(xx, yy, regr.predict(X).reshape(20,20), alpha=0.3)
    plt.show()

    输出如下图所示:

     

    四. Pizza数据集一元和多元线性回归分析

    完整代码如下:

    # -*- coding: utf-8 -*-
    """
    Created on Sun Nov 26 23:31:16 2017
    
    @author: yxz15
    """
    
    # -*- coding: utf-8 -*-
    from sklearn.linear_model import LinearRegression
    
    #数据集 直径、价格
    x = [[5],[6],[7],[8],[10],[11],[13],[14],[16],[18]]
    y = [[6],[7.5],[8.6],[9],[12],[13.6],[15.8],[18.5],[19.2],[20]]
    print x
    print y
    
    clf = LinearRegression()
    clf.fit(x,y)
    pre = clf.predict([12])[0]
    print(u'预测直径为12英寸的价格: $%.2f' % pre)
    x2 = [[0],[12],[15],[25]]
    y2 = clf.predict(x2)
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.figure()
    plt.axis([0,25,0,25])
    plt.scatter(x,y,marker="s",s=20)
    plt.plot(x2,y2,"g-")
    
    #导入多项式回归模型
    from sklearn.preprocessing import PolynomialFeatures
    xx = np.linspace(0,25,100) #0到25等差数列
    quadratic_featurizer = PolynomialFeatures(degree = 2) #实例化一个二次多项式
    x_train_quadratic = quadratic_featurizer.fit_transform(x) #用二次多项式多样本x做变换
    X_test_quadratic = quadratic_featurizer.transform(x2)
    regressor_quadratic = LinearRegression()
    regressor_quadratic.fit(x_train_quadratic, y)
    xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))# 把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
    
    plt.plot(xx, regressor_quadratic.predict(xx_quadratic),
             label="$y = ax^2 + bx + c$",linewidth=2,color="r")
    plt.legend()
    plt.show()

    输出如下图所示:

    四次方拟合,核心代码如下:

    #导入多项式回归模型
    from sklearn.preprocessing import PolynomialFeatures
    xx = np.linspace(0,25,100) #0到25等差数列
    quadratic_featurizer = PolynomialFeatures(degree = 4) #实例化一个二次多项式
    x_train_quadratic = quadratic_featurizer.fit_transform(x) #用二次多项式多样本x做变换
    X_test_quadratic = quadratic_featurizer.transform(x2)
    regressor_quadratic = LinearRegression()
    regressor_quadratic.fit(x_train_quadratic, y)
    xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))# 把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
    
    plt.plot(xx, regressor_quadratic.predict(xx_quadratic),
             label="$y = ax^4 + bx + c$",linewidth=2,color="r")
    plt.legend()
    plt.show()

    输出如下图所示:

    希望文章对你有所帮助,尤其是我的学生,如果文章中存在错误或不足之处,还请海涵。给绿幺准备惊喜中~
    (By:Eastmount 2017-11-26 深夜12点  http://blog.csdn.net/eastmount/ )

     

     

    展开全文
  • MATLAB一元线性回归分析

    千次阅读 2019-09-25 07:02:00
    MATLAB一元线性回归分析应用举例 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ huigui.m function [b,bint,r,rint,states,sima2,p,y0,zxqj]=huigui(x,y,x0) %x –p元线性模型自变量的n个观测值...
  • 基于EXCEL的一元线性回归案例:广告与销量基于EXCEL的一元线性回归案例:广告与销量业务分析一元线性回归步骤业务解读 基于EXCEL的一元线性回归案例:广告与销量 一元线性回归分析只有一个自变量(自变量x和因变量...
  • 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条曲线近似表示,则称为一元非线性回归分析一元二次方程: 一元三次方程: 一元 n 次方程: (二)案例 1.建模逻辑 一元非线性回归方程转为...
  • ... 线性回归分析一个变量与另一个变量的关系的方法。 线性回归的意思就是指x与y之间的关系是线性的。 y = wx+b 求解的步骤: 1. 确定模型。 这里选择y = ...
  • 基于spss的一元线性回归与多元线性回归案例,个人整理出的,包含了部分案例、实验报告、题目,及部分题目答案,适合作为spss、MATLAB等软件数据分析题目联系
  • &amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;...目标:写清楚一元线性回归的全部过程 ...2. 画散点图确定回归模型scatter diagram 线性相关: 3. 显著性检验:皮尔逊相关系数Correlation c
  • 一元线性回归分析的R语言实现(RStudio)

    万次阅读 多人点赞 2019-11-09 19:43:13
    回归分析是一种应用广泛的数理统计方法,它是研究变量与变量之间的相关关系,这种关系大致分为两类:确定性关系(能用函数精确描述)和非确定性关系(不能用函数描述)。 变量间的非确定性关系称为相关关系。 在回归...
  • 任何事物和人都不是以个体存在的,它们都被复杂的关系链所围绕着,... 下面用SPSS采用回归—线性分析的方式来分析一下:居民总储蓄 和 “居民总消费”情况是否具备相关性,如果具备相关性,那相关关系的密切程度为...
  • 任何事物和人都不是以个体存在的,它们都被复杂的关系链所... 下面用SPSS采用回归—线性分析的方式来分析一下:居民总储蓄 和 “居民总消费”情况是否具备相关性,如果具备相关性,那相关关系的密切程度为多少。 下...
  • #coding=utf/8 ...#function:线性回归 #author:Karen import pandas as pd import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt from sklearn import preprocessing import ...
  • 2 2 Matlab 实现多元回归实例 一一般... 这时就可以用到回归分析的方法如果 只考虑 f 是线性函数的情形当自变量只有一个时即 x ? ? x1 , ,xn ? 中 n ?1 时称为一元线性回归当自变量有多个时即 x ? ? x1 , ,xn ? 中 n ?2
  • 目标变量为连续型变量的模型称为回归模型; 目标变量为分类型变量的模型称为分类模型。 今天,先从SPSS Modeler 进行一元线性回归分析开始学习。 案例:数据文件“房产价格分析V1.xlsx”。 数据展示: 类型节点中...
  • [Python] 一元线性回归分析实例

    千次阅读 2018-06-24 15:22:54
    本文通过一个简单的例子:预测房价,来探讨怎么用python做一元线性回归分析。 1. 预测房价 房价是一个很火的话题,现在我们拿到一组数据,是房子的大小(平方英尺)和房价(美元)之间的对应关系,如下(csv数据...
  • 1. 一元线性回归分析效果预览 2. matlab完整实现代码 %读取数据,绘制散点图** HeadData = xlsread('examp08_02.xls'); %从Excel文件读取数据 x = HeadData(:, 4); % 提取HeadData矩阵的第4列数据,即年龄数据 y ...
  • 2.利用表格1中第一列和第二列做一元回归分析 利用matlab编译程序如下: clear;clc; load('a.mat');%导入数据 n=length(a); X=a(:,1);%提取自变量 X1=[ones(n,1),X];%自变量矩阵前加一列1 Y=a(:,2);%...
  • 本文介绍回归模型的原理知识,包括线性回归、多项式回归和逻辑回归,并详细介绍Python Sklearn机器学习库的LinearRegression和LogisticRegression算法及回归分析实例。进入基础文章,希望对您有所帮助。
  • linear_mod_1.py # coding=utf-8 import os, sys import numpy as np import matplotlib.pyplot as plt ...# python一元线性回归分析实例:预测基金净值 if len(sys.argv) ==2: fcode = sys.argv[1] else: prin
  • 2.一元线性回归 结论:x与y有一定关系 从sklearn线性模型导入线性回归 预测年资 3.多项式回归 poly_reg把PF转为二次项 不过在这里,还是出现一点小意外,这个bug,目前还不知道怎么解决 4 多元回归分析房屋...
  • 用Excel做回归分析的详细步骤 一、什么是回归分析法 “回归分析”是解析“注目变量”和“因于变量”并明确两者关系的统计方法。此时,我们把因子变量称为“说明变量”,把注目变量称为“目标变量址(被说明变量)”。...

空空如也

空空如也

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

一元回归模型分析案例