Normalverteilungskurve in Histogramm einzeichnen

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Tschaui
Beiträge: 7
Registriert: Fr Jul 19, 2019 8:36 pm

Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui »

Hallo,
ich soll für ein Projekt eine graphische Überprüfung auf Normalverteilung durchführen. Mit einem Quantil-Quantil-Diagramm klappt es irgendwie nicht so gut. Deswegen, und weil ich es optisch schöner finde, wollte ich ein Histogramm mit Normalverteilungskurve erstellen. Dafür habe ich folgende Befehle verwendet:
hist(subset(Datensatz_Projektarbeit$Mittelwert, Datensatz_Projektarbeit$COND == "closeness"), main = "Mittelwert; COND: closeness", xlim = c(1,7))

curve(dnorm(x, mean = mean(subset(Datensatz_Projektarbeit$Mittelwert, Datensatz_Projektarbeit$COND == "closeness")), sd= sd (subset(Datensatz_Projektarbeit$Mittelwert, Datensatz_Projektarbeit$COND == "closeness"))), add=T)
Der Datensatz heißt "Datensatz_Projektarbeit", ich möchte die Normalverteilung der Mittelwerte berechnen (diese haben eine eigen Spalte im Datensatz). Aber ich möchte nur die berücksichtigen, die in der Spalte "COND" die Eigenschaft "closeness" haben. Das Histogramm sieht schon recht überzeugend aus, aber mit der Normalverteilung kann irgendetwas nicht stimmen. Kann mir vielleicht irgendjemand sagen, wo mein Fehler liegen könnte?
Dateianhänge
So sieht bei mir das Histogramm mit der normalverteilungskurve aus.
So sieht bei mir das Histogramm mit der normalverteilungskurve aus.
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Athomas »

Wenn Du die Dichte (die ja die "Fläche" 1 mit der x-Achse einschließt) mit der Anzahl der Beobachtungen (die Fläche des Histograms) multiplizierst, sollte etwas Vernünftiges rauskommen ...
Tschaui
Beiträge: 7
Registriert: Fr Jul 19, 2019 8:36 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui »

Vielen dank, das klingt sinnvoll! Wo genau in den „curve-Befehl“ muss ich denn die Multiplikation reinschreiben? Und in welcher Form? Einfach „*n“?
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von student »

Wenn Du in der Histogrammdarstellung auch auf Dichte wechselst (freq = FALSE) müsste das doch direkt klappen!?
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Tschaui
Beiträge: 7
Registriert: Fr Jul 19, 2019 8:36 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui »

Das hat funktioniert, vielen Dank
Tschaui
Beiträge: 7
Registriert: Fr Jul 19, 2019 8:36 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui »

Jetzt noch eine letzte Frage: Ich habe jetzt folgendes eingegeben:

Code: Alles auswählen

hist(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "closeness"), main = "SIB_BOND; COND: closeness", xlim= c(1,7), xlab = "Wert auf der Skala", ylab = "Anzahl", breaks = seq(1,7, length=7), freq = FALSE)
curve(dnorm (x, mean = mean(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "closeness")), sd= sd (subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "closeness"))), add=T)

hist(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit_$COND == "distance"), main = "SIB_BOND;COND: Distance", xlim= c(1,7), xlab = "Wert auf der Skala", ylab = "Anzahl", breaks = seq(1,7, length=7), freq = FALSE)
curve(dnorm (x, mean = mean(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "distance")), sd= sd (subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "distance"))), add=T)

