web-dev-qa-db-fra.com

Calculer le centile de la colonne de jeu de données

Un rapide pour vous, mes plus chers gourous:

Je fais un travail et on m'a demandé, dans le cadre de cet exercice, d'extraire des statistiques de base de l'ensemble de données infert (il est intégré), et plus précisément de l'une de ses colonnes, infert$age.

Pour ceux qui ne connaissent pas le jeu de données:

> table_ages     # Which is just subset(infert, select=c("age"));
    age
1    26
2    42
3    39
4    34
5    35
6    36
7    23
8    32
9    21
10   28
11   29
...
246  35
247  29
248  23

J'ai dû trouver les valeurs médianes de la colonne, la variance, l'asymétrie, l'écart-type, ce qui me convenait, jusqu'à ce qu'on me demande de trouver la colonne "percentiles".

Je n'ai rien trouvé jusqu'à présent et je l'ai peut-être mal traduit du grec, la langue de la mission. C'était "ποσοστημόρια", Google Translate désigna le terme anglais par "percentiles".

Des tutoriels ou des idées pour trouver ces "centiles" de infert$age?

23
Dimitris Sfounis

Si vous commandez un vecteur x et que vous trouvez les valeurs situées à mi-chemin du vecteur, vous venez de trouver une médiane, soit le 50e centile. La même logique s'applique pour n'importe quel pourcentage. Voici deux exemples.

x <- rnorm(100)
quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1)) # quartile
quantile(x, probs = seq(0, 1, by= 0.1)) # decile
42
Roman Luštrik

La fonction quantile() remplira en grande partie ce que vous voulez probablement, mais comme la question était ambiguë, je vais vous donner une autre réponse qui fait quelque chose de légèrement différent de quantile().

ecdf(infert$age)(infert$age)

générera un vecteur de même longueur que infert$age en donnant la proportion de infert$age qui est en dessous de chaque observation. Vous pouvez lire la documentation ecdf, mais l’idée de base est que ecdf() vous donnera une fonction qui retourne la distribution cumulative empirique. Donc ecdf(X)(Y) est la valeur de la distribution cumulative de X aux points de Y. Si vous voulez simplement connaître la probabilité d'être inférieur à 30 (donc quel pourcentage 30 est dans l'échantillon), vous pourriez dire

ecdf(infert$age)(30)

La principale différence entre cette approche et l'utilisation de la fonction quantile() réside dans le fait que quantile() nécessite que vous définissiez les probabilités pour sortir des niveaux et que vous deviez définir les niveaux pour obtenir les probabilités.

21
randy
table_ages <- subset(infert, select=c("age"))
summary(table_ages)
#            age       
#  Min.   :21.00  
#  1st Qu.:28.00  
#  Median :31.00  
#  Mean   :31.50  
#  3rd Qu.:35.25  
#  Max.   :44.00  

C'est probablement ce qu'ils recherchent. summary(...) appliqué à une valeur numérique renvoie les valeurs minimale, maximale, moyenne, médiane et 25ème et 75ème centiles.

Notez que 

summary(infert$age)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#   21.00   28.00   31.00   31.50   35.25   44.00 

Les chiffres sont les mêmes mais le format est différent. En effet, table_ages est un bloc de données avec une colonne (âges), alors que infert$age est un vecteur numérique. Essayez de taper summary(infert).

4
jlhoward

Vous pouvez également utiliser le paquet hmisc qui vous donnera les centiles suivants:

0,05, 0,1, 0,25, 0,5, 0,75, 0,9, 0,95

Il suffit d'utiliser la description (table_ages)

0
Cormac O'Keeffe