Расчет параметров бета-распределения с использованием среднего и дисперсии


66

Как я могу рассчитать параметры и для бета-распределения, если я знаю среднее значение и дисперсию, которые я хочу иметь в распределении? Примеры команды R для этого были бы наиболее полезны.βαβ


4
Обратите внимание, что пакет betareg в R использует альтернативную параметризацию (со средним значением и точностью - и, следовательно, дисперсия ), что устраняет необходимость в этих вычислениях. ϕ = α + β μ ( 1 - μ ) / ( 1 + ϕ )μ=α/α+βϕ=α+βμ(1−μ)/(1+ϕ)
— gung - Восстановить Монику

Ответы:


90

Я устанавливаю и и решено для и . Мои результаты показывают, что и σ2=αβ

μ=αα+β
α
σ2=αβ(α+β)2(α+β+1)
αα = ( 1 - μββ=α(1
α=(1−μσ2−1μ)μ2
β=α(1μ−1)

Я написал некоторый R-код для оценки параметров распределения Beta по заданному среднему значению mu и дисперсии var:

estBetaParams <- function(mu, var) {
  alpha <- ((1 - mu) / var - 1 / mu) * mu ^ 2
  beta <- alpha * (1 / mu - 1)
  return(params = list(alpha = alpha, beta = beta))
}

Там было некоторое замешательство вокруг границ и для любого данного бета-дистрибутива, поэтому давайте проясним это здесь.σ 2μσ2

  1. μ=αα+β∈(0,1)
  2. σ2=αβ(α+β)2(α+β+1)=μ(1−μ)α+β+1<μ(1−μ)1=μ(1−μ)∈(0,0.52)

2
@stan Это даст вам бета-дистрибутив, который имеет то же среднее значение и дисперсию, что и ваши данные. Это не скажет вам, насколько хорошо распределение соответствует данным. Попробуйте тест Колмогорова-Смирнова .
— принято нормальным

4
Когда я вызываю эту функцию estBetaParams(0.06657, 0.1)я alpha=-0.025, beta=-0.35. Как это возможно?
— Амелио Васкес-Рейна

1
Эти вычисления будут работать только в том случае, если дисперсия меньше среднего * (1-среднее значение).
— знаю,

2
@danno - всегда . Чтобы увидеть это, перепишите дисперсию как . Так как , . σ2≤μ(1−μ)σ2=μ(1−μ)α+β+1α+β+1≥1σ2≤μ(1−μ)
— предполагается нормальное

1
@ AmelioVazquez-Reina Если вы дадите свои исходные данные, я думаю, скоро станет понятно, почему бета-версия не подходит.
— Glen_b

21

Вот общий способ решения этих типов проблем, используя Maple вместо R. Это работает и для других дистрибутивов:

with(Statistics):
eq1 := mu = Mean(BetaDistribution(alpha, beta)):
eq2 := sigma^2 = Variance(BetaDistribution(alpha, beta)):
solve([eq1, eq2], [alpha, beta]);

что приводит к решению

α=−μ(σ2+μ2−μ)σ2β=(σ2+μ2−μ)(μ−1)σ2.

Это эквивалентно решению Макса.


5

В R бета-распределение с параметрами и имеет плотностьshape1=ashape2=b

f(x)=Γ(a+b)Γ(a)Γ(b)xa−1(1−x)b−1 ,

для , и .a>0b>00<x<1

В R вы можете вычислить это

дбета (x, shape1 = a, shape2 = b)

В этой параметризации среднее значение а дисперсия . Итак, теперь вы можете следить за ответом Ника Сабби.E(X)=aa+bV(X)=ab(a+b)2(a+b+1)

Хорошая работа!

редактировать

Я нахожу:

a=(1−μV−1μ)μ2 ,

а также

b=(1−μV−1μ)μ(1−μ) ,

где и .V = V ( X )μ=E(X)V=V(X)


Я понимаю, что мой ответ очень похож на другие. Тем не менее, я считаю, что всегда полезно сначала проверить, что использует параметризация R ....
— ocram

2

Например, в Википедии вы можете найти следующие формулы для среднего значения и дисперсии бета-распределения с учетом альфа и бета: и Обращение этих (заполните в нижнем уравнении) должно дать вам результат, который вы хотите (хотя это может занять некоторую работу).

μ=αα+β
σ2=αβ(α+β)2(α+β+1)
β=α(1μ−1)

1
В Википедии есть раздел по оценке параметров, который позволяет вам избегать слишком большой работы :)
— rm999

1

Для обобщенного бета-распределения, определенного на интервале , у вас есть отношения:[a,b]

μ=aβ+bαα+β,σ2=αβ(b−a)2(α+β)2(1+α+β)

который можно перевернуть, чтобы получить:

α=λμ−ab−a,β=λb−μb−a

где

λ=(μ−a)(b−μ)σ2−1

Пользователь попытался оставить следующий комментарий: «где-то здесь есть ошибка. Текущая формулировка не возвращает правильную дисперсию».
— Серебряная рыба

1

Решите уравнение для или , решив для , вы получите Затем вставьте это во второе уравнение и решите для . Таким образом, вы получаете что упрощает до Тогда закончите решение для .μαββ

β=α(1−μ)μ
α
σ2=α2(1−μ)μ(α+α(1−μ)μ)2(α+α(1−μ)μ+1)
σ2=α2(1−μ)μ(αμ)2α+μμ
σ2=(1−μ)μ2α+μ
α


0

Я искал питона, но наткнулся на это. Так что это было бы полезно для таких, как я.

Вот код Python для оценки бета-параметров (согласно приведенным выше уравнениям):

# estimate parameters of beta dist.
def getAlphaBeta(mu, sigma):
    alpha = mu**2 * ((1 - mu) / sigma**2 - 1 / mu)

    beta = alpha * (1 / mu - 1)

    return {"alpha": 0.5, "beta": 0.1}


print(getAlphaBeta(0.5, 0.1)  # {alpha: 12, beta: 12}

Вы можете проверить параметры и , импортировав пакет.αβscipy.stats.beta

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.