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');
xi
と f
のサイズを表示して、mvksdensity
が xi
内の各点で密度を計算したことを確認します。
size_xi = size(xi)
size_xi = 1×2
26364 4
size_f = size(f)
size_f = 1×2
26364 1
入力引数
x
— 標本データ
数値行列
mvksdensity
が確率密度の推定値を返す対象となる標本データ。n 行 d 列の数値行列を指定します。n は x
内のデータ点 (行) の数、d は次元 (列) の数です。
データ型: single
| double
bw
— カーネル平滑化ウィンドウの帯域幅の値
スカラー値 | d 要素のベクトル
カーネル平滑化ウィンドウの帯域幅の値。スカラー値または d 要素のベクトルを指定します。d は標本データ x
内の次元 (列) の数です。bw
がスカラー値の場合、すべての次元に適用されます。
'BoundaryCorrection'
として 'log'
(既定値)、'Support'
として 'positive'
または 2 行の行列を指定した場合、mvksdensity
は対数変換を使用して有界のデータを非有界に変換します。bw
の値は、変換された値のスケールに対するものになります。
帯域幅に関する Silverman の経験則は次のとおりです。
ここで、d は次元数、n は観測値数、 は i 番目の変量の標準偏差です [4]。
例: 'Bandwidth',0.8
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Kernel','triangle','Function,'cdf'
は、mvksdensity
が三角カーネル関数を使用して標本データの cdf を推定することを指定します。
BoundaryCorrection
— 境界補正方法
'log' (既定値) | 'reflection'
境界補正方法。''BoundaryCorrection'
' と、'log'
または 'reflection'
のいずれかから構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
'log' | 関数
|
'reflection' |
|
mvksdensity
は、'Support'
として 'unbounded'
以外の値が指定された場合のみ、境界補正を適用します。
例: 'BoundaryCorrection','reflection'
Function
— 推定する関数
'pdf'
(既定値) | 'cdf'
| 'survivor'
推定する関数。'Function'
と、以下のいずれかで構成されるコンマ区切りペアとして指定します。
値 | 説明 |
---|---|
'pdf' | 確率密度関数 |
'cdf' | 累積分布関数 |
'survivor' | 生存時間関数 |
例: 'Function'
,'cdf'
Kernel
— カーネル平滑化のタイプ
'normal'
(既定値) | 'box'
| 'triangle'
| 'epanechnikov'
| 関数ハンドル | 文字ベクトル | string スカラー
カーネル平滑化のタイプ。'Kernel'
と、以下のいずれかで構成されるコンマ区切りペアとして指定します。
値 | 説明 |
---|---|
'normal' | 正規 (ガウス) カーネル |
'box' | ボックス カーネル |
'triangle' | 三角カーネル |
'epanechnikov' | Epanechnikov カーネル |
カスタム関数または組み込み関数であるカーネル関数も指定できます。関数ハンドル (@myfunction
や @normpdf
など) を使用するか、文字ベクトルまたは string スカラー ('myfunction'
や 'normpdf'
など) を使用して、関数を指定します。指定した関数は、1 つの引数を使用して呼び出されます。この引数は、その次元の帯域幅によって正規化された、密度の評価位置とデータ値の間の距離の配列です。この関数は、カーネル関数の値に対応する値が格納されている、同じサイズの配列を返されなければなりません。
mvksdensity
は各次元に同じカーネルを適用します。
例: 'Kernel','box'
Support
— 密度のサポート
'unbounded'
(既定値) | 'positive'
| 2 行 d 列の行列
密度のサポート。'support'
と、以下のいずれかで構成されるコンマ区切りペアとして指定します。
値 | 説明 |
---|---|
'unbounded' | 密度が数直線全体に広がることを許可します |
'positive' | 密度を正の値に制限します |
2 行 d 列の行列 | 密度のサポートについて有限の下限と上限を指定します。1 行目には下限が、2 行目には上限が格納されます。各列には、x の 1 つの次元に対する範囲が格納されます。 |
'Support'
は、[0 -Inf L; Inf Inf U]
のように指定される正、有界または非有界の値の組み合わせにすることもできます。
例: 'Support','positive'
データ型: single
| double
| char
| string
Weights
— 標本データの重み
ベクトル
標本データの重み。'Weights'
と長さが size(x,1)
のベクトルから構成されるコンマ区切りのペアとして指定します。x
は標本データです。
例: 'Weights',xw
データ型: single
| double
詳細
多変量カーネル分布
多変量カーネル分布は、乱数ベクトルの確率密度関数 (pdf) のノンパラメトリック表現です。パラメトリック分布ではデータを適切に記述できなかったり、データの分布に関する仮定を実行しない場合、カーネル分布を使用できます。多変量カーネル分布は、平滑化関数と帯域幅の行列によって定義されます。これらは、生成される密度曲線の滑らかさを制御します。
多変量カーネル密度推定量は、乱数ベクトルの推定 pdf です。x = (x1, x2, …, xd)' は密度関数が f である d 次元の乱数ベクトル、yi = (yi1, yi2, …, yid)' は i = 1, 2, …, n について f から抽出した無作為標本であるとします。ここで、n は無作為標本の個数です。x の任意の実数ベクトルについて、多変量カーネル密度推定量は次によって与えられます。
ここで、, はカーネル平滑化関数、H は d 行 d 列の帯域幅の行列です。
mvksdensity
は、帯域幅の対角行列と積カーネルを使用します。つまり、H1/2 はベクトル (h1, h2, …, hd) の要素が主対角にある正方対角行列です。K(x) は K(x) = k(x1)k(x2) ⋯k(xd) という積の形式になります。 は 1 次元のカーネル平滑化関数です。すると、多変量カーネル密度推定量は次のようになります。
x の任意の実数ベクトルについて、累積分布関数 (cdf) のカーネル推定量は次によって与えられます。
ここで、 です。
反転法
反転法は、確率変数に有界のサポートがある場合にカーネル密度推定量を正確に求める境界補正方法です。'BoundaryCorrection','reflection'
が指定された場合、mvksdensity
は反転法を使用します。
さらに 'Support'
に、各次元の下限と上限から成る 2 行の行列を指定した場合、mvksdensity
はカーネル推定量を次のように求めます。
'Function'
が'pdf'
である場合、カーネル密度推定量は(Lj ≤ xj ≤ Uj)。
ここで、 および であり、yij は入力引数
x
のx(i,j)
に対応するi
番目の標本データのj
番目の要素です。Lj と Uj はそれぞれ、j
番目の次元の下限と上限です。'Function'
が'cdf'
である場合、cdf のカーネル推定量は(Lj ≤ xj ≤ Uj)。
生存時間関数のカーネル推定量を取得するため (
'Function'
が'survivor'
である場合)、mvksdensity
は と の両方を使用します。
さらに '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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
名前と値のペアの引数に含まれる名前 (
'Bandwidth'
など) は、コンパイル時の定数でなければなりません。名前と値のペアの引数
'BoundaryCorrection'
、'Function'
および'Kernel'
の値も、コンパイル時の定数でなければなりません。たとえば、生成されたコードで名前と値のペアの引数'Function','cdf'
を使用するには、{coder.Constant('Function'),coder.Constant('cdf')}
をcodegen
の-args
の値に含めます。名前と値のペアの引数
'Kernel'
の値をカスタム関数ハンドルにすることはできません。カスタム カーネル関数を指定するには、文字ベクトルまたは string スカラーを使用します。名前と値のペアの引数
'Support'
の値について、コンパイル時のデータ型と実行時のデータ型が一致しなければなりません。
コード生成の詳細については、コード生成の紹介および一般的なコード生成のワークフローを参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)