이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

prctile

데이터 세트의 백분위수

구문

Y = prctile(X,p)
Y = prctile(X,p,'all')
Y = prctile(X,p,dim)
Y = prctile(X,p,vecdim)
Y = prctile(___,'Method',method)

설명

예제

Y = prctile(X,p)는 데이터 벡터 또는 배열 X의 요소에서 구간 [0,100]의 백분율 p에 해당하는 백분위수를 반환합니다.

  • X가 벡터이면 Y는 스칼라이거나 요청한 백분위수의 개수(length(p))와 길이가 같은 벡터입니다. Y(i)p(i)의 백분위수를 가집니다.

  • X가 행렬이면 Y는 행 벡터 또는 행렬이며, 이때 Y의 행 개수는 요청한 백분위수의 개수(length(p))와 같습니다. Yi번째 행은 X의 각 열에 대한 p(i)의 백분위수를 포함합니다.

  • 다차원 배열의 경우 prctileX의 첫 번째 비한원소 차원을 따라 연산을 수행합니다.

예제

Y = prctile(X,p,'all')X의 모든 요소에 대한 백분위수를 반환합니다.

예제

Y = prctile(X,p,dim)은 연산 차원 dim을 따라 백분위수를 반환합니다.

예제

Y = prctile(X,p,vecdim)은 벡터 vecdim에 지정된 차원을 따라 백분위수를 반환합니다. 예를 들어, X가 행렬인 경우 prctile(X,50,[1 2])X의 모든 요소에 대한 50번째 백분위수를 반환합니다. 그 이유는 행렬의 모든 요소가 차원 1 및 차원 2로 정의된 배열 슬라이스에 포함되어 있기 때문입니다.

예제

Y = prctile(___,'Method',method)는 위에 열거된 구문에 나와 있는 입력 인수를 조합하여 method의 값을 기준으로 정확한 백분위수 또는 근사 백분위수를 반환합니다.

예제

모두 축소

크기가 10인 데이터 세트를 생성합니다.

rng('default'); % for reproducibility
x = normrnd(5,2,1,10)
x = 1×10

    6.0753    8.6678    0.4823    6.7243    5.6375    2.3846    4.1328    5.6852   12.1568   10.5389

42번째 백분위수를 계산합니다.

Y = prctile(x,42)
Y = 5.6709

배열에 포함된 모든 값에 대한 백분위수를 구합니다.

3x5x2 배열 X를 생성합니다.

X = reshape(1:30,[3 5 2])
X = 
X(:,:,1) =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15


X(:,:,2) =

    16    19    22    25    28
    17    20    23    26    29
    18    21    24    27    30

X의 요소에 대한 40번째 백분위수와 60번째 백분위수를 구합니다.

Y = prctile(X,[40 60],'all')
Y = 2×1

   12.5000
   18.5000

Y(1)X의 40번째 백분위수이고 Y(2)X의 60번째 백분위수입니다.

데이터 행렬의 열과 행을 따라 지정된 백분율에 대한 백분위수를 계산합니다.

5x5 데이터 행렬을 생성합니다.

X = (1:5)'*(2:6)
X = 5×5

     2     3     4     5     6
     4     6     8    10    12
     6     9    12    15    18
     8    12    16    20    24
    10    15    20    25    30

X의 열을 따라 25번째 백분위수, 50번째 백분위수, 75번째 백분위수를 계산합니다.

Y = prctile(X,[25 50 75],1)
Y = 3×5

    3.5000    5.2500    7.0000    8.7500   10.5000
    6.0000    9.0000   12.0000   15.0000   18.0000
    8.5000   12.7500   17.0000   21.2500   25.5000

Y의 행은 X의 열에 대한 백분위수에 대응됩니다. 예를 들어, 요소가 (4, 8, 12, 16, 20)인 X의 세 번째 열에 대한 25번째 백분위수, 50번째 백분위수, 75번째 백분위수는 각각 7, 12, 17입니다. Y = prctile(X,[25 50 75])는 위와 동일한 백분위수 행렬을 반환합니다.

X의 행을 따라 25번째 백분위수, 50번째 백분위수, 75번째 백분위수를 계산합니다.

Y = prctile(X,[25 50 75],2)
Y = 5×3

    2.7500    4.0000    5.2500
    5.5000    8.0000   10.5000
    8.2500   12.0000   15.7500
   11.0000   16.0000   21.0000
   13.7500   20.0000   26.2500

