2 つの変数 (X、Y) のペアが与えられた場合、Vanilla MATLAB (ツールボックスなし) で経験的ジョイント PDF と CDF をどのように生成してプロットできますか?
質問する
15357 次
1 に答える
9
元の回答 (Matlab R2015a 以下)
データは次のとおりです。
X
確率変数 X、Y: サンプルのベクトル 、 として定義されますY
。- x、y 軸でのビンのエッジ: ベクトル
x_axis
、によって定義されy_axis
ます。エッジは明らかに増加している必要がありますが、等間隔である必要はありません。
結果の PDF と CDF は、x エッジと y エッジによって決定される四角形の中心で定義されます。
結果を 3D でプロットするには、surf(...)
代わりに を使用しimagesc(...)
ます。
clear all
%// Data (example):
X = randn(1,1e5); %// random variables.
Y = randn(1,1e5);
x_axis = -3:.2:3; %// Define edges of bins for x axis. Column vector
y_axis = -3:.2:3; %// Same for y axis
%// Compute corners of 2D-bins:
[x_mesh_upper,y_mesh_upper] = meshgrid(x_axis(2:end),y_axis(2:end));
[x_mesh_lower,y_mesh_lower] = meshgrid(x_axis(1:end-1),y_axis(1:end-1));
%// Compute centers of 1D-bins:
x_centers = (x_axis(2:end)+x_axis(1:end-1))/2;
y_centers = (y_axis(2:end)+y_axis(1:end-1))/2;
%// Compute pdf:
pdf = mean( bsxfun(@le, X(:), x_mesh_upper(:).') ...
& bsxfun(@gt, X(:), x_mesh_lower(:).') ...
& bsxfun(@le, Y(:), y_mesh_upper(:).') ...
& bsxfun(@gt, Y(:), y_mesh_lower(:).') );
pdf = reshape(pdf,length(x_axis)-1,length(y_axis)-1); %// pdf values at the
%// grid points defined by x_centers, y_centers
pdf = pdf ./ (y_mesh_upper-y_mesh_lower) ./ (x_mesh_upper-x_mesh_lower);
%// normalize pdf to unit integral
%// Compute cdf:
cdf = mean( bsxfun(@le, X(:), x_mesh_upper(:).') ...
& bsxfun(@le, Y(:), y_mesh_upper(:).') );
cdf = reshape(cdf,length(x_axis)-1,length(y_axis)-1);
%// Plot pdf
figure
imagesc(x_centers,y_centers,pdf)
axis xy
axis equal
colorbar
title 'pdf'
%// Plot cdf
figure
imagesc(x_centers,y_centers,cdf)
axis xy
axis equal
colorbar
title 'cdf'
編集された回答 (Matlab R2015b 以降)
Matlab R2015b には、histogram2
すべての作業を行う関数が含まれています。PDF (適切な入力フラグが与えられた場合) または CDF を取得するための正規化が自動的に行われます。
上記と同じ例を使用すると、
clear all
%// Data (example):
X = randn(1,1e5); % random variables.
Y = randn(1,1e5);
x_axis = -3:.2:3; % Define edges of bins for x axis. Column vector
y_axis = -3:.2:3; % Same for y axis
%// Compute and plot pdf
figure
histogram2(X, Y, x_axis, y_axis, 'Normalization', 'pdf')
%// Compute and plot cdf
figure
histogram2(X, Y, x_axis, y_axis, 'Normalization', 'cdf')
于 2013-09-05T15:58:01.017 に答える