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
и локально максимизируют функцию правдоподобия для ваших данных с учетом этого ограничения.
person
Will
schedule
07.05.2019