################################################################################ ## Einführung in R ## Modul 2: Kennzahlen ################################################################################ ## copyfree, Oktober 2007 ################################################################################ ## Dr. Fränzi Korner-Nievergelt ## oikostat - Statistische Analysen und Beratung ## Ausserdorf 43 ## CH - 6218 Ettiswil ## Tel.: +41 (0) 41 980 49 22 ## fraenzi.korner@oikostat.ch ## www.oikostat.ch ################################################################################ ## Inhalt ################################################################################ ## 1. Daten bereitstellen ## 2. Kennzahlen einer Stichprobe ## 3. Kennzahlen mehrerer Stichproben (gruppiert nach Kategorien) ## 4. Zusammenfassung kategorieller Daten ## 1. Vorbereitung der Daten ################################################################################ ## In den folgenden Codes wird der Beispielsdatensatz erzeugt. Erklärungen ## zu den Codes und zum Arbeiten mit der R-Console finden Sie in Modul 1. nm<-12 # Anzahl Männchen, z.B. Grünfink nw<-14 # Anzahl Weibchen set.seed(2353) # Zufallszahlengenerator einstellen, damit später wieder die gleichen Zufallszahlen generiert werden fluegelm<-round(rnorm(nm, mean=77.8, sd=1.35), digits=1) fluegelw<-round(rnorm(nw, mean=74.6, sd=1.74), digits=1) # Angabe von Mittelwert und Standardabweichung aus Cramp (1994) dat<-data.frame(sex=c(rep("M", nm), rep("W", nw)), fluegel=c(fluegelm, fluegelw)) # Vektoren zu einem Datenfile zusammenstellen # Datenfile anschauen str(dat) # die Struktur eines Datenfiles betrachten # Wie Sie Daten einlesen (anstelle von erfinden) ist im Modul 1 beschrieben. ## 2. Kennzahlen einer Stichprobe ################################################################################ summary(dat) # liefert für jede Variable in dat eine Auswahl an Kennzahlen length(dat$fluegel) # Länge der Variable "fluegel" sum(!is.na(dat$fluegel)) # Anzahl Beobachtungen in der Variable fluegel (Länge ohne die [fehlenden] fehlenden Werte) dim(dat) # Dimensionen von dat (Anzahl Zeilen und Anzahl Spalten) min(dat$fluegel) # Minimum der Variable fluegel max(dat$fluegel) # Maximum median(dat$fluegel) # Median quantile(dat$fluegel, prob=0.25) # Erster Quartil quantile(dat$fluegel, prob=0.75) # Drittes Quartil # Mittelwert mean(dat$fluegel) # Mittelwert der Flügellänge sd(dat$fluegel) # Standardabweichung der Flügellänge # Für den Standardfehler des Mittelwertes existiert keine vorprogrammierte Funktion. ## Man muss sie selbern schreiben: semean<-function(x, na.rm=FALSE) sd(x, na.rm=na.rm)/sum(!is.na(x)) semean(dat$fluegel) # Standardfehler des Mittelwertes von Flügellänge ## Folgender Code erweitert das Datenfile dat um "Gewicht" und "Alter" dat$Alter<-c(rep(3, 8), rep(4, 4), rep(3, 8), rep(4, 6)) # Variable Alter einfügen dat$sex01<-as.numeric(dat$sex)-1 dat$Alter01<-as.numeric(dat$Alter)-3 set.seed(16523) dat$Gewicht<- -3-0.5*dat$sex01+0.2*dat$Alter01+0.3*dat$fluegel+round(rnorm(length(dat$sex), 0, 0.9), 1) # Zeileinweise oder Spaltenweise Kennzahlen berechnen tabelle<-matrix(rnorm(15), ncol=3) # 5x3-Tabelle erzeugen. Zahlen sind Zufallszahlen aus einer Normalverteilung tabelle apply(tabelle, 2, mean) # Mittelwert pro Spalte apply(tabelle, 1, mean) # Mittelwert pro Zeile ## 3. Kennzahlen mehrerer Stichproben (gruppiert nach Kategorien) ################################################################################ tapply(dat$fluegel, dat$sex, mean) # Mittelwert der Flügellänge pro Geschlecht tapply(dat$fluegel, dat$sex, sd) # Standardabweichung der Flügellänge pro Geschlecht tapply(dat$fluegel, dat$sex, semean) # Standardfehler des Mittelwertes der Flügellänge pro Geschlecht. # Die Funktion semean wurde in Kapitel 2 erzeugt. ## 4. Zusammenfassung kategorieller Daten ################################################################################ # Kontingenztabellen table(dat$sex) table(dat$sex, dat$Alter) # Anzahl Beobachtungen pro Alter und Geschlecht tabelle<-table(dat$sex, dat$Alter) # Anzahl Beobachtungen pro Alter und Geschlecht unter "tabelle" abspeichern prop.table(tabelle) # Anteil pro Alters- und Geschlechtskategorie (100 % = 26) prop.table(tabelle, margin=1) # Anteil der Altersklassen pro Geschlecht (100 % = 12, rsp. 14) prop.table(tabelle, margin=2) # Anteil der Geschlechter pro Altersklasse (100 % = 16, rsp. 10) ## Dank ################################################################################ ## Dieses Dokument entstand für einen Einführungskurs in R an der DO-G-Tagung ## vom 29. September - 3. Oktober 2007 in Giessen ## Folgenden Personen danke ich herzlich für die Unterstützung und die Werbung: ## Dr. Ommo Hüppop, Dr. Heiko Schmaljohann, Dr. Wolfgang Fiedler, ## Dr. Thomas Gottschalk, Holger Schielzeth, Dr. Roger Mundry und Dr. Boris Schröder