9079500

当前课程知识点:基于R语言的社会统计分析 >  第十一章:多元回归 >  11.4 用R语言进行多元线性回归 >  Video

返回《基于R语言的社会统计分析》慕课在线视频课程列表

Video在线视频

Video

下一节:第十一章 R Code

返回《基于R语言的社会统计分析》慕课在线视频列表

Video课程教案、知识点、字幕

下面我们开始为大家介绍一下怎么用R语言

来进行一个多元线性回归

当然又是一个很简单的介绍了

我们打开我准备好的

第十一周的新text这个新text你也可以从我们学堂在线

下载下来

我双击它在mac里面

直接就可以打开这个

R的平台了

用到的例子仍然是我上节课

就介绍过那本书的例子啊

这个数据叫做Boston

如果有兴趣的同学

欢迎大家下载那本书

然后到它的lab里面

那里面有专门有lab的介绍啊

来看看整个它具体的每一个细节的操作过程

那我们来继续看一下这个数据啊

这个数据仍然是想找到

怎么样可以解释

房屋价值的中位数

就是房子的均价

然后它这里面有13个predictor啊

比如说它这里面叫做rm average number of rooms per house

然后age average age of houses 房龄

然后lstat percent of households with low socioeconomic status

lstat这个因为上节课就有用到啊

它是

在这一栋房子里面

低社会经济地位住户的占比

那我们上节课就建立了一个

特别简单的线性回归

想看看这个

附近低社会经济地位人的比例和

和这个house value和房屋的价值有没有关系啊

重复一下上周的操作啊首先

因为数据是来自于叫MASS mass

这个程序包的

这个贡献包的

捐献包的首先我们要library

把这个捐献包把它叫出来

必须要把

它叫出来以后我们才可以

把这个数据读进来

然后后面我们还会遇到

ISLR这个捐献包的数据啊

所以我现在也先把它library把这个

捐献包叫出来

然后我attach

Boston这个数据

Boston在mass里面啊

我把它attach下来

后面你再

指定变量名的时候R就知道

到哪里去找了啊否则的话它就会报错

那我

上周就演示过的这个简单的线性回归用到的

是lm 这个function 啊

我说简称它就是linear model 线性模型的意思

然后前面这个lm.fit

这个是你自己可以随便任意取名的啊只要你自己

认识就可以我管它叫

a linear model拟合lm.fit它=lm

然后你的因变量y放在左边

是 median house value medv

然后它和谁形成关系呢

低社会经济地位人群的占比lstat

然后我现在

运行它一下它就默默的

这个跑下来了啊

因为线性回归在上节课我已经讲了我就

不再给大家看它的结果了

我们这节课想讲一下什么呢

就是做完任何一个线性回归以后其实

你可以用一个图

很快的进行一些诊断

我们刚刚讲了说在模型的

拟合过程中

可能会遇到很多的潜在问题

比如说我会担心呀我的xy之间是不是一个线性的关系呢

我还会担心

模型里面有没有异常值

或者是哪一个x它会对y产生一些不良的影响

那其实R语言呢

很方便的就可以给我们出来很多有用的图啊

那我下面这个命令

如果有经验的同学你们也可以认出来啊

认出来了我现在用parameter就是要画图了啊

par这个命令后面跟

mfrow

实际上我生成了一个

2*2的图形矩阵

就是我想

接下来我想画四个图

这个图

这四个图的排列方式呢就是两行两列

那我现在

回车一下你看它生成了一个

一页白纸啊实际上这是一个

2*2的白纸

然后下面我们用plot

lm.fit lm.fit就是我刚才

对回归这个对象操作的命名lm.fit

你看我只是plot让它画一个图那它就很自觉地画出了

4张非常fancy非常美丽的图啊

首先我们看左上角第一个图啊

这左上角第一个图是我们

之前讲这潜在问题的时候

解决问题的神器一样的那个

残差图

我们说如果

你的模型没什么问题的话

残差

应该随机的

散落在这个残差图的各处

然后如果我们对它进行一个比较实际情况的拟合

就中间那条红线啊做一个平滑的话

这条红线应该和0

距离很近

那你现在看到的这个图形呢

显然我们看残差没有

