Das Zeichnen eines Histogramms mit einer Dichtekurve, die bei nicht standardisierten Daten zu 1 aufsummiert, ist lächerlich schwierig. Es gibt bereits viele Fragen dazu, aber keine ihrer Lösungen funktioniert für meine Daten. Es muss eine einfache Lösung geben, die einfach funktioniert. Ich kann keine Antwort mit einer einfachen Lösung finden, die funktioniert.
Einige Beispiele:
Lösung funktioniert nur mit standardisierten normalen Daten ggplot2: Histogramm mit Dichtekurve überlagern
mit diskreten Daten und keiner Dichtekurve ggplot2 Dichte Histogramm mit der Breite = .5, vline und zentrierte Balkenpositionen
keine Antwort Overlay-Dichte und Histogramm-Plot mit ggplot2 mit benutzerdefinierte Behälter
Dichten werden in meinen Daten nicht zu 1 addiert Erstellen eines Dichte-Histogramms in ggplot2?
ergibt für meine Daten nicht den Wert 1 ggplot2-Dichte-Histogramm mit benutzerdefinierten Fachkanten
lange Erklärung hier mit Beispielen, aber Dichte ist nicht 1 mit meinen Daten "Dichte" -Kurve überlagert im Histogramm wo vertikale Achse ist Frequenz (aka Zählung) oder relative Frequenz?
-
Ein Beispielcode:
%Vor%Also summiert sich die Dichte nicht zu 1.
%Vor%Es hat etwas geändert, aber nicht richtig.
%Vor%Keine Änderung dort.
%Vor%Immer noch falsche Dichtekurve, aber jetzt ist das Histogramm auch falsch.
Um sicher zu sein, habe ich 4 Stunden damit verbracht, alle möglichen Kombinationen von ..Zählung .. und ..Summe .. und ..Dichte zu versuchen. Aber da ich keine Dokumentation darüber finde, wie diese angenommen werden zu arbeiten, es ist semi-blind Versuch und Irrtum.
Also gab ich auf und vermied es, mit ggplot2 die Daten zusammenzufassen.
Also zuerst müssen wir die richtigen Proportionen daten.frame bekommen, und das war nicht so einfach:
%Vor%Dies ergibt die Art von zusammenfassenden Daten, die wir wollen:
%Vor%Jetzt müssen wir es nur plotten. Sollte einfach sein ...
%Vor% Ähm, nicht ganz, was ich wollte. Um sicher zu sein, habe ich es ohne stat = "identity"
in geom_density versucht, zu welchem Zeitpunkt es sich darüber beschwert hat, kein y zu haben.
Noch seltsamer.
Okay, vielleicht geben wir die Dichtekurve aus den Zusammenfassungsdaten auf. Vielleicht müssen wir die Ansätze ein wenig mischen ...
%Vor%Ok, zumindest ist die Form jetzt richtig. Jetzt müssen wir es irgendwie verkleinern.
%Vor%Sieht so aus, als hätten wir einen Gewinner. Außer dass die Nummer fest codiert ist.
%Vor%Nun, ich hätte fast erwartet, dass es funktioniert. Jetzt habe ich versucht, einige .. 's hier und da, auch ..count .. und ..sum .., der erste, der ein anderes falsches Ergebnis gab, die zweite, die einen Fehler gab. Ich habe auch versucht, einen Multiplikator (mit 1/20), kein Glück.
%Vor%Also, ich habe endlich die richtige Figur (ich denke; ich hoffe).
Bitte sagen Sie mir, es gibt einen einfacheren Weg, dies zu tun.
PS. Der get()
Trick funktioniert anscheinend nicht innerhalb einer Funktion. Ich hätte hier eine funktionierende Funktion für den zukünftigen Gebrauch angebracht, aber das war auch nicht so einfach.
Lesen Sie zuerst Wickham zu den Dichten in R und achten Sie auf die Schwächen und Merkmale jedes Pakets / Funktion.
Die Dichten summieren sich zu 1, aber das bedeutet nicht, dass die Kurvenlinie / Punkte nicht über 1 gehen.
Im Folgenden werden sowohl dies als auch die Ungenauigkeit von (mindestens) den Voreinstellungen von density
im Vergleich zu, sagen wir, KernSmooth::bkde
angezeigt (mit Hilfe von Grunddiagrammen für die Kürze der Eingabe):
Machen Sie dasselbe für die Beta-Verteilung:
%Vor% %Vor% auc
und integrate.xy
benutzen beide die Trapezregel, aber ich habe sie beide ausgeführt, um das zu zeigen und die Ergebnisse von zwei verschiedenen Funktionen zu zeigen.
Der Punkt ist, dass die Dichten tatsächlich zu 1 summieren, trotz der Werte der y-Achse, die zu der Annahme führen, dass dies nicht der Fall ist. Ich bin mir nicht sicher, was Sie mit Ihren Manipulationen zu lösen versuchen.