Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

quantile

データ セットの分位数

説明

Q = quantile(A,p) は、区間 [0,1] の累積確率 p に対する入力データ A の要素の分位数を返します。

  • A がベクトルの場合、Q はスカラーまたは p と同じ長さのベクトルです。Q(i) には分位数 p(i) が含まれます。

  • A が行列の場合、Q は行ベクトルまたは行列であり、Q の行数は length(p) と等しくなります。Qi 行目には、A の各列の分位数 p(i) が含まれます。

  • A が多次元配列の場合、Q にはサイズが 1 より大きい最初の配列の次元に沿って計算された分位数が含まれます。

Q = quantile(A,n) は、整数 n > 1 について n 個の等間隔の累積確率 (1/(n + 1), 2/(n + 1), ..., n/(n + 1)) に対する分位数を返します。

  • A がベクトルの場合、Q はスカラーまたは長さ n のベクトルです。

  • A が行列の場合、Qn 行の行列です。

  • A が多次元配列の場合、Q にはサイズが 1 より大きい最初の配列の次元に沿って計算された分位数が含まれます。

Q = quantile(___,"all") は、最初の 2 つの構文のいずれかで A のすべての要素の分位数を返します。

Q = quantile(___,dim) は、最初の 2 つの構文のいずれかで次元 dim に沿って演算します。たとえば、A が行列の場合、quantile(A,p,2) は各行の要素について動作します。

Q = quantile(___,vecdim) は、最初の 2 つの構文のいずれかでベクトル vecdim で指定された次元に沿って演算します。たとえば、A が行列の場合、quantile(A,n,[1 2])A のすべての要素について動作します。これは、次元 1 と次元 2 で定義された配列スライスに行列内のすべての要素が含まれるためです。

Q = quantile(___,"Method",method) は、前述の構文の任意の入力引数の組み合わせを使用し、method の値に基づいて正確な分位数または近似分位数のいずれかを返します。

すべて折りたたむ

指定した確率に対するデータ セットの分位数を計算します。

サイズが 7 のデータ セットを生成します。

rng default % for reproducibility
A = randn(1,7)
A = 1×7

    0.5377    1.8339   -2.2588    0.8622    0.3188   -1.3077   -0.4336

A の要素の 0.3 分位数を計算します。

Q = quantile(A,0.3)
Q = -0.7832

累積確率 0.025、0.25、0.5、0.75、0.975 に対する A の要素の分位数を計算します。

Q = quantile(A,[0.025 0.25 0.5 0.75 0.975])
Q = 1×5

   -2.2588   -1.0892    0.3188    0.7810    1.8339

特定の数の確率に対するデータ セットの分位数を計算します。

サイズが 7 のデータ セットを生成します。

rng default % for reproducibility
A = randn(1,7)
A = 1×7

    0.5377    1.8339   -2.2588    0.8622    0.3188   -1.3077   -0.4336

A の要素の等間隔の 4 つの分位数を計算します。

Q = quantile(A,4)
Q = 1×4

   -1.4028   -0.2079    0.4720    0.9593

等間隔の 4 つの分位数を返す別の方法として、Q = quantile(A,[0.2,0.4,0.6,0.8]) を使用する方法もあります。

指定した確率に対する分位数をデータ行列の列と行に沿って計算します。

4 行 6 列のデータ行列を生成します。

rng default % for reproducibility
A = randn(4,6)
A = 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

A の各列の 0.3 分位数を計算します。

Q = quantile(A,0.3,1)
Q = 1×6

   -0.3013   -0.6958    1.5336   -0.1056    0.9491    0.1078

quantile は、A の列ごとに 1 つの分位数を計算し、行ベクトル Q を返します。-0.3013 は、A の 1 列目 (要素 0.5377、1.8339、-2.2588、0.8622 の列) の 0.3 分位数です。dim の既定値は 1 であるため、Q = quantile(A,0.3) も同じ結果を返します。

A の各行の 0.3 分位数を計算します。

Q = quantile(A,0.3,2)
Q = 4×1

    0.3844
   -0.8642
   -1.0750
    0.4985

