Prendi in considerazione una distribuzione beta per una determinata serie di valutazioni in [0,1]. Dopo aver calcolato la media:
C'è un modo per fornire un intervallo di confidenza attorno a questa media?
Prendi in considerazione una distribuzione beta per una determinata serie di valutazioni in [0,1]. Dopo aver calcolato la media:
C'è un modo per fornire un intervallo di confidenza attorno a questa media?
Risposte:
Mentre ci sono metodi specifici per calcolare gli intervalli di confidenza per i parametri in una distribuzione beta, descriverò alcuni metodi generali, che possono essere utilizzati per (quasi) tutti i tipi di distribuzioni , compresa la distribuzione beta, e sono facilmente implementabili in R .
Cominciamo con la stima della massima verosimiglianza con gli intervalli di confidenza della verosimiglianza del profilo corrispondenti. Per prima cosa abbiamo bisogno di alcuni dati di esempio:
# 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 media reale / teorica è
> alpha/(alpha+beta)
0.877193
Ora dobbiamo creare una funzione per calcolare la funzione di probabilità del log negativo per un campione dalla distribuzione beta, con la media come uno dei parametri. Possiamo usare la dbeta()
funzione, ma poiché questo non usa una parametrizzazione che coinvolge la media, dobbiamo esprimere i suoi parametri ( α e β ) in funzione della media e di qualche altro parametro (come la deviazione standard):
# 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))
}
Per trovare la stima della massima verosimiglianza, possiamo usare la mle()
funzione nella stats4
libreria:
library(stats4)
est = mle(nloglikbeta, start=list(mu=mean(x), sig=sd(x)))
Ignora gli avvertimenti per ora. Sono causati dagli algoritmi di ottimizzazione che provano valori non validi per i parametri, fornendo valori negativi per α e / o β . (Per evitare l'avviso, è possibile aggiungere un lower
argomento e modificare l'ottimizzazione method
utilizzata.)
Ora abbiamo sia stime che intervalli di confidenza per i nostri due parametri:
> 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
Si noti che, come previsto, gli intervalli di confidenza non sono simmetrici:
par(mfrow=c(1,2))
plot(profile(est)) # Profile likelihood plot
(Le righe magenta del secondo esterno mostrano l'intervallo di confidenza del 95%.)
Si noti inoltre che anche con solo 10 osservazioni, otteniamo stime molto buone (un intervallo di confidenza ristretto).
In alternativa a mle()
, è possibile utilizzare la fitdistr()
funzione dal MASS
pacchetto. Anche questo calcola lo stimatore della massima verosimiglianza e ha il vantaggio che devi solo fornire la densità, non la verosimiglianza negativa del log, ma non ti dà intervalli di confidenza della verosimiglianza del profilo, solo intervalli di confidenza asintotici (simmetrici).
Un'opzione migliore è mle2()
(e funzioni correlate) dal bbmle
pacchetto, che è un po 'più flessibile e potente di mle()
, e offre trame leggermente più belle.
Un'altra opzione è quella di utilizzare il bootstrap. È estremamente facile da usare in R e non è nemmeno necessario fornire una funzione di 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
Il bootstrap ha l'ulteriore vantaggio di funzionare anche se i tuoi dati non provengono da una distribuzione beta.
Per gli intervalli di confidenza sulla media, non dimentichiamo i buoni vecchi intervalli di confidenza asintotici basati sul teorema del limite centrale (e la distribuzione t ). Finché abbiamo una grande dimensione del campione (quindi si applica il CLT e la distribuzione della media del campione è approssimativamente normale) o valori elevati sia di α che β (in modo che la distribuzione beta stessa sia approssimativamente normale), funziona bene. Qui non abbiamo nessuno dei due, ma l'intervallo di confidenza non è ancora così male:
> t.test(x)$conf.int
[1] 0.8190565 0.9268349
Per valori leggermente maggiori di n (e valori non troppo estremi dei due parametri), l'intervallo di confidenza asintotica funziona molto bene.
Dai un'occhiata alla regressione beta. Una buona introduzione a come farlo usando R può essere trovata qui:
http://cran.r-project.org/web/packages/betareg/vignettes/betareg.pdf
Un altro modo (molto semplice) per costruire un intervallo di confidenza sarebbe quello di utilizzare un approccio boostrap non parametrico. Wikipedia ha buone informazioni:
http://en.wikipedia.org/wiki/Bootstrapping_%28statistics%29
Anche un bel video qui: