Python

최소자승법(OLS)을 활용한 단순선형회귀모형

통계홀릭 2021. 9. 26. 00:05

최소자승법(OLS: Ordinary Least Squares)은 

 

잔차제곱합(RSS: Residual Sum of Squares)을 최소화하는 가중치 벡터를 구하는 방법이다. 

 

 

이번 게시글에서는 최소자승법을 이용해,

독립변수가 하나인 단순선형회귀모형을 Fitting해 보려고 한다. 

 

 

들어가기에 앞서 : 선형회귀모형의 가정

 

(1) 선형성 : 종속변수(y)와 독립변수(x) 간의 선형 관계 

(2) 독립성 : 독립변수간 독립(다중공선성이 없다) 

(3) 잔차의 등분산성 : 잔차들의 분산이 일정

(4) 잔차의 정규성 : 잔차들의 분포가 정규 분포를 따름

(5) 잔차의 독립성 : 관측된 y들은 서로 독립 

 

사용한 Package 

 

 

임의로 Dataset 만들기

 

 

임의로 만든 Dataset. 데이터의 관측 수는 100개이다. 

 

 

Model Fitting

 

내가 만든 데이터이므로, 나는 사실 참값을 알고 있다.

 

기울기의 참값은 0.5이고 y절편의 참값은 20이다. 

오차항은 N(0,16)을 따른다. 

 

그러나 평소였다면? 내가 아는 것은 100개의 data set 뿐.                                                                                                                                                                                                                              

 

일단 fitting해 본다. 

                                                                                                    

 

대충 선형인 것 같다! 가정 1(선형성) 만족. 

 

여기서는 독립변수가 1개 뿐이므로(x0는 1벡터이다),

가정 2(독립변수간 독립성)는 고려하지 않아도 된다.  

 

 

가정 3~5는 '잔차'와 관련된 가정인데 

여기서 잔차란 실제값과 추정치의 차이를 말한다. (y - y_hat) 

 

그렇다면 잔차에 대한 가정은 추정치를 구한 다음 체크해 보자. 

 

 

rcond 옵션은 matrix X의 rank를 정하기 위한, singular value의 cut-off이다. 

 

np.linalg.lstsq의 return값은 4개인데, 우리는 그 중에 solution만 가져왔다. 

 

 

데이터로부터 추정한 기울기는 0.49, y절편은 20.29이다. 

 

참값이 각각 0.5, 20이었던 것을 상기해 보면 나름 잘 추정하였다. 

 

 

이제 잔차를 구할 수 있게 되었다.  

 

가정 3(등분산성)은 y_hat과 e를 fitting해 봄으로써 체크할 수 있다. 

 

 

정상적인 잔차그림은 0을 중심으로 일정 범위 내에서   값에 관계없이, 특정한 패턴 없이 그려진다. 

 

 

참고로 등분산성에 대한 수치적인 검정은 아래 두 가지 검정을 활용한다. 

 

(1) Brown-Forsythe (2) Breusch-Pagan  (오차의 분포가 정규분포일 때)

 

 

 

 

가정 4(정규성)는 Histogram이나 Q-Q plot을 그려봄으로써 체크할 수 있다.

 

 

정규성에 대한 수치적인 검정은 아래 두 가지 검정을 활용한다. 

(1) Shapiro-Wilk 

(2) Jarque-Bera 

 

 

 

가정 5는 앞뒤 오차 간의 관계를 산점도로 나타내어 체크할 수 있다. 

 

 

독립성에 대한 수치적인 검정은 아래 두 가지를 활용한다.

(1) Durbin-Watson

(2) ACF 

 

 

 

 

 

 

이렇게 가정을 모두 만족함을 확인하였으니, 최종 선형모델을 구하고 마무리한다. 

 

 

'Python' 카테고리의 다른 글

Jupyter Notebook 실행 및 홈 경로 변경  (0) 2021.09.25
Anaconda 설치로 Python 프로그래밍  (0) 2021.09.25