很棒的R语言回归模型和方差模型

对于初学者,利用R语言自带的数据进行练习是不错的选择,下面这些模型便是最好的实例。

1、回归模型

回归模型利用自带的faithful数据来示例,faithful是某位地质学家在黄石公园旅游景点"Old Faithful"间歇泉所记录的喷发数据。这个数据包括两组向量,它们分别是泉水的持续时间按(eruptions)(以分钟计)和喷发间隔时间 (waiting)(以分钟计)。下面我们来简单画张它的关系图。

> data(faithful)
> attach(faithful)
>  names(faithful)
[1] "eruptions" "waiting"  
> plot(eruptions,waiting,col="blue")

从这张图里可以发现,waiting和eruptions之间基本呈现出正相关,即随着这次喷发持续时间的增长,下一次的喷发就是相距越远。我们继续尝试用eruptions来解释waiting。lm函数就是用来建立线性回归模型,命令如下:

> lm(waiting~eruptions)
Call:
lm(formula = waiting ~ eruptions)
Coefficients:
(Intercept)    eruptions  
      33.47        10.73  

并建立了一个属于线性回归模型的对象,并传回各个变量系数和其他不同的资料。当然,这个变量方便的话还是应该保存起来。下面可以用plot函数对这个回归模型作诊断检验。

> par(mfrow=c(2,2))

> plot(lm(waiting~eruptions),col="blue")

指令par(mfrow=c(2,2))可以将R的输出窗口设定成为2行2列,下次输入par(mfrow=c(1,1))即可恢复默认设置。

这四张图里面显示一些比较有用的诊断信息:残余图、正态分位图、曲氏距离等等。关于曲氏距离,我自己是第一次涉及,wiki一大概代表的是每一点对回归线的影响力的大小,数值越大表示影响力越大。

2、多元回归模型

R的内置档案stackloss,记录了由氧化氨气而制造硝酸的数据。数据包括4列:Air.Flow(空气流量)、Water.Temp(水温)、Acid.Conc.(硝酸浓度)、stack.loss(氨气损失之百分比)。

> data(stackloss) 
> attach(stackloss) 
The following object is masked _by_ .GlobalEnv:
    stack.loss
The following object is masked from package:datasets:
    stack.loss
> stackloss.lm=lm(stack.loss~Air.Flow+Water.Temp+Acid.Conc.) 
> summary(stackloss.lm) 
Call:
lm(formula = stack.loss ~ Air.Flow + Water.Temp + Acid.Conc.)
Residuals:
    Min      1Q  Median      3Q     Max 
-7.2377 -1.7117 -0.4551  2.3614  5.6978 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -39.9197    11.8960  -3.356  0.00375 ** 
Air.Flow      0.7156     0.1349   5.307  5.8e-05 ***
Water.Temp    1.2953     0.3680   3.520  0.00263 ** 
Acid.Conc.   -0.1521     0.1563  -0.973  0.34405    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.243 on 17 degrees of freedom
Multiple R-squared:  0.9136,    Adjusted R-squared:  0.8983 
F-statistic:  59.9 on 3 and 17 DF,  p-value: 3.016e-09

从以上结果能够得到这个多元线性回归模型为:

stack.loss=−39.9197+0.7156Air.Flow+1.2953Water.Temp−0.1521Acid.Conc.

最后一个p−的值非常小(3.016e-09),是表示并非所有的自变量都没用,但也不是每一个自变量都有用。其中Acid.Conc.的p−值非常高(0.344),因此Acid.Conc.应该首先被移除。重新输入新的回归模型:

> stackloss.lm=lm(stack.loss~Air.Flow+Water.Temp) 
> summary(stackloss.lm)
Call:
lm(formula = stack.loss ~ Air.Flow + Water.Temp)
Residuals:
    Min      1Q  Median      3Q     Max 
-7.5290 -1.7505  0.1894  2.1156  5.6588 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -50.3588     5.1383  -9.801 1.22e-08 ***
Air.Flow      0.6712     0.1267   5.298 4.90e-05 ***
Water.Temp    1.2954     0.3675   3.525  0.00242 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.239 on 18 degrees of freedom
Multiple R-squared:  0.9088,    Adjusted R-squared:  0.8986 
F-statistic: 89.64 on 2 and 18 DF,  p-value: 4.382e-10
> stackloss.lm=lm(stack.loss~Air.Flow+Water.Temp) 
> summary(stackloss.lm)
Call:
lm(formula = stack.loss ~ Air.Flow + Water.Temp)
Residuals:
    Min      1Q  Median      3Q     Max 
