I-function
실습 데이터
중고차 데이터 car.xlsx를 불러와 회귀 모형을 적합함.
import pandas as pd
from statsmodels.formula.api import ols
df_car = pd.read_excel("car.xlsx")
df_car.head()
I 함수
- 관계식의
+,*,**등은 모형 항을 구성하는 특별한 문법 I()로 감싸면 괄호 안의 식을 산술 연산으로 계산- 다음 모형은 두 손해액의 합을 하나의 독립변수로 사용
combined_damage_model = ols(
"price ~ I(my_car_damage + other_car_damage)",
data=df_car,
).fit()
combined_damage_model.summary()
실행 결과는 다음과 같음.
price=941.2977−2.123×10−5(my_car_damage+other_car_damage)- 합산 손해액의 회귀계수: −2.123×10−5, p<.001
- 결정계수: R2=0.155
- 두 손해액을 먼저 더하므로 두 변수에 동일한 회귀계수가 적용됨
두 손해액의 회귀계수를 따로 추정하면 다음과 같음.
separate_damage_model = ols(
"price ~ my_car_damage + other_car_damage",
data=df_car,
).fit()
separate_damage_model.summary()
my_car_damage: p<.001other_car_damage: p=.007- 결정계수: R2=0.197
- 두 손해액과 가격의 관계가 서로 다를 수 있도록 허용한 모형
제동거리 데이터
speed.xlsx의 속도(speed)와 제동거리(dist)를 사용함.
speed: 자동차 속도, mphdist: 정지할 때까지의 제동거리, ft
sp = pd.read_excel("speed.xlsx")
sp.head()
2차항의 추가
- 다음과 같은 2차 모형을 관계식으로 만들 수 있음
- 거듭제곱에는
**를 사용
ols("y ~ I(x**2) + x", data=df).fit()
관계식에서 x2은 I(x**2)로 표현함. 먼저 속도의 선형항을 사용한 모형을 적합함.
linear_speed_model = ols("dist ~ speed", data=sp).fit()
linear_speed_model.summary()
speed의 회귀계수: 3.9324, p<.001- 결정계수: R2=0.6511, 수정 R2=0.6438
- AIC: 417.16
다음 모형은 선형항을 제외하고 속도의 2차항만 사용함.
squared_speed_model = ols(
"dist ~ I(speed ** 2)",
data=sp,
).fit()
squared_speed_model.summary()
- 2차항의 회귀계수: 0.1290, p<.001
- 결정계수: R2=0.6659, 수정 R2=0.6589
- AIC: 414.99
- 이 표본에서는 2차항만 사용한 모형의 R2가 더 높고 AIC가 더 낮음
dist ~ I(speed ** 2)는 선형항을 포함하지 않는 모형임
절편이 없는 모형
관계식에 0 +를 추가하면 절편을 제외함. 먼저 선형항만 사용한 모형을 적합함.
no_intercept_linear_model = ols(
"dist ~ 0 + speed",
data=sp,
).fit()
no_intercept_linear_model.summary()
speed의 회귀계수: 2.9091, p<.001- 비중심 결정계수: Runcentered2=0.8963
- 수정 비중심 결정계수: 0.8942
- AIC: 421.75
다음 모형은 절편을 제외하고 선형항과 2차항을 함께 사용함.
no_intercept_quadratic_model = ols(
"dist ~ 0 + I(speed ** 2) + speed",
data=sp,
).fit()
no_intercept_quadratic_model.summary()
speed의 회귀계수: 1.2390, p=.032- 2차항의 회귀계수: 0.0901, p=.004
- 비중심 결정계수: Runcentered2=0.9133
- 수정 비중심 결정계수: 0.9097
- AIC: 414.80
- 두 무절편 모형 중 선형항과 2차항을 함께 사용한 모형의 적합도가 더 높음
절편이 있는 모형의 결정계수는 다음과 같음.
R2=1−∑i(yi−yˉ)2∑i(yi−y^i)2statsmodels는 절편이 없는 모형에서 비중심 결정계수를 출력함.
절편이 있는 모형의 결정계수와 비중심 결정계수는 기준이 다르므로 직접 비교하지 않음. 같은 비중심 결정계수를 사용하는 두 무절편 모형끼리는 비교 가능.
절편의 기준점 이동
절편은 독립변수가 0일 때의 예측치임. year에서 2010을 빼면 2010년을 새로운 기준점으로 설정 가능.
year_model = ols("price ~ year", data=df_car).fit()
centered_year_model = ols(
"price ~ I(year - 2010)",
data=df_car,
).fit()
centered_year_model.summary()
- 원래 모형의 절편: −213508.6444
- 기준점 이동 후 절편: 505.0926
- 두 모형의 기울기: 106.4745
- 두 모형의 결정계수: R2=0.6871
- 기준점 이동 후 절편은 2010년 차량의 예측 가격
- 기울기, 적합값, 잔차, 결정계수는 변하지 않음
퀴즈
I 함수를 사용하는 이유로 가장 적절한 것은?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.