【发布时间】:2018-02-06 05:10:11
【问题描述】:
我知道这可能是一个有点傻的问题,但我想问的主要原因是因为我学过 DUMMY CODE!虚拟代码!虚拟代码!由多个班级的多名教师全部使用 R。
所以我对 ISLR 包中的 Auto 数据集做了这个比较。
library(ISLR)
Auto$c3 <- ifelse(Auto$cylinders == 3, 1, 0)
Auto$c4 <- ifelse(Auto$cylinders == 4, 1, 0)
Auto$c5 <- ifelse(Auto$cylinders == 5, 1, 0)
Auto$c6 <- ifelse(Auto$cylinders == 6, 1, 0)
Auto$c8 <- ifelse(Auto$cylinders == 8, 1, 0)
Auto$cylinders <- as.factor(Auto$cylinders)
summary(lm(mpg~displacement + cylinders, data = Auto))
summary(lm(mpg~displacement + c4 + c5 + c6 + c8, data = Auto))
Call:
lm(formula = mpg ~ displacement + cylinders, data = Auto)
Residuals:
Min 1Q Median 3Q Max
-10.692 -2.694 -0.347 2.157 20.307
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 24.33811 2.25278 10.80 < 2e-16 ***
displacement -0.05225 0.00693 -7.54 3.3e-13 ***
cylinders4 10.67609 2.23296 4.78 2.5e-06 ***
cylinders5 10.60478 3.39198 3.13 0.0019 **
cylinders6 7.04473 2.46493 2.86 0.0045 **
cylinders8 8.65170 2.92786 2.95 0.0033 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.39 on 386 degrees of freedom
Multiple R-squared: 0.687, Adjusted R-squared: 0.683
F-statistic: 170 on 5 and 386 DF, p-value: <2e-16
> summary(lm(mpg~displacement + c4 + c5 + c6 + c8, data = Auto))
Call:
lm(formula = mpg ~ displacement + c4 + c5 + c6 + c8, data = Auto)
Residuals:
Min 1Q Median 3Q Max
-10.692 -2.694 -0.347 2.157 20.307
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 24.33811 2.25278 10.80 < 2e-16 ***
displacement -0.05225 0.00693 -7.54 3.3e-13 ***
c4 10.67609 2.23296 4.78 2.5e-06 ***
c5 10.60478 3.39198 3.13 0.0019 **
c6 7.04473 2.46493 2.86 0.0045 **
c8 8.65170 2.92786 2.95 0.0033 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.39 on 386 degrees of freedom
Multiple R-squared: 0.687, Adjusted R-squared: 0.683
F-statistic: 170 on 5 and 386 DF, p-value: <2e-16
两者都产生相同的输出,这在我看来并不奇怪。令我惊讶的是,我被教导要使用虚拟代码而不是转换为因子。虚拟代码是否有任何分析、计算或任何理由来使用因子变量?使用因子似乎要容易得多,需要的代码更少,而且您最终不会得到一堆额外的变量。我可以看到与使用因子相比,虚拟编码的唯一可能优势是您可以选择参考组,我猜您可能也可以使用因子。
【问题讨论】:
-
您可以使用
relevel设置治疗对比的参考水平,您可以使用model.matrix来检查所使用的确切编码。
标签: r