Y의 행은 X의 행에 대한 백분위수에 대응됩니다. 예를 들어, 요소가 (2, 3, 4, 5, 6)인 X의 첫 번째 행에 대한 25번째 백분위수, 50번째 백분위수, 75번째 백분위수는 각각 2.75, 4, 5.25입니다.

여러 차원을 동시에 따라 다차원 배열의 백분위수를 구합니다.

3x5x2 배열 X를 생성합니다.

X = reshape(1:30,[3 5 2])
X = 
X(:,:,1) =

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15


X(:,:,2) =

    16    19    22    25    28
    17    20    23    26    29
    18    21    24    27    30

차원 1과 차원 2를 연산 차원으로 지정하여 X의 각 페이지에 대한 40번째 백분위수와 60번째 백분위수를 계산합니다.

Ypage = prctile(X,[40 60],[1 2])
Ypage = 
Ypage(:,:,1) =

    6.5000
    9.5000


Ypage(:,:,2) =

   21.5000
   24.5000

예를 들어, Ypage(1,1,1)X의 첫 번째 페이지의 40번째 백분위수이고 Ypage(2,1,1)X의 첫 번째 페이지의 60번째 백분위수입니다.

차원 1과 차원 3을 연산 차원으로 지정하여 각 X(:,i,:) 슬라이스의 요소에 대한 40번째 백분위수와 60번째 백분위수를 계산합니다.

Ycol = prctile(X,[40 60],[1 3])
Ycol = 2×5

    2.9000    5.9000    8.9000   11.9000   14.9000
   16.1000   19.1000   22.1000   25.1000   28.1000

예를 들어, Ycol(1,4)X(:,4,:)의 요소에 대한 40번째 백분위수이고 Ycol(2,4)X(:,4,:)의 요소에 대한 60번째 백분위수입니다.

주어진 백분율에 대해 tall형 열 벡터의 정확한 백분위수와 근사 백분위수를 계산합니다.

airlinesmall 데이터 세트에 대한 데이터저장소를 만듭니다. 'NA' 값을 누락된 데이터로 처리하여 datastore가 이 값을 NaN 값으로 대체하도록 합니다. ArrTime 변수를 사용하도록 지정합니다.

ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames','ArrTime');

데이터저장소 위에 tall형 테이블을 만들고 tall형 테이블에서 tall형 벡터로 데이터를 추출합니다.

t = tall(ds) % Tall table
Starting parallel pool (parpool) using the 'local' profile ...
connected to 6 workers.

t =

  M×1 tall table

    ArrTime
    _______

      735  
     1124  
     2218  
     1431  
      746  
     1547  
     1052  
     1134  
       :
       :
x = t{:,:}   % Tall vector
x =

  M×1 tall double column vector

         735
        1124
        2218
        1431
         746
        1547
        1052
        1134
         :
         :

x의 50번째 정확한 백분위수를 계산합니다. x가 tall형 열 벡터이고 p가 스칼라이므로 prctile은 기본적으로 정확한 백분위수 값을 반환합니다.

p = 50;
yExact = prctile(x,p)
yExact =

  M×N×... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Preview deferred. Learn more.

x의 50번째 백분위수 근삿값을 계산합니다. 'Method','approximate'를 지정하여 백분위수 계산에 T-Digest를 기반으로 한 근사 알고리즘을 사용합니다.

yApprox = prctile(x,p,'Method','approximate')
yApprox =

  M×N×... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Preview deferred. Learn more.

tall형 배열을 계산하고 gather를 사용하여 결과를 메모리로 가져옵니다.

[yExact,yApprox] = gather(yExact,yApprox)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 4: Completed in 9.7 sec
- Pass 2 of 4: Completed in 0.7 sec
- Pass 3 of 4: Completed in 1.8 sec
- Pass 4 of 4: Completed in 1 sec
Evaluation completed in 16 sec
yExact = 1522
yApprox = 1.5220e+03

근사 백분위수와 정확한 백분위수의 값이 표시된 4자리까지 동일합니다.

다른 차원을 따르는 지정된 백분율에 대한 tall형 행렬의 정확한 백분위수와 근사 백분위수를 계산합니다.

airlinesmall 데이터 세트의 일부 변수를 포함하는 tall형 행렬 X를 생성합니다. tall형 배열에서 데이터를 추출하는 단계에 대한 자세한 내용은 주어진 백분율에 대한 tall형 벡터의 백분위수 항목을 참조하십시오.

