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

quantile

데이터 세트의 분위수

설명

예제

Y = quantile(X,p)는 데이터 벡터 또는 배열 X의 요소에서 구간 [0,1]의 누적 확률 p에 해당하는 분위수를 반환합니다.

  • X가 벡터이면 Y는 스칼라이거나 p와 길이가 같은 벡터입니다.

  • X가 행렬이면 YY의 행 개수가 p의 길이와 같은 행 벡터 또는 행렬입니다.

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

예제

Y = quantile(X,N)은 정수 N>1에 대해 N개의 균일한 간격의 누적 확률 (1/(N + 1), 2/(N + 1), ..., N/(N + 1))에 대한 분위수를 반환합니다.

  • X가 벡터이면 Y는 스칼라이거나 길이가 N인 벡터입니다.

  • X가 행렬이면 YY의 행 개수가 N과 같은 행렬입니다.

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

예제

Y = quantile(___,'all')은 위의 처음 두 구문에 대해 X의 모든 요소에 대한 분위수를 반환합니다.

예제

Y = quantile(___,dim)은 위의 처음 두 구문에 대해 연산 차원 dim을 따라 분위수를 반환합니다.

예제

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

예제

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

예제

모두 축소

지정된 확률에 대한 데이터 세트의 분위수를 계산합니다.

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

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

    0.5377    1.8339   -2.2588    0.8622    0.3188   -1.3077   -0.4336    0.3426    3.5784    2.7694

0.3 분위수를 계산합니다.

y = quantile(x,0.30)
y = -0.0574

누적 확률 0.025, 0.25, 0.5, 0.75, 0.975에 대한 분위수를 계산합니다.

y = quantile(x,[0.025 0.25 0.50 0.75 0.975])
y = 1×5

   -2.2588   -0.4336    0.4401    1.8339    3.5784

주어진 개수의 분위수에 대해 데이터 세트의 분위수를 계산합니다.

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

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

    0.5377    1.8339   -2.2588    0.8622    0.3188   -1.3077   -0.4336    0.3426    3.5784    2.7694

균일한 간격의 분위수 4개를 계산합니다.

y = quantile(x,4)
y = 1×4

   -0.8706    0.3307    0.6999    2.3017

y = quantile(x,[0.2,0.4,0.6,0.8])을 사용해도 균일한 간격의 분위수 4개를 반환할 수 있습니다.

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

4x6 데이터 행렬을 생성합니다.

rng default  % For reproducibility
X = normrnd(0,1,4,6)
X = 4×6

    0.5377    0.3188    3.5784    0.7254   -0.1241    0.6715
    1.8339   -1.3077    2.7694   -0.0631    1.4897   -1.2075
   -2.2588   -0.4336   -1.3499    0.7147    1.4090    0.7172
    0.8622    0.3426    3.0349   -0.2050    1.4172    1.6302

X의 각 열에 대한 0.3 분위수를 계산합니다(dim = 1).

y = quantile(X,0.3,1)
y = 1×6

   -0.3013   -0.6958    1.5336   -0.1056    0.9491    0.1078

quantile은 행렬의 각 열마다 하나의 분위수를 계산하는 경우 행 벡터 y를 반환합니다. 예를 들어, -0.3013은 요소가 (0.5377, 1.8339, -2.2588, 0.8622)인 X의 첫 번째 열에 대한 0.3 분위수입니다. dim의 디폴트 값은 1이기 때문에 y = quantile(X,0.3)과 동일한 결과를 반환할 수 있습니다.

X의 각 행에 대한 0.3 분위수를 계산합니다(dim = 2).

y = quantile(X,0.3,2)
y = 4×1

    0.3844
   -0.8642
   -1.0750
    0.4985

quantile은 행렬의 각 행마다 하나의 분위수를 계산하는 경우 열 벡터 y를 반환합니다. 예를 들어, 0.3844는 요소가 (0.5377, 0.3188, 3.5784, 0.7254, -0.1241, 0.6715)인 X의 첫 번째 행에 대한 0.3 분위수입니다.

데이터 행렬의 열과 행을 따라 균일한 간격의 분위수 N개를 계산합니다.

6x10 데이터 행렬을 생성합니다.

rng('default');  % for reproducibility
X = unidrnd(10,6,7)
X = 6×7

     9     3    10     8     7     8     7
    10     6     5    10     8     1     4
     2    10     9     7     8     3    10
    10    10     2     1     4     1     1
     7     2     5     9     7     1     5
     1    10    10    10     2     9     4

X의 각 열에 대해 균일한 간격의 분위수 3개를 계산합니다(dim = 1).

y = quantile(X,3,1)
y = 3×7

    2.0000    3.0000    5.0000    7.0000    4.0000    1.0000    4.0000
    8.0000    8.0000    7.0000    8.5000    7.0000    2.0000    4.5000
   10.0000   10.0000   10.0000   10.0000    8.0000    8.0000    7.0000

