lm()如何知道哪些预测变量是分类的?

Moo*_*ter 3 regression r

通常,我和您(假设您不是机器人)可以轻松地确定预测变量是分类变量还是定量变量。例如,性别显然是绝对的。您的最后一票可以分类。
基本上,我们可以轻松地确定分类预测变量。但是,当我们在中输入一些数据R并且该lm函数为预测变量生成虚拟变量时会发生什么呢?它是如何做到的?

有点相关的问题在计算器上。

hxd*_*011 6

搜索R factor功能。这是一个小演示,第一个模型使用气缸数作为数字值。第二个模型将其用作分类变量。

> summary(lm(mpg~cyl,mtcars))

Call:
lm(formula = mpg ~ cyl, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.9814 -2.1185  0.2217  1.0717  7.5186 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.8846     2.0738   18.27  < 2e-16 ***
cyl          -2.8758     0.3224   -8.92 6.11e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.206 on 30 degrees of freedom
Multiple R-squared:  0.7262,    Adjusted R-squared:  0.7171 
F-statistic: 79.56 on 1 and 30 DF,  p-value: 6.113e-10

> summary(lm(mpg~factor(cyl),mtcars))

Call:
lm(formula = mpg ~ factor(cyl), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.2636 -1.8357  0.0286  1.3893  7.2364 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   26.6636     0.9718  27.437  < 2e-16 ***
factor(cyl)6  -6.9208     1.5583  -4.441 0.000119 ***
factor(cyl)8 -11.5636     1.2986  -8.905 8.57e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.223 on 29 degrees of freedom
Multiple R-squared:  0.7325,    Adjusted R-squared:  0.714 
F-statistic:  39.7 on 2 and 29 DF,  p-value: 4.979e-09
Run Code Online (Sandbox Code Playgroud)

  • 如果该列是字符或因子,则“ lm”会将其视为分类并创建伪编码。如果列是数字或整数,则“ lm”会将其视为数字。您可以使用以下方法进行检查,例如:“ Carseats $ ShelveLoc = as.character(Carseats $ ShelveLoc)`”,“ Carseats $ Age = as.character(Carseats $ Age)`等),然后查看如何在lm模型与原始编码相比。 (3认同)