- (negbinomial1) Em uma série de ensaios de Bernoulli (independentes e com probabilidade
constante), seja a variável aleatória
o número de tentativas até que
sucessos ocorram. Então
é uma variável aleatória binomial negativa com parâmetros
e
, e sua função de probabilidade é
Escreva uma função para calcular
. Ao implementar, inclua proteções, com mensagens de erro, contra valores fora do espaço paramétrico (
e
) ou suporte
.
Passo 1
O exercício pede para escrever uma função que calcule a probabilidade de massa
de uma variável aleatória binomial negativa com parâmetros
e
, definida por
Vamos precisar verificar se os parâmetros estão dentro dos domínios corretos e depois usar a fórmula da combinação e das potências.
Passo 2
Primeiro, incluir checagem de domínio para
: verificar se está entre 0 e 1, excluindo extremos.
Depois, verificar se é inteiro positivo (
).
Em seguida, checar se é inteiro e satisfaz
, que é o suporte da distribuição.
Depois, verificar se
Em seguida, checar se
Passo 3
Com todos os parâmetros validados, calcular o coeficiente binomial
e por fim a probabilidade
Passo 4
Encapsular tudo em uma função que lança mensagens de erro apropriadas quando algum parâmetro sai do domínio.
Resposta
import math
def neg_binom_pmf(x, r, p):
# Checa se p está em (0,1)
if not (0 < p < 1):
raise ValueError(“Parâmetro p deve estar entre 0 e 1 (excluindo extremos).”)
# Checa se r é inteiro positivo
if not (isinstance(r, int) and r >= 1):
raise ValueError(“Parâmetro r deve ser um inteiro positivo.”)
# Checa se x é inteiro >= r
if not (isinstance(x, int) and x >= r):
raise ValueError(“Parâmetro x deve ser um inteiro maior ou igual a r.”)
# Calcula o coeficiente binomial
coef = math.comb(x-1, r-1)
# Calcula a pmf
return coef * (1 - p)(x - r) * pr
# Checa se p está em (0,1)
if not (0 < p < 1):
raise ValueError(“Parâmetro p deve estar entre 0 e 1 (excluindo extremos).”)
# Checa se r é inteiro positivo
if not (isinstance(r, int) and r >= 1):
raise ValueError(“Parâmetro r deve ser um inteiro positivo.”)
# Checa se x é inteiro >= r
if not (isinstance(x, int) and x >= r):
raise ValueError(“Parâmetro x deve ser um inteiro maior ou igual a r.”)
# Calcula o coeficiente binomial
coef = math.comb(x-1, r-1)
# Calcula a pmf
return coef * (1 - p)(x - r) * pr