fitdist
для бета-распределения получает параметры распределения от betafit
, который устанавливает соответствующую функцию правдоподобия для распределения с учетом ваших данных, некоторые эвристические начальные предположения для a
и b
, а затем оптимизирует log(a)
и log(b)
, чтобы максимизировать вероятность, используя fminsearch
.
Ваше ограничение, определяющее среднее значение распределения, устанавливает принудительную связь между a
и b
. Из Википедии среднее mu
относится к a
и b
, таким образом:
mu = 1 / (1 + b/a)
Это можно изменить, чтобы получить один параметр распределения, а другой:
b = a * (1/mu - 1)
Чтобы изучить неограниченную реализацию подгонки бета-распределения, которая доступна в MATLAB и которую вы хотите ограничить, вы можете просмотреть исходный код betafit
, используя:
edit betafit
По крайней мере в MATLAB R2018b вы обнаружите, что оптимизация log(a)
и log(b)
происходит в точке, которая объявляет:
phat = fminsearch(negloglike,pstart,opts);
phat = exp(phat);
Ваша проблема подбора ограниченного распределения может быть описана в терминах используемой здесь оптимизированной целевой функции, которая может позволить вам повторно использовать другие аспекты поведения betafit
:
negloglike1 = @(loga) negloglike([loga log(exp(loga) * (1/mu - 1))]);
Вы можете либо создать свой собственный дубликат betafit
, который делает это объявление до вызова fminsearch
, либо остановить встроенную betafit
на точке останова после вызова линии и объявить новую функцию правдоподобия из командной строки. В любом случае, вы можете затем заменить параметры ограниченными параметрами, которые максимизируют вероятность в этом ограничении:
loga = fminsearch(negloglike1,pstart(1),opts);
phat = exp(loga) * [1 (1/mu - 1)];
Полученные параметры бета-распределения phat
гарантированно приведут к распределению со средним значением mu
и локально максимизируют функцию правдоподобия для ваших данных с учетом этого ограничения.