Wie berechne ich Konfidenzintervalle für eine nicht normale Verteilung?

21

Ich habe 383 Stichproben mit einem starken Bias für einige gängige Werte. Wie würde ich den 95% CI für den Mittelwert berechnen? Der von mir berechnete CI scheint weit davon entfernt zu sein. Ich gehe davon aus, dass meine Daten beim Erstellen eines Histogramms nicht wie eine Kurve aussehen. Also denke ich, dass ich so etwas wie Bootstrapping verwenden muss, was ich nicht sehr gut verstehe.

IhaveCandy
quelle
2
Eine Lösung wäre, das asymptotische CI zu verwenden, das die Tatsache ausnutzt, dass das RV eine begrenzende Standardnormalverteilung aufweist. Ihre Stichprobe ist relativ groß, sodass sich eine gute Annäherung ergibt. X¯-μS/n
JohnK
1
Nein, mit diesem Ansatz werden Sie in beiden Schwänzen des Konfidenzintervalls eine wirklich schlechte Schwanzabdeckung finden. Die durchschnittliche Abdeckung könnte glücklicherweise in Ordnung sein, aber beide Endfehlerraten werden falsch sein.
Frank Harrell
2
Was bedeutet "starke Voreingenommenheit für einige gemeinsame Werte"? Beachten Sie, dass die Verzerrung in der Statistik eine besondere Bedeutung hat. Sie sollten versuchen, es zu vermeiden, wenn Sie das nicht meinen. Meinen Sie einfach "einige bestimmte Werte kommen sehr oft vor"? Können Sie Ihre Berechnungen und eine Anzeige oder Tabelle Ihrer Daten anzeigen?
Glen_b -Reinstate Monica

Antworten:

21

Ja, Bootstrap ist eine Alternative, um Konfidenzintervalle für den Mittelwert zu ermitteln (und Sie müssen sich ein wenig anstrengen, um die Methode zu verstehen).

Die Idee ist wie folgt:

  1. Erneut mit B-maligem Austausch.
  2. Berechnen Sie für jede dieser Stichproben den Stichprobenmittelwert.
  3. Berechnen Sie ein geeignetes Bootstrap-Konfidenzintervall.

In Bezug auf den letzten Schritt gibt es verschiedene Arten von Bootstrap-Konfidenzintervallen (BCI). Die folgenden Referenzen geben einen Überblick über die Eigenschaften verschiedener BCI-Typen:

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

Es ist eine gute Praxis, mehrere BCI zu berechnen und mögliche Abweichungen zwischen ihnen zu verstehen.

In R können Sie diese Idee einfach mit dem R-Paket 'boot' wie folgt implementieren:

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"))
Münchhausen
quelle
3
Der letzte Schritt, mehrere berechnen, beinhaltet das Fischen nach einem CI, das Ihnen gefällt, aus dem Ergebnis. Sie sollten sich vorab für die Art der gewünschten CI entscheiden.
John
@ John Verschiedene CI haben unterschiedliche Eigenschaften. Es ist empfehlenswert, nach möglichen Unstimmigkeiten zu suchen (und die Ursache dafür zu ermitteln). Es geht nicht darum, nach einem passenden Ergebnis zu fischen.
Münchhausen,
Absolut, aber ohne eine solche Beschreibung des Grundes in Ihrer Antwort "impliziert" es das Fischen. Und Sie behaupten immer noch nicht, dass es wichtig ist, das gewünschte CI zuerst auszuwählen. Ich schlage ein Update der Antwort mit einigen wichtigen Informationen für einen naiven Fragesteller vor. Es wäre sogar noch besser, wenn Sie angeben, welches CI Sie im Allgemeinen bevorzugen und warum, oder welches Sie in Fällen wie diesem bevorzugen und warum.
John
2
@IhaveCandy: Nein. Es demonstriert den zentralen Grenzwertsatz, dh wie die Stichprobenverteilung des Mittelwerts zur Normalverteilung tendiert, selbst für Werte, die einer sehr "unnormalen" Verteilung folgen. Aus diesem Grund unterscheidet sich das einfache z-Konfidenzintervall kaum von anderen ausgefallenen Lösungen, z. B. Bootstrap.
Michael M
1
@IhaveCandy Siehe meinen Kommentar oben, Michael Mayer macht den gleichen Punkt.
JohnK
8

Eine weitere Standardalternative ist die Berechnung des CI mit dem Wilcoxon-Test. In R

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

Leider gibt es den CI um den (Pseudo-) Median nicht als Mittelwert an, aber wenn die Daten stark nicht normal sind, ist der Median möglicherweise ein informativeres Maß.

Jacques Wainer
quelle
2

Für logarithmisch normale Daten schlägt Olsson (2005) eine "modifizierte Cox-Methode" vor.

XE(X)=θLog(θ)

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

Y.=Log(X)Y.Y.¯Y.S2

Eine R-Funktion ist unten:

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

}

Wiederholung des Beispiels aus Olssons Aufsatz

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
quelle
1

n=383

Setzen Sie Monica wieder ein
quelle