獨斷論

Stepwise linear regression 수행하기 (SPSS 사용설명서 20) 본문

과학과 기술/SPSS

Stepwise linear regression 수행하기 (SPSS 사용설명서 20)

부르칸 2015. 4. 4. 20:57

Stepwise linear regression를 우리말로는 단계적선형회귀라고 한다.
이 방법은 선형회귀를 수행할때 우리가 임으로 독립변수를 선택하는 것이 아니라 알고리즘에 의해서 독립변수를 자동적으로 선택하는 방법이다.


요즘은 데이터가 너무 방대하다. observation도 많을뿐만 아니라 변수도 많다.


하나의 종속변수에 대한 선형회귀모델을 만들때 데이터에 있는 모든 변수를 독립변수로 사용하여 선형회귀모델을 작성하면 overfitting이 되서 모델이 정확하지 못하다. 또한 그렇다고 하여 너무 적은 숫자의 독립변수를 이용하여 선형회귀모델을 만들면 예측력이 떨어진다.

어떻게하면 적절한 독립변수를 선택하여 선형회귀모델을 만들수 있을까?

자동적으로 해주는 방법이 여기서 이야기하고자 하는 stepwise linear regression이다. 


물론 모델에 대한 causality가 확실하다면 해당되는 독립변수를 선택하여 선형회귀모델을 작성하는 것이 가장 확실한 방법이다. 데이터를 가지고 있을때 원인과 결과에 대한 가설을 일단 세우고 그 가설을 가지고 선형회귀모델을 작성하여 무엇이 잘못되었는지 수정 검증하는 모든 가능한 방법을 다 사용해도 만족할만한 결과를 얻지 못하였을때 최후의 보루로 사용하는 것이 stepwise linear regression이다. 편리하다고 하여 아무때나 무턱대고 stepwise linear regression을 사용해서는 안된다. 


이제 아래 데이터 파일을 받아서 SPSS에서 읽은 후에 stepwise linear regression을 수행해보도록 하자. 


car_sales2.csv


위 파일을 잘 읽었다면 아래와 같은 형태가 된다.



위 데이터의 변수에 대한 설명은 다음 링크를 참조하면 된다. http://dogmas.tistory.com/377


이제 stepwise regression을 수행해보도록 하자.


Analyzie > Regression > Linear...를 클릭한다. 


위와 같은 윈도우가 뜨면 다음과 같이 변수를 설정한다.

Dependent: lnsales

Indepedent: type, price, engine_s, horsepow, wheelbas, width, length, curb_wgt, fuel_cap, mpg

여기서 lnsales는 sales 변수를 로그변환한 것이다.

그리고 Case Labels에 model 변수를 지정한다. 


지금까지는 일반적인 선형회귀와 똑같다.

이제 stepwise linear regression을 수행하기 위한 것들을 알아보자.


Method 설정하기

Independent variable를 설정한 바로 밑에 Method라고 되어 있는데 그 옆에 Enter라고 되어 있는 것을 클릭해서 Stepwise를 선택하면 stepwise linear regression을 수행할수 있다.

그밖에 Remove, Backward, Forward 등이 있는데 이는 hierarchical linear regression에서 설명하도록 하겠다.



그밖에 기타 설정들

Statistics

Statistics 버튼을 클릭하면 아래와 같은 윈도우가 하나 뜬다.



Casewise diagnostics를 클릭한 후에

Outliers outside에 2를 입력한다. 

Continue를 클릭한다.


Plots

Plots 버튼을 클릭하면 아래와 같은 윈도우가 뜨는데


Y 변수에 SDRESID를 설정하고 X에 ZPRED를 설정한다. SDRESID는 표준화된 residual값이고 ZPRED는 z transform된 예측값을 의미한다.

그 밑에 Histogram를 클릭한다. 

Continue를 클릭한다.


Save

Save 버튼을 클릭하면 아래와 같은 윈도우가 하나 뜬다.



Predicted values에서 Standardized를 선택하고

Residuals에서 Standardized를 선택하고 

Distances에서 Cook's와 Leverage values를 선택한 후에

Continue를 클릭하고


stepwise linear regression 윈도우로 돌아가면 OK를 클릭한다. 


결과보기




위 결과는 어떤 독립변수가 사용되었는지를 나타낸다. Model 1에서는 오직 price만 독립변수로 사용되었고, Model 2에서는 price와 wheelbas가 사용되었다는 것을 의미한다. 이제 이 변수들을 독립변수로 사용되었을때 R sqaured값이 어떻게 변하였는지를 보면...



Adjusted R square 값이 0.422이다. 그렇게 나쁘지 않은데 왜냐하면 데이터의 변수가운데 type ~ mpg까지 10개의 변수를 독립변수로 사용하였을때 adjusted R square가 0.449이기때문이다. 그 값은 http://dogmas.tistory.com/377에서 볼수 있다. 


Coefficients의 결과를 보면



p-value가 price와 wheelbas에 대해서 모두 0.000이다.


