- (poisson1) Se
é uma variável aleatória com distribuição Poisson com parâmetro
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
ou suporte
.
Passo 1
O enunciado pede uma função que calcule a probabilidade de uma variável aleatória Poisson com parâmetro
, cuja função de probabilidade é
Precisamos implementar isso em código, garantindo que os valores de entrada estejam no espaço paramétrico (
) e no suporte (
inteiro não-negativo) da distribuição.
Na teoria da distribuição de Poisson, representa a média e variância da variável e deve ser um número real estritamente positivo. O suporte de
é o conjunto
. Para calcular
usamos a fórmula acima, que envolve a exponencial, potências e o fatorial.
Na teoria da distribuição de Poisson,
Passo 2
Para estruturar a função em Python, vamos usar o módulo
para
, potência e fatorial. A assinatura ficará algo como:
def poisson_p(x, lam):
...
Antes de qualquer cálculo, fazemos checagens de validade:
- Verificar se
é numérico e . - Verificar se
é inteiro e .
Se alguma condição falhar, levantamos uma exceção com mensagem de erro explicativa.
Passo 3
Com as entradas validadas, aplicamos a fórmula:
e retornamos esse valor como um
Pronto! A função já está protegida contra entradas inválidas e retorna a probabilidade correta.
float
.Pronto! A função já está protegida contra entradas inválidas e retorna a probabilidade correta.
Resposta
import math
def poisson_p(x, lam):
“”"
Calcula a probabilidade de X = x para X ~ Poisson(lam).
“”"
Calcula a probabilidade de X = x para X ~ Poisson(lam).
Parâmetros:
x : valor inteiro não-negativo (suporte de Poisson)
lam : parâmetro da distribuição, deve ser real estritamente positivo
Retorna:
float probabilidade P(X = x)
Levanta:
TypeError ou ValueError em caso de entrada inválida
"""
# Verifica tipo e domínio de lam
if not isinstance(lam, (int, float)):
raise TypeError("Parâmetro 'lam' deve ser numérico")
if lam <= 0:
raise ValueError("Parâmetro 'lam' deve ser maior que zero")
# Verifica tipo e domínio de x
if not isinstance(x, int):
raise TypeError("Variável 'x' deve ser do tipo int")
if x < 0:
raise ValueError("Variável 'x' deve ser um inteiro não-negativo")
# Cálculo da probabilidade
return math.exp(-lam) * (lam ** x) / math.factorial(x)