Я хотел бы найти Оценщик максимального правдоподобия для некоторых данных, которые могут определяться дискретным распределением. Но в scipy.stats только классы, представляющие непрерывные распределения, имеют соответствующую функцию. В чем причина того, что классы, представляющие дискретные распределения, нет?
В scipy.stats rv_continuous имеет подходящий метод для поиска MLE, но rv_discrete этого не делает. Зачем?
Ответ 1
Короткий ответ: потому что никто не написал код для него или даже не пытался, насколько я знаю.
Более длинный ответ: я не знаю, как далеко мы можем добраться с дискретными моделями с помощью общего метода максимального правдоподобия, поскольку ther - для непрерывных распределений, который работает для многих, но не для всех.
Большинство дискретных распределений имеют сильные ограничения на параметры, и, скорее всего, большинство из них будут нуждаться в подходящих методах, специфичных для распределения
>>> [(f, getattr(stats, f).shapes) for f in dir(stats) if isinstance(getattr(stats, f), stats.distributions.rv_discrete)]
[('bernoulli', 'pr'), ('binom', 'n, pr'), ('boltzmann', 'lamda, N'),
('dlaplace', 'a'), ('geom', 'pr'), ('hypergeom', 'M, n, N'),
('logser', 'pr'), ('nbinom', 'n, pr'), ('planck', 'lamda'),
('poisson', 'mu'), ('randint', 'min, max'), ('skellam', 'mu1,mu2'),
('zipf', 'a')]
statsmodels предоставляет несколько дискретных моделей, где параметры также могут зависеть от некоторых объясняющих переменных. Большинство из них, например, обобщенные линейные модели, нуждаются в функции ссылок, чтобы ограничить значения параметров допустимым диапазоном, например интервалом (0, 1) для вероятностей, или больше нуля для параметров в моделях подсчета.
Затем параметр "n" в биномиальном и некоторых других должен быть целым числом, что делает невозможным использование обычных непрерывных минимизаторов из scipy.optimize.
Хорошим решением было бы для кого-то добавить специальные методы соответствия дистрибутивам, чтобы у нас были, по крайней мере, более легкие.