残差

并不是散落各处的啊感觉是有一个趋势的

而且

在你的拟合值是

20-25的时候它好像形成了一个聚集

所以不是很美丽

然后你看左下角这个图啊

它的y轴管它叫做standardized residuals

其实就是我们之前说的studendized residuals

就是

进行了某种标准化操作之后的残差图

仍然我也是希望这个残差图

它里面的点是散落各处的那

好在这个标准化以后的残差图看似

比直接的这个残差图稍微有了些进步

然后右上角是

standardized residuals的Q-Q图我们关注的是

我的残差项是不是服从正态分布

如果说残差项服从正态分布的话

我希望这些小圈圈应该都落在对角线上

就是我的theoretical quantiles 和我的standardized residuals

应该是一样大的

值是一样的啊而不是像我们现在看到这样一个尤其是在尾部

我们看这些点和这个虚线还是有一定距离的

那右下角residuals 和leverage

residuals就是残差

leverage是杠杆啊

我们这里面

显示的是cook's distance啊

然后仍然

纵轴是standardized residuals

关注的是有没有一些

点它会带来特别的杠杆效应

这是我特别简单的给大家讲解一下这个

模型的诊断啊

然后如果说我想一个图一个图的看也是可以的

我可以第一个你看plot

用plot这个命令呢

我可以y轴

对应的是 predict(lm.fit) 这是什么意思

我让它画的是

lm.fit这个回归里面的预测值predict

然后x是residuals

我现在运行一下

它实际上显示的就是左上角那个图

然后以此类推

有lm.fit然后rstudent

这是

studendized residuals

还有plot hatvalues

hatvalue大家还记得是什么吗

是看有没有

杠杆作用的那个h值

然后which.max

这个hatvalue那个最大它就有问题了啊

which.max你们

看不到图形了我们看到这个R的这个

这个console窗口它会告诉你说

第375个观测值的hatvalue是最大的

那这个时候你可以回到原始数据

看看第375个值

有没有什么可疑之处

这是

仍然是简单线性回归啊

我们看一看关于模型诊断的问题

然后下面我们就要进入到

多元线性回归的内容了啊

回归我们说

回归的时候并不总是只有一个

自变量经常情况下我们想关注

在控制了很多个自变量情况下某一个变量和

因变量的关系

那这里面呢我们

关于这个

这个例子的时候我们不说理论啊我们只是

讲解一下

R的一些功能所以我这是随便的比如说我把

age放进去age代表的是房龄

对吧我想看看房龄

对于整个

房屋的均价有没有影响

所以在原来的基础上我只是

加入了一个变量

加入一个变量操作非常简单直接在模型里面打

+age

就可以了然后

你也可以以防万一啊告诉

R说我要用到的数据是

Boston这个数据

lm.fit

然后我现在要summary给我展示

一下你的回归结果

用summary这个

summary这个函数展示回归结果你看

它会告诉你说

lstat它前面的系数是

-1.03

这说明

低社会经济地位的人占比越高

房屋价值就越低这个我们的

预期是差不多的而且它是一个非常显著的一个

影响因素或者它是

显著的和y值相关

然后age呢

说明好像

房龄越长

房屋的均价

是越高的

当然这个是两星显著啊

并没有显著性并没有

lstat这么好

那下面我刚才说我这个

数据里面一共有13个自变量啊

我特别懒

我直接要把这十三个

自变量一股脑的扔进模型里可不可以

仍然也是可以这样操作的啊

仍然用lm这个函数y不变啊

median value medv

然后这个破折号不变

后面加一个点这个点

经常代表是空值啊就

我什么都不敲

进去的情况下它会把

Boston这个数据里面除了

medv所有的变量都

被你一股脑的扔进模型里面

然后我summary一下你可以看看

是不是这样操作的

你们看这样犯罪率啊什么rm啊

disrad全都扔进去了

然后

我们还幸运地发现好像大多数的

自变量都和y

产生了某种显著的相关关系啊

然后下面呢我稍微再说一下关于

lm的这个对象啊

我们用lm这个函数进行多元回归

当然除了我们显示出来的

这些个输出值啊summary给了我们很多

模型回归的结果

但除了这些值以后实际上还有很多很多结果

