做回归分析,线性回归与逻辑回归

 数据库     |      2020-01-20 00:49

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

使用R做回归分析整体上是比较常规的一类数据分析内容,下面我们具体的了解用R语言做回归分析的过程。

 

首先,我们先构造一个分析的数据集

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

x<-data.frame(y=c(102,115,124,135,148,156,162,176,183,195),
              var1=runif(10,min=1,max=50),
              var2=runif(10,min=100,max=200),
              var3=c(235,321,412,511,654,745,821,932,1020,1123))

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

接下来,我们进行简单的一元回归分析,选择y作为因变量,var1作为自变量。

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

一元线性回归的简单原理:假设有关系y=c+bx+e,其中c+bx 是y随x变化的部分,e是随机误差。可以很容易的用函数lm()求出回归参数b,c并作相应的假设检验。

 

model<-lm(y~var1,data=x)
summary(model)
用户ID
1
2
3
4
5
6
7
8

Call:
lm(formula = x$y ~ x$var1 + 1)

 

Residuals:
Min 1Q Median 3Q Max
-47.630 -18.654 -3.089 21.889 52.326

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

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 168.4453 15.2812 11.023 1.96e-09 ***

 

x$var1 -0.4947 0.4747 -1.042 0.311

Signif. codes: 0 ‘**’ 0.001 ‘*’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 30.98 on 18 degrees of freedom
Multiple R-squared: 0.05692, Adjusted R-squared: 0.004525
F-statistic: 1.086 on 1 and 18 DF, p-value: 0.3111

从回归的结果来看,p值为0.311,变量var1不不显著,正常情况下p值小于0.05则认为有高的显著性水平。
另外,R方位0.05692 距离1太远,说明两者之间不存在相关性。

我们进一步也对,y和var3做线性回归分析

model<-lm(y~var3,data=x)
summary(model)

Call:
lm(formula = y ~ var3, data = x)

Residuals:
Min 1Q Median 3Q Max
-3.0805 -0.9080 0.6566 1.0255 2.1451

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 81.431990 1.399442 58.19 8.45e-12 ***

线性回归

var3 0.100632 0.001902 52.92 1.80e-11***

Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.73 on 8 degrees of freedom
Multiple R-squared: 0.9972, Adjusted R-squared: 0.9968
F-statistic: 2801 on 1 and 8 DF, p-value: 1.802e-11

从结果来看,常数项和var3的显著性水平都非常理想,同事R方达到0.99,整个模型的拟合度很高,可以说明两者间存在强的线性相关。

接下来,我们可以利用这个模型做些预测

pre<-data.frame(var3=c(56,36))
predict(model,pre,interval="prediction",level=0.95)

   fit      lwr      upr

1 87.06737 82.07491 92.05983
2 85.05474 80.01387 90.09560

以上是预测结果

接下来,我们进一步了解下多元线性回归,多元线性回归是在y与多个自变量之间建立模型,寻找他们之间的线性关系。

在多元回归分析过程中,由于我们不知道因变量和那几个自变量之间存在线性关系,如果一个一个的检验,整个过程将变得非常繁琐。
好在R中有自动进行逐步回归的函数,我们只要根据函数运行结果,选择合适模型,并检验各项参数就可以了。

接下来,看下具体的步骤,还是以之前的数据集作为分析样本,我们来了解下,如何进行逐步回归分析

model<-lm(y~.,data=x)
summary(model)

Call:
lm(formula = y ~ ., data = x)

Residuals:
Min 1Q Median 3Q Max
-2.6684 -1.0831 0.5114 1.1158 2.3292

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 83.620109 5.047503 16.567 3.08e-06 ***
var1 -0.028906 0.057383 -0.504 0.632
var2 -0.009072 0.027438 -0.331 0.752

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

var3 0.100484 0.002414 41.621 1.29e-08***

Signif. codes: 0 ‘*’ 0.001 ‘’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.936 on 6 degrees of freedom
Multiple R-squared: 0.9973, Adjusted R-squared: 0.996
F-statistic: 745.2 on 3 and 6 DF, p-value: 4.191e-08

这里我们对y与所有自变量进行回归的结果来看,var1和var2的效果不显著,var3的显著性水平较高,说明这个模型并不是最优解。

mstep<-step(model)

Start: AIC=16.11
y ~ var1 + var2 + var3

   Df Sum of Sq    RSS    AIC
  • var2 1 0.4 22.9 14.286
  • var1 1 1.0 23.4 14.520
  • var3 1 6493.5 6516.0 70.794

Step: AIC=14.29
y ~ var1 + var3

   Df Sum of Sq    RSS    AIC
  • var1 1 1.0 23.9 12.727
  • var3 1 8136.6 8159.5 71.044

Step: AIC=12.73
y ~ var3

   Df Sum of Sq    RSS    AIC
  • var3 1 8378.5 8402.4 69.337

从结果的AIC现象来看,最后一个只有y和var3进行回归时,AIC值最小,(注:逐步回归过程中,AIC值越小,说明模型的拟合度越好)

依据这个信息我们就可以建立模型model<-lm(y~var3,data=x)

当然,由于数据集的相对比较简单的关系,这里逐步回归的结果比较明显,现实的情况可能更为复杂,需要我们进行进一步的检验以及手动剔除参数等操作。

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
1 -8.625 -11.125
2 11.375 3.875
3 -3.625 -14.125
4 -11.625 18.875
5 9.375 3.875
6 20.375 5.875
7 -4.625 -11.125
8 -12.625 3.875

 

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

b = 0.1259

a = 21.6412

 

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

y = 21.6412 + 0.1259x

 

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

 

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

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

观测值y2:实际的值

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

 

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

用户ID y3
1 26.125
2 26.125
3 26.125
4 26.125
5 26.125
6 26.125
7 26.125
8 26.125

 

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

上一篇:时间戳转换为日期 下一篇:没有了