"normalv" <- function(x, grafik = FALSE, Grafiktitel = "") { #----------------------------------------------- # Kennzahlen zur Normalverteilungsprüfung # # Siehe: www.faes.de -> Lexikon -> Normalverteilung, # Abweichung von # # Entwickelt durch: G. Faes # E-Mail: guenter@faes.de # Datum: 15.02.2008 19:46:20 Version: 2.0 #----------------------------------------------- # Der Datensatz wird als Vektor der Funktion übergeben. # Der Vektor wird auf fehlende Werte überprüft und deren # vorhandensein berücksichtigt. # Es wird die Schiefe, Wölbung, die 5-Punkte-Zusammenfassung # und der Kolmogorov-Smirnov-Test ausgegeben. # # Wird grafik=T gesetzt, werden die Daten als Histogramm, # Dichteverteilung und Q-Q-Plot ausgegeben werden. # Das orginäre Testergebnis wird verdeckt zurückgegeben. #----------------------------------------------- # Variablenindizierung: Daten <- NULL # Übergebene Daten Datenbezeichnung <- "" # Nimmt, wenn vorhanden, die Bezeichnung des Datensatzes auf FehlendeWerte <- NULL # Zur Prüfung auf fehlende Werte Info.FW <- "Datensatz komplett" # Fehlende Werte vorhanden? n.Werte.ohne.FW <-NULL # Anzahl der Werte ohne fehlende... s.abw <- NULL # Standarbabweichung mw <- NULL # Mittelwert schiefe <- NULL # Schiefe, Momentkoeffizient a3 woelbung <- NULL # Wölbung, Momentkoeffizient a4 Zusammenfassung <- NULL # 5-Punkte-Zusammenfassung KS.Test <- NULL # Kolmogoroff-Smirnov-Test, Normalverteilung Grafiktitel <- "" # Nimmt den Grafiktitel auf QQ.Y.Achse <- "" # Nimmt die Datensatzbezeichnung auf Temp <- NULL # Zwischenspeicherung... # Berechnungsteil: # Eingabedaten zuweisen: Temp <- names(x) # Trick, um eine List(data.frame)-Struktur zu erkennen! if (is.null(Temp)) { # Keine Namen.... Daten <- x } else { Daten <- x[[1]] Datenbezeichnung <- Temp[1] } # Auf fehlende Werte prüfen: FehlendeWerte <- (na.omit(Daten)) if (length(Daten) != length(FehlendeWerte)) { Info.FW = "Fehlende Werte vorhanden!" #Fehlende Werte vorhanden Daten <- FehlendeWerte # Umspeichern } # Anzahl der Werte nach dem Prüfen sichern: n.Werte.ohne.FW <- length(Daten) # Mittelwert und Standardabweichung berechnen: mw <- mean(Daten, na.rm = T) s.abw <- sd(Daten, na.rm = T) # Schiefe: schiefe <- (sum((Daten - mw)^3) / length(Daten))/ s.abw^3 # Wölbung: woelbung <- ((sum((Daten - mw)^4) / length(Daten))/ s.abw^4) - 3 # 5-Punkte-Zusammenfassung: Zusammenfassung <- summary(Daten) # KS-Test auf Normalverteilung: KS.Test <- ks.test(Daten, "pnorm", mw, s.abw) # Ergebnisausgabe: # Grafiken ausgeben? if (grafik == T) { # Ausgabebildschirm 2-teilen: split.screen(c(2,1)) # Ausgabe im 1. Teil: screen(1) # Q-Q-Plot: Grafiktitel <- "Q-Q-Plot:" Grafiktitel <- paste(Grafiktitel, Datenbezeichnung) QQ.Y.Achse <- Datenbezeichnung qqnorm(Daten, main = Grafiktitel, xlab = "Quantile der Standardnormalverteilung", ylab = QQ.Y.Achse) qqline(Daten) # Ausgabe im 2. Teil: screen(2) Grafiktitel <- "Histogramm/Dichtefunktion:" Grafiktitel <- paste(Grafiktitel, Datenbezeichnung) hist(Daten, main = Grafiktitel, xlab = "Klassen", freq = F) lines(density(Daten)) } # Konsolenausgabe: cat("\n") cat(" Kennzahlen zur Normalverteilung", "\n", "\n") if (Datenbezeichnung != "") { cat(" Testdatenbezeichnung: ", Datenbezeichnung, "\n") } cat("Anzahl der übergebenen Werte: ", n.Werte.ohne.FW, "\n") cat(" Mittelwert: ", mw, "\n") cat(" Standardabweichung: ", s.abw, "\n") cat(" Schiefe: ", schiefe, "\n") cat(" Wölbung: ", woelbung, "\n", "\n") cat(" 5-Punkte-Zusammenfassung:", "\n") cat(" Kleinster Wert: ", Zusammenfassung[[1]], "\n") cat(" 1. Quantile: ", Zusammenfassung[[2]], "\n") cat(" Median: ", Zusammenfassung[[3]], "\n") cat(" 3. Quantile: ", Zusammenfassung[[5]], "\n") cat(" Größter Wert: ", Zusammenfassung[[6]], "\n", "\n") cat(" Kolmogoroff-Smirnov-Test: ", "\n") cat(" Prüfgröße: ", KS.Test$statistic, "\n") cat(" Wahrscheinlichkeit (p-Wert): ", KS.Test$p.value, "(",round(KS.Test$p.value*100, digits = 1) ,"%-iges Zutreffen der Normalverteilung)", "\n") # Funktionsausgabe: Ausgabe <- list(Schiefe = schiefe, Wölbung = woelbung, Zusammenfassung = Zusammenfassung, KS_Test = KS.Test) invisible(Ausgabe) } # Funktions-Ende