############################################################################### ## Inhalt: ## Kapitel 2 (Einfache Explorative Datenanalyse) ## des R-Kurses von Ruckdeschel & Kohl ############################################################################### ############################################################################### ## Bitte lesen Sie die Abschnitte 2.1.1 und 2.1.2 im Skript sowie die Seite 1 ## in 'EinfacheExplorativeDatenanalyse.pdf'. ############################################################################### ############################################################################### ## Verteilungen in R ## Die in der Standardinstallation von R vorhandenden Verteilungen sind ## in Tabelle 2.1.1 im Skript dargestellt. ## Neben diesen gibt es noch viele weitere Verteilungen, die in Zusatzpaketen ## installiert sind; vgl. die Pakete BiasedUrn, bs, distributions, evd, ## gamlss.dist, gamlss.tr, ghyp, gld, HI, HyperbolicDist, ig, lmomco, ## mnormt, modeest, mvtnorm, mvtnormpcs, normalp, poilog, POT, skewt, sn, ## SuppDists, tdist, triangle (möglicherweise unvollständig) ## Pakete von Ruckdeschel, Kohl, Stabla und Camphausen ## distr, distrEx, distrDoc (und distrSim, distrTEst) ## Aktuelle Version 1.9 ## Objekt-orientierte Umsetzung der Standardverteilungen in R ## vgl. Abschnitt 2.2 im Skript. library(distr) ## Dichte, Verteilungsfunktion und Quantilfunktion der Standardnormalverteilung plot(Norm(), lwd = 2) ## Wahrscheinlichkeitsfunktion, Verteilungsfunktion und Quantilfunktion ## einer Binomialverteilung plot(Binom(size = 10, prob = 0.5)) ## Die distr-Familie bietet viel zusätzliche Funktionalität ## z.B. Berechung von Erwartungswert, Varianz, Schiefe, Wölbung oder ## Faltung von Verteilungen ## Desweiteren: Berechnung von Abständen zwischen Verteilungen ## Mehr in der Vignette zur distr-Familie die im Paket distrDoc enthalten ist. library(distrEx) ?E ?var ## Erwartungswert E(Norm(mean = 2)) E(Pois(), fun = abs) E(Cauchy()) ## Varianz und Streuung var(Fd(df2 = 5)) var(Hyper()) sd(Chisq()) ## IQR, Median, MAD IQR(Unif()) median(Exp()) mad(Logis()) ## Schiefe und Wölbung skewness(Lnorm()) kurtosis(Gammad()) ## Abstände zwischen Verteilungen KolmogorovDist(Norm(), (Binom(size = 100)-50)/sqrt(25)) TotalVarDist(Norm(), Exp()/sqrt(25)) HellingerDist(Norm(), DExp()/sqrt(25)) ## Faltung N <- Norm() B <- Binom(size = 10, prob = 0.1) NB <- N + B plot(NB) ## Illustration von CLT (Zentraler Grenzwertsatz) und ## LLN (Gesetz der Großen Zahlen) illustrateCLT(Binom(size = 2, prob = 0.1), len = 50) illustrateLLN(Binom(size = 2, prob = 0.7)) ## weitere Einzelheiten vignette('distr') ############################################################################### ## Einfache univariate Datenanalyse ## Lesen Sie Seite 2 in 'ExplorativeDatenanalyse.pdf'. ############################################################################### ## Patientendaten mit folgenden Variablen ## Patient: Patientennummer (1 - 31) ## Gruppe: Ausprägung einer bestimmten Erkrankung (schwach, mittel, stark) ## CRP: C-reaktives Protein (Entzündungsmarker) Werte in [0,Inf) ## SIRS-Kriterien: (Systemic Inflammatory Response Syndrom) 0, 1, 2, 3, 4 Daten <- read.csv2(file = 'PatientenDaten.csv') Daten str(Daten) ## Gruppe: kategoriell - nominal (evtl. ordinal) ## CRP: quantitativ ## SIRS-Kriterien: 0, 1, 2, 3, 4 ########################################################### ## Berechnung univariater Kenngrößen ########################################################### ## Wir fügen den Datensatz zum Suchpfad hinzu. attach(Daten) ####################################### ## 1. Analyse der Variable 'Gruppe' ## kategorielles Merkmal (nominal, evtl. ordinal) ####################################### ## Absolute Häufigkeiten (res1 <- table(Gruppe)) ## Modus (häufigster Wert) names(res1)[which.max(res1)] ## Häufigkeit für den Modus max(res1) ####################################### ## 2. Analyse der Variable 'SIRS-Kriterien' ## ordinales Merkmal ####################################### ## Absolute Häufigkeiten (res2 <- table(SIRS.Kriterien)) ## Modus (häufigster Wert) names(res2)[which.max(res2)] ## Häufigkeit für den Modus max(res2) ## Median median(SIRS.Kriterien) ## Quantile quantile(SIRS.Kriterien, probs = c(0.01, 0.05, 0.95, 0.99)) ## Quartile quantile(SIRS.Kriterien, probs = c(0.25, 0.75)) ## Spannweite range(SIRS.Kriterien) ## Interquartilsabstand IQR(SIRS.Kriterien) ## Zusammenfassungen #stem(SIRS.Kriterien) fivenum(SIRS.Kriterien) summary(SIRS.Kriterien) ## Vorsicht beim Mittelwert! - 'nur' ordinales Merkmal ####################################### ## 3. Analyse der Variable 'CRP' ## Intervall- oder evtl. sogar Ratioskala ####################################### ## Absolute Häufigkeiten (res3 <- table(CRP)) ## hier wenig sinnvoll, genauso wenig Modus! ## Median median(CRP) ## Problem CRP enthält NA = not available = missings ## Wie viele? sum(is.na(CRP)) ## Lasse diese bei der Berechnung des Medians weg! median(CRP, na.rm = TRUE) ## Quantile quantile(CRP, probs = c(0.01, 0.05, 0.95, 0.99), na.rm = TRUE) ## Quartile quantile(CRP, probs = c(0.25, 0.75), na.rm = TRUE) ## Mittelwert mean(CRP, na.rm = TRUE) ## Spannweite range(CRP, na.rm = TRUE) ## Interquartilsabstand IQR(CRP, na.rm = TRUE) ## Standardabweichung sd(CRP, na.rm = TRUE) ## Variationskoeffizient sd(CRP, na.rm = TRUE)/mean(CRP, na.rm = TRUE) ## Schiefe, Wölbung library(e1071) skewness(CRP, na.rm = TRUE) kurtosis(CRP, na.rm = TRUE) ## Zusammenfassungen stem(CRP) ## NAs werden bei der Berechnung weggelassen fivenum(CRP) ## Default: na.rm = TRUE! summary(CRP) ## NAs mitgezählt ########################################################### ## Graphische Darstellung ## Lesen Sie Seite 3 und 4 in 'ExplorativeDatenanalyse.pdf'. ########################################################### ####################################### ## 1. Analyse der Variable 'Gruppe' ## kategorielles Merkmal (nominal, evtl. ordinal) ####################################### ## Säulendiagramm barplot(table(Gruppe)) ## Kuchendiagramm pie(table(Gruppe)) ####################################### ## 2. Analyse der Variable 'SIRS-Kriterien' ## ordinales Merkmal ####################################### ## Säulendiagramm barplot(table(SIRS.Kriterien)) ## Kuchendiagramm pie(table(SIRS.Kriterien)) ####################################### ## 3. Analyse der Variable 'CRP' ## Intervall- oder evtl. sogar Ratioskala ####################################### ## Boxplot boxplot(CRP) ## Histogramm hist(CRP) ## Etwas feiner Unterteilung der Klassen wäre schön hist(CRP, breaks = 15) ## Empirische Verteilungsfunktion plot(ecdf(CRP)) ## Häufigkeitspolygon library(MASS) frequency.polygon(CRP[!is.na(CRP)]) ## Dichteschätzung plot(density(CRP, na.rm = TRUE)) ## CRP sieht nicht sonderlich normalverteilt aus ## Bestätigt auch der qq-Plot qqnorm(CRP) qqline(CRP) ## Problem viele statistische Verfahren haben als ## Voraussetzung die Normalverteilungsannahme! ## Gibt es vielleicht eine Transformation, die unsere ## Daten (näherungsweise) normalverteilt macht. ## Box-Cox Potenz-Transformationen ## Verwende anstelle der Variable X die Variable ## Y = (X^lambda - 1)/lambda für lambda != 0 ## Y = log(X) für lambda = 0 boxcox(CRP ~ 1) ## => log-Transformation der CRP-Daten par(mfrow = c(1, 2)) qqnorm(CRP) qqline(CRP) qqnorm(log(CRP)) qqline(log(CRP)) ## Sieht besser aus ... ## Zum Abschluss library(BSDA) EDA(CRP) EDA(log(CRP)) ## 'Testen' auf Normalität ## zusätzlich noch Shapiro-Wilk-Test (-> später) ntester(CRP) ntester(log(CRP))