행렬 y의 각 열은 행렬 X의 각 열에 대한 균일한 간격의 분위수 3개에 대응됩니다. 예를 들어, 요소가 (2, 8, 10)인 y의 첫 번째 열이 요소가 (9, 10, 2, 10, 7, 1)인 X의 첫 번째 열에 대한 분위수입니다. y = quantile(X,3)dim의 디폴트 값이 1이기 때문에 동일한 답을 반환합니다.

X의 각 행에 대해 균일한 간격의 백분위수 3개를 계산합니다(dim = 2).

y = quantile(X,3,2)
y = 6×3

    7.0000    8.0000    8.7500
    4.2500    6.0000    9.5000
    4.0000    8.0000    9.7500
    1.0000    2.0000    8.5000
    2.7500    5.0000    7.0000
    2.5000    9.0000   10.0000

행렬 y의 각 행은 행렬 X의 각 행에 대한 균일한 간격의 분위수 3개에 대응됩니다. 예를 들어, 요소가 (7, 8, 8.75)인 y의 첫 번째 행은 요소가 (9, 3, 10, 8, 7, 8, 7)인 X의 첫 번째 행에 대한 분위수입니다.

'all' 입력 인수 및 vecdim 입력 인수를 사용하여 지정된 확률에 대한 다차원 배열의 분위수를 계산합니다.

3x5x2 배열 X를 생성합니다. 확률 p의 벡터를 지정합니다.

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

p = [0.25 0.75];

X에 포함된 모든 요소의 0.25 분위수와 0.75 분위수를 계산합니다.

Yall = quantile(X,p,'all')
Yall = 2×1

     8
    23

Yall(1)X의 0.25 분위수이고 Yall(2)X의 0.75 분위수입니다.

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

Ypage = quantile(X,p,[1 2])
Ypage = 
Ypage(:,:,1) =

    4.2500
   11.7500


Ypage(:,:,2) =

   19.2500
   26.7500

예를 들어, Ypage(1,1,1)X의 첫 번째 페이지에 대한 0.25 분위수이고 Ypage(2,1,1)X의 첫 번째 페이지에 대한 0.75 분위수입니다.

차원 2와 차원 3을 연산 차원으로 지정하여 각 X(i,:,:) 슬라이스의 요소에 대한 0.25 분위수와 0.75 분위수를 계산합니다.

Yrow = quantile(X,p,[2 3])
Yrow = 3×2

     7    22
     8    23
     9    24

예를 들어, Yrow(3,1)X(3,:,:)의 요소에 대한 0.25 분위수이고 Yrow(3,2)X(3,:,:)의 요소에 대한 0.75 분위수입니다.

짝수 개수의 요소를 갖는 벡터 x의 중앙값과 분위수를 구합니다.

데이터를 입력합니다.

x = [2 5 6 10 11 13]
x = 1×6

     2     5     6    10    11    13

x의 중앙값을 계산합니다.

y = quantile(x,0.50)
y = 8

x의 분위수를 계산합니다.

y = quantile(x,[0.25, 0.5, 0.75])
y = 1×3

     5     8    11

y = quantile(x,3)을 사용해도 x의 분위수를 계산할 수 있습니다.

quantile선형 보간을 사용하여 중앙값과 분위수를 구하기 때문에 이러한 결과는 교재 정의와 다를 수 있습니다.

홀수 개수의 요소를 갖는 벡터 x의 중앙값과 분위수를 구합니다.

데이터를 입력합니다.

x = [2 4 6 8 10 12 14]
x = 1×7

     2     4     6     8    10    12    14

x의 중앙값을 구합니다.

y = quantile(x,0.50)
y = 8

x의 분위수를 구합니다.

y = quantile(x,[0.25, 0.5, 0.75])
y = 1×3

    4.5000    8.0000   11.5000

y = quantile(x,3)을 사용해도 x의 분위수를 계산할 수 있습니다.

quantile선형 보간을 사용하여 중앙값과 분위수를 구하기 때문에 이러한 결과는 교재 정의와 다를 수 있습니다.

주어진 확률에 대한 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
         :
         :

p = 0.5인 x의 정확한 분위수를 계산합니다. X가 tall형 열 벡터이고 p가 스칼라이기 때문에 quantile은 기본적으로 정확한 분위수 값을 반환합니다.

p = 0.5; % Cumulative probability
yExact = quantile(x,p)
yExact =

  M×N×... tall double array

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

Preview deferred. Learn more.

p = 0.5인 x의 근사 분위수를 계산합니다. 'Method','approximate'를 지정하여 분위수 계산에 T-Digest를 기반으로 한 근사 알고리즘을 사용합니다.

