c语言的虚拟变量,含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解...

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

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

> db

> 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

> 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设置为虚拟变量。此时的回归模型如下:

1860b7f3962fa081d9a8102f3ac637ba.png

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

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

6340da248acb7db1f18bd63c4e384b86.png

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

dfe0993b32f9e3cbc05fc6f096b38e44.png

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

6fc57e2fcc87c05388ad1e61f8a25a70.png            

5a034402cc4e567d56c0e6f0d443925c.png

此处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_b db_c db_d db_e table(db_a$Y)0 1

25 172

>table(db_b$Y)0 1

6 200

>table(db_c$Y)0 1

21 175

>table(db_d$Y)0 1

22 175

>table(db_e$Y)0 1

5 199

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

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

>levels(db$X3)

[1] "A" "B" "C" "D" "E"

> db$X3 levels(db$X3)

[1] "B" "A" "C" "D" "E"

同上面的回归模型:

> reg 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.50646Coefficients:

Estimate Std. Error z value Pr(>|z|)

(Intercept)-2.71389 1.07274 -2.530 0.011410 *X10.51664 0.11178 4.622 3.8e-06 ***X20.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 ***X3E0.47470 0.66354 0.715 0.474364

---Signif. codes:0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameterfor binomial family taken to be 1)

Null deviance:552.64 on 999degrees of freedom

Residual deviance:397.69 on 993degrees of freedom

AIC:411.69Number of Fisher Scoring iterations:7

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

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在R语言虚拟变量dummy variable)通常用于处理分类变量categorical variable)。 分类变量是指具有有限的、离散的取值集合的变量,例如性别(男/女)、婚姻状况(已婚/未婚/离异等)等。在建立回归模型时,需要将分类变量转化为虚拟变量进行处理,以便模型能够处理这些变量。 在R语言,可以通过函数`factor()`将分类变量转化为有序或无序的因子(factor)。有序因子用于处理有序的分类变量,例如学历(小学/初/高/大学等);无序因子用于处理无序的分类变量,例如性别(男/女)。 然后,可以使用函数`model.matrix()`将因子转化为虚拟变量矩阵。例如,对于一个有序因子`education`,可以使用以下代码将其转化为虚拟变量矩阵: ``` education <- factor(c("小学", "初", "高", "大学", "研究生")) dummy <- model.matrix(~education) ``` 最终得到的虚拟变量矩阵为: ``` (Intercept) education初 education大学 education小学 education研究生 education高 1 1 0 0 1 0 0 2 1 1 0 0 0 0 3 1 0 0 0 0 1 4 1 0 1 0 0 0 5 1 0 0 0 1 0 ``` 其,第一列为截距列,表示所有样本的基础信息。后面的列为虚拟变量,表示不同学历水平的样本。 需要注意的是,在使用虚拟变量时,需要将其一个虚拟变量作为参照组,通常为取值最多的类别。在上述例子参照组为小学,因此当所有虚拟变量都为0时,表示该样本的学历为小学。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值