quantile は、A の行ごとに 1 つの分位数を計算し、列ベクトル Q を返します。0.3844 は、A の 1 行目 (要素 0.5377、0.3188、3.5784、0.7254、-0.1241、0.6715 の行) の 0.3 分位数です。

等間隔の分位数をデータ行列の列と行に沿って計算します。

6 行 7 列のデータ行列を生成します。

rng default % for reproducibility
A = randi(10,6,7)
A = 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

A の列ごとに 3 つの等間隔の累積確率に対する分位数を計算します。

Q = quantile(A,3,1)
Q = 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

行列 Q の各列には、A の対応する列の分位数が含まれます。28、および 10 は、A の 1 列目 (要素 9、10、2、10、7、1 の列) の分位数です。dim の既定値は 1 であるため、Q = quantile(A,3) も同じ結果を返します。

A の行ごとに 3 つの等間隔の累積確率に対する分位数を計算します。

Q = quantile(A,3,2)
Q = 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

行列 Q の各行には、A の対応する行の 3 つの等間隔の分位数が含まれます。78、および 8.75 は、A の 1 行目 (要素 9、3、10、8、7、8、7 の行) の分位数です。

"all" および vecdim 入力を使用して、指定した確率に対する多次元配列の分位数を計算します。

3×5×2 の配列を作成します。確率のベクトルを指定します。

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

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


A(:,:,2) =

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

p = [0.25 0.75];

A のすべての要素の 0.25 分位数と 0.75 分位数を計算します。

Qall = quantile(A,p,"all")
Qall = 2×1

     8
    23

Qall(1)A の 0.25 分位数、Qall(2)A の 0.75 分位数です。

操作次元として次元 1 および 2 を指定して、A の各ページの 0.25 分位数と 0.75 分位数を計算します。

Qpage = quantile(A,p,[1 2])
Qpage = 
Qpage(:,:,1) =

    4.2500
   11.7500


Qpage(:,:,2) =

   19.2500
   26.7500

Qpage(1,1,1)A の最初のページの 0.25 分位数、Qpage(2,1,1)A の最初のページの 0.75 分位数です。

操作次元として次元 2 および 3 を指定して、A(i,:,:) の各スライスの要素の 0.25 分位数と 0.75 分位数を計算します。

Qrow = quantile(A,p,[2 3])
Qrow = 3×2

     7    22
     8    23
     9    24

Qrow(3,1)A(3,:,:) の要素の 0.25 分位数、Qrow(3,2)A(3,:,:) の要素の 0.75 分位数です。

偶数個の要素をもつベクトルの中央値と四分位数を求めます。

データ ベクトルを作成します。

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

     2     5     6    10    11    13

A の要素の中央値を計算します。

Q = quantile(A,0.5)
Q = 8

A の要素の四分位数を計算します。

Q = quantile(A,[0.25, 0.5, 0.75])
Q = 1×3

     5     8    11

A の要素の四分位数を計算する別の方法として、Q = quantile(A,3) を使用する方法もあります。

quantile線形内挿を使用して中央値と四分位数を求めるため、その結果は教科書に記載された定義とは異なる場合があります。

奇数個の要素をもつベクトルの中央値と四分位数を求めます。

データ ベクトルを作成します。

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

     2     4     6     8    10    12    14

A の要素の中央値を計算します。

Q = quantile(A,0.50)
Q = 8

A の要素の四分位数を計算します。

Q = quantile(A,[0.25, 0.5, 0.75])
Q = 1×3

    4.5000    8.0000   11.5000

A の四分位数を計算する別の方法として、Q = quantile(A,3) を使用する方法もあります。

quantile線形内挿を使用して中央値と四分位数を求めるため、その結果は教科書に記載された定義とは異なる場合があります。

特定の確率に対する tall 列ベクトルの正確な分位数および近似分位数を計算します。

tall 配列に対して計算を実行すると、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合の既定) またはローカル MATLAB セッションのいずれかを使用します。Parallel Computing Toolbox がある場合にローカル MATLAB セッションを使用してサンプルを実行するには、関数mapreducerを使用してグローバル実行環境を変更します。

