Kurzanleitung zu R erste Schritte



Ähnliche Dokumente
Formale Methoden der Ökonomik: Einführung in die empirische Wirtschaftsforschung

Dokumentation. estat Version 2.0

Erstellen von x-y-diagrammen in OpenOffice.calc

Running R. Windows Aus Menü. Lese R Code ein führt den Code auch gleich aus, eventuell muss vorher das Verzeichnis gewechselt werden.

Berechnungen in Access Teil I

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Datenmaske für SPSS. Für die Datenanalyse mit SPSS können die Daten auf verschiedene Weise aufbereitet

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Artikel Schnittstelle über CSV

Datenaufbereitung in SPSS. Daten zusammenfügen

Excel Pivot-Tabellen 2010 effektiv

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Einführung in QtiPlot

Einfaches Datenmanagement in R

Bilder zum Upload verkleinern

MailUtilities: Remote Deployment - Einführung

Professionelle Seminare im Bereich MS-Office

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Browser Grid Funktionalitäten

Einfache statistische Auswertungen mit dem TI-Nspire

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Neue Schriftarten installieren

> patienten<-data.frame( c(28,61,79,54,na,48), c(2,2,3,2,1,1), c("pillen","pillen","massage","gymnastik","massage","gymnastik"),

Ihr CMS für die eigene Facebook Page - 1

Einkaufslisten verwalten. Tipps & Tricks

Häufigkeitstabellen. Balken- oder Kreisdiagramme. kritischer Wert für χ2-test. Kontingenztafeln

Auswerten mit Excel. Viele Video-Tutorials auf Youtube z.b.

Wie halte ich Ordnung auf meiner Festplatte?

Newsletter. 1 Erzbistum Köln Newsletter

10 Lesen und Schreiben von Dateien

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Laufende Auswertung von Feedback-Fragebögen Eine Vorlage zur Auswertung eines Fragebogens und die Präsentation erstellen...

Klicken Sie auf Weiter und es erscheint folgender Dialog

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Datenauswertung mit Hilfe von Pivot-Tabellen in Excel

Künstliches binäres Neuron

Tutorial -

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Auswertung erstellen: Liste mit -

Erstellen einer PostScript-Datei unter Windows XP

Zahlen auf einen Blick

Arbeiten mit dem Outlook Add-In

EDV-Fortbildung Kombi-Schulung Word-Excel Modul Excel. Informationen zum Programm. Die Programmoberfläche von Excel

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

EINFACHES HAUSHALT- KASSABUCH

Access Verbrecherdatenbank Teil 3

Anleitung zur Erstellung und Bearbeitung von Seiten in Typo3. Typo3. Anleitung. Wenpas Informatik

tentoinfinity Apps 1.0 EINFÜHRUNG

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Bearbeitung und Download von grossen Datenmengen in STAT-TAB

IDE Grundlagen Vektoren Matrizen Faktoren Dataframes Visualisierung Tips. Quick & dirty

OUTLOOK-DATEN SICHERN

Urlaubsregel in David

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Durchführung der Datenübernahme nach Reisekosten 2011

IDEP / KN8 für WINDOWS. Schnellstart

Informatik 12 Datenbanken SQL-Einführung

Speichern. Speichern unter

Konvertieren von Settingsdateien

ICS-Addin. Benutzerhandbuch. Version: 1.0

1 Möglichkeiten zur Darstellung von Daten

Hilfe zur Urlaubsplanung und Zeiterfassung

Bedienungsanleitung CAD-KAS Reklamationserfassung. Einen neuen Datensatz anlegen. Klicken Sie auf das + Symbol, um einen neuen Datensatz anzulegen.

Einführung in SPSS. 1. Die Datei Seegräser

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Anleitung zum GUI Version 2.x

Erstellen der Barcode-Etiketten:

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Diese Unterlage bezieht sich auf Excel 2010 (auf Deutsch). Die Benutzeroberfläche kann in anderen Versionen der Software erheblich anders aussehen.

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

Dateipfad bei Word einrichten

Laden der beiden virtuellen Orgeln (36 bzw. 100 Register) unter Hauptwerk

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Antolin-Titel jetzt automatisch in WinBIAP kennzeichnen

Text-Zahlen-Formatieren

Fallbeispiel: Eintragen einer Behandlung

Tutorial: Gnumeric installieren und Jahres-Kostenübersicht erstellen mit Diagramm

Programm GArtenlisten. Computerhinweise

Access [basics] Gruppierungen in Abfragen. Beispieldatenbank. Abfragen gruppieren. Artikel pro Kategorie zählen

(Eine ausführliche Beschreibung der Batch-Umbenennen-Funktion finden Sie in der Anleitung [Link zur Anleitung m4 irfanview_batch].

Bauteilattribute als Sachdaten anzeigen

Menü auf zwei Module verteilt (Joomla 3.4.0)

Gratis Excel SVERWEIS Funktions-Anleitung, Tutorial, ebook, PDF-E-Book

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Teil 2: Ablauf der Analyse festlegen

Registrierungsanleitung Informatik-Biber

Beispiel Shop-Eintrag Ladenlokal & Online-Shop im Verzeichnis 1

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Die Excel Schnittstelle - Pro Pack

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Funktionsbeschreibung. Lieferantenbewertung. von IT Consulting Kauka GmbH

Dokumentation IBIS Monitor

Installationsanleitungen

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

R-Tutorial. R bietet zahlreiche Hilfe-Funktionen an. Informiere Dich über die Funktion log():

Datenbanken Kapitel 2

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

Kleines Handbuch zur Fotogalerie der Pixel AG

- Frontend

Transkript:

Kurzanleitung zu R erste Schritte Marlis von der Hude Teil I - Erste Schritte:... 2 I.1 Eingabe von Werten, Grundrechenarten, Variablennamen usw.... 2 I.2 einfache statistische Funktionen... 3 I.3 Vektorarithmetik... 3 Teil II - Dateneingabe, Daten einlesen und speichern, Editor für Statements... 4 II.1 Datenvektor an der Konsole eingeben:... 4 II.2 Dateneingabe in Spreadsheets (nicht so komfortabel wie z.b. Excel):... 4 II.3 Benutzung eines Editors zur Eingabe von Statements... 5 II.4 Daten von einem Textfile einlesen... 5 II.4.1 Data Frames und Suchpfad... 5 II.5 weitere Aufrufe zum Einlesen von Daten aus externen Files:... 6 II.6 Speichern der Daten... 6 II.7 Die Arbeitsumgebung, Speichern von Objekten und Eingaben... 6 II.8 Eingebaute Datensätze... 7 II.9 Pakete (libraries)... 7 Teil III - Deskriptive Statistik... 7 III.1 Erste Auswertungen... 7 III.1.1 Faktoren... 9 III.1.2 Funktionen wie Mittelwert, Median oder Standardabweichung für alle Zeilen oder Spalten einer Datei : 9 III.2 Häufigkeitstabellen (incl. Grafiken)... 10 III.2.1 absolute und relative Häufigkeiten... 10 III.3 weitere Grafiken... 13 III.3.1 Boxplots... 13 III.3.2 Anordnung mehrerer Grafiken in einem Grafikfenster... 14 III.3.3 Auswertung von Daten in Kategorien... 15 III.3.4 Histogramm... 17 III.3.5 Streudiagramm... 18 Teil IV - Datenselektion, Vergleichsoperatoren, Sortieren, Transfomationen... 21 IV.1 Selektion... 21 IV.2 Sortieren... 21 IV.3 Unterteilung, Transformation von Vektoren und Datensätzen... 23 Teil V - Verschiedenes... 24 V.1 fehlende Werte (missing values)... 24 V.2 Daten interaktiv markieren und erzeugen... 25 Teil VI - Vektoren und Matrizen... 26 Teil VII - Wahrscheinlichkeitsverteilungen... 27-1 -

VII.1 Zufallsauswahl von gleichwahrscheinlichen Ergebnissen... 27 VII.2 Zufallsauswahl von Ergebnissen mit unterschiedlichen Wahrscheinlichkeiten... 27 VII.3 Binomialverteilung... 28 VII.4 Normalverteilung N(mu,sigma)... 30 VII.5 Erzeugung von Zufallszahlen... 31 VII.5.1 binomialverteilte Zufallszahlen (diskrete Verteilung)... 31 VII.5.2 gleichverteilte Zufallszahlen (stetige Verteilung)... 31 VII.5.3 normalverteilte Zufallszahlen (stetige Verteilung)... 32 Teil VIII - Grafische Darstellung mathematischer Funktionen... 33 VIII.1 2D-Grafiken in R... 33 VIII.2 3D-Grafiken in R... 36 Für den Einstieg: Installieren und laden des Zusatzpakets RCommander (Menügesteuerte Oberfläche) Teil I - Erste Schritte: I.1 Eingabe von Werten, Grundrechenarten, Variablennamen usw. Eingabe : > 2+3 Ausgabe : [1] 5 Es wird alles als Vektor betrachtet. [1] ist der Index der ersten Vektorkomponente in der Zeile. Erzeugung des Vektors der Zahlen 1 bis 20 > 1:20 Ausgabe : [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 16 17 18 19 20 alternativ: Aufruf der Funktion seq > seq(2,6) [1] 2 3 4 5 6 > seq(2,20,by=0.5) [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 [14] 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 [27] 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 [14] und [27] sind die Indizes der Werte 8.5 bzw. 15.0 weitere Grundrechenarten > 2*3 [1] 6 > 2/3 [1] 0.6666667 > 0.5*7 [1] 3.5 # für Kommentar bis zum Zeilenende Die üblichen Konstanten und Funktionen: - 2 -

> pi # dies ist die Kreiszahl [1] 3.141593 > sin(pi/2) [1] 1 > exp(2.5) [1] 12.18249 > log(10) [1] 2.302585 > log10(10) [1] 1 > log2(8) [1] 3 Zuweisungen ( durch <- oder =) > a <- 3 > a [1] 3 Ausgabe des Ergebnisses durch Aufruf des Variablennamens > 4->b # so geht es auch > b [1] 4 > a+b [1] 7 Variablennamen dürfen als Sonderzeichen nur einen Punkt oder underscore enthalten > b.1 <- 3 > c_3 <- 6 > b.1+c_3 [1] 9 I.2 einfache statistische Funktionen Eingabe eines Datenvektors (Funktion c(), combine): > v <- c(2,4,2,3,7,3) Länge eines Vektors > length(v) # Länge eines Vektors [1] 6 Summe der Vektorkomponenten > sum(v) [1] 21 Mittelwert, Varianz und Standardabweichung, Median > mean(v) # Mittelwert alternativ Summation und durch Länge teilen: sum(v)/n [1] 3.5 > var(v) # Varianz [1] 3.5 > sd(v) # Standardabweichung, standard deviation [1] 1.870829 > median(v) [1] 3 I.3 Vektorarithmetik Wenn Vektoren dieselbe Länge haben, werden arithmetische Operationen komponentenweise durchgeführt; sonst wird der zweite Vektor zyklisch benutzt:: > groesse<-c(1.65,1.74,1.75,1.80,1.90,1.91) > gewicht<-c(57,72,95,90,95,98) > bmi<-gewicht/groesse^2 > bmi [1] 20.93664 23.78121 31.02041 27.77778 26.31579 26.86330-3 -

> # zyklisch: > b<-c(2,3,4) > a<-gewicht/b > a [1] 28.50000 24.00000 23.75000 45.00000 31.66667 24.50000> Varianz und Standardabweichung durch arithmetische Operationen > mittel<-mean(gewicht) > gewicht-mittel [1] -14.333333-2.333333-17.333333 15.666667 20.666667-2.333333 > (gewicht-mittel)^2 [1] 205.444444 5.444444 300.444444 245.444444 427.111111 5.444444 > sum(gewicht-mittel)^2 # hier wird zunächst die Summe der Abweichungen # gebildet, dann quadriert [1] 8.077936e-28 > sum((gewicht-mittel)^2) # hier werden die quadrierten Abweichungen # summiert [1] 1189.333 > sum((gewicht-mittel)^2)/(length(gewicht)-1) [1] 237.8667 > var(gewicht) # Varianzfunktion [1] 237.8667 > sqrt(sum((gewicht-mittel)^2)/(length(gewicht)-1)) [1] 15.42293 > sd(gewicht) # Funktion der Standardabweichung [1] 15.42293 Teil II - Dateneingabe, Daten einlesen und speichern, Editor für Statements II.1 Datenvektor an der Konsole eingeben: > v<-c(3,4,2,7,6.5) # Funktion c() : combine > v [1] 3.0 4.0 2.0 7.0 6.5 Alternative: scan() jetzt Werte eingeben, abschließen mit Return-Taste II.2 Dateneingabe in Spreadsheets (nicht so komfortabel wie z.b. Excel): zunächst muss ein leerer Datensatz erzeugt werden: > dd<-data.frame() # erzeugt leeren Datensatz (Zeilen, Spalten auch unterschiedlicher Art) > fix(dd) # zum Eingeben von Daten und verändern der Variablennamen alternativ hierzu: Menü: Edit -> Data editor (nach Name des data frame wird gefragt) Variablennamen können verändert werden durch Klicken in die Überschriftenzelle. Durch Schließen des Fensters ist der Datensatz im Workspace verfügbar. Normalerweise wird man die Daten mit einem anderen Editor vorbereiten! - 4 -

II.3 Benutzung eines Editors zur Eingabe von Statements 1. In R eingebauter Editor : Menü (Windows): Datei neues Skript abschicken einzelner Zeilen oder der gesamten Datei möglich (Strg R) II.4 2. Auf R abgestimmter Editor mit Möglichkeit, Text hervorzuheben (highlight): Tinn-R (Tinn: this is not notepad) Daten von einem Textfile einlesen Windows: Arbeitsverzeichnis, Working Directory setzen: 1. Änderung durch R-Desktop-Icon -> Properties -> Start in:... 2. Änderung aus dem Windows R-Menü: Datei -> Verzeichnis wechseln dir() # listet Files im Arbeitsverzeichnis X<-read.table( daten/calcium.txt ) liest durch Leerzeichen getrennte Daten in den Datensatz (dataframe) X ein; die erste Zeile wird nicht als Überschriftenzeile interpretiert. X<-read.table( daten/calcium.txt,header=t) erste Zeile wird als Überschriftenzeile interpretiert (Variablennamen) (header=true) Wenn die erste Zeile einen Eintrag weniger hat als die weiteren Zeilen, so wird angenommen, dass die Variablen und die Zeilen mit Namen versehen sind (in dem Fall kann header=t entfallen, muss aber nicht). > X<-read.table("Data/xy.txt") > X groesse gewicht Peter l76 80 Hans 183 85 Marie 169 60 In R-Studio geht das sehr einfach mit Import Dataset (normalerweise im Panel rechts oben). Aber wenn man lauffähige Programme erstellen will, sollte man auch das Einlesen per Statement durchführen. II.4.1 Data Frames und Suchpfad Zusammengehörende Variablen (=Merkmale) sollten standardmäßig zu einem data.frame zusammengefasst werden. Die Eingabe von data.frames wird von den meisten Funktionen in R erwartet. Wenn Daten eingelesen werden, so werden sie automatisch als data frame abgespeichert. X ist also ein data.frame. Wir wollen auf einzelne Spalten (Merkmale (= Variablen = Attribute) zugreifen: > groesse Fehler: objekt "groesse" nicht gefunden So funktioniert es: > X$groesse die Variable ist im Datensatz (data.frame) X enthalten und kann so aufgerufen werden [1] 176 183 169 Wenn man im Folgenden nur mit den Daten aus X arbeiten will, so sollte man X in den Suchpfad aufnehmen; dann kann man X$ weglassen: > attach(x) der Datensatz wird in den Suchpfad aufgenommen > groesse jetzt kann die Variable auch wieder so aufgerufen werden [1] 176 183 169 Achtung: Mehrfachaufruf von attach fügt die Datei dem Suchpfad immer neu hinzu --> detach(x) # nicht vergessen Überprüfen mit - 5 -

search() II.5 weitere Aufrufe zum Einlesen von Daten aus externen Files: M <- read.csv( daten,header=t) liest durch Kommas getrennte Daten ein, Überschrift vorhanden m <- read.csv2( daten,header=t) liest durch Semikolon getrennte Daten ein, Dezimalkomma Bei read.csv und read.csv2 können fehlende Werte durch leere Felder angegeben werden (sonst NA). weitere Möglichkeiten: read.delim, read.delim2 ( help) II.6 Speichern der Daten > write.table(xy,"data/xy.dat",quote=f,row.names=f) speichert den Datensatz in Datei (numerisch, quote=f, ohne Zeilennummern: row.names=f) II.7 Die Arbeitsumgebung, Speichern von Objekten und Eingaben Alle Objekte, die während der aktuellen Arbeit mit R erzeugt werden, sind in einer gemeinsamen Arbeitsumgebung abgelegt. Über die Funktionen ls() oder objects() kann man diese anzeigen lassen: > a <- "testvariable1" > b <- "testvariable2" > ls() [1] "a" "b" > objects() [1] "a" "b" > (Achtung: Weglassen der Parameterklammern bei ls() führt zur Ausgabe des Programmcodes der Funktion ls ) Nicht mehr benötigte Objekte können über die Funktion rm(<variablenliste>) entfernt werden > rm (a) > ls() [1] "b" > rm(list=ls()) löscht alle Variablen save.image() speichert alle aktuell verwendeten Objekte in einer Datei.Rdata im aktuellen Arbeitsverzeichnis. alternativer Aufruf: Menü: File Save Workspace wieder einlesen durch > load(".rdata") bzw. Menü: File Load Workspace Allerdings wird der Inhalt der Datei.Rdata auch per default bei jedem Start von R in die Arbeitsumgebung geladen. Nicht mehr benötigte Objekte müssen dann per rm(<name>) gelöscht und die Datei.Rdata neu gespeichert werden. - 6 -

Menü: File Save History speichert die Tastatureingaben in einem File ab ausführen von Statements, die in einer Datei myprog.r abgelegt sind: Menü: File source("programme/myprog.r") II.8 Eingebaute Datensätze Viele Datensätze in verschiedenen Formaten liegen R bei, die über die Funktion data(<name des Datensatzes>) eingebunden werden können. > data(airquality) # im Basis-Paket vorhanden > airquality[1:5,] # Ausgabe der ersten 5 Zeilen II.9 Pakete (libraries) Viele Daten oder Funktionen können über externe Daten- und Funktionspakete in R eingebunden werden. Grundsätzlich handelt es sich dabei lokal um alle Unterverzeichnisse, die unter <R- Verzeichnis>\library angelegt sind. Man kann diese Pakete nutzen, indem man library(<name des gewünschten Modules>) eingibt. Teil III - Deskriptive Statistik III.1 Erste Auswertungen Aufbau der Datei Studis.txt: Geschlecht_Code Geschlecht StuRi Alter Groesse Gewicht 1 weiblich WiInf 19 170 65 1 weiblich WiInf 23 169 58 1 weiblich WiInf 24 175 59 1 weiblich WiInf 20 166 54 1 weiblich WiInf 28 171 60 1 weiblich Inf 25 172 61 1 weiblich Inf 24 174 60 1 weiblich Inf 23 170 66 2 maennlich WiInf 22 185 80 2 maennlich WiInf 28 190 81 2 maennlich WiInf 19 188 79 2 maennlich WiInf 30 177 75 2 maennlich Inf 39 169 74 2 maennlich Inf 24 180 73 2 maennlich Inf 22 185 71 2 maennlich Inf 25 182 84 # Daten einlesen: # In der ersten Zeile stehen Überschriften, also header=true: X <- read.table("data/studis.txt",header=t) # Überblick über die eingelesenen Daten verschaffen: - 7 -

dim(x) # Dimension, Anzahl der Zeilen und Spalten [1] 16 6-8 -

summary(x) #generische Funktion, Methode hängt von der Klasse des Objekts ab # d.h. gibt je nach Objektart passende Beschreibung # Häufigkeiten für qualitative Merkmale, # Mittelwert, Minimum, Maximum, Median, 25%- und 75%-Quantile # (Quartile) Geschlecht_Code Geschlecht StuRi Min. :1.0 maennlich:8 Inf :7 1st Qu.:1.0 weiblich :8 WiInf:9 Median :1.5 Mean :1.5 3rd Qu.:2.0 Max. :2.0 Alter Groesse Min. :19.00 Min. :166.0 1st Qu.:22.00 1st Qu.:170.0 Median :24.00 Median :174.5 Mean :24.69 Mean :176.4 3rd Qu.:25.75 3rd Qu.:182.8 Max. :39.00 Max. :190.0 Gewicht Min. :54.00 1st Qu.:60.00 Median :68.50 Mean :68.75 3rd Qu.:76.00 Max. :84.00 # X in den Suchpfad aufnehmen; dann kann man direkt auf die einzelnen Variablen (Spalten) zugreifen: attach(x) III.1.1 Faktoren dienen zur Identifikation von Datengruppen (qualitatives Merkmal). Selbst wenn sie numerisch codiert sind, wird damit nicht gerechnet (Mittelwert nicht sinnvoll). Das Geschlecht ist einmal als codierter Wert und einmal als Textspalte vorhanden. Die Textspalte wird automatisch als Faktor (factor) gespeichert, das entspricht einer qualitativen Variablen. Wenn nur eine numerische Codierung vorliegen würde, so könnte man daraus einen Faktor erzeugen: > G <- factor(geschlecht_code) > levels(g) <- c("weiblich","männlich") Erzeugung einer neuen Faktorspalte mit den Werten 1 bis 3, jeweils 5mal: F <- gl(3,5) III.1.2 Funktionen wie Mittelwert, Median oder Standardabweichung für alle Zeilen oder Spalten einer Datei : Auswahl der numerischen Spalten (Spalten 4,5,6) X_numerisch <- X[,4:6] # weitere Beispiele, s. Unten Berechnung der Mittelwerte pro Spalte: apply(x_numerisch,2,mean) Alter Groesse Gewicht 24.6875 176.4375 68.7500-9 -

Wenig sinnvoll in dem Beispiel aber machbar: Berechnung der Mittelwerte pro Zeile, d.h. für jede Person wird der Mittelwert aus Alter, Größe und Gewicht gebildet:: > apply(x_numerisch,1,mean) [1] 84.66667 83.33333 86.00000 80.00000 86.33333 86.00000 [7] 86.00000 86.33333 95.66667 99.66667 95.33333 94.00000 [13] 94.00000 92.33333 92.66667 97.00000 III.2 Häufigkeitstabellen (incl. Grafiken) III.2.1 absolute und relative Häufigkeiten > table(geschlecht_code) Geschlecht_Code 1 2 8 8 > table(geschlecht) Geschlecht maennlich weiblich 8 8 > table(sturi) StuRi Inf WiInf 7 9 Die Tabelle kann man speichern: tab <- table(sturi) > Farben <- c("green","gold") > barplot(tab, col=farben,legend=levels(sturi)) > title(main="absolute Häufigkeiten") 0 2 4 6 8 Inf absolute Häufigkeiten WiInf Inf WiInf Hier braucht man eigentlich keine Legende, denn die Balken haben schon eine Beschriftung; die Legende ist aber auch nicht gut plaziert, das kann man einstellen. barplot(tab, col=farben) title(main="absolute Häufigkeiten") legend(locator(1), legend=levels(sturi),fill=farben) locator(1) bewirkt, dass man in der Grafik die Position für die Legende anklicken muss. - 10 -

absolute Häufigkeiten 0 2 4 6 8 Inf WiInf Inf WiInf Öffnen eines neuen Grafikfenster (das alte wird nicht überschrieben) x11() pie(table(sturi),col=farben) - 11 -

Zweidimensionale Häufigkeitstabelle: tab2 <- table(geschlecht,sturi) tab2 StuRi Geschlecht Inf WiInf maennlich 4 4 weiblich 3 5 barplot(tab2,col=farben,legend=levels(geschlecht)) gemeinsame relative Häufigkeiten StuRi Geschlecht Inf WiInf maennlich 0.2500 0.2500 weiblich 0.1875 0.3125 > > > # in Prozent: > prop.table(tab2)*100 StuRi Geschlecht Inf WiInf maennlich 25.00 25.00 weiblich 18.75 31.25 mosaicplot(tab2,col=farben,main="mosaikplot") Mosaikplot maennlich w eiblich WiInf StuRi Inf Geschlecht - 12 -

... bezogen auf Zeilensummen > prop.table(tab2,1)*100 StuRi Geschlecht Inf WiInf maennlich 50.0 50.0 weiblich 37.5 62.5..bezogen auf Spaltensummen Grafik: > prop.table(tab2,2)*100 StuRi Geschlecht Inf WiInf maennlich 57.14286 44.44444 weiblich 42.85714 55.55556 Farben2 <- c("lightblue","pink") 0 20 40 60 80 100 Inf WiInf weiblich maennlich barplot(prop.table(tab2,2)*100,col=farben2,legend=levels(geschlecht) III.3 III.3.1 weitere Grafiken Boxplots boxplot(alter~geschlecht,main="boxplots") Mit der Tilde ~ erstellt man Boxplots für jedes Geschlecht getrennt.. boxplot(alter~geschlecht_code) Boxplots 20 25 30 35 20 25 30 35 maennlich weiblich 1 2 Man kann auch selbst Beschriftungen hinzufügen: boxplot(alter~geschlecht_code,names=c("weiblich","maennlich"),col=c("pink","lightblue"),main=" Alter") Alter 20 25 30 35 weiblich maennlich - 13 -

III.3.2 Anordnung mehrerer Grafiken in einem Grafikfenster par(mfrow=c(1,2)) # eine Zeile, zwei Spalten boxplot(alter~geschlecht_code,names=c("weiblich","maennlich"),col=c("pink", "lightblue"),main="alter") stripchart(alter~geschlecht,method="jitter") par(mfrow=c(1,1))# zurücksetzen auf eine Grafik pro Grafikfenster # jitter: Daten werden leicht versetzt dargestellt Alter 20 25 30 35 maennlich weiblich weiblich maennlich 20 25 30 35 Alter Manchmal sind die Daten in dieser Art aufgebaut (getrennte Spalten für weibliche und männliche Studis _w, _m): StuRi_w Alter_w Groesse_w Gewicht_w StuRi_m Alter_m Groesse_m Gewicht_m WiInf 19 170 65 WiInf 22 185 80 WiInf 23 169 58 WiInf 28 190 81 WiInf 24 175 59 WiInf 19 188 79 WiInf 20 166 54 WiInf 30 177 75 WiInf 28 171 60 Inf 39 169 74 Inf 25 172 61 Inf 24 180 73 Inf 24 174 60 Inf 22 185 71 Inf 23 170 66 Inf 25 182 84 detach(x) Y <- read.table("data/studis-alternativ-format.txt",header=t) attach(y) Jetzt listet man die Variablen auf: boxplot(alter_w,alter_m) 20 25 30 35 1 2-14 -

Die Beschriftung muss hier mit names extra hinzugefügt werden. boxplot(alter_w,alter_m,names=c("weiblich","maennlich"),main="alter") Alter 20 25 30 35 weiblich maennlich III.3.3 Auswertung von Daten in Kategorien Berechnung des Altersmittelwerts nach Geschlecht getrennt: > tapply(alter,geschlecht,mean) maennlich weiblich 26.125 23.250 Standardabweichung: > tapply(alter,geschlecht,sd) maennlich weiblich 6.266407 2.815772 Die Auswertung (z.b. Berechnung des Mittelwerts) soll für alle numerischen Variablen durchgeführt werden: > X_numerisch <- X[,c(4,5,6)] > by(x_numerisch,geschlecht,mean) Geschlecht: maennlich - 15 -

Alter Groesse Gewicht 26.125 182.000 77.125 --------------------------------------------------------------------------- Geschlecht: weiblich Alter Groesse Gewicht 23.250 170.875 60.375 Man kann auch gleich ein summary erstellen: > by(x_numerisch,geschlecht,summary) Geschlecht: maennlich Alter Groesse Gewicht Min. :19.00 Min. :169.0 Min. :71.00 1st Qu.:22.00 1st Qu.:179.2 1st Qu.:73.75 Median :24.50 Median :183.5 Median :77.00 Mean :26.12 Mean :182.0 Mean :77.12 3rd Qu.:28.50 3rd Qu.:185.8 3rd Qu.:80.25 Max. :39.00 Max. :190.0 Max. :84.00 --------------------------------------------------------------------------- Geschlecht: weiblich Alter Groesse Gewicht Min. :19.00 Min. :166.0 Min. :54.00 1st Qu.:22.25 1st Qu.:169.8 1st Qu.:58.75 Median :23.50 Median :170.5 Median :60.00 Mean :23.25 Mean :170.9 Mean :60.38 3rd Qu.:24.25 3rd Qu.:172.5 3rd Qu.:62.00 Max. :28.00 Max. :175.0 Max. :66.00-16 -

III.3.4 Histogramm Messdaten <- c(3.5,3.0,2.4,3.0,2.1,2.4,3.5,2.9,1.5,2.7,1.8,4.0,3.3,3.0,2.6,3.2,1.8,2.6,2.4,4.0,2.4,2.9,2.6,3.9,2.9,3.6,3.5,1.6,2.3,1.1) Histogramm, bei dem die Einteilung automatisch gewählt wird hist(messdaten) rug(messdaten) # fuegt Lage der Einzeldaten hinzu ansehen der Klassengrenzen, absoluten Häufigkeiten, Höhen der Balken usw. h<-hist(messdaten) h Histogramm mit 6 Klassen hist(messdaten,breaks=6) Aufruf einer Funktion mit 2 Argumenten, das erste durch positional matching, das zweite durch keyword matching (breaks= ) - 17 -

Histogram of Messdaten Frequency 0 2 4 6 8 10 1.0 1.5 2.0 2.5 3.0 3.5 4.0 Messdaten Histogramm mit vorgegeben Klassengrenzen b<-c(0,1,2,4) hist(messdaten,breaks=b) # man beachte die Beschriftung der y-achse! III.3.5 Streudiagramm > plot(groesse,gewicht) positionsgebundene Parameter oder > plot(gewicht~groesse) Formel oder > plot(y=gewicht,x=groesse) Keywords viele Optionen (s.u.)! Punkte verbinden z.b. durch lines Die x-werte müssen sortiert sein, da die Punkte in der Reihenfolge der x-werte verbunden werden: > lines(gewicht~groesse) hinzufügen der Gerade, die die Daten am besten repräsentiert (Regression) > abline(lm(gewicht~groesse),col="red") - 18 -

- 19 -

III.3.5.1 Plot-Optionen aus dem Manual An Introduction to R (R-Help-Menü) 12.1.4 Arguments to high-level plotting functions There are a number of arguments which may be passed to high-level graphics functions, as follows: add=true Forces the function to act as a low-level graphics function, superimposing the plot on the current plot (some functions only). axes=false Suppresses generation of axes useful for adding your own custom axes with the axis() function. The default, axes=true, means include axes. log="x" log="y" log="xy" Causes the, or both axes to be logarithmic. This will work for many, but not all, types of plot. type= The type= argument controls the type of plot produced, as follows: type="p" Plot individual points (the default) type="l" Plot lines type="b" Plot points connected by lines (both) type="o" Plot points overlaid by lines type="h" Plot vertical lines from points to the zero axis (high-density) type="s" type="s" Step-function plots. In the first form, the top of the vertical defines the point; in the second, the bottom. type="n" No plotting at all. However axes are still drawn (by default) and the coordinate system is set up according to the data. Ideal for creating plots with subsequent low-level graphics functions. xlab=string ylab=string Axis labels for the and axes. Use these arguments to change the default labels, usually the names of the objects used in the call to the high-level plotting function. main=string Figure title, placed at the top of the plot in a large font. sub=string Sub-title, placed just below the -axis in a smaller font. - 20 -

Teil IV - Datenselektion, Vergleichsoperatoren, Sortieren, Transfomationen gewicht <- c(60,72,57,90,95,72) groesse <- c(1.75,1.80,1.65,1.90,1.74,1.91) zusammenfassen zum Dataframe: d <- data.frame(gewicht,groesse) d gewicht groesse 1 60 1.75 2 72 1.80 3 57 1.65 4 90 1.90 5 95 1.74 6 72 1.91 IV.1 Selektion selektive Auswahl von Vektorkomponenten > gewicht[3:4] # Komponenten 3 bis 4 [1] 57 90 > gewicht[-(3:4)] # alles bis auf die Komponenten 3 bis 4 [1] 60 72 95 72 > gewicht[-c(1,3,4)] # alles bis auf die Komponenten 1,3 und 4 [1] 72 95 72 selektive Auswahl im Dataframe > d[3,2] # Komponente in Zeile 3, Spalte 2 [1] 1.65 > d[1:3,] # Zeilen 1 bis 3, alle Spalten gewicht groesse 1 60 1.75 2 72 1.80 3 57 1.65 IV.2 Sortieren erste Spalte (gewicht) sortieren: Hier zunächst nochmal der data.frame: d gewicht groesse 1 60 1.75 2 72 1.80 3 57 1.65 4 90 1.90 5 95 1.74 6 72 1.91 > sort(gewicht) [1] 57 60 72 72 90 95 Wenn man den ganzen data.frame aufsteigend nach gewicht sortieren will, so muss man mit der Funktion order() arbeiten: > order(gewicht) - 21 -

[1] 3 1 2 6 4 5 Wenn man die Zeilen in dieser Reihenfolge anordnet, so sind sie nach Gewicht sortiert. > d[order(gewicht),] # die Spalten werden nicht verändert gewicht groesse 3 57 1.65 1 60 1.75 2 72 1.80 6 72 1.91 4 90 1.90 5 95 1.74 Ergebnis eines logischen Vergleichs: > groesse [1] 1.75 1.80 1.65 1.90 1.74 1.91 > gewicht[groesse>1.80] # Gewicht derjenigen, mit Körpergröße > 1.80 [1] 90 72 > groesse < 1.80 [1] TRUE FALSE TRUE FALSE TRUE FALSE > d[gewicht>70,] # Datensätze von Personen, deren Gewicht über 70 liegt gewicht groesse 2 72 1.80 4 90 1.90 5 95 1.74 6 72 1.91 einige weitere Vergleichsoperatoren (wie in C) > d[gewicht==72,] # Gleichheit gewicht groesse 2 72 1.80 6 72 1.91 > d[gewicht!=72,] # Ungleichheit gewicht groesse 1 60 1.75 3 57 1.65 4 90 1.90 5 95 1.74 > d[gewicht<=72,] # kleiner / gleich gewicht groesse 1 60 1.75 2 72 1.80 3 57 1.65 6 72 1.91 &: and, : or, > d[gewicht>60 & gewicht<=72,] # gewicht groesse 2 72 1.80 6 72 1.91 > gewicht > 60 & gewicht <= 72 # Zugriff auf den gesamten Vektor [1] FALSE TRUE FALSE FALSE FALSE TRUE Abfrage auf fehlende Werte (== funktioniert hier nicht) - 22 -

> a <- c(3,5,2,na,7) > a [1] 3 5 2 NA 7 > is.na(a) [1] FALSE FALSE FALSE TRUE FALSE IV.3 Unterteilung, Transformation von Vektoren und Datensätzen Unterteilung eines data.frame (Dataframe) durch subset > d.schwer <- subset(d,gewicht>80) > d.schwer gewicht groesse 4 90 1.90 5 95 1.74 > d.leicht <- subset(d,gewicht<=80) > d.leicht gewicht groesse 1 60 1.75 2 72 1.80 3 57 1.65 6 72 1.91 Hinzufügen von neuen Variablen durch transform > d.neu <- transform(d,log.gew=log(gewicht)) > d.neu gewicht groesse log.gew 1 60 1.75 4.094345 2 72 1.80 4.276666 3 57 1.65 4.043051 4 90 1.90 4.499810 5 95 1.74 4.553877 6 72 1.91 4.276666 oder einfacher: d.neu$log.gew <- log(gewicht) # neue Variable, die die Gewichtsklasse enthält > gew.klasse <- character(length(gewicht)) # so lang wie die Variable Gewicht > gew.klasse [1] "" "" "" "" "" "" > gew.klasse[gewicht<80] <- "leicht" > gew.klasse [1] "leicht" "leicht" "" "" "" "" > gew.klasse[gewicht>=80] <- "schwer" > gew.klasse > d.neu< - transform(d,gew.klasse=gew.klasse) d.neu gewicht groesse gew.klasse 1 57 1.65 leicht 2 72 1.74 leicht 3 95 1.75 schwer 4 90 1.80 schwer 5 95 1.90 schwer 6 98 1.91 schwer rm(gew.klasse) attach(d.neu) Gruppieren von Daten Vektor aus der Variablen des Datensatzes, die eine Bedingung erfüllt: - 23 -

> schw <- gewicht[gew.klasse=="schwer"] > schw [1] 90 95 > lei <- gewicht[gew.klasse=="leicht"] > lei [1] 60 72 57 72 Gruppieren durch split erzeugt eine Liste (kann Vektoren unterschiedlichen Typs und Länge enthalten > l <- split(d.neu, gew.klasse) > l $leicht gewicht groesse gew.klasse 1 60 1.75 leicht 2 72 1.80 leicht 3 57 1.65 leicht 6 72 1.91 leicht $schwer gewicht groesse gew.klasse 4 90 1.90 schwer 5 95 1.74 schwer Teil V - Verschiedenes V.1 fehlende Werte (missing values) sind relevant bei Datensätzen mit mehreren Variablen NA not available > a<-c(3,5,2,na,7) > a [1] 3 5 2 NA 7 > mean(a) [1] NA > mean(a,na.rm=t) # not available values remove [1] 4.25-24 -

V.2 Daten interaktiv markieren und erzeugen markieren Beispiel (aus Modern Applied Statistics with S, p. 8): library(mass) # laedt Datensaetze und Funktionen data(hills) pairs(hills) attach(hills) plot(dist,time) # erzeugt Streudiagramm identify(dist,time,row.names(hills)) # markieren der Punkte durch Mausklick # links # beenden des Modus durch Mausklick # rechts interaktives Erzeugen eines zweidimensionalen Datensatzes Beispiel (aus Modern Applied Statistics with S, p. 8): plot(c(0,1),c(0,1),type= n ) xy<- locator(type= p ) # nur leeren Rahmen erzeugen # 0,1: Start, Stop von x und y # durch Musklick links Punkte setzen # durch Mausklick rechts Modus beenden - 25 -

Teil VI - Vektoren und Matrizen numerischer Vektor x<-c(2,3,4,6,7,8) character-vektor > staedte<-c("bonn","siegburg","koeln") Zugriff auf die erste Komponente > staedte[1] [1] "Bonn" logischer Vektor Eingabe: > c(t,t,f) [1] TRUE TRUE FALSE Ergebnis eines logischen Vergleichs: > groesse [1] 1.75 1.80 1.65 1.90 1.74 1.91 > groesse<1.80 [1] TRUE FALSE TRUE FALSE TRUE FALSE replicate-funktion zum replizieren Was passiert hier? a<-c(2,4,6) > rep(a,1:3) [1] 2 4 4 6 6 6 > rep(1:3,a) [1] 1 1 2 2 2 2 3 3 3 3 3 3 Eine Matrix ist ein Vektor mit 2 Dimensionen: > x<-c(2,3,4,6,7,8) > x [1] 2 3 4 6 7 8 > dim(x)<-c(3,2) # wandelt x in Matrix mit 3 Zeilen, 2 Spalten > x [,1] [,2] [1,] 2 6 [2,] 3 7 [3,] 4 8 alternative Eingabe x<-matrix(c(2,3,4,6,7,8),nrow=3) Die Matrix wird spaltenweise gefüllt; für zeilenweises Füllen byrow=t: > x<-matrix(c(2,3,4,6,7,8),nrow=3,byrow=t) > x [,1] [,2] [1,] 2 3 [2,] 4 6 [3,] 7 8 Vergabe von Zeilen, bzw. Spaltennamen (für Tabellen und Grafiken); funktioniert nicht bei Vektoren, nur bei Matrizen colnames(x)<-c( Spalte1, Spalte2 ) rownames(x)<-c( Zeile1, Zeile2, Zeile3 ) > rownames(x)<-month.name[1:3] > colnames(x)<-letters[1:2] > x a b - 26 -

January 2 3 February 4 6 March 7 8 > colnames(x)<-letters[1:2] > x A B January 2 3 February 4 6 March 7 8 horizontales und vertikales konkatinieren von Vektoren > rbind(a=1:4,b=2:5,c=9:12) # row, horizontal [,1] [,2] [,3] [,4] A 1 2 3 4 B 2 3 4 5 C 9 10 11 12 > cbind(a=1:4,b=2:5,c=9:12) # column, vertikal A B C [1,] 1 2 9 [2,] 2 3 10 [3,] 3 4 11 [4,] 4 5 12 VI.1 Teil VII - Wahrscheinlichkeitsverteilungen VII.1 Zufallsauswahl von gleichwahrscheinlichen Ergebnissen (diskrete Gleichverteilung, Laplace-Experimente)) Ziehen ohne Zurücklegen von n (=5) Zahlen aus den Zahlen 1 bis m (=50): > sample(1:50,5) [1] 34 4 37 14 19 Ziehen mit Zurücklegen: > sample(1:10,5,replace=t) [1] 6 2 10 6 7 Simulation von 10 Münzwürfen: > sample(c("kopf","zahl"),10,replace=t) [1] "Zahl" "Kopf" "Zahl" "Zahl" "Zahl" "Zahl" "Zahl" "Zahl" "Zahl" "Zahl" Das Ergebnisobjekt abspeichern und anschließend als Häufigkeitstabelle darstellen: > Ergebnis<-sample(c("Kopf","Zahl"),10,replace=T) > table(ergebnis) Ergebnis Kopf Zahl 6 4 VII.2 Zufallsauswahl von Ergebnissen mit unterschiedlichen Wahrscheinlichkeiten sample(c("erfolg","misserfolg"),10,replace=t,prob=c(0.8,0.2)) [1] "Erfolg" "Erfolg" "Erfolg" "Erfolg" "Erfolg" "Misserfolg" "Erfolg" [8] "Misserfolg" "Erfolg" "Misserfolg" - 27 -

Erg<-sample(c("Erfolg","Misserfolg"),10,replace=T,prob=c(0.8,0.2)) > table(erg) Erg Erfolg Misserfolg 9 1 Binomialkoeffizient n über k > choose(49,6) [1] 13983816 > choose(5,2) [1] 10 > prob<-1/choose(5,2) > prob [1] 0.1 VII.3 Binomialverteilung Wahrscheinlichkeitsfunktion P(X=x) = n über x p hoch x... dbinom(x,n,p) Verteilungsfunktion P(X<=x)= pbinom(x,n,p) > dbinom(5,10,0.2) [1] 0.02642412 > pbinom(5,10,0.2) [1] 0.9936306 Erzeugung einer Tabelle für B(n=10,p=0.2) > n<-10 > p<-0.2 > x<-0:n > probx<-dbinom(x,n,p) > prob.le.x<-pbinom(x,n,p) > Tabelle<-cbind(x,probx,prob.le.x) > round(tabelle,4) x probx prob.le.x [1,] 0 0.1074 0.1074 [2,] 1 0.2684 0.3758 [3,] 2 0.3020 0.6778 [4,] 3 0.2013 0.8791 [5,] 4 0.0881 0.9672 [6,] 5 0.0264 0.9936 [7,] 6 0.0055 0.9991 [8,] 7 0.0008 0.9999 [9,] 8 0.0001 1.0000 [10,] 9 0.0000 1.0000 [11,] 10 0.0000 1.0000 par(mfrow=c(1,2)) plot(x,probx,type="h",ylab="p(x=x)",main="wahrscheinlichkeitsfkt.") plot(x,prob.le.x,type="s",ylab="p(x<=x)",main="verteilungsfunktion") par(mfrow=c(1,1)) - 28 -

- 29 -

VII.4 Normalverteilung N(mu,sigma) Dichtefunktion f(x) dnorm(x,mu,sigma) Verteilungsfunktion pnorm(x,mu,sigma) x<-seq(-4,4,by=0.1) fx<-dnorm(x,0,1) prob.lt.x<-pnorm(x,0,1) par(mfrow=c(1,2)) plot(x,fx,type="l",ylab="f(x)",main="dichtefunktion") plot(x,prob.lt.x,type="l",main="verteilungsfunktion", ylab="f(x)=p(x<=x)") par(mfrow=c(1,1)) Alternative für Funktionsverläufe z.b. für die Dichte der Standard-NV: > curve(dnorm(x,0,1),from=-3, to=3) > abline(v=c(-1,1)) # vertikale Linien bei 1 und 1 Quantil x_p: P(X<=x_p)=p > x.0975<-qnorm(0.975,0,1) > x.0975 [1] 1.959964 > pnorm(x.0975,0,1) [1] 0.975-30 -

VII.5 Erzeugung von Zufallszahlen VII.5.1 binomialverteilte Zufallszahlen (diskrete Verteilung) Es werden 100 binomialverteilte Zufallszahlen gezogen X~B(n=30,p=1/6): > Ergebnisse30<-rbinom(100,30,1/6) > table(ergebnisse30) Ergebnisse30 1 2 3 4 5 6 7 8 9 3 6 19 20 16 18 9 5 4 > plot(table(ergebnisse30), main="100 binomialverteilte Zufallszahlen", xlab="anzahl der 6en",ylab="Haeufigkeiten") 100 binomialverteilte Zufallszahlen Haeufigkeiten 0 5 10 15 20 1 2 3 4 5 6 7 8 9 Anzahl der 6en VII.5.2 gleichverteilte Zufallszahlen (stetige Verteilung) Es werden 1000 gleichverteilte Zufallszahlen gezogen X~U(0,1): gleich<-runif(1000,0,1) hist(gleich,main="histogramm von 1000 gleichverteilten Zufallszahlen") - 31 -

VII.5.3 normalverteilte Zufallszahlen (stetige Verteilung) Es werden 1000 normalverteilte Zufallszahlen gezogen X~NV(µ=100,σ=2): > normalzufz<-rnorm(1000,100,2) > hist(normalzufz,main="histogramm von 1000 normalverteilten Zufallszahlen") Histogramm von 1000 normalverteilten Zufallszahlen Frequency 0 50 100 150 94 96 98 100 102 104 106 normalzufz - 32 -

Teil VIII - Grafische Darstellung mathematischer Funktionen VIII.12D-Grafiken in R Standardfunktionen plot(exp) plot(exp,xlim=c(0,4)) plot(exp,xlim=c(0,4), automatische Wahl ylim=c(0,100)) des Bereichs x-werte von 0 bis 4 y- Werte von 0 bis 100 exp (x) 1.0 1.5 2.0 2.5 exp (x) 0 10 20 30 40 50 exp (x) 0 20 40 60 80 100 0.0 0.2 0.4 0.6 0.8 1.0 x 0 1 2 3 4 x 0 1 2 3 4 x x<-seq(-3*pi,3*pi,0.1) plot(x,sin(x)) plot(x,sin(x),type= l ) Liniendarstellung sin(x) -1.0-0.5 0.0 0.5 1.0-10 -5 0 5 10 x sin(x) -1.0-0.5 0.0 0.5 1.0-10 -5 0 5 10 x - 33 -

x<-seq(0,2*pi,0.01) plot(x,sin(x),type="l") lines(x,sin(2*x), col="red") # hinzufuegen von Linien -1.0-0.5 0.0 0.5 1.0 0 1 2 3 4 5 6 x plot(x,x,type="l") points(x,exp(x),type="l",col="red") # hinzufuegen von Punkten oder Linien lines(x,log(x), col="blue") # hinzufuegen von Linien Die erste Grafik legt den Bereich für die x- und y-werte fest x 0 1 2 3 4 5 6 sin(x) 0 1 2 3 4 5 6 x - 34 -

Festlegen des Bereichs für beide Funktionen: Der Bereich für die y-werte wird durch Minimum und Maximum der beiden Datenreihen bestimmt: y<-abs(sin(x)) z<-sin(x) mi<-min(y,z) ma<-max(y,z) plot(x,y,ylim=c(mi,ma),type="l") points(x,z,type="l",col="red") y -1.0-0.5 0.0 0.5 1.0 0 1 2 3 4 5 6 x - 35 -

VIII.2 3D-Grafiken in R # 1. Erzeugen von Vektoren a und b: a<-seq(-5,5,len=4) b<-seq(-3,2,len=3) > a [1] -5.000000-1.666667 1.666667 5.000000 > b [1] -3.0-0.5 2.0 # Fuer jede Kombination von Komponenten aus den Vektoren a und b wird ein # Wert der Funktion f(a,b)=a*b berechnet und in der Matrix fab gespeichert: fab<-outer(a,b,function(a,b) a*b) > fab [,1] [,2] [,3] [1,] 15 2.5000000-10.000000 [2,] 5 0.8333333-3.333333 [3,] -5-0.8333333 3.333333 [4,] -15-2.5000000 10.000000 # 3D-Darstellung: persp(a, b, fab, theta = 30, phi = 30, col = "green", ltheta = 120, shade = 0.75, ticktype = "detailed") 15 10 5 fab 0-5 -10-15 -4-2 a 0 2 4-3 -2-1 0 b 2 1-36 -

# dasselbe nochmal mit mehr Werten in x- und y-richtung und einer anderen # Funktion: x<-seq(-pi,pi,len=50) y<-x f<-outer(x,y,function(x,y) cos(y)/(1+x^2)) # 3D-Darstellung persp(x, y, f, theta = 30, phi = 30, col = "lightblue", + ltheta = 120, shade = 0.75, ticktype = "detailed") 0.5 f 0.0-0.5 2-2 0 y x 0 2-2 image(x,y,f) # Hoehen durch Farben darstellen contour(x,y,f,nlevels=25,add=t) # Hoehenlinien hinzufuegen y -3-2 -1 0 1 2 3-3 -2-1 0 1 2 3 x - 37 -

z y # More examples in demo(persp)!! ## ----------- # (1) The Obligatory Mathematical surface. # Rotated sinc function. x <- seq(-10, 10, length= 30) y <- x f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } z <- outer(x, y, f) z[is.na(z)] <- 1 # fehlende Werte auf 1 setzen persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue") title("einfach") x11() persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "green", ltheta = 120, shade = 0.75, ticktype = "detailed", xlab = "X", ylab = "Y", zlab = "Sinc( r )") title("nr. 2") einfach x Nr. 2 Sinc( r ) 8 6 4 2 0-2 -10-5 0 Y 10 5 X 0 5-5 10-10 - 38 -