====== Installation von R ====== Die Installationsdatei steht auf "Helios" in ''vision\Software\R-2.12.0-win.exe'' bereit. Nach der Installation kann man R entweder über das Icon auf dem Desktop oder über das Startmenu aufrufen. Für die Arbeit mit ''R'' wird empfohlen, für jedes Experiment einen getrennten Ordner, z.B. unterhalb "Eigene Dateien" anzulegen. Die Oberfläche ''RGui'' stellt dafür unter "Datei" einen Menupunkt "Verzeichnis wechseln" bereit. Ist das Verzeichnis einmal vorhanden, startet man R am besten durch Doppelklick auf den ''R Workspace'' in diesem Ordner. Außerdem befindet sich in diesem Ordner regelmäßig eine Datei ''.Rhistory'', welche einige der zuletzt benutzten Befehlszeilen enthält, außerdem die ggfls. von R erzeugten Ausgabedateien, Grafiken etc.. ====== Dateien vom Workshop ====== Die Dateien aus meinem Ordner ''R-demo'' sind auf "Helios" unter ''Diverses\R-Demo'' kopiert. Für die bisherigen Sitzungen kommentiere ich die leicht gekürzte ''.Rhistory''. ===== Dataframes, Import aus Excel, Selektieren von Spalten und Zeilen, Regression (nur numerische Variable) ===== ls() # noch alles leer aiga.some <- read.csv("some.csv") # Übernahme einer .csv-Datei von Excel in einen Dataframe ? read.csv # Aufruf der Dokumentation in den Browser aiga.some <- read.csv("some.csv",sep="\t") # für Trennung mit Tab-Zeichen aiga.some aiga.some <- read.csv("some.csv",dec=",") # für Dezimalkomma statt Punkt aiga.some colnames(aiga.some) <- c("VP","sFD","dynAsym","HPh","NF","X.1","sBaseL") # neue Spaltennamen aiga.some$HPh # Auswahl einer Spalte über Namen aiga.some[3] # " über Spaltennummer aiga2 <- read.table("aiga2.dat") # eine sehr breite Datei aiga2 aiga.some aiga.some$DV <- aiga2$DV # Übernahme einer Spalte aus der breiten Datei aiga.some$zuf<-rnorm(20) # eine Spalte mit 20 normalverteilen Zufallszahlen aiga.some$zuf = rnorm(20) # auch = statt <- ist erlaubt aiga.some <- read.csv("some.csv") # Zurücksetzen der versuchsweisen Bearbeitungen colnames(aiga.some) <- c("VP","sFD","dynAsym","HPh","NF","X.1","sBaseL") aiga.some$DV <- aiga2$DV aiga.some <-aiga.some[c(1,2,3,4,5,7,11)] # nur tatsächlich benötigte Spalten entnehmen print(aiga.some) # Anzeigen eines Objekts auf dem Bildschirm plot(aiga.some) # Plotten des Objekts local({fn<-choose.files(filters=Filters[c('R','txt','All'),],index=4) # Umsetzung eines Aufrufs aus dem File-Menu file.show(fn,header=fn,title='')}) quit() # Unterbrechung der Sitzung mit Abspeichern ? save # Hilfe zur Save-Funktion sFD ~ dynAsym + HPh + NF # symbolische Formel für die Regressionsgleichung lm(sFD ~ dynAsym + HPh + NF,aiga.some) # lm = linear model / Standard-Regressionsfunktion aiga.lm1 <- lm(sFD ~ dynAsym + HPh + NF,aiga.some) # Ablegen unter dem Namen aiga.lm1 print(aiga.lm1) summary(aiga.lm1) # Aufbereitung mit statistischen Kenngrößen plot(aiga.lm1) # diagnostische Plots lm(sFD ~ dynAsym + HPh + NF,aiga.some[-19,]) # Weglassen einzelner Zeilen (neg. Indizes) lm(sFD ~ dynAsym + HPh + NF,aiga.some[-c(11,19),]) # Bildung eines Subsets ohne Subj. TB lm(sFD ~ dynAsym + HPh + NF,subset(aiga.some,VP != "TB" )) lm(sFD ~ dynAsym + HPh + NF,subset(aiga.some,VP != "TB" & VP!="AS" )) quit() # das war's für heute ===== Umwandeln zwischen lang und breit, Umsortieren, Zeilennamen ===== ?reshape # Hilfe zur reshape-Funktion summary(Indometh) # Nachvollziehen des dort angegebenen Beispiels plot(Indometh) Indometh wide <- reshape(Indometh,dir="wide",idvar="Subject") # Umwandlung in Breitformat aiga2.long <- # erste 4 Spalten der breiten Datei in Langformat wandeln reshape(aiga2[1:4],dir="long",v.names="Cv",varying=2:4,idvar="VP") plot(conc~time,Indometh) # 2 Spalten plotten (Scatterplot) plot(conc~time,Indometh,col=as.numeric(Subject)) # Einfärbung nach Subject plot(aiga2[c(1,4,7)]) # Spalten 1,4,7 matrixartig plotten c(1,4,7) # Konstruktion verschiedener Vektoren c(1,4,7,13:16) 13:16 c(1,4,7,13:16,"a2") # Einmischung eines char-Strings c(1,4,7,13:16,a2) # Fehler, weil kein Objekt a2 vorhanden fix(aiga.some) # Aufruf des internen Editors aiga.some$tmp <-NA # eine Spalte mit NA aiga.some aiga.some$tmp <-NULL # Entfernung einer Spalte sort(aiga.some$HPh) # sortierte Werte einer Spalte order(aiga.some$HPh) # zugehörige Umordnung der Zeilenindizes ai <-aiga.some[order(aiga.some$HPh),] # Anwendung: umgeordneter dataframe ai$DV2 <- aiga2$DV # man beachte den Unterschied durch die Umordnung rownames(aiga2) rownames(aiga2) <-aiga2$VP # die breite Datei erhält hier Zeilennamen rownames(aiga2) ai$DV2 <- aiga2[ai$VP,]$DV # das ist jetzt richtig, aber leider nur zufällig quit() # Ende der Sitzung ===== Aggregieren nach Faktoren, Varianzanalyse, Regression mit Faktoren ===== ai$DV2 <- aiga2[as.character(ai$VP),]$DV # jetzt ist es wirklich richtig as.character(ai$VP) ai$VP # so sieht ein Faktor aus as.numeric(ai$VP) aiga2[order(aiga2$DV),] aiga2 <-aiga2[order(aiga2$DV),] # Umsortieren des Dataframe aiga2 ai$DV3 <- aiga2[as.character(ai$VP),]$DV ai ai$DV2 <- aiga2[ai$VP,]$DV # Beweis daß es ohne as.character() falsch ist ai aiga.some$VP <- as.character(aiga.some$VP) # dauernde Entfaktorisierung von aiga.some$VP ? read.table # Hilfe zur Vermeidung der Umwandlung in Faktor ?merge # empfohlene Funktion für Zusammenführung von Dataframes contrasts(aiga.some$VP) # Faktoren definieren Kontrastmatrizen contrasts(factor(c("m","w"))) # Faktor mit 2 Leveln contrasts(factor(c("j","m","a"))) # Faktor mit 3 Leveln levels(factor(c("j","m","a"))) options() options()$contrasts contrasts(ordered(c("j","m","a"))) # ordinal geordnete Faktoren plot(conc~time,Indometh) # Beispiel für nichtlinearen Zusammenhang lm(conc~time,Indometh) # Regression abline(lm(conc~time,Indometh)) # Plotten der Regressionslinie lm(1/conc~time,Indometh) # reziprok nahezu linear plot(1/conc~time,Indometh) abline(lm(1/conc~time,Indometh)) plot(conc~1/time,Indometh) # so geht es leider nicht plot(conc~I(1/time),Indometh) # Abhilfe mit Funktion I() plot(conc~(1/time),Indometh) lm(conc~Subject,Indometh) # wenig brauchbar, da Indometh$Subject geordneter Faktor ist Indometh$Subject lm(conc~Subject-1,Indometh) # Weglassen des Intercept-Terms ergibt sinnvolles Ergebnis # allgemeine Aggregatfunktion aggregate(Indometh$conc,list(Indometh$Subject),FUN=mean) aggregate(Indometh$conc,list(Indometh$Subject),FUN=median) aggregate(Indometh$conc,list(Indometh$Subject),FUN=sd) # Spaltennamen im Ergebnis vergeben aggregate(Indometh$conc,list(VP=Indometh$Subject),FUN=sd) aggregate(list(co.sd=Indometh$conc),list(VP=Indometh$Subject),FUN=sd) # zusätzliche Parameter für die aggregierende Funktion aggregate(Indometh$conc,list(Indometh$Subject),FUN=mean,trim=0.2) ===== robuste Verfahren ===== s. [[Fallbeispiel]] eines Datensatzes, bei dem gewöhnliche und robuste Statistik völlig unterschiedliche Ergebnisse liefern. ===== noch zu erklären ===== - Mixed-effects-Modelle (package ''lme4'')