2012-11-19 68 views
4

如果我在具有多個變量的數據集中有一列,我將如何着手創建這些虛擬變量。R - 具有大量虛擬變量的模型

例如: 可以說我有一個名爲color的列,它有:紅色,綠色,黃色,藍色,粉紅色和灰色作爲汽車顏色的選項。

將這些變量轉化爲因子的最佳方法是什麼?不用手動創建一堆虛擬變量?

編輯: 所以我做了什麼格雷格建議,這就是我的。我想知道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。

+2

你真的沒有理由自己製作虛擬變量。你究竟想要做什麼?很可能你只需要將你的變量轉化爲因子,然後在模型中使用它,而不是直接轉換成虛擬變量--R會爲你做轉換。 – Dason

+0

你是怎麼做到的? – John

+0

考慮懲罰迴歸? –

回答

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 
> 

在通話中的x=TRUElm告訴它返回實際使用的X矩陣,其中包括虛擬變量。如果您不想查看創建的虛擬變量,那麼您可以將其忽略。如果您想設置虛擬變量的創建方式,請參閱?contrasts以瞭解更多細節。

+0

非常感謝你的解釋。我不是故意要問一個「愚蠢」的問題,並被禁止在模板中使用。我只是不瞭解任何因素,並且想要展示我在分析過程中想到的一切。 – John