Main Content

mvksdensity

多変量データのカーネル平滑化関数推定値

説明

f = mvksdensity(x,pts,'Bandwidth',bw) は、帯域幅の値に必要な名前と値のペアの引数 bw を使用し、n 行 d 列の行列 x に格納されている標本データの確率密度推定値を pts 内の点で評価して計算します。推定は積ガウス カーネル関数に基づきます。

一変量または二変量データの場合は、代わりに ksdensity を使用します。

f = mvksdensity(x,pts,'Bandwidth',bw,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された追加オプションを使用して、前の出力引数のいずれかを返します。たとえば、確率密度、累積確率、生存時間関数など、mvksdensity が評価する関数のタイプを定義できます。入力値に重みを割り当てることもできます。

すべて折りたたむ

Hald セメント データを読み込みます。

load hald

これは、13 種類のセメント組成に対する硬化熱を測定したデータです。予測子行列 ingredients には、4 種類のセメント原料のそれぞれについての組成率が格納されています。応答行列 heat には、180 日後の硬化熱 (cal/g) が格納されています。

ingredients の最初の 3 つの観測値についてカーネル密度を推定します。

xi = ingredients(1:3,:);
f = mvksdensity(ingredients,xi,'Bandwidth',0.8);

Hald セメント データを読み込みます。

load hald

これは、13 種類のセメント組成に対する硬化熱を測定したデータです。予測子行列 ingredients には、4 種類のセメント原料のそれぞれについての組成率が格納されています。応答行列 heat には、180 日後の硬化熱 (cal/g) が格納されています。

密度を推定する点の配列を作成します。まず、各次元で同様の数の点を使用して、各変数の範囲と間隔を定義します。

gridx1 = 0:2:22;
gridx2 = 20:5:80;
gridx3 = 0:2:24;
gridx4 = 5:5:65;

次に、ndgrid を使用して、定義した範囲および間隔による点のフル グリッドを生成します。

[x1,x2,x3,x4] = ndgrid(gridx1,gridx2,gridx3,gridx4);

最後に、変換と連結を行って、密度を推定する点が格納されている配列を作成します。この配列には、各変数について 1 つずつの列があります。

x1 = x1(:,:)';
x2 = x2(:,:)';
x3 = x3(:,:)';
x4 = x4(:,:)';
xi = [x1(:) x2(:) x3(:) x4(:)];

密度を推定します。

f = mvksdensity(ingredients,xi,...
	'Bandwidth',[4.0579 10.7345 4.4185 11.5466],...
	'Kernel','normpdf');

xif のサイズを表示して、mvksdensityxi 内の各点で密度を計算したことを確認します。

size_xi = size(xi)
size_xi = 1×2

       26364           4

size_f = size(f)
size_f = 1×2

       26364           1

入力引数

すべて折りたたむ

mvksdensity が確率密度の推定値を返す対象となる標本データ。n 行 d 列の数値行列を指定します。n は x 内のデータ点 (行) の数、d は次元 (列) の数です。

データ型: single | double

確率密度推定値 f を評価する点。x と同じ列数の行列を指定します。返される推定値 f および pts は、同じ行数になります。

データ型: single | double

カーネル平滑化ウィンドウの帯域幅の値。スカラー値または d 要素のベクトルを指定します。d は標本データ x 内の次元 (列) の数です。bw がスカラー値の場合、すべての次元に適用されます。

'BoundaryCorrection' として 'log' (既定値)、'Support' として 'positive' または 2 行の行列を指定した場合、mvksdensity は対数変換を使用して有界のデータを非有界に変換します。bw の値は、変換された値のスケールに対するものになります。

帯域幅に関する Silverman の経験則は次のとおりです。

bi=σi{4(d+2)n}1(d+4),i=1,2,...,d,

ここで、d は次元数、n は観測値数、σi は i 番目の変量の標準偏差です [4]

例: 'Bandwidth',0.8

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'Kernel','triangle','Function,'cdf' は、mvksdensity が三角カーネル関数を使用して標本データの cdf を推定することを指定します。

境界補正方法。''BoundaryCorrection'' と、'log' または 'reflection' のいずれかから構成されるコンマ区切りのペアとして指定します。

説明
'log'

関数 mvksdensity は、次のいずれかの変換を使用して有界のデータを非有界に変換します。その後、密度推定の後、元の有界スケールに戻します。

  • 'Support','positive' を指定した場合、mvksdensity は各次元について log(xj) を適用します。xj は入力引数 xj 番目の列です。

  • 各次元の下限と上限から成る 2 行の行列を 'Support' に指定した場合、mvksdensity は各次元について log((xj-Lj)/(Uj-xj)) を適用します。Lj と Uj はそれぞれ j 番目の次元の下限と上限です。

bw の値は、変換された値のスケールに対するものになります。

'reflection'

mvksdensity は、反転データを境界の近くに追加することにより有界データを補充してから、元のサポートに対応する推定値を返します。詳細については、反転法を参照してください。

mvksdensity は、'Support' として 'unbounded' 以外の値が指定された場合のみ、境界補正を適用します。

例: 'BoundaryCorrection','reflection'

推定する関数。'Function' と、以下のいずれかで構成されるコンマ区切りペアとして指定します。

説明
'pdf'確率密度関数
'cdf'累積分布関数
'survivor'生存時間関数

例: 'Function','cdf'

カーネル平滑化のタイプ。'Kernel' と、以下のいずれかで構成されるコンマ区切りペアとして指定します。

説明
'normal' 正規 (ガウス) カーネル
'box'ボックス カーネル
'triangle'三角カーネル
'epanechnikov'Epanechnikov カーネル

カスタム関数または組み込み関数であるカーネル関数も指定できます。関数ハンドル (@myfunction@normpdf など) を使用するか、文字ベクトルまたは string スカラー ('myfunction''normpdf' など) を使用して、関数を指定します。指定した関数は、1 つの引数を使用して呼び出されます。この引数は、その次元の帯域幅によって正規化された、密度の評価位置とデータ値の間の距離の配列です。この関数は、カーネル関数の値に対応する値が格納されている、同じサイズの配列を返されなければなりません。

mvksdensity は各次元に同じカーネルを適用します。

例: 'Kernel','box'

密度のサポート。'support' と、以下のいずれかで構成されるコンマ区切りペアとして指定します。

説明
'unbounded'密度が数直線全体に広がることを許可します
'positive'密度を正の値に制限します
2 行 d 列の行列密度のサポートについて有限の下限と上限を指定します。1 行目には下限が、2 行目には上限が格納されます。各列には、x の 1 つの次元に対する範囲が格納されます。

'Support' は、[0 -Inf L; Inf Inf U] のように指定される正、有界または非有界の値の組み合わせにすることもできます。

例: 'Support','positive'

データ型: single | double | char | string

標本データの重み。'Weights' と長さが size(x,1) のベクトルから構成されるコンマ区切りのペアとして指定します。x は標本データです。

例: 'Weights',xw

データ型: single | double

出力引数

すべて折りたたむ

推定される関数値。ベクトルとして返されます。fpts は同じ行数になります。

詳細

すべて折りたたむ

多変量カーネル分布

多変量カーネル分布は、乱数ベクトルの確率密度関数 (pdf) のノンパラメトリック表現です。パラメトリック分布ではデータを適切に記述できなかったり、データの分布に関する仮定を実行しない場合、カーネル分布を使用できます。多変量カーネル分布は、平滑化関数と帯域幅の行列によって定義されます。これらは、生成される密度曲線の滑らかさを制御します。

多変量カーネル密度推定量は、乱数ベクトルの推定 pdf です。x = (x1, x2, …, xd)' は密度関数が f である d 次元の乱数ベクトル、yi = (yi1, yi2, …, yid)'i = 1, 2, …, n について f から抽出した無作為標本であるとします。ここで、n は無作為標本の個数です。x の任意の実数ベクトルについて、多変量カーネル密度推定量は次によって与えられます。

f^H(x)=1ni=1nKH(xyi),

ここで、KH(x)=|H|1/2K(H1/2x), K(·) はカーネル平滑化関数、H は d 行 d 列の帯域幅の行列です。

mvksdensity は、帯域幅の対角行列と積カーネルを使用します。つまり、H1/2 はベクトル (h1, h2, …, hd) の要素が主対角にある正方対角行列です。K(x) は K(x) = k(x1)k(x2) ⋯k(xd) という積の形式になります。k(·) は 1 次元のカーネル平滑化関数です。すると、多変量カーネル密度推定量は次のようになります。

f^H(x)=1ni=1nKH(xyi)=1nh1h2hdi=1nK(x1yi1h1,x2yi2h2,,xdyidhd)=1nh1h2hdi=1nj=1dk(xjyijhj).

x の任意の実数ベクトルについて、累積分布関数 (cdf) のカーネル推定量は次によって与えられます。

F^H(x)=x1x2xdf^H(t)dtddt2dt1=1ni=1nj=1dG(xjyijhj),

ここで、G(xj)=xjk(tj)dtj です。

反転法

反転法は、確率変数に有界のサポートがある場合にカーネル密度推定量を正確に求める境界補正方法です。'BoundaryCorrection','reflection' が指定された場合、mvksdensity は反転法を使用します。

さらに 'Support' に、各次元の下限と上限から成る 2 行の行列を指定した場合、mvksdensity はカーネル推定量を次のように求めます。

  • 'Function''pdf' である場合、カーネル密度推定量は

    f^H(x)=1nh1h2hdi=1nj=1d[k(xjyijhj)+k(xjyijhj)+k(xjyij+hj)] (Lj ≤ xj ≤ Uj)。

    ここで、yij=2Ljyij および yij+=2Ujyij であり、yij は入力引数 xx(i,j) に対応する i 番目の標本データの j 番目の要素です。Lj と Uj はそれぞれ、j 番目の次元の下限と上限です。

  • 'Function''cdf' である場合、cdf のカーネル推定量は

    F^H(x)=1ni=1nj=1d[G(xjyijhj)+G(xjyijhj)+G(xjyij+hj)G(Ljyijhj)G(Ljyijhj)G(Ljyij+hj)] (Lj ≤ xj ≤ Uj)。

  • 生存時間関数のカーネル推定量を取得するため ('Function''survivor' である場合)、mvksdensityf^H(x)F^H(x) の両方を使用します。

さらに 'Support''positive'、または [0 inf] を含む行列を指定した場合、mvksdensity は上記の方程式で [Lj Uj][0 inf] に置き換えることによりカーネル密度推定量を求めます。

参照

[1] Bowman, A. W., and A. Azzalini. Applied Smoothing Techniques for Data Analysis. New York: Oxford University Press Inc., 1997.

[2] Hill, P. D. “Kernel estimation of a distribution function.” Communications in Statistics – Theory and Methods. Vol. 14, Issue 3, 1985, pp. 605-620.

[3] Jones, M. C. “Simple boundary correction for kernel density estimation.” Statistics and Computing. Vol. 3, Issue 3, 1993, pp. 135-146.

[4] Silverman, B. W. Density Estimation for Statistics and Data Analysis. Chapman & Hall/CRC, 1986.

[5] Scott, D. W. Multivariate Density Estimation: Theory, Practice, and Visualization. John Wiley & Sons, 2015.

拡張機能

バージョン履歴

R2016a で導入