Có một số cách để tính khoảng tin cậy cho giá trị trung bình của phân phối logic. Tôi sẽ trình bày hai phương pháp: Khả năng Bootstrap và Hồ sơ. Tôi cũng sẽ trình bày một cuộc thảo luận về Jeffreys trước.
Bootstrap
Dành cho MLE
Trong trường hợp này, MLE của cho một mẫu là(μ,σ)(x1,...,xn)
μ^= 1nΣj = 1nđăng nhập( xj) ;σ^2= 1nΣj = 1n( nhật ký( xj) - μ^)2.
Sau đó, MLE của giá trị trung bình là . Bằng cách lấy mẫu lại, chúng ta có thể lấy được mẫu bootstrap của và, bằng cách này, chúng ta có thể tính toán một số khoảng tin cậy của bootstrap . Các mã sau đây cho thấy làm thế nào để có được những.δ^= điểm kinh nghiệm( μ^+ σ^2/ 2) δδ^R
rm(list=ls())
library(boot)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Statistic (MLE)
mle = function(dat){
m = mean(log(dat))
s = mean((log(dat)-m)^2)
return(exp(m+s/2))
}
# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){mle(d[ind])}, R = 10000)
plot(density(boots.out$t))
# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")
Đối với trung bình mẫu
Bây giờ, hãy xem xét công cụ ước tính thay vì MLE. Loại dự toán khác có thể được coi là tốt.δ~= x¯
rm(list=ls())
library(boot)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Statistic (MLE)
samp.mean = function(dat) return(mean(dat))
# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){samp.mean(d[ind])}, R = 10000)
plot(density(boots.out$t))
# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")
Hồ sơ khả năng
Để biết định nghĩa về khả năng và chức năng khả năng hồ sơ, xem . Sử dụng thuộc tính bất biến của khả năng chúng ta có thể xác định lại tham số như sau , trong đó và sau đó tính toán số khả năng hồ sơ của .( Μ , σ) → ( δ, σ)δ= điểm kinh nghiệm( Μ + σ2/ 2)δ
Rp( δ) = supσL (δ, σ)bữa tốiδ, σL (δ, σ).
Hàm này lấy các giá trị trong ; một khoảng mức có độ tin cậy xấp xỉ . Chúng tôi sẽ sử dụng thuộc tính này để xây dựng khoảng tin cậy cho . Các mã sau đây cho biết cách lấy khoảng này .( 0 , 1 ]0.147 95 %δR
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Log likelihood
ll = function(mu,sigma) return( sum(log(dlnorm(data0,mu,sigma))))
# Profile likelihood
Rp = function(delta){
temp = function(sigma) return( sum(log(dlnorm(data0,log(delta)-0.5*sigma^2,sigma)) ))
max=exp(optimize(temp,c(0.25,1.5),maximum=TRUE)$objective -ll(mean(log(data0)),sqrt(mean((log(data0)-mean(log(data0)))^2))))
return(max)
}
vec = seq(1.2,2.5,0.001)
rvec = lapply(vec,Rp)
plot(vec,rvec,type="l")
# Profile confidence intervals
tr = function(delta) return(Rp(delta)-0.147)
c(uniroot(tr,c(1.2,1.6))$root,uniroot(tr,c(2,2.3))$root)
⋆ Bayes
Trong phần này, một thuật toán thay thế, dựa trên việc lấy mẫu của Metropolis-Hastings và việc sử dụng Jeffreys trước đó, để tính toán khoảng tin cậy cho được trình bày.δ
Hãy nhớ lại rằng Jeffreys trước cho trong một mô hình logic( Μ , σ)
π( Μ , σ) Alpha σ- 2,
và rằng điều này trước là bất biến dưới các tham số lại. Điều này trước là không đúng, nhưng sau của các tham số là phù hợp nếu cỡ mẫu . Đoạn mã sau cho thấy cách đạt được khoảng tin cậy 95% bằng mô hình Bayes này.n ≥ 2R
library(mcmc)
set.seed(1)
# Simulated data
data0 = exp(rnorm(100))
# Log posterior
lp = function(par){
if(par[2]>0) return( sum(log(dlnorm(data0,par[1],par[2]))) - 2*log(par[2]))
else return(-Inf)
}
# Metropolis-Hastings
NMH = 260000
out = metrop(lp, scale = 0.175, initial = c(0.1,0.8), nbatch = NMH)
#Acceptance rate
out$acc
deltap = exp( out$batch[,1][seq(10000,NMH,25)] + 0.5*(out$batch[,2][seq(10000,NMH,25)])^2 )
plot(density(deltap))
# 95% credibility interval
c(quantile(deltap,0.025),quantile(deltap,0.975))
Lưu ý rằng chúng rất giống nhau.