더북(TheBook)

표현식을 위한 I()의 사용

지금까지 본 중선형 회귀의 포뮬러는 독립 변수와 종속 변수의 관계를 1차식으로 표현 가능했다. 그러나 경우에 따라서는 종속 변수가 독립 변수의 2차 이상에 비례하는 Y = X2 + 3X + 5 + ε과 같은 경우가 있을 수 있다. 또는 Y = 3×(X1 + X2) + ε처럼 두 변수의 합을 하나의 변수로 보고 회귀 분석을 하고자 할 때도 있다.

이러한 경우에는 I( ) 안에 원하는 수식을 표현한다.

표 8-6 객체의 해석과 변환 방지

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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.