一元线性回归分析的R语言实现(RStudio)

简介

回归分析是一种应用广泛的数理统计方法,它是研究变量与变量之间的相关关系,这种关系大致分为两类:确定性关系(能用函数精确描述)和非确定性关系(不能用函数描述)。

变量间的非确定性关系称为相关关系

在回归分析中的相关关系主要分为两类:一类是随机变量之间的相关关系,另一类是随机变量和普通变量间的相关关系,本文只研究后一类。

随机变量称为因变量或响应变量,只能观测但不能控制;普通变量称为自变量或解释变量或预报变量或设计变量,是可控变量,根据需要预先确定。

本文只研究一个因变量一个自变量之间的线性关系,即为一元线性回归分析。

回归分析的主要任务是通过样本来估计回归函数y_hate(x),并利用此估计进行预测和控制。

实例

为研究温度x对于某个化学过程生产量y的影响,收集到的数据如表所示:

x -5 ,-4,-3,-2,-1,0,1,2,3,4,5
y 1,5,4,7,10,8,9,13,14,13,18

对上数据进行回归分析。

打散点图

首先我们要把数据的散点图打出来,看看数据的大体分布,这对我们下面的模型建立很重要!
首先建立数组x和数组y来容纳数据然后使用plot函数绘制散点图

x=c(-5,-4,-3,-2,-1,0,1,2,3,4,5)
y=c(1,5,4,7,10,8,9,13,14,13,18)
plot(x,y)

结果如图示:
在这里插入图片描述
能够看出,自变量x和响应变量y之间具有明显的线性关系,即有y=a+bx,我们下面建立线性回归分析模型。

线性回归模型建立

使用函数lm()建立回归分析模型,公式y~1+x代表用x和常数去拟合y,1代表常数,x代表自变量x的一次项,要是有x的N次项,其形式为“I(x^N)”(其中I是大写的i),不能直接写括号内的公式!!!将回归模型命名为test。

x=c(-5,-4,-3,-2,-1,0,1,2,3,4,5)
y=c(1,5,4,7,10,8,9,13,14,13,18)
plot(x,y)
test=lm(y~1+x)
test

其结果如下:

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

Coefficients:
(Intercept)            x  
      9.273        1.436 

即系数a的估计值为9.273,系数b的估计值为1.436

使用abline()函数绘制回归直线

abline(test)

得到
在这里插入图片描述
可以看出直线对点的拟合效果不错。

检验

数学的东西是不能只用眼睛去看的,我们还要用数学工具去检验我们得到的模型是否正确

方差检验:回归的显著性检验,衡量方程是否建立准确,也就是衡量本例究竟是不是一元线性回归模型。(F检验)

anova(test)

结果为

Analysis of Variance Table

Response: y
          Df  Sum Sq Mean SqF F value    Pr(>F)    
x          1 226.945  226.94   96.18 4.207e-06 ***
Residuals  9  21.236    2.36                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

x:回归平方和(SSE)
Residuals:残差平方和(SSR)
Df:自由度
Sum Sq:(sum of squares)方差总和
Mean Sq:(mean of squares)平均方差,即方差总和除以对应自由度
F value:F检验的值
Pr(>F):F检验的P值,当P值小于显著性水平α的时候,模型效果显著
”***":代表模型效果非常显著,在“Signif. codes”中给出了解释

回归系数检验:衡量方程系数是否可靠(t检验)

summary(test)

结果为

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

Residuals:
    Min      1Q  Median      3Q     Max 
-2.0182 -1.1818  0.4182  1.1636  2.1636 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   9.2727     0.4632  20.021 9.00e-09 ***
x             1.4364     0.1465   9.807 4.21e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.536 on 9 degrees of freedom
Multiple R-squared:  0.9144,	Adjusted R-squared:  0.9049 
F-statistic: 96.18 on 1 and 9 DF,  p-value: 4.207e-06

Residuals:为残差水平的五数概括,通过它我们可以了解残差的大概水平。
(Intercept):估计值a,即估计截距
x :估计值b,即估计斜率
Estimate:估计值
Std. Error:(standard error)估计的标准差的估计
t value:检验统计量t的值
Pr(>|t|):检验的P值,当P值小于显著性水平α的时候,模型效果显著
”***":代表模型效果非常显著,在“Signif. codes”中给出了解释
Residual standard error: 1.536 on 9 degrees of freedom:9自由度的残差标准差是1.536
Multiple R-squared:拟合优度,结果越接近于1,x和y的线性相关度越大;越接近于0,x和y的线性相关度越小。必须指出的是,当拟合优度为0时候只能说明x和y不是线性关系,但是x和y还可能是其他类型的相关关系

回归系数的置信区间:使用confint()求得截距a和斜率b估计值的置信区间,默认为95%的置信度

confint(test)

结果为

               2.5 %    97.5 %
(Intercept) 8.225007 10.320447
x           1.105045  1.767682

即a的95%的置信区间为[8.225007, 10.320447]
b的95%的置信区间为[1.105045 , 1.767682]

预测

使用predict()函数进行预测。

其中pre表示要预测的点,这里必须以data.frame的形式输入,predict函数才能计算;
interval="prediction"表示给出对应的预测区间
参数level=0.95表示显著性水平。

pre=data.frame(x=0.2)
test.pre=predict(test,pre,interval="prediction",level=0.95)
test.pre

结果为

   fit      lwr      upr
1 9.56 5.929986 13.19001

即当x=0.2时,y的预测值是9.56
在95%置信度下的y的置信区间是[5.929986, 13.19001]

需要说明的是,一元线性回归在做预测的时候,预测点的位置越近于样本点均值,预测的结果越准确,离样本点均值越远,预测的结果越不可信。

发布了39 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/UEVOLIshy/article/details/102990823