기타통계이야기/통계프로그램 S-plus소개

통계프로그램 , S-plus 소개

학위논문통계 2013. 5. 6. 02:58

 

이번에는 이쪽에 관련된 프로그램을 간단히 소개하겠습니다.

 

먼저 흔히 이야기하는 수학 프로그램입니다. 대표적인 것이 mathematica와 maple 등이 있습니다. 이건 우리가 중고등학교 수학 문제 푸는 것과 같은 문제를 해결해 주는 프로그램입니다. 적분값이 어떻게 되는지, 미분하면 어떤 함수가 되는지 이런 것을 풀어줍니다.

 

그 다음에 데이터 처리하는 프로그램입니다. matrix manipulator라고도 합니다. 우리가 설문지 500부에 변수가 50개 있다고 하면 이때 코딩한 데이터는 500*50 크기의 행렬이 됩니다. 이런 프로그램의 대표적인 것이 이공계에서 많이 사용하는 matlab입니다. 그리고 경제학과에서는 전통적으로 쓰는 gauss가 있고요. 통계학과와 통계를 많이 사용하는 교수들이 쓰는 S-plus가 있습니다.

 

S-plus는 S라는 프로그램의 상업용입니다. 원래 S는 AT&T의 벨연구소에서 개발해서 무료로 배포되는, UNIX에서 사용되던 프로그램인데 이게 상업용으로 변해 S-plus가 되었습니다. 지금은 망한 것 같습니다. 그래서 S-plus의 공짜용 프로그램인 R이 현재 많이 사용되고 있는 것 같고요.

 

그리고 일반 범용 통계 프로그램이 있습니다. 기업들이 많이 사용하는 SAS가 대표적이죠. 이 회사는 한국에도 많이 알려져 있죠. 근무환경이 좋다고 티비에서 소개되기도 했고요. 그런데 윈도우용 프로그램 interface는 개판입니다. 하여간 저는 사용하지 않습니다.

 

그리고 사회과학 하는 사람들이 신처럼 생각하는 SPSS가 있고요. 옛날에 프로그램 버그가 있어서 욕좀 많이 먹었습니다. 제가 지금 쓰는 S-plus도 심각한 벅그가 있습니다. 작업하다가 알았죠. 그리고 6-시그마 하는 사람들이 많이 쓰는 minitab이 있고요. 프로그램 이름에서 알 수 있듯이 대학에서 교육용으로 가볍게 개발된 것인데 처음 6시그마가 나왔을 때 이 프로그램을 쓴 것 같습니다. 그 다음에 BMDP라는 프로그램이 있고요. 의대쪽에 강한 통계 프로그램입니다. 최근에는 Stata(?)가 하는 프로그램을 많이 사용하는 것 어디서 개발된 것인지 모르겠습니다. 기타 여러 프로그램등이 있고, 특수한 목적으로 개발된 프로그램도 있습니다.

 

범용적인 통계 프로그램이 아니고 특수한 프로그램을 사용해야 하는 경우 의뢰시 프로그램을 구해주셔야 합니다. 그리고 이런 종류의 의뢰는 지금과 같이 논문시절에는 받을 수가 없습니다. 지금은 뻔한 의뢰들을 받아야 하거든요. 이런 경우는 교수들이 미국에서 자기가 공부한 것을 좀 자랑하려고 학생들에게 시키는 경우입니다. 그래서 특수한 프로그램을 사용하고요. 하여간 이런 의뢰는 시간이 많이 남는 방학때 의뢰하시는 것이 좋습니다.

 

그리고 경제학과에서는 특수한 프로그램등이 많이 있습니다. 시계열데이타를 처리하는 TSP도 있고, 특수한 종속변수를 처리하는 Limdep이라는 것도 있고, 지금은 일반적으로 Eview를 많이 사용하는 것 같습니다.

 

여기서는 잠깐 S-plus를 소개하겠습니다. R 프로그램은 제가 쓰지는 않지만 S언어과 거의 같을 것이라 추측합니다. 단순한 emulation인지 아니면 S 개발에 참여한 사람이 R을 개발했는지는 확실히 모르겠네요.

 

하여간 두 책을 소개하겠습니다.

 

The New S Language-A Programming Environment for Data Analysis and Graphics, Becker, Chambers, Wilks

-한마디로 고전입니다. S나 R 프로그램하는 사람은 꼭 가지고 있어야 하는 책입니다.

 

Modern Applied Statistics with S-Plus, Venables, Ripey

-고급 통계를 S로 짠 프로그램입니다. 좀 어렵습니다. 처음부터 열심히 봐야 합니다.

 

 

 

S-plus가 망했기 때문에 그냥 공짜로 얻어서 사용해도 별 문제가 없을 것 같습니다. 혹시 학교에 통계학과에 있다면 과 사무실에 가면 쉽게 구할 수 있을 겁니다. 혹시 필요하신 분이 있으면 제가 보내 드리겠습니다. 일단 S-plus 그림을 한번 볼까요.

 

 

 

 

 

 

 

 

사실 저는 메뉴는 거의 사용하지 않습니다. 유저 interface가 개판입니다. 그리고 버그도 많고요. 한국판만 그렇지는 모르겠지만요. S-plus를 한국에 공급한 회사가 김대중 정부시절 유망한 벤처 기업으로 한창 떴는데요. S-plus 만 아니라 GIS 프로그램도 팔았거든요. 그런데 자기 기술은 하나도 없고 외국 소프트웨어 갔다 파는 회사가 무슨 대단한 벤처회사라고. 그 당시 벤처 거품이 너무 심했죠.

 

 

통계하는 사람이 왜 S를 사용할까요? 일반인이 아는 것과 달리 통계하는 사람들은 통계프로그램 거의 사용하지 않습니다. 공부해도 이론을 많이 하고 그리고 논문도 SPSS나 SAS 이런 것을 사용해서 논문을 쓰지 않습니다. 수식으로 풀어내거나 아니면 simulation을 하거든요. 간단한 것을 제외하고요 사실 수식으로 풀어내는 것은 거의 어렵고 대부분 simulation이죠. 물리학에서 이론 논문 쓰는 것은 힘들고 다 실험 논문이죠. 그런 것이랑 비슷합니다. 그래서 수학이나 통계, 물리 이론 논문을 사회과학 논문 쓰는 것과 비슷하게 취급하면 곤란합니다.

 

 

 

하여간 이론을 간단히 점검한다든지 simulation을 할 경우 옛날에는 fortran이나 C로 프로그램을 짰습니다. 그런데 이게 그리 간단하지 않습니다. 컴퓨터 언어를 배우는 것도 쉽지 않지만 알고리즘까지 많이 알아야 하거든요. 예를 들면 역행렬을 구하려면 소스코드를 구하거나 이게 잘 안되면 역행렬 구하는 알고리즘을 공부해서 본인이 직접 짜야 합니다. 사실 이런 어려운 알고리즘을 모듈로 파는 회사도 있습니다.

 

 

 

그러나 S나 matlab, Gauss 같은 프로그램에서는 역행렬 구하는 명령어가 다 되어 있습니다. invM<- inv(M)하면 역행렬이 바로 구해집니다. 명령어 하나면 된다는 것이죠. 그러니 이런 프로그램이 구세주입니다.

 

 

 

일반인들은 이런 프로그램이 굉장히 어려울 수 있습니다. 크게 나누면 메뉴식으로 클릭하는 방법과 도스 명령창에서 명령어 때리듯이 interactive 방식이 있는데 서로 장단점이 있습니다. 앞의 그림에서 보듯이 S-plu는 두가지 다 지원합니다.

 

처음에는 명령어 쳐서 좀 익히다가 나중에 좀 익숙해지면 스크립을 짜거나 자기만의 함수를 만듭니다. 그냥 메모장에서 text 파일로 만들면 됩니다. SPSS에서도 스크립을 짜서 돌릴 수 있는데 그 기능이 너무 약하죠. 아니면 비주얼 베이직 같은 프로그램을 짜서 연결시킬 수도 있는데 이렇게 하는 사람이 있는지 모르겠습니다.

 

그래서 기본적으로 이런 데이터 처리 프로그램은 interpretor 언어입니다. 프로그램을 짜서 실행파일을 만드는 것이 아니라 텍스트 파일로 만들어 그 프로그램안에서 돌려야 합니다. 이게 텍스트 파일이라 남이 만든 것이라도 읽을 수 있기 때문에 어떻게 짰는지 알 수도 있고, 수정해서 사용할 수도 있습니다.

 

