Today I Learned/통계

회귀분석(2) - Python으로 회귀분석 해보기

하나719 2020. 10. 28. 19:08
반응형

1. 라이브러리 Import

여기서 회귀분석을 도와주는 라이브러리는 맨 위에 ols 이다!

from statsmodels.formula.api import ols
import pandas as pd
import matplotlib.pyplot as plt

2. 회귀분석 할 파일 불러오기

speed에따른 제동거리를 선형회귀분석 해보자

- 독립변수: speed

- 종속변수: dist

df = pd.read_excel('data/speed.xlsx')
df.head()

df.head()

3. Scatter plot으로 분산 그려보기

df.plot.scatter('speed','dist')

양의 상관관계가 보인다.

4. ols('y ~ x' ,data).fit() 모형 적합시키기

'y ~ x1 + x2 + x3' -> 독립변수가 여러개 일 경우에는 + 로 추가해줍니다.

res=ols('dist ~ speed',data=df).fit()

5. 결과지 확인하기

res.summary()

summary 결과

1) 계수

  • 절편(Intercept): -17.5791 
  • speed의 기울기: 3.9324
  • 모형 수식: y = 3.9324 * X - 17.5791 

-> speed 1 증가할 때, 제동거리는 3.9 증가합니다.

 

2) 신뢰구간

신뢰구간은 P-value와 같이  본다.

P-value < 유의수준일 경우 계수의 신뢰구간이 + 또는 - 에서만 존재한다. 

만약 신뢰구간이 -1 ~ 1 이라면 통계적으로 유의하다고 보기 어렵다.

 

speed는 표준오차(std) 0.416으로 95% 신뢰구간으로 보면 [0.025] ~ [0.975] 에서 모두 양수, 

P-value < 유의수준이 0.05보다 작으므로 통계적으로 유의하다고 해석한다.

 

3) 모형 적합도 지수

R-squared, adj.R-squared, AIC, BIC 등이 있다. 여러 모형 중에 적합도 지수가 좋은 모형을 선택한다!!

 

  • R-squared = 1 - Rss / Tss
    • RSS: 회귀분석 이후 남은 잔차 제곱 합
    • TSS: 회귀분석 이전 남은 잔차 제곱 합

회귀분석 이후 잔차가 많이 줄어들수록 R제곱 커진다. 따라서 R제곱이 클수록 설명력이 높다고 할 수 있다!

R제곱이 0.651로 65%의 설명력을 가진다고 할 수 있다.

 

  • adjusted R-squared = 1 - (RSS /(n-k-1)) / (TSS/(n-1))
    • n: 표본의 크기
    • k: 독립변수의 개수 

R제곱은 독립변수를 추가할때마다 커지게 된다. 따라서 불필요한 독립변수를 추가하면 작아지도록 보정해준게 수정 R 제곱이다!!

그래서 모형을 고를때 수정 R 제곱을 봐주는것이 좋다.

 

반응형