16 denemede 9 başarı olasılığını elde etmek isteseydim, her deneme için 0.6'lık bir olasılık varsa binom dağılımını kullanabilirdim. 16 denemenin her birinin farklı bir başarı olasılığı varsa ne kullanabilirim?
16 denemede 9 başarı olasılığını elde etmek isteseydim, her deneme için 0.6'lık bir olasılık varsa binom dağılımını kullanabilirdim. 16 denemenin her birinin farklı bir başarı olasılığı varsa ne kullanabilirim?
Yanıtlar:
Bu, 16 (muhtemelen bağımsız) Binom denemelerinin toplamıdır. Bağımsızlık varsayımı, olasılıkları çoğaltmamıza izin verir . , ve olasılıkları olan iki denemeden sonra her iki denemede başarı şansı , başarı şansı ve bir başarı şansı . Bu son ifadenin geçerliliği, tam olarak bir başarı elde etmenin iki yolunun birbirini dışlayan olduğu gerçeğine borçludur: birçoğu gerçekten olabilir. Bu onların olasılıkları eklediği anlamına gelir .
Bu iki kural sayesinde - bağımsız olasılıklar çarpı ve karşılıklı münhasır olanları ekler - olasılıklar olan 16 deneme için cevapları . Bunu yapmak için verilen her bir başarı sayısını (9 gibi) elde etmenin tüm yollarını hesaba katmanız gerekir. 9 başarıya ulaşmak için yol vardır. Örneğin bunlardan biri, 1, 2, 4, 5, 6, 11, 12, 14 ve 15 numaralı denemelerin başarı, diğerleri başarısız olduğunda ortaya çıkar. Başarılar arasında ve olasılıkları vardı ve başarısızlıklar olasılıklarına sahipti. . Bu 16 sayının çarpılması şans veriyorBu belirli sonuç dizisinin. Bu rakamın 11.439 ile birlikte toplanması, bu rakamların cevaplarını vermektedir.
Elbette bir bilgisayar kullanırsın.
16'dan fazla denemeyle, dağıtımı yaklaşık olarak belirleme ihtiyacı vardır. ve olasılıklarının hiçbiri çok küçük , Normal bir yaklaşım iyi çalışma eğilimindedir. Bu yöntemle, deneme toplamının beklentisinin ve (denemelerin bağımsız olması nedeniyle) varyansın . Daha sonra toplamların dağılımının Normal ortalama ve standart sapma ile Normal olduğunu iddia etmiş . Cevaplar, farklı olan başarı oranına karşılık gelen olasılıkları hesaplamak için iyi olma eğilimindedir. birkaç katları daha fazla olmadan . As büyük yetişir bu yaklaşım her zamankinden daha doğru olur ve hatta daha büyük katları için çalışır uzak .
@ Whuber'in normal yaklaşımına bir alternatif "karıştırma" olasılıkları veya hiyerarşik bir model kullanmaktır. Bu, şekilde benzer olduğunda ve bunu, bazı parametre tarafından indekslenen yoğunluk fonksiyonuna sahip bir olasılık dağılımı ile . İntegral bir denklem elde edersiniz:s ı ~ D i'nin s t ( θ ) g ( s | θ ) θ
Binom olasılık ) ayarından gelir, normal yaklaşım (sanırım) ayarından gelir) ( @ whuber'ın cevabında tanımlandığı şekilde ve ) ve sonra " Bu PDF'nin kuyrukları "tepe noktasının etrafında keskin bir şekilde düşüyor.g ( p | θ ) = g ( p | μ , σ ) = 1μσ
Aynı zamanda, basit bir analitik forma götürecek olan ve normal yaklaşımın yaptığı "küçük p" probleminden muzdarip olmayan, beta oldukça esnek olduğu bir beta dağılımı da kullanabilirsiniz. Aşağıdaki denklemlerin çözümleri tarafından ayarlanan ile bir dağılımı kullanmak (bu "en küçük KL sapması" tahminleridir):α , β
ψ(β)-ψ(α+β)=1
Burada digamma fonksiyonudur - yakından harmonik seri ile ilgili.
"Beta-binom" bileşik dağılımını elde ediyoruz:
Bu dağılım, @whuber'ın işaret ettiği durumda normal bir dağılıma doğru yaklaşır - ancak küçük ve çarpık için makul cevaplar - ancak beta dağılımının sadece bir tepe noktası olduğu için multimodal için değil . Ancak , modları için beta dağıtımlarını kullanarak bunu kolayca çözebilirsiniz . Eğer elde edilen bütün kırmak içine her parça (parametrelerinin hesaplanması için ve yeterli veri) benzersiz bir modu, böylece parçalar, ve her bir parça içinde bir beta dağılımı uygun. Daha sonra not sonuçları toplayın bu değişkenler değişikliğini gerçekleştirmek için içinp i p i M M 0 < p < 1 M p = x - L L<x<U beta integrali dönüştürür:
Let ~ olasılık üretme fonksiyonu (PGF) ile:
Let toplamı belirtmektedir , bağımsız rastgele değişken. Daha sonra, toplam için PGF ve gibi değişkenlere olduğu:
ararız :
HEPSİ TAMAM. Bu, bir fonksiyonu olarak tam sembolik çözümü üretir . Yanıt, ekrana yazdırmak için oldukça uzun, ancak tamamen izlenebilir ve bilgisayarımdaki Mathematica'yı kullanarak değerlendirmek için saniyeden daha az sürüyor .
Örnekler
Eğer , o zaman:
Eğer , o zaman:
16 den fazla deneme mi?
16 den fazla denemede, dağıtımı yaklaşık olarak hesaplamanıza gerek yoktur. Yukarıdaki kesin yöntem, veya diyen örnekler için olduğu kadar kolay çalışır . Örneğin, olduğunda , aşağıdaki kodu kullanarak pmf'nin tamamını ( yani her ) değerlendirmek için saniyeden daha az sürer .
Mathematica kodu
değerlerinden oluşan bir vektör verildiğinde , şunu söyleyin:
n = 16; pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];
... burada gereken her şeyi yapmak için bazı Mathematica kodu:
pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0 // N
0.198268
Tüm pmf'yi türetmek için:
Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]
... veya daha düzgün ve daha hızlı kullanın (aşağıdaki Ray Koopman'ın önerisi sayesinde):
CoefficientList[pgfS, t] // N
olan bir örnek için, hesaplamak için sadece 1 saniye , daha sonra tüm pmf'yi kullanarak hesaplamak için 0.002 saniye sürer , bu yüzden son derece verimlidir.pgfS
CoefficientList
With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]
9 başarı With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]
olasılığını verir ve 0, ..., 16 başarı olasılığını verir.
Table
İçin -değerlerinin ile uygun değildir, daha genel formları sağlamak için kasıtlı . Kullanımınız olduğunu çok güzel! Doğrudan yaklaşımı son derece hızlandıran yukarıdaki koda bir ekledim . Öyle olsa bile , a'dan daha hızlıdır . 50 yaşın altındaki için çok fazla fark yaratmaz (her iki yaklaşım da pmf'nin tamamını oluşturmak için ikinci bir saniyenin sadece küçük bir kısmını alır), ama n gerçekten çok büyük olduğunda sizin de gerçek bir pratik avantajınız olacaktır . Range
CoefficientList
Expand
CoefficientList
ParallelTable
CoefficientList
@wolfies yorum yaptı ve buna cevap verme girişimim, daha sonra tartışacağım diğer cevabımla ilgili önemli bir sorun ortaya çıkardı.
Özel Durum (n = 16)
Hesaplamada temel 2 (ikili) sayıları kullanmanın "hilesini" kullanarak tam dağıtımı kodlamanın oldukça etkili bir yolu vardır. tam dağılımını elde etmek için sadece 4 satırlık bir R kodu gerektirir, burada . Temel olarak, ikili değişkenlerinin vektörünün toplam seçeneği vardır . Şimdi her bir farklı seçimi kadar saydığımızı varsayalım . Bu kendi başına özel bir şey değil, ancak şimdi temel 2 aritmetik kullanarak "seçim sayısını" temsil ettiğimizi varsayalım. Şimdi böylece tüm seçenekleri yazarım böyleceseçimler. Ardından "normal sayılar" da "ikili sayılar" içinde olur . Şimdi bunları dört haneli bir sayı olarak yazdığımızı varsayalım, sonra . Şimdi her sayının son - , olarak düşünülebilir. , vb. . . Neyse ki, bizim için bu ikili dönüşümü yapabilen bir R fonksiyonu var, çağırıldı ve ham ikili formu bir sayısal araca dönüştürelim , sonra ile bir vektör elde edelim.intToBits(x)
as.numeric(intToBits(x))
Elementler, her bir eleman sayımızın temel 2 versiyonunun basamağıdır (sağdan sola okunur, soldan sağa değil). Bu numarayı diğer bazı R vektörleşmeleriyle birleştirerek , 4 kod satırındaki olasılığını hesaplayabiliriz :
exact_calc <- function(y,p){
n <- length(p)
z <- t(matrix(as.numeric(intToBits(1:2^n)),ncol=2^n))[,1:n] #don't need columns n+1,...,32 as these are always 0
pz <- z%*%log(p/(1-p))+sum(log(1-p))
ydist <- rowsum(exp(pz),rowSums(z))
return(ydist[y+1])
}
Tek tip bir durumda nin ve sqrt root case tam bir dağıtım verir y için:
Yani belirli problemi için de başarılar denemeler, kesin hesaplamalar düz ileri. Bu aynı zamanda kadar bir dizi olasılık için de geçerlidir - bunun ötesinde, hafıza problemleriyle karşılaşmaya başlamanız muhtemeldir ve farklı hesaplama püf noktaları gereklidir.
Önerilen "beta dağılımımı" uygulayarak parametre tahminlerini ve bunun yaklaşık olarak eşit bir olasılık tahmini verdiğini ve yaklaşık olarak değerinde bir değer verdiğini . Bu, ile beta dağılımının yoğunluğunun , değerlerinin histogramına yaklaştığı göz önüne alındığında garip görünüyor . Ne yanlış gitti?
Genel dava
Şimdi daha genel durumu ve neden basit beta yaklaşımımın başarısız olduğunu tartışacağım. Temel olarak, yazıp ardından üzerine başka bir ile karıştırmak aslında önemli bir varsayımda bulunuyor - asıl olasılığı tahmin edebiliriz tek bir binom olasılık - kalan tek sorun hangi değeri kullanması gerektiğidir. Bunu görmenin bir yolu, gerçek üzerinde tek biçimli olan karıştırma yoğunluğunu kullanmaktır . Bu yüzden beta dağılımını ayrı bir. Daha sonra, karıştırma yaklaşımının kullanılması, olasılıklı bir değeri ve tüm denemelerinin bu olasılığa sahip olduğunu varsaydığı gibi sözcüklerle ifade edilebilir . Açıkçası, böyle bir yaklaşımın iyi çalışması için değerlerinin çoğunun birbirine gerekir. Bu, temel olarak, @wolfies için tekdüze değerlerin dağılımı için, , beta karıştırma dağılımını kullanırken çok kötü bir yaklaşımla sonuçlanır. Bu ayrıca, yaklaşımın için neden daha iyi olduğunu da açıklar - daha az yayılırlar.
Karıştırma daha sonra, gözlemlenen , tek bir bütün olası seçimlerine göre ortalamalamak için kullanır . Şimdi "karıştırma" ağırlıklı bir ortalama gibi olduğundan, en iyi tek kullanmaktan daha iyisini yapamaz . Dolayısıyla eğer yeterince yayılmışsa, tüm iyi bir yaklaşım sağlayabilecek tek bir .
Diğer cevabımda söylediğim bir şey, sınırlı bir aralıkta beta dağılımlarının bir karışımını kullanmanın daha iyi olacağıydı - ama bu hala burada yardımcı olmayacak , çünkü bu hala tek bir üzerinde . Daha anlamlı olan, aralığın parçalara bölünmesi ve her parçanın içinde bir binom bulunmasıdır. Örneğin olarak seçim yapabilir ve her olasılık aralığında dokuz binom yerleştirebiliriz . Temel olarak, her bölünme içinde, ortalamasına eşit olasılıkla bir binom kullanmak gibi basit bir yaklaşımabu aralıkta. Aralıkları yeterince küçük yaparsak, yaklaşım keyfi olarak iyi olur. Ama bunu yapar hepsi not olduğunu indpendent toplamı ile uğraşmak zorunda bize bırakın binom yerine, farklı olasılıklar ile denemeler Bernoulli denemeleri. Bununla birlikte, bu cevabın önceki kısmı binom sayısının yeterince küçük olması şartıyla tam hesaplamaları yapabileceğimizi göstermiştir, örneğin 10-15.
Bernulli-temelli cevabı binom-temelli bir cevaba genişletmek için, değişkenlerinin ne olduğunu “yeniden yorumluyoruz” . Basitçe, olduğunu - bu, orijinal -tabanlı ancak şimdi başarıların geldiği . Dolayısıyla durum şimdi tüm "başarıların" üçüncü geldiğini ve hiçbirinin ilk ikisinden gelmediğini gösteriyor.
Bu hala "üstel" olduğu Not hesaplamaların sayısı gibi bir şey olduğunu terimliler sayısıdır ve grup boyutu - eğer varsa bu yüzden burada . Fakat bu bernoulli rasgele değişkenleri kullanarak uğraştığınız den daha iyidir . Örneğin, olasılığını her grupta olasılıkla gruba ayırdığımızı varsayalım . Bu, hesaplamayı verir,
grup seçerek ve sınırın yaklaşık hücre olan yaklaşık olduğunu belirterek , maksimum çıkarmak için bu yöntemi etkili bir şekilde kullanabiliriz .
Bir daha kaba bir yaklaşım yapmak için, düşürerek , biz "uygulanabilir" boyutunu artırır . , etkili bir olabileceği anlamına gelir yaklaşık . Bunun ötesinde, normal yaklaşım son derece doğru olmalıdır.
R
son derece verimli ve çok daha büyük değerleri olan bir çözüm için lütfen istatistik.stackexchange.com/a/41263 adresini ziyaret edin . Örneğin, bu sorunu , tam dağıtımı vererek üç saniyenin altında çözdü . (Benzer bir Mathematica'da 9 çözelti - @wolfies' cevap görmek - için de ayrıca gerçekleştirir küçük ancak bu kadar büyük bir değere sahip yürütülmesine tamamlayın olabilir .)n = 10 4 n n
(Genel olarak anlaşılır) pmf R kodu:
p <- seq(1, 16) / 17
cat(p, "\n")
n <- length(p)
k <- 9
S <- seq(1, n)
A <- combn(S, k)
pr <- 0
for (i in 1:choose(n, k)) {
pr <- pr + exp(sum(log(p[A[,i]])) + sum(log(1 - p[setdiff(S, A[,i])])))
}
cat("Pr(S = ", k, ") = ", pr, "\n", sep = "")
İçin 'Wolfies cevap kullanılan s elimizde:
Pr(S = 9) = 0.1982677
Ne zaman büyür, bir kullanma konvolüsyonunu .
R
(farklı değerleriyle aynı sorunun çözümü kodu de) stats.stackexchange.com/a/41263 . Buradaki sorun 0,00012 saniyede bunun için (bir kez çözerek tahmini) 0,53 saniye ile karşılaştırıldığında (o 1000 kez çözerek tahmini) toplam hesaplama zamanı çözüldü kodu ve Wolfies' kullanılarak 0,00058 saniye Mathematica (o 1000 kez çözerek tahmini) kodu. R