Normalverteilungskurve in Histogramm einzeichnen
Normalverteilungskurve in Histogramm einzeichnen
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?
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?
Re: Normalverteilungskurve in Histogramm einzeichnen
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 ...
Re: Normalverteilungskurve in Histogramm einzeichnen
Vielen dank, das klingt sinnvoll! Wo genau in den „curve-Befehl“ muss ich denn die Multiplikation reinschreiben? Und in welcher Form? Einfach „*n“?
Re: Normalverteilungskurve in Histogramm einzeichnen
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)
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)
Re: Normalverteilungskurve in Histogramm einzeichnen
Das hat funktioniert, vielen Dank
Re: Normalverteilungskurve in Histogramm einzeichnen
Jetzt noch eine letzte Frage: Ich habe jetzt folgendes eingegeben:
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?
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)
Zuletzt geändert von Tschaui am Mo Jul 22, 2019 2:51 pm, insgesamt 2-mal geändert.
Re: Normalverteilungskurve in Histogramm einzeichnen
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)
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)
Re: Normalverteilungskurve in Histogramm einzeichnen
Das ändert leider nichts, trotzdem werden mir die letzten beiden Kurven nicht angezeigt.
Re: Normalverteilungskurve in Histogramm einzeichnen
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:
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
Zum Beispiel könntest Du das Ergebnis von folgendem posten:
Code: Alles auswählen
dput(Datensatz_Projektarbeit[c("SIB_BOND", "COND")])
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Normalverteilungskurve in Histogramm einzeichnen
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:
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
Grund: Formatierung verbessert, siehe http://forum.r-statistik.de/viewtopic.php?f=20&t=29