Come si calcola un intervallo di confidenza per la media di un set di dati normale del registro?


19

Ho sentito / visto in diversi punti che è possibile trasformare il set di dati in qualcosa che è distribuito normalmente prendendo il logaritmo di ciascun campione, calcolare l'intervallo di confidenza per i dati trasformati e ripristinare l'intervallo di confidenza usando l'operazione inversa (ad esempio aumentare 10 alla potenza dei limiti inferiore e superiore, rispettivamente, per il log10 ).

Tuttavia, sono un po 'sospettoso di questo metodo, semplicemente perché non funziona per la media stessa: 10mean(log10(X))mean(X)

Qual è il modo corretto per farlo? Se non funziona per la media stessa, come può eventualmente funzionare per l'intervallo di confidenza per la media?


3
Hai abbastanza ragione. Questo approccio generalmente non funziona e spesso produce intervalli di confidenza che non includono la media della popolazione o anche la media del campione. Ecco qualche discussione al riguardo: amstat.org/publications/jse/v13n1/olsson.html Questa non è una risposta, dal momento che non ho esaminato abbastanza la questione per commentare in dettaglio il link in dettaglio.
Erik

3
Questo problema ha una soluzione classica: projecteuclid.org/… . Alcune altre soluzioni, incluso il codice, sono fornite su epa.gov/oswer/riskassessment/pdf/ucl.pdf-- ma leggilo con un granello di sale, perché almeno un metodo descritto lì (il "Metodo di disuguaglianza di Chebyshev") è semplicemente sbagliato.
whuber

Risposte:


11

Esistono diversi modi per calcolare gli intervalli di confidenza per la media di una distribuzione lognormale. Presenterò due metodi: Bootstrap e Probabilità del profilo. Presenterò anche una discussione sul precedente Jeffreys.

bootstrap

Per il MLE

In questo caso, la SMV di (μ,σ) per un campione (x1,...,xn) sono

μ^=1nj=1nlog(xj);σ^2=1nj=1n(log(xj)μ^)2.

Poi, la SMV della media è δ = exp ( μ + σ 2 / 2 ) . Con ricampionamento possiamo ottenere un campione di bootstrap di δ e, usando questo, possiamo calcolare diversi bootstrap intervalli di confidenza. I seguenti codici mostrano come ottenerli.δ^=exp(μ^+σ^2/2)δ^R

rm(list=ls())
library(boot)

set.seed(1)

# Simulated data
data0 = exp(rnorm(100))

# Statistic (MLE)

mle = function(dat){
m = mean(log(dat))
s = mean((log(dat)-m)^2)
return(exp(m+s/2))
}

# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){mle(d[ind])}, R = 10000)
plot(density(boots.out$t))

# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")

Per la media del campione

Ora, considerando lo stimatore δ~=x¯ invece dell'MLE. Anche altri tipi di stimatori potrebbero essere considerati.

rm(list=ls())
library(boot)

set.seed(1)

# Simulated data
data0 = exp(rnorm(100))

# Statistic (MLE)

samp.mean = function(dat) return(mean(dat))

# Bootstrap
boots.out = boot(data=data0, statistic=function(d, ind){samp.mean(d[ind])}, R = 10000)
plot(density(boots.out$t))

# 4 types of Bootstrap confidence intervals
boot.ci(boots.out, conf = 0.95, type = "all")

Probabilità del profilo

Per la definizione delle funzioni di verosimiglianza e verosimiglianza del profilo, vedere . Usando la proprietà di invarianza della probabilità possiamo reparameterise come segue (μ,σ)(δ,σ) , dove δ=exp(μ+σ2/2) e quindi calcolare numericamente il profilo probabilità di δ .

Rp(δ)=supσL(δ,σ)supδ,σL(δ,σ).

(0,1]0.147 95%δR

set.seed(1)

# Simulated data
data0 = exp(rnorm(100))

# Log likelihood
ll = function(mu,sigma) return( sum(log(dlnorm(data0,mu,sigma))))

# Profile likelihood
Rp = function(delta){
temp = function(sigma) return( sum(log(dlnorm(data0,log(delta)-0.5*sigma^2,sigma)) ))
max=exp(optimize(temp,c(0.25,1.5),maximum=TRUE)$objective     -ll(mean(log(data0)),sqrt(mean((log(data0)-mean(log(data0)))^2))))
return(max)
}

vec = seq(1.2,2.5,0.001)
rvec = lapply(vec,Rp)
plot(vec,rvec,type="l")

# Profile confidence intervals
tr = function(delta) return(Rp(delta)-0.147)
c(uniroot(tr,c(1.2,1.6))$root,uniroot(tr,c(2,2.3))$root)

δ

(μ,σ)

π(μ,σ)σ2,

n2R

library(mcmc)

set.seed(1)

# Simulated data
data0 = exp(rnorm(100))

# Log posterior
lp = function(par){
if(par[2]>0) return( sum(log(dlnorm(data0,par[1],par[2]))) - 2*log(par[2]))
else return(-Inf)
}

