1.
요새 R이 크게 유행한다고 해서 글을 하나 올렸는데 아무도 읽은 사람이 없는 것 같습니다. 저도 미국에서 대학원 다닐 때 R의 이전 버전인 S를 매우 좋아했는데 이게 일반적인 통계 프로그램인 SAS, SPSS. BMDP과 완전히 다른 성격의 프로그램입니다.
아마 자료수가 엄청나게 많은 데이터를 자유로이 변형시킬때는 도움이 많이 될 겁니다.
2. sort, order, rank
지난 글 마지막에서 sort와 order를 소개했는데 썼다가 지웠습니다.
이거 다시 정리해서 글을 써야 할 것 같습니다. 비슷한 명령어로 rank가 있고요, 더구나 굉장히 중요한 응용이 있습니다.
만약 몇 만이 되는 정부 데이터가 있다고 하죠. 여기에 소득수준 변수가 있고요. 아니면 학교의 학생 수학 성적이 있다고 생각해도 됩니다. 이 자료를 가장 작은 값부터 시작하는 데이터를 만들어 조사하고 싶은 것이죠.
그럼 소득이나 수학성적을 sort 시키면 가장 낮은 값부터 시작하는 변수로 만들 수 있습니다. 그러나 이렇게 할 경우 그 변수 자체는 바꿀 수가 있지만 바뀐 변수가 누구인지는 전혀 알 수가 없습니다. 즉 변수는 바꿀 수 있지만 전체 데이터는 최소값부터 바꿀 수가 없습니다.
이 경우 Id 변수를 추가로 만들어 바뀐 순서가 id에 정보가 나올 수 있도록 해야 합니다. 만약 가장 작은 값부터가 아니라 가장 큰 값부터 정리하자면
rev 함수를 쓰시면 됩니다.
즉, rev(sort(a));
하면 됩니다.
나중에 정리해서 다시 글을 올리겠습니다.
3. seq
지난번 글에서 데이터 변형하는 기본 명령어를 알아보았습니다. 핵심적인 명령어는 seq입니다.
seq(3,10)은 3:10과 같습니다.
만약 위의 seq을 더 늘리려면 c를 사용하시면 됩니다.
c(seq(3,10), seq(15, 20));
seq(x)는 1:x와 같습니다.
seq은 반대 방향으로도 갈 수 있습니다.
seq(5, -7);
기본형이 seq(from, to)이지만 seq(from, to, by=), seq(from, to, length=) 이런 형태로 자주 사용돕니다.
seq(-pi, pi, length=10)
기타 잡다한 명령어로 rep 명령어가 있습니다. rep(1:3, 5);
max, min, 반올림하는 round, ceiling, floor 등이 있습니다.
또한 수학 명령어가 있습니다. 이건 보면 대부분 직관적이라 구태여 설명이 필요한 것 같지 않습니다. 약간 특이한 것으로 %/%가 있습니다.
그리고 통계에 관련된 것이 있습니다. 이건 simulation 하려면 이것을 할 줄 알아야 하죠. 나중에 필요한 경우에 설명 드리겠습니다.
마지막으로 그래프 명령어가 있습니다.
2. RS의 프로그램의 기본
프로그램은 하는 방법은 기본적으로 2가지 방법이 있습니다. 다른 프로그램에서도 많이 나오는 그냥 명령문을 한꺼번에 쓰는 것입니다. 더하기 하는 프로그램을 한번 생각해보죠.
노트패드를 꺼내
a<-3;
b<-5:
d<-a+b;
d;
그리고 이걸 firstplus라는 파일 이름을 줍니다.
그런 다음 명령문 창에서 source("firstplus.txt")
하면 결과물 8을 얻을 수 있습니다.
이걸 좀 더 일반화해서 더하는 프로그램을 만들 수 있습니다.
myplus<-function(a, b){
d<-a+b;
d;
}
주의: 맨 마지막 } 다음에 눈에 보이지는 않지만 enter카를 한번 더 눌려야 합니다.
노트패드로 위처럼 짠 뒤 myplus라고 이름을 붙힙니다. 그런 다음 s나 r의 명령문 창에서 source("myplus.txt") 한 다음 아무런 에러메시지가 없으면 이 2개의 숫자를 더하는 함수를 만들게 된 겁니다.
그럼 여러분은 이 세상에 어디에도 없는 myplus라는 자기만의 명령문을 만들어 쓰게 된 것입니다.
그런 다음 명령문 창에서 myplus(10, 9)하면 19라는 값을 얻게 되고 이게 나중에 필요해서 저장할 필요가 있으면 명령문 창에서 sol<-myplus(10, 9) 하면 여러분 작업 폴더에 sol는 변수가 생기고 여기에 19라는 값이 저장이 됩니다. 그리고 필요할 때 이 19라는 값을 항상 불러서 쓸 수 있습니다.
프로그램하는 위의 2가지 방법 중 어느 쪽이 더 좋은 방법일까요?
당연히 batch 파일을 만드는 것보다 함수를 만드는 방법이 훨씬 낫습니다.
batch 파일 형식은 프로그램 실행시 그 파일 안에 있는 변수는 모두 메모리에 그 변수 이름으로 남아 있습니다. 그래서 메모리 효율성도 떨어지고 변수 이름 선정도 다름 변수들과 충동이 일어날 수 있습니다.
이에 반해 함수를 이용하는 방법은 매우 효율적입니다. 이 함수를 불러 쓸 경우 그 당시에만 작동되어 메모리에 들어가지만 일단 프로그램 작업이 끝나면 이 변수들은 메모리에서 사라집니다.
위의 myplus의 경우 작업이 끝나면 프로그램에 정의된 a, b, d 모두 메모리에서 사라지고 또 다른 작업에서 이 변수들의 이름을 자유로이 사용할 수 있습니다.
다음 함수 프로그램은 제가 실제로 짜서 제 작업에 이용하고 있는 프로그램입니다.
사회과학 설문지에는 대부분 Likert 척도로 되어 있습니다. 통상 3점, 5점, 7점 척도들이 많이 사용됩니다.
이런 Likert 척도의 경우 설문응답자들이 기계적으로 응답하는 경향이 있습니다. 그래서 이걸 방지하기 위해 의도적으로 반대로 물어보는 문항을 삽입하곤 합니다. 그래서 이런 역문항은 분석에 들어가기 전에 다시 역코딩을 해야 합니다.
아래 함수는 자기가 가지고 있는 mydata에서 Likert 5점 척도의 10, 13, 18, 20번째 설문문항이 역문항이라고 할 때 이걸 수정하는 방법입니다.
아래 myrev라는 함수를 노트패드에서 만들고
명령문 창에서 source("myrev.txt")하신 다음 처음 코딩한 데이터가 mydata에서 일 경우 다음과 같이 하시면 됩니다.
newdata<-myrev(mydata, c(10, 13, 18, 20),5))
myrev<-function(dat, group, n){
r<-dim(dat)[1];
dat[1:r, group]<-(n+1)-dat[1:r,group];
dat;
}
'기타통계이야기 > 통계프로그램 S-plus소개' 카테고리의 다른 글
하루에 R하나 정도는:simulation으로 중심극한정리 증명 (0) | 2024.07.13 |
---|---|
R프로그램: 필독 (0) | 2024.07.05 |
R 프로그래밍3 (1) | 2024.07.02 |
R 프로그래밍1 (0) | 2024.06.29 |
통계프로그램 , S-plus 소개 (0) | 2013.05.06 |