Wie überprüfe ich, ob meine Daten einer Exponentialverteilung entsprechen?


22

Wie kann ich überprüfen, ob meine Daten, z. B. das Gehalt, aus einer kontinuierlichen Exponentialverteilung in R stammen?

Hier ist ein Histogramm meiner Probe:

Bildbeschreibung hier eingeben

. Jede Hilfe wird sehr geschätzt!


1
Ist Ihre Variable diskret oder stetig? Die Exponentialverteilung ist als stetig definiert .
Neugierig

kontinuierlich. Ich frage mich, ob es irgendeinen Test in R gibt, der das überprüft
stjudent

1
Herzlich willkommen. Suchen Sie nach der Funktion fitdistrin R. Sie passt die Wahrscheinlichkeitsdichtefunktionen (pdfs) basierend auf der Maximum Likelihood Estimation (MLE) -Methode an. Auch die Suche in den Begriffen dieser Seite als pdf, fitdistr, mle und ähnliche Fragen werden gestellt. Denken Sie daran, dass Fragen wie diese fast reproduzierbare Beispiele erfordern , um gute Antworten zu erhalten. Es ist auch hilfreich, wenn die Frage nicht nur die Programmierung betrifft (was dazu führen kann, dass sie als Off-Topic zurückgestellt wird).
Andre Silva

8
Eine Exponentialverteilung wird als gerade Linie gegen Zeichenposition) aufgetragen, wobei die Zeichenposition (Rang , Rang für den niedrigsten Wert ist, die Stichprobengröße ist und beliebte Auswahlmöglichkeiten für enthalten . Das ergibt einen informellen Test, der genauso oder nützlicher sein kann als jeder formale Test. - a ) / ( n - 2 a + 1 ) 1 n a 1 / 2-ln(1--ein)/(n-2ein+1)1nein1/2
Nick Cox

@Berkan hat die Idee des Quantilplots in seinem Beitrag entwickelt.
Nick Cox

Antworten:


29

Ich würde es tun, indem ich zuerst den einzigen Verteilungsparameter unter rateVerwendung von schätze fitdistr. Dies sagt Ihnen nicht, ob die Verteilung passt oder nicht, daher müssen Sie den Anpassungstest verwenden. Hierfür können Sie verwenden ks.test:

require(vcd)
require(MASS)

# data generation
ex <- rexp(10000, rate = 1.85) # generate some exponential distribution
control <- abs(rnorm(10000)) # generate some other distribution

# estimate the parameters
fit1 <- fitdistr(ex, "exponential") 
fit2 <- fitdistr(control, "exponential")

# goodness of fit test
ks.test(ex, "pexp", fit1$estimate) # p-value > 0.05 -> distribution not refused
ks.test(control, "pexp", fit2$estimate) #  significant p-value -> distribution refused

# plot a graph
hist(ex, freq = FALSE, breaks = 100, xlim = c(0, quantile(ex, 0.99)))
curve(dexp(x, rate = fit1$estimate), from = 0, col = "red", add = TRUE)

Bildbeschreibung hier eingeben

Aus meiner persönlichen Erfahrung (obwohl ich es nie offiziell irgendwo gefunden habe, bitte bestätigen oder korrigieren Sie mich), ks.testwird es nur ausgeführt, wenn Sie zuerst die Parameterschätzung angeben. Sie können die Parameter nicht automatisch schätzen lassen, wie dies z goodfit. B. der Fall ist. Deshalb benötigen Sie dieses zweistufige Verfahren mit fitdistr.

Für weitere Informationen , die hervorragende Anleitung von folgen Ricci: DISTRIBUTIONS MIT R FITTING .


2
+1. Ist der ks.test der beste Test, um die Passform in solchen Situationen zu testen? Ich denke, Sie haben auch eine Frage von mir beantwortet .
Andre Silva

4
Nur ein Kopf hoch, sollten Sie vorsichtig sein, wenn Sie die Parameter aus den Daten selbst abschätzen. In diesem Fall ist ein Test wie anderson darling am besten geeignet, da er gegen solche Situationen robust ist.
JPC

Zum KS-Test auf Exponentialität, wenn der Ratenparameter aus den Daten geschätzt wird: siehe Eine naive Frage zum Kolmogorov-Smirnov-Test .
Scortchi

8

Normalerweise würde ich empfehlen, die Exponentialität mithilfe von Diagnoseplots (z. B. QQ-Plots) zu überprüfen, aber ich werde die Tests diskutieren, da die Leute sie häufig wünschen:

Wie Tomas vorschlägt, ist der Kolmogorov-Smirnov-Test nicht zum Testen der Exponentialität mit einem nicht angegebenen Parameter geeignet.

Wenn Sie jedoch die Tabellen für die Parameterschätzung anpassen, erhalten Sie den Lilliefors-Test für die Exponentialverteilung.

Lilliefors, H. (1969), "Über den Kolmogorov-Smirnov-Test für die Exponentialverteilung mit unbekanntem Mittelwert", Journal of the American Statistical Association , Vol. 64. S. 387–389.

Die Verwendung dieses Tests wird in der praktischen nichtparametrischen Statistik von Conover erörtert .

In D'Agostino & Stephens ' Goodness of Fit Techniques diskutieren sie jedoch eine ähnliche Modifikation des Anderson-Darling-Tests (etwas schräg, wenn ich mich recht entsinne, aber ich denke, alle erforderlichen Informationen darüber, wie man es für den Exponentialfall angeht, sind vorhanden zu finden in dem Buch), und das ist fast sicher, mehr Macht gegen interessante Alternativen zu haben.

n(1-r2)r

Schließlich könnte man den Smooth-Test- Ansatz verwenden, wie in dem Buch von Rayner & Best ( Smooth Tests of Goodness of Fit , 1990 - obwohl ich glaube, dass es einen neueren gibt, bei dem Thas und " in R " zum Titel hinzugefügt wurden). Der Exponentialfall wird auch behandelt in:

JCW Rayner und DJ Best (1990), "Smooth Tests of Goodness of Fit: Ein Überblick", International Statistical Review , Vol. 58, No. 1 (April 1990), S. 9-17

Cosma Shalizi erörtert auch reibungslose Tests in einem Kapitel seiner Vorlesungsunterlagen für fortgeschrittene Datenanalyse oder in Kapitel 15 seines Buches Fortgeschrittene Datenanalyse aus elementarer Sicht .

In einigen der oben genannten Fälle müssen Sie möglicherweise die Verteilung der Teststatistik simulieren. Für andere sind Tabellen verfügbar (in einigen Fällen kann es jedoch einfacher sein, die Simulation durchzuführen oder sich selbst genauer zu simulieren, wie dies beim Lilliefors-Test der Fall ist, da die Simulationsgröße im Original begrenzt ist).

n(1-r2)


5

Sie können ein qq-Diagramm verwenden , bei dem es sich um eine grafische Methode zum Vergleichen von zwei Wahrscheinlichkeitsverteilungen handelt, indem Sie deren Quantile gegeneinander zeichnen .

In R gibt es keine Standard-QQ-Plot-Funktion für die Exponentialverteilung (zumindest unter den Basisfunktionen). Sie können dies jedoch verwenden:

qqexp <-  function(y, line=FALSE, ...) { 
    y <- y[!is.na(y)]
    n <- length(y)
    x <- qexp(c(1:n)/(n+1))
    m <- mean(y)
    if (any(range(y)<0)) stop("Data contains negative values")
    ylim <- c(0,max(y))
    qqplot(x, y, xlab="Exponential plotting position",ylim=ylim,ylab="Ordered sample", ...)
    if (line) abline(0,m,lty=2)
    invisible()
  }

Bei der Interpretation Ihrer Ergebnisse: Wenn die beiden zu vergleichenden Verteilungen ähnlich sind, liegen die Punkte im qq-Diagramm ungefähr auf der Linie y = x. Wenn die Verteilungen linear zusammenhängen, liegen die Punkte im qq-Diagramm ungefähr auf einer Linie, jedoch nicht unbedingt auf der Linie y = x.


2
Bei Stata qexpvon SSC handelt es sich um eine vordefinierte Implementierung.
Nick Cox
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.