Soma genérica de variáveis ​​aleatórias gama

35

Eu li que a soma das variáveis ​​aleatórias Gamma com o mesmo parâmetro de escala é outra variável aleatória Gamma. Também vi o artigo de Moschopoulos descrevendo um método para a soma de um conjunto geral de variáveis ​​aleatórias gama. Eu tentei implementar o método de Moschopoulos, mas ainda não obtive sucesso.

Como é a soma de um conjunto geral de variáveis ​​aleatórias Gamma? Para tornar essa pergunta concreta, como ela é:

Gamma(3,1)+Gamma(4,2)+Gamma(5,1)

Se os parâmetros acima não forem particularmente reveladores, sugira outros.

OSE
fonte
4
Uma solução explícita para a soma de quaisquer duas distribuições Gamma foi publicada em stats.stackexchange.com/a/252192 .
whuber
Um exemplo especial disso, em que todas as distribuições Gamma têm o parâmetro de forma 1 (isto é, são exponenciais) é chamada de distribuição hipoxponencial (família) . No caso de apenas duas distribuições exponenciais, também existe uma fórmula explícita dada em stats.stackexchange.com/questions/412849 .
whuber

Respostas:

37

Primeiro, combine todas as somas com o mesmo fator de escala : a mais uma forma .Γ(n,β)Γ(m,β)Γ(n+m,β)

Em seguida, observe que a função característica (cf) de é , de onde o cf de uma soma dessas distribuições é o produtoΓ(n,β)(1iβt)n

j1(1-Euβjt)nj.

Quando os são todos integrais, esse produto se expande como uma fração parcial para uma combinação linear de que os são números inteiros entre e . No exemplo com (da soma de e ) e , encontramos ( 1 - i β j t ) - ν ν 1 n j β 1 = 1 , n 1 = 8 Γ ( 3 , 1 ) Γ ( 5 , 1 ) β 2 = 2 , n 2 = 4nj (1-Euβjt)-νν1njβ1=1,n1=8Γ(3,1)Γ(5,1)β2=2,n2=4

1(1-Eut)81(1-2Eut)4=1(x+Eu)8-8Eu(x+Eu)7-40.(x+Eu)6+160Eu(x+Eu)5+560(x+Eu)4-1792Eu(x+Eu)3-5376(x+Eu)2+15360Eux+Eu+256(2x+Eu)4+2048Eu(2x+Eu)3-9216(2x+Eu)2-30720Eu2x+Eu.

O inverso de tomar o cf é a Transformada de Fourier inversa, que é linear : isso significa que podemos aplicá-lo termo a termo. Cada termo é reconhecível como um múltiplo do cf de uma distribuição gama e, portanto, é prontamente invertido para produzir o PDF . No exemplo, obtemos

e-tt75040+190e-tt6+13e-tt5+203e-tt4+83e-t2t3+2803e-tt3-128e-t2t2+896e-tt2+2304e-t2t+5376e-tt-15360e-t2+15360e-t

para o PDF da soma.

Essa é uma mistura finita de distribuições Gama com fatores de escala iguais aos da soma e fatores de forma menores ou iguais aos da soma. Exceto em casos especiais (onde pode ocorrer algum cancelamento), o número de termos é dado pelo parâmetro de forma total (assumindo que todos os são diferentes).n jn1+n2+nj


Como teste, eis um histograma de resultados obtidos adicionando desenhos independentes das distribuições e . Sobrepõe-se o gráfico de vezes a função anterior. O ajuste é muito bom. Γ ( 8 , 1 ) Γ ( 4 , 2 ) 10 4104Γ(8,1)Γ(4,2)104

Figura


Moschopoulos leva essa idéia um passo adiante ao expandir o cf da soma em uma série infinita de funções características Gamma sempre que um ou mais dos não são integrais e, em seguida, termina a série infinita em um ponto em que esteja razoavelmente bem aproximada.nEu

whuber
fonte
2
Comentário secundário : Normalmente, uma mistura finita significa um pdf da forma que e , ou seja, são probabilidades e o pdf podem ser interpretados como a soma ponderada (lei da probabilidade total) de pdfs condicionais, dadas as várias condições que ocorrem com as probabilidades . No entanto, na soma acima, alguns dos coeficientes são negativos e, portanto, a interpretação padrão da mistura não se aplica. a i > 0 i a i = 1 a i a i
f(x)=Eu=1numaEufEu(x)
umaEu>0 0EuumaEu=1umaEuumaEu
precisa saber é o seguinte
@Dilip Esse é um bom ponto. O que torna este caso interessante é que, embora alguns dos coeficientes possam ser negativos, essa combinação ainda é uma distribuição válida (por sua própria construção).
whuber
Essa abordagem pode ser estendida para incluir a adição de variáveis ​​dependentes? Em particular, quero adicionar 6 distribuições, cada uma tendo alguma correlação com as outras.
masher
11

Mostrarei outra solução possível, que é amplamente aplicável e, com o software R de hoje, bastante fácil de implementar. Essa é a aproximação da densidade do ponto de sela, que deve ser mais conhecida!

Para terminologia sobre a distribuição gama, seguirei https://en.wikipedia.org/wiki/Gamma_distribution com a parametrização shape / scale, é o parâmetro shape e é scale. Para a aproximação do ponto de sela, seguirei Ronald W. Butler: "Aproximações do ponto de sela com aplicações" (Cambridge UP). A aproximação do ponto de sela é explicada aqui: Como funciona a aproximação do ponto de sela? aqui vou mostrar como é usado nesta aplicação.θkθ

Seja uma variável aleatória com a função geradora de momento existente que deve existir por em algum intervalo aberto que contenha zero. Em seguida, defina a função geradora cumulante por Sabe-se que . A equação do ponto de sela é que define implicitamente como uma função de (que deve estar no intervalo de ). Nós escrevemos essa função implicitamente definida como . Observe que a equação do ponto de sela sempre tem exatamente uma solução, porque a função cumulante é convexa. H ( s ) = E e s X s K ( s ) = log M ( s ) E X = K ' ( 0 ) , Var ( X ) = K " ( 0 ) K ' ( s ) = x s x X s ( x )X

M(s)=EesX
s
K(s)=logM(s)
EX=K(0),Var(X)=K(0)
K(s^)=x
sxXs^(x)

Então a aproximação do ponto de sela à densidade de é dada por Não é garantido que esta função de densidade aproximada seja integrada a 1, assim como a aproximação não normalizada do ponto de sela. Poderíamos integrá-lo numericamente e renormalizar para obter uma melhor aproximação. Mas essa aproximação é garantida para não ser negativa.X f ( x ) = 1fX

f^(x)=12πK(s^)exp(K(s^)-s^x)

Agora, sejam variáveis ​​variáveis ​​aleatórias gama independentes, onde possui a distribuição com parâmetros . Então a função geradora cumulante é definida para . A primeira derivada é e a segunda derivada é A seguir, darei algum código para calcular isso e usarei os valores de parâmetro , ,X i ( k i , θ i ) K ( s ) = - n i = 1 k i ln ( 1 - θ i s ) s < 1 / máx ( θ 1 , θ 2 , , θ n ) K ( sX1,X2,...,XnXEu(kEu,θEu)

K(s)=-Eu=1nkEuem(1-θEus)
s<1/max(θ1,θ2,...,θn)
K(s)=Eu=1nkEuθEu1-θEus
K(s)=Eu=1nkEuθEu2(1-θEus)2.
Rn=3k=(1,2,3)θ=(1,2,3). Observe que o Rcódigo a seguir usa um novo argumento na função uniroot introduzida no R 3.1, portanto, não será executado nos R's mais antigos.
shape <- 1:3 #ki
scale <- 1:3 # thetai
# For this case,  we get expectation=14,  variance=36
make_cumgenfun  <-  function(shape, scale) {
      # we return list(shape, scale, K, K', K'')
      n  <-  length(shape)
      m <-   length(scale)
      stopifnot( n == m, shape > 0, scale > 0 )
      return( list( shape=shape,  scale=scale, 
                    Vectorize(function(s) {-sum(shape * log(1-scale * s) ) }),
                    Vectorize(function(s) {sum((shape*scale)/(1-s*scale))}) ,
                    Vectorize(function(s) { sum(shape*scale*scale/(1-s*scale)) }))    )
}

solve_speq  <-  function(x, cumgenfun) {
          # Returns saddle point!
          shape <- cumgenfun[[1]]
          scale <- cumgenfun[[2]]
          Kd  <-   cumgenfun[[4]]
          uniroot(function(s) Kd(s)-x,lower=-100,
                  upper = 0.3333, 
                  extendInt = "upX")$root
}

make_fhat <-  function(shape,  scale) {
    cgf1  <-  make_cumgenfun(shape, scale)
    K  <-  cgf1[[3]]
    Kd <-  cgf1[[4]]
    Kdd <- cgf1[[5]]
    # Function finding fhat for one specific x:
    fhat0  <- function(x) {
        # Solve saddlepoint equation:
        s  <-  solve_speq(x, cgf1)
        # Calculating saddlepoint density value:
        (1/sqrt(2*pi*Kdd(s)))*exp(K(s)-s*x)
    }
    # Returning a vectorized version:
    return(Vectorize(fhat0))
} #end make_fhat

 fhat  <-  make_fhat(shape, scale)
plot(fhat, from=0.01,  to=40, col="red", main="unnormalized saddlepoint approximation\nto sum of three gamma variables")

resultando na seguinte plotagem: insira a descrição da imagem aqui

Vou deixar a aproximação do ponto de sela normalizada como um exercício.

kjetil b halvorsen
fonte
1
Isso é interessante, mas não posso fazer seu Rcódigo funcionar para comparar a aproximação com a resposta exata. Qualquer tentativa de invocação fhatgera erros, aparentemente no uso de uniroot.
whuber
3
Qual é a sua versão R? Os códigos usam um novo argumento para uniroot, extendInt, que foi introduzido no R versão 3.1. Se o seu R for mais antigo, tente removê-lo (e estenda o intervalo dado ao uniroot). Mas isso tornará o código menos robusto!
Kjetil b halvorsen
10

A equação de Welch-Satterthwaite pode ser usada para fornecer uma resposta aproximada na forma de uma distribuição gama. Isso tem a boa propriedade de nos deixar tratar as distribuições gama como sendo (aproximadamente) fechadas em adição. Essa é a aproximação no teste t de Welch comumente usado.

(A distribuição gama pode ser vista como uma distribuição qui-quadrado em escala e permitindo um parâmetro de forma não inteiro).

Eu adaptei a aproximação à parametrização da distribuição gama:k,θ

ksvocêm=(EuθEukEu)2EuθEu2kEu

θsvocêm=θEukEuksvocêm

Seja ,k=(3,4,5)θ=(1,2,1)

Então temos aproximadamente Gamma (10.666 ..., 1.5)

Vemos que o parâmetro de forma foi mais ou menos totalizado, mas um pouco menos porque os parâmetros da escala de entrada diferem. é tal que a soma tem o valor médio correto.kθEuθ

Paul Harrison
fonte
6

Uma solução exata para a convolução (isto é, soma) de distribuições gama é dada como Eq. (1) no pdf vinculado por DiSalvo . Como isso é um pouco longo, levará algum tempo para copiá-lo aqui. Para apenas duas distribuições gama, sua soma exata na forma fechada é especificada pela Eq. (2) de DiSalvo e sem pesos pela Eq. (5) de Wesolowski et al. , que também aparece no site do CV como resposta a essa pergunta. Isso é,nGamma(a,b)Γ(a,1/b)bβ

GDC(uma,b,α,β;τ)={bumaβαΓ(uma+α)e-bττuma+α-11F1[α,uma+α,(b-β)τ],τ>0 00 0,τ0 0,
onde a notação nas perguntas acima; , aqui. Ou seja, e são constantes de velocidade aqui e não escalares tempo.Gumammuma(uma,b)Γ(uma,1/b)bβ
Carl
fonte