varnames = {'ArrDelay','ArrTime','DepTime','ActualElapsedTime'}; % Subset of variables in the data set
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',...
    'SelectedVariableNames',varnames); % Datastore
t = tall(ds);     % Tall table
X = t{:,varnames} % Tall matrix
X =

  M×4 tall double matrix

           8         735         642          53
           8        1124        1021          63
          21        2218        2055          83
          13        1431        1332          59
           4         746         629          77
          59        1547        1446          61
           3        1052         928          84
          11        1134         859         155
          :          :            :           :
          :          :            :           :

1이 아닌 차원을 따라 연산을 수행할 때 prctile 함수는 정확한 백분위수만 계산하기 때문에 T-Digest를 기반으로 하는 근사 알고리즘 대신 정렬 기반 알고리즘(알고리즘 참조)을 사용하여 효율적으로 계산을 수행할 수 있습니다.

두 번째 차원을 따라 X의 25번째, 50번째, 75번째 정확한 백분위수를 계산합니다.

p = [25 50 75]; % Vector of percentages
Yexact = prctile(X,p,2)
Yexact =

  M×N×... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Preview deferred. Learn more.

함수가 첫 번째 차원을 따라 연산을 수행하고 p가 백분율로 구성된 벡터인 경우 t-digest를 기반으로 하는 근사 알고리즘을 사용하여 백분위수를 계산해야 합니다. 정렬 기반 알고리즘을 사용하여 tall형 배열의 첫 번째 차원을 따라 백분위수를 구하면 계산량이 많아집니다.

첫 번째 차원을 따라 X의 25번째, 50번째, 75번째 근사 백분위수를 계산합니다. 디폴트 차원이 1이기 때문에 dim의 값을 지정할 필요가 없습니다.

Yapprox = prctile(X,p,'Method','approximate')
Yapprox =

  M×N×... tall double array

    ?    ?    ?    ...
    ?    ?    ?    ...
    ?    ?    ?    ...
    :    :    :
    :    :    :

Preview deferred. Learn more.

tall형 배열을 계산하고 gather를 사용하여 결과를 메모리로 가져옵니다.

[Yexact,Yapprox] = gather(Yexact,Yapprox);
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: Completed in 2.3 sec
Evaluation completed in 6.5 sec

X의 두 번째 차원을 따라 25번째, 50번째, 75번째 정확한 백분위수 중 처음 5개 행을 표시합니다.

Yexact(1:5,:)
ans = 5×3
103 ×

    0.0305    0.3475    0.6885
    0.0355    0.5420    1.0725
    0.0520    1.0690    2.1365
    0.0360    0.6955    1.3815
    0.0405    0.3530    0.6875

행렬 Yexact의 각 행은 X의 대응하는 행에 대한 백분위수 세 개를 포함합니다. 예를 들어, 30.5, 347.5, 688.5는 각각 X의 첫 번째 행에 대한 25번째, 50번째, 75번째 백분위수입니다.

첫 번째 차원을 따라 X의 25번째, 50번째, 75번째 근사 백분위수를 표시합니다.

Yapprox
Yapprox = 3×4
103 ×

   -0.0070    1.1149    0.9322    0.0700
         0    1.5220    1.3350    0.1020
    0.0110    1.9180    1.7400    0.1510

행렬 Yapprox의 각 열은 행렬 X의 각 열에 대한 세 개의 백분위수에 해당합니다. 예를 들어, 요소 (–7, 0, 11)을 갖는 Yapprox의 첫 번째 열은 X의 첫 번째 열에 대한 백분위수를 포함합니다.

입력 인수

모두 축소

입력 데이터로, 벡터 또는 배열로 지정됩니다.

데이터형: double | single

백분위수를 계산할 백분율로, 0에서 100 사이의 스칼라 또는 스칼라로 구성된 벡터로 지정됩니다.

예: 25

예: [25, 50, 75]

데이터형: double | single

X의 백분위수를 계산하려는 차원으로, 양의 정수로 지정됩니다. 예를 들어, 행렬 X에 대해 dim = 1이면 prctileX의 열에 대한 백분위수를 반환하고 dim = 2이면 prctileX의 행에 대한 백분위수를 반환합니다. X가 다차원 배열이면 Ydim번째 차원의 길이는 p의 길이와 같습니다.

