Farklı olasılıklar için olasılık dağılımı


36

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?


1
@whuber Normal yaklaşım açıklamasında, ortalama ve standart sapma hesaplamaları Wikipedia'daki tanımdan farklıdır. Wiki'de ortalama np, standart sapma np (1-p). Bu nedenle, bu problemde, binom dağılımındaki değişkenlik olasılığının Normal yaklaşımı için ortalama, p1 + p2 + p3 + p4 + p5 + ... + pi'dir ve varyans, p1 (1-p1) + p2'dir. 1-p2) + ... + pi (1-pi). Haklı mıyım
David

1
Poisson binom dağılımı hakkında Vikipedi'ye bakınız . Ayrıca burada birkaç isabet getiren bir arama terimi .
Glen_b

@David Tüm ortak bir değere eşit olduğunda , ve , gösterilen atıfta bulunduğunuz Vikipedi açıklaması sadece özel bir durumdur. pipp1+p2++pn=npp1(1p1)++pn(1pn)=np(1p)
whuber


Yanıtlar:


22

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 .p1p2p1p2(1p1)(1p2)p1(1p2)+(1p1)p2

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 veriyorp1,,p16(169)=11440p1,p2,p4,p5,p6,p11,p12,p14,p151p3,1p7,,1p13,1p16Bu 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.pi1pinμ=p1+p2++pnσ2=p1(1p1)+p2(1p2)++pn(1pn)μσμ 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 .σnσμ


9
Bilgisayar bilimcileri, bu "Poisson denemeleri" ni, onları Bernoulli denemelerinden ayırmak için çağırıyorlar. Merkezi Limit Teoremi yaklaşımlarına ek olarak, mevcut iyi kuyruk sınırları da vardır. İşte bir tane. "Poisson denemeleri için Chernoff sınırları" konulu Google aramaları, tipik bir CS uygulamasında bulabileceğiniz sonuçları getirecektir.
kardinal

@Cardinal Bu terminoloji ilginçtir. Çok küçük için geçerli , ancak aksi halde yanıltıcı görünür, çünkü dağıtım Poisson dağılımlarıyla iyi bir şekilde yaklaştırılmaz. (Orada "16" 10.000 ile değiştirilir ve biz kuyruk olasılıkları incelemek yapmak bu soruya, yaklaşık CV üzerinde başka bir tartışma, ama ben tekrar bulmak mümkün olmamıştır.)pi
whuber

1
evet, ismin üzerinde hemfikirim. İlk karşılaştığımda biraz garip buldum. Onu burada arama için yararlı bir terim olarak verdim. Bilgisayar bilimcilerinin bu olasılıkları belli algoritmalarla uğraşırken sıklıkla düşündükleri görülüyor. Onu bulursan diğer soruyu okumakla ilgilenirim. Öyle mi bu belki?
kardinal

2
@ cardinal haklıyız ki "CS millet" onlara Poisson denemeleri diyoruz. Aslında, bu durumda, standart bir Chernoff-Hoeffding sınırı, OP'nin istediği sınırı size tam olarak verecektir.
Suresh Venkatasubramanian

1
Dün @David'in yorumuna göre, Normal yaklaşma ortalaması ile ilgili olarak ifadesinde yanlış bir şeyler var. Her biri değer alabilen 16 Bernoulli rvs alıyoruz 0 veya 1 olduğundan, toplam 0 ile 16 arasında değil, 0 ile 16 arasında bir destek alanına sahip olacaktır.
μ=(p1+p2++pn)/n
kurtlar

12

@ 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 | θ ) θpipiDist(θ)g(p|θ)θ

Pr(s=9|n=16,θ)=(169)01p9(1p)7g(p|θ)dp

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 | μ , σ ) = 1g(p|θ)=δ(pθ)μσg(p|θ)=g(p|μ,σ)=1σϕ(pμσ)μσ

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):α , βbeta(α,β)α,β

ψ(β)-ψ(α+β)=1

ψ(α)ψ(α+β)=1ni=1nlog[pi]
ψ(β)ψ(α+β)=1ni=1nlog[1pi]

Burada digamma fonksiyonudur - yakından harmonik seri ile ilgili.ψ(.)

"Beta-binom" bileşik dağılımını elde ediyoruz:

(169)1B(α,β)01p9+α1(1p)7+β1dp=(169)B(α+9,β+7)B(α,β)

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 - LnpipiMM0<p<1M L<x<Up=xLULL<x<U beta integrali dönüştürür:

B(α,β)=LU(xL)α1(Ux)β1(UL)α+β1dx

