0

我试图用正常的分布来近似一些硬分布。但scipy.stats.norm.fit给出了一些尴尬的结果。近似结果与原始结果相差甚远。然后我尝试手动设置参数,它看起来好多了。但是,对数似然状态则metod更好。为什么?一切正常吗?还有其他方法来估计分布参数吗?

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
domain = np.linspace(0,1,100)
import math


def f(x):
    return 100 / 0.5 * 0.5 ** 50 / (math.factorial(49)) * (100 *x / 0.5) ** 49 * np.exp(-(100 * x / 0.5 ) / 2)

data = [f(x) for x in domain]
plt.plot(domain, data, label = 'orig')

params = norm.fit(data)
plt.plot(domain, norm.pdf(domain, *params), label = 'approx_fit')
plt.plot(domain, norm.pdf(domain, 0.495, 0.07), label = 'approx_manual')

plt.legend()
plt.show()
print(f'LLH by fitting with scipy.stats.norm.fit : {norm.logpdf(data, *params).sum()}')
new_params = (0.495, 0.07)
print(f'LLH by manually founded parameters : {norm.logpdf(data, *new_params).sum()}')

在此处输入图像描述

4

0 回答 0