Matlab mle fitting vs Python Scipy

z9zf31ra  于 6个月前  发布在  Matlab
关注(0)|答案(1)|浏览(70)

我正在将Matlab代码转换为Python版本。Matlab代码使用最大似然估计mle函数来拟合一组Rayleigh和Rice分布的样本。
然后,它使用pdf函数计算某些点的pdf值(给定估计参数)。
Python中的等价函数是scipy.stast.rayleigh/rice.fit。问题是,例如,Python中的Rayleigh函数是标准化版本,它返回位置和比例参数,而Matlab mle只返回比例参数。与Rice的情况类似,Python版本返回3个参数,而Matlab只有两个参数(根据Rice分布的定义)。
我知道对于正态分布,位置=均值,尺度=方差,所以我预计对于Rayleigh,Mtalb中的尺度与Python中的尺度相同,但似乎它们的使用方式不同。当我在代码中使用参数时,问题显然会传播,因为我没有1to1匹配,
有没有一种方法可以在Python中实现与Matlab相同的“行为”?
很抱歉这个愚蠢的问题,但Scipy的文档,在我看来,不是很完整。
谢谢你

wxclj1h5

wxclj1h51#

根据Matlab文档:


的数据
对比SciPy文档:



然而,在SciPy中,所有概率分布都有locscale参数:



因此,要在SciPy中获得与Matlab中相同的行为,请设置loc = 0scale = b
例如:

在SciPy中:

from scipy import stats
x = 1
b = 0.5
dist = stats.rayleigh(loc=0, scale=b)
dist.pdf(x)  # 0.5413411329464508

字符串
Rice的情况类似。在Matlab中:



SciPy:



因此,为了让SciPy与Matlab一致,设置loc=0scale=sigmab = s/sigma


x = 1
s = 1.5
sigma = 2
dist = stats.rice(b=s/sigma, loc=0, scale=sigma)
dist.pdf(x)  # 0.1724423399627125

相关问题