표현식을 위한 I()의 사용
지금까지 본 중선형 회귀의 포뮬러는 독립 변수와 종속 변수의 관계를 1차식으로 표현 가능했다. 그러나 경우에 따라서는 종속 변수가 독립 변수의 2차 이상에 비례하는 Y = X2 + 3X + 5 + ε과 같은 경우가 있을 수 있다. 또는 Y = 3×(X1 + X2) + ε처럼 두 변수의 합을 하나의 변수로 보고 회귀 분석을 하고자 할 때도 있다.
이러한 경우에는 I( ) 안에 원하는 수식을 표현한다.
I : 객체의 해석(interpretation)과 변환(conversion)을 방지한다. data.frame( ) 또는 포뮬러에 객체를 지정할 때 변환을 방지한다. |
I(
x # 객체
)
|
다음은 Y = X2 + 3X + 5 + ε의 회귀 계수를 찾는 예다.
> x <- 1:1000 > y <- x^2 + 3 * x + 5 + rnorm(1000) > lm(y ~ I(x^2) + x) Call: lm(formula = y ~ I(x^2) + x) Coefficients: (Intercept) I(x^2) x 5.109 1.000 2.999
위 코드에서는 1 ~ 1000 값을 가진 x로부터 종속 변수 y를 만들었다. 그 뒤 formula에 y ~ I(x^2) + x를 지정해 계수를 찾았다.
I(x^2) 대신 x^2를 사용하면 에러는 발생하지 않지만 전혀 다른 결과를 얻게 된다.
> lm(y ~ x^2)
Call:
lm(formula = y ~ x^2)
Coefficients:
(Intercept) x
-167162 1004
그 이유는 lm에 formula 인자로 주어진 x^2는 x × x기 때문이다. x × x는 x + x + x:x와 같은 의미로, ‘x 변수, x 변수, x와 x의 상호 작용’을 의미한다. 이에 대해서는 ‘4.5.1 summaryBy( )’ 절의 ‘포뮬러 해석하기’에서 포뮬러의 일반적인 모양을 설명하며 알아본 바 있다. 상호 작용에 대해서는 ‘8.3.6 상호 작용’ 절에서 다시 다룬다.
다음은 Y = 3(X1 + X2) + ε의 예다.
> x1 <- 1:1000 > x2 <- 3 * x1 > y <- 3 * (x1 + x2) + rnorm(1000) > lm(y ~ I(x1 + x2)) Call: lm(formula = y ~ I(x1 + x2)) Coefficients: (Intercept) I(x1 + x2) -0.02753 3.00002
보다시피 X1 + X2의 계수와 절편이 각각 3, 0에 가까운 값으로 구해졌다.
같은 데이터에 대해 y ~ x1 + x2를 포뮬러로 지정하면 다음과 같이 X1과 X2를 별개로 취급한 모델을 구하게 된다.
> lm(y ~ x1 + x2)
Call:
lm(formula = y ~ x1 + x2)
Coefficients:
(Intercept) x1 x2
-0.02753 12.00007 NA