OP'ın örnek tam olarak simetrik değildi bile Simetrik dağılım
, yeterince yakın.
integrate
ve optimize
'un bir kombinasyonunu kullanabilirsiniz. Bunu özel bir işlev olarak yazdım, ancak bunu başka durumlarda kullanırsanız, quantile'ı aramak için sınırları yeniden düşünmeniz gerekebilir.
# For a distribution with a single peak, find the symmetric!
# interval that contains probs probability. Search over 'range'.
f_quan <- function(fun, probs, range=c(0,1)){
mode <- optimize(fun, interval = range, maximum = TRUE, tol = 1e-12)[[1]]
total_area <- integrate(fun, range[1], range[2])[[1]]
O <- function(d){
parea <- integrate(fun, mode-d, mode+d)[[1]]/total_area
(probs - parea)^2
}
# Bounds for searching may need some adjustment depending on the problem!
o <- optimize(O, c(0,range[2]/2 - 1E-02))[[1]]
return(c(mode-o, mode+o))
}
böyle kullanın
,
f <- f_quan(posterior, 0.95)
curve(posterior, n = 1e4)
abline(v=f, col="blue", lwd=2, lty=3)
asimetrik dağılım durumunda
Asimetrik dağılımını
verir, biz iki puan aramak zorunda P (a) < x < b) = Prob, Prob istenen bir olasılıktır. Sonunda çok fazla aralık olduğu için (a, b), OP en kısa olanı bulmayı önerdi.
Çözümde önemli olan, domain
tanımının bulunduğu bölgedir, (-Inf, Inf
'u kullanamıyoruz, böylece kullanıcı bunu makul değerlere ayarlamak zorundayız). Yukarıdaki kodu yukarıdaki gibi kullanın. Çok asimetrik bir fonksiyon kullanıyorum (sadece mydist'in aslında karmaşık bir pdf olduğunu, dgamma'yı değil).
mydist <- function(x)dgamma(x, shape=2)
curve(mydist(x), from=0, to=10)
abline(v=prob_int_shortest(mydist, 0.9, c(0,10)), lty=3, col="blue", lwd=2)
Bu örnekte, aralığın açıkça bir yerde olması gerektiğinden, etki alanını (0,10) olarak ayarlıyorum. (0, 1E05) gibi çok büyük bir değerin kullanılmadığını unutmayın, çünkü integrate
, sıfıra yakın uzun dizilerde sorun yaşar. Yine, durumunuz için, alanı düzeltmeniz gerekecek (birisi daha iyi bir fikri olmadığı sürece!).
Sınırlar şu şekildedir: tüm etki alanı boyunca (durumunuzda 0-1) arama yaparsanız, işlev 0 veya 1'de tanımlanmadığından (ancak yakındadır) sorunla karşılaşırız. D işlevinde, moddan uzaklıktır; bu, (mod-d) ila (mod + d) arasındaki integralin istenen olasılıkla (durumunuzdaki 0,95) eşit olduğu d'yi bulmak için değiştirilir. Bu nedenle, bu sadece simetrik işlevler için çalışır, aksi halde iki parametreyi optimize etmeniz gerekir. –
Bence bu asimetrik ise, bu soruna tek bir çözüm olmayacak! Bir olasılıkla bütünleşen bir pdf için birçok aralık bulabilirsiniz. Veya, aslında% 2.5 ve% 97.'lik miktarları (bunlar arasında% 95'e entegre olacak) mi arıyorsunuz? Eğer öyleyse, bu yapılabilir. –
Bu yapılabilir - ama sorduğunuz orijinal sorudan oldukça farklıdır! Mesajımı düzenlemekte tereddüt ediyorum çünkü bu kendi başına faydalı. Başka bir cevap ekleyebilirim. –