当前课程知识点:基于R语言的社会统计分析 > 第十二章: Logistic回归和其他高级统计方法简介 > 12.6 R语言实践 > Video
下面是第十二周的关于逻辑斯蒂回归模型的R的上机实践
这个例子非常简单
我们只是很快的给大家讲解一下
逻辑斯蒂回归用R怎么做啊
用到的这个例子仍然是我之前老跟大家
提的这个Statistical Learning这本书里面
的例子
那数据是那里的呢所以我们仍然要library(ISLR)
把这个
捐献包把它给读进去
那用到的数据叫做stock market data
股票市场数据啊在今天
来说你们今天应该很关注这个股票数据的问题
我们看这个我用#把它变灰的
这个说明啊R就不会读它了
它说this data set consists of
percentage returns for the s&p 500 stock index
s&p 500 stock index指的是
标准普尔500股票指数啊
标准普尔
那它记录了1250天的数据
也就是从2001年一直到2005年的
每天的交易数据
那对于每天的这个
这个记录呢我都有好几个变量来支持它啊
比如说我有Lag1
一直到 Lag5啊 Lag1一直到Lag5代表的是
percentage return就是收益百分比啊就是
这一天的前五天股市的收益百分比
然后
同时我还记录了它叫Volume
也就是这一天的前一天
shares traded on the previous day 前一天的这个
交易总量 然后Today
这是我们实际上关注的这个响应变量啊
我们关注的是今天我的
收益会怎么样对吧我一般不太
不太想去预测过去的事情我想预测现在或者想预测未来啊
这个例子里面我想预测的就是现在我的percentage return 我现在
今天的
收益比例
然后Direction
实际上这是我们说的这个
分类的情况啊我想
我不管具体的这个
percentage return是多少我更想知道它到底是
看跌还是看涨
所以我的Direction不是up就是down啊然后我更关注的是
会不会涨所以如果是up
它就等于1 我的y值就等于1 如果是down
我的y值就等于0
好下面我们来看看这个数据啊
我们library(ISLR)把它读进去
读完了以后呢我们看看这个数据
都有哪些变量
看这个数据有哪些变量用到的这个语句
依然是names
然后这个数据叫Smarket
然后你会看到这个数据其实我刚才已经讲过
这些变量分别是什么了啊
我有到底是哪年的数据然后
这个
这一天的前一天前两天前三天前四天前五天
然后前一天的交易总量
还有今天的收益比
还有Direction到底是看跌看涨
然后下面这个dim(Smarket)
是想
知道Smarket这个数据的维度也就是我想知道
然后这个数据是几行乘以几列
几行代表的是有多少个观测值
几列代表的是有多少个变量
所以你看dim(Smarket)
1250行乘以9列
9个变量然后1250个
记录1250条记录
然后我下面还可以用一个特别棒的命令叫summary(Smarket)
summary(Smarket)呢会给出
这个数据里面
每一个变量的特别简单的描述性统计
你会看到看其它的变量从
Year一直到Today这都是数量型
数值型的变量
如果它是数值型的变量你看它都会给出
最小值
从2001到2005
然后中位数2003啊这个Lag1
最小值-4.92最大值
5.73然后中位数0.039以此类推
你可以看一看啊交易总量啊还有
Today的这个
percentage
return 就是收益百分比
然后下面
注意Direction啊因为它是一个
分类变量所以它就只有一个
计数了down有602天
涨的天数有648天
下面这一条命令叫pairs
我跑一下
你们看看出现什么了
速度有点慢啊
这个pairs实际上出现的
是一个散点图
矩阵两两的散点图矩阵啊
是想用最快的方法看看我的
变量之间都有一个什么样的关系
然后这个散点图矩阵起码没有给我什么
特别具体的信息啊
我们看基本上所有的
图都是成一团啊看不出
一个特别明显的趋势
那我们先把它关上啊告诉大家
pairs是一个特别简单的看散点图
矩阵的一个函数
那下面我用correlation啊实际上我是想看
相关系数矩阵
诶
跑了cor(Smarket)以后它
报错它说x必须为数值
什么问题呢Direction
它是一个分类型变量于是乎R就拒绝给你出
相关系数矩阵了
那怎么办呢我想把这第九个变量抛出去
所以要减9啊把这第九个变量抛出去
剩下八个变量看它们的相关系数
然后你看这得到了一个相关系数矩阵
我放眼望去基本上所有
所有的系数都是零点零几说明什么
说明变量之间的相关性是很小的这和我们
之前看到的一团乱麻没有什么清晰趋势的那个散点图
矩阵也是
一致的啊那稍微明确一点的有一个
大一点的相关系数是谁啊
Volume和Year之间的关系
这说明什么呢
Volume代表的是日交易总量 Year
越高日交易总量越大说明
随着时间的进展
交易总量是在增加的
那下面我可以画图看看啊我可以把这个数据
attach进来这样R就知道到哪去找变量了
然后我plot(Volume)
你会看到
一共有1250天啊横轴代表的是每一条记录
随着记录数的增加就是时间一点一点的累积
Volume实际上是有一个向上的趋势的啊
就是随着经济总量的增大Volume
是在增加的这个和我们直观的
想象是一致的
然后逻辑斯蒂回归用到的
函数很重要啊叫做
glm它代表的是generalize linear model
广义的线性模型
我们前面就讲过说
当你的
响应变量是分类变量
自变量是连续型或者分类型都可以啊
我们用到的整个的一个
回归模型体系叫做广义线性模型
然后当你的
响应变量是二分变量的时候
我们用的是逻辑斯蒂回归啊
所以这里面呢glm.fit=glm()这是广义线性模型
广义线性模型除了逻辑斯蒂回归以外还有好多好多
所以你这里面一定要
说清楚说我这里面是family=binomial
对应的就是逻辑斯蒂回归模型
二项分布的的啊不是0就是1
所以这个时候它才知道
做的是logistic回归
那然后我
一气呵成啊用summary(glm.fit)直接让它
出结果了我先把这图关掉
我们看看回归结果啊
coefficient
一股脑都出来了
然后estimate
Lag1、Lag2都是负值 Lag3、Lag4、Lag5都是正值但是
很不幸发现所有的P值都是
大于0.05的
不显著啊
这也就是说明
股市是很难预测的啊
就是我想预测
今天是看涨
还是看跌用这样一个逻辑斯蒂
回归模型显然预测的不是很有劲
那我不管它都
实际上都
不显著的这件事啊我继续再分析分析一下这个模型
只是
帮大家掌握一下
几个重要函数啊
首先我用coef(glm.fit)
实际上
要简化出来我就想让
它给我显示一下
我这个回归模型的系数估计值
分别是多少
然后或者是我用summary(glm.fit)
glm.fit 然后用$coef
那下面我说了我都
不需要你什么系数啊标准误啊只想要p值
p值是整个这一坨数里面
第四列对吧
第四列的话我在刚才那个基础上
逗号加一个4
出来的就是第四列的
0.600在这里
0.14 0.145在这里
然后下面
很多同学很关注如果说我想
生成预测值要怎么办
我先问你预测值会预测出什么
一般的话你什么都不写的话预测值会预测出
y等于1的概率也就是说看涨的概率
在x等于某一特定取值的时候那一天
up的概率Direction是up的概率
所以我glm.probs=predict
glm.fit
然后type=response 实际上type=response的时候就出的是
up的概率
然后我跑一下它它静静地会给你一个结果啊
我不让它都显示出来我嫌乱我直接就
显示出第一到十个数字啊
一到十个数
分别是0.507 0.48 0.48 0.51啊
正常的比较
比较自然的这个
感受如果说这个概率是大于0.5的
你就会认为它应该是看涨了
然后下面我
以防万一啊因为我之前的这个
数据里面是分up down的
我现在要
让R给我确定一下你的赋值到底是怎么赋的
然后你看用到的还是contrast这个
命令啊contrast
Direction
你会发现当真实的数字是up的时候
它建立的新变量叫up
然后up这个变量就等于1
然后当真实的情况是down的话这个up就
变量就等于0
然后下面我想
人为的你刚给我预测的是概率对吧
我现在要给
让你给我一个说法就是某一天
它到底是up还是down
那怎么做呢
假设说我先生成一列数啊
这一列数我不管三七二十一
把这1250个预测值都写成
down就都说它是下降的
跑一下啊然后你
看一下这grm.pred
带出的是什么结果
全是down那下面我扭转一下啊
如果说刚才那个模型
回归的预测值预测值放在哪了
叫做glm.probs
就是预测的概率啊
假设说概率是
大于0.5的
我就要认为这个
观测值应该是up的
所以glm.pred然后给一个条件
glm.probs是
大于0.5的时候我就认为它是up
这是我刚才说的这是比较自然的假设说
你是一个特别保守的人你认为
你认为大于0.2就应该是up的话你就在这把这个0.5改成0.2
然后up
然后我现在重新看一下
glm.pred
你看这就既有
涨又有跌了啊既有up又有down了啊
然后下面我想看看我的预测值
和我的真实值之间相差多少
那怎么做呢我用一个table这个命令
table
glm.pred
预测值和真实的这个Direction
我们看
两列代表的是Direction
实际上
左上角145
代表的是实际是down的时候预测值也是down
那
右下角507代表的是
实际up的时候我预测值也是up
然后下面我就问问你有
就是预测正确的百分比是多少呢
那很显然就是
这个
对角线145+507
再除以1250我们看看正确率是多少啊
0.5216有点惨啊
就是说
如果说
你是一个random guessing是一个完全随机的猜测你可能会
猜测一半
涨一半跌
然后你废了半天劲建了一个模型
也
建了一个模型以后发现它预测仍然也是将近
只有百分之52的正确啊
那这就说明在预测
股票的这个领域之中呢可能前面的
交易记录对于
当天的看涨看跌的预测起码用逻辑斯蒂回归
来预测的话好像还不太够劲
当然这个具体怎么
怎么用R语言做逻辑斯蒂回归的操作还是可以
借鉴的啊
注意最重要的是我们用到的命令是
glm命令然后做逻辑斯蒂
回归的时候你要告诉它说family=binomial
然后如果模型中有分类变量的时候千万要注意
要把它变成as.factor啊
告诉R说我这个
变量是分类型的变量
好这就是给大家讲解的怎么用R语言
来帮助我们进行一个逻辑斯蒂回归
-1.1 什么是统计学?
--视频1.1
-1.2 数据
--视频 1.2
-1.3 随机化原则
--视频 1.3
-1.4 数据收集方法
--视频 1.4
-第一章:绪论--1.5 习题
-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 习题
-3.1 探索性数据分析
--视频3.1
-3.2 EDA的制图原则
--Video
-3.3 R语言初体验
--R 语言初体验
-3.4 CRAN 和学习资源
-3.5 R 基础知识
--Video
-3.6 图形和数值
--Video
-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 习题
-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 习题
-9.1 变量间的关联分析
--Video
-9.2 列联分析
--Video
-9.3 定序变量间的关联关系
--Video
-第九章:变量间的关联分析--9.4 习题
-10.1 简单线性回归模型概述
--Video
-10.2 模型系数估计
--Video
-10.3 评价系数估计的准确性
--Video
-10.4 评价模型的准确性
--Video
-10.5 R Lab: 用R构建简单线性模型
--Video
-第十章:简单线性回归--10.6 习题
-11.1 多元线性回归概述
--Video
-11.2 多元线性回归
--Video
-11.3 潜在问题及解决方案
--Video
-11.4 用R语言进行多元线性回归
--Video
-第十一章:多元回归--11.5 习题
-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