How To Implement Conflation For Probability Distribution In Python?
I looked online for performing the combining several continuous probability distributions into one continuous probability distribution. This method is called Conflation, the method
Solution 1:
Disclaimer: there's a good chance I'm misunderstanding either you or the paper authors, in which case please suggest an edit to this answer.
Here is a trivial, not-especially-performant implementation of what I think conflation might look like
##define pdfs for discrete RV X = {1,2,3,4}import numpy as np
defmult_list(pdfs):
prod=np.ones(pdfs[0].shape[0])
for pdf in pdfs:
prod=prod*pdf
return prod
defconflate(pdfs):
return mult_list(pdfs)/sum(mult_list(pdfs))
pdf_1=np.array([.25,.25,.25,.25])
pdf_2=np.array([.33,.33,.33,.00])
pdf_3=np.array([.25,.12,.13,.50])
print(conflate([pdf_1,pdf_2,pdf_3]))
which yields the resulting conflated pdf
>>>[0.50.240.260. ]
which passes a cursory sniff test.
On the continuous side of things, the above translates to
from scipy.integrate import quad
from scipy import stats
import numpy as np
def prod_pdf(x,dists):
p_pdf=1
for dist in dists:
p_pdf=p_pdf*dist.pdf(x)
return p_pdf
def conflate_pdf(x,dists,lb,ub):
denom = quad(prod_pdf, lb, ub, args=(dists))[0]
return prod_pdf(x,dists)/denom
dists=[stats.norm(2,1),stats.norm(4,2)]
lb=-10
ub=10
domain=np.arange(lb,ub,.01)
graph=conflate_pdf(domain,dists,lb,ub)
from matplotlib import pyplot as plt
plt.plot(domain,graph)
plt.xlabel("domain")
plt.ylabel("pdf")
plt.title("Conflated PDF")
plt.show()
plt.savefig("conflatedpdf.png")
As you can see, the distribution is not bimodal, just as one would hope.
Post a Comment for "How To Implement Conflation For Probability Distribution In Python?"