- (binomial1) Seja o experimento aleatório consiste de fazer
ensaios (de Bernoulli) de modo que 1) os ensaios sejam independentes, 2) que o resultado seja dicotômico (sucesso e fracasso) e 3) que a probabilidade de sucesso
seja constante. A variável aleatória
, que o número de ensaios com resultado do tipo sucesso, tem distribuição binomial com parâmetros
e
. A função de probabilidade de
é
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 enunciado pede uma função para computar a probabilidade de um ponto da distribuição binomial com parâmetros n e p, ou seja, a função de massa de probabilidade
onde precisamos validar se n é um inteiro positivo, p está em (0,1) e x é um inteiro em [0,n].
Passo 2
Definimos a assinatura da função com três argumentos: x (número de sucessos), n (número de ensaios) e p (probabilidade de sucesso).
Implementamos as verificações de erro:
Implementamos as verificações de erro:
- n deve ser inteiro e n\ge1
- p deve satisfazer 0<p<1
- x deve ser inteiro e 0\le x\le n
Caso alguma condição falhe, usamosstop()
para lançar mensagem de erro.
Passo 3
Se todos os parâmetros estiverem válidos, calculamos o coeficiente binomial
usando a função para obter a probabilidade.
Por fim, retornamos o valor calculado.
A função resultante já incorpora as proteções contra valores fora do espaço paramétrico e do suporte.
choose(n, x)
do R, e depois multiplicamos por
Por fim, retornamos o valor calculado.
A função resultante já incorpora as proteções contra valores fora do espaço paramétrico e do suporte.
Resposta
binomial_pmf <- function(x, n, p) {
if (!is.numeric(n) || n != as.integer(n) || n < 1) {
stop(“Argumento ‘n’ deve ser inteiro positivo.”)
}
if (!is.numeric§ || p <= 0 || p >= 1) {
stop(“Argumento ‘p’ deve estar em (0,1).”)
}
if (!is.numeric(x) || x != as.integer(x) || x < 0 || x > n) {
stop(“Argumento ‘x’ deve ser inteiro entre 0 e n.”)
}
return(choose(n, x) * p^x * (1 - p)^(n - x))
}
if (!is.numeric(n) || n != as.integer(n) || n < 1) {
stop(“Argumento ‘n’ deve ser inteiro positivo.”)
}
if (!is.numeric§ || p <= 0 || p >= 1) {
stop(“Argumento ‘p’ deve estar em (0,1).”)
}
if (!is.numeric(x) || x != as.integer(x) || x < 0 || x > n) {
stop(“Argumento ‘x’ deve ser inteiro entre 0 e n.”)
}
return(choose(n, x) * p^x * (1 - p)^(n - x))
}