2016-11-16 1 views
5

Iunterer und oberer Quartil in boxplot in R

X=c(20 ,18, 34, 45, 30, 51, 63, 52, 29, 36, 27, 24) 

Mit boxplot habe, ich versuche das plotten quantile(X,0.25) und quantile(X,0.75) aber wirklich nicht das gleiche unteres und oberes Quartile in boxplot in R

boxplot(X) 
abline(h=quantile(X,0.25),col="red",lty=2) 
abline(h=quantile(X,0.75),col="red",lty=2) 

enter image description here Wissen Sie warum?

+0

btw, 'boxplot' gibt ein Objekt zurück, das nach Bedarf verwendet werden kann:' bX = boxplot (X); abline (h = bX $ stats [c (2, 4), 1], col = "rot", lty = 2) ' –

Antwort

7

Die Werte der Box werden als Scharniere bezeichnet und können mit den Quartilen übereinstimmen (wie von quantile(x, c(0.25, .075)) berechnet), aber sie werden anders berechnet.

Von ?boxplot.stats:

die beiden ‚Scharniere‘ sind Versionen der ersten und dritten Quartil, das heißt, in der Nähe Quantil (x, c (1,3)/4). Die Scharniere entsprechen den Quartilen für ungerade n (wobei n < - Länge (x)) und unterscheiden sich für gerade n. Während die Quartile für n %% 4 == 1 (n = 1 mod 4) nur gleiche Beobachtungen sind, machen die Gelenke dies zusätzlich für n %% 4 == 2 (n = 2 mod 4) und liegen in der Mitte von zwei Beobachtungen ansonsten.

zu sehen, dass die Werte mit einer ungeraden Anzahl von Beobachtungen übereinstimmt, versuchen den folgenden Code:

set.seed(1234) 
x <- rnorm(9) 

boxplot(x) 
abline(h=quantile(x, c(0.25, 0.75)), col="red") 

enter image description here

3

Die Diskrepanz ergibt sich aus einer Mehrdeutigkeit in der Definition von Quantile. Keine einzelne Methode ist streng korrekt oder falsch - es gibt einfach verschiedene Möglichkeiten, um Quantile in Situationen zu schätzen (z. B. eine gerade Anzahl von Datenpunkten), wenn sie nicht genau mit einem bestimmten Datenpunkt übereinstimmen und interpoliert werden müssen. Etwas irritierend, boxplot und quantile (und andere Funktionen, die zusammenfassende Statistiken zur Verfügung stellen) verwenden verschiedene Standardmethoden Quantile zu berechnen, obwohl diese Standardwerte sein, die type = Argument übergangen Verwendung in quantile

wir diese Unterschiede in Aktion klarer sehen können

boxplot.stats(X)$stats 
# [1] 18.0 25.5 32.0 48.0 63.0 
fivenum(X) 
# [1] 18.0 25.5 32.0 48.0 63.0 

: um einige der verschiedenen Möglichkeiten suchen, Quantil Statistiken in R.

Beide boxplot und fivenum geben die gleichen Werte zu erzeugen, In boxplot und fivenum ist der untere (obere) Quartil entspricht den Median der unteren (oberen) Hälfte der Daten (einschließlich den Median der vollständigen Daten):

c(median(X[ X <= median(X) ]), median(X[ X >= median(X) ])) 
# [1] 25.5 48.0 

Aber quartile und summary Dinge tun, anders:

summary(X) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 18.00 26.25 32.00 35.75 46.50 63.00 

quantile(X, c(0.25,0.5,0.75)) 
# 25% 50% 75% 
# 26.25 32.00 46.50 

Der Unterschied zwischen diesem und den Ergebnissen von boxplot und fivenum hängt davon ab, wie die Funktionen Interpolation zwischen Daten. quartile versucht, durch Schätzen der Form der kumulativen Verteilungsfunktion zu interpolieren.Nach ?quantile:

Quantils Erträgen Schätzungen der zugrunde liegenden Verteilung quantiles basierend auf einer oder zwei Ordnungsstatistiken aus den gelieferten Elementen in x bei Wahrscheinlichkeiten in probs. Einer der neun Quantilsalgorithmen, die in Hyndman und Fan (1996) diskutiert wurden, ist , ausgewählt nach Typ.

Die vollständigen Details der neun verschiedenen Methoden quantile beschäftigen die Verteilungsfunktion der Daten abzuschätzen, kann in ?quantile, und ist zu lang fand hier in voller Länge zu reproduzieren. Der wichtige Punkt zu beachten ist, dass die 9 Methoden stammen von Hyndman und Fan (1996), der Typ 8 empfohlen. Die Standardmethode von quantile ist Typ 7, aus historischen Gründen der Kompatibilität mit S. Wir können die Schätzungen der zu sehen Verwendung Quartile mit verschiedenen Methoden in Quantil bereitgestellt:

quantile_methods = data.frame(q25 = sapply(1:9, function(method) quantile(X, 0.25, type = method)), 
      q50 = sapply(1:9, function(method) quantile(X, 0.50, type = method)), 
      q75 = sapply(1:9, function(method) quantile(X, 0.75, type = method))) 
#  q25 q50 q75 
# 1 24.0000 30 45.000 
# 2 25.5000 32 48.000 
# 3 24.0000 30 45.000 
# 4 24.0000 30 45.000 
# 5 25.5000 32 48.000 
# 6 24.7500 32 49.500 
# 7 26.2500 32 46.500 
# 8 25.2500 32 48.500 
# 9 25.3125 32 48.375 

in dem type = 5 die gleichen geschätzten Werte der Quartile bestimmt boxplot tut. Wenn es jedoch eine ungerade Anzahl von Daten gibt, wird type=7 mit den Boxplot-Statistiken übereinstimmen.

Wir können dies zeigen, indem wir automatisch den Typ auswählen, der entweder 5 oder 7 ist, abhängig davon, ob gerade oder ungerade Daten vorhanden sind. Boxplot in Bild unten zeigen Quantile für Datensätze mit 1 bis 30 Werte, mit boxplot und quantile die gleichen Werte für das Geben beide ungerade und gerade N:

layout(matrix(1:30,5,6, byrow = T), respect = T) 
par(mar=c(0.2,0.2,0.2,0.2), bty="n", yaxt="n", xaxt="n") 

for (N in 1:30){ 
    X = sample(100, N) 
    boxplot(X) 
    abline(h=quantile(X, c(0.25, 0.5, 0.75), type=c(5,7)[(N %% 2) + 1]), col="red", lty=2) 
} 

enter image description here


Hyndman, RJ und Fan , Y. (1996) Beispiel-Quantile in statistischen Paketen, American Statistician 50, 361-365