Phân phối xác suất cho các xác suất khác nhau


36

Nếu tôi muốn có xác suất 9 thành công trong 16 thử nghiệm với mỗi thử nghiệm có xác suất 0,6 thì tôi có thể sử dụng phân phối nhị thức. Tôi có thể sử dụng gì nếu mỗi trong số 16 thử nghiệm có xác suất thành công khác nhau?


1
@whuber Theo cách giải thích của bạn về xấp xỉ bình thường, các tính toán về độ lệch trung bình và độ lệch chuẩn khác với mô tả trong Wikipedia. Trong Wiki, giá trị trung bình là np và độ lệch chuẩn là np (1-p). Vì vậy, trong bài toán này, đối với xấp xỉ Bình thường của xác suất thành công khác nhau trong phân phối nhị thức, giá trị trung bình là p1 + p2 + p3 + p4 + p5 + ... + pi và phương sai là p1 (1-p1) + p2 ( 1-p2) + ... + pi (1-pi). Tôi có đúng không
David

1
Xem Wikipedia về phân phối nhị thức Poisson . Cũng là một thuật ngữ tìm kiếm bật lên một vài lần truy cập ở đây.
Glen_b -Reinstate Monica

@ David Khi tất cả các pi là tương đương với một giá trị phổ biến p , sau đó p1+p2++pn=npp1(1p1)++pn(1pn)=np(1p) , cho thấy mô tả Wikipedia mà bạn đề cập chỉ là một trường hợp đặc biệt.
ai


Câu trả lời:


22

Đây là tổng của 16 thử nghiệm nhị thức (có lẽ độc lập). Giả định độc lập cho phép chúng tôi nhân lên xác suất. Vì vậy, sau hai thử nghiệm với xác suất p1p2 thành công, cơ hội thành công của cả hai thử nghiệm là p1p2 , cơ hội không thành công là (1p1)(1p2) và cơ hội một thành công là p1(1p2)+(1p1)p2 . Biểu hiện cuối cùng đó có giá trị của nó với thực tế là hai cách để có được chính xác một thành công là loại trừ lẫn nhau: nhiều nhất là một trong số chúng thực sự có thể xảy ra. Điều đó có nghĩa là xác suất của họthêm.

Bằng hai quy tắc này - xác suất độc lập nhân và thêm hai loại trừ - bạn có thể tìm ra câu trả lời cho 16 thử nghiệm với xác suất p1,,p16 . Để làm như vậy, bạn cần tính đến tất cả các cách để có được số lượng thành công nhất định (chẳng hạn như 9). Có (169)=11440cách để đạt được 9 thành công. Một trong số đó, ví dụ, xảy ra khi các thử nghiệm 1, 2, 4, 5, 6, 11, 12, 14 và 15 là thành công và những thử nghiệm khác là thất bại. Những thành công có xác suấtp1,p2,p4,p5,p6,p11,p12,p14,p15và những thất bại có xác suất1p3,1p7,,1p13,1p16 . Nhân 16 số này cho cơ hộicủa chuỗi kết quả cụ thể này. Tổng số này cùng với 11.439 số còn lại cho câu trả lời.

Tất nhiên bạn sẽ sử dụng máy tính.

Với nhiều hơn 16 thử nghiệm, cần phải xấp xỉ phân phối. Với điều kiện không có xác suất nào 1 - p i trở nên quá nhỏ, một xấp xỉ bình thường có xu hướng hoạt động tốt. Với phương pháp này, bạn lưu ý rằng sự mong đợi của tổng n thử nghiệm là μ = p 1 + p 2 + + p n và (vì các thử nghiệm độc lập) phương sai là σ 2 = p 1 ( 1 - p 1 ) + ppi1pinμ=p1+p2++pn . Sau đó bạn giả vờ sự phân bố của các khoản tiền là bình thường với trung bình μ và độ lệch chuẩn σ . Những câu trả lời có xu hướng tốt cho việc tính toán xác suất tương ứng với một tỷ lệ thành công mà khác với μ bởi không có nhiều hơn một vài bội số của σ . Như n phát triển lớn xấp xỉ này được bao giờ chính xác và công trình hơn cho bội thậm chí lớn hơn của σ xa μ .σ2=p1(1p1)+p2(1p2)++pn(1pn)μσμσnσμ


