很棒的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),所以这三个组别的植物的重量有着比较显著的差别。最后照例进行诊断检验。
- WordPress 路径相关函数总结(四):路径相关常量
- .net和java互操作
- WordPress 路径相关函数总结(三):插件路径相关函数
- 修改WordPress 搜索结果页面url 形式,安全有保障
- C# Enum设计和使用的相关技巧
- 小程序如何利用更低成本获得高流量?
- 使用System.Net.Mail通过gmail发送电子邮件
- 删除 WordPress 导航菜单的多余 CSS 选择器(id或class)
- es6 对象的扩展
- 自定义WordPress 标签云小工具相关参数
- 检查.NET程序平台目标(Platform Target)工具CorFlags
- 哪些行业最适合抢驻小程序?
- WordPress 一键关闭/禁止页面评论功能
- 在一个.net sln中包含多个project,project引用同一个dll导致的错误
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用Java和Python解题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
- R语言中%||%是什么意思?
- 原创 | 你会用缓存吗?详解LRU缓存淘汰算法
- 用Java实现:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- Hacking with iOS: SwiftUI Edition - Hot Prospects项目(一)
- 原创 | 详解command设计模式,解耦操作和回滚
- 第32天:图解大数打印,这道题如此经典!
- Mac终端配置好的环境变量在关闭终端后失效怎么办
- R中的stack和unstack函数
- 第33期:上海自来水来自海上,回文字符串验证!
- nginx location配置
- 快速学习-RocketMQ Dledger快速搭建
- 原创 | 非典型算法题,用程序和电脑玩一个游戏
- 快速学习-RocketMQ Dledger集群搭建
- 原创 | 你能想出解法,让你的基友少氪金吗?