Tag Archives: R

R로 평균값(mean), 중간값(median), 최빈값(mode), 범위(range), 분산(variance) 구하기

R로 평균값(mean), 중간값(median), 최빈값(mode), 범위(range), 분산(variance)을 구해보겠습니다. 그러기 위해서는 우선 준비작업으로 값을 넣어보겠습니다.

여기서 입력하고자 하는 값들은 농구선수가 게임당 특점한 값들이라고 가정했습니다. 1번째 줄은 그 자료를 입력하는 것입니다. 2번째 줄은 그것을 R의 데이터 프레임 형식으로 만들어 player라는 변수에 넣는 것입니다. 마지막으로 3번째 줄은 이 값들에 열 이름을 넣는 것입니다. 엑셀 파일에 1줄로 자료를 입력한 후, 맨 앞 칸에 열 이름을 넣는 것이라고 생각하시면 됩니다. 마지막 줄을 입력하면 지금까지 한 것을 확인할 수 있습니다.

## 데이터 입력
temp <- c(3,3,6,7,7,10,10,10,11,13,30)
player <- data.frame(temp)
colnames(player) <- c("score")
player

자 이제 본격적으로 지금까지 입력한 값을 가지고 하고자 하는 일 차례로 해보겠습니다. 여기서 모든 값이 10으로 다 같습니다. 여기서 참고로 마지막 최빈값은 조금 복잡한 방식으로 처리했는데, 이는 R에 최빈값을 구하는 내장함수가 없기 때문입니다. 참고로 입력하는 방법은 “{” 키를 치고 엔터를 치면 “+”가 나타나고 거기에서 또 명령어를 치면 “+”가 나옵니다. 그렇게 하다가 마지막으로 “}”키를 치고 엔터를 누르면 Mode라는 함수 입력이 완료됩니다. 그럼 다음 마지막 줄에서 그 함수를 사용하는 것입니다. 여기 함수에 대한 내용은 나중에 자세히 살펴보도록 하겠습니다.

## 평균값 구하기
mean(player$score)

## 중간값 구하기
median(player$score)

## 최빈값 구하기
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}

Mode(player$score)

이번에는 범위를 구해보겠습니다. 통계학에서 범위라는 것은 데이터 집합에서 상한값에서 하한값을 뺀 것을 말합니다. 그래서 R에서도 max라는 것을 가지고 상한값을 구한 다음, min이라는 것을 가지고 하한값을 구한 다음, 상한값에서 하한값을 빼서 구했습니다.

## 범위 구하기
max(player$score) - min(player$score)

마지막으로 분산을 구해보도록 하겠습니다. R에서도 손쉽게 var()이라는 것으로 구할 수도 있지만, 우리는 정확하게 모집단을 정확하게 다 알고 있기 때문에 통계학 시간에 배운 공식을 가지고 단순하게 구해봤습니다. 앞에서 최빈값을 구한 것과 같이 함수를 이용했습니다. 참고로 이렇게 구한 값은 R에서 var()으로 구한 값과 다릅니다. 자세한 내용은 통계학에서 소위 모집단 분산과 모집단 분산 추정하기의 다르다는 것을 살펴보시면 됩니다.

## 분산 구하기
my.var <- function(x) {
m <- mean(x)
return (sum((x-m)^2)/length(x))
}

my.var(player$score)

R로 사분위도(Quatile)를 계산해보자.

R은 기본적으로 사분위도(Quatile)를 다루기 위해서 “ quartile(x, p) ”이라는 명령어를 사용합니다.  이 명령어의 사용법은 R 메뉴얼을 보면 다음과 같습니다.

## Default S3 method:
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE,
names = TRUE, type = 7, ...)

여기서 제일 중요한 ‘x’에 들어갈 것은 우리가 조사하고자 하는 자료입니다. 그리고 두 번째로 중요한 것은 ‘probs = seq(0, 1, 0.25)’입니다. 이 명령어의 의미는 0%~100%까지 까지 25%씩 나눠서 계산하라고 명령하는 것입니다. 따라서 위와 같이 입력한다면, “0%  25%  50%  75% 100% “에 해당하는 값을 출력하게 됩니다.그리고 나머지 값은 조금 전문적이 그냥 아래와 같이 사용해도 되고 제거해도 무방합니다. 결국 다음과 같은 정도로 명령어를 사용하면 됩니다.

 ## 간략한 사분위도 명령어:
quantile(x, probs = seq(0, 1, 0.25), na.rm = TRUE, type = 7)

그러면 이 명령어를 예제를 통해서 알아보겠습니다.

  1. 이 명령어를 사용하기 위하여 우선 R에서 다음과 같이 입력하여 연습용 자료를 R에 입력합니다. 이것은 인터넷 상에 있는 자료를 R에 입력하는 명령어입니다. 이 명령어를 인터넷에 있는 자료 대신에 직접 입력하시려면 아래 2번을 보고 입력하시면 됩니다.
  2. player <- read.csv("http://dl.dropboxusercontent.com/u/17387789/chepter_4_ex_2.csv")
    
  3. 위의 것은 인터넷에 있는 자료를 다운 받아 입력한 것이지만, 아래 명령어들은 그것을 직접 입력하는 것입니다. 첫번째 명령어는 우선 자료를 입력하는 것이고, 두 번째 명령은 이를 위와 같은 자료형(정확하게는 데이터 프레임 형식)으로 만드는 것이며, 마지막으로 세 번째 명령어는 그 자료에 열 이름을 넣는 명령어 입니다.
  4. temp <- c(3,3,6,7,7,10,10,10,11,13,30)
    player <- data.frame(temp)
    colnames(player) <- c("score")
    
  5. 위의 1,2번과 같이 자료를 입력하였으면, 이 자료가 잘 들어갔는지 확인해 봅시다. 아래 명령어를 치면 우리가 넣은 자료가 즉, score = {3,3,6,7,7,10,10,10,11,13,30}가 나올 것입니다.
  6. player
    
  7. 다음으로 이 자료에 대한 여러가지 자료를 알기위해 다음과 같이 입력하면, 최소값(Min.): 3.0 일사분위수(1st Qu.): 6.5, 중앙값(Median):10.0, 평균값(Mean):10.0, 삼사분위수(3rd Qu.):10.5, 최대값(Max.):30이 표시됩니다.
  8. summary(player)
    
  9. 마지막으로 사분위도를 계산하기 위하여 다음과 같이 입력해봅시다. 위에서 실행한 값과 거의 같은 값들이 나오게 됩니다. 여기서 나오는 값들은 위의 자료를 값이 증가하는 방향으로 나열하고, 그 자료의 구역을 4등분(예를 들어 20명 성적을 낮은 점수에서 높은 점수로 배열한 후, 가장 꼴지 즉 20등 점수, 25%에 있는 점수 다시 말해 15등 점수, 50% 중간인 10등 점수, 75%에 있는 5등 점수, 그리고 마지막으로 1등 점수를 보여주게 됩니다. 물론 여기서 “0.25”를 “0.1”로 한다면, 20등, 18등, 16등, 14등, … 6등, 4등, 2등, 1등 점수가 나오게 됩니다. 물론 여기에는 조금 복잡한 이론이 있습니다. 예를 들어 어떤 자료는 정확하게 그 등수, 더 자세하게 말하면, 중간 등수가 없는 경우가 있죠. 이럴 때에 어떻게 처리하는지에 대한 문제가 있습니다. 이런 문제 때문에 위의 명령어에 “type = 7″과 같은 옵션이 있는 것입니다. 이런 문제는 통계학책을 참고하길 바랍니다. ^^;
  10. quantile(player, probs = seq(0, 1, 0.25), na.rm = TRUE, type = 7)
    
  11. 부록으로 다음과 같이 입력하시면, R이 사분위도 값을 이용하여 멋진 그래프를 만들어 줍니다.
  12. boxplot(player$score)
    

좀 더 깊은 내용은 아래 링크를 참고하세요.

http://tolstoy.newcastle.edu.au/R/e17/help/att-1067/Quartiles_in_R.pdf