使用R语言做逻辑回归的时候,当自变量中有分类变量(大于两个)的时候,对于回归模型的结果有一点困惑,搜索相关知识发现不少人也有相同的疑问,通过查阅资料这里给出自己的理解。

  首先看一个实例(数据下载自:http://freakonometrics.free.fr/db.txt)

> db <- read.table("db.txt",header=TRUE,sep=";")
> head(db)
  Y       X1       X2 X3
1 1 3.297569 16.25411 B
2 1 6.418031 18.45130 D
3 1 5.279068 16.61806 B
4 1 5.539834 19.72158 C
5 1 4.123464 18.38634 C
6 1 7.778443 19.58338 C
> summary(db)
       Y               X1               X2        X3
Min. :0.000 Min. :-1.229 Min. :10.93 A:197
1st Qu.:1.000 1st Qu.: 4.545 1st Qu.:17.98 B:206
Median :1.000 Median : 5.982 Median :20.00 C:196
Mean :0.921 Mean : 5.958 Mean :19.94 D:197
3rd Qu.:1.000 3rd Qu.: 7.358 3rd Qu.:21.89 E:204
Max. :1.000 Max. :11.966 Max. :28.71
> reg <- glm(Y~X1+X2+X3,family=binomial,data=db)
> summary(reg) Call:
glm(formula = Y ~ X1 + X2 + X3, family = binomial, data = db) Deviance Residuals:
Min 1Q Median 3Q Max
-2.98017 0.09327 0.19106 0.37000 1.50646 Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.45885 1.04646 -4.261 2.04e-05 ***
X1 0.51664 0.11178 4.622 3.80e-06 ***
X2 0.21008 0.07247 2.899 0.003745 **
X3B 1.74496 0.49952 3.493 0.000477 ***
X3C -0.03470 0.35691 -0.097 0.922543
X3D 0.08004 0.34916 0.229 0.818672
X3E 2.21966 0.56475 3.930 8.48e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 552.64 on 999 degrees of freedom
Residual deviance: 397.69 on 993 degrees of freedom
AIC: 411.69 Number of Fisher Scoring iterations: 7

  该数据集三个自变量中 X1, X2为连续型变量,X3为分类变量(A,B,C,D,E)。 获取逻辑回归结果时发现X3变量的表示形式和X1,X2不一样,并且分别产生了X3B, X3C, X3D, X3E四个新的变量,但是又没有X3A变量。后来查阅相关资料才明白原来逻辑回归中处理分类变量和连续型变量是不一样的。

  当分类自变量的类别大于两个的时候,需要建立一组虚拟变量(哑变量)来代表变量的归属性质。一般虚拟变量的数目比分类变量的数目少一个,少掉的那个就作为参照类(reference category)。例如本例中,A就是参照类,X3B, X3C, X3D, X3E就是四个虚拟变量。参照类的选取是随意的,R语言逻辑回归默认将分类变量的第一个factor设置为虚拟变量。此时的回归模型如下:

四个虚拟变量的取值为1或0,即当观测值中的分类变量属于某一组时,该组的虚拟变量值为1,剩下的虚拟变量值为0。

例如,当一组观测值(X1,X2,X3,Y)中 X3 的值为B时,虚拟变量X3B = 1, X3C, X3D, X3E 都为0,此时:

而当一组观测值(X1,X2,X3,Y)中 X3 的值为A时, 因为A为参照类,所以此时X3B, X3C, X3D, X3E都为0,此时:

因此在控制变量条件下,即假设两组观测值中,X1, X2相同,而X3分别为A和B, 由上面两式相减可得:

            

此处odds(B/A)为变量B对变量A的发生比率,即变量B的发生比与变量A的发生比的比值。大于1的发生比率表明事件发生的可能性会提高,或者说自变量对事件发生的概率有正的作用。例如,假如说odds(B/A)的数值大于1,那么说明在X1,X2不变的条件下,X3取值B比X3取值A有更大的概率使Y的值为1。(王济川,郭志刚. Logistic 回归模型 —— 方法与应用[M]. 北京:高等教育出版社)

  回到开头的例子,根据结果我们得以得出这样的结论,变量X3取值A,C,D对Y的影响差不多,而变量X3取值B,E会使得Y取值为1的概率比去A,C,D显著增大。简单看一下:

> db_a <- db[db$X3 == "A",]
> db_b <- db[db$X3 == "B",]
> db_c <- db[db$X3 == "C",]
> db_d <- db[db$X3 == "D",]
> db_e <- db[db$X3 == "E",] > table(db_a$Y) > table(db_b$Y) > table(db_c$Y) > table(db_d$Y) > table(db_e$Y)

大致从结果看出确实变量B,E组的Y值为1的比例要高于A,C,D组。

我们也可以自己定义虚拟变量:

> levels(db$X3)
[] "A" "B" "C" "D" "E"
> db$X3 <- relevel(db$X3, "B")
> levels(db$X3)
[] "B" "A" "C" "D" "E"

同上面的回归模型:

> reg <- glm(Y~X1+X2+X3,family=binomial,data=db)
> summary(reg) Call:
glm(formula = Y ~ X1 + X2 + X3, family = binomial, data = db) Deviance Residuals:
Min 1Q Median 3Q Max
-2.98017 0.09327 0.19106 0.37000 1.50646 Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.71389 1.07274 -2.530 0.011410 *
X1 0.51664 0.11178 4.622 3.8e-06 ***
X2 0.21008 0.07247 2.899 0.003745 **
X3A -1.74496 0.49952 -3.493 0.000477 ***
X3C -1.77966 0.51002 -3.489 0.000484 ***
X3D -1.66492 0.50365 -3.306 0.000947 ***
X3E 0.47470 0.66354 0.715 0.474364
---
Signif. codes: ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ (Dispersion parameter for binomial family taken to be ) Null deviance: 552.64 on degrees of freedom
Residual deviance: 397.69 on degrees of freedom
AIC: 411.69 Number of Fisher Scoring iterations:

主要内容就这么多,如果想要更详细的了解可以参考:王济川,郭志刚. Logistic 回归模型 —— 方法与应用[M]. 北京:高等教育出版社

以及链接:https://www.r-bloggers.com/logistic-regression-and-categorical-covariates/

版权声明:本文为博主原创文章,博客地址:http://www.cnblogs.com/Demo1589/p/8973731.html,转载请注明出处。 

含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解的更多相关文章

  1. 机器学习 (三) 逻辑回归 Logistic Regression

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...

  2. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!

    原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...

  3. 机器学习总结之逻辑回归Logistic Regression

    机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...

  4. 机器学习(四)--------逻辑回归(Logistic Regression)

    逻辑回归(Logistic Regression) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的   线性方程拟合的是连 ...

  5. 机器学习入门11 - 逻辑回归 (Logistic Regression)

    原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...

  6. 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...

  7. ML 逻辑回归 Logistic Regression

    逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...

  8. 逻辑回归(Logistic Regression)详解,公式推导及代码实现

    逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...

  9. 逻辑回归 logistic regression(1)逻辑回归的求解和概率解释

    本系列内容大部分来自Standford公开课machine learning中Andrew老师的讲解,附加自己的一些理解,编程实现和学习笔记. 第一章 Logistic regression 1.逻辑 ...

  10. 逻辑回归Logistic Regression 之基础知识准备

    0. 前言   这学期 Pattern Recognition 课程的 project 之一是手写数字识别,之二是做一个网站验证码的识别(鸭梨不小哇).面包要一口一口吃,先尝试把模式识别的经典问题—— ...

随机推荐

  1. maven管理的jsp应用如何添加servlet、jsp相关依赖(org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp)

    背景: 老大让做权限控制,研究了一下shiro,下了个demo下来,死活跑不起来,报 org.apache.jasper.JasperException: java.lang.ClassNotFoun ...

  2. JavaScript push() 方法

    定义和用法: push() :可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newelement ...

  3. MySQL中的字符串函数

    使用字符串数据 当使用字符串数据时,可以使用下面的字符数据类型. CHAR 固定长度.不足部分使用空格填充的字符串. varchar 变长字符串. text(MySQL和SQL Server)或CLO ...

  4. python3安装ibm_db

    在安装好python3之后,使用pip install ibm_db总是报错. 然后按照官方文档的说明添加了环境变量IBM_DB_HOME, 同时在命令行执行easy_install ibm_db就可 ...

  5. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  6. 使用Swoole测试MySQL在特定SQL下的并发性能

    场景描述 从全文检索或者缓存中获取ID,根据ID查询数据库获取基础信息,进行页面展示 SQL:select * from table where id in(id1,id2,id3...id40) 此 ...

  7. Eclipse代码块折叠插件,安装使用

    在代码编写中经常会遇到一些很长的set(xxx)的代码,非常影响体验. 而Eclipse的folding插件可以自定义的将代码块进行折叠. 效果如下图所示: 可以根据代码块的功能来进行折叠,从而保证代 ...

  8. MVC系列 引入MVC

    1.必须的类库 system.web.Mvc system.Web.Razor system.web.webPages system.web.webpages.razor 添加方式如下图 2.MVC项 ...

  9. Java IO(一)

    在Java中,所有的io类都放在java.io包中. 在IO操作中,我们总是会从一个源数据读取到一个目标数据.那么这个源数据和目标数据可以是文件,流等等.那最常见的就是文件,就像我们在本地电脑上写入东 ...

  10. 用js来实现那些数据结构10(集合02-集合的操作)

    前一篇文章我们一起实现了自定义的set集合类.那么这一篇我们来给set类增加一些操作方法.那么在开始之前,还是有必要解释一下集合的操作有哪些.便于我们更快速的理解代码. 1.并集:对于给定的两个集合, ...