Wie berechnet man den Median eines gruppierten Datensatzes?

8

Mein Datensatz ist wie folgt:

%Vor%

Wie kann ich den Median dieses Datensatzes berechnen? Folgendes habe ich versucht:

%Vor%

Hier sehen Sie, dass die Halbwertsfrequenz 2400/2 = 1200 ist. Es liegt zwischen 1070 und 1920 . Daher ist die Median Klasse die (1900-2000] Gruppe. Sie können die folgende Formel verwenden, um dieses Ergebnis zu erhalten:

  

Median = L + h / f (n / 2 - c)

wo:

  

L ist die untere Klassengrenze der Medianklasse

h ist die Größe der Medianklasse, dh die Differenz zwischen den oberen und unteren Klassengrenzen der Medianklasse
f ist die Häufigkeit der Median-Klasse
c ist die vorherige kumulative Häufigkeit der Median-Klasse
n / 2 ist die Gesamtzahl der Median-Klassen . der Beobachtungen geteilt durch 2 (d. h. Summe f / 2)

Alternativ wird Median class durch die folgende Methode definiert:

  

Lokalisieren Sie n / 2 in der Spalte der kumulativen Häufigkeit.

     

Bekommen Sie die Klasse, in der das liegt.

Und im Code:

%Vor%

Nun möchte ich den obigen Ausdruck eleganter machen - also 1900+(1200-1070)/(1920-1070)*(2000-1900) . Wie kann ich das erreichen?

    
it_is_a_literature 19.09.2013, 06:17
quelle

6 Antworten

6

Da Sie die Formel bereits kennen, sollte es einfach genug sein, eine Funktion zu erstellen, um die Berechnung für Sie durchzuführen.

Hier habe ich eine grundlegende Funktion für den Anfang erstellt. Die Funktion benötigt vier Argumente:

  • frequencies : Ein Vektor von Häufigkeiten ("Nummer" in Ihrem ersten Beispiel)
  • intervals : Eine 2-zeilige matrix mit der gleichen Anzahl von Spalten wie die Länge der Frequenzen, wobei die erste Zeile die untere Klassengrenze und die zweite Zeile die obere Klassengrenze ist. Alternativ kann " intervals " eine Spalte in Ihrem data.frame sein, und Sie können sep (und möglicherweise trim ) angeben, damit die Funktion automatisch die erforderliche Matrix für Sie erstellt.
  • sep : Das Trennzeichen in der Spalte " intervals " in data.frame .
  • trim : Ein regulärer Ausdruck von Zeichen, die entfernt werden müssen, bevor versucht wird, eine numerische Matrix zu erzwingen. Ein Muster ist in die Funktion eingebaut: trim = "cut" . Dadurch wird das reguläre Ausdrucksmuster so festgelegt, dass (,), [und] von der Eingabe entfernt werden.

Hier ist die Funktion (mit Kommentaren, die zeigen, wie ich Ihre Anweisungen verwendet habe, um es zusammenzusetzen):

%Vor%

Hier ist ein Beispiel für data.frame , mit dem Sie arbeiten können:

%Vor%

Jetzt können wir einfach tun:

%Vor%

Hier ist ein Beispiel für die Funktion, die in einigen erfundenen Daten in Aktion ist:

%Vor%

Übrigens, mit den von Ihnen bereitgestellten Beispieldaten, wo ich glaube, dass es einen Fehler in einem Ihrer Bereiche gab (alle wurden durch Bindestriche getrennt, mit Ausnahme eines durch Komma getrennten), da strsplit a verwendet Regulärer Ausdruck standardmäßig zum Aufteilen, können Sie die Funktion wie folgt verwenden:

%Vor%     
A5C1D2H2I1M1N2O1R2T1 21.09.2013, 09:29
quelle
4

Ich habe es so geschrieben, um klar zu erklären, wie es funktioniert. Eine kompaktere Version ist angehängt.

%Vor%

Die kompakte Version -

BEARBEITEN: Wurde auf @ AnandaMahtos Vorschlag in eine Funktion geändert. Verwenden Sie auch allgemeinere Variablennamen.

%Vor%     
TheComeOnMan 24.09.2013 19:37
quelle
3
%Vor%

Bei der Verallgemeinerung auf einen gewichteten Median muss möglicherweise nach einem Paket gesucht werden, das über solche verfügt.

    
42- 19.09.2013 08:39
quelle
0

Haben Sie median oder apply(yourobject,2,median) versucht, wenn es sich um matrix oder data.frame handelt?

    
Pop 19.09.2013 07:16
quelle
0

Was ist mit diesem Weg? Erstellen Sie Vektoren für jede Gehaltsgruppe, wobei eine gleichmäßige Verteilung über jede Bandbreite angenommen wird. Dann mache aus diesen Vektoren einen großen Vektor und nimm den Median. Ähnlich wie Sie, aber ein etwas anderes Ergebnis. Ich bin kein Mathematiker, daher könnte die Methode falsch sein.

%Vor%

Gibt 1915,353

zurück     
SJC 23.09.2013 06:54
quelle
-2

Ich denke, dieses Konzept sollte dir helfen.

%Vor%     
Mohammad Ismail Khan 26.09.2013 11:22
quelle

Tags und Links