-7.5290 -1.7505  0.1894  2.1156  5.6588 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -50.3588     5.1383  -9.801 1.22e-08 ***
Air.Flow      0.6712     0.1267   5.298 4.90e-05 ***
Water.Temp    1.2954     0.3675   3.525  0.00242 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.239 on 18 degrees of freedom
Multiple R-squared:  0.9088,    Adjusted R-squared:  0.8986 
F-statistic: 89.64 on 2 and 18 DF,  p-value: 4.382e-10

我们可以看到新的拟合的多元回归模型为:

stack.loss=−50.3588+0.6712Air.Flow+1.2954Water.Temp

结果也比较理想,最后我们还是对回归模型作诊断检验:

> par(mfrow=c(2,2))

> plot(stackloss.lm,col="blue")

从上面的图来看,第21点和第1点的曲式距离非常大。这样的情况下,我们优先移除这两点。

> stackloss.lm=lm(stack.loss~Air.Flow+Water.Temp+Acid.Conc.,subset=c(-4,-21))

> plot(stackloss.lm,col="blue")

移除了1和21点之后,基本上就没什么问题了。

3、方差分析模型

R内置数据里面PlantGrowth记录了用不同肥料种植植物的重量。

> data(PlantGrowth) 
> attach(PlantGrowth) 
> names(PlantGrowth) 
[1] "weight" "group" 
> group=as.factor(group)

这组数据中一共有3个组别,控制组和两种肥料种植组。我们首先要将group转换成因子。然后我们用盒形图来表示,并做简要的方差分析。

> plot(group,weight,main="植物重量",xlab="肥料") 
> summary(aov(weight~group)) 
           Df Sum Sq Mean Sq F value Pr(>F)  
group        2  3.766  1.8832   4.846 0.0159 *
Residuals   27 10.492  0.3886                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 

通过方差分析我们发现,由于p-的值非常小(0.01591),所以这三个组别的植物的重量有着比较显著的差别。最后照例进行诊断检验。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

5700刀打造3卡1080Ti深度学习机器

5700美刀,打造3x1080Ti实验室GPU深度学习机器 作者 | 人工智豪(ID:Aihows) 整理 | AI科技大本营(rgznai100) 最近为公...

4338
来自专栏码农之路_构建基础

《ArcGIS 地理信息系统教程》概念笔记

之前研究了 GIS,接触到了很多 GIS 的概念。因此找了《 ArcGIS 地理信息系统教程(第 4 版)》来看。书的版本比较老了,不过一些基本概念还是想通的,...

1786
来自专栏机器人网

看懂了这些机械动图,再复杂的机构原理也难不倒你了

1、涡轮增压 Turbo Charger ? 大家可能会觉得涡轮增压装置非常复杂,其实并不复杂,涡轮增压装置主要是由涡轮室和增压器组成。首先是涡轮室的进气口与发...

2665
来自专栏AI研习社

微软携手亚马逊推出全新Gluon深度学习库,全面支持符号式和命令式编程

AI研习社消息,继微软和Facebook联手发布ONNX开源生态标准,日前,微软和亚马逊又达成一致,携手发布Gluon深度学习库。 ? 据微软方面表示,Gluo...

2676
来自专栏机器人网

详解:机器人手腕结构图

机器人手腕是连接末端操作器和手臂的部件,它的作用是调节或改变工件的方位, 因而它具有独立的自由度,以使机器人末端操作器适应复杂的动作要求。  工业机器人一...

3776
来自专栏人工智能LeadAI

5700刀打造3卡1080Ti深度学习机器

? 5700美刀,打造3x1080Ti实验室GPU深度学习机器 最近为公司搭建了一台实验用的深度学习主机,在网络上参考了大量的资料,给出了目前最好的配置。本文...

4173
来自专栏生信技能树

单细胞转录组3大R包之monocle2

主要是针对单细胞转录组测序数据开发的,用来找不同细胞类型或者不同细胞状态的差异表达基因。分析起始是表达矩阵,作者推荐用比较老旧的Tophat+Cufflinks...

9499
来自专栏恰同学骚年

Unity3D游戏开发初探—2.初步了解3D模型基础

  简而言之,3D模型就是三维的、立体的模型,D是英文Dimensions的缩写。

713
来自专栏郭艺帆的专栏

ARKit 进阶:物理世界

ARKit的渲染能力是由其他框架实现的,除了苹果的SceneKit, Unity3D、UE, 或者其他自定义的OpenGL、Metal渲染引擎都可以与ARKit...

4027
来自专栏绿巨人专栏

读书笔记: 博弈论导论 - 12 - 不完整信息的静态博弈 贝叶斯博弈

3476

扫描关注云+社区