Python 在数据上拟合 K 分布(由我定义)



我有一个数据样本分布,我想与scipy.stats中的一些非Python嵌入式统计数据相适应,例如K pdf。那么有可能这样做吗?是否有其他模块具有 k 分布或其他非高斯 pdf 可用?

感谢您的帮助!

为了跟进@Robert Dodier 的评论,阅读 http://arxiv.org/pdf/1207.6002.pdf,你会发现最大似然估计的配方,我在这里改编:

import scipy
import scipy.stats as sciStat
import scipy.optimize as sciOpt
def myMleEstimate(myFunc, par, data):
    def lnL_av(x, par):
        N = len(x)
        lnL = 0.
        for i in range(N):
            lnL += scipy.log(myFunc(par, x[i]))
        return lnL/N
    objFunc = lambda s: -lnL_av(data, s)
    par_mle = sciOpt.fmin(objFunc, par, disp=0)
    return par_mle

如果你想为瑞利建模,你需要:

from scipy.stats import rayleigh
Rayleigh = lambda par, x: sciStat.rayleigh.pdf(x, loc=par[0], scale=par[1])

并根据您的数据进行估算:

estimated = myMleEstimate(Rayleigh, [0, 1], data)

(这里我选择了 0, 1 个起始参数)。

要测试最后一行,您可以首先使用以下方法对一千个数据点进行采样:

# parameters
params = {
    'loc': 1,
    'scale': 2
}
data = rayleigh.rvs(loc=params['loc'], scale=params['scale'], size=1000)

是的,我知道 K 发行版是两个伽马的化合物,而不是瑞利。但是诸如估计强度域中K分布的参数之类的来源指出,ML估计非常困难。

所以你得到了你所要求的,一个Python配方,但这可能不是你需要的。

最新更新