범주형 변수
앞에서는 범주형 변수인 Species를 설명 변수에서 생략했다. Species를 포함하려면 ‘+ Species’를 포뮬러에 추가해 설명 변수를 더해주거나, 단순히 ‘Sepal.Length ~ . ’로 포뮬러를 적는다. 여기서 ‘.’은 종속 변수를 제외한 모든 변수를 의미한다. 다음은 ‘Sepal.Length ~ . ’를 사용한 선형 회귀의 예다.
> (m <- lm(Sepal.Length ~ ., data=iris)) Call: lm(formula = Sepal.Length ~ ., data = iris) Coefficients: (Intercept) Sepal.Width Petal.Length 2.1713 0.4959 0.8292 Petal.Width Speciesversicolor Speciesvirginica -0.3152 -0.7236 -1.0235 > summary(m) Call: lm(formula = Sepal.Length ~ ., data = iris) Residuals: Min 1Q Median 3Q Max -0.79424 -0.21874 0.00899 0.20255 0.73103 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.17127 0.27979 7.760 1.43e-12 *** Sepal.Width 0.49589 0.08607 5.761 4.87e-08 *** Petal.Length 0.82924 0.06853 12.101 < 2e-16 *** Petal.Width -0.31516 0.15120 -2.084 0.03889 * Speciesversicolor -0.72356 0.24017 -3.013 0.00306 ** Speciesvirginica -1.02350 0.33373 -3.067 0.00258 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.3068 on 144 degrees of freedom Multiple R-squared: 0.8673, Adjusted R-squared: 0.8627 F-statistic: 188.3 on 5 and 144 DF, p-value: < 2.2e-16
Species를 추가한 모델에서는 Speciesversicolor와 Speciesvirginica라는 두 계수가 더 보인다. Species는 이외에도 setosa가 있는데, 위 결과에는 Speciessetosa 계수가 없다. 그 이유는 범주형 변수 Species를 다음과 같이 2개의 가변수dummy variable를 사용해 표현했기 때문이다.
표현하고자 하는 Species |
Speciesversicolor |
Speciesvirginica |
setosa |
0 |
0 |
versicolor |
1 |
0 |
virginica |
0 |
1 |
데이터가 어떻게 코딩되는지를 살펴보고 싶다면 model.matrix( ) 함수를 사용한다.
model.matrix : 디자인(또는 모델) 행렬을 생성한다. |
model.matrix( # 객체, 포뮬러 또는 terms 객체. lm을 인자로 주면 model.matrix.lm( )이 호출되고, # 이 함수가 적절한 인자를 model.matrix( )에 넘겨준다. object, data=environment(object) # 데이터 프레임 ) 반환 값은 디자인 행렬이다. |