9
Các nhà khoa học máy tính gọi những "thử nghiệm Poisson" này để phân biệt chúng với các thử nghiệm Bernoulli. Ngoài các xấp xỉ Định lý giới hạn trung tâm, còn có các giới hạn đuôi tốt. Đây là một. Các tìm kiếm của Google về "giới hạn của Chernoff cho các thử nghiệm Poisson" sẽ cho ra kết quả mà bạn có thể tìm thấy trong một điều trị CS điển hình.
Đức Hồng Y

@Cardinal Danh pháp đó thật thú vị. Nó sẽ có giá trị cho rất nhỏ , nhưng mặt khác có vẻ sai lệch, bởi vì phân phối khác không được xấp xỉ bằng các phân phối Poisson. (Có một cuộc thảo luận khác về CV về câu hỏi này, trong đó "16" được thay thế bằng 10.000 và chúng tôi kiểm tra xác suất đuôi, nhưng tôi không thể tìm thấy nó một lần nữa.)pi
whuber

1
vâng, tôi đồng ý về tên Tôi thấy nó hơi kỳ quặc khi lần đầu tiên gặp nó. Tôi đã cho nó ở đây nhiều hơn như một thuật ngữ hữu ích để tìm kiếm. Dường như các nhà khoa học máy tính xem xét các xác suất này thường xuyên trong việc xử lý các thuật toán nhất định. Tôi rất muốn đọc câu hỏi khác nếu bạn tình cờ tìm thấy nó. Đây có phải là một trong những ?
Đức hồng y

2
@cardinal đúng là chúng tôi "những người CS" gọi họ là những thử nghiệm Poisson. trong thực tế cho trường hợp này, một ràng buộc tiêu chuẩn của Chernoff-Hoeffding sẽ cung cấp cho bạn chính xác ràng buộc mà OP đang yêu cầu.
Suresh Venkatasubramanian

1
Theo nhận xét của @ David ngày hôm qua, có cái gì đó sai trái với tuyên bố của bạn của Bình thường xấp xỉ trung bình là Chúng tôi đang tổng hợp 16 RVs Bernoulli, mỗi trong số đó có thể mất giá trị 0 hoặc 1, do đó, tổng sẽ có miền hỗ trợ từ 0 đến 16, không nằm trong khoảng từ 0 đến 1. Đáng để kiểm tra sd của bạn.
μ=(p1+p2++pn)/n
sói

12

Một cách khác để xấp xỉ bình thường của @ whuber là sử dụng xác suất "trộn" hoặc mô hình phân cấp. Điều này sẽ được áp dụng khi các là tương tự một cách nào đó, và bạn có thể mô hình này bằng một phân bố xác suất p i ~ D i s t ( θ ) với một hàm mật độ của g ( p | θ ) lập chỉ mục của một số tham số θ . bạn có một phương trình tích phân:pipiDist(θ)g(p|θ)θ

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

The binomial probability comes from setting g(p|θ)=δ(pθ), the normal approximation comes from (I think) setting g(p|θ)=g(p|μ,σ)=1σϕ(pμσ) (with μ and σ as defined in @whuber's answer) and then noting the "tails" of this PDF fall off sharply around the peak.

You could also use a beta distribution, which would lead to a simple analytic form, and which need not suffer from the "small p" problem that the normal approximation does - as beta is quite flexible. Using a beta(α,β) distribution with α,β set by the solutions to the following equations (this is the "mimimum KL divergence" estimates):

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

Where ψ(.) is the digamma function - closely related to harmonic series.

We get the "beta-binomial" compound distribution:

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

This distribution converges towards a normal distribution in the case that @whuber points out - but should give reasonable answers for small n and skewed pi - but not for multimodal pi, as beta distribution only has one peak. But you can easily fix this, by simply using M beta distributions for the M modes. You break up the integral from 0<p<1 into M pieces so that each piece has a unique mode (and enough data to estimate parameters), and fit a beta distribution within each piece. then add up the results, noting that making the change of variables p=xLUL for L<x<U the beta integral transforms to:

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

+1 This answer contains some interesting and clever suggestions. The last one looks particularly flexible and powerful.
whuber

Just to take something very simple and concrete, suppose (i) pi=i17 and (ii) pi=i/17, for i=1 to 16. What would be the solution to your α and β estimates, and thus your estimates for P(X=9) given n=16, as per the OP's problem?
wolfies

Great answer and proposal, especially the beta! It'd be cool to see this answer written in its general form with n and s.
pglpm

8

Let Xi ~ Bernoulli(pi) with probability generating function (pgf):

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

Let S=i=1nXi denote the sum of n such independent random variables. Then, the pgf for the sum S of n=16 such variables is:

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

We seek P(S=9), which is:

19!d9pgfSdt9|t=0

ALL DONE. This produces the exact symbolic solution as a function of the pi. The answer is rather long to print on screen, but it is entirely tractable, and takes less than 1100th of a second to evaluate using Mathematica on my computer.

Examples

If pi=i17,i=1 to 16, then: P(S=9)=964794185433480818448661191875666868481=0.198268

If pi=i17,i=1 to 16, then: P(S=9)=0.000228613

More than 16 trials?

With more than 16 trials, there is no need to approximate the distribution. The above exact method works just as easily for examples with say n=50 or n=100. For instance, when n=50, it takes less than 110th of second to evaluate the entire pmf (i.e. at every value s=0,1,,50) using the code below.

Mathematica code

Given a vector of pi values, say:

n = 16;   pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];

... here is some Mathematica code to do everything required:

pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0  // N

0.198268

To derive the entire pmf:

Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]

... or use the even neater and faster (thanks to a suggestion from Ray Koopman below):

CoefficientList[pgfS, t] // N

For an example with n=1000, it takes just 1 second to calculate pgfS, and then 0.002 seconds to derive the entire pmf using CoefficientList, so it is extremely efficient.


1
It can be even simpler. With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]] gives the probability of 9 successes, and With[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]] gives the probabilities of 0,...,16 successes.
Ray Koopman

@RayKoopman That is cool. The Table for the p-values is intentional to allow for more general forms not suitable with Range. Your use of CoefficientList is very nice! I've added an Expand to the code above which speeds the direct approach up enormously. Even so, CoefficientList is even faster than a ParallelTable. It does not make much difference for n under 50 (both approaches take just a tiny fraction of a second either way to generate the entire pmf), but your CoefficientList will also be a real practical advantage when n is really large.
wolfies

5

@wolfies comment, and my attempt at a response to it revealed an important problem with my other answer, which I will discuss later.

Specific Case (n=16)

There is a fairly efficient way to code up the full distribution by using the "trick" of using base 2 (binary) numbers in the calculation. It only requires 4 lines of R code to get the full distribution of Y=i=1nZi where Pr(Zi=1)=pi. Basically, there are a total of 2n choices of the vector z=(z1,,zn) that the binary variables Zi could take. Now suppose we number each distinct choice from 1 up to 2n. This on its own is nothing special, but now suppose that we represent the "choice number" using base 2 arithmetic. Now take n=3 so I can write down all the choices so there are 23=8 choices. Then 1,2,3,4,5,6,7,8 in "ordinary numbers" becomes 1,10,11,100,101,110,111,1000 in "binary numbers". Now suppose we write these as four digit numbers, then we have 0001,0010,0011,0100,0101,0110,0111,1000. Now look at the last 3 digits of each number - 001 can be thought of as (Z1=0,Z2=0,Z3=1)Y=1, etc. Counting in binary form provides an efficient way to organise the summation. Fortunately, there is an R function which can do this binary conversion for us, called intToBits(x) and we convert the raw binary form into a numeric via as.numeric(intToBits(x)), then we will get a vector with 32 elements, each element being the digit of the base 2 version of our number (read from right to left, not left to right). Using this trick combined with some other R vectorisations, we can calculate the probability that y=9 in 4 lines of R code:

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])
}

Plugging in the uniform case pi(1)=i17 and the sqrt root case pi(2)=i17 gives a full distribution for y as:

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

So for the specific problem of y successes in 16 trials, the exact calculations are straight-forward. This also works for a number of probabilities up to about n=20 - beyond that you are likely to start to run into memory problems, and different computing tricks are needed.

Note that by applying my suggested "beta distribution" we get parameter estimates of α=β=1.3206 and this gives a probability estimate that is nearly uniform in y, giving an approximate value of pr(y=9)=0.06799117. This seems strange given that a density of a beta distribution with α=β=1.3206 closely approximates the histogram of the pi values. What went wrong?