데이터형: double | single

차원의 벡터로, 양의 정수 벡터로 지정됩니다. vecdim의 각 요소는 입력 배열 X의 차원을 나타냅니다. 출력값 Y는 지정된 연산 차원 중 가장 작은 차원(즉, 차원 min(vecdim))에서 길이가 length(p)이며, 나머지 연산 차원 각각에서는 길이가 1입니다. 다른 차원 길이는 XY에서 같습니다.

예를 들어, p = [20 40 60 80]인 2x3x3 배열 X가 있다고 가정하겠습니다. 이 경우, prctile(X,p,[1 2])는 각 페이지가 X의 대응하는 페이지의 요소에 대한 20번째, 40번째, 60번째, 80번째 백분위수를 포함하는 배열을 반환합니다. 차원 1과 차원 2가 연산 차원이므로 min([1 2]) = 1length(p) = 4를 사용하는 경우 출력값은 4x1x3 배열입니다.

데이터형: single | double

백분위수 계산 방법으로, 'exact' 또는 'approximate'로 지정됩니다. 기본적으로, prctile은 정렬을 사용하는 알고리즘을 구현하여 정확한 백분위수를 반환합니다. prctile'method','approximate'를 지정해 T-Digest를 사용하는 알고리즘을 구현하여 근사 백분위수를 반환 받을 수 있습니다.

데이터형: char | string

출력 인수

모두 축소

데이터 벡터 또는 배열의 백분위수로, 하나 또는 여러 개의 백분율 값에 대한 스칼라 또는 배열로 반환됩니다.

  • X가 벡터이면 Y는 스칼라이거나 요청한 백분위수의 개수(length(p))와 길이가 같은 벡터입니다. Y(i)p(i)번째 백분위수를 포함합니다.

  • X가 차원 d로 구성된 배열이면 Y는 배열이며, 이때 이 배열의 가장 작은 연산 차원은 요청한 백분위수의 개수(length(p))와 길이가 같습니다.

세부 정보

모두 축소

다차원 배열

다차원 배열(multidimensional array)은 3차원 이상을 갖는 배열입니다. 예를 들어, X가 1x3x4 배열인 경우 X는 3차원 배열입니다.

비한원소 차원

첫 번째 비한원소 차원(first nonsingleton dimension)은 배열에서 크기가 1이 아닌 첫 번째 차원입니다. 예를 들어, X가 1x2x3x4 배열이면 두 번째 차원이 X의 첫 번째 비한원소 차원입니다.

선형 보간

선형 보간(linear interpolation)은 선형 다항식을 사용하여 벡터 또는 배열 x의 특정 점에서 기본 함수 Y = f(X)의 값인 yi = f(xi)의 값을 구합니다. 데이터 점 (x1, y1) 및 (x2, y2)가 주어진 경우(여기서 y1 = f(x1)이고 y2 = f(x2)임), 선형 보간은 x1과 x2 사이의 x가 주어지면 다음과 같이 y = f(x)의 값을 구합니다.

y=f(x)=y1+(xx1)(x2x1)(y2y1).

마찬가지로, 100(1.5/n)번째 백분위수가 y1.5/n이고 100(2.5/n)번째 백분위수가 y2.5/n인 경우, 선형 보간은 다음과 같이 100(2.3/n)번째 백분위수 y2.3/n을 구합니다.

y2.3n=y1.5n+(2.3n1.5n)(2.5n1.5n)(y2.5ny1.5n).

T-Digest

T-digest[2]는 데이터 세트의 경험적 누적 분포 함수(CDF)에 대한 희소 표현인 확률적 데이터 구조체입니다. T-digest는 특히 데이터 분포의 꼬리 근처에서 정확도를 제어하면서 온라인 데이터 또는 분산된 데이터에서 순위 기반 통계량(예: 백분위수 및 분위수)에 대한 근삿값을 계산하는 데 유용합니다.

여러 분할에 분산된 데이터를 대상으로, t-digest는 각 데이터 분할에 대해 개별적으로 분위수 추정값(및 백분위수 추정값)을 계산한 후 메모리 한도와 계산의 상대 정확도를 일정하게 유지하면서 추정값을 결합합니다(q번째 분위수의 경우 q(1q)). 이러한 이유로, t-digest는 tall형 배열을 사용하는 경우 실용적입니다.

