Posso assumere la (log-) normalità per questo esempio?


11

Ecco un diagramma QQ per il mio campione (notare l'asse Y logaritmico); :n=1000

inserisci qui la descrizione dell'immagine
Come sottolineato da whuber, questo indica che la distribuzione sottostante è inclinata a sinistra (la coda destra è più corta).

Usando shapiro.test(sui dati trasformati in log) in R, ottengo una statistica di test di e un valore p di , il che significa che rifiutiamo formalmente l'ipotesi nulla al livello di confidenza del 95%.5.172 10 - 13 H 0 : il campione è distribuito normalmenteW=0,97185,17210-13H0:il campione è distribuito normalmente

La mia domanda è: è abbastanza buono nella pratica per ulteriori analisi che assumono (log-) normalità? In particolare, vorrei calcolare gli intervalli di confidenza per i mezzi di campioni simili usando il metodo approssimativo di Cox e Land (descritto nel documento: Zou, GY, cindy Yan Huo e Taleban, J. (2009). Intervalli di confidenza semplici per mezzi lognormali e loro differenze con le applicazioni ambientali. Environmetrics 20, 172–180):

ci <- function (x) {
        y <- log(x)
        n <- length(y)
        s2 <- var(y)
        m <- mean(y) + s2 / 2
        z <- qnorm(1 - 0.05 / 2) # 95%
        #z <- qnorm(1 - 0.10 / 2) # 90%
        d <- z * sqrt(s2 / n + s2 * s2 / (2 * (n - 1)))

        return(c(exp(m - d), exp(m + d)))
}

Ho notato che gli intervalli di confidenza tendono ad essere centrati attorno a un punto leggermente al di sopra della media del campione reale. Per esempio:

> mean(x)
[1] 82.3076
> y <- log(x)
> exp(mean(y) + var(y) / 2)
[1] 91.22831

H0


1
La distribuzione sicuramente non si adatta bene alla coda giusta.
Michael R. Chernick,

1
Questo QQ spettacoli tracciare i dati hanno una molto più breve coda a destra di una distribuzione lognormale: è lasciata distorta rispetto a un log-normale. Si dovrebbe quindi essere diffidenti nell'utilizzare le procedure basate su lognormale.
whuber

@whuber sì, hai ragione sul fatto che sia lasciato inclinato anziché inclinato a destra. Devo aggiornare la domanda?
Vegard

Certo: apprezziamo i miglioramenti alle domande.
whuber

2
NB: si noti che per "inclinazione a sinistra" intendevo esplicitamente che la coda destra è corta, non che la coda sinistra è lunga. Ciò è evidente da come i punti a destra della trama scendono al di sotto della linea di riferimento. Poiché i punti a sinistra della trama sono (relativamente) vicini alla linea di riferimento, non è corretto definire questa distribuzione come "coda sinistra più lunga". La distinzione è importante qui, perché la coda destra dovrebbe avere un'influenza molto maggiore sulla media stimata rispetto alla coda sinistra (mentre entrambe le code influenzano il suo intervallo di confidenza).
whuber

Risposte:


12

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)

QQPlot

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 cifunzione:

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.u1.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")

Gli istogrammi

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.


Wow, questa risposta mi lascia senza fiato. Grazie mille! Come mai usi abline()invece di qqline()(che produce una linea diversa) nel primo esempio?
Vegard

La tua trial()funzione non usa i suoi argomenti.
Vegard


1
Bel lavoro! Per l'avvio, modificare trial: trial <- function(y) { x <- sample(y, length(y), TRUE); cbind(ci(x), ci.u(x)) }. Poi emettere solo un comando sim <- sapply(1:5000, function(i) trial(x)). Potresti voler esplorare gli istogrammi delle sei file simsuccessive.
whuber

1
+1, mi piace soprattutto il punto sottile che gli intervalli di previsione saranno più sensibili alla forma distributiva rispetto agli intervalli di confidenza per la media.
gung - Ripristina Monica
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.