Questi dati hanno una coda corta rispetto a una distribuzione lognormale, non diversamente da una distribuzione Gamma:
set.seed(17)
par(mfcol=c(1,1))
x <- rgamma(500, 1.9)
qqnorm(log(x), pch=20, cex=.8, asp=1)
abline(mean(log(x)) + .1,1.2*sd(log(x)), col="Gray", lwd=2)
Tuttavia, poiché i dati sono fortemente distorti, possiamo aspettarci che i valori più grandi svolgano un ruolo importante nella stima della media e del suo intervallo di confidenza. Pertanto , dovremmo prevedere che uno stimatore lognormale (LN) tenderà a sopravvalutare la media e i due limiti di confidenza .
Controlliamo e, per il confronto, usiamo i soliti stimatori: cioè la media del campione e il suo intervallo di confidenza della teoria normale. Si noti che i normali stimatori si basano solo sulla normalità approssimativa della media del campione , non dei dati e, con un set di dati così ampio, ci si può aspettare che funzioni bene. Per fare ciò, abbiamo bisogno di una leggera modifica della ci
funzione:
ci <- function (x, alpha=.05) {
z <- -qnorm(alpha / 2)
y <- log(x); n <- length(y); s2 <- var(y)
m <- mean(y) + s2 / 2
d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))
exp(c(mean=m, lcl=m-d, ucl=m+d))
}
Ecco una funzione parallela per le stime della teoria normale:
ci.u <- function(x, alpha=.05) {
mean(x) + sd(x) * c(mean=0, lcl=1, ucl=-1) / sqrt(length(x)) * qnorm(alpha/2)
}
Applicati a questo set di dati simulato, gli output sono
> ci(x)
mean lcl ucl
2.03965 1.87712 2.21626
> ci.u(x)
mean lcl ucl
1.94301 1.81382 2.07219
ci.u
1.9
trial <- function(n=500, k=1.9) {
x <- rgamma(n, k)
cbind(ci(x), ci.u(x))
}
set.seed(17)
sim <- replicate(5000, trial())
1.9
xmin <- min(sim)
xmax <- max(sim)
h <- function(i, ...) {
b <- seq(from=floor(xmin*10)/10, to=ceiling(xmax*10)/10, by=0.1)
hist(sim[i,], freq=TRUE, breaks=b, col="#a0a0FF", xlab="x", xlim=c(xmin, xmax), ...)
hist(sim[i,sim[i,] >= 1.9], add=TRUE,freq=TRUE, breaks=b, col="#FFa0a0",
xlab="x", xlim=c(xmin, xmax), ...)
}
par(mfcol=c(2,3))
h(1, main="LN Estimate of Mean")
h(4, main="Sample Mean")
h(2, main="LN LCL")
h(5, main="LCL")
h(3, main="LN UCL")
h(6, main="UCL")
Ora è chiaro che le procedure lognormali tendono a sovrastimare la media e i limiti di confidenza, mentre le normali procedure fanno un buon lavoro. Possiamo stimare le coperture delle procedure dell'intervallo di confidenza:
> sapply(c(LNLCL=2, LCL=5, LNUCL=3, UCL=6), function(i) sum(sim[i,] > 1.9)/dim(sim)[2])
LNLCL LCL LNUCL UCL
0.2230 0.0234 1.0000 0.9648
Questo calcolo dice:
Il limite inferiore di LN non coprirà la media reale circa il 22,3% delle volte (anziché il 2,5% previsto).
Il solito limite inferiore non coprirà la media reale circa il 2,3% delle volte, vicino al 2,5% previsto.
Il limite superiore di LN supererà sempre la media reale (invece di scendere al di sotto del 2,5% delle volte come previsto). Ciò lo rende un intervallo di confidenza al 100% su due lati (22,3% + 0%) = 77,7% invece di un intervallo di confidenza al 95%.
Il solito limite superiore non coprirà la media reale circa 100 - 96,5 = 3,5% delle volte. Questo è leggermente superiore al valore previsto del 2,5%. I limiti usuali comprendono pertanto un intervallo di confidenza al 100% su due lati (2,3% + 3,5%) = 94,2% invece di un intervallo di confidenza al 95%.
La riduzione della copertura nominale dal 95% al 77,7% per l'intervallo lognormale è terribile. La riduzione al 94,2% per il solito intervallo non è affatto male e può essere attribuita all'effetto dell'asimmetria (dei dati grezzi, non dei loro logaritmi).
Dobbiamo concludere che ulteriori analisi della media non dovrebbero assumere lognormalità.
Stai attento! Alcune procedure (come i limiti di previsione) saranno più sensibili all'asimmetria rispetto a questi limiti di confidenza per la media, quindi potrebbe essere necessario tenere conto della loro distribuzione distorta. Tuttavia, sembra improbabile che le procedure lognormali funzionino bene con questi dati per praticamente qualsiasi analisi prevista.