# Metropolis-Hastings
NMH = 260000
out = metrop(lp, scale = 0.175, initial = c(0.1,0.8), nbatch = NMH)

#Acceptance rate
out$acc

deltap = exp(  out$batch[,1][seq(10000,NMH,25)] + 0.5*(out$batch[,2][seq(10000,NMH,25)])^2  )

plot(density(deltap))

# 95% credibility interval
c(quantile(deltap,0.025),quantile(deltap,0.975))

Si noti che sono molto simili.


1
(+1) Penso che puoi anche ottenere intervalli di confidenza basati sulla teoria della massima verosimiglianza con il pacchetto distrMod R
Stéphane Laurent

@ StéphaneLaurent Grazie per le informazioni. Vorrei vedere il risultato del tuo codice con il nuovo precedente. Non ero a conoscenza dei comandi e del pacchetto che stai utilizzando.

4
n

Risposta superba! Gli approcci suggeriti qui presuppongono errori del modello omoscedastico: ho lavorato a progetti in cui questa ipotesi non era sostenibile. Suggerirei anche l'uso della regressione gamma come alternativa, che aggirerebbe la necessità di una correzione del bias.
Isabella Ghement,

4

Potresti provare l'approccio bayesiano con il precedente di Jeffreys. Dovrebbe produrre intervalli di credibilità con una proprietà di corrispondenza frequentista corretta: il livello di confidenza dell'intervallo di credibilità è vicino al suo livello di credibilità.

 # required package
 library(bayesm)

 # simulated data
 mu <- 0
 sdv <- 1
 y <- exp(rnorm(1000, mean=mu, sd=sdv))

 # model matrix
 X <- model.matrix(log(y)~1)
 # prior parameters
 Theta0 <- c(0)
 A0 <- 0.0001*diag(1)
 nu0 <- 0 # Jeffreys prior for the normal model; set nu0 to 1 for the lognormal model
 sigam0sq <- 0
 # number of simulations
 n.sims <- 5000

 # run posterior simulations
 Data <- list(y=log(y),X=X)
 Prior <- list(betabar=Theta0, A=A0, nu=nu0, ssq=sigam0sq)
 Mcmc <- list(R=n.sims)
 bayesian.reg <- runireg(Data, Prior, Mcmc)
 mu.sims <- t(bayesian.reg$betadraw) # transpose of bayesian.reg$betadraw
 sigmasq.sims <- bayesian.reg$sigmasqdraw

 # posterior simulations of the mean of y: exp(mu+sigma²/2)
 lmean.sims <- exp(mu.sims+sigmasq.sims/2)

 # credibility interval about lmean:
 quantile(lmean.sims, probs = c(0.025, 0.975))

Sembra molto interessante e dato che tendo ad apprezzare i metodi bayesiani l'ho votato. Potrebbe ancora essere migliorato aggiungendo alcuni riferimenti o preferibilmente anche una spiegazione comprensibile sul perché funziona.
Erik

È noto che "it" (la proprietà di corrispondenza frequentista) funziona per μ e σ2. Perμla proprietà di corrispondenza frequentista è perfetta: l'intervallo di credibilità è esattamente uguale al solito intervallo di confidenza. Perσ2Non so se sia esatto, ma è facile da controllare perché la distribuzione posteriore è una gamma inversa. Il fatto per cui funzionaμ e σ2 non implica necessariamente che funzioni per una funzione f(μ,σ2) di μ e σ2. Non so se ci sono alcuni riferimenti, ma altrimenti puoi verificare con le simulazioni.
Stéphane Laurent,

Mille grazie per la discussione. Ho eliminato tutti i miei commenti per chiarezza e per evitare confusione. (+1)

1
@Procrastinator Grazie anche. Ho anche cancellato i miei commenti e aggiunto il punto sui Jeffreys prima nel mio codice.
Stéphane Laurent,

Qualcuno potrebbe spiegarmi come funziona boots.out = boot (data = data0, statistica = funzione (d, ind) {mle (d [ind])}, R = 10000). Vedo che "ind" è un indice, ma non capisco come trovare "ind". Dove si riferisce questo secondo argomento? L'ho provato con funzioni alternative e non ha funzionato. Osservando l'avvio effettivo della funzione, non vedo neanche un riferimento a Ind.
Andor Kesselman,

0

Tuttavia, sono un po 'sospettoso di questo metodo, semplicemente perché non funziona per la media stessa: 10mean (log10 (X)) ≠ mean (X)

Hai ragione: questa è la formula per la media geometrica, non per la media aritmetica. La media aritmetica è un parametro della distribuzione normale e spesso non è molto significativa per i dati lognormali. La media geometrica è il parametro corrispondente dalla distribuzione lognormale se vuoi parlare in modo più significativo di una tendenza centrale per i tuoi dati.

E in effetti calcoleresti gli IC sulla media geometrica prendendo i logaritmi dei dati, calcolando la media e gli EC come al solito, e trasformando indietro. Hai ragione sul fatto che non vuoi davvero mescolare le tue distribuzioni mettendo gli IC per la media geometrica attorno alla media aritmetica .... yeowch!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.