精华内容
下载资源
问答
  • Python实现多元线性回归

    万次阅读 多人点赞 2018-04-12 21:39:25
    Python实现多元线性回归 线性回归介绍 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的...

    Python实现多元线性回归

     

     

    线性回归介绍

     

    线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
    线性回归属于回归问题。对于回归问题,解决流程为: 
    给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数。这里给定的数据集取名叫训练集(Training Set)。不能所有数据都拿来训练,要留一部分验证模型好不好使,这点以后说。先列举几个几个典型的模型:
    ● 最基本的单变量线性回归: 
    形如h(x)=theta0+theta1*x1
    ● 多变量线性回归: 
    形如h(x)=theta0+theta1*x1+theta2*x2+theta3*x3
    ● 多项式回归(Polynomial Regression): 
    形如h(x)=theta0+theta1*x1+theta2*(x2^2)+theta3*(x3^3) 
    或者h(x)=ttheta0+theta1*x1+theta2*sqr(x2) 
    但是可以令x2=x2^2,x3=x3^3,于是又将其转化为了线性回归模型。虽然不能说多项式回归问题属于线性回归问题,但是一般我们就是这么做的。
    ● 所以最终通用表达式就是: 
    这里写图片描述

     

     

    数据导入与清洗

     

    对于数据导入来说,可以利用pandas内的read_csv的函数来对数据进行导入操作,在进行多元线性回归之间通过简单线性回归来展现线性回归的特性和结果之后再延伸至多元线性回归。

     

    在进行数据导入之间需要导入进行线性回归的包:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from pandas import DataFrame,Series
    from sklearn.cross_validation import train_test_split
    from sklearn.linear_model import LinearRegression

    我们利用pandas和numpy对数据进行操作,使用matplotlib进行图像化,使用sklearn进行数据集训练与模型导入。

     

    简单线性回归

     

    对于学生来说,所学习的时间和考试的成绩挂钩,所学习的时间与考试的成绩也是呈线性相关。创建一个数据集来描述学生学习时间与成绩的关系并且做简单的线性回归。

     

    in:

    #创建数据集
    examDict  = {'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,
                         2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
                 '分数':[10,22,13,43,20,22,33,50,62,
                       48,55,75,62,73,81,76,64,82,90,93]}
    
    #转换为DataFrame的数据格式
    examDf = DataFrame(examDict)

     

    通过DataFrame的函数将字典转化为所需要的数据集,也就是学生成绩与考试成绩的数据集。且关于pandas的数据内容Series与DataFrame可以查看关于pandas的博客了解点击打开链接

     

    out:

      分数  学习时间
    0   10  0.50
    1   22  0.75
    2   13  1.00
    3   43  1.25
    4   20  1.50
    5   22  1.75
    6   33  1.75
    7   50  2.00
    8   62  2.25
    9   48  2.50
    10  55  2.75
    11  75  3.00
    12  62  3.25
    13  73  3.50
    14  81  4.00
    15  76  4.25
    16  64  4.50
    17  82  4.75
    18  90  5.00
    19  93  5.50

     

    从上面的数据可以看到数据的特征值与其标签,学生所学习的时间就是所需要的特征值,而成绩就是通过特征值所反应的标签。在这个案例中要对数据进行观测来反应学习时间与成绩的情况,将利用散点图来实现简单的观测。

     

    in:

    #绘制散点图
    plt.scatter(examDf.分数,examDf.学习时间,color = 'b',label = "Exam Data")
    
    #添加图的标签(x轴,y轴)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.show()

    out:

     

    从上图可以看到对于分数和时间来说存在相应的线性关系,且俩数据间相关性较强。

    在此可以通过相关性来衡量两个变量因素的相关密切程度。

    相关系数是用以反映变量之间相关关系密切程度的统计指标。

    r(相关系数) = x和y的协方差/(x的标准差*y的标准差) == cov(x,y)/σx*σy(即person系数)

    对于相关性强度来说的化有以下的关系:

    0~0.3 弱相关

    0.3~0.6  中等程度相关

    0.6~1  强相关

     

    in:

    rDf = examDf.corr()
    print(rDf)

    out:

    分数      学习时间
    分数    1.000000  0.923985
    学习时间  0.923985  1.000000

     

    pandas中的数学统计函数D.corr()可以反应数据间的相关性关系,可从表值中反应出学习时间与分数之间的相关性为强相关(0.6~1)。对于简单线性回归来来说,简单回归方程为: y = a + b*x (模型建立最佳拟合线)最佳拟合线也是需要通过最小二乘法来实现其作用。对于OLS即最小二乘法我们需要知道的一个关系为点误差,点误差 = 实际值 - 预测值,而误差平方和(Sum of square error) SSE = Σ(实际值-预测值)^2,最小二乘法就是基于SSE实现,最小二乘法 : 使得误差平方和最小(最佳拟合)。解释完简单线性回归后进行对训练集和测试集的创建,将会使用train_test_split函数来创建(train_test_split是存在与sklearn中的函数)

     

    in:

    #将原数据集拆分训练集和测试集
    X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=.8)
    #X_train为训练数据标签,X_test为测试数据标签,exam_X为样本特征,exam_y为样本标签,train_size 训练数据占比
    
    print("原始数据特征:",exam_X.shape,
          ",训练数据特征:",X_train.shape,
          ",测试数据特征:",X_test.shape)
    
    print("原始数据标签:",exam_Y.shape,
          ",训练数据标签:",Y_train.shape,
          ",测试数据标签:",Y_test.shape)
    
    #散点图
    plt.scatter(X_train, Y_train, color="blue", label="train data")
    plt.scatter(X_test, Y_test, color="red", label="test data")
    
    #添加图标标签
    plt.legend(loc=2)
    plt.xlabel("Hours")
    plt.ylabel("Pass")
    #显示图像
    plt.savefig("tests.jpg")
    plt.show()

    out:

    原始数据特征: (20,) ,训练数据特征: (16,) ,测试数据特征: (4,)
    原始数据标签: (20,) ,训练数据标签: (16,) ,测试数据标签: (4,)

     

    tips:由于训练集随机分配的原因每一次运行的结果(点的分布情况,训练集内的情况,测试集内的情况)不都相同在创建数据集之后我们需要将训练集放入skleran中的线性回归模型(LinearRegression())进行训练,使用函数种的.fit函数进行模型的训练操作。

     

    in:

    model = LinearRegression()
    
    #对于模型错误我们需要把我们的训练集进行reshape操作来达到函数所需要的要求
    # model.fit(X_train,Y_train)
    
    #reshape如果行数=-1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组
    #因为model需要二维的数组来进行拟合但是这里只有一个特征所以需要reshape来转换为二维数组
    X_train = X_train.values.reshape(-1,1)
    X_test = X_test.values.reshape(-1,1)
    
    model.fit(X_train,Y_train)

     

    在模型训练完成之后会得到所对应的方程式(线性回归方程式)需要利用函数中的intercept_与coef_来得到

     

    a  = model.intercept_#截距
    
    b = model.coef_#回归系数
    
    print("最佳拟合线:截距",a,",回归系数:",b)

     

    out:

     

    最佳拟合线:截距 7.5580754557 ,回归系数: [ 16.28401865]

     

    由上述的最佳拟合线的截距和回归系数可以算出其线性回归线方程:y = 7.56 + 16.28*x

    接下来需要对模型进行预测和对模型进行评价,在进行评价之间将会引入一个决定系数r平方的概念。

    对于决定系数R平方常用于评估模型的精确度。

    下列为R平方的计算公式:

    ● y误差平方和 = Σ(y实际值 - y预测值)^2

    ● y的总波动 = Σ(y实际值 - y平均值)^2

    ● 有多少百分比的y波动没有被回归拟合线所描述 = SSE/总波动

    ● 有多少百分比的y波动被回归线描述 = 1 - SSE/总波动 = 决定系数R平方

    对于决定系数R平方来说

    (1) 回归线拟合程度:有多少百分比的y波动刻印有回归线来描述(x的波动变化)

    (2)值大小:R平方越高,回归模型越精确(取值范围0~1),1无误差,0无法完成拟合对于预测来说我们需要运用函数中的model.predict()来得到预测值

     

    in:

    #训练数据的预测值
    y_train_pred = model.predict(X_train)
    #绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred
    plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")
    
    #测试数据散点图
    plt.scatter(X_test, Y_test, color='red', label="test data")
    
    #添加图标标签
    plt.legend(loc=2)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.savefig("lines.jpg")
    plt.show()
    
    
    score = model.score(X_test,Y_test)
    
    print(score)

     

    out:

    score : 0.834706696876

     

    多元线性回归

     

    在间单线性回归的例子中可以得到与线性回归相关的分析流程,接下来对多元线性回归进行分析对于多元线性回归前面已经提到,形如h(x)=theta0+theta1*x1+theta2*x2+theta3*x3http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv(已经失效)来下载数据集 Advertising.csv,其数据描述了一个产品的销量与广告媒体的投入之间影响。将会利用pandas的pd.read()来读取数据。

     

     

    in:

    #通过read_csv来读取我们的目的数据集
    adv_data = pd.read_csv("C:/Users/Administrator/Desktop/Advertising.csv")
    #清洗不需要的数据
    new_adv_data = adv_data.ix[:,1:]
    #得到我们所需要的数据集且查看其前几列以及数据形状
    print('head:',new_adv_data.head(),'\nShape:',new_adv_data.shape)

    out:

    head:       TV  radio  newspaper  sales
           0  230.1   37.8       69.2   22.1
           1   44.5   39.3       45.1   10.4
           2   17.2   45.9       69.3    9.3
           3  151.5   41.3       58.5   18.5
           4  180.8   10.8       58.4   12.9 
    Shape:  (200, 4)

     

    对于上述的数据可以得到数据中

    标签值(sales):

    • Sales:对应产品的销量

    特征值(TV,Radio,Newspaper):

    • TV:对于一个给定市场中单一产品,用于电视上的广告费用(以千为单位)
    • Radio:在广播媒体上投资的广告费用
    • Newspaper:用于报纸媒体的广告费用

    在这个案例中,通过不同的广告投入,预测产品销量。因为响应变量是一个连续的值,所以这个问题是一个回归问题。数据集一共有200个观测值,每一组观测对应一个市场的情况。接下里对数据进行描述性统计,以及寻找缺失值(缺失值对模型的影响较大,如发现缺失值应替换或删除),且利用箱图来从可视化方面来查看数据集,在描述统计之后对数据进行相关性分析,以此来查找数据中特征值与标签值之间的关系。

     

    in:

    #数据描述
    print(new_adv_data.describe())
    #缺失值检验
    print(new_adv_data[new_adv_data.isnull()==True].count())
    
    new_adv_data.boxplot()
    plt.savefig("boxplot.jpg")
    plt.show()
    ##相关系数矩阵 r(相关系数) = x和y的协方差/(x的标准差*y的标准差) == cov(x,y)/σx*σy
    #相关系数0~0.3弱相关0.3~0.6中等程度相关0.6~1强相关
    print(new_adv_data.corr())

     

    out:

                   TV       radio   newspaper       sales
    count  200.000000  200.000000  200.000000  200.000000
    mean   147.042500   23.264000   30.554000   14.022500
    std     85.854236   14.846809   21.778621    5.217457
    min      0.700000    0.000000    0.300000    1.600000
    25%     74.375000    9.975000   12.750000   10.375000
    50%    149.750000   22.900000   25.750000   12.900000
    75%    218.825000   36.525000   45.100000   17.400000
    max    296.400000   49.600000  114.000000   27.000000
    TV           0
    radio        0
    newspaper    0
    sales        0
    dtype: int64
                     TV     radio  newspaper     sales
    TV         1.000000  0.054809   0.056648  0.782224
    radio      0.054809  1.000000   0.354104  0.576223
    newspaper  0.056648  0.354104   1.000000  0.228299
    sales      0.782224  0.576223   0.228299  1.000000

     

     

     

     

    可以从corr表中看出,TV特征和销量是有比较强的线性关系的,而Radio和Sales线性关系弱一些但是也是属于强相关的,Newspaper和Sales线性关系更弱。接下来建立散点图来查看数据里的数据分析情况以及对相对应的线性情况,将使用seaborn的pairplot来绘画3种不同的因素对标签值的影响

     

    in:

    # 通过加入一个参数kind='reg',seaborn可以添加一条最佳拟合直线和95%的置信带。
    sns.pairplot(new_adv_data, x_vars=['TV','radio','newspaper'], y_vars='sales', size=7, aspect=0.8,kind = 'reg')
    plt.savefig("pairplot.jpg")
    plt.show()

    out:

     

    上如图种所示,可以了解到不同的因素对销量的预测线(置信度= 95 %),也可可以大致看出不同特征对于标签值的影响与相关关系在了解了数据的各种情况后需要对数据集建立模型,在建立模型的第一步我们将建立训练集与测试集同样的将会使用train_test_split函数来创建(train_test_split是存在与sklearn中的函数)

     

    in:

    X_train,X_test,Y_train,Y_test = train_test_split(new_adv_data.ix[:,:3],new_adv_data.sales,train_size=.80)
    
    print("原始数据特征:",new_adv_data.ix[:,:3].shape,
          ",训练数据特征:",X_train.shape,
          ",测试数据特征:",X_test.shape)
    
    print("原始数据标签:",new_adv_data.sales.shape,
          ",训练数据标签:",Y_train.shape,
          ",测试数据标签:",Y_test.shape)

    out:

    原始数据特征: (200, 3) ,训练数据特征: (160, 3) ,测试数据特征: (40, 3)
    原始数据标签: (200,) ,训练数据标签: (160,) ,测试数据标签: (40,)

     

    建立初步的数据集模型之后将训练集中的特征值与标签值放入LinearRegression()模型中且使用fit函数进行训练,在模型训练完成之后会得到所对应的方程式(线性回归方程式)需要利用函数中的intercept_与coef_。

     

    in:

    model = LinearRegression()
    
    model.fit(X_train,Y_train)
    
    a  = model.intercept_#截距
    
    b = model.coef_#回归系数
    
    print("最佳拟合线:截距",a,",回归系数:",b)

     

    out:

    最佳拟合线:截距 2.79361553401 ,回归系数: [ 0.04711495  0.18719875 -0.00185999]

     

    即所得的多元线性回归模型的函数为 : y = 2.79 + 0.04 * TV + 0.187 * Radio - 0.002 * Newspaper,对于给定了Radio和Newspaper的广告投入,如果在TV广告上每多投入1个单位,对应销量将增加0.04711个单位。就是加入其它两个媒体投入固定,在TV广告上每增加1000美元(因为单位是1000美元),销量将增加47.11(因为单位是1000)。但是大家注意这里的newspaper的系数居然是负数,所以我们可以考虑不使用newspaper这个特征。接下来对数据集进行预测与模型测评。同样使用predict与score函数来获取所需要的预测值与得分。

     

    in:

    #R方检测
    #决定系数r平方
    #对于评估模型的精确度
    #y误差平方和 = Σ(y实际值 - y预测值)^2
    #y的总波动 = Σ(y实际值 - y平均值)^2
    #有多少百分比的y波动没有被回归拟合线所描述 = SSE/总波动
    #有多少百分比的y波动被回归线描述 = 1 - SSE/总波动 = 决定系数R平方
    #对于决定系数R平方来说1) 回归线拟合程度:有多少百分比的y波动刻印有回归线来描述(x的波动变化)
    #2)值大小:R平方越高,回归模型越精确(取值范围0~1),1无误差,0无法完成拟合
    score = model.score(X_test,Y_test)
    
    print(score)
    
    #对线性回归进行预测
    
    Y_pred = model.predict(X_test)
    
    print(Y_pred)
    
    plt.plot(range(len(Y_pred)),Y_pred,'b',label="predict")
    #显示图像
    plt.savefig("predict.jpg")
    plt.show()

     

    out:

    score : 0.871755480886
    predict :[ 14.17217173  17.42866884  16.81933374  18.16079802   7.64784604
      17.8670496   16.66488531  14.98782916   9.41023763  16.21679696
      19.32696651   7.76788593  23.34231219   3.59006148  13.15777984
      24.26609169  15.47571902  15.39542342  13.98430709  12.65446708
       7.59818691  13.85179898  12.16325619  10.34902817  11.9813427
      11.05726513   8.13405159  21.94038306  16.4388483   14.06506403
       4.36052153   6.45326681   7.55083036  24.25987365  17.13603444
      14.04814117   7.28664465  17.24163581  20.42745536   6.55512244]

    预测集与源数据集的对比如下:

     

    模型的检测方法-ROC曲线:

     ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC曲线评价方法适用的范围更为广泛。

    1.ROC曲线能很容易地查出任意界限值时的对疾病的识别能力。

    2.选择最佳的诊断界限值。ROC曲线越靠近左上角,试验的准确性就越高。最靠近左上角的ROC曲线的点是错误最少的最好阈值,其假阳性和假阴性的总数最少。

    3.两种或两种以上不同诊断试验对疾病识别能力的比较。在对同一种疾病的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别计算各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的 AUC最大,则哪一种试验的诊断价值最佳(百度百科)

    模型提升:

    对于提升模型准确度的方法很多,在这个模型下,可以利用异常值替换,将Newspaper中的异常值进行拉格朗日法插补,朗格朗日插补法(from scipy.interpolate import lagrange即scipy中的函数)可以间接提高模型的准确度,如果不需要插补异常值或缺失值的话可以将Newspaper不列为特征值考虑,在不考虑Newspaper为特征值的情况下,新的模型的准确率将超过旧模型,也可以从模型的准确度来反证Newspaper不适合作为特征值。

     

    整体代码如下,数据集再上面链接中可直接下载。

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from pandas import DataFrame,Series
    from sklearn.cross_validation import train_test_split
    from sklearn.linear_model import LinearRegression
    #创建数据集
    examDict  = {'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,
                         2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
                 '分数':[10,22,13,43,20,22,33,50,62,
                       48,55,75,62,73,81,76,64,82,90,93]}
    
    #转换为DataFrame的数据格式
    examDf = DataFrame(examDict)
    
    #绘制散点图
    plt.scatter(examDf.分数,examDf.学习时间,color = 'b',label = "Exam Data")
    
    #添加图的标签(x轴,y轴)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.savefig("examDf.jpg")
    plt.show()
    
    
    #相关系数矩阵 r(相关系数) = x和y的协方差/(x的标准差*y的标准差) == cov(x,y)/σx*σy
    #相关系数0~0.3弱相关0.3~0.6中等程度相关0.6~1强相关
    rDf = examDf.corr()
    print(rDf)
    
    #回归方程 y = a + b*x (模型建立最佳拟合线)
    #点误差 = 实际值 - 拟合值
    #误差平方和(Sum of square error) SSE = Σ(实际值-预测值)^2
    #最小二乘法 : 使得误差平方和最小(最佳拟合)
    exam_X  =  examDf.loc[:,'学习时间']
    exam_Y  =  examDf.loc[:,'分数']
    
    #将原数据集拆分训练集和测试集
    X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=.8)
    #X_train为训练数据标签,X_test为测试数据标签,exam_X为样本特征,exam_y为样本标签,train_size 训练数据占比
    
    print("原始数据特征:",exam_X.shape,
          ",训练数据特征:",X_train.shape,
          ",测试数据特征:",X_test.shape)
    
    print("原始数据标签:",exam_Y.shape,
          ",训练数据标签:",Y_train.shape,
          ",测试数据标签:",Y_test.shape)
    
    #散点图
    plt.scatter(X_train, Y_train, color="blue", label="train data")
    plt.scatter(X_test, Y_test, color="red", label="test data")
    
    #添加图标标签
    plt.legend(loc=2)
    plt.xlabel("Hours")
    plt.ylabel("Pass")
    #显示图像
    plt.savefig("tests.jpg")
    plt.show()
    
    
    
    model = LinearRegression()
    
    #对于下面的模型错误我们需要把我们的训练集进行reshape操作来达到函数所需要的要求
    # model.fit(X_train,Y_train)
    
    #reshape如果行数=-1的话可以使我们的数组所改的列数自动按照数组的大小形成新的数组
    #因为model需要二维的数组来进行拟合但是这里只有一个特征所以需要reshape来转换为二维数组
    X_train = X_train.values.reshape(-1,1)
    X_test = X_test.values.reshape(-1,1)
    
    model.fit(X_train,Y_train)
    
    a  = model.intercept_#截距
    
    b = model.coef_#回归系数
    
    print("最佳拟合线:截距",a,",回归系数:",b)
    
    #决定系数r平方
    #对于评估模型的精确度
    #y误差平方和 = Σ(y实际值 - y预测值)^2
    #y的总波动 = Σ(y实际值 - y平均值)^2
    #有多少百分比的y波动没有被回归拟合线所描述 = SSE/总波动
    #有多少百分比的y波动被回归线描述 = 1 - SSE/总波动 = 决定系数R平方
    #对于决定系数R平方来说1) 回归线拟合程度:有多少百分比的y波动刻印有回归线来描述(x的波动变化)
    #2)值大小:R平方越高,回归模型越精确(取值范围0~1),1无误差,0无法完成拟合
    
    plt.scatter(X_train, Y_train, color='blue', label="train data")
    
    #训练数据的预测值
    y_train_pred = model.predict(X_train)
    #绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred
    plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")
    
    #测试数据散点图
    plt.scatter(X_test, Y_test, color='red', label="test data")
    
    #添加图标标签
    plt.legend(loc=2)
    plt.xlabel("Hours")
    plt.ylabel("Score")
    #显示图像
    plt.savefig("lines.jpg")
    plt.show()
    
    
    score = model.score(X_test,Y_test)
    
    print(score)
    import pandas as pd
    import seaborn as sns
    from sklearn.linear_model import LinearRegression
    import matplotlib.pyplot as plt
    from sklearn.cross_validation import train_test_split
    
    #通过read_csv来读取我们的目的数据集
    adv_data = pd.read_csv("C:/Users/Administrator/Desktop/Advertising.csv")
    #清洗不需要的数据
    new_adv_data = adv_data.ix[:,1:]
    #得到我们所需要的数据集且查看其前几列以及数据形状
    print('head:',new_adv_data.head(),'\nShape:',new_adv_data.shape)
    
    #数据描述
    print(new_adv_data.describe())
    #缺失值检验
    print(new_adv_data[new_adv_data.isnull()==True].count())
    
    new_adv_data.boxplot()
    plt.savefig("boxplot.jpg")
    plt.show()
    ##相关系数矩阵 r(相关系数) = x和y的协方差/(x的标准差*y的标准差) == cov(x,y)/σx*σy
    #相关系数0~0.3弱相关0.3~0.6中等程度相关0.6~1强相关
    print(new_adv_data.corr())
    
    #建立散点图来查看数据集里的数据分布
    #seaborn的pairplot函数绘制X的每一维度和对应Y的散点图。通过设置size和aspect参数来调节显示的大小和比例。
    # 可以从图中看出,TV特征和销量是有比较强的线性关系的,而Radio和Sales线性关系弱一些,Newspaper和Sales线性关系更弱。
    # 通过加入一个参数kind='reg',seaborn可以添加一条最佳拟合直线和95%的置信带。
    sns.pairplot(new_adv_data, x_vars=['TV','radio','newspaper'], y_vars='sales', size=7, aspect=0.8,kind = 'reg')
    plt.savefig("pairplot.jpg")
    plt.show()
    
    #利用sklearn里面的包来对数据集进行划分,以此来创建训练集和测试集
    #train_size表示训练集所占总数据集的比例
    X_train,X_test,Y_train,Y_test = train_test_split(new_adv_data.ix[:,:3],new_adv_data.sales,train_size=.80)
    
    print("原始数据特征:",new_adv_data.ix[:,:3].shape,
          ",训练数据特征:",X_train.shape,
          ",测试数据特征:",X_test.shape)
    
    print("原始数据标签:",new_adv_data.sales.shape,
          ",训练数据标签:",Y_train.shape,
          ",测试数据标签:",Y_test.shape)
    
    model = LinearRegression()
    
    model.fit(X_train,Y_train)
    
    a  = model.intercept_#截距
    
    b = model.coef_#回归系数
    
    print("最佳拟合线:截距",a,",回归系数:",b)
    #y=2.668+0.0448∗TV+0.187∗Radio-0.00242∗Newspaper
    
    #R方检测
    #决定系数r平方
    #对于评估模型的精确度
    #y误差平方和 = Σ(y实际值 - y预测值)^2
    #y的总波动 = Σ(y实际值 - y平均值)^2
    #有多少百分比的y波动没有被回归拟合线所描述 = SSE/总波动
    #有多少百分比的y波动被回归线描述 = 1 - SSE/总波动 = 决定系数R平方
    #对于决定系数R平方来说1) 回归线拟合程度:有多少百分比的y波动刻印有回归线来描述(x的波动变化)
    #2)值大小:R平方越高,回归模型越精确(取值范围0~1),1无误差,0无法完成拟合
    score = model.score(X_test,Y_test)
    
    print(score)
    
    #对线性回归进行预测
    
    Y_pred = model.predict(X_test)
    
    print(Y_pred)
    
    
    plt.plot(range(len(Y_pred)),Y_pred,'b',label="predict")
    #显示图像
    # plt.savefig("predict.jpg")
    plt.show()
    
    plt.figure()
    plt.plot(range(len(Y_pred)),Y_pred,'b',label="predict")
    plt.plot(range(len(Y_pred)),Y_test,'r',label="test")
    plt.legend(loc="upper right") #显示图中的标签
    plt.xlabel("the number of sales")
    plt.ylabel('value of sales')
    plt.savefig("ROC.jpg")
    plt.show()
    
    
    
    
    

    Advertising.csv的连接已经失效,以下是补充的数据,可复制粘贴到CSV进行保存

    TVradionewspapersales
    230.137.869.222.1
    44.539.345.110.4
    17.245.969.39.3
    151.541.358.518.5
    180.810.858.412.9
    8.748.9757.2
    57.532.823.511.8
    120.219.611.613.2
    8.62.114.8
    199.82.621.210.6
    66.15.824.28.6
    214.724417.4
    23.835.165.99.2
    97.57.67.29.7
    204.132.94619
    195.447.752.922.4
    67.836.611412.5
    281.439.655.824.4
    69.220.518.311.3
    147.323.919.114.6
    218.427.753.418
    237.45.123.512.5
    13.215.949.65.6
    228.316.926.215.5
    62.312.618.39.7
    262.93.519.512
    142.929.312.615
    240.116.722.915.9
    248.827.122.918.9
    70.61640.810.5
    292.928.343.221.4
    112.917.438.611.9
    97.21.5309.6
    265.6200.317.4
    95.71.47.49.5
    290.74.18.512.8
    266.943.8525.4
    74.749.445.714.7
    43.126.735.110.1
    22837.73221.5
    202.522.331.616.6
    17733.438.717.1
    293.627.71.820.7
    206.98.426.412.9
    25.125.743.38.5
    175.122.531.514.9
    89.79.935.710.6
    239.941.518.523.2
    227.215.849.914.8
    66.911.736.89.7
    199.83.134.611.4
    100.49.63.610.7
    216.441.739.622.6
    182.646.258.721.2
    262.728.815.920.2
    198.949.46023.7
    7.328.141.45.5
    136.219.216.613.2
    210.849.637.723.8
    210.729.59.318.4
    53.5221.48.1
    261.342.754.724.2
    239.315.527.315.7
    102.729.68.414
    131.142.828.918
    699.30.99.3
    31.524.62.29.5
    139.314.510.213.4
    237.427.51118.9
    216.843.927.222.3
    199.130.638.718.3
    109.814.331.712.4
    26.83319.38.8
    129.45.731.311
    213.424.613.117
    16.943.789.48.7
    27.51.620.76.9
    120.528.514.214.2
    5.429.99.45.3
    1167.723.111
    76.426.722.311.8
    239.84.136.912.3
    75.320.332.511.3
    68.444.535.613.6
    213.54333.821.7
    193.218.465.715.2
    76.327.51612
    110.740.663.216
    88.325.573.412.9
    109.847.851.416.7
    134.34.99.311.2
    28.61.5337.3
    217.733.55919.4
    250.936.572.322.2
    107.41410.911.5
    163.331.652.916.9
    197.63.55.911.7
    184.9212215.5
    289.742.351.225.4
    135.241.745.917.2
    222.44.349.811.7
    296.436.3100.923.8
    280.210.121.414.8
    187.917.217.914.7
    238.234.35.320.7
    137.946.45919.2
    251129.77.2
    90.40.323.28.7
    13.10.425.65.3
    255.426.95.519.8
    225.88.256.513.4
    241.73823.221.8
    175.715.42.414.1
    209.620.610.715.9
    78.246.834.514.6
    75.13552.712.6
    139.214.325.612.2
    76.40.814.89.4
    125.736.979.215.9
    19.41622.36.6
    141.326.846.215.5
    18.821.750.47
    2242.415.611.6
    123.134.612.415.2
    229.532.374.219.7
    87.211.825.910.6
    7.838.950.66.6
    80.209.28.8
    220.3493.224.7
    59.61243.19.7
    0.739.68.71.6
    265.22.94312.7
    8.427.22.15.7
    219.833.545.119.6
    36.938.665.610.8
    48.3478.511.6
    25.6399.39.5
    273.728.959.720.8
    4325.920.59.6
    184.943.91.720.7
    73.41712.910.9
    193.735.475.619.2
    220.533.237.920.1
    104.65.734.410.4
    96.214.838.911.4
    140.31.9910.3
    240.17.38.713.2
    243.24944.325.4
    3840.311.910.9
    44.725.820.610.1
    280.713.93716.1
    1218.448.711.6
    197.623.314.216.6
    171.339.737.719
    187.821.19.515.6
    4.111.65.73.2
    93.943.550.515.3
    149.81.324.310.1
    11.736.945.27.3
    131.718.434.612.9
    172.518.130.714.4
    85.735.849.313.3
    188.418.125.614.9
    163.536.87.418
    117.214.75.411.9
    234.53.484.811.9
    17.937.621.68
    206.85.219.412.2
    215.423.657.617.1
    284.310.66.415
    5011.618.48.4
    164.520.947.414.5
    19.620.1177.6
    168.47.112.811.7
    222.43.413.111.5
    276.948.941.827
    248.430.220.320.2
    170.27.835.211.7
    276.72.323.711.8
    165.61017.612.6
    156.62.68.310.5
    218.55.427.412.2
    56.25.729.78.7
    287.64371.826.2
    253.821.33017.6
    20545.119.622.6
    139.52.126.610.3
    191.128.718.217.3
    28613.93.715.9
    18.712.123.46.7
    39.541.15.810.8
    75.510.869.9
    17.24.131.65.9
    166.8423.619.6
    149.735.6617.3
    38.23.713.87.6
    94.24.98.19.7
    1779.36.412.8
    283.64266.225.5
    232.18.68.713.4
    展开全文
  • R可视化多元线性回归模型 目录 R可视化多元线性回归模型 一元线性回归建模及可视化 在R中绘制多元线性回归结果 可视化结果的解读 一元线性回归建模及可视化 当我们在R中执行简单的线性回归时,...
    展开全文
  • 多元线性回归模型及stata实现:总论

    千次阅读 多人点赞 2020-06-30 20:49:53
    多元线性回归方程及stata实现 一、模型 Y=β0+β1X1+β2X2+⋯+βnXn+e Y: Dependent variable(因变量、应变量、反应变量、响应变量、被解释变量等) X1、X2⋯Xn:Independent variable(自变量、解释变量、控制...

    多元线性回归模型及stata实现:总论

    一、模型

    Y=β0+β1X1+β2X2+⋯+βnXn+e

    1. Y: Dependent variable(因变量、应变量、反应变量、响应变量、被解释变量等)
    2. X1、X2⋯Xn:Independent variable(自变量、解释变量、控制变量)
      如果重点探究一个因素与另一个因素的作用时,纳入模型的其他X通常称为叫控制变量
    3. β1、β2⋯βn:偏回归系数、回归系数(每个βn表示控制其他X时,Xn每增加一个单位,对Y的边际效应)
    4. e: 残差项、残差、扰动项等(代表不包含在模型中的解释变量和其他一些随机因素对被解释变量的总影响项)
    5. β0,截距,常数项。表示所有自变量为0时的Y值。(有时候需要注意,如果自变量不可能等于0,这个值的意义需要考虑;如果需要真实的截距值,可以用Xi-Xmin,Xi-Xmean替代每个Xi。)
      残差的性质非常重要

    二、条件/假设

    2.1 严格最小二乘估计(OLS)的条件和假设

    1. 假设1: 因变量为连续变量(二值、有序、计数等永其他模型)
    2. 假设2:Y与X1、X2⋯Xn之间存在线性关系(当然:X可以为分类)
    3. 假设3:独立性:因变量Y取值相互独立,即残差间相互独立,不存在自相关。主要和抽样、时间序列数据等有关 | 采用自回归模型(Autoregressive model,简称AR模型,用x预测 x(自己);所以叫做自回归)等解决。
    4. 假设4:残差方差齐性:标准化残差的大小不随变量取值的改变而改变(残差图)
    5. 假设5:正态性:就自变量的任何一个线性组合,应变量y均服从正态分布,即要求残差ei服从正态分布
      在这里插入图片描述
    6. 假设6:自变量间不存在共线性
    7. 假设7:不受异常值影响
    8. 条件8:样本量至少为自变量个数的5~10倍,20倍以上为宜

    注:学者认为,至少大于30个,最好100个以上就可以算大样本了
    而且,以上部分假设和条件在一定条件下是可以放松的。

    2.2 放松的OLS假设:大样本OLS
    假设1、2、6、7、8是必须的(线性性、不存在共线性、不受强离群值影响、样本量充足是必须得);
    假设3、4、5会做在一定程度的放松;即残差的球形假定(独立、正态、等方差)相对放松。

    三、条件/假设的stata验证

    stata回归命令

    regression Y X1 X2 X3……Xn
    reg Y X1 i.X2 X3……Xn / 若存在分类变量,在变量名称前加上i. 即可,如i.X2;stata 里面的命令可以缩写,只要缩写不产生歧义即可;
    

    条件/假设
    1. 假设1的判断:直接看,possion回归等需要验证(已经不属于简单的多元线性回归了);
    2.线性性的判断: 分别做Y与每个X之间的散点图、拟合图。不满足时可以转换数据,加平方项、三次方项、分段回归等;

    scatter Y X1
    scatter Y X2
    ……
    lowess Y X1 
    lowess Y X2
    

    3. 自相关的判断:如果抽样没问题,不是时间序列数据,一般不会有自相关。若针对时间序列数据,可以如下检验;

    如果原数据不是时间序列数据,则需要自行定义一个:

     gen n=_n / 生成一个时间序列的标志变量n
     tsset n / 将这个数据集定义为依据时间序列标志变量n定义的时间序列数据
    

    检验方法

    (1) 绘制残差图

    predict e,r  / 生成残差值
    scatter eLe  / 生成残差散点图
    

    (2) DW检验(杜宾-瓦特森检验)

    estat dwatson / 杜宾-瓦特森检验
    

    若DW值在1.8-2.2之间时接受原假设,说明模型不存在一阶自相关,若DW值接近0或4,则拒绝原假设,认为存在一阶自相关。若落在模糊区域,则无法判断。
    DW接近2,残差间相关性差
    DW接近0,残差间正相关
    DW接近4,残差负相关

    (3)BG检验

    estat bgodfrey / BG检验
    

    若输出的P-Value显著小于0.05,则拒绝原假设,认为存在序列相关。

    4. 残差方差齐性的判断:残差的方差齐下,用异方差检验、绘制残差图等;

    white检验

     imtest,white /  white检验
    

    如果输出的P-Value显著小于0.05,则拒绝原假设,认为存在异方差性。
    残差图

    reg Y X1 X2…… / 先做完回归
    rvfplot
    

    5. 残差正态性:绘制标准化残差的直方图、茎叶图、正态概率分布图(PP图)等;
    残差的偏度、峰度等

    predict  residual_1 , residual / 得到残差,取名residual_1 
    histogram residual_1 / 方法1. 绘制直方图看看
    sum residual_1 ,detail / 方法2. 可以选择通过偏度、峰度来看
    qnorm residual_1 / 方法3 ,QQ图
    sktest residual_1 / 正态性检验 也可以用 swilk residual_1, sfrancia residual_1等
    

    6. 多重共线性:VIF检验;

    estat vif / 方差扩大因子法检验
    

    VIF需要用在线性回归之后,若为logistic回归,先替换为线性回归,做完再做vif检验。
    一般认为:
    VIF≥3,有多重共线性;
    VIF≥6,比较严重多重共线性
    VIF≥10,非常严重的多重共线性;

    7. 异常值检验:变量描述、箱式图;

    graph box Y / 方法1 , 绘制Y的箱式图
    sum Y,detail  /  方法2 , 对Y进行详细描述
    

    当然,绘制散点图的时候就能发现异常值。

    四、不满足条件 / 假设的解决办法

    1. 不满足线性关系:用非线性回归模型,或变量转换、加多次项(平方项、三次方项)、分段回归等
    2. 不满足残差独立性:自回归(Autoregressive model,简称ARM)、广义估计方程(Generalized Estimated Equation, GEE,多层线性模型(multi-level analysis model)
    3. 不满足残差方差齐性、正态性:使用稳健标准差、 加权最小二乘法(Weighted Least Squares,WLS)、分层回归(hierarchical multiple regression)等
    4. 不满足多重共线性:剔除部分自变量、逐步回归法选择变量、岭回归(Ridge Regression)等
    5. 样本量不足:增加样本含量
    当然,以上假设和条件在一定条件下是可以放松的。

    推荐阅读:
    正态性/方差齐性检验stata实现
    stata学习笔记

    博客持续更新
    主要参考
    陈强 计量经济学
    医咖会
    知乎
    其他互联网资料

    展开全文
  • 一文掌握有序logistic回归分析

    千次阅读 2020-08-28 17:12:31
    Logistic回归分析(logit回归)一般可分为3类,分别是二元logistic回归分析、多分类Logistic回归分析有序Logistic回归分析。logistic回归分析类型如下所示。 Logistic回归分析用于研究X对Y的影响,并且对X...

    Logistic回归分析(logit回归)一般可分为3类,分别是二元logistic回归分析、多分类Logistic回归分析和有序Logistic回归分析。logistic回归分析类型如下所示。

     

     

    Logistic回归分析用于研究X对Y的影响,并且对X的数据类型没有要求,X可以为定类数据,也可以为定量数据,但要求Y必须为定类数据,并且根据Y的选项数,使用相应的数据分析方法。

    • 如果Y有两个选项,如愿意和不愿意、是和否,那么应该使用有序logistic回归分析(SPSSAU进阶方法->二元logit);

     

    • 如果Y有多个选项,并且各个选项之间可以对比大小,例如,1代表“不愿意”,2代表“无所谓”,3代表“愿意”,这3个选项具有对比意义,数值越高,代表样本的愿意程度越高,那么应该使用多元有序Logistic回归分析(SPSSAU进阶方法->有序logit);

     

    • 如果Y有多个选项,并且各个选项之间不具有对比意义,例如,1代表“淘宝”,2代表“天猫”,3代表“京东”,4代表“亚马逊中国”,数值仅代表不同类别,数值大小不具有对比意义,那么应该使用多元无序Logistic回归分析(SPSSAU进阶方法->多分类logit)。

     

    1、有序logistic回归分析基本说明

    进行有序logistic回归时,通常需要有以下步骤,分别是连接函数选择,平行性检验,模型似然比检验,参数估计分析,模型预测准确效果共5个步骤。

     

    1) 连接函数选择

    SPSSAU共提供五类连接函数,分别如下:

     

    SPSSAU默认使用logit连接函数,如果模型没有特别的要求,应该首选使用logit连接函数,尤其是因变量的选项数量很少的时候。连接函数可能会对平行性检验起到影响,如果平行性检验无法通过时,可考虑选择更准确的连接函数进行尝试。正常情况下使用默认的logit连接函数即可。

     

    2) 平行性检验

    一般来说,模型最好通过平行性检验,但在研究中很可能出现无法通过的现象。此时有以下建议,如下:

    • 改用多分类logistic回归;换个方法,因为一般可使用有序logistic回归的数据也可以使用多分类logistic回归分析;
    • 改用线性回归;可考虑换成线性回归分析尝试;
    • 改变连接函数;选择更适合的连接函数;
    • 将因变量的类别选项进行一些合并处理等,使用SPSSAU数据处理->数据编码功能。

    一般来说,有序logistic回归有一定的稳健性,即平行性检验对应的P值接近于0.05时,可考虑直接接受有序logistic回归分析的结果。

     

    3) 模型似然比检验

    模型似然比检验用于对整个模型的有效性进行分析,一般对应的P值小于0.05即可。同时SPSSAU还提供AIC和BIC这两个指标值,如果模型有多个,而且希望进行模型之间的优劣比较,可使用此两个指标,此两个指标是越小越好。具体可直接查看SPSSAU的智能分析和分析建议即可。

     

    4) 参数估计分析

    参数估计分析其实就已经开始进入实质性的分析了。首先可分析R方,即模型的拟合水平情况,SPSSAU提供3个R方值指标,分别是McFadden R 方、Cox & Snell R 方和Nagelkerke R 方。此3个R 方均为伪R 方值,其值越大越好,但其无法非常有效的表达模型的拟合程度,意义相对交小,而且多数情况此3个指标值均会特别小,研究人员不用过分关注于此3个指标值。一般报告其中任意一个R方值指标即可。

     

    5) 模型预测效果分析

    有序logistic回归建模时,还可以对模型的预测效果进行分析,SPSSAU也会默认输出结果,当然一般情况下我们关注于影响关系,因而对于预测效果等不那么看重。即模型预测质量的关注乎相对较低,多数时候直接忽略它。

     

    2、如何使用SPSSAU进行有序logistic回归操作

    关于有序logistic回归的操作上,SPSSAU操作如下:

    至于分析结果如下:

     

    首先对模型整体有效性进行分析(模型似然比检验),从上表可知:此处模型检验的原定假设为:是否放入自变量(性别_女, 年龄, 年收入水平, 文化程度)两种情况时模型质量均一样;分析显示拒绝原假设(chi=62.510,p=0.000<0.05),即说明本次构建模型时,放入的自变量具有有效性,本次模型构建有意义。

     

    首先可针对任意一个R方值进行描述,一般是McFadden R 方为0.08,意味着自变量仅解释幸福度8%的原因,logistic回归时R方值一般都比较小,一般不用过多理会。

    具体分析影响关系时,可直接参考SPSSAU的智能分析即可,而上表格还列出因变量阈值对应的信息,该数据对数据分析并无过多意义,仅为数学上的指标值而已。

    性别_女的回归系数值为0.072,但是并没有呈现出显著性(z=0.352,p=0.725>0.05),意味着性别并不会对幸福水平产生影响关系。

    年龄的回归系数值为-0.027,并且呈现出0.01水平的显著性(z=-2.921,p=0.003<0.01),意味着年龄会对幸福水平产生显著的负向影响关系。年龄越大的人幸福水平反而越低。

    年收入水平的回归系数值为0.508,并且呈现出0.01水平的显著性(z=4.849,p=0.000<0.01),意味着年收入水平会对幸福水平产生显著的正向影响关系。收入水平越高的群体,幸福度会越高。

    文化程度的回归系数值为0.311,并且呈现出0.01水平的显著性(z=3.502,p=0.000<0.01),意味着文化程度会对幸福水平产生显著的正向影响关系。文化水平越高的群体,他们的幸福度会越高。

     

    3、有序logistic相关问题

    在使用SPSSSAU进行有序logistic回归时,可能会出现一些问题,比如提示奇异矩阵,质量异常,Y值只能为0或1等,接下来一一说明。

     

     

    第1点:出现奇异矩阵或质量异常

    如果做有序logsitic回归时提示奇异矩阵,通常有两个原因,一是虚拟哑变量设置后,本应该少放1项作为参考项但是并没有,而是把所有的哑变量项都放入框中,这会导致绝对的共线性问题即会出现奇异矩阵矩阵。二是X之间有着太强的共线性(可使用通用方法的线性回归查看下VIF值),此时也可能导致模型无法拟合等。先找出原因,然后把有问题的项移出模型中即可。

    同时,如果因变量Y的分布极其不均匀,SPSSAU建议可先对类别进行组合,可使用数据处理里面的数据编码完成。

     

    第2点:无法通过平行性检验?

    有序Logit回归的分析要求数据满足平行性检验,如果不满足,SPSSAU建议使用多分类Logti回归分析即可,当然也可以改用线性回归,改变连接函数,对因变量Y的选项进行组合等多种方式,尝试并在最终选择出最优方案即可。

     

    第3点:OR值的意义

    OR值=exp(b)值,即回归系数的指数次方,该值在医学研究里面使用较多,实际意义是X增加1个单位时,Y的增加幅度。如果仅仅是研究影响关系,该值意义较小。

     

    第4点: wald值或z值

    z 值=回归系数/标准误,该值为中间过程值无意义,只需要看p 值即可。有的软件会提供wald值(但不提供z 值,该值也无实际意义),wald值= z 值的平方。

     

    第5点: McFadden R 方、Cox & Snell R 方和Nagelkerke R 方相关问题?

    Logit回归时会提供此3个R 方值(分别是McFadden R 方、Cox & Snell R 方和Nagelkerke R 方),此3个R 方均为伪R 方值,其值越大越好,但其无法非常有效的表达模型的拟合程度,意义相对交小,而且多数情况此3个指标值均会特别小,研究人员不用过分关注于此3个指标值。一般报告其中任意一个R方值指标即可。

     

    以上就是本次分享的内容,登录SPSSAU官网了解更多。

    展开全文
  • 【Matlab学习手记】多元线性回归

    千次阅读 2019-08-16 10:29:46
    介绍多元线性回归的三种方法:regress、左除、Adagrad梯度下降法。 regress是Matlab内置函数,用于数据回归分析; 左除这个思想很有用,...% 多元线性回归模型 % z = w1 * x + w2 * y + w3 % z = 5 * x + 10 * ...
  • 一、相关分析回归分析变量间不存在完全的确定性,不能用精确的数学公式来表示——相关关系相关变量间的关系——平行关系和依存关系相关分析——研究平行关系,不区分自变量和因变量回归分析——研究依存关系,区分...
  • Python实现机器学习二(实现多元线性回归

    万次阅读 多人点赞 2015-10-25 15:45:11
    接着上一次的一元线性回归...1、什么是多元线性回归模型? 当y值的影响因素不唯一时,采用多元线性回归模型。 y =y=β0+β1x1+β2x2+...+βnxn 例如商品的销售额可能不电视广告投入,收音机广告
  • 重点是要牢记:在多元回归分析中,如果一个分类变量有k个水平,那么需要在多元回归分析中定义k-1个虚拟变量。 解释 对于只有两个水平的分类变量很好理解,那么“在多元回归分析中,如果一个分类变量有k个水平,那么...
  • 0.来源 本学期上了《多元统计与数据分析》的课,因为基础缺失较大,因此利用博客记录的... 回归分析按照涉及的变量的多少,分为一元回归多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按...
  • 多分类有序反应变量logistic逐步回归分析在上海市医疗保险调查中的应用
  • 原博客:... 接着上一次的一元线性回归http://blog.csdn.net/lulei1217/article/details/49385531往下讲,这篇文章要讲解的多元线性回归。...1、什么是多元线性回归模型? 当y值
  • 多元线性回归的python实现

    万次阅读 多人点赞 2016-10-08 15:37:00
    1、什么是多元线性回归模型? 当y值的影响因素不唯一时,采用多元线性回归模型。  y =y=β0+β1x1+β2x2+...+βnxn  例如商品的销售额可能不电视广告投入,收音机广告投入,报纸广告投入有关系,...
  • 结合实际情况,可以将Logistic回归分析分为3类,分别是二元Logistic回归分析多元有序Logistic回归分析和多元无序Logistic回归分析,如下图。Logistic回归分析用于研究X对Y的影响,并且对X的数据类型没有要求,X...
  • 线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个分成为回归系数的模型参数的现行组合。只有一个自变量的情况...
  • 向AI转型的程序员都关注了这个号????????????大数据挖掘DT机器学习 公众号:datayx接着上一次的一元线性回归往下讲,这篇文章要讲解的多元线性回归。1、什么是多元线性回归...
  • matlab多元参数非线性回归模型代码多输出高斯过程 多输出回归 在多输出回归(多目标,多变量或多响应回归)中,我们旨在预测多个实值输出变量。 一种简单的方法可能是使用单个输出回归模型的组合。 但是这种方法有...
  • 再建立有序多分类logistic回归模型进行比赛结果的预测。并将预测结果进行对比分析,发现有序多分类logistic模型预测结果优于多分类logistic模型。另外,本文将每场比赛的比分差作为因变量,胜平负赔率作为自变量,...
  • 线性回归: 线性回归假设特征和结果...只有一个自变量的情况叫做简单回归, 多个自变量情况的叫做多元回归   简单回归:y= a + b*x 多元回归:h(x)= θ0 + θ1*x1 + θ2*x2 + ... 损失函数:j(θ), 对x(i)的估计
  • 简介 回归分析是通过一定的数学表达式描述变量之间的数量变化关系,并进行预测。...回归模型的选用 直线回归:如果回归分析中的残差服从正态分布(大样本时无需正态性),残差与自变量无趋势变化,则直线回归
  • 有交互项的多元线性回归

    千次阅读 2017-11-07 07:53:00
    mod:为通过lm()拟合的模型 xlevels:是一个列表,指定变量要设定的常量值 multiline:=TRUE选项表示添加相应的直线 例 #将上述例子中wt的值设置为2.2,3.2,4.2拟合成直线 > library(effects) #Warning...
  • 线性回归算法能对连续值的结果进行预测,而逻辑回归模型是机器学习从统计领域借鉴的另一种技术,用于分析二分类或有序的因变量与解释变量之间的关系。 逻辑回归算法是一种广义的线性回归分析方法,它仅在线性回归...
  • 逻辑回归模型By Neeta Ganamukhi Neeta Ganamukhi着 Department of Business and Economics 商业与经济系 Abstract: The main aim of this term paper is to describe the Logistic Regression Algorithm, a ...
  • 根据因变量得离散特征:常用得Logistic回归分析方法有3终,包括二元Logistic回归分析多元Logistic回归分析以及有序Logistic回归分析等。 13.1二元Logistic回归分析 我们经常会遇到因变量只有两种取值的情况,...
  • 我们都知道当Y是定量数据时,线性回归可以用来分析影响关系。如果现在想对某件事情发生的概率进行预估,比如一件衣服的是否有人想购买?这里的Y是“是否愿意购买”,属于分类数据,所以不能使用回归分析。如果Y为定...
  • 采用Minitab进行logistic回归分析

    千次阅读 2020-04-07 09:41:52
    在研究Y与X之间的因果关系时,如果Y不是一个定比或定距变量时,就需要进行logistic回归。logistic回归是一种广义线性... logistic回归分析类型 因变量Y的特征 举例 二元logistic...
  • 回归分析概述1.1 基本概念 1. 回归分析概述 1.1 基本概念   回归分析是处理多变量间相关关系的一种数学方法。相关关系不同于函数关系,函数关系反应变量间严格依存性,简单说就是一个自变量对应一个因变量。而...
  • value = 18 print(scalar_value) 18 # 把标量转换为数组 sclar_np = np.array(scalar_value) # 数组的shape不为空 print(sclar_np,sclar_np.shape) 18 () # 向量是一个有序的数字数组 # 这是一个列表 vector_value =...
  • 回归分析分类

    2021-02-23 13:50:56
    回归分析分为3类:线性回归

空空如也

空空如也

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

多元有序回归模型