General Case

I will now discuss the more general case, and why my simple beta approximation failed. Basically, by writing (y|n,p)Binom(n,p) and then mixing over p with another distribution pf(θ) is actually making an important assumption - that we can approximate the actual probability with a single binomial probability - the only problem that remains is which value of p to use. One way to see this is to use the mixing density which is discrete uniform over the actual pi. So we replace the beta distribution pBeta(a,b) with a discrete density of pi=116wiδ(ppi). Then using the mixing approximation can be expressed in words as choose a pi value with probability wi, and assume all bernoulli trials have this probability. Clearly, for such an approximation to work well, most of the pi values should be similar to each other. This basically means that for @wolfies uniform distribution of values, pi=i17 results in a woefully bad approximation when using the beta mixing distribution. This also explains why the approximation is much better for pi=i17 - they are less spread out.

The mixing then uses the observed pi to average over all possible choices of a single p. Now because "mixing" is like a weighted average, it cannot possibly do any better than using the single best p. So if the pi are sufficiently spread out, there can be no single p that could provide a good approximation to all pi.

One thing I did say in my other answer was that it may be better to use a mixture of beta distributions over a restricted range - but this still won't help here because this is still mixing over a single p. What makes more sense is split the interval (0,1) up into pieces and have a binomial within each piece. For example, we could choose (0,0.1,0.2,,0.9,1) as our splits and fit nine binomials within each 0.1 range of probability. Basically, within each split, we would fit a simple approximation, such as using a binomial with probability equal to the average of the pi in that range. If we make the intervals small enough, the approximation becomes arbitrarily good. But note that all this does is leave us with having to deal with a sum of indpendent binomial trials with different probabilities, instead of Bernoulli trials. However, the previous part to this answer showed that we can do the exact calculations provided that the number of binomials is sufficiently small, say 10-15 or so.

To extend the bernoulli-based answer to a binomial-based one, we simply "re-interpret" what the Zi variables are. We simply state that Zi=I(Xi>0) - this reduces to the original bernoulli-based Zi but now says which binomials the successes are coming from. So the case (Z1=0,Z2=0,Z3=1) now means that all the "successes" come from the third binomial, and none from the first two.

Note that this is still "exponential" in that the number of calculations is something like kg where g is the number of binomials, and k is the group size - so you have Yj=1gXj where XjBin(k,pj). But this is better than the 2gk that you'd be dealing with by using bernoulli random variables. For example, suppose we split the n=16 probabilities into g=4 groups with k=4 probabilities in each group. This gives 44=256 calculations, compared to 216=65536

By choosing g=10 groups, and noting that the limit was about n=20 which is about 107 cells, we can effectively use this method to increase the maximum n to n=50.

If we make a cruder approximation, by lowering g, we will increase the "feasible" size for n. g=5 means that you can have an effective n of about 125. Beyond this the normal approximation should be extremely accurate.


@momo - I think this is ok, as my answers are two different ways to approach the problem. This answer is not an edited version of my first one - it is just a different answer
probabilityislogic

1
For a solution in R that is extremely efficient and handles much, much larger values of n, please see stats.stackexchange.com/a/41263. For instance, it solved this problem for n=104, giving the full distribution, in under three seconds. (A comparable Mathematica 9 solution--see @wolfies' answer--also performs well for smaller n but could not complete the execution with such a large value of n.)
whuber

5

The (in general intractable) pmf is

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

For the pi's used in wolfies answer, we have:

Pr(S = 9) = 0.1982677

When n grows, use a convolution.


1
Doing that with R code was really helpful. Some of us are more concrete-thinkers and it greatly helps to have an operational version of the generating function.
DWin

@DWin I provide efficient R code in the solution to the same problem (with different values of the pi) at stats.stackexchange.com/a/41263. The problem here is solved in 0.00012 seconds total computation time (estimated by solving it 1000 times) compared to 0.53 seconds (estimated by solving it once) for this R code and 0.00058 seconds using Wolfies' Mathematica code (estimated by solving it 1000 times).
whuber

So P(S=k) would follow a Poisson-Binomial Distribution.
fccoelho

+1 Very useful post in my attempt at answering this question. I was wondering if using logs is more of a cool mathematical formulation than a real need. I am not too concerned about running times...
Antoni Parellada
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.