이제 residual들의 분포가 어떤지를 알아보자.


 

 




왼쪽 그래프에서 정규분포를 대략 따르지만 벗어나는 것이 2개 보인다. 오른쪽 그래프에서 3000GT 모델의 residual 값이 다른 데이터와는 상당한 차이를 보이므로 3000GT를 분석에서 제외해보자.

(보통 stepwise linear regression이라하면 여기까지의 과정을 말한다. 아래과정은 model remedy라고 부른다. 일반적인 선형회귀분석에도 아래과정은 사용가능한 방법이다.)


모델 수정 1

제외하는 방법은 아래와 같다.

Data > Select Cases...를 선택한다. 아래와 같은 윈도우가 뜨면


If condition is satisfied를 선택하고

그 밑에 If를 클릭하면 윈도우 하나가 더 뜨는데

조건식 입력란에 model ~= '3000GT'라고 입력한 뒤에

Continue를 누르고 OK를 누른다.


다시 Analyze > Regression > LInear...를 클릭한 후에 윈도우가 뜨면 아무것도 바꾸지 말고 Ok를 눌러서 Stepwise linear regression을 수행한다.


수정결과 1

이번에는 모두 변수를 3개를 사용한 선형회귀결과가 나왔다.




Model 3의 Adjusted R square 값이 0.468로 훨씬 좋아졌다.

다시 residuals들을 보면 Cutlass의 residual이 매우 다름을 알수 있다.



이는 아래 표에서도 확인된다. 

Cutlass의 Std. Residual 값에 다른 값에 비하여 그 절대값이 월등히 크다.


이제 Cutlass를 분석에서 제외하고 다시 stepwise regression을 수행해보자.


모델 수정 2

Cutlass를 모델에서 제외하는 방법은 앞서 3000GT를 제외하는 방법과 같으므로 설명하지 않는다. 

단지 바뀌는 것은 조건식이 아래와 같다는 것이다.

model ~= '3000GT' AND model ~= 'Cutlass'

Cutlass를 모델에서 제외하고

다시 Analyze > Regression > LInear...를 클릭한 후에 윈도우가 뜨면 아무것도 바꾸지 말고 Ok를 눌러서 Stepwise linear regression을 수행한다.


수정결과 2

Adjusted R square와 model에서 사용된 변수들을 보는 것은 반복되는 과정이므로 여기서는 생략하는데 각자 확인해보는 것이 좋겠다.


 


 



왼쪽 그래프에서 residual 값이 대략 정규분포를 갖는 것을 볼수있다.

오른쪽그래프에서도 많이 벗어나는 residual들은 보이지 않는다.

이것은 앞서 본 Casewise diagnostic에서도 확인할수가 있다.



이제 마지막으로 확인해야 할 것은 cook's distance와 leverage value이다.

Graph > Chart Builder ... 를 클릭하여 cook's distance와 leverage value로 scatter plot을 그려보자.



우선 Scatter/Dot를 클릭하고 그 가운데 가장 첫번째 것을 클릭하여 위에 Chart preview에 끌어 놓는다.

왼쪽 위에 여러 변수들이 나오는데 가장 마지막에 생성된 Cook's Distance와 Centered Leverage value를 X축과 Y축에 가져다 놓는다. 여러개의 cook's distance와 centered leverage value가 있으므로 꼭 마지막 것을 선택해야만 한다.

Groups/points를 클릭하고 그 가운데 Point ID Label를 클릭한다.

이제 Point ID Label에 model 변수를 설정한다. 설정하는 방법은 잡아끌어 놓으면 된다.

OK를 누르면 아래와 같은 그래프가 완성된다.


위 그래프에서 Viper의 Cook's distance와 Centered Leverage Value가 다른 것들보다 매우 크다.

이것도 제외하고 다시 stepwise linear regression을 수행한다.


모델 수정 3

Viper를 제외하려면 아래와 같이 한다.

model ~= '3000GT' AND model ~= 'Cutlass' AND model ~= 'Viper'


다시 Analyze > Regression > LInear...를 클릭한 후에 윈도우가 뜨면 아무것도 바꾸지 말고 Ok를 눌러서 Stepwise linear regression을 수행한다.


수정 결과 3

변수로는 price, wheelbas, engine_s가 포함되었고

Adjusted R sqaure가 0.495로 그렇게 나쁘지 않다.

ANOVA table의 p-value도 모두 0.000이며

coefficients의 p-value는 price는 0.000, engine_s는 0.002, wheelbas는 0.006으로 괜찮다.

Residual도 대략 정규분포를 따르고 있다. 


아래 Cook's distance와 leverage value에 대한 그래프를 다시 그렸는데

벗어난 데이터들이 보이지만 0.1 근방으로 그렇게 크지 않음을 볼수 있다.


이정도 결과면 여기에서 model remedy를 마쳐도 된다.

너무 글이 길어져서 대충 설명한것이 없지는 않지만 그 개략적인 줄거리는 직접 SPSS를 돌려본다면 이해할수 있을 것이다.

Comments