它为了怕烦到你

它不全都输出出来了

那有的同学呢

可能你有一些特别需要需要报一些特别的

统计量总结性统计量

那你还需要在你的这个模型里再进一步挖掘一下

我这里面其实lm

给大家展示出来的东西一般是你做实际的研究

该报的这些结果都已经

囊括了

那如果说以后你做一些

更加高级的研究更加稀有的研究需要

报一些很特别的

总结性统计量的时候

你可以

首先啊用

用一个问号

然后summary.lm

就想知道

lm这个函数

除了summary以外

除summary产生这些output以外还有没有

其他的output啊

我现在打一个问号你可以看到

它会说

这个description啊它summary method for class“lm”

然后

这里面有一个value啊

它会告诉你说实际上在lm这个函数

这个函数被运行以后它产生了很多很多

统计量比如说包括residuals

残差

coefficients aliased

然后σ df

很多很多的这个总结性统计量

所以说有兴趣的话你们自己可以

好好的阅读一下

我举一个例子你看着里面

有σ

这个σ其实就是我们的rse啊

如果你看它的阅读

假设说

本来的这个summary默认的输出里面没有包括

σ这个数

你可以通过下面这个命令把这个结果叫出来

summary( lm.fit)

然后这边的啊

然后加一个美元$sigma

它给你

结果说

summary (lm.fit) sigma=4.74

它刚好和上面我们结果里面这个

residual standard error4.745是一模一样的啊

以此类推

比如说你想把r方

交出来呢就用summary (lm.fit) 然后$r.sq就可以了

然后下面还有一个

输出值有时候我们会关注啊叫做

膨胀因子

对吧如果你还记得

有膨胀因子的话

膨胀因子的话

代表的是模型里面有没有共线性

问题 它是这样一个指征啊

那并不是

就是R的标配里面

它并没有装膨胀因子的函数

所以为了找到这个

非常棒的函数呢我需要另外的在

安装一个捐献包叫做car

当然我已经安装好了然后

下面我要用library再把这个car叫出来

你们可能没有安装这个捐献包啊

这种情况下一定再用install.packages()

把它先装进去

然后下面用到的函数

装进去了以后用到的函数就是

vif (lm.fit)我们看一下啊

直接就显示出了

每一个自变量它所对应的膨胀因子

然后

我们说如果说膨胀因子大于10了

那就说明

这个变量膨胀的有点厉害

共线性问题可能就有了那你就需要解决一下

然后我们这里面的变量呢

好像问题不是太大啊

有比如说

稍微有一点问题的 rad 还有tax 相对比较高

值得你关注一下

然后下面

再给大家介绍一个命令就是

如果说我刚才13个自变量一股脑地扔到这个

多元线性回归模型里面了

如果说里面有一两个变量

我不想要比较简单的操作

你可以直接在原来这个

曲线点的基础上

减去这个变量

我们看刚才这个模型

age这个变量在你加入了其他

变量以后它变得不显著了

你看我点亮的这一行啊

没有星星了

那如果我想把age

扔出去我直接用medv曲线点

减age就可以了

然后从新summary

就是一个没有age这个模型看起来

很厉害除了这个

indus这个变量以外其他全是显著的

然后这还有一种做法啊在原来的模型基础之上

敲lm.fit然后

破折号点减age也可以

好刚刚讲完了基本的多元回归的建模我们来

探讨一些小细节问题啊

假设说你的模型里面想加入交互项

那R也是可以很简单的操作的啊我们

前面很简略的

讲了一下什么是交互项啊

就是我有的时候想关注一下

两个自变量会不会

这个惺惺相惜的产生一些更

剧烈的在原有基础上

更强大的影响

那假设刚才这个例子啊

我的模型里假设

仍然只有lstst和

age这两个变量

现在我想

加入lstat和black

这个变量的交互

那交互很简单

只是在两个变量之间加入一个冒号

就可以了啊

我们假设这一个

变量我直接summary (lm())一气呵成

让它一下显示出来了啊

我们看这个结果

模型里面lstat

和black的交互项

它前面的系数呢等于0.0001474

然后P值是0.346发现这个交互项其实是不显著的

没有任何作用