여러 분할에 분산된 배열의 분위수를 추정하기 위해 먼저 데이터의 각 분할에서 t-digest를 생성합니다. t-digest는 분할에 포함된 데이터를 군집화하고 중심 값과 군집에 포함되는 표본 개수를 나타내는 누적 가중치로 각 군집을 요약합니다. T-digest는 큰 군집(간격이 넓은 중심)을 사용하여 q = 0.5 근처에 있는 CDF의 면적을 나타내고 작은 군집(간격이 좁은 중심)을 사용하여 q = 0 또는 q = 1 근처에 있는 CDF의 면적을 나타냅니다.

T-digest는 분위수 q를 압축 모수 δ를 사용해 인덱스 k에 매핑하는 스케일링 함수를 이용하여 군집 크기를 제어합니다. 즉,

k(q,δ)=δ(sin1(2q1)π+12),

이며, 여기서 매핑 k는 단조적이며 최솟값이 k(0,) = 0이고 최댓값이 k(1,) = δ입니다.

= 10에 대한 스케일링 함수

스케일링 함수는 분위수 q의 가변 크기 스텝을 제공하기 위해 q를 스케일링 인자 k로 변환합니다. 그 결과, 군집 크기가 달라집니다(중심 분위수 근처에서 커지고 q = 0 또는 q = 1 근처에서 작아짐). 군집이 작을수록 데이터 경계 근처에서 정확도가 더 높아집니다.

t-digest를 가중치와 위치를 갖는 새 관측값으로 업데이트하기 위해 새 관측값에 가장 가까운 군집을 찾습니다. 가중치를 더한 후, 군집의 업데이트된 가중치가 크기 제한을 초과하지 않는 경우 가중 평균에 따라 군집의 중심을 업데이트합니다.

t-digest의 합집합을 구하고 중심을 병합하여 데이터의 각 분할의 독립적인 t-digest들을 결합할 수 있습니다. t-digest를 결합하려면 먼저 모든 독립적인 t-digest에서 군집 가중치를 기준으로 내림차순으로 군집을 정렬해야 합니다. 그런 다음, 인접한 군집이 크기 제한을 충족하는 경우 이들 군집을 병합하여 새 t-digest를 생성합니다.

전체 데이터 세트를 나타내는 t-digest를 생성한 후에는 t-digest에서 각 군집의 끝점(또는 경계)을 추정한 후 각 군집의 끝점 간의 보간을 사용하여 정확한 분위수 추정값을 구할 수 있습니다.

알고리즘

요소를 n개 가진 벡터 X에 대해 prctile은 다음과 같이 정렬 기반 알고리즘을 사용하여 백분위수를 반환합니다.

  1. X의 정렬된 요소는 100(0.5/n)번째 백분위수, 100(1.5/n)번째 백분위수, ..., 100([n – 0.5]/n)번째 백분위수로 간주됩니다. 예를 들면 다음과 같습니다.

    • {6, 3, 2, 10, 1}과 같은 다섯 개 요소로 구성된 데이터 벡터에 대해 정렬된 요소 {1, 2, 3, 6, 10}은 각각 10번째 백분위수, 30번째 백분위수, 50번째 백분위수, 70번째 백분위수, 90번째 백분위수에 해당됩니다.

    • {6, 3, 2, 10, 8, 1}과 같은 여섯 개 요소로 구성된 데이터 벡터에 대해 정렬된 요소 {1, 2, 3, 6, 8, 10}은 각각 (50/6)번째 백분위수, (150/6)번째 백분위수, (250/6)번째 백분위수, (350/6)번째 백분위수, (450/6)번째 백분위수, (550/6)번째 백분위수에 해당됩니다.

  2. prctile선형 보간을 사용하여 100(0.5/n)과 100([n – 0.5]/n) 사이의 백분율에 대한 백분위수를 계산합니다.

  3. prctile은 범위를 벗어나는 백분율에 대응되는 백분위수로 X에 포함된 요소의 최솟값 또는 최댓값을 할당합니다.

prctileNaN을 결측값으로 처리하여 제거합니다.

참고 문헌

[1] Langford, E. “Quartiles in Elementary Statistics”, Journal of Statistics Education. Vol. 14, No. 3, 2006.

[2] Dunning, T., and O. Ertl. “Computing Extremely Accurate Quantiles Using T-Digests.” August 2017.

확장 기능

참고 항목

| | |

R2006a 이전에 개발됨