mapreducer(0)

airlinesmall データ セットのデータストアを作成します。"NA" 値を欠損データとして扱って、datastoreNaN 値に置き換えられるようにします。ArrTime 変数を処理するように指定します。

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

データストア上に tall table tt を作成し、tall table から tall ベクトル A にデータを抽出します。

tt = tall(ds)
tt =

  Mx1 tall table

    ArrTime
    _______

      735  
     1124  
     2218  
     1431  
      746  
     1547  
     1052  
     1134  
       :
       :
A = tt{:,:}
A =

  Mx1 tall double column vector

         735
        1124
        2218
        1431
         746
        1547
        1052
        1134
         :
         :

累積確率 p = 0.5 に対する A の正確な分位数を計算します。A が tall 列ベクトルで p がスカラーであるため、既定では quantile は正確な分位数の値を返します。

p = 0.5;
Qexact = quantile(A,p)
Qexact =

  tall double

    ?

p = 0.5 に対する A の近似分位数を計算します。method"approximate" として指定して、分位数の計算にT-Digestに基づく近似アルゴリズムを使用します。

Qapprox = quantile(A,p,"Method","approximate")
Qapprox =

  MxNx... tall double array

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

gather を使用して、tall 配列を評価して結果をメモリに入れます。

[Qexact,Qapprox] = gather(Qexact,Qapprox)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.71 sec
- Pass 2 of 4: Completed in 0.3 sec
- Pass 3 of 4: Completed in 0.47 sec
- Pass 4 of 4: Completed in 0.43 sec
Evaluation completed in 2.6 sec
Qexact = 1522
Qapprox = 1.5220e+03

正確な分位数と近似分位数の値は、表示されている 4 桁までは同じです。

指定した累積確率に対する tall 行列の正確な分位数および近似分位数を異なる次元に沿って計算します。

tall 配列に対して計算を実行すると、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合の既定) またはローカル MATLAB セッションのいずれかを使用します。Parallel Computing Toolbox がある場合にローカル MATLAB セッションを使用してサンプルを実行するには、関数mapreducerを使用してグローバル実行環境を変更します。

mapreducer(0)

airlinesmall データ セットから varnames に格納されている変数のサブセットが含まれた tall 行列 A を作成します。tall 配列からデータを抽出するステップの詳細については、特定の確率に対する tall ベクトルの分位数を参照してください。

varnames = ["ArrDelay","ArrTime","DepTime","ActualElapsedTime"];
ds = datastore("airlinesmall.csv","TreatAsMissing","NA", ...
    "SelectedVariableNames",varnames);
tt = tall(ds);
A = tt{:,varnames}
A =

  Mx4 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に基づく近似アルゴリズムではなく、並べ替えに基づくアルゴリズム (アルゴリズムを参照) を使用して効率的に計算できるように正確な分位数のみを計算します。

2 番目の次元に沿って、累積確率 0.25、0.5、および 0.75 のベクトル p に対する A の正確な分位数を計算します。

p = [0.25 0.5 0.75];
Qexact = quantile(A,p,2)
Qexact =

  MxNx... tall double array

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

関数が最初の次元に沿って演算し、p が累積確率のベクトルである場合、t-digest に基づく近似アルゴリズムを使用して分位数を計算する必要があります。並べ替えに基づくアルゴリズムを使用して tall 配列の最初の次元に沿って分位数を求めるのは、計算負荷が高い処理です。

最初の次元に沿って、累積確率 0.25、0.5、および 0.75 に対する A の近似分位数を計算します。既定の次元は 1 であるため、dim に値を指定する必要はありません。

Qapprox = quantile(A,p,"Method","approximate")
Qapprox =

  MxNx... tall double array

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

gather を使用して、tall 配列を評価して結果をメモリに入れます。

[Qexact,Qapprox] = gather(Qexact,Qapprox);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.6 sec
Evaluation completed in 2.1 sec

累積確率 0.25、0.5、および 0.75 に対する (2 番目の次元に沿った) A の正確な分位数の最初の 5 行を表示します。

