Considérons une distribution bêta pour un ensemble donné de notations dans [0,1]. Après avoir calculé la moyenne:
Existe-t-il un moyen de fournir un intervalle de confiance autour de cette moyenne?
Considérons une distribution bêta pour un ensemble donné de notations dans [0,1]. Après avoir calculé la moyenne:
Existe-t-il un moyen de fournir un intervalle de confiance autour de cette moyenne?
Réponses:
Bien qu'il existe des méthodes spécifiques pour calculer les intervalles de confiance pour les paramètres d'une distribution bêta, je décrirai quelques méthodes générales, qui peuvent être utilisées pour (presque) toutes sortes de distributions , y compris la distribution bêta, et sont facilement implémentées dans R .
Commençons par l'estimation du maximum de vraisemblance avec les intervalles de confiance de vraisemblance de profil correspondants. Nous avons d'abord besoin de quelques exemples de données:
# 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))
La moyenne réelle / théorique est
> alpha/(alpha+beta)
0.877193
Nous devons maintenant créer une fonction pour calculer la fonction de vraisemblance logarithmique négative pour un échantillon à partir de la distribution bêta, avec la moyenne comme l'un des paramètres. Nous pouvons utiliser la dbeta()
fonction, mais comme cela n'utilise pas de paramétrage impliquant la moyenne, nous devons exprimer ses paramètres ( α et β ) en fonction de la moyenne et d'un autre paramètre (comme l'écart type):
# 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))
}
Pour trouver l'estimation du maximum de vraisemblance, nous pouvons utiliser la mle()
fonction dans la stats4
bibliothèque:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Ignorez simplement les avertissements pour l'instant. Ils sont causés par les algorithmes d'optimisation essayant des valeurs invalides pour les paramètres, donnant des valeurs négatives pour α et / ou β . (Pour éviter l'avertissement, vous pouvez ajouter un lower
argument et modifier l'optimisation method
utilisée.)
Nous avons maintenant à la fois des estimations et des intervalles de confiance pour nos deux paramètres:
> 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
Notez que, comme prévu, les intervalles de confiance ne sont pas symétriques:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(Les deuxièmes lignes magenta externes montrent l'intervalle de confiance à 95%.)
Notez également que même avec seulement 10 observations, nous obtenons de très bonnes estimations (un intervalle de confiance étroit).
Comme alternative à mle()
, vous pouvez utiliser la fitdistr()
fonction du MASS
package. Cela calcule également l'estimateur du maximum de vraisemblance et présente l'avantage que vous n'avez besoin que de fournir la densité, pas la probabilité logarithmique négative, mais ne vous donne pas d'intervalles de confiance de vraisemblance de profil, seulement des intervalles de confiance asymptotiques (symétriques).
Une meilleure option est mle2()
(et les fonctions associées) du bbmle
package, qui est un peu plus flexible et puissant que mle()
, et donne des tracés légèrement plus agréables.
Une autre option consiste à utiliser le bootstrap. Il est extrêmement facile à utiliser dans R, et vous n'avez même pas à fournir de fonction de densité:
> 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
Le bootstrap a l'avantage supplémentaire de fonctionner même si vos données ne proviennent pas d'une distribution bêta.
Pour les intervalles de confiance sur la moyenne, n'oublions pas les bons vieux intervalles de confiance asymptotiques basés sur le théorème central limite (et la distribution t ). Tant que nous avons soit une grande taille d'échantillon (donc le CLT s'applique et la distribution de la moyenne de l'échantillon est approximativement normale), soit de grandes valeurs de α et β (de sorte que la distribution bêta elle-même soit approximativement normale), cela fonctionne bien. Ici, nous n'avons ni l'un ni l'autre, mais l'intervalle de confiance n'est toujours pas trop mauvais:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Pour des valeurs de n légèrement plus larges (et des valeurs pas trop extrêmes des deux paramètres), l'intervalle de confiance asymptotique fonctionne extrêmement bien.
Découvrez la régression bêta. Une bonne introduction à la façon de le faire en utilisant R peut être trouvée ici:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Une autre façon (très facile) de construire un intervalle de confiance serait d'utiliser une approche boostrap non paramétrique. Wikipédia a de bonnes informations:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
Vidéo aussi sympa ici: