Considere uma distribuição beta para um determinado conjunto de classificações em [0,1]. Depois de calcular a média:
Existe uma maneira de fornecer um intervalo de confiança em torno dessa média?
Considere uma distribuição beta para um determinado conjunto de classificações em [0,1]. Depois de calcular a média:
Existe uma maneira de fornecer um intervalo de confiança em torno dessa média?
Respostas:
Embora existam métodos específicos para calcular intervalos de confiança para os parâmetros em uma distribuição beta, descreverei alguns métodos gerais, que podem ser usados para (quase) todos os tipos de distribuições , incluindo a distribuição beta, e são facilmente implementados em R .
Vamos começar com a estimativa de probabilidade máxima com intervalos de confiança de probabilidade de perfil correspondentes. Primeiro, precisamos de alguns dados de amostra:
# Sample size
n = 10
# Parameters of the beta distribution
alpha = 10
beta = 1.4
# Simulate some data
set.seed(1)
x = rbeta(n, alpha, beta)
# Note that the distribution is not symmetrical
curve(dbeta(x,alpha,beta))
A média real / teórica é
> alpha/(alpha+beta)
0.877193
Agora precisamos criar uma função para calcular a função de probabilidade de log negativa para uma amostra da distribuição beta, com a média como um dos parâmetros. Podemos usar a dbeta()
função, mas como isso não usa uma parametrização envolvendo a média, temos que expressar seus parâmetros ( α e β ) como uma função da média e algum outro parâmetro (como o desvio padrão):
# Negative log likelihood for the beta distribution
nloglikbeta = function(mu, sig) {
alpha = mu^2*(1-mu)/sig^2-mu
beta = alpha*(1/mu-1)
-sum(dbeta(x, alpha, beta, log=TRUE))
}
Para encontrar a estimativa de probabilidade máxima, podemos usar a mle()
função na stats4
biblioteca:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Apenas ignore os avisos por enquanto. Eles são causados pelos algoritmos de otimização que tentam valores inválidos para os parâmetros, fornecendo valores negativos para α e / ou β . (Para evitar o aviso, você pode adicionar um lower
argumento e alterar a otimização method
usada.)
Agora, temos estimativas e intervalos de confiança para nossos dois parâmetros:
> est
Call:
mle(minuslogl = nloglikbeta, start = list(mu = mean(x), sig = sd(x)))
Coefficients:
mu sig
0.87304148 0.07129112
> confint(est)
Profiling...
2.5 % 97.5 %
mu 0.81336555 0.9120350
sig 0.04679421 0.1276783
Observe que, como esperado, os intervalos de confiança não são simétricos:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(As segundas linhas magentas externas mostram o intervalo de confiança de 95%.)
Observe também que, mesmo com apenas 10 observações, obtemos estimativas muito boas (um intervalo de confiança estreito).
Como alternativa mle()
, você pode usar a fitdistr()
função do MASS
pacote. Isso também calcula o estimador de probabilidade máxima e tem a vantagem de que você só precisa fornecer a densidade, não a probabilidade negativa do log, mas não fornece intervalos de confiança da probabilidade do perfil, apenas intervalos de confiança assintóticos (simétricos).
Uma opção melhor é mle2()
(e funções relacionadas) do bbmle
pacote, que é um pouco mais flexível e poderoso do que mle()
e oferece gráficos um pouco mais agradáveis.
Outra opção é usar o bootstrap. É extremamente fácil de usar no R, e você nem precisa fornecer uma função de densidade:
> library(simpleboot)
> x.boot = one.boot(x, mean, R=10^4)
> hist(x.boot) # Looks good
> boot.ci(x.boot, type="bca") # Confidence interval
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 10000 bootstrap replicates
CALL :
boot.ci(boot.out = x.boot, type = "bca")
Intervals :
Level BCa
95% ( 0.8246, 0.9132 )
Calculations and Intervals on Original Scale
O bootstrap tem a vantagem adicional de funcionar, mesmo que seus dados não venham de uma distribuição beta.
Para intervalos de confiança médios, não vamos esquecer os bons e velhos intervalos de confiança assintóticos baseados no teorema do limite central (e na distribuição t ). Desde que tenhamos um tamanho de amostra grande (para que o CLT se aplique e a distribuição da média da amostra seja aproximadamente normal) ou grandes valores de α e β (para que a distribuição beta em si seja aproximadamente normal), ela funcionará bem. Aqui não temos nenhum, mas o intervalo de confiança ainda não é tão ruim:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Para valores ligeiramente maiores de n (e não valores extremos demais para os dois parâmetros), o intervalo de confiança assintótica funciona extremamente bem.
Confira a regressão beta. Uma boa introdução a como fazê-lo usando R pode ser encontrada aqui:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Outra maneira (realmente fácil) de construir um intervalo de confiança seria usar uma abordagem não paramétrica de boostrap. A Wikipedia tem boas informações:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
Também um bom vídeo aqui: