How to sample from custom 2D distribution?
34 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Filip Trönnberg
am 18 Apr. 2012
Bearbeitet: Ahmadreza Momenisedei
am 28 Sep. 2020
I have a joint density function for to independent variables X and Y. (See: http://dl.dropbox.com/u/709705/JointDens.png) And I now want to sample new x,y from this distribution.
What I believe I have to do is to find the joint cumulative distribution and then somehow sample from it. I kinda know how to do this in 1D, but I find it really hard to understand how to do it in 2D.
I also used the matlab-function cumtrapz to find the cumulative distribution function for the above pdf. (See: http://dl.dropbox.com/u/709705/CumulativeDist.png)
Just to be clear, what i want to do is to sample random values x,y from this empirical distribution.
Can someone please point me in the right direction here?!
0 Kommentare
Akzeptierte Antwort
Weitere Antworten (2)
Richard Brown
am 19 Apr. 2012
A really basic, quick to code (but darned inefficient way) is to generate uniform samples in the 3D volume defined by the x and y coordinates and the maximum z coordinate. Accept only samples that fall beneath the surface. The x,y coordinates of these samples will have the distribution you want.
3 Kommentare
Atul Kedia
am 21 Jul. 2019
Bearbeitet: Atul Kedia
am 22 Jul. 2019
Lets say the pdf is for variables
and is denoted by
.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230700/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230701/image.png)
You can imagine a 2-D distribution as a surface in 3 dimensions with undulations based on the distribution. The height of the surface above any
point corresponds to its probability (distribution
). What he is suggesting is to sample uniformly over the range of
(where maximum value that z takes = maximum value of the pdf, or
, or the max height of the surface in 3-D).
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230702/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230701/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230704/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230705/image.png)
If for the sampled (
) ,
then the coordinates
are part of your randomly sampled points. If
then the point
need to be rejected and is not part of your sample.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230706/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230707/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230708/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230709/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/230708/image.png)
Let me know if you have more questions.
Ahmadreza Momenisedei
am 28 Sep. 2020
Bearbeitet: Ahmadreza Momenisedei
am 28 Sep. 2020
That was smart!
Tom Lane
am 19 Apr. 2012
There is a Statistics Toolbox function "slicesample" that could be useful. It does not generate independent samples from the distribution, but instead generates a Markov Chain such that a long sequence of values will have a distribution close to the target distribution. To use this, you would need to be able to write down an expression for the density.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Probability Distributions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!