[0,1] 'de verilen bir derecelendirme seti için bir beta dağılımı düşünün. Ortalamayı hesapladıktan sonra:
Bu ortalama etrafında güven aralığı sağlamanın bir yolu var mı?
[0,1] 'de verilen bir derecelendirme seti için bir beta dağılımı düşünün. Ortalamayı hesapladıktan sonra:
Bu ortalama etrafında güven aralığı sağlamanın bir yolu var mı?
Yanıtlar:
Bir beta dağılımındaki parametreler için güven aralıklarını hesaplamak için belirli yöntemler olsa da, beta dağıtımı da dahil olmak üzere her türlü dağıtım için (neredeyse) kullanılabilen ve R'de kolayca uygulanabilen birkaç genel yöntemi açıklayacağım. .
Karşılık gelen profil olabilirlik güven aralıklarıyla maksimum olabilirlik tahmini ile başlayalım. İlk önce bazı örnek verilere ihtiyacımız var:
# 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))
Gerçek / teorik ortalama
> alpha/(alpha+beta)
0.877193
Şimdi beta dağılımından bir örnek için negatif log olabilirlik fonksiyonunu hesaplamak için, parametrelerden biri olarak ortalama bir fonksiyon yaratmalıyız. Bu dbeta()
işlevi kullanabiliriz , ancak bu, ortalamayı içeren bir parametreleme kullanmadığından, parametrelerini ( α ve β ) ortalamanın ve diğer bazı parametrelerin (standart sapma gibi) bir işlevi olarak ifade etmeliyiz :
# 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))
}
Maksimum olabilirlik tahminini bulmak mle()
için stats4
kütüphanedeki işlevi kullanabiliriz :
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Şimdilik uyarıları dikkate almayın. Bunlara parametreler için geçersiz değerler deneyen ve α ve / veya β için negatif değerler veren optimizasyon algoritmaları neden olur . (Uyarıyı önlemek için bir lower
argüman ekleyebilir ve method
kullanılan optimizasyonu değiştirebilirsiniz .)
Şimdi iki parametremiz için hem tahminler hem de güven aralıklarımız var:
> 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
Beklendiği gibi, güven aralıklarının simetrik olmadığını unutmayın :
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(İkinci dış macenta çizgileri% 95 güven aralığını gösterir.)
Ayrıca, sadece 10 gözlemle bile, çok iyi tahminler aldığımızı unutmayın (dar bir güven aralığı).
Alternatif olarak mle()
, fitdistr()
işlevi MASS
paketten kullanabilirsiniz. Bu da maksimum olabilirlik tahmin edicisini hesaplar ve negatif günlük olasılığını değil, yalnızca yoğunluğu sağlamanız gereken avantaja sahiptir, ancak profil olabilirlik güven aralıkları vermez, yalnızca asimptotik (simetrik) güven aralıkları verir.
Paketten daha iyi bir seçenek mle2()
(ve ilgili işlevler) bbmle
, bu da biraz daha esnek ve güçlü mle()
ve biraz daha güzel grafikler veriyor.
Başka bir seçenek de bootstrap kullanmaktır. R'de kullanımı son derece kolaydır ve yoğunluk fonksiyonu bile sağlamanız gerekmez:
> 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'in, verileriniz bir beta dağıtımından gelmese bile çalışmasının ek avantajı vardır.
Ortalama güven aralıkları için, merkezi limit teoremine (ve t- dağılımına) dayanan eski iyi asimptotik güven aralıklarını unutmayalım . (MLT uygular ve örnek ortalaması dağılımının yaklaşık olarak normal yani) ya da her ikisinin büyük değerleri sürece Elimizdeki olarak ya büyük numune boyutu a ve p (böylece beta dağılımı kendisi yaklaşık olarak normal olduğu), iyi çalışır. Burada ikimiz de yok, ama güven aralığı hala çok kötü değil:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
N'nin biraz büyük değerleri için (ve iki parametrenin çok aşırı değerleri değil), asimptotik güven aralığı son derece iyi çalışır.
Beta regresyonuna göz atın. R kullanarak nasıl yapılacağı hakkında iyi bir giriş burada bulunabilir:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Güven aralığı oluşturmanın bir başka (gerçekten kolay) yolu parametrik olmayan bir boostrap yaklaşımı kullanmaktır. Wikipedia iyi bir bilgiye sahiptir:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
Ayrıca burada güzel video: