0

データから結合密度関数を作成する際に問題が発生しています。私が持っているのは、次のように保存された2つのベクトルとしての在庫からのキューサイズです。

X = [askQueueSize bidQueueSize];

次に、hist3 関数を使用して 3D ヒストグラムを作成します。これは私が得るものです: http://dl.dropbox.com/u/709705/hist-plot.png

私が望むのは、[0 1] から移動するように Z 軸を正規化することです。

それ、どうやったら出来るの?または、誰かが株式に優れた関節密度のmatlab関数を持っていますか?

これは似ています ( MatLab で確率密度関数を描画する方法は? ) が 2D です。

私が欲しいのは で 3Dx:ask queue, y:bid queue, z:probabilityです。

私はここで壁にぶつかったので、誰かがこれで私を助けてくれれば大歓迎です.

4

3 に答える 3

2

私はこれを行う簡単な方法を見ることができませんでした。を使用して、hist3からヒストグラムカウントを取得できます。

[N C] = hist3(X);

そして、アイデアはそれらを次のように正規化することです。

N = N / sum(N(:));

しかし、後でそれらをヒストグラムにプロットして戻すための良い方法を見つけることができません(を使用することはできますbar3(N)が、軸のラベルは手動で設定する必要があると思います)。

私が最終的に得た解決策は、のコードを変更することですhist3。これにアクセスできる場合(edit hist3)、これはうまくいくかもしれませんが、法的な状況が何であるかはよくわかりません(hist3をコピーして自分で変更する場合は、統計ツールボックスのライセンスが必要ですが、おそらくそうではありません)法的)。

surfとにかく、プロット用にデータを準備している場所を見つけました。x、y、zに対応する3つの行列があります。z行列の内容が計算される直前(256行目)に、次のように挿入しました。

n = n / sum(n(:));

これは、カウントマトリックスを正規化します。

最後に、ヒストグラムがプロットされたら、次の方法で軸の制限を設定できます。

xlim([0, 1]);

必要ならば。

于 2012-04-12T16:47:10.497 に答える
2

mathworks フォーラムの人の助けを借りて、これは私が最終的に得た素晴らしいソリューションです。

(data_x と data_y は hist3 で計算したい値です)

x = min_x:step:max_x; % axis x, which you want to see
y = min_y:step:max_y; % axis y, which you want to see

[X,Y] = meshgrid(x,y); *%important for "surf" - makes defined grid*

pdf = hist3([data_x , data_y],{x y}); %standard hist3 (calculated for yours axis)
pdf_normalize = (pdf'./length(data_x)); %normalization means devide it by length of 
                                         %data_x (or data_y)
figure()
surf(X,Y,pdf_normalize) % plot distribution

これにより、3D の結合密度プロットが得られました。これは、表面上の積分を次のように計算することで確認できます。

integralOverDensityPlot = sum(trapz(pdf_normalize));

変数stepがゼロになると、変数integralOverDensityPlotは 1.0 になります。

これが誰かを助けることを願っています!

于 2012-04-14T14:45:35.577 に答える
0

hist3 関数を使用してこれを行う簡単な方法があります。

[bins centers] = hist3(X); % X should be matrix with two columns
c_1 = centers{1};
c_2 = centers{2};
pdf = bins / (sum(sum(bins))*(c_1(2)-c_1(1)) * (c_2(2)-c_2(1)));

これを「統合」すると、1になります。

sum(sum(pdf * (c_1(2)-c_1(1)) * (c_2(2)-c_2(1))))
于 2016-01-16T18:58:39.920 に答える