Take the product of two probability density function histograms generated from data
12 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
David Gillcrist
il 21 Set 2023
Modificato: William Rose
il 21 Set 2023
I have two different sets of data $D_1$ and $D_2$ both of which have data between two values $a$ and $b$. I know I can get the histograms of these two data sets displayed as probability density functions, but what I'd like to do is take the product of these two probability density functions. What would be the most efficient way of achieving this?
0 Commenti
Risposta accettata
William Rose
il 21 Set 2023
Modificato: William Rose
il 21 Set 2023
Since you did not provide data, let's create some.
x1=rand(10000,1)+rand(10000,1); % pdf(x1) = triangle from 0 to 2 with peak at 1
x2=0.8+0.4*randn(10000,1); % normal with mu=0.8, sigma=0.4.
x2=x2(x2>=0 & x2<=2); % discard x2 values <0 and >2
Compute the histograms.
bw=0.1;
h1=histogram(x1,'Normalization','pdf','BinWidth',bw);
figure
h2=histogram(x2,'Normalization','pdf','BinWidth',bw);
Multiply the histograms.
joint=h1.Values.*h2.Values; % bin-by-bin product
Plot result
bar(0.05:bw:1.95,joint,1)
How is that? Note that joint is not a PDF since the area under the curve is not 1. If you want joint to be a pdf, multiply it by the appropriate normmalization factor.
1 Commento
William Rose
il 21 Set 2023
To make vector joint be a pdf, do
joint=joint/(sum(joint)*bw);
Check that the area under the curve of joint is unity:
disp(sum(joint)*bw)
Good luck.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Histograms in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!