yApprox = quantile(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 8.7 sec
- Pass 2 of 4: Completed in 4.7 sec
- Pass 3 of 4: Completed in 1.8 sec
- Pass 4 of 4: Completed in 1.5 sec
Evaluation completed in 19 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
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
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이 아닌 차원을 따라 연산을 수행할 때 quantile 함수는 정확한 분위수만 계산하기 때문에 T-Digest를 기반으로 하는 근사 알고리즘 대신 정렬 기반 알고리즘(알고리즘 참조)을 사용하여 효율적으로 계산을 수행할 수 있습니다.

누적 확률 0.25, 0.5, 0.75에 대해 두 번째 차원을 따라 X의 정확한 분위수를 계산합니다.

p = [0.25 0.50 0.75]; % Vector of cumulative probabilities
Yexact = quantile(X,p,2)
Yexact =

  M×N×... tall double array

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

Preview deferred. Learn more.

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

누적 확률 0.25, 0.5, 0.75에 대해 첫 번째 차원을 따라 X의 근사 분위수를 계산합니다. 디폴트 차원이 1이기 때문에 dim의 값을 지정할 필요가 없습니다.

Yapprox = quantile(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 9.7 sec
Evaluation completed in 11 sec

누적 확률 0.25, 0.5, 0.75에 대해 (두 번째 차원을 따라) X의 정확한 분위수 중 처음 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의 첫 번째 행에 대한 0.25, 0.5, 0.75 분위수입니다.

누적 확률 0.25, 0.5, 0.75에 대해 (첫 번째 차원을 따라) X의 근사 분위수를 표시합니다.

Yapprox
Yapprox = 3×4
103 ×

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

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

균일한 간격의 누적 확률 N개에 대해 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
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).
X = t{:,varnames}
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
          :          :            :           :
          :          :            :           :

첫 번째 차원을 따라 균일한 간격의 분위수를 구하려면 T-Digest를 기반으로 하는 근사 알고리즘을 사용해야 합니다. 정렬 기반 알고리즘(알고리즘 참조)을 사용하여 tall형 배열의 첫 번째 차원을 따라 분위수를 구하면 계산량이 많아집니다.

X의 첫 번째 차원을 따라 균일한 간격의 분위수 세 개를 계산합니다. 디폴트 차원이 1이기 때문에 dim의 값을 지정할 필요가 없습니다. 근사 알고리즘을 사용하도록 'Method','approximate'를 지정합니다.

N = 3; % Number of quantiles
Yapprox = quantile(X,N,'Method','approximate')
Yapprox =

  M×N×... tall double array

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

Preview deferred. Learn more.

다른 차원(dim1이 아님)을 따라 균일한 간격의 분위수를 구하기 위해 quantile은 정확한 분위수만 계산하며, 따라서 정렬 기반 알고리즘을 사용하여 효율적으로 계산을 수행할 수 있습니다.

X의 두 번째 차원을 따라 균일한 간격의 분위수 세 개를 계산합니다. dim이 1이 아니기 때문에 quantile은 기본적으로 정확한 분위수를 반환합니다.

Yexact = quantile(X,N,2)
Yexact =

  M×N×... tall double array

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

Preview deferred. Learn more.

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

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

균일한 간격의 누적 확률 세 개에 대해 (첫 번째 차원을 따라) X의 근사 분위수를 표시합니다.

Yapprox
Yapprox = 3×4
103 ×

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

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

균일한 간격의 누적 확률 세 개에 대해 (두 번째 차원을 따라) X의 정확한 분위수 중 처음 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의 첫 번째 행에 대한 0.25, 0.5, 0.75 분위수입니다.

입력 인수

모두 축소

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

데이터형: double | single

분위수를 계산할 누적 확률로, 0에서 1 사이의 스칼라 또는 스칼라로 구성된 벡터로 지정됩니다.

예: 0.3

예: [0.25, 0.5, 0.75]

예: (0:0.25:1)

데이터형: double | single

계산할 분위수 개수로, 양의 정수로 지정됩니다. quantile은 데이터 세트를 균등 분포된 N+1개 세그먼트로 나누는 N개 분위수를 반환합니다.

데이터형: double | single

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

데이터형: single | double

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

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

데이터형: single | double

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

데이터형: char | string

출력 인수

모두 축소

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

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

  • X가 차원 d로 구성된 배열이면 Y는 배열이며, 이때 이 배열의 가장 작은 연산 차원은 요청한 분위수의 개수(N 또는 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).

마찬가지로, 1.5/n 분위수가 y1.5/n이고 2.5/n 분위수가 y2.5/n이면 선형 보간이 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에 대해 quantile은 다음과 같이 정렬 기반 알고리즘을 사용하여 분위수를 계산합니다.

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

    • {6, 3, 2, 10, 1}과 같은 다섯 개 요소로 구성된 데이터 벡터에 대해 정렬된 요소 {1, 2, 3, 6, 10}은 각각 0.1, 0.3, 0.5, 0.7, 0.9 분위수에 대응됩니다.

    • {6, 3, 2, 10, 8, 1}과 같은 여섯 개 요소로 구성된 데이터 벡터에 대해 정렬된 요소 {1, 2, 3, 6, 8, 10}은 각각 (0.5/6), (1.5/6), (2.5/6), (3.5/6), (4.5/6), (5.5/6) 분위수에 대응됩니다.

  2. quantile선형 보간을 사용하여 (0.5/n)에서 ([n – 0.5]/n) 사이의 확률에 대한 분위수를 계산합니다.

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

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

참고 문헌

[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 이전에 개발됨