Come posso calcolare gli intervalli di confidenza per una distribuzione non normale?


21

Ho 383 campioni che hanno un forte pregiudizio per alcuni valori comuni, come calcolerei l'IC 95% per la media? L'IC che ho calcolato sembra molto lontano, il che presumo sia perché i miei dati non sembrano una curva quando faccio un istogramma. Quindi penso di dover usare qualcosa come il bootstrap, che non capisco molto bene.


2
Una soluzione sarebbe quella di utilizzare l'IC asintotico che sfrutta il fatto che il camper ha una distribuzione normale standard limitante. Il campione è abbastanza grande, quindi potrebbe essere una buona approssimazione. X¯-μS/n
JohnK,

1
No, troverai una cattiva copertura della coda in entrambe le code dell'intervallo di confidenza usando questo approccio. La copertura media potrebbe per fortuna essere OK, ma entrambi i tassi di errore di coda saranno sbagliati.
Frank Harrell,

2
Che cosa significa "forte propensione per alcuni valori comuni"? Si noti che il bias ha un significato particolare nelle statistiche; dovresti cercare di evitarlo se non intendi quello. Intendi semplicemente "alcuni valori particolari si verificano molto spesso"? Puoi mostrare i tuoi calcoli e qualche visualizzazione o tabella dei tuoi dati?
Glen_b -Restate Monica

Risposte:


21

Sì, bootstrap è un'alternativa per ottenere intervalli di confidenza per la media (e devi fare un po 'di sforzo se vuoi capire il metodo).

L'idea è la seguente:

  1. Ricampionare con i tempi di sostituzione B.
  2. Per ciascuno di questi campioni, calcolare la media del campione.
  3. Calcola un intervallo di confidenza bootstrap appropriato .

Per quanto riguarda l'ultimo passaggio, esistono diversi tipi di intervallo di confidenza bootstrap (BCI). I seguenti riferimenti presentano una discussione sulle proprietà di diversi tipi di BCI:

http://staff.ustc.edu.cn/~zwp/teach/Stat-Comp/Efron_Bootstrap_CIs.pdf

http://www.tau.ac.il/~saharon/Boot/10.1.1.133.8405.pdf

È buona norma calcolare diversi BCI e cercare di comprendere possibili discrepanze tra di essi.

In R, puoi facilmente implementare questa idea usando il pacchetto R 'boot' come segue:

rm(list=ls())
# Simulated data
set.seed(123)
data0 = rgamma(383,5,3)
mean(data0) # Sample mean

hist(data0) # Histogram of the data

library(boot) 

# function to obtain the mean
Bmean <- function(data, indices) {
  d <- data[indices] # allows boot to select sample 
    return(mean(d))
} 

# bootstrapping with 1000 replications 
results <- boot(data=data0, statistic=Bmean, R=1000)

# view results
results 
plot(results)

# get 95% confidence interval 
boot.ci(results, type=c("norm", "basic", "perc", "bca"))

3
L'ultimo passaggio, calcolarne diversi, implica la pesca di un elemento della configurazione che ti piace dal risultato. Dovresti decidere il tipo di CI che desideri in base a ciò che sono in anticipo.
Giovanni,

@John CI diversi hanno proprietà diverse. È buona norma verificare eventuali discrepanze (e provare a indagare sulla fonte di ciò). Non si tratta di pescare per un risultato conveniente.
Munchausen,

Assolutamente, ma senza una tale descrizione del motivo nella tua risposta "implica" la pesca. E non stai ancora affermando che è fondamentale scegliere effettivamente l'elemento della configurazione desiderato per primo. Sto suggerendo un aggiornamento della risposta con alcune informazioni critiche per un ingenuo interrogatore. Sarebbe ancora meglio se dichiari quale CI preferisci generalmente e perché, o quale preferisci in casi come questo e perché.
Giovanni,

2
@IhaveCandy: No. Dimostra il Teorema del limite centrale, ovvero come la distribuzione campionaria della media tende alla normalità, anche per valori che seguono una distribuzione molto "non normale". Questo è il motivo per cui il semplice intervallo di confidenza z non sarà molto diverso da qualsiasi altra soluzione sofisticata, ad esempio bootstrap.
Michael M,

1
@IhaveCandy Si prega di vedere il mio commento sopra, Michael Mayer sta facendo lo stesso punto.
JohnK,

8

Un'altra alternativa standard è calcolare l'IC con il test Wilcoxon. In R

wilcox.test(your-data, conf.int = TRUE, conf.level = 0.95)

Sfortunatamente, ti dà l'IC attorno alla mediana (pseudo) non la media, ma se i dati sono pesantemente non normali forse la mediana è una misura più informativa.


2

Per i dati log-normali, Olsson (2005) suggerisce un "metodo Cox modificato"

XE(X)=θlog(θ)

Y¯=S22±tdfS2n+S42(n-1)

Y=log(X)YY¯YS2

Una funzione R è di seguito:

ModifiedCox <- function(x){
  n <- length(x)
  y <- log(x)
  y.m <- mean(y)
  y.var <- var(y)

  my.t <- qt(0.975, df = n-1)

  my.mean <- mean(x)
  upper <- y.m + y.var/2 + my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))
  lower <- y.m + y.var/2 - my.t*sqrt(y.var/n + y.var^2/(2*(n - 1)))

 return(list(upper = exp(upper), mean = my.mean, lower = exp(lower)))

}

Ripetendo l'esempio dall'articolo di Olsson

CO.level <- c(12.5, 20, 4, 20, 25, 170, 15, 20, 15)

ModifiedCox(CO.level)
$upper
[1] 78.72254

$mean
[1] 33.5

$lower
[1] 12.30929

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.