it-swarm.com.de

Berechnen des Perzentils der Datensatzspalte

Eine schnelle für Sie, liebste R-Gurus:

Ich mache eine Aufgabe, und ich wurde in dieser Übung gebeten, grundlegende Statistiken aus dem infert-Dataset (es ist eingebaut) und insbesondere einer seiner Spalten, infert$age, herauszufinden.

Für alle, die nicht mit dem Datensatz vertraut sind:

> 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

Ich musste Mittelwerte der Spalte, Varianz, Schiefe, Standardabweichung finden, die alle in Ordnung waren, bis ich aufgefordert wurde, finden Sie die Spalte "Perzentile".

Ich habe bisher noch nichts gefunden, und vielleicht habe ich es falsch aus dem Griechischen übersetzt, der Sprache der Aufgabe. Es war "ποσοστημόρια", Google Translate wies den englischen Begriff als "Perzentile" aus.

Alle Tutorials oder Ideen zum Auffinden dieser "Perzentile" von infert$age?

23

Wenn Sie einen Vektor x bestellen und die Werte finden, die auf halbem Weg durch den Vektor liegen, haben Sie gerade einen Median oder 50. Perzentil gefunden. Dieselbe Logik gilt für jeden Prozentsatz. Hier sind zwei Beispiele.

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

Die Funktion quantile() wird viel von dem tun, was Sie wahrscheinlich wollen, aber da die Frage mehrdeutig war, werde ich eine alternative Antwort geben, die etwas von quantile() etwas abweicht.

ecdf(infert$age)(infert$age)

erzeugt einen Vektor der gleichen Länge wie infert$age, der den Anteil von infert$age angibt, der unter jeder Beobachtung liegt. Sie können die ecdf-Dokumentation lesen, aber die grundlegende Idee ist, dass ecdf() Ihnen eine Funktion gibt, die die empirische kumulative Verteilung zurückgibt. Somit ist ecdf(X)(Y) der Wert der kumulativen Verteilung von X an den Punkten in Y. Wenn Sie nur die Wahrscheinlichkeit kennen möchten, unter 30 zu sein (also das Perzentil 30 in der Stichprobe), könnten Sie sagen

ecdf(infert$age)(30)

Der Hauptunterschied zwischen diesem Ansatz und der Verwendung der Funktion quantile() besteht darin, dass für quantile() die Wahrscheinlichkeitsangaben eingegeben werden müssen, um die Ebenen zu erhalten, und dies erfordert, dass Sie die Ebenen eingeben, um die Wahrscheinlichkeit auszuschöpfen.

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  

Das ist wahrscheinlich, wonach sie suchen. summary(...) für ein numerisches Ergebnis gibt das minimale, maximale, mittlere, mittlere und 25. und 75. Perzentil der Daten zurück.

Beachten Sie, dass 

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

Die Zahlen sind gleich, aber das Format ist unterschiedlich. Dies liegt daran, dass table_ages ein Datenrahmen mit einer Spalte (Alter) ist, während infert$age ein numerischer Vektor ist. Versuchen Sie, summary(infert) einzugeben.

4
jlhoward

Verwenden von {dplyr}:

library(dplyr)

# percentiles
infert %>% 
  mutate(PCT = ntile(age, 100))

# quartiles
infert %>% 
  mutate(PCT = ntile(age, 4))

# deciles
infert %>% 
  mutate(PCT = ntile(age, 10))
1
Gorka

Sie können auch das Paket hmisc verwenden, das die folgenden Perzentile angibt:

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

Verwenden Sie einfach die Beschreibung (table_ages)

0
Cormac O'Keeffe