Qexact(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

行列 Qexact の各行には、A の対応する行の 3 つの分位数が含まれます。たとえば、30.5347.5、および 688.5 は、それぞれ A の 1 行目の 0.25、0.5、および 0.75 の分位数です。

累積確率 0.25、0.5、および 0.75 に対する (最初の次元に沿った) A の近似分位数を表示します。

Qapprox
Qapprox = 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

行列 Qapprox の各列には、A の対応する列の 3 つの分位数が含まれます。たとえば、Qapprox の 1 列目の要素は –7、0、11 であり、A の 1 列目の分位数が格納されています。

特定の数の等間隔の累積確率に対する tall 行列の正確な分位数および近似分位数を異なる次元に沿って計算します。

tall 配列に対して計算を実行すると、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合の既定) またはローカル MATLAB セッションのいずれかを使用します。Parallel Computing Toolbox がある場合にローカル MATLAB セッションを使用してサンプルを実行するには、関数mapreducerを使用してグローバル実行環境を変更します。

mapreducer(0)

airlinesmall データ セットから varnames に格納されている変数のサブセットが含まれた tall 行列 A を作成します。tall 配列からデータを抽出するステップの詳細については、特定の確率に対する tall ベクトルの分位数を参照してください。

varnames = ["ArrDelay","ArrTime","DepTime","ActualElapsedTime"];
ds = datastore("airlinesmall.csv","TreatAsMissing","NA", ...
    "SelectedVariableNames",varnames);
tt = tall(ds);
A = tt{:,varnames}
A =

  Mx4 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 配列の最初の次元に沿って分位数を求めるのは、計算負荷が高い処理です。

A の最初の次元に沿って 3 つの等間隔の累積確率に対する分位数を計算します。既定の次元は 1 であるため、dim に値を指定する必要はありません。method"approximate" として指定して、近似アルゴリズムを使用します。

Qapprox = quantile(A,3,"Method","approximate")
Qapprox =

  MxNx... tall double array

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

その他の次元 (dim1 以外) に沿って等間隔の累積確率に対する分位数を計算する場合、quantile は、並べ替えに基づくアルゴリズムを使用して効率的に計算できるように正確な分位数のみを計算します。

A の 2 番目の次元に沿って 3 つの等間隔の累積確率に対する分位数を計算します。dim が 1 でないため、既定では quantile は正確な分位数を返します。

Qexact = quantile(A,3,2)
Qexact =

  MxNx... tall double array

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

gather を使用して、tall 配列を評価して結果をメモリに入れます。

[Qapprox,Qexact] = gather(Qapprox,Qexact);
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 1.2 sec
Evaluation completed in 1.4 sec

3 つの等間隔の累積確率に対する (最初の次元に沿った) A の近似分位数を表示します。

Qapprox
Qapprox = 3×4
103 ×

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

行列 Qapprox の各列には、A の対応する列の分位数が含まれます。たとえば、Qapprox の 1 列目の要素は –7、0、11 であり、A の 1 列目の分位数が格納されています。

3 つの等間隔の累積確率に対する (2 番目の次元に沿った) A の正確な分位数の最初の 5 行を表示します。

