# R语言数据分析与挖掘(第四章):回归分析(2)——多元线性回归

`# install.packages("car") # 如果没有安装该包，自行安装> library(car)> scatterplotMatrix(iris,1:4)`

`> coor = cor(iris[,1:4])> coor             Sepal.Length Sepal.Width Petal.Length Petal.WidthSepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000`

```> lm2 = lm(Petal.Length~.,data = iris[,1:4])> summary(lm2)
Call:lm(formula = Petal.Length ~ ., data = iris[, 1:4])
Residuals:     Min       1Q   Median       3Q      Max -0.99333 -0.17656 -0.01004  0.18558  1.06909
Coefficients:             Estimate Std. Error t value Pr(>|t|)    (Intercept)  -0.26271    0.29741  -0.883    0.379    Sepal.Length  0.72914    0.05832  12.502   <2e-16 ***Sepal.Width  -0.64601    0.06850  -9.431   <2e-16 ***Petal.Width   1.44679    0.06761  21.399   <2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.319 on 146 degrees of freedomMultiple R-squared:  0.968,  Adjusted R-squared:  0.9674 F-statistic:  1473 on 3 and 146 DF,  p-value: < 2.2e-16```

lm()函数中，我们直接指定Petal.Length~.,"."是代表有多个变量。截距项（Intercept）的检验值为为0.379, 没有通过显著性检验，说明我们需要对模型进行修正。

```> lm3 = lm(Petal.Length~.+ 0,data = iris[,1:4])> summary(lm3)
Call:lm(formula = Petal.Length ~ . + 0, data = iris[, 1:4])
Residuals:     Min       1Q   Median       3Q      Max -0.98066 -0.18621 -0.02385  0.18795  1.05950
Coefficients:             Estimate Std. Error t value Pr(>|t|)    Sepal.Length  0.69421    0.04284   16.20   <2e-16 ***Sepal.Width  -0.67286    0.06134  -10.97   <2e-16 ***Petal.Width   1.46802    0.06315   23.25   <2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3187 on 147 degrees of freedomMultiple R-squared:  0.9942,  Adjusted R-squared:  0.9941 F-statistic:  8426 on 3 and 147 DF,  p-value: < 2.2e-16```

`> plot(lm3)Hit <Return> to see next plot: Hit <Return> to see next plot: Hit <Return> to see next plot: Hit <Return> to see next plot:`

`> ncvTest(lm3)Non-constant Variance Score Test Variance formula: ~ fitted.values Chisquare = 7.831356, Df = 1, p = 0.0051348`

p值小于0.05，说明回归拟合值不存在同方差性。此外，还需要考虑变量的交互作用。如在变量Sepal.Length和Petal.Width的交互作用，则需要添加Sepal.Length*Petal.Width项。

```> lm4 = lm(Petal.Length ~ Sepal.Length *Petal.Width + Sepal.Width,data= iris[,1:4])> summary(lm4)
Call:lm(formula = Petal.Length ~ Sepal.Length * Petal.Width + Sepal.Width,     data = iris[, 1:4])
Residuals:     Min       1Q   Median       3Q      Max -0.92738 -0.20315 -0.01323  0.20128  1.03535
Coefficients:                         Estimate Std. Error t value Pr(>|t|)    (Intercept)              -1.14477    0.54103  -2.116   0.0361 *  Sepal.Length              0.87530    0.09482   9.231 3.00e-16 ***Petal.Width               2.03589    0.31038   6.559 8.91e-10 ***Sepal.Width              -0.61154    0.07013  -8.719 5.93e-15 ***Sepal.Length:Petal.Width -0.10424    0.05362  -1.944   0.0539 .  ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.316 on 145 degrees of freedomMultiple R-squared:  0.9688,  Adjusted R-squared:  0.968 F-statistic:  1127 on 4 and 145 DF,  p-value: < 2.2e-16```

上述代码在模型Im3的基础上添加交互作用，得到新的回归模型Im4,模型的摘要显示：在0.1的显著性水平下，截距项、三个解释变量以及交互项的参数估计均通过了显著性检验，表明该交互项的添加有一定的合理性。

在交互项的选择方面，原则上需要将解释变量进行组合，建模并参考R-squared项进行选取，使得R-squared变大且参数估计能通过显著性检验的交互项就可以引入回归模型中，该方法适用于解释变量不多的情况，在实际操作中，往往需要根据行业知识来判断解释变量间的交互作用。

`> pred = predict(lm3,data = iris[,1:4])> length(pred)[1] 150> plot(pred)`

0 条评论

• ### R语言数据分析与挖掘(第四章):回归分析(4)——logistic回归

前面我们介绍的回归方法，一般适用于数值型数据对象，对于分类数据类型就不再适用。对于分类数据对象，我们需要引入广义线性回归方法，比如logistic回归和pois...

• ### MTT法测细胞增殖和药物毒性实验protocol

活细胞线粒体中的琥珀酸脱氢酶能使外源性MTT还原为水不溶性的蓝紫色结晶甲瓒（Formazan）并沉积在细胞中，而死细胞无此功能。二甲基亚砜（DMSO）能溶解细胞...

• ### MTT法检测细胞增殖

活细胞线粒体中的琥珀酸脱氢酶能使外源性MTT还原为水不溶性的蓝紫色结晶甲瓒（Formazan）并沉积在细胞中，而死细胞无此功能。二甲基亚砜（DMSO）能溶解细胞...

• ### （数据科学学习手札19）R中基本统计分析技巧总结

在获取数据，并且完成数据的清洗之后，首要的事就是对整个数据集进行探索性的研究，这个过程中会利用到各种描述性统计量和推断性统计量来初探变量间和变量内部的基本关系，...

• ### CodeForces 934B A Prosperous Lot(水题)

题意就是从0-9这10个阿拉伯数字里找圈，比如0，4，6，8，9这五个数都是有圈的，其中8有两个圈，这道题就是输入一个数n，让你输出一个含有n个圈的...

• ### javascript插件的几种写法

var Helloword = function(objId){ var _get_dom = function(Id){ re...

• ### WebSocket刨根问底(一)

年初的时候，写过两篇文章介绍在Spring Boot中如何使用WebSocket发送消息【在Spring Boot框架下使用WebSocket实现消息推送】【在...

• ### 看完让你彻底理解 WebSocket 原理，附完整的实战代码（包含前端和后端）

最近有同学问我有没有做过在线咨询功能。同时，公司也刚好让我接手一个 IM 项目。所以今天抽时间记录一下最近学习的内容。本文主要剖析了 WebSocket 的原理...

• ### [翻译]WebSocket协议第一章——Introduction

本文为WebSocket协议的第一章，本文翻译的主要内容为针对整个WebSocket进行一个简单而又全面的介绍。通过这篇文章我们能够对WebSocket有一个整...