我是贝叶斯统计的新手,我正在尝试估计 Python 中泊松分布(似然)和 Gamma 分布(先验)的后验。我试图估计的参数是泊松分布中的 lambda 变量。我认为后验将采用 Gamma 分布的形式(先验共轭?),但我不想利用它。我唯一得到的是数据(名为“my_data”)。这是我的代码:
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
import scipy.stats
x=np.linspace(1,len(my_data),len(my_data))
lambda_estimate=np.mean(my_data)
prior= scipy.stats.gamma.pdf(x,alpha,beta) #the parameters dont matter for now
likelihood_temp = lambda yi, a: scipy.stats.poisson.pmf(yi, a)
likelihood = lambda y, a: np.log(np.prod([likelihood_temp(data, a) for data in my_data]))
posterior=likelihood(my_data,lambda_estimate) * prior
当我尝试绘制后验图时,我得到一个空图。我绘制了先验图,看起来不错,所以我认为问题在于可能性。我获取日志是因为数据相当大,而且我不希望事情变得不稳定。谁能指出我的代码中的问题吗?任何帮助将不胜感激。
最佳答案
在贝叶斯统计中,一个目标是计算给定数据的参数 (lambda) 的后验分布以及 lambda 的一系列可能值的先验分布。在您的代码中,您计算数组 x 的先验,但您使用 lambda 的单个值来计算可能性。后验和可能性也应该超过 x,类似于:
posterior = [likelihood(my_data, lambda_i) for lambda_i in x] * prior
(假设您没有记录先验和可能性)
您可能想看看 PyMC3 库。
关于python - 在Python中估计后验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35756579/