Qexact(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

行列 Qexact の各行には、A の対応する行の 3 つの等間隔の分位数が含まれます。たとえば、30.5347.5、および 688.5 は、それぞれ A の 1 行目の 0.25、0.5、および 0.75 の分位数です。

入力引数

すべて折りたたむ

入力配列。ベクトル、行列または多次元配列として指定します。

データ型: single | double

分位数を計算する累積確率。0 から 1 のスカラーまたはスカラーのベクトルとして指定します。

例: 0.3

例: [0.25, 0.5, 0.75]

例: (0:0.25:1)

データ型: single | double

分位数を計算する確率の数。正の整数のスカラーとして指定します。quantile は、データ セットを均等に分布した n+1 個のセグメントに分割する n 個の分位数を返します。

データ型: single | double

演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。

入力行列 A と累積確率のベクトル p を考えます。

  • Q = quantile(A,p,1) は、p の累積確率に対する A の列の分位数を計算します。指定された操作次元が 1 であるため、Q には length(p) 個の行が含まれます。

  • Q = quantile(A,p,2) は、p の累積確率に対する A の行の分位数を計算します。指定された操作次元が 2 であるため、Q には length(p) 個の列が含まれます。

入力行列 A と等間隔の確率のベクトル n を考えます。

  • Q = quantile(A,n,1) は、n 個の等間隔の累積確率に対する A の列の分位数を計算します。指定された操作次元が 1 であるため、Q には n 個の行が含まれます。

  • Q = quantile(A,n,2) は、n 個の等間隔の累積確率に対する A の行の分位数を計算します。指定された操作次元が 2 であるため、Q には n 個の列が含まれます。

次元 dim は、長さが length(p) または n に等しい Q の次元を示します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

演算の対象の次元のベクトル。正の整数のベクトルとして指定します。各要素は入力データの次元を表します。

指定された最小の操作次元の出力 Q のサイズは length(p) または n に等しくなります。vecdim で指定されたその他の操作次元の Q のサイズは 1 です。vecdim で指定されていないすべての次元の Q のサイズは入力データと同じままです。

2×3×3 の入力配列 A と累積確率 p を考えます。quantile(A,p,[1 2]) は、操作次元が 1 と 2 で min([1 2]) = 1 であるため、length(p)×1×3 の配列を返します。返された配列の各ページには、A の対応するページの要素の分位数が含まれます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

分位数を計算する方法。次の値のいずれかとして指定します。

  • "exact" — 並べ替えを使用するアルゴリズムを使って正確な分位数を計算します。

  • "approximate"T-Digest を使用するアルゴリズムを使って近似分位数を計算します。

詳細

すべて折りたたむ

線形内挿

線形内挿は線形多項式を使用して、ベクトルまたは配列 x の点における基となる関数 Y = f(X) の値である yi = f(xi) を求めます。y1 = f(x1) および y2 = f(x2) であるデータ点 (x1, y1) および (x2, y2) について、線形内挿では、次のように 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 の場合のスケーリング関数を示しています。

Scaling function plotted with q on the x-axis and k on the y-axis

このスケーリング関数は分位数 q をスケーリング係数 k に変換して、q の可変サイズのステップを求めています。そのため、クラスター サイズは不均等です (中央の分位数付近では大きく、q = 0 および q = 1 付近では小さくなっています)。クラスターが小さいほど、データの両端付近でより高い精度が得られます。

重みと位置をもつ新しい観測で t-digest を更新するために、新しい観測に最も近いクラスターを求めます。次に、重みを追加し、加重平均に基づいてクラスターの重心を更新します。ただし、クラスターの更新された重みがサイズ制限を超えないようにします。

t-digest の和集合を求めて重心をマージすることで、データの各区画の独立した t-digest を結合できます。t-digest を結合するために、まずすべての独立した t-digest のクラスターをクラスターの重みの降順で並べ替えます。次に、サイズ制限を満たしていれば、隣接するクラスターをマージして新しい t-digest を求めます。

データ セット全体を表す t-digest が求まると、t-digest 内の各クラスターの端点 (境界) を推定し、各クラスターの端点間の内挿を使用して正確な推定分位数を求めます。

アルゴリズム

n 要素のベクトル A について、quantile は並べ替えに基づくアルゴリズムを使用して分位数を計算します。

  1. A の並べ替えられた要素は、(0.5/n)、(1.5/n)、...、([n – 0.5]/n) の分位数と見なされます。以下に例を示します。

    • {6, 3, 2, 10, 1} のような 5 つの要素から成るデータ ベクトルでは、並べ替えられた要素 {1, 2, 3, 6, 10} はそれぞれ 0.1、0.3、0.5、0.7、0.9 の分位数に対応しています。

    • {6, 3, 2, 10, 8, 1} のような 6 つの要素から成るデータ ベクトルでは、並べ替えられた要素 {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. その範囲外の確率に対応する分位数に対して、quantileA の要素の最小値または最大値を割り当てます。

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 より前に導入

すべて展開する