Tính toán các tham số của phân phối Beta bằng giá trị trung bình và phương sai


66

Làm thế nào tôi có thể tính toán β thông số cho một phân phối Beta nếu tôi biết giá trị trung bình và phương sai mà tôi muốn phân phối để có? Ví dụ về lệnh R để làm điều này sẽ hữu ích nhất.αβ


4
Lưu ý rằng betareg gói vào R sử dụng một tham số hóa thay thế (với giá trị trung bình, , và độ chính xác, φ = α + β --và do đó phương sai là μ ( 1 - μ ) / ( 1 + ϕ ) ) làm giảm nhu cầu cho các tính toán này. μ=α/α+βϕ=α+βμ(1μ)/(1+ϕ)
gung - Phục hồi Monica

Câu trả lời:


90

Tôi đặt σ2=αβ

μ=αα+β
và giải quyết choαβ. Kết quả của tôi cho thấy rằngα=(1-μ
σ2=αβ(α+β)2(α+β+1)
αββ=α(1
α=(1μσ21μ)μ2
β=α(1μ1)

Tôi đã viết một số mã R để ước tính các tham số của phân phối Beta từ giá trị trung bình, mu và phương sai đã cho, 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

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

2
@stan Điều này sẽ cung cấp cho bạn bản phân phối Beta có cùng giá trị và phương sai với dữ liệu của bạn. Nó sẽ không cho bạn biết mức độ phân phối phù hợp với dữ liệu. Hãy thử Kiểm tra Kolmogorov-Smirnov .
giả định

4
Khi tôi gọi chức năng này với estBetaParams(0.06657, 0.1)tôi nhận được alpha=-0.025, beta=-0.35. Sao có thể như thế được?
Amelio Vazquez-Reina

1
Các tính toán này sẽ chỉ hoạt động nếu phương sai nhỏ hơn giá trị trung bình * (1 trung bình).
danno

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

1
@ AmelioVazquez-Reina Nếu bạn cung cấp dữ liệu gốc của mình, tôi hy vọng nó sẽ nhanh chóng rõ ràng tại sao phân phối beta không phù hợp.
Glen_b

21

Đây là một cách chung để giải quyết các loại vấn đề này, sử dụng Maple thay vì R. Cách này cũng hiệu quả với các bản phân phối khác:

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

dẫn đến giải pháp

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

Điều này tương đương với giải pháp của Max.


5

shape1=ashape2=b

f(x)=Γ(a+b)Γ(a)Γ(b)xa1(1x)b1

a>0b>00<x<1

Trong R, bạn có thể tính toán nó bằng

dbeta (x, shape1 = a, shape2 = b)

E(X)=aa+bV(X)=ab(a+b)2(a+b+1)

Làm tốt lắm!

Biên tập

Tôi tìm thấy:

a=(1μV1μ)μ2

b=(1μV1μ)μ(1μ)

μ=E(X)V=V(X)


Tôi nhận ra câu trả lời của tôi rất giống với những người khác. Tuy nhiên, tôi tin rằng luôn luôn là một điểm tốt để kiểm tra đầu tiên R sử dụng tham số nào ....
ocram

2

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

1
Wikipedia có một phần về ước tính tham số cho phép bạn tránh quá nhiều công việc :)
rm999

1

[a,b]

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

có thể được đảo ngược để cung cấp:

α=λμaba,β=λbμba

Ở đâu

λ=(μa)(bμ)σ21

Một người dùng đã cố gắng để lại nhận xét sau: "có lỗi ở đây. Công thức hiện tại không trả về phương sai chính xác."
Cá bạc

1

μαββ

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


0

Tôi đang tìm con trăn, nhưng vấp phải điều này. Vì vậy, điều này sẽ hữu ích cho những người khác như tôi.

Dưới đây là mã python để ước tính các tham số beta (theo các phương trình đã cho ở trên):

# 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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.