然后下面仍然也是一种加入交互项的一种

方式这种方式

实际上一种更偷懒的方式

方法了啊

前面那个冒号只加了交互项

这个交互项本身那如果说

我偷懒我想一次性的把

自变量加进去

自变量以及它们的交互项一起加进去

我直接用星号的方法啊

lstat星号age

相乘的意思啊

我并没有打之前的lstat+age了

我在运行一下你看这时候lstat age

以及它们的交互项就一起扔到了模型里面

这个是怎么用R加交互项

然后下面

我们之前谈到如果说x和y

不是线性关系我就

需要对它进行一下线性转换

linear model这个函数的环境下

进行线性转换是一个特别简单的事情

那怎么做呢

假设说我还是和lstat这个

低社会经济地位人群占比

这个变量我就和它干上了

然后我要

增加一个变量我要

加入lstat的平方

有些同学可能直接想

在模型里面加lstst然后一个

小尖儿

然后乘以2

就好了就加平方的方式

但是在模型

在建模的这个环境之下呢

这个

小尖儿它还是有其他的作用的

所以你前面要加一个大写的

I把这个项目括起来

否则的话它会报错的啊

然后lm.fit2

等于linear model这个函数

加上后面那一坨东西然后我看看summary啊

summary告诉我们说lstat和

它的平方项它的二次项

都是特别显著的

那可能这就告诉我们说

做一下线性转换是有好处的

那下面我就想检验一下所谓的

非线性转换是不是有

是不是对原始的模型有了一个显著的作用

你可以

比较一下有它和没它的两种模型啊

没它的话我直接还是原来的

那个一元线性模型啊

下面有一个特别好用的命令可以比较

某两个模型之间有没有显著的差距

用到的命令是anova anova是方差分析了啊

这么anova如果把你的每个模型的这个

赋值放进去啊lm.fit

这是

一元线性模型

lm.fit2代表的是

有二次项的那个模型如果我想

比较这两个模型哪个好直接用anova

它的原假设你们猜猜是什么

原假设必然是我们说什么事都没发生

原来怎么样现在还是怎么样那

在anova这个检验里面

实际上原假设就是两个

模型的拟合程度一样好

加入了某一个新的变量

对于原来的模型没有显著的影响

所以原假设是没影响两个模型一样好

那你一定期盼的是

推翻原假设看到一个显著的P值

那我先在运行它一下

你会看到这里面F检验

它的p值是小于

2.2乘上10的-16次方

非常小那说明加入了

平方项以后

模型有非常显著的提高

然后下面

最后一个问题了啊最后一个小问题我们有一个虚拟变量的问题

就是假设说你的模型里面有

叫定性型变量

分类型变量你要怎么处理

那我们看

这时候我们用到

书里面啊

之前我们看library (ISLR)这个捐献包里有一个数据

叫做Carseats 就是

汽车

座位的销量这么一个例子

我们看 fix(Carseats) 这是我们数据啊

对于数据里面有很多的变量有

CompPrice Income Advertising Population Price

如果对这个数据

感到非常费解

我都不知道这数据说什么怎么办呢

讲了很多次了啊

我们做法是问号然后 Carseats

它会给你一个解释啊它说这是

A simulated data set

这是一个模拟的数据虚拟的数据

它包括了

sales of child car seats就是

儿童那个安全座椅啊

400个不同的商店销售儿童座椅

的情况

然后下面这个

dataframe这个数据里面呢有11个变量

然后它会给你解释每一个变量分别是什么

然后我可以用names这个函数

让它很快地告诉我说我这个数据里面有哪些变量它们分别叫什么名字

下面我要把这个数据attach进去啊

然后下面你在找变量的时候

不用再告诉R去哪一个数据找了啊

然后

假设说我需要找关系啊我需要

找什么关系呢我的

因变量是sales销售情况卖出去了多少

然后我的自变量

假设说

我想看

所有的自变量

以及还有一些交叉项的情况啊

我看直接用lm.fit =lm

sales因变量然后一个小曲线 点

点的话就相当于

把刚才的数据中

除了sales所有的变量都一股脑的扔进去了

同时我还加入了两个交互项

一个是income和广告的交互项一个是price和age的交互项对吧

