1. (negbinomial1) Em uma série de ensaios de Bernoulli (independentes e com probabilidade p constante), seja a variável aleatória X o número de tentativas até que r sucessos ocorram. Então X é uma variável aleatória binomial negativa com parâmetros 0 e r=1,2, ldots, e sua função de probabilidade é
p(x)=binomx-1r-1(1-p)^x-r p^r, x=r, r+1, ldots
Escreva uma função para calcular p(x). Ao implementar, inclua proteções, com mensagens de erro, contra valores fora do espaço paramétrico ( p e r ) ou suporte (x).

Passo 1

O exercício pede para escrever uma função que calcule a probabilidade de massa p(x) de uma variável aleatória binomial negativa com parâmetros 0 e rin1,2,dots, definida por
p(x)=binomx-1r-1(1-p)^x-rp^r, x=r,r+1,dots
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 p: verificar se está entre 0 e 1, excluindo extremos.
Depois, verificar se r é inteiro positivo ( r>=1).
Em seguida, checar se x é inteiro e satisfaz x>= r, que é o suporte da distribuição.

Passo 3

Com todos os parâmetros validados, calcular o coeficiente binomial
binomx-1r-1=(x-1)!(r-1)!,(x-r)!,
e por fim a probabilidade
p(x)=binomx-1r-1(1-p)^x-rp^r

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

Exercícios relacionados