.
Estou interessado em responder rapidamente a perguntas como (onde é fornecido).
Atualmente, uso simulações aleatórias para responder a essas perguntas. Eu desenho aleatoriamente cada acordo com o seu , depois soma todos os valores de para obter . Repito esse processo alguns milhares de vezes e retorno a fração de vezes .
Obviamente, isso não é totalmente preciso (embora a precisão aumente bastante à medida que o número de simulações aumenta). Além disso, parece que tenho dados suficientes sobre a distribuição para evitar as simulações de uso. Você consegue pensar em uma maneira razoável de obter a probabilidade exata ?
ps
Eu uso Perl & R.
EDITAR
Seguindo as respostas, pensei que poderiam ser necessários alguns esclarecimentos. Descreverei em breve a configuração do meu problema. Dado é um genoma circular com circunferência c
e um conjunto de n
faixas mapeadas para ele. Por exemplo, c=3*10^9
eranges={[100,200],[50,1000],[3*10^9-1,1000],...}
. Observe que todos os intervalos estão fechados (ambas as extremidades são inclusivas). Observe também que lidamos apenas com números inteiros (unidades inteiras).
Estou procurando por regiões no círculo que sejam disfarçadas pelos n
intervalos mapeados fornecidos . Portanto, para testar se um determinado intervalo de comprimento x
no círculo é disfarçado, testo a hipótese de que os n
intervalos são mapeados aleatoriamente. A probabilidade de um intervalo de comprimento mapeado q>x
cobrir completamente o intervalo de comprimento especificado x
é (q-x)/c
. Essa probabilidade se torna bastante pequena quando c
é grande e / ou q
é pequena. O que me interessa é o número de intervalos (fora n
) abrangidos x
. É assimY
se forma.
Testo minha hipótese nula vs. alternativa unilateral (disfarce). Observe também que estou testando várias hipóteses ( x
comprimentos diferentes ) e corrija isso.
p_i
s são fixos.Respostas:
Se muitas vezes se assemelha a um Poisson , você tentou aproximar-se de um Poisson com o parâmetroλ=∑pi ?
EDIT : Encontrei um resultado teórico para justificar isso, bem como um nome para a distribuição de : é chamada de distribuição binomial de Poisson . A desigualdade de Le Cam mostra o quão próxima sua distribuição é aproximada pela distribuição de um Poisson com o parâmetro λ = ∑ p i . Diz-lhe a qualidade deste aprox é regido pela soma dos quadrados do p i é, parafraseando Steele (1994) . Então, se todos os seus p i s são razoavelmente pequeno, como agora parece que eles são, deve ser uma boa aproximação bonita.Y λ=∑pi pi pi
EDIT 2 : Quão pequeno é 'razoavelmente pequeno'? Bem, isso depende de quão boa você precisa da aproximação! O artigo da Wikipedia sobre o teorema de Le Cam fornece a forma precisa do resultado que mencionei acima: a soma das diferenças absolutas entre a função de massa de probabilidade (pmf) de e o pmf da distribuição de Poisson acima não é mais do que o dobro da soma das praças da p i s. Outro resultado de Le Cam (1960) pode ser mais fácil de usar: essa soma também não é superior a 18 vezes a maior p i . Existem mais alguns desses resultados ... ver Serfling (1978) para uma revisão.Y pi pi
fonte
Encontrei sua pergunta enquanto procurava uma solução para esse mesmo problema. Não fiquei terrivelmente satisfeito com as respostas aqui, mas acho que há uma solução bastante simples que fornece a distribuição exata e é bastante tratável.
A distribuição da soma de duas variáveis aleatórias discretas é a convolução de suas densidades. Portanto, se você tem onde conhece P ( X ) e P ( Y ) , pode calcular:Z=X+Y P(X) P(Y)
(Obviamente, para variáveis aleatórias de Bernoulli, você não precisa ir muito ao infinito.)
Você pode usar isso para encontrar a distribuição exata da soma de seus RVs. Primeiro, some dois dos RVs, reunindo seus PDFs (por exemplo, [0,3, 0,7] * [0,6, 0,4] = [0,18, 0,54, 0,28]). Em seguida, convolva essa nova distribuição com seu próximo PDF de Bernoulli (por exemplo, [0,18, 0,54, 0,28] * [0,5, 0,5] = [0,09, 0,36, 0,41, 0,14]). Continue repetindo isso até que todos os RVs tenham sido adicionados. E pronto, o vetor resultante é o PDF exato da soma de todas as suas variáveis.
Eu verifiquei com simulação que isso produz os resultados corretos. Ele não se baseia em nenhuma suposição assintótica e não exige que os probes de Bernoulli sejam pequenos.
Também pode haver alguma maneira de fazer isso com mais eficiência do que convoluções repetidas, mas não pensei muito nisso. Espero que isso seja útil para alguém!
fonte
multinomial[p_] := Module[{lc, condense}, lc = Function[{s}, ListConvolve[s[[1]], s[[2]], {1, -1}, 0]]; condense = Function[{s}, Map[lc, Partition[s, 2, 2, {1, 1}, {{1}}]]]; Flatten[NestWhile[condense, Transpose[{1 - p, p}], Length[#] > 1 &]]]
Para aplicá-lo, faça algo parecidop = RandomReal[{0, 1}, 40000]; pp = multinomial[p];
. Isso cria as probabilidadesp
e calcula a distribuição exatapp
. NB Quando a média dep
não é extrema, a distribuição está muito próxima do normal: isso leva a um algoritmo muito mais rápido ainda.O @onestop fornece boas referências. O artigo da Wikipedia sobre distribuição binomial de Poisson fornece uma fórmula recursiva para calcular a distribuição exata de probabilidade; requer esforço de 2 ) . Infelizmente, é uma soma alternada, portanto será numericamente instável: não há como fazer isso com aritmética de ponto flutuante. Felizmente, quando o p i são pequenos, você só precisa calcular um pequeno número de probabilidades, de modo que o esforço é realmente proporcional ao O ( n log ( Σ i p i ) ) . A precisão necessária para realizar o cálculo com aritmética racional (O(n2) pi O(nlog(∑ipi)) isto é, exatamente, . Isso é viável.para que a instabilidade numérica não seja um problema) cresça lentamente o suficiente para que o tempo geral ainda seja aproximadamente O(n2)
Como teste, criei uma matriz de probabilidades para vários valores de n até n = 2 16 , que é o tamanho desse problema. Para pequenos valores de n (até n = 2 12 ), o tempo para o cálculo exato das probabilidades era em segundos e escalado quadraticamente, então arrisquei um cálculo para n = 2 16pi=1/(i+1) n n=216 n n=212 n=216 até três DPs acima da média (probabilidades de 0, 1, ..., 22 sucessos). Demorou 80 minutos (com o Mathematica 8), de acordo com o tempo previsto. (As probabilidades resultantes são frações cujos numeradores e denominadores têm cerca de 75.000 dígitos cada um!) Isso mostra que o cálculo pode ser feito.
Uma alternativa é executar uma simulação longa (um milhão de tentativas deve ser feito). Ele só tem que ser feito uma vez, porque o não mudam.pi
fonte
(Como essa abordagem é independente das outras soluções postadas, incluindo uma que eu publiquei, estou oferecendo-a como uma resposta separada).
Você pode calcular a distribuição exata em segundos (ou menos), desde que a soma dos p's seja pequena.
Já vimos sugestões de que a distribuição possa ser aproximadamente gaussiana (em alguns cenários) ou Poisson (em outros cenários). De qualquer maneira, sabemos que sua média é a soma de p i e sua variância σ 2 é a soma de p i ( 1 - p i ) . Portanto, a distribuição será concentrada dentro de alguns desvios padrão de sua média, digamos z SDs com z entre 4 e 6 ou aproximadamente. Portanto, precisamos calcular apenas a probabilidade de que a soma X seja igual (um número inteiro) k para k = μμ pi σ2 pi(1−pi) z z X k através de k = μ + z σ . Quando a maior parte do p ik=μ−zσ k=μ+zσ pi são pequeno, é aproximadamente igual a (mas ligeiramente menor do que) μ , de modo a ser conservadora que pode fazer o cálculo para k no intervalo [ μ - z √σ2 μ k . Por exemplo, quando a soma depié igual a9e a escolha dez=6para cobrir bem as caudas, precisaríamos do cálculo para cobrirkem[9-6 √[μ−zμ−−√,μ+zμ−−√] pi 9 z=6 k =[0,27], que são apenas 28 valores.[9−69–√,9+69–√] [0,27]
A distribuição é calculada recursivamente . Vamos ser a distribuição da soma do primeiro i dessas variáveis Bernoulli. Para qualquer j de 0 a i + 1 , a soma das primeiras variáveis i + 1 pode ser igual a j de duas maneiras mutuamente exclusivas: a soma das primeiras variáveis i é igual a j e o i + 1 st é 0 ou então a soma de a primeira i variáveis é igual a j - 1 e afi i j 0 i+1 i+1 j i j i+1st 0 i j−1 i+1st is 1 . Therefore
We only need to carry out this computation for integralj in the interval from max(0,μ−zμ−−√) to μ+zμ−−√.
When most of thepi are tiny (but the 1−pi are still distinguishable from 1 with reasonable precision), this approach is not plagued with the huge accumulation of floating point roundoff errors used in the solution I previously posted. Therefore, extended-precision computation is not required. For example, a double-precision calculation for an array of 216 probabilities pi=1/(i+1) (μ=10.6676 , requiring calculations for probabilities of sums between 0 and 31 ) took 0.1 seconds with Mathematica 8 and 1-2 seconds with Excel 2002 (both obtained the same answers). Repeating it with quadruple precision (in Mathematica) took about 2 seconds but did not change any answer by more than 3×10−15 . Terminating the distribution at z=6 SDs into the upper tail lost only 3.6×10−8 of the total probability.
Another calculation for an array of 40,000 double precision random values between 0 and 0.001 (μ=19.9093 ) took 0.08 seconds with Mathematica.
This algorithm is parallelizable. Just break the set ofpi into disjoint subsets of approximately equal size, one per processor. Compute the distribution for each subset, then convolve the results (using FFT if you like, although this speedup is probably unnecessary) to obtain the full answer. This makes it practical to use even when μ gets large, when you need to look far out into the tails (z large), and/or n is large.
The timing for an array ofn variables with m processors scales as O(n(μ+zμ−−√)/m) . Mathematica's speed is on the order of a million per second. For example, with m=1 processor, n=20000 variates, a total probability of μ=100 , and going out to z=6 standard deviations into the upper tail, n(μ+zμ−−√)/m=3.2 million: figure a couple seconds of computing time. If you compile this you might speed up the performance two orders of magnitude.
Incidentally, in these test cases, graphs of the distribution clearly showed some positive skewness: they aren't normal.
For the record, here is a Mathematica solution:
(NB The color coding applied by this site is meaningless for Mathematica code. In particular, the gray stuff is not comments: it's where all the work is done!)
An example of its use is
Edit
An
R
solution is ten times slower than Mathematica in this test case--perhaps I have not coded it optimally--but it still executes quickly (about one second):fonte
With differentpi your best bet I think is normal approximation. Let Bn=∑ni=1pi(1−pi) . Then
Update: The approximation error can be calculated from the following inequality:
As whuber pointed out, the convergence can be slow for badly behavedpi . For pi=11+i we have Bn≈lnn and Ln≈(lnn)−1/2 . Then taking n=216 we get that the maximum deviation from the standard normal cdf is a whopping 0.3.
fonte
Well, based on your description and the discussion in the comments it is clear thatY has mean ∑ipi and variance ∑ipi(1−pi) . The shape of Y 's distribution will ultimately depend on the behavior of pi . For suitably "nice" pi (in the sense that not too many of them are really close to zero), the distribution of Y will be approximately normal (centered right at ∑pi ). But as ∑ipi starts heading toward zero the distribution will be shifted to the left and when it crowds up against the y -axis it will start looking a lot less normal and a lot more Poisson, as @whuber and @onestop have mentioned.
From your comment "the distribution looks Poisson" I suspect that this latter case is what's happening, but can't really be sure without some sort of visual display or summary statistics about thep 's. Note however, as @whuber did, that with sufficiently pathological behavior of the p 's you can have all sorts of spooky things happen, like limits that are mixture distributions. I doubt that is the case here, but again, it really depends on what your p 's are doing.
As to the original question of "how to efficiently model", I was going to suggest a hierarchical model for you but it isn't really appropriate if thep 's are fixed constants. In short, take a look at a histogram of the p 's and make a first guess based on what you see. I would recommend the answer by @mpiktas (and by extension @csgillespie) if your p 's aren't too crowded to the left, and I would recommend the answer by @onestop if they are crowded left-ly.
By the way, here is the R code I used while playing around with this problem: the code isn't really appropriate if yourp 's are too small, but it should be easy to plug in different models for p (including spooky-crazy ones) to see what happens to the ultimate distribution of Y .
Now take a look at the results.
Have fun; I sure did.
fonte
I think other answers are great, but I didn't see any Bayesian ways of estimating your probability. The answer doesn't have an explicit form, but the probability can be simulated using R.
Here is the attempt:
Using wikipedia we can get estimates ofα^ and β^ (see parameter estimation section).
Now you can generate draws for theith step, generate pi from Beta(α^,β^) and then generate Xi from Ber(pi) . After you have done this N times you can get Y=∑Xi . This is a single cycle for generation of Y, do this M (large) number of times and the histogram for M Ys will be the estimate of density of Y.
This analysis is valid only whenpi are not fixed. This is not the case here. But I will leave it here, in case someone has a similar question.
fonte
As has been mentioned in other answers, the probability distribution you describe is the Poisson Binomial distribution. An efficient method for computing the CDF is given in Hong, Yili. On computing the distribution function for the Poisson binomial distribution.
The approach is to efficiently compute the DFT (discrete Fourier transform) of the characteristic function.
The characteristic function of the Poisson binomial distribution is give byϕ(t)=∏nj[(1−pj)+pjeit] (i=−1−−−√ ).
The algorithm is:
The algorithm is available in the poibin R package.
This approach gives much better results than the recursive formulations as they tend to lack numerical stability.
fonte
I would suggest applying Poisson approximation. It is well known (see A. D. Barbour, L. Holst and S. Janson: Poisson Approximation) that the total variation distance betweenY and a r.v. Z having Poisson distribution with the parameter ∑ipi is small:
supA|P(Y∈A)−P(Z∈A)|≤min{1,1∑ipi}∑ip2i.
There are also bounds in terms of information divergence (the Kullback-Leibler distance, you may see P. Harremoёs: Convergence to the Poisson Distribution in Information Divergence. Preprint no. 2, Feb. 2003, Mathematical Department, University of Copenhagen. http://www.harremoes.dk/Peter/poisprep.pdf and other publications of P.Harremoёs), chi-squared distance (see Borisov and Vorozheikin https://link.springer.com/article/10.1007%2Fs11202-008-0002-3) and some other distances.
For the accuracy of approximation|Ef(Y)−Ef(Z)| for unbounded functions f you may see Borisov and Ruzankin https://projecteuclid.org/euclid.aop/1039548369 .
Besides, that paper contains a simple bound for probabilities: for all A , we have
P(Y∈A)≤1(1−maxipi)2P(Z∈A).
fonte