• 【数据分析】线性回归与逻辑回归(R语言实现)


    文章来源:公众号-智能化IT系统。

    回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归。其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟。这么做的目的也是为了预测,但有时也不是全部为了预测,只是为了解释一种现象,因果关系。

    还是按照老风格,不说空泛的概念,以实际的案例出发。

    还是先前的案例,购房信息,我们这次精简以下,这8位购房者我们只关注薪水和年龄这两个因素,信息如下:

    用户ID 年龄 收入 是否买房
    1 27 15W
    2 47 30W
    3 32 12W
    4 24 45W
    5 45 30W
    6 56 32W
    7 31 15W
    8 23 30W

    我们用这个案例说明我们提到的线性回归模型和逻辑回归模型。

    线性回归

    首先我们看线性回归模型。如果我们想试图看下收入和年龄是否有什么直接的关系,这里,我们把收入看成自变量,年龄是因变量,那么线性模型的关系图自然是直线,按照方程,我们可以得出:

    y(收入)=a + bx(年龄)

    这里,b是回归系数,a是回归常数。但是俗话说,理想很丰满,现实很骨干,偏差一定存在,所以实际上还有残差e存在。所以这个方程更精确的应该是:

    y(收入)=a + bx(年龄) + e

    现在我们来计算具体的回归系数和回归常数。具体计算公式如下:

    b = ∑(y - Y)(x - X)/∑(x - X)(x - X)

    a = Y - bX

    这里,大写的X和Y代表平均值,我们先计算除了回归系数,然后在通过平均值计算出回归常数。

    我们先算出Y值为26.125,X值为35.625。然后我们来计算回归系数,针对每一数据,得到如下:

    用户ID x - X y - Y (y - Y)(x - X) (x - X)(x - X)
    1 -8.625 -11.125 95.953125 74.390625
    2 11.375 3.875 44.078125 129.390625
    3 -3.625 -14.125 51.203125 13.140625
    4 -11.625 18.875 -219.421875 135.140625
    5 9.375 3.875 36.328125 87.890625
    6 20.375 5.875 119.703125 415.140625
    7 -4.625 -11.125 51.453125 21.390625
    8 -12.625 3.875 48.921875 159.390625

    然后我们来计算回归系数和回归常数

    b = 0.1259

    a = 21.6412

    OK,现在方程已经出现了,就是:

    y = 21.6412 + 0.1259x

    那么是否完工了呢,我们可以根据任何的年龄来预测其薪水?答案肯定是不,我们要对这个公式进行评估,以决定是否可以用线性回归模型来预测。其中有一个方式是通过判定系数,做为一个标准来衡量方程的拟合程度。

    判定系数涉及到三个概念:

    理论值y1:按照公式来计算的值

    观测值y2:实际的值

    平均值y3:就是刚才计算得到的26.125

    于是我们又计算了一大堆,得出如下:

    用户ID y3 y2 y1
    1 26.125 15 24.2249
    2 26.125 30 28.6309
    3 26.125 12 25.3264
    4 26.125 45 23.564
    5 26.125 30 28.1903
    6 26.125 32 30.6136
    7 26.125 15 25.1061
    8 26.125 30 23.3437

    判定系数就是:∑(y1 - y3)(y1 - y3)/∑(y2 - y3)(y2 - y3)

    判定系数要接近于1,则说明这个线性模型越准确,在这个案例中,完全没有达到,所以是不可行的。

    线性模型R语言实现

    如果我们自己写代码实现,还是比较费精力和时间,R语言中已经为您实现了回归模型的定制。

    还是上述的案例,如下:

    首先创建对应的数据框:

    > year <- c(27,47,32,24,45,56,31,23)

    > money <- c(15,30,12,45,30,32,15,30)

    > buyhouse <- c(0,1,0,1,0,1,0,0)

    > case <- data.frame(year,money,buyhouse)

    > case

    year money buyhouse

    1 27 15 0

    2 47 30 1

    3 32 12 0

    4 24 45 1

    5 45 30 0

    6 56 32 1

    7 31 15 0

    8 23 30 0

    >

    然后通过lm函数来评估:

    > runs.mdl <- lm(

    + formula=money~year,data=case)

    这里,formula是公式函数,指定了因变量和自变量,data表示需要评估的数据集。

    然后我们可以看得到的回归系数和回归常数:

    > coef(runs.mdl)

    (Intercept) year

    21.6412453 0.1258598

    上面的Intercept是回归常数,0.1258598是回归系数。

    同时我们可以用summary得到详细的分析:

    > summary(runs.mdl)

    Call:

    lm(formula = money ~ year, data = case)

    Residuals:

    Min 1Q Median 3Q Max

    -13.669 -10.165 2.569 3.849 20.338

    Coefficients:

    Estimate Std. Error t value Pr(>|t|)

    (Intercept) 21.6412 13.9636 1.550 0.172

    year 0.1259 0.3734 0.337 0.748

    Residual standard error: 12.02 on 6 degrees of freedom

    Multiple R-squared: 0.01859, Adjusted R-squared: -0.145

    F-statistic: 0.1136 on 1 and 6 DF, p-value: 0.7475

    上面的Multiple R-squared: 0.01859就是判定系数,这里已经有了非常详细的评估。

    逻辑回归

    如上所说的是线性回归,逻辑回归可以理解为线性回归的衍生,只是因变量的范围固定在0和1之间。X和Y变量的曲线呈S型。当X逐渐减少时,Y也趋近于0。

    同样,逻辑回归有一系列的计算法则,以及公式。和线性回归一样,其需要回归系数和回归参数,来评估因变量的取向。而在这里,因变量Y不再是一个值估计,而是概率,当Y等于1的概率。

    这个公式如下:

    P(Y=1│X=x)=exp(x'β)/(1+exp(x'β))

    具体的算法原理我们不做详细讨论,还是以案例来说,我们评估根据年龄和薪水这两个变量,决定是否买房的概率,这是个二元逻辑回归。

    在R语言中,我们可以坐享其成,用glm来统计

    > runss.mdl <- glm(formula=buyhouse~year+money,data=case,family="binomial")

    这里我们要指定family是binomial,以表明是逻辑回归。

    然后我们查看具体的情况:

    > summary(runss.mdl)

    Call:

    glm(formula = buyhouse ~ year + money, family = "binomial", data = case)

    Deviance Residuals:

    1 2 3 4 5 6

    -2.100e-08 5.169e-05 -2.100e-08 8.346e-06 -5.019e-05 2.100e-08

    7 8

    -2.100e-08 -2.100e-08

    Coefficients:

    Estimate Std. Error z value Pr(>|z|)

    (Intercept) -1889.94 1093171.03 -0.002 0.999

    year 20.46 11911.42 0.002 0.999

    money 31.62 18804.21 0.002 0.999

    (Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1.0585e+01 on 7 degrees of freedom

    Residual deviance: 5.2599e-09 on 5 degrees of freedom

    AIC: 6

    Number of Fisher Scoring iterations: 25

    然后我们可以做出图形,来评估最终的效果,R中的plot即可,或者通过anova来进行统计,此处省略。


    公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。

  • 相关阅读:
    2.配置范例站点站点
    nginx 安装配置+清缓存模块安装
    1.1nginx安装
    1.linux源码安装nginx
    python实现免密码登录lunx服务器
    实现利用公钥私钥免密码登录Linux服务器
    Codeforces Beta Round #61 (Div. 2)
    Codeforces Beta Round #59 (Div. 2)
    Codeforces Beta Round #57 (Div. 2)
    Codeforces Beta Round #55 (Div. 2)
  • 原文地址:https://www.cnblogs.com/xtary/p/9522282.html
Copyright © 2020-2023  润新知