Normalverteilungskurve in Histogramm einzeichnen

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

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

Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Tschaui » Fr Jul 19, 2019 8:48 pm

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: 292
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von Athomas » Fr Jul 19, 2019 9:32 pm

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 » Fr Jul 19, 2019 11:33 pm

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: 346
Registriert: Fr Okt 07, 2016 9:52 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von student » Sa Jul 20, 2019 8:37 am

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

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 » Sa Jul 20, 2019 9:06 am

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 » Sa Jul 20, 2019 9:51 am

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: 346
Registriert: Fr Okt 07, 2016 9:52 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von student » So Jul 21, 2019 9:39 am

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

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 » So Jul 21, 2019 12:37 pm

Das ändert leider nichts, trotzdem werden mir die letzten beiden Kurven nicht angezeigt.

bigben
Beiträge: 1129
Registriert: Mi Okt 12, 2016 9:09 am

Re: Normalverteilungskurve in Histogramm einzeichnen

Beitrag von bigben » Mi Jul 24, 2019 1:25 pm

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

Antworten