얼마나 편리한 지 실제 짠 프로그램을 볼까요. 만약 회귀분석에서 회귀계수를 구하는 프로그램을 한번 짜보죠. 독립변수는 같고 종속변수는 100개가 된다고 생각해보죠. 즉 SPSS에서는 종속변수를 달리해서 회귀분석을 100번 클릭해야 합니다.

 

회귀계수 구하는 공식은 다음과 같습니다.

 

 

 

 

 

입니다. 여기서 X는 여러분이 코딩한 데이터에서 독립변수 부분만 골라낸 것입니다.

 

 

그럼 S 코드는 다음과 같습니다.

 

mybeta<-function(data, dep.gp, indep.gp){

 

Y<-data[ , dep.gp];

 

X<-data[ , indep.gp];

 

beta<-inv( t(X) %*% X ) %*% t(X) %*% Y;

 

beta;

}

 

이걸 작업 폴더에 mybeta.txt로 저장하고 S-plus 명령문 창에서

 

source("mybeta.txt")

 

하면 이 다음부터는 이 mybeta라는 함수는 마치 S-plus 회사에서 만들어 놓은 명령문처럼 언제든지 사용할 수 있습니다. 즉 명령문에서

 

mycoeff<-mybeta(data, 1:100, 101:103)

 

하면 세 개의 독립변수가 있을 경우, 종속변수가 100가지 인 경우의 회귀분석의 회귀값을 구해집니다. 즉 mycoeff에서는 4*100의 값이 구해집니다.

 

참 간단하죠. 종속변수가 100개나 되는데 이렇게 간단하게 짤 수 있는게 이게 vector computing 이기 때문입니다. 설문응답자가 500명인 경우 위 프로그램의 Y는 500*100 크기의 행렬이 됩니다. 이걸 일일이 따로 따로 명령문을 짜지 않고 바로 Y를 곱하면 된다는 것이죠. 이게 진짜 컴퓨터 언어에서는 이렇게 되지 않습니다. do 명령문을 사용하여 계속 반복작업을 시켜야 합니다.

 

또 하나는 object oriented 인데 이것 때문에 결과물 자체도 하나의 데이터로 받아 들여서 처리할 수 있습니다. 이거 많이 편합니다. 이거 때문에 제가 작업하는데 편하게 할 수 있습니다. SPSS에서는 출력물을 엑셀로 변환하여 한글로 옮겨야 하는데 이게 양식에 잘 안맞을 수 있습니다. 간단한 것은 엑셀에서 조작해서 하면 되지만 작업량이 많은 경우는 끔직한 일이 될 수 있습니다. 그러나 S-plus에서는 출력형태를 자신이 프로그램 짜서 만들 수 있습니다. 그래서 원하는 표 양식에 맞춰 출력형태를 만든 다음 엑셀로 변환한 다음 바로 한글에 복사-붙이기 하면 됩니다.

 

즉 비슷한 형태의 작업량이 많을 경우 이런 프로그램이 압도적으로 유리합니다.

 

object oriented programming 하면 잘 모르실 건데 옛날 컴퓨터 언어는 procedure 언어였습니다. 우리가 문제를 풀 듯이 차례차레 풀어가는 과정을 쓰면 됩니다. 그러나 스프트웨어가 커지니까 이런 식의 프로그래밍이 문제가 많습니다. 수정하고 업데이트하기가 안 좋다는 것이죠. 그래서 나온게 object oriented 프로그램입니다. 풀이 과정보다 데이터 자체를 더 중요시하는 것이죠.

 

그런데 이게 저희들에게는 더 힘든 일이 되었거든요. 어떤 문제를 해결하기만 하면 되는데 이걸 하기 위해서 object oriented 프로그래밍을 배워야 하거든요. 이게 procedure 언어보다 훨씬 복잡합니다. 그래서 이젠 이런 S나 R 또는 matlab 같은 프로그램을 쓰지 않을 수가 없습니다.

 

혹시 미국에 유학을 가실 뿐은 통계 프로그램을 꼭 배우가 가시기 바랍니다. 영미 학문 풍토가 거의 일방적인 계량 실증분석 일색이라 어쩔 수가 없습니다. 원하는 학교의 학과에서 어떤 통계 프로그램을 많이 사용하는지 알아서 미리 배워가면 장학금 받기가 휠씬 쉬워집니다.