Xem xét phân phối beta cho một bộ xếp hạng nhất định trong [0,1]. Sau khi đã tính giá trị trung bình:
Có cách nào để cung cấp một khoảng tin cậy xung quanh ý nghĩa này không?
Xem xét phân phối beta cho một bộ xếp hạng nhất định trong [0,1]. Sau khi đã tính giá trị trung bình:
Có cách nào để cung cấp một khoảng tin cậy xung quanh ý nghĩa này không?
Câu trả lời:
Mặc dù có các phương pháp cụ thể để tính khoảng tin cậy cho các tham số trong phân phối beta, tôi sẽ mô tả một vài phương pháp chung, có thể được sử dụng cho (hầu hết) tất cả các loại phân phối , bao gồm phân phối beta và được thực hiện dễ dàng trong R .
Hãy bắt đầu với ước tính khả năng tối đa với khoảng tin cậy khả năng hồ sơ tương ứng. Đầu tiên chúng ta cần một số dữ liệu mẫu:
# Sample size
n = 10
# Parameters of the beta distribution
alpha = 10
beta = 1.4
# Simulate some data
set.seed(1)
x = rbeta(n, alpha, beta)
# Note that the distribution is not symmetrical
curve(dbeta(x,alpha,beta))
Ý nghĩa thực tế / lý thuyết là
> alpha/(alpha+beta)
0.877193
Bây giờ chúng ta phải tạo một hàm để tính hàm khả năng nhật ký âm cho một mẫu từ phân phối beta, với giá trị trung bình là một trong các tham số. Chúng ta có thể sử dụng các dbeta()
chức năng, nhưng vì đây không sử dụng một parametrisation liên quan đến giá trị trung bình, chúng tôi đã phải thể hiện các thông số của nó ( α và β ) là một hàm của giá trị trung bình và một số thông số khác (như độ lệch chuẩn):
# Negative log likelihood for the beta distribution
nloglikbeta = function(mu, sig) {
alpha = mu^2*(1-mu)/sig^2-mu
beta = alpha*(1/mu-1)
-sum(dbeta(x, alpha, beta, log=TRUE))
}
Để tìm ước tính khả năng tối đa, chúng ta có thể sử dụng mle()
hàm trong stats4
thư viện:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Chỉ cần bỏ qua các cảnh báo cho bây giờ. Họ đang gây ra bởi các thuật toán tối ưu hóa giá trị cố gắng không hợp lệ cho các thông số, cho giá trị âm cho α và / hoặc β . (Để tránh cảnh báo, bạn có thể thêm một lower
đối số và thay đổi tối ưu hóa method
được sử dụng.)
Bây giờ chúng tôi có cả ước tính và khoảng tin cậy cho hai tham số của chúng tôi:
> est
Call:
mle(minuslogl = nloglikbeta, start = list(mu = mean(x), sig = sd(x)))
Coefficients:
mu sig
0.87304148 0.07129112
> confint(est)
Profiling...
2.5 % 97.5 %
mu 0.81336555 0.9120350
sig 0.04679421 0.1276783
Lưu ý rằng, như mong đợi, khoảng tin cậy không đối xứng:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(Các đường màu đỏ tươi bên ngoài thứ hai cho thấy khoảng tin cậy 95%.)
Cũng lưu ý rằng thậm chí chỉ với 10 quan sát, chúng tôi có được ước tính rất tốt (khoảng tin cậy hẹp).
Thay thế cho mle()
, bạn có thể sử dụng fitdistr()
chức năng từ MASS
gói. Điều này cũng tính toán công cụ ước tính khả năng tối đa và có lợi thế là bạn chỉ cần cung cấp mật độ, không phải khả năng ghi nhật ký âm, nhưng không cung cấp cho bạn khoảng tin cậy khả năng hồ sơ, chỉ có khoảng tin cậy không đối xứng (đối xứng).
Một lựa chọn tốt hơn là mle2()
(và các chức năng liên quan) từ bbmle
gói, phần nào linh hoạt và mạnh mẽ hơn mle()
, và đưa ra các lô đẹp hơn một chút.
Một lựa chọn khác là sử dụng bootstrap. Nó rất dễ sử dụng trong R và thậm chí bạn không phải cung cấp hàm mật độ:
> library(simpleboot)
> x.boot = one.boot(x, mean, R=10^4)
> hist(x.boot) # Looks good
> boot.ci(x.boot, type="bca") # Confidence interval
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 10000 bootstrap replicates
CALL :
boot.ci(boot.out = x.boot, type = "bca")
Intervals :
Level BCa
95% ( 0.8246, 0.9132 )
Calculations and Intervals on Original Scale
Bootstrap có thêm lợi thế là nó hoạt động ngay cả khi dữ liệu của bạn không đến từ bản phân phối beta.
Đối với các khoảng tin cậy trên trung bình, chúng ta đừng quên các khoảng tin cậy tiệm cận cũ tốt dựa trên định lý giới hạn trung tâm (và phân phối t ). Chừng nào chúng ta có hoặc là một kích thước mẫu lớn (vì vậy CLT áp dụng và sự phân bố của giá trị trung bình mẫu là xấp xỉ bình thường) hoặc giá trị lớn của cả α và β (để phân phối phiên bản beta chính nó là xấp xỉ bình thường), nó hoạt động tốt. Ở đây chúng tôi không có, nhưng khoảng tin cậy vẫn không quá tệ:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Đối với các giá trị n chỉ hơi lớn (và không quá cực trị của hai tham số), khoảng tin cậy tiệm cận hoạt động cực kỳ tốt.
Kiểm tra hồi quy Beta. Một giới thiệu tốt về cách làm điều đó bằng R có thể được tìm thấy ở đây:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Một cách khác (thực sự dễ dàng) để xây dựng khoảng tin cậy sẽ là sử dụng phương pháp boostrap không tham số. Wikipedia có thông tin tốt:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistic%29
Cũng video hay ở đây: