首页 文章

R - 具有大量虚拟变量的模型

提问于
浏览
4

如果我在数据集中有一个包含多个变量的列,我将如何创建这些虚拟变量 .

示例:假设我有一个名为color的列:红色,绿色,黄色,蓝色,粉红色和灰色作为汽车颜色的选项 .

将这些变量转化为因子的最佳方法是什么 . 没有手工创建一堆虚拟变量?

编辑:所以我做了Greg推荐的,这就是我所拥有的 . 我想知道NA输出,但不确定它为什么存在 .

> data$Trim<-factor(data$Trim)
 > data$Model<-factor(data$Model)
 > data$Type<-factor(data$Type)
 > data=cbind(Price,Mileage,Buick,Cadillac,Chevrolet,Pontiac,SAAB,Saturn,Model,Trim,Type,Cylinder,Liter,Doors,Cruise,Sound,Leather)
 > fit <- lm( Price ~ Mileage+Buick+Cadillac+Chevrolet+Pontiac+SAAB+Saturn+Model+Trim+Type+Cylinder+Liter+Doors+Cruise+Sound+Leather, x=TRUE )
 > summary(fit)

然后我得到一条消息“系数:(21由于奇点而未定义)”,对于某些变量,输出为NA .

1 回答

  • 10

    R将自动为您创建虚拟变量,这是一个基本示例:

    > mycars <- mtcars
    > mycars$cyl <- factor(mycars$cyl)
    > fit <- lm( mpg ~ wt+cyl, data=mycars, x=TRUE )
    > summary(fit)
    
    Call:
    lm(formula = mpg ~ wt + cyl, data = mycars, x = TRUE)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -4.5890 -1.2357 -0.5159  1.3845  5.7915 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept)  33.9908     1.8878  18.006  < 2e-16 ***
    wt           -3.2056     0.7539  -4.252 0.000213 ***
    cyl6         -4.2556     1.3861  -3.070 0.004718 ** 
    cyl8         -6.0709     1.6523  -3.674 0.000999 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
    
    Residual standard error: 2.557 on 28 degrees of freedom
    Multiple R-squared: 0.8374,     Adjusted R-squared:  0.82 
    F-statistic: 48.08 on 3 and 28 DF,  p-value: 3.594e-11 
    
    > head(fit$x)
                      (Intercept)    wt cyl6 cyl8
    Mazda RX4                   1 2.620    1    0
    Mazda RX4 Wag               1 2.875    1    0
    Datsun 710                  1 2.320    0    0
    Hornet 4 Drive              1 3.215    1    0
    Hornet Sportabout           1 3.440    0    1
    Valiant                     1 3.460    1    0
    >
    

    调用 lm 中的 x=TRUE 告诉它返回实际使用的x矩阵,其中包括虚拟变量 . 如果您不想查看创建的虚拟变量,那么您可以将其保留 . 如果要设置虚拟变量的创建方式,请参阅 ?contrasts 以获取更多详细信息 .

相关问题