Comment calculer les intervalles de confiance pour une distribution non normale?

21

J'ai 383 échantillons qui ont un biais important pour certaines valeurs communes, comment calculer l'IC à 95% pour la moyenne? L'IC que j'ai calculé semble très éloigné, ce que je suppose parce que mes données ne ressemblent pas à une courbe lorsque je fais un histogramme. Je pense donc que je dois utiliser quelque chose comme le bootstrap, que je ne comprends pas très bien.

IhaveCandy
la source
2
Une solution serait d'utiliser le CI asymptotique qui utilise le fait que le RV a une distribution normale standard limitante. Votre échantillon est raisonnablement grand, il pourrait donc constituer une bonne approximation. X¯-μS/n
JohnK
1
Non, vous trouverez une couverture de queue vraiment mauvaise dans les deux queues de l'intervalle de confiance en utilisant cette approche. La couverture moyenne pourrait par chance être OK, mais les deux taux d'erreur de queue seront faux.
Frank Harrell
2
Que signifie «biais important pour certaines valeurs communes»? Notez que le biais a une signification particulière dans les statistiques; vous devriez essayer de l'éviter si vous ne le pensez pas. Voulez-vous simplement dire que «certaines valeurs particulières se produisent très souvent»? Pouvez-vous montrer vos calculs et un affichage ou un tableau de vos données?
Glen_b -Reinstate Monica

Réponses:

21

Oui, le bootstrap est une alternative pour obtenir des intervalles de confiance pour la moyenne (et vous devez faire un peu d'effort si vous voulez comprendre la méthode).

L'idée est la suivante:

  1. Rééchantillonner avec des temps de remplacement B.
  2. Pour chacun de ces échantillons, calculez la moyenne de l'échantillon.
  3. Calculez un intervalle de confiance bootstrap approprié .

Concernant la dernière étape, il existe plusieurs types d'intervalle de confiance bootstrap (BCI). Les références suivantes présentent une discussion sur les propriétés des différents types de 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

C'est une bonne pratique de calculer plusieurs BCI et d'essayer de comprendre les écarts possibles entre eux.

Dans R, vous pouvez facilement implémenter cette idée en utilisant le package R 'boot' comme suit:

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"))
Munchausen
la source
3
La dernière étape, calculer plusieurs, implique la pêche d'un CI que vous aimez à partir du résultat. Vous devez décider du type de CI que vous souhaitez en fonction de ce qu'ils sont au préalable.
John
@John Different CI a des propriétés différentes. C'est une bonne pratique de vérifier d'éventuelles divergences (et d'essayer d'en rechercher la source). Il ne s'agit pas de pêcher pour un résultat pratique.
Munchausen
Absolument, mais sans une telle description de la raison dans votre réponse, cela "implique" la pêche. Et vous n'indiquez toujours pas qu'il est essentiel de choisir le CI que vous souhaitez en premier. Je propose une mise à jour de la réponse avec des informations essentielles pour un questionneur naïf. Ce serait encore mieux si vous déclarez quel CI vous préférez généralement et pourquoi, ou lequel vous préférez dans des cas comme celui-ci et pourquoi.
John
2
@IhaveCandy: Non. Il montre le théorème de la limite centrale, c'est-à-dire comment la distribution d'échantillonnage de la moyenne tend vers la normale, même pour les valeurs suivant une distribution très "anormale". C'est pourquoi l'intervalle de confiance simple z ne sera pas très différent de toute autre solution sophistiquée, par exemple bootstrap.
Michael M
1
@IhaveCandy S'il vous plaît voir mon commentaire ci-dessus, Michael Mayer fait le même point.
JohnK
8

Une autre alternative standard consiste à calculer l'IC avec le test de Wilcoxon. Dans R

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

Malheureusement, cela vous donne l'IC autour de la (pseudo) médiane et non la moyenne, mais si les données sont fortement anormales, la médiane est peut-être une mesure plus informative.

Jacques Wainer
la source
2

Pour les données log-normales, Olsson (2005) suggère une «méthode de Cox modifiée»

XE(X)=θJournal(θ)

Oui¯=S22±tFS2n+S42(n-1)

Oui=Journal(X)OuiOui¯OuiS2

Une fonction R est ci-dessous:

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)))

}

Répéter l'exemple du document d'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
Tony Ladson
la source
1

n=383

Réintégrer Monica
la source