R 기술통계 함수 mean(), median(), range(), sd(), var(), min(), max(), IQR(), diff(), length(), rank()
R 분석과 프로그래밍/R 데이터 전처리 2015. 7. 18. 20:20통계는 크게 표본의 (a) 도수 분포와 중심화 경향, 그리고 퍼짐 정도를 측정하여 집단의 특성에 대해서 기술하는 기술통계(descriptive statistics)와, (b) 기술통계량을 가지고 모집단의 parameter 값 (모평균, 모분산 등)을 추정하고 가설을 검증하는 추정통계(inferential statistics)로 구분할 수 있습니다.
이번 포스팅에서는 R에서 벡터를 대상으로 사용할 수 있는 기술 통계 관련 함수에 대해서 알아보겠습니다.
R 기술통계 함수 |
-- 분포 및 중심화 경향 --
(1) 평균 : mean(x)
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) > mean(x) [1] 5.5 |
(2) 중앙값 : median(x)
> x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) > median(x) [1] 5.5 > y <- c(1, 2, 3, 4, 5, 6, 7, 8, 9) > median(y) [1] 5 |
벡터 x가 홀수개이면 정 가운데 값을 중앙값을 가져오지만, 위의 case와 같이 x가 짝수개 이면 정가운데의 양쪽 두개의 값을 가져다가 평균을 내서 중앙값을 계산합니다.
(3) 최소값 : min(x)
> min(x) [1] 1 > min(y) [1] 1 |
which.min(my_vec) 은 최소값이 있는 위치의 index 를 반환합니다. NA가 포함되어 있는 vector의 경우 min(my_vec) 이 NA를 반환한데 반해서 (NA에 대한 전처리 필요), my_vec[wich.min(my_vec)] 처럼 최소값을 ndexing을 해오면 '-12'를 반환했습니다.
> my_vec <- c(-5, 3, 10, 3, -12, NA) > my_vec [1] -5 3 10 3 -12 NA > > min(my_vec) [1] NA > > which.min(my_vec) # index of min value in 'my_vec' vector [1] 5 > > my_vec[which.min(my_vec)] [1] -12
|
(4) 최대값 : max(x)
> max(x) [1] 10 > max(y) |
> my_vec <- c(-5, 3, 10, 3, -12, NA) > my_vec [1] -5 3 10 3 -12 NA > > max(my_vec) [1] NA > > which.max(my_vec) # index of max value in 'my_vec' vector [1] 3 > > my_vec[which.max(my_vec)] [1] 10 |
(5) 범위 : range(x)
> range(x) [1] 1 10 > range(y) [1] 1 9 |
(6) IQR(Inter-Quartile Range) : IQR(x)
> IQR(x) [1] 4.5 > IQR(y) [1] 4 |
(7) 중심화 경향 및 분포 요약 : summary(x)
> summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.00 3.25 5.50 5.50 7.75 10.00 |
숫자형 벡터의 경우 summary() 함수가 위의 1번에서 6번까지 함수를 한번에 처리할 수 있는 유용한 함수가 되겠습니다.
-- 퍼짐 정도 --
(8) 분산 : var(x)
> var(x) [1] 9.166667 > var(y) [1] 7.5 |
(9) 표준편차 : sd(x)
> sd(x); sd(y) [1] 3.02765 [1] 2.738613 |
참고) 세미콜론 ';' 을 사용하면 같은 줄에 R 명령어를 연속으로 해서 쓸 수 있습니다
-- 확률분포의 비대칭 정도 --
(10) 왜도
|
R에 왜도와 첨도를 위한 함수가 내장되어 있지 않기 때문에 별도 패키지(fBasics)를 설치해야 합니다.
자동차 정보가 들어있는 mtcars 데이터 프레임의 연비에 대해서 히스토그램을 그려보니 평균보다 왼쪽으로 치우쳐 있고 오른쪽으로 꼬리가 긴 분포를 띠고 있네요. 그러면 왜도(skewness) 가 '0'보다 크게 나타납니다. (공식이 평균에서 관측치를 뺀 값을 3제곱 하기 때문이예요) 위 예에서는 왜도가 0.61로 '0'보다 크게 나왔지요. 정규분포의 평균과 일치하면 왜도는 '0'이 되고, 반대로 평균보다 오른쪽으로 값이 치우쳐 있고 왼쪽으로 꼬리가 길면 왜도는 '0'보다 작은 값이 나옵니다.
(11) 첨도
> kurtosis(mtcars$mpg) [1] -0.372766 attr(,"method") [1] "excess" |
관측값이 정규분포보다 뾰쪽한가 아닌가를 가늠하는 쳑도가 첨도입니다. '3'보다 크면 정규분포보다 더 뾰족한 모양이고, '3'보다 작으면 정규분포보다 덜 뾰족한 모양이라고 해석하면 되겠습니다. (패키지에 따라서는 '3'을 빼서 '0'으로 표준화해서 값을 제시하기도 합니다)
-- 기타 함수 --
(12) 합 : sum(x)
> sum(x) [1] 55 > sum(y) [1] 45 |
(13) n차 차분 : diff(x, lag=n)
> diff(x, lag=1) [1] 1 1 1 1 1 1 1 1 1 > diff(x, lag=2) [1] 2 2 2 2 2 2 2 2 > diff(x, lag=3) [1] 3 3 3 3 3 3 3 |
관측값에서 직전 관측값을 뺀 차분을 구하는 함수입니다. 시계열분석할 때 정상화하기 위해서 차분을 이용하는데요, 시차(lag)를 분석 목적에 따라 또 데이터 특성에 따라서 입력해주면 됩니다. 디폴트는 lag=1 이 되겠습니다.
(14) 길이, 관측값 개수 : length()
> # 벡터에 length() 사용 시 > length(x) [1] 10 > length(y) [1] 9
|
벡터에서 length()는 관측값 개수를 계산해서 보여줍니다.
데이터 프레임에서는 column 개수를 나타내주고요, 데이터 프레임의 특정 변수를 지정하면 그 특정 변수의 관측값의 개수를 세서 보여줍니다.
(15) 순위 : rank()
> ##----------------------- > ## rank() {base package} > ##----------------------- > > # if there are no ties(i.e., equal values), no problem at all > x <- c(1, 5, 9, 7) > rank(x) [1] 1 2 4 3 > > > # if there are ties, ties can be handled in several ways > y <- c(1, 1, 1, 5, 9, 7) > > # returns average, default setting > rank(y) [1] 2 2 2 4 6 5 > rank(y, ties.method = c("average")) [1] 2 2 2 4 6 5 > > # first occurrence wins > rank(y, ties.method = c("first")) [1] 1 2 3 4 6 5 > > # ties broken at random > rank(y, ties.method = c("random")) [1] 3 2 1 4 6 5 > > rank(y, ties.method = c("random")) # ...random one more time [1] 1 3 2 4 6 5 > > rank(y, ties.method = c("random")) # ...random...again [1] 1 2 3 4 6 5 > > # rank by max value as used classically > rank(y, ties.method = c("max")) [1] 3 3 3 4 6 5 > > # rank by min value as in Sports > rank(y, ties.method = c("min")) [1] 1 1 1 4 6 5 |
rank는 순위대로 정렬해주는게 아니라 순위의 색인을 나타내줍니다.
디폴트는 작은 값부터 1을 부여해주고, 큰 것 부터 1을 부여하려면 '-'를 붙여주면 됩니다.
동일한 값(Ties, i.e, equal values)이 있을 경우 rank() 함수는 "average" (default), "first", "random", "max", "min" 등의 옵션을 제공합니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.
'R 분석과 프로그래밍 > R 데이터 전처리' 카테고리의 다른 글
R 데이터 객체 속성 확인 및 속성 전환 : is.numeric(), is.character(), is.factor(), as.numeric(), as.character(), as.factor() (11) | 2015.07.20 |
---|---|
R 벡터의 비교/논리 연산자 >, >=, <, <=, ==, !=, &, | (1) | 2015.07.19 |
R 숫자형 벡터 처리 함수 abs(x), sqrt(x), ceiling(x), floor(x), trunc(x), round(x), log(x), exp(x) (8) | 2015.07.18 |
R rep(), seq() 반복 데이터, 일정한 구조/순차 데이터 생성 (6) | 2015.07.18 |
R read.fwf() : 일정한 간격, 고정된 구조의 외부데이터 불러오기 (6) | 2015.07.17 |