2017-02-04 2 views
2

J'ai un data set avec 61 observations et 2 variables. Lorsque je récapitule l'ensemble des données, les quantiles, médiane, moyenne et max de la seconde variable sont parfois différentes du résultat obtenu à partir du résumé de la seconde variable seule. Pourquoi donc?

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

Vos appels sont équivalents (après la résolution S3) 'summary.data.frame (données [2])' et 'summary.default (données $ x)'. Les fonctions sont définies légèrement différemment, et il semble que les statistiques soient un peu différentes aussi. Le calcul des quartiles est "jusqu'à l'interprétation" en fonction de la longueur des vecteurs numériques, et toutes les fonctions de R ne font pas les mêmes hypothèses que vous ou l'autre. Trouvez la méthode que vous préférez ou calculez-la vous-même (après avoir lu «? Quantile» pour certains détails). – r2evans

Répondre

1

@ commentaire de r2evans est correct en ce que la différence est causée par des différences dans summary.data.frame et summary.default.

La valeur par défaut de digits pour les deux méthodes est max(3L, getOption("digits") - 3L). Si vous n'avez pas modifié vos options, le résultat sera 4L. Toutefois, les deux méthodes utilisent différemment leur argument digits lors du formatage de la sortie, ce qui explique les différences dans la sortie des deux méthodes. De ?summary:

digits: entier, utilisé pour le numéro de mise à signif() (pour summary.default) ou format() (pour summary.data.frame).

Disons que nous avons le vecteur de la question des statistiques sommaires de x:

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 

En summary.default la sortie est formatée en utilisant signif, qui arrondit est entrée au nombre fourni de digits significatif:

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

Alors que summary.data.frame utilise format, qui l'utilise est l'argument digits comme seul un sugggestion (?format) pour le nombre de chiffres significatifs à afficher:

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

Ainsi, lorsqu'on utilise la valeur de l'argument par défaut digits4, summary.default(data$x) tours les 5 chiffres quantiles à peine à 4 chiffres significatifs; mais summary.data.frame(data[2]) affiche les quantiles à 5 chiffres sans arrondir.

Si vous fournissez explicitement l'argument digits comme plus grand que 4, vous obtiendrez des résultats identiques:

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 

À titre d'exemple extrême des différences entre les deux méthodes avec la valeur par défaut 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