In R, mean()
y median()
sind Standardfunktionen, die das tun, was Sie erwarten. mode()
gibt den internen Speichermodus des Objekts an, nicht den Wert, der am häufigsten in seinem Argument vorkommt. Aber gibt es eine Standardbibliotheksfunktion, die den statistischen Modus für einen Vektor (oder eine Liste) implementiert?
Antworten
Zu viele Anzeigen?Eine weitere Lösung, die sowohl für numerische als auch für Zeichen-/Faktordaten funktioniert:
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
Auf meinem kleinen Rechner kann ich den Modus eines 10M-ganzzahligen Vektors in etwa einer halben Sekunde erzeugen und finden.
Wenn Ihr Datensatz mehrere Modi haben könnte, verfolgt die obige Lösung denselben Ansatz wie which.max
und gibt die Erstes Auftauchen Wert der Menge der Modi. Zur Rückgabe alle Modi, verwenden Sie diese Variante (von @digEmAll in den Kommentaren):
Modes <- function(x) {
ux <- unique(x)
tab <- tabulate(match(x, ux))
ux[tab == max(tab)]
}
Es gibt ein Paket modeest
die Schätzer für den Modus univariater unimodaler (und manchmal multimodaler) Daten und Werte für die Modi üblicher Wahrscheinlichkeitsverteilungen liefern.
mySamples <- c(19, 4, 5, 7, 29, 19, 29, 13, 25, 19)
library(modeest)
mlv(mySamples, method = "mfv")
Mode (most likely value): 19
Bickel's modal skewness: -0.1
Call: mlv.default(x = mySamples, method = "mfv")
Für weitere Informationen siehe このページ
Eine schnelle und schmutzige Methode zur Schätzung des Modus eines Vektors von Zahlen, von denen man annimmt, dass sie aus einer kontinuierlichen univariaten Verteilung (z. B. einer Normalverteilung) stammen, ist die Definition und Verwendung der folgenden Funktion:
estimate_mode <- function(x) {
d <- density(x)
d$x[which.max(d$y)]
}
Dann wird der Modus geschätzt:
x <- c(5.8, 5.6, 6.2, 4.1, 4.9, 2.4, 3.9, 1.8, 5.7, 3.2)
estimate_mode(x)
## 5.439788
- See previous answers
- Weitere Antworten anzeigen