+1 Bu cevap bazı ilginç ve zekice öneriler içeriyor. Sonuncusu özellikle esnek ve güçlü görünüyor.
whuber

Sadece çok basit ve somut bir şey almak için, (i) ve (ii) , - 16 arasında olduğunu varsayalım . kayıt ve tahminleri ve bu nedenle için tahminler belirli bir OP sorun göre,? pi=i17pi=i/17i=1αβP(X=9)n=16
kurtlar

Büyük cevap ve teklif, özellikle beta! Bu cevabı ve ile genel bir şekilde yazılmış görmek harika olurdu . ns
pglpm

8

Let ~ olasılık üretme fonksiyonu (PGF) ile:XiBernoulli(pi)

pgf=E[tXi]=1pi(1t)

Let toplamı belirtmektedir , bağımsız rastgele değişken. Daha sonra, toplam için PGF ve gibi değişkenlere olduğu:S=i=1nXinSn=16

pgfS=E[tS]=E[tX1]E[tX2]E[tX16] (... by independence)=i=116(1pi(1t))

ararız :P(S=9)

19!d9pgfSdt9|t=0

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 .pi1100

Örnekler

Eğer , o zaman: pi=i17,i=1 to 16P(S=9)=964794185433480818448661191875666868481=0.198268

Eğer , o zaman: pi=i17,i=1 to 16P(S=9)=0.000228613

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 .n=50n=100n=50110s=0,1,,50

Mathematica kodu

değerlerinden oluşan bir vektör verildiğinde , şunu söyleyin:pi

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.n=1000pgfSCoefficientList


1
Daha da basit olabilir. 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.
Ray Koopman

@ RayKoopman Bu harika. 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 . pRangeCoefficientListExpandCoefficientListParallelTablenCoefficientList
kurtlar

5

@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öyleceY=i=1nZiPr(Zi=1)=pi2nz=(z1,,zn)Zi12nn=323=8seç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.1,2,3,4,5,6,7,81,10,11,100,101,110,111,10000001,0010,0011,0100,0101,0110,0111,10003001(Z1=0,Z2=0,Z3=1)Y=1intToBits(x)as.numeric(intToBits(x))32Elementler, 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 :y=9

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:pi(1)=i17pi(2)=i17

yPr(Y=y|pi=i17)Pr(Y=y|pi=i17)00.00000.055810.00000.178420.00030.265230.00260.243040.01390.153650.04910.071060.11810.024870.19830.006780.23530.001490.19830.0002100.11810.0000110.04910.0000120.01390.0000130.00260.0000140.00030.0000150.00000.0000160.00000.0000

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.y16n=20

Ö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?α=β=1.3206ypr(y=9)=0.06799117α=β=1.3206pi

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(y|n,p)Binom(n,p)ppf(θ)ppipBeta(a,b)pi=116wiδ(ppi). 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ığıpiwi 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.pipi=i17pi=i17

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 .pi pppippi

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şımap(0,1)(0,0.1,0.2,,0.9,1)0.1pibu 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.ZiZi=I(Xi>0)Zi(Z1=0,Z2=0,Z3=1)

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,kggkYj=1gXjXjBin(k,pj)2gkn=16g=4k=444=256216=65536

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 .g=10n=20107nn=50

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.gng=5n125


@momo - Bence sorun yok, cevaplarım soruna yaklaşmanın iki farklı yolu. Bu cevap ilk yazımın düzeltilmiş bir versiyonu değil - sadece farklı bir cevap
olasılık

1
Bunun için Rson 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 nnn=104nn
whuber

5

(Genel olarak anlaşılır) pmf R kodu:

Pr(S=k)=A{1,,n}|A|=k(iApi)(j{1,,n}A(1pj)).
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:pi

Pr(S = 9) = 0.1982677

Ne zaman büyür, bir kullanma konvolüsyonunu .n


1
Bunu R koduyla yapmak gerçekten yardımcı oldu. Bazılarımız daha somut düşünürler ve üretme işlevinin işlevsel bir versiyonunun olması büyük ölçüde yardımcı oluyor.
DW:

I verimli sağlamak @DWin 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. piR
whuber

Böylece bir Poisson-Binom Dağılımını izler. P(S=k)
fccoelho

+1 Bu soruyu cevaplama girişimimde çok faydalı bir yazı . Günlükleri kullanmanın gerçek bir ihtiyaçtan daha havalı bir matematiksel formülasyon olup olmadığını merak ediyordum. Çalışma süreleri hakkında fazla endişelenmiyorum ...
Antoni Parellada
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.