변수 변형 :: 통계 - mindscale
Skip to content

변수 변형

비선형 변환

우리가 지금까지 한 회귀 분석은 선형모형을 이용하고 있어요. 비선형모형을 쓸 수 있는데, 비선형모형은 추정이 어려워요. 중간 정도 해결되는 해결책으로 모형은 선형 모형인데, 변수를 비선형 변환을 해서 쓰는 방법이 있습니다. 예를 들어서 $x$가 있는데 여기에 로그 함수를 씌워서 $z$를 만든다고 합시다.

$$ z = \log x $$

그러면 이 $z$를 가지고 $y$를 예측하는 선형 모형을 만들 수 있겠죠.

$$ y = a + bz $$

이것은 아래의 모형과 같습니다.

$$ y = a + b \log x $$

즉, 선형 모형에 투입하기 전에 변수를 비선형 변환해도 여전히 선형 모형으로 다룰 수 있습니다. 다만, 아래와 같은 방식은 완전히 비선형 모형이 됩니다.

$$ y = \log \big( a + bx \big) $$

로그 함수는 회귀분석에서 이런 용도로 많이 사용합니다. 왜냐하면 로그 함수는 10, 100, 1000 이런 식으로 늘어나는 값을 1, 2, 3 이런 식으로 늘어나게 바꿔줍니다. 즉 처음에 10 늘어나는 것과 나중에 1000 늘어나는 것을 똑같이 만들어주는 것이죠. 예를 들어 중고차의 경우 주행거리가 처음에는 많이 떨어지고, 나중에는 천천히 떨어지는데요 로그 함수를 이용하면 이런 관계를 나타낼 수 있습니다.

사용하는 방법은 관계식에 그냥 적용해주면 됩니다.

import numpy as np
m = ols('price ~ np.log(mileage)', df).fit()
m = lm(price ~ log(mileage), df)

Question

wordrecall.xlsx를 다운받아 열어보세요.

변수 time은 단어 암기 후 시간, prop은 단어 시험 정답률을 나타냅니다.

time을 독립변수, prop을 종속변수로 하는 모형 1로 회귀분석을 하려면 관계식을 어떻게 세워야 합니까?

  • time ~ prop
  • prop ~ time

모형 1로 회귀분석을 해보세요. 이때 R제곱은 얼마입니까?

모형 1에서 time에 로그 함수를 적용한 모형 2로 회귀분석을 하려고 합니다. 모형 2의 관계식은 어떻게 작성해야 합니까?

  • np.log(time) ~ prop
  • prop ~ np.log(time)
  • np.log(prop) ~ time
  • time ~ np.log(prop)

모형 2로 회귀분석을 해보세요. 이때 R제곱은 얼마입니까?

R제곱으로 비교할 때, 어떤 모형이 데이터를 더 잘 설명한다고 할 수 있습니까?

  • 모형 1
  • 모형 2

서열

import numpy as np
m = ols('price ~ mileage.rank()', df).fit()
m = lm(price ~ rank(mileage), df)

I 함수

import numpy as np
m = ols('price ~ I(my_car_damage + other_car_damage)', df).fit()
m = lm(price ~ I(my_car_damage + other_car_damage), df)

절편의 이동

import numpy as np
m = ols('price ~ I(year - 2010)', df).fit()
m = lm(price ~ I(year - 2010), df)

절편이 없는 모델

sp = pd.read_excel('speed.xlsx')
m = ols('dist ~ 0 + speed', sp).fit()
sp = readxl.read_excel('speed.xlsx')
m = lm(dist ~ 0 + speed, sp)

절편이 있을 때와 없을 때는 R제곱 계산 방법이 다름 절편이 있을 때: R제곱 = 1 - 잔차분산 / (평균으로 예측할 때의 잔차분산) 절편이 없을 때: R제곱 = 1 - 잔차분산 / (0으로 예측할 때의 잔차분산)

이차함수

m = ols('dist ~ 0 + I(speed**2) + speed', sp).fit()
m = lm(dist ~ 0 + I(speed**2) + speed, df)