我lm.fit直接就跑出来了然后summary一下

然后summary一下得到了一个结果

然后你关注一下我这里面有一个

变量叫做

shelvelocation

shel

veloc

然后这里面是good然后medium

这个变量我们再回到看看原来数据啊

我们看原来数据这里面

这一列我点亮了这一列

就是

它代表的是这个

安全座椅在这个店里面

摆放的位置好不好或者是占的地方大不大

如果安全座椅在

摆在店里非常鲜明的位置占的

占地很大的话

人们很快就注意到它想看看它会不会影响销量啊

然后这是一个

分类型变量我并没有一个很具体的数值

我只是把

这个空间这个

货架好坏分成了

bad medium 还有good

差中好三级

这是一个典型的分类变量啊

那放到模型里显然要把它当虚拟变量处理

对于一个有三种分类取值的这样一个

分类变量我们

会生成两个新的变量

你想想两个新的变量

假设说对于一个bad good medium

我其实什么都没有操作而自动已经把它

当成分类变量处理了

而且它非常自觉地给你建了两个变量

分别是good和medium

然后参照组显然就是那个

bad了啊就是坏是参照组

那这个good什么意思呢

这是坏的那组和好的那一组

相比啊如果你把这个

安全座椅放到非常好的销售位置的话

哇它销量有特别大的增加啊

有多不同呢它们的不同是4.84

个单位

然后 medium和差之间的销量不同在

1.95个单位啊这是怎么去解读它啊我们说

这个4.84代表的是

good和bad之间销量的差距

销量的差距啊那

我现在想看看你到底这个虚拟变量怎么

构建的我可以用一个函数叫做contrasts

contrasts()

contrast good medium

原来的变量的取值是bad good

然后在

建立虚拟过程中我就剩下

两个变量了啊

这怎么理解呢

假设说原来的变量

分类是在bad是在不好的货架时候

新的虚拟变量这个

good这个变量的取值就是0

然后 medium的取值也是0

然后如果原来是good那显然

good这个取值就是1medium是0

然后 medium的话

如果本身是medium

那么新变量里面good取值就是0medium就是1

所以这就告诉你们其实

两个新建的虚拟变量

足够可以代表一个原来分类是

三分类的这么一个变量了

实际上为什么R可以

这么自觉的就把它处置成分类变量呢

因为我这个数据输入的时候它的模式就是factor模式

我可以用class这个命令来看看我所有变量的

所有变量的类型

我刚才有那么多个变量啊假设说我这里面有age那个变量

它会告诉你说age这个变量是数值型的

以此类推那我试试

shelveloc

它会告诉你说这是factor分类型变量

所以如果说你的变量

是分类型变量你可以用这个命令假设说

你输入时候数字

并不是我现在这样输bad good medium 用真的

字符来表示的

假设说你的bad是1good是2 medium是3

那R可能没有那么聪明

他就会以为你这是个数值型变量这个时候怎么办

你要用as.factor()

这个命令把它改过来啊

比如说如果说

ShelveLoc刚好是

数值型的输入形式

那你需要用 as.factor(ShelveLoc)把它改过来

当然这是数据清理啊数据准备的时候

非常细节的操作好多好多的事情你要做

如果说你手头正面临着特别大的一套数据啊

一定要

清晰地知道你输入的时候每一个数据的

存储类型它到底是数值型

分类型还是什么其他的类型啊

这是我们没有多少时间啊这是非常非常

简略的给大家介绍一下R里面在

进行多元回归的一些时候的

特别基本的功能

如果你有兴趣

做一些更加细节的操作

一个是看我刚才推荐那本书

另外一个多打一些问号

对于我这里面用到的每一个

函数你都可以打一个问号

看一看具体还有哪些更加

精细的功能

好这就是本周的R语言的演示

基于R语言的社会统计分析课程列表:

第一章:绪论

-1.1 什么是统计学?

--视频1.1

-1.2 数据

--视频 1.2

-1.3 随机化原则

--视频 1.3

-1.4 数据收集方法

--视频 1.4

-第一章:绪论--1.5 习题

-Week 1

第二章:描述统计

-2.1 描述统计概述 - 社会学概念的量化问题

--Video

-2.2 变量的分类

--Video

-2.3 描述统计方法 I: 制表法 Tabular Method

--Video

-2.4 描述统计方法 II: 绘图法 Graphical Method

--Video

-2.5 描述统计方法 III: 数值法 Numerical Method

--Video

-第二章:描述统计--2.6 习题

-第二章 (第一部分)测量与变量

-第二章 (第二部分)描述统计 - 制表

-第二章 (第三部分)描述统计 - 绘图

-第二章 (第四部分)描述统计 - 数值

第三章:基于R语言的探索性数据分析

-3.1 探索性数据分析

--视频3.1

-3.2 EDA的制图原则

--Video

-3.3 R语言初体验

--R 语言初体验

-3.4 CRAN 和学习资源

--CRAN 和学习资源

-3.5 R 基础知识

--Video

-3.6 图形和数值

--Video

-第三章 基于R语言的探索性数据分析

第四章:概率分布

-4.1 概率的基本概念

--Video

-4.2 离散型与连续型变量的概率分布

--Video

-4.3 正态分布

--Video

-4.4 抽样分布

--Video

-第四章:概率分布--4.5 习题

-第四章 概率分布

第五章:统计推断 - 估计

-5.1 用抽样分布来代表抽样的变异性

--Video

-5.2 样本均值的抽样分布

--Video

-5.3 中心极限定理

--Video

-5.4 点估计和区间估计

--Video

-第五章:统计推断 - 估计--5.5 习题

-第五章 抽样分布

第六章:统计推断 - 区间估计

-6.1 区间估计

--Video

-6.2 总体比例的区间估计

--Video

-6.3 置信水平

--Video

-6.4 总体均值的区间估计

--Video

-第六章:统计推断 - 区间估计--6.5 习题

-州长选举支持率模拟抽样 R Code

-中心极限定理 R Code

-第六章 统计推断 - 区间估计

第七章: 统计推断 - 显著性检验

-7.1 绪论

--Video

-7.2 一个显著性检验的五个部分

--Video

-7.3 均值的显著性检验

--Video

-7.4 比例的显著性检验

--Video

-7.5 检验中错误的类型

--Video

-第七章: 统计推断 - 显著性检验--7.6 习题

-第七章 统计推断 - 显著性检验

第八章:两组比较和多组比较

-8.1 预备知识

--Video

-8.2 比较两组比例

--Video

-8.3 比较两个独立样本的均值

--Video

-8.4 比较两个相依样本的均值

--Video

-8.5 方差分析(选学)

--Video

-第八章:两组比较和多组比较--8.6 习题

-第八章 两组比较与多组比较 - 课件

-第八章 两组比较与多组比较 - 讲义

-第八章 R-syntax

-第八章 举例数据-mobile

-第八章 举例数据-occupation

第九章:变量间的关联分析

-9.1 变量间的关联分析

--Video

-9.2 列联分析

--Video

-9.3 定序变量间的关联关系

--Video

-第九章:变量间的关联分析--9.4 习题

-第九章 R Code

第十章:简单线性回归

-10.1 简单线性回归模型概述

--Video

-10.2 模型系数估计

--Video

-10.3 评价系数估计的准确性

--Video

-10.4 评价模型的准确性

--Video

-10.5 R Lab: 用R构建简单线性模型

--Video

-第十章:简单线性回归--10.6 习题

-第十章 简单线性回归模型 - 讲义

-第十章 R Code

第十一章:多元回归

-11.1 多元线性回归概述

--Video

-11.2 多元线性回归

--Video

-11.3 潜在问题及解决方案

--Video

-11.4 用R语言进行多元线性回归

--Video

-第十一章:多元回归--11.5 习题

-第十一章 R Code

-第十一章 多元线性回归模型-讲义

第十二章: Logistic回归和其他高级统计方法简介

-12.1 社会科学中的分类问题

--Video

-12.2 Logistic回归概述

--Video

-12.3 Logistic回归系数估计

--Video

-12.4 Logistic回归模型评价

--Video

-12.5 其他多元统计方法

--Video

-12.6 R语言实践

--Video

-12.7 结束语

--Video

-第十二章 R code

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。