기본 통계 함수
기본 통계 함수
데이터를 분석하기 전에 먼저 정리하고 요약해야 할 때가 많아요. Octave는 그런 단계를 돕는 다양한 통계 함수를 지원해요. 데이터의 평균을 빼서 중심을 맞추는 center, 표준화된 점수인 zscore, 그리고 다양한 방식으로 데이터를 정규화하는 normalize 같은 함수가 대표적이죠.
본문
Octave는 여러 유용한 통계 함수를 지원해요. 많은 함수가 데이터 집합을 추가 분석을 위해 준비하는 초기 단계로 유용하고, 일부는 기본 기술 통계와는 다른 측도를 제공해요.
y = center (x)
y = center (x, dim)
y = center (x, vecdim)
y = center (x, "all")
y = center (…, nanflag)
평균을 빼서 데이터를 중심화(center)해요. x가 벡터면 center (x)는 x의 각 요소에서 x의 평균을 뺀 중심화된 데이터를 계산해요. x가 행렬이면 x의 각 열에 대한 중심화된 데이터를 담은 행 벡터를 돌려줘요. x가 배열이면 x의 첫 번째 비-단일(non-singleton) 차원을 따라 데이터를 중심화해요.
x의 데이터는 수치형이어야 하고, y의 크기는 x의 크기와 같아요. 선택 입력 dim은 동작할 차원을 지정하며 양의 정수여야 해요. x의 단일 차원( ndims (x)를 초과하는 차원 포함)을 지정하면 x를 그대로 돌려줘요.
입력 vecdim(반복되지 않는 차원들의 벡터)으로 여러 차원을 지정하면 vecdim이 정의하는 배열 슬라이스를 따라 동작해요. vecdim이 x의 모든 차원을 인덱싱하면 옵션 "all"과 동일해요. vecdim에서 ndims (x)보다 큰 차원은 무시돼요. 차원을 "all"로 지정하면 center가 x의 모든 요소의 중심을 계산하며 center (x(:))와 동일해요.
선택 변수 nanflag는 앞서 지정한 입력 인자 조합 중 어느 것으로도 평균 계산에 NaN 값을 포함할지 제외할지 지정해요. nanflag의 기본값은 "includenan"으로 계산에 NaN 값을 유지해요. NaN을 제외하려면 nanflag를 "omitnan"으로 설정해요. 동작 차원을 따라 있는 어떤 NaN 값도 y의 해당 요소를 전부 NaN으로 만들어요.
프로그래밍 참고: center는 통계 데이터를 정규화하는 명백한 용도 외에도 일반 수치 계산의 정밀도를 높이는 데 유용해요. 데이터 묶음에 공통된 큰 값이 있으면 평균을 빼고 계산한 뒤 평균을 다시 더해 최종 답을 얻을 수 있죠.
참고: zscore
z = zscore (x)
z = zscore (x, opt)
z = zscore (x, opt, dim)
z = zscore (x, opt, vecdim)
z = zscore (x, opt, "all")
z = zscore (…, nanflag)
[z, mu, sigma] = zscore (…)
x의 z-score를 계산해요. 벡터 x의 경우 z-score는 평균을 빼고 표준편차로 나눠 계산해요. 표준편차가 0이면 1로 나눠요. x가 행렬이면 각 열의 z-score를 담은 행 벡터를 돌려줘요. x가 배열이면 첫 번째 비-단일 차원을 따라 z-score를 계산해요.
선택 매개변수 opt는 표준편차 계산에 쓸 정규화를 결정하며 std의 해당 매개변수와 같은 정의를 가져요. 선택 입력 dim은 동작할 차원(양의 정수)을 지정해요. x의 단일 차원( ndims (x) 초과 포함)을 지정하면 zeros (size (x))를 돌려줘요. vecdim으로 여러 차원을 지정하면 그 배열 슬라이스를 따라 동작하고, ndims (x)보다 큰 차원은 무시돼요. "all"로 지정하면 zscore (x(:))와 동일해요.
선택 변수 nanflag는 계산에서 NaN 값을 포함할지 제외할지 지정하며, 기본은 "includenan"이에요. "omitnan"으로 설정하면 NaN을 제외하지만, 출력에는 x와 같은 위치에 여전히 NaN 값이 포함돼요. 선택 출력 mu와 sigma는 평균과 표준편차를 담아요.
z = normalize (x)
z = normalize (x, dim)
z = normalize (…, method)
z = normalize (…, method, option)
z = normalize (…, scale, scaleoption, center, centeroption)
[z, c, s] = normalize (…)
이용 가능한 여러 스케일링·중심화 방법 중 하나로 x의 데이터를 정규화한 값을 돌려줘요. normalize는 기본적으로 x의 z-score를 돌려주는데, 이는 각 요소가 x의 평균에서 표준편차의 몇 배 떨어져 있는지를 나타내요. 이는 데이터를 평균에 중심화하고 표준편차로 스케일링하는 것과 동일해요. x는 double 또는 single 부동 소수점의 수치 배열이어야 해요.
반환값 z는 x와 같은 크기예요. 선택 반환 변수 c와 s는 정규화에 사용되는 중심화·스케일링 인자로, 다음을 만족해요:
z = (x - c) ./ s
x가 벡터면 x의 데이터에 동작하고, 행렬이면 각 열에 독립적으로 동작하며, N차원 배열이면 첫 번째 비-단일 차원에 독립적으로 동작해요. 선택 두 번째 인자 dim이 주어지면 그 차원을 따라 동작해요. normalize는 std, mean, median의 omitnan 옵션처럼 x의 NaN 값을 무시해요.
선택 입력 method와 option은 x에 수행할 정규화 유형을 지정해요. scale과 center 옵션만 아래 정의된 방법 중 어느 것으로도 함께 지정할 수 있어요. 유효한 정규화 방법은:
zscore — (기본값) x의 요소를 중심값으로부터의 스케일된 거리로 정규화해요. 유효 옵션:
std— (기본값) 데이터를mean (x)에 중심화하고 표준편차로 스케일링해요.robust— 데이터를median (x)에 중심화하고 중앙 절대 편차(median absolute deviation)로 스케일링해요.norm—z는x의 일반 벡터 노름이고,option은 다음에 따라 벡터 노름 유형을 결정하는 정규화 인자p예요:
z = [sum (abs (x) .^ p)] ^ (1/p)
p는 양의 스칼라면 무엇이든 될 수 있고, 특정 값은:
p = 1—x는sum (abs (x))로 정규화돼요.p = 2— (기본값)x는 요소의 유클리드 노름, 즉 벡터 크기로 정규화돼요.P = Inf—x는max (abs (x))로 정규화돼요.
scale — x는 option이 결정하는 인자로 스케일링돼요. option은 수치 스칼라 또는 다음 중 하나일 수 있어요:
std— (기본값)x는 표준편차로 스케일링돼요.mad—x는 중앙 절대 편차로 스케일링돼요.first—x는 첫 번째 요소로 스케일링돼요.iqr—x는 사분위 범위(interquartile range)로 스케일링돼요.range—x는option이 두 요소짜리 스칼라 행 벡터로 지정한 범위에 맞게 스케일링돼요. 기본 범위는 [0, 1]이에요.
center — x는 option이 결정하는 양만큼 이동돼요. option은 수치 스칼라 또는 다음 중 하나일 수 있어요:
mean— (기본값)x는mean (x)만큼 이동돼요.median—x는median (x)만큼 이동돼요.medianiqr—x는median (x)만큼 이동되고 사분위 범위로 스케일링돼요.
알려진 MATLAB 비호환점:
- 옵션
DataVariables는 입력x가 table 클래스일 때만 사용할 수 있는데, 이는 아직 핵심 Octave에 구현되지 않았어요. 사용 가능한 오버로드된 메서드는 datatypes와 tablicious Octave Packages에서 볼 수 있어요.
참고: zscore, iqr, norm, rescale, std, median, mean, mad
n = histc (x, edges)
n = histc (x, edges, dim)
[n, idx] = histc (…)
히스토그램 개수를 계산해요. x가 벡터일 때 edges가 정의하는 히스토그램 구간(bin)에 떨어지는 x의 요소 수를 세요. edges는 히스토그램 구간의 경계를 정의하는 단조 증가 값의 벡터여야 해요. n(k)는 edges(k) <= x < edges(k+1)인 x의 요소 수를 담아요. n의 마지막 요소는 edges의 마지막 요소와 정확히 같은 x의 요소 수를 담아요.
x가 N차원 배열이면 차원 dim을 따라 계산돼요. dim을 지정하지 않으면 첫 번째 비-단일 차원이 기본값이에요. 두 번째 출력 인자를 요청하면 인덱스 행렬도 함께 돌려줘요. idx 행렬은 x와 같은 크기이고, idx의 각 요소는 x의 해당 요소가 세어졌던 히스토그램 구간의 인덱스를 담아요.
참고: hist
통계에 자주 유용한 unique 함수는 Sets에서 다뤄져요.
c = nchoosek (n, k)
c = nchoosek (set, k)
n의 이항 계수를 계산하거나, 항목들의 set의 모든 가능한 조합을 나열해요. n이 스칼라이면 n과 k의 이항 계수를 계산하는데, 다음과 같이 정의돼요:
/ \
| n | n (n-1) (n-2) ... (n-k+1) n!
| | = ------------------------- = ---------
| k | k! k! (n-k)!
\ /
이는 크기 k 그룹으로 뽑은 n개 항목의 조합 수예요. 첫 번째 인자가 벡터 set이면 set의 요소를 한 번에 k개씩 뽑은 모든 조합을 생성하는데, 조합마다 한 행씩 있어요. 결과 c는 k개의 열과 nchoosek (length (set), k)개의 행을 가져요.
예를 들어, 세 개의 항목을 쌍으로 묶는 방법은 몇 가지일까요?
nchoosek (3, 2)
⇒ 3
가능한 쌍은 무엇일까요?
nchoosek (1:3, 2)
⇒ 1 2
1 3
2 3
프로그래밍 참고: 이항 계수를 계산할 때 nchoosek는 음이 아닌 정수 인자에서만 동작해요. 음수·또는 정수가 아닌 스칼라 인자나, n 또는 k에 벡터 입력으로 이항 계수 여러 개를 한 번에 계산해야 한다면 bincoeff를 사용하세요.
P = perms (v)
P = perms (v, "unique")
벡터 v의 모든 순열을 순열당 한 행씩 생성해요. v가 오름차순이면 결과는 역사전(lexicographic) 순서로 반환돼요. v가 다른 순서라면 결과도 그에 맞춰 순열화돼요. 따라서 내림차순 입력은 일반 사전 순서의 결과를 내요. 결과의 크기는 factorial (n) * n이고, n은 v의 길이예요. 반복되는 요소도 출력에 포함돼요.
선택 인자 "unique"가 주어지면 고유한 순열만 반환되어, unique (perms (v), "rows")를 호출하는 것보다 메모리를 덜 쓰고 시간도 덜 걸려요.
예 1:
perms ([1, 2, 3])
⇒
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
예 2:
perms ([1, 1, 2, 2], "unique")
⇒
2 2 1 1
2 1 2 1
2 1 1 2
1 2 2 1
1 2 1 2
1 1 2 2
프로그래밍 참고: "unique" 옵션을 쓰지 않으면 메모리 사용을 제한하기 위해 v의 길이는 10-12 이하가 좋아요. "unique"를 쓰더라도 v에는 고유 요소가 10-12개 이하가 좋아요.
참고: permute, randperm, nchoosek
y = ranks (x)
y = ranks (x, dim)
y = ranks (x, dim, rtype)
첫 번째 비-단일 차원을 따라 x의 순위(순서 통계의 의미에서)를 동점(tie)을 보정해 돌려줘요. 선택 dim 인자가 주어지면 그 차원을 따라 동작해요. 선택 매개변수 rtype는 동점을 어떻게 처리할지 결정해요. 아래 예는 모두 입력 [ 1, 2, 2, 4 ]를 가정해요.
0또는"fractional"(기본값): 분수 순위 (1, 2.5, 2.5, 4)1또는"competition": 경쟁 순위 (1, 2, 2, 4)2또는"modified": 수정 경쟁 순위 (1, 3, 3, 4)3또는"ordinal": 서수 순위 (1, 2, 3, 4)4또는"dense": 밀집 순위 (1, 2, 2, 3)
cnt = run_count (x, n)
cnt = run_count (x, n, dim)
x의 첫 번째 비-단일 차원을 따라 길이가 1, 2, …, n-1이고 n보다 크거나 같은 상향 실행(upward runs)의 개수를 세요. 선택 인자 dim이 주어지면 그 차원을 따라 동작해요.
참고: runlength
count = runlength (x)
[count, value] = runlength (x)
공통 값의 모든 연속 길이를 찾아요. count는 각 반복 값의 길이를 담은 벡터예요. 선택 출력 value에는 그 연속에서 반복된 값이 들어가요.
runlength ([2, 2, 0, 4, 4, 4, 0, 1, 1, 1, 1])
⇒ 2 1 3 1 4
참고: run_count
더 알아보기
통계 분석을 더 깊이 하려면 히스토그램(hist), 평균·표준편차(mean, std), 그리고 관련 통계 함수 모음을 함께 살펴보면 좋아요. Octave 매뉴얼의 통계(Statistics) 장을 참고하세요.