MATLAB | Расчет параметров гамма-распределения на основе среднего и вероятностного интервала - PullRequest
3 голосов
/ 11 сентября 2010

У меня есть система из 2 уравнений с 2 ​​неизвестными, которую я хочу решить с помощью MATLAB, но не знаю точно, как программировать.Мне дали некоторую информацию о гамма-распределении (среднее значение 1,86, 90% интервал между 1,61 и 2,11) и в конечном итоге я хочу получить среднее значение и дисперсию.Я знаю, что мог бы использовать нормальное приближение, но я бы лучше определил для A и B параметры формы и масштаба гамма-распределения и таким образом нашел бы среднее значение и дисперсию.В псевдо-MATLAB-коде я хотел бы решить это:

gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90;
A*B = 1.86;

Как бы вы решили это?У меня есть набор математических инструментов, если это поможет.

1 Ответ

5 голосов
/ 11 сентября 2010

Среднее значение A * B.Так что вы можете решить для, возможно, A с точки зрения среднего (мю) и B?

A = mu/B

Конечно, это не хорошо, если вы не знали B. Или это?

Посмотритена ваше первое выражение.Вы можете заменить?

gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90

Это приближает вас?Может быть.Не будет доступного полезного символического решения, кроме как с точки зрения самой неполной гамма-функции.Как вы решаете одно численное уравнение в одном неизвестном в Matlab?Используйте fzero.

Конечно, fzero ищет нулевое значение.Но с помощью вычитания 0,90 это разрешается.

Можем ли мы определить функцию, которую может использовать fzero?Используйте дескриптор функции.

>> mu = 1.86;
>> gamfun = @(B) gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) - 0.90;

Так что попробуйте.Прежде чем мы это сделаем, я всегда рекомендую строить сюжеты.

>> ezplot(gamfun)

Хмм.Этот график предполагает, что может быть трудно найти ноль вашей функции.Если вы попробуете это, вы обнаружите, что здесь необходимы хорошие начальные значения для fzero.

Извините за мою первую попытку.Лучшие начальные значения для fzero, плюс еще несколько графиков дают гамма-распределение, которое дает желаемую форму.

>> B = fzero(gamfun,[.0000001,.1])
B =
        0.0124760672290871
>> A = mu/B
A =
          149.085442218805
>> ezplot(@(x) gampdf(x,A,B))

На самом деле это очень «нормальная», то есть гауссовская кривая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...