hist(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "intermediate"), main = "SIB_BOND;COND: intermediate", xlim= c(1,7), xlab = "Wert auf der Skala", ylab = "Anzahl", breaks = seq(1,7, length=7), freq = FALSE)
curve(dnorm (x, mean = mean(subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "intermediate")), sd= sd (subset(Datensatz_Projektarbeit$SIB_BOND, Datensatz_Projektarbeit$COND == "intermediate"))), add=T)
Damit möchte ich jeweils Histogramm und Normalverteilungskurve für die drei Konditionen ("closeness", "intermediate" und "distance") erstellen. Bei dem ersten Histogramm klappt das auch, aber bei den anderen beiden wird mit die Normalverteilungskurve nicht mehr angezeigt... Hat jemand eine Idee, woran das liegen könnte?
so sieht es aus, wenn ich alle Befehle ausgeführt habe
so sieht es aus, wenn ich alle Befehle ausgeführt habe
Zuletzt geändert von Tschaui am Mo Jul 22, 2019 2:51 pm, insgesamt 2-mal geändert.
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von student »

Versuch doch mal mit der Grafikfunktion par() zu arbeiten....
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
Tschaui
Beiträge: 7
Registriert: Fr Jul 19, 2019 8:36 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui »

Das ändert leider nichts, trotzdem werden mir die letzten beiden Kurven nicht angezeigt.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von bigben »

1. Einen offensichtlichen Fehler sehe ich nicht, aber die Codezeilen sind auch recht lang und damit unübersichtlich ausgefallen. Ich vermute, dass sich im zweiten und im dritten subset fehlende Werte (NA) befinden. Wenn das so ist, dann berechnet mean keinen Mittelwert und sd keine Standardabweichung und ohne diese beiden Werte kann curve keine Kurve zeichnen. Bitte poste einen Beispieldatensatz, mit dem wir Deinen Code ausprobieren und das Problem auf unseren Rechnern reproduzieren können.
Zum Beispiel könntest Du das Ergebnis von folgendem posten:

Code: Alles auswählen

dput(Datensatz_Projektarbeit[c("SIB_BOND", "COND")])
2. Bitte schreibe, ob R beim Ausführen Deines Codes irgendwelche Warnungen oder Fehlermeldungen ausgegeben hat.
3. Wenn Du im Aufruf von hist() folgendes setzt: "freq = FALSE" dann darfst Du die y-Achse nachher nicht mehr "Anzahl" nennen.
4. Bitte schreib nie add = T . Wenn Du an irgendeiner anderen Stelle findest, dass der Zeitpunkt Null ist und das mit einem T <- 0 ausdrückst, funktionieren auf einmal Deine Grafiken nicht mehr. Schreib add = True und dieser Fehler kann nicht mehr passieren.
5. Ich rate dringend zur Verwendung von code-Tags. Oben habe ich welche für Dich eingefügt. Siehe auch viewtopic.php?f=20&t=29

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
N00b
Beiträge: 16
Registriert: Di Dez 01, 2020 2:14 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von N00b »

Ich kram jetzt einfach mal das alte Thema hervor bevor ich ein neues aufmache...
Auch ich möchte gerne eine Normalverteilungskurve in meine Histogramme einfügen und habe die Formel mal nach meinen Eingaben umgeschrieben, leider ohne Erfolg... "'expr' muss eine Funktion, ein Aufruf oder ein Ausdruck sein, der 'x' enthält"

Warum einfach wenns auch kompiziert geht? Könnte ja auch mal was auf Anhieb funktionieren ohne das man frägt.
curve(dnorm(x4, mean = mean(x4), sd= sd (x4), add=T) <- abgeleitet von der Formel im Eröffnungspost

Aber hier gibt es zum Glück genug geduldige User die Ahnung von der Thematik haben, darum hier mal mein Code:

Code: Alles auswählen

x4 <- rbinom(10000,100,0.78)
hist(x=x4, main=expression(paste("Bernoulli Random Variables with\n",size,"=1 and", prob,"=0.78")), sub="Standardized Value of Sample Average", xlab = "n=100", ylab = "Probability")
curve(dnorm(x4, mean = mean(x4), sd = sd(x4), add=T)
Zuletzt geändert von jogo am Di Jan 05, 2021 8:54 am, insgesamt 1-mal geändert.
Grund: Formatierung verbessert, siehe http://forum.r-statistik.de/viewtopic.php?f=20&t=29
Antworten