Я пытаюсь найти оценку максимального правдоподобия мю и сигмы из нормального распределения, используя функцию минимизации scipy. Однако при минимизации возвращается ожидаемое значение среднего значения, но оценка сигмы далека от реальной сигмы.
Я определяю функцию llnorm, которая возвращает отрицательное логарифмическое правдоподобие нормального распределения, затем создаю случайную выборку из нормального распределения со средним значением 150 и стандартным отклонением 10, затем с помощью оптимизации пытаюсь найти MLE.
import numpy as np
import math
import scipy.optimize as optimize
def llnorm(par, data):
n = len(data)
mu, sigma = par
ll = -np.sum(-n/2 * math.log(2*math.pi*(sigma**2)) - ((data-mu)**2)/(2 * (sigma**2)))
return ll
data = 10 * np.random.randn(100) + 150
result = optimize.minimize(llnorm, [150,10], args = (data))
Несмотря на то, что среднее значение данных близко к 150 и стандартное значение близко к 10, оптимизация возвращает намного меньшее значение оценочной сигмы (близко к 0).