Umweltanalysen mit R (Merkblatt) (PDF, 460 KB)

Merkblatt
2. Erste Schritte mit R und TINN-R
R-Homepage www.r-project.org
Arbeitsverzeichnis
getwd(): Aktuelles Arbeitsverzeichnis
setwd("C:/R"): Arbeitsverzeichnis wechseln
Pakete installieren und laden
library(): Auf dem Computer vorhanden Pakete
install.packages("gstat"): Paket installieren
require(stats): Paket laden.
Hilfe
R-Homepage: Häufige Fragen, Dokumente, Suchfunktion
CRAN-Webseite: Pakete
Menuleiste in R (auch offline)
?-Funktion, example-Funktion
TINN-R
Format/Selection Mode/Column: Spaltenmodus
Format/Block/Indent: Texteinzug
Format/Block/Comment: Auskommentieren
R/Controlling R/Remove all objects: Alle Objekte löschen
R beenden
objects(): Objekte einer Umgebung
rm(): Objekte löschen
q(): R beenden
3. Datenformate
Operatoren +, - , *, /, ^
Objektnamen Mit einem Buchstaben beginnen
Datentypen
Atomare Datentypen: NULL, logical, numeric, complex, character
Datentyp abfragen: mode(), .is-Funktion (z.B. is.character)
Der Datentyp umwandeln: .as-Funktion (z.B. as.numeric)
Datenstrukturen Vektoren, Matrizen, Arrays, Dataframes, Listen
Vektoren
Verketten c(3, 4)
Sequenzen seq(7, 2, by=-1), 7:2, seq(1, 4, length=8), seq( 1, 9, along(x))
Replikationen rep(2, 5)
Matritzen
matrix(data, nrow, ncol, byrow=TRUE): Matrix erstellen
rbind(), cbind(): Zeilen/Spalten anhängen
Dataframes
data.frame(A = c(7, 4), B = c("x", "z")): Dataframe erstellen
row.names(), names(): Zeilen/Spalten umbenennen
Spalten können von unterschiedlichem Datentyp sein
Listen
list(A = c(7, 4, 6, 8), B = c("x", "z")): Liste erstellen
Liste$Komponente: Komponenten abfragen
Komponenten müssen nicht gleich viele Elemente enthalten
Daten importieren
read.table(), read.csv(), read.csv2()
Trennungszeichen sep=";", Dezimalzeichen dec ="."
DATEI_PFAD <- "D:/Pfad/Datei.csv"
A <- read.table(DATEI_PFAD, sep = ";", dec = ",", header= T)
Daten exportieren
write.table(), write.csv(), write.csv2(); row.names = FALSE
write.table(A, file = DATEI_PFAD, sep = ";", dec = ",", row.names = F)
4. Datenauswahl
Indizieren von Vektoren
Auswahl x[c(2,4)], Ausschluss x[-5]
Indizieren von Matrizen/Dataframes
x[Zeilenindex, Spaltenindex]
Indizieren von Listen/Dataframes
Komponenten mit $- oder [[]]-Zeichen auswählen
Stationen[["Globalstrahlung"]]
Stationen$Globalstrahlung
Abfragen
Logische Abfragen: x > 3
which-Funktion: which (x > 3)
Logische Operatoren: == (gleich), != (ungleich), <, >, <=, >=,
& (und), | (oder)
Sortieren
sort(): Sortierter Vektor
order():Sortiere Indizes; Daten-Reihenfolge verändert
rank(): Rang; Daten-Reihenfolge unverändert
Kombiniertes Sortieren eines Dataframe
order(Spalte1, Spalte2)
Zahlen absteigend sortieren: order(-Spalte1, -Spalte2)
Buchstaben absteigend sortieren: order( -rank( Spalte1 ))
Datensätze vereinigen
merge(Daten1, Daten2, by.x="Spalte1", by.y="Spalte2", all.x = T/F)
Fehlende Werte (NA)
Identifizieren: is.na()
Entfernen: na.omit(), mean(x, na.rm = T), A [is.na(A)] <- 0
Symbol für fehlende Werte: ob_NA <- B == -9999; B[ob_NA] <- NA
Berechnungen mit Datum/Zeit
Addition einer Zahl: y <- x + 10
Logische Abfrage: y > x
Subtraktion von Objekten: y – x
Datum/Zeit exportieren
format(x, "%d.%m.%Y %H:%M")
Schleifen
for (i in 1:5) {x[i] <- x[i-1] + x[i+1]}
if(x > 5) {y <- 3} else {y <- 2}
Vektorwertig programmieren
Anwendung einer Funktion auf Zeilen(1) oder Spalten(2) einer Matrix
apply(x, 1, mean)
apply(x, 2, sum)
Analysen nach Faktoren
tapply(x, Faktor, sum)
Vektorwertiges Auswerten von Bedingungen
ifelse(x > 2, y <- x, 0)
6. Deskriptive Statistik
Devices
windows (oder nichts für Bildschirmausgabe), bmp, jpeg, pdf
DATEI_PFAD <- "D:/Pfad/Datei.bmp"
bmp(DATEI_PFAD, width = 500, height = 500)
plot(x, y)
dev.off()
plot-Funktion
plot (x, y). Attribute: col (Farbe), bg (Hintergrund), main (Überschrift),
xlab/ylab (Achsenbeschriftung), xlim/ylim (Grenzen der Achsen),
pch
type
5. Berechnungen
Vorgegebene Funktionen
Zusammenfassend: mean(), max(), min(), sum(), prod(), length(), nrow(),
ncol(), dim() = Dimensionen (Zeilen, Spalten) von Matrizen, Dataframes
Elementweise rechnend: sqrt(), abs(), round() = mathematisches
Runden, ceiling(), floor(), trunc(), exp(), log(), sin(), cos(), tan()
Konstanten: pi, exp(1)
Eigene Funktionen
Funktionsname <- function (Argumente) {Befehle}
Meine_Funktion <- function (x1, x2) {x2 ^ (x1 –x2)}
Zeichenfolgen
toupper(), tolower(), nchar(), substring(), paste()
substring("abcde" , 2, 4 ), substring ("abcde" , 2)
paste(c("a","b"), c("c","d"), sep ="_", collapse = NULL)
Datum/Zeit-Formate
Date-Format: Anzahl Tage seit dem 1.1.1970
POSIXct-Format: Anzahl Sekunden seit dem 1.1.1970
Formate: %s (Sekunden), %M (Minuten), %H (Stunden), %d (Tage),
%m (Monate), %Y (Jahre, 4 Ziffern), %y (Jahre, 2 Ziffern)
Ausführliche Format-Liste: ?strptime
Systemzeit des Computers: Sys.time()
Datum/Zeit importieren
as.Date(x, "%d.%m.%Y")
as.POSIXct(strptime(x, format="%d.%m.%Y %H:%M",
tz="GMT"), tz="GMT")
Zeitzonen: CET, CEST, GMT (hängt vom Computersystem ab)
Numerische Objekte aus Datum/Zeit
as.numeric(x)
Datum/Zeit aus numerischen Objekten
as.Date("1970-01-01") + x
DATEI_PFAD <- "D:/Pfad/Datei.bmp"
bmp(DATEI_PFAD, width = 500, height = 500)
plot(x, y,
main = "Sauerstoff und Temperatur",
xlim = c( 0, 30 ), ylim = c( 0, 15 ),
xlab = "Temperatur [°C]", ylab = "Gelöster Sauerstoff [mg/l]",
type = "p", pch = 24, col = "red", bg = "orange")
dev.off()
Farben
palette(), colors()
par-Funktion
cex (Streckungsfaktor), font (1 = normal, 2 = fett, 3 = kursiv, 4 = fett
und kursiv), lty (1=normal, 2=gestrichelt, 3=gepunktet, 4= StrichePunkte), log = "xy" (logarithmische Achsen), lwd (Liniendicke),
mar = c(5.1, 4.1, 4.1, 2.1) (Rand), oma = c(0, 0, 0, 0) (Aussenrand),
mex (Streckung des Rands), mfrow = c (2, 1) (Anordnung der
Grafiken), tcl = -0.5 (Länge der Achsenmarkierungen), xaxt/yaxt = "n"
(Zeichnen einer Achse).
Spezifische Parameter für cex und font:
.axis (Achsenzahlen),.lab (Achsenbeschriftung),.main (Überschrift)
Low-level Grafiken
points-Funktion
points (x, z, pch = 18, col = "red", cex = 2)
legend-Funktion. Attribute: bty (Legendenumrandung), pt.cex
(Streckung einzelner Symbole), x (x-Koordinate der linken oberen
Ecke), y (y-Koordinate der linken oberen Ecke).
legend(x = 4, y = 0.1, bty = "n", c("2003","2004"),
col = c("brown", "green"), pch = c(1,4), pt.cex = c(2,1.5))
Analyse-Funktionen (eine Datenreihe)
mean (Mittelwert), median (Median), sd (Standardabweichung), var
(Varianz), min (Minimum), max (Maximum), range (Spannweite),
quantile (Quantile), summary (Zusammenfassung)
L-Momente
Paket Lmoments; lmoments (x, rmax = 4)
Index Grafik plot(x)
Empirische Verteilung
n <- length(x)
Femp <- 1:n/(n+1)
plot (sort(x), Femp, type = "s")
Histogramm hist(x, breaks = seq (0, 200, 10))
Boxplot boxplot(x)
boxplot(x, horizontal = TRUE,
ylim = c( 0, 6000 ),
xlab = "Abfluss [m³/s]")
dev.off()
Parameterschätung
MoM (Momentenmethode; eigene Funktionen schreiben)
MLE (Maximum Likelihood Methode; fitdistr(), im MASS-Paket).
Regressionsgerade darstellen
plot (x, y), abline(Modell_1)
Prognosen, Konfidenz- und Prognoseintervalle
require(MASS)
FIT <- fitdistr(x, "normal")
m_FIT <- as.numeric( FIT$estimate[1] )
s_FIT <- as.numeric( FIT$estimate[2] )
evd-Paket gumbel(), gev(), frechet()
X_SEQ = seq(10, 50, 2)
predict.lm(x, data.frame(x=SEQ), interval="confidence", level= 0.95)
predict.lm(x, data.frame(x=SEQ), interval="prediction", level= 0.95)
Verteilung testen
Kolmogorow-Smirnow-Test: ks.test (x, "pnorm", m_FIT, s_FIT)
Notizen
Einfache Lineare Regression (ELR)
Modell in R: lm (y ~ x)
ELR-Annahmen und Diagnostik-Plots
Datenreihe mit Faktoren
y <- tapply(x, Faktor, sum)
Kuchendiagramm: pie(y, labels, radius)
Zwei Datenreihen vergleichen
Korrelationskoeffizient (Wert oder Matrix): cor(x)
Date-Grafik: plot (xaxt = "n"), axis.Date (1, at, format)
at = "years", "months", "days", oder # Tage
POSIXct-Grafik: plot (xaxt = "n"), axis.POSIXct (1, at, format)
at = "years", "months", "days", "hours", "min", "sec", oder #Sekunden
x <- as.POSIXct(strptime(z, format="%H:%M",tz="CET"),tz="CET")
Beginn <- min(x)
Ende <- max(x)
bmp("Datei.bmp", width = 600, height = 400)
plot (x, y, xaxt="n")
axis.POSIXct(1, at=seq(Beginn, Ende, "min"), tcl = -0.2,
labels = FALSE)
axis.POSIXct(1, at=seq(Beginn, Ende, "hours"), tcl = -0.5,
labels = TRUE, format = "%H:%M")
dev.off()
7. Statistische Modelle
Verteilungen
d_ (density), p_ (probability), q_ (quantile), r_ (random)
Modell_1 <- lm (y ~ x)
bmp("Annahmen_ Modell_1.bmp", width = 600, height = 600)
par( mfrow = c(2,2) )
plot(Modell_1, which = c(1,2,4,5))
dev.off()
Transformation der erklärenden Variable log(x), x^2, sqrt(x)
ELR-Zusammenfassung
summary (Modell_1)
Schätzungen und p-Werte der Regressionskoeffizienten,
Bestimmtheitsmass R2
Binomialverteilung
Während 5 Jahren zwei 20-jährliche Hochwasser:
dbinom (2, 5, 1/20)
Während 5 Jahren weniger als vier 20-jährliche Hochwasser:
pbinom(3, 5, 1/20)
Multiple Lineare Regression (MLR)
Modell in R: lm (y ~ x1 + x2)
Korrigiertes Bestimmtheitsmass verwenden (adjusted R2)
Modellbestimmung mit Rückwärts-Elimination;
Achsenabschnitt mit lm (y ~ x1 + x2 -1) eliminieren