2017-02-04 3 views
2

Ich habe eine data set mit 61 Beobachtungen und 2 Variablen. Wenn ich die gesamten Daten zusammenfasse, unterscheiden sich Quantile, Median, Mittelwert und Maximum der zweiten Variablen manchmal von dem Ergebnis, das ich aus der Zusammenfassung der zweiten Variablen allein erhalte. Warum das?

data <- read.csv("testdata.csv") 

head(data) 
# Group.1  x 
# 1 10/1/12  0 
# 2 10/2/12 126 
# 3 10/3/12 11352 
# 4 10/4/12 12116 
# 5 10/5/12 13294 
# 6 10/6/12 15420 

summary(data) 
# Group.1   x   
# 10/1/12 : 1 Min. : 0 
# 10/10/12: 1 1st Qu.: 6778 
# 10/11/12: 1 Median :10395 
# 10/12/12: 1 Mean : 9354 
# 10/13/12: 1 3rd Qu.:12811 
# 10/14/12: 1 Max. :21194 
# (Other) :55    

summary(data[2]) 
#  x   
# Min. : 0 
# 1st Qu.: 6778 
# Median :10395 
# Mean : 9354 
# 3rd Qu.:12811 
# Max. :21194 

# The following code yield different result: 

summary(data$x) 
# Min. 1st Qu. Median Mean 3rd Qu. Max. 
# 0 6778 10400 9354 12810 21190 
+4

Ihre Aufrufe sind (nach S3-Auflösung) äquivalent zu 'summary.data.frame (data [2])' und 'summary.default (data $ x)'. Die Funktionen sind etwas anders definiert und es scheint, dass die Statistiken auch ein wenig anders sind. Die Berechnung der Quartile ist abhängig von der Länge der numerischen Vektoren "bis zur Interpretation", und nicht alle Funktionen in R treffen die gleichen Annahmen wie Sie oder einander. Finde entweder die von dir bevorzugte Methode oder berechne sie selbst (nachdem du für einige Details '? Quantil' gelesen hast). – r2evans

Antwort

1

@ r2evans' Kommentar ist richtig, dass die Diskrepanz durch Unterschiede in summary.data.frame und summary.default verursacht wird.

Der Standardwert digits für beide Methoden ist max(3L, getOption("digits") - 3L). Wenn Sie Ihre Optionen nicht geändert haben, wird dies auf 4L ausgewertet. Allerdings verwenden die beiden Methoden ihr Argument digits beim Formatieren der Ausgabe unterschiedlich, was der Grund für die Unterschiede in der Ausgabe der beiden Methoden ist. Von ?summary:

digits: integer, für Zahlenwert-Formatierungs mit signif() (für summary.default) oder format() (für summary.data.frame) verwendet.

Sagen wir den Vektor der x der Auswertungsstatistiken in Frage:

q <- append(quantile(data$x), mean(data$x), after = 3L) 
q 
## 0%  25%  50%    75%  100% 
## 0.00 6778.00 10395.00 9354.23 12811.00 21194.00 

In summary.default die Ausgabe unter Verwendung signif formatiert ist, die es Eingang der gelieferten Anzahl signifikanter digits Runden:

signif(q, digits = 4L) 
## 0% 25% 50%   75% 100% 
## 0 6778 10400 9354 12810 21190 

Während summary.data.frameformat verwendet, die es verwendet digits Argument da nur ein sugggestion (?format) für die Anzahl von signifikanten Ziffern anzuzeigen:

format(q, digits = 4L) 
##  0%  25%  50%    75% 100% 
## " 0" " 6778" "10395" " 9354" "12811" "21194" 

Somit wird, wenn unter Verwendung des Standard digits Argumentwert 4, summary.default(data$x) Runden den 5-stellige Quantile auf nur 4 signifikante Stellen; aber summary.data.frame(data[2]) zeigt die 5-stelligen Quantile ohne Rundung an.

Wenn Sie explizit die digits Argument größer als 4 liefern, werden Sie identische Ergebnisse erhalten:

summary(data[2], digits = 5L) 
##  x   
## Min. : 0.0 
## 1st Qu.: 6778.0 
## Median :10395.0 
## Mean : 9354.2 
## 3rd Qu.:12811.0 
## Max. :21194.0 

summary(data$x, digits = 5L) 
## Min. 1st Qu. Median Mean 3rd Qu. Max. 
## 0.0 6778.0 10395.0 9354.2 12811.0 21194.0 

Als extremes Beispiel für die Unterschiede der beiden Verfahren mit dem Standard digits:

df <- data.frame(a = 1e5 + 0:100) 

summary(df$a) 
## Min. 1st Qu. Median Mean 3rd Qu. Max. 
## 100000 100000 100000 100000 100100 100100 

summary(df) 
##  a   
## Min. :100000 
## 1st Qu.:100025 
## Median :100050 
## Mean :100050 
## 3rd Qu.:100075 
## Max. :100100 
Verwandte Themen