GNU R/ Druckversion
Vorwort
[Bearbeiten]Vorwort
[Bearbeiten]Statistiksoftware gehört heute wie Datenbanksysteme oder Office-Programme zu den entscheidenden Softwarekomponenten in Unternehmen wie auch in der Forschung. Dabei kann die Statistiksoftware versteckt als eine Komponente z.B. im Data Mining vorkommen oder als eigenständige Software, wie R, genutzt werden. Später werden wir noch sehen, dass man R auch in andere Software integrieren kann. Statistiksoftware, wie R, wird heute nicht primär im Kerngebiet der Mathematik angewandt. Vielmehr wird R für die Verarbeitung wissenschaftlicher und ökonomischer Daten verwendet. So ist R heute eine gefragte Software bei der Auswertung genetischer Experimente. Ohne die moderne Computertechnik und entsprechender Software, wäre die moderne Genetik kaum denkbar.
Dieses Buch soll den Leser in einer einfachen Art und Weise und anhand kleiner Beispiele in die Praxis der Software R einführen. Nach dem Lesen und Durcharbeiten des Buchs wird der Leser in der Lage sein, R sicher zu benutzen. Weiterhin werden alle Aspekte von R in diesem Buch angesprochen und erläutert. Dadurch soll es dem erfahrenen R-Benutzer als stetiges Nachschlagewerk dienen. Für das Verständnis dieses Buches werden keine Programmierkenntnisse vorausgesetzt. Weil die statistische Auswertung von Daten die Kernaufgabe von R ist, ist es für den Leser hilfreich, wenn er Erfahrungen auf dem Gebiet der Statistik bzw. deren Anwendung hat.
Tipp: Eine Einführung in Statistik bietet das Wikibook Statistik. |
Dieses Buch ist zur Zeit nicht vollständig und konsistent. Wenn beim Lesen des Textes dem Leser manche Stellen unklar erscheinen, da Passagen nicht verständlich genug sind oder weil für das Verständnis anderes Hilfreiches fehlt, dann nutzen Sie bitte die Diskussionsfunktion von uns, um den Autoren dieses Buches auf den möglichen Missstand hinzuweisen. Aber auch Anregungen werden gerne gesehen.
Was ist R?
[Bearbeiten]Was ist R?
[Bearbeiten]Dieses Buch führt in das Programm R ein. R steht dabei für The R Project for Statistical Computing.
- R ist eine Software zur statistischen Datenverarbeitung, sowie deren grafischer Darstellungen (Visualisierung).
- R ist eine Umsetzung der statistischen Programmiersprache S.
- R läuft unter diversen UNIX-, Linux- und Unix-ähnlichen Betriebsystemen, sowie auf Windows und Mac OS X. Ältere R-Versionen sind auch noch für das klassische Mac OS verfügbar. Für viele Betriebssysteme gibt es bereits kompilierte Pakete.
- Die Sprache kann leicht durch neue Funktionen erweitert werden.
- Eine große Anzahl von existierenden Zusatzpaketen ergänzen die R-Funktionalität um Methoden aus Spezial- und Anwendungsbereichen der Statistik.
- R kann mit anderen Programmiersprachen wie GRASS, Perl, Python, C oder Java verbunden werden.
- R kann sowohl interaktiv, also im Einzelbefehlsmodus, als auch als Skriptsprache und im Batch-Modus verwendet werden.
- Der R-Quelltext wird unter der GNU General Public License (GPL) der Free Software Foundation veröffentlicht.
Die Homepage von R lautet http://www.r-project.org |
Zusätzliche Skripte zur Einführung in R können im Internet kostenfrei abgerufen werden (z.B. Handl 2006).
Des Weiteren stehen diverse (meist englischsprachige) Internetseiten (z.B. Das R Wiki) sowie Publikationen
(siehe Literatur) zum Thema R zur Verfügung.
Warum ?
[Bearbeiten]- Neben gängigen Programmen zur statistischen Auswertung, wie beispielsweise „SPSS“ oder „STATA“, bietet den Vorteil, dass es auf der ganzen Welt kostenlos (unter der freien GNU-Lizenz) zur Verfügung steht.
- kann die meisten gängigen Formate importieren, gewährleistet volle Kontrolle über die Daten und bietet ein verlässliches, quelloffenes Format für erstellte Datensätze.
- Darüber hinaus stellt z.T. mächtigere und mehr Auswertungsverfahren zur Verfügung als andere Programme.
- ist eine Programmierumgebung. Funktionen können bequem den eigenen Bedürfnissen angepasst werden. Komplexe Probleme lassen sich auch dann lösen, wenn die Entwickler diese (noch) nicht implementiert haben.
- wird von der Scientific Community kontinuierlich weiterentwickelt und erweitert. Neue statistische Verfahren werden in der Regel auch in integriert. Ein standardisiertes Pakete-System erleichtert die Nachinstallation ebenso wie die Veröffentlichung eigener Pakete.
- erstellt professionelle Graphiken in einer Vielzahl an Formaten.
- ist auch eine funktionierende Benutzer- und Entwickler-Gemeinschaft, die für Fragen offen ist und so den Einstieg erleichtert.
- kann systemübergreifend auf verschiedenen Plattformen genutzt werden.
- verfügt über äußerst flexible Schnittstellen der Daten-Ein- und -Ausgabe und kann mit verschiedenen anderen Applikationen zusammenarbeiten.
- kann in einem Batch-Mode zur automatisierten Auswertung und Dokumenterstellung verwendet werden und lässt sich auch in Webserver / dynamische Websites integrieren.
- ist trotz graphischer Benutzeroberflächen textbasiert. Im Zentrum steht nicht Design, sondern Funktion.
Was spricht gegen ?
[Bearbeiten]- Für den Anfänger ist die Funktionsweise und Bedienung von R zweifellos gewöhnungsbedürftig.
- Bei der Programmierung in R fällt im Vergleich mit modernen Sprachen auf, dass Einiges in unerwarteter Weise funktioniert.
- Bestimmte Grundverfahren (z. B. Modus/Modalwert) sind zur Zeit nur umständlich oder gar nicht implementiert.
Literatur
[Bearbeiten]Mit folgender Literatur haben wir einen guten Einstieg in R gefunden:
- Günter Faes (2007): "Einführung in R, Ein Kochbuch zur statistischen Datenanalyse mit R", BoD, ISBN 9783833491849
- Dubravko Dolic (2003): „Statistik mit R. Einführung für Wirtschafts- und Sozialwissenschaftler“, Oldenbourg, ISBN 3486275372
Inhaltsverzeichnis[Bearbeiten]
|
Installation
[Bearbeiten]Da R zur freien Verfügung steht, kann eine Installationsdatei aus dem Internet herunter geladen werden. Alle Downloads zu R stehen unter dem „Comprehensive R Archive Network“ (CRAN) zur Verfügung.
Rufen Sie zur Installation die Webseite http://cran.r-project.org/mirrors.html auf, und wählen Sie einen Server, von dem aus Sie R herunterladen möchten. Eine gute Downloadverbindung bieten normalerweise solche Server, deren Standort nicht allzu weit von Ihrem Wohnsitz entfernt ist. Nachdem Sie ein Installationspaket für Ihr System (Windows, Apple, Linux) heruntergeladen haben, installieren Sie R. Dies erfolgt in der Regel durch einen Doppelklick auf die Installationsdatei.
Unix / Linux
[Bearbeiten]- Vorkompiliertes RPM - Paket für die entsprechende Distribution herunterladen
- Paket installieren
- in der Shell mit R starten
Für Debian ist auch eine Installation mit apt-get möglich. Optional kann die neueste R-Version über einen Backport installiert werden.[1]
Für Ubuntu heißt das entsprechende Paket r-recommended.
Für Ubuntu bietet das R-Project Repositories an. Diese sind an die jeweiligen Releases angepaßt und bieten bisweilen aktuellere Versionen als Ubuntu[2].
Für Solaris (OpenSolaris) wird ein Packet auf sunfreeware.com angeboten
Windows
[Bearbeiten]- Das Setup-Programm im Paket base herunterladen (ca. 23 MB).
- Dieses Programm ausführen.
- Die R-Oberfläche unter Windows startet ein Textfenster, das der R-Shell unter Unix entspricht.
MacOS
[Bearbeiten]- Installer herunterladen und ausführen
Docker (inkl. RStudio)
[Bearbeiten]- Shell-Kommando: docker run -e PASSWORD={yourpwd} rocker/rstudio
- In einem Browser: localhost:8787
- Login: rstudio/{yourpwd}
SaaS
[Bearbeiten]- R kann auch via https://rstudio.cloud komplett ohne Client-Installation programmiert werden.
Weblinks
[Bearbeiten]Quellen
[Bearbeiten]- ↑ http://cran.r-project.org/bin/linux/debian/ Debian GNU R Repository
- ↑ http://cran.r-project.org/bin/linux/ubuntu/
Inhaltsverzeichnis[Bearbeiten]
|
R starten
[Bearbeiten]Nachdem Sie R installiert haben, starten Sie R mit einem Doppelklick auf das R-Symbol in Ihrem Programm-Verzeichnis.
Unter Linux wird R mit dem Befehl R
in der Kommandozeile gestartet.
R
Nachdem Sie R gestartet haben, erscheint ein Begrüßungstext:
R : Copyright 2006, The R Foundation for Statistical Computing Version 2.3.1 (2006-06-01) ISBN 3-900051-07-0 R ist freie Software und kommt OHNE JEGLICHE GARANTIE. Sie sind eingeladen, es unter bestimmten Bedingungen weiter zu verbreiten. Tippen Sie 'license()' or 'licence()' für Details dazu. R ist ein Gemeinschaftsprojekt mit vielen Beitragenden. Tippen Sie 'contributors()' für mehr Information und 'citation()', um zu erfahren, wie R oder R packages in Publikationen zitiert werden können. Tippen Sie 'demo()' für einige Demos, 'help()' für on-line Hilfe, oder 'help.start()' für eine HTML Browserschnittstelle zur Hilfe. Tippen Sie 'q()', um R zu verlassen. >
Das Symbol >
zeigt an, dass der R-Prozessor bereit ist, und Sie nun Ihre Befehle eingeben können. Beispielsweise können Sie direkt den Anmerkungen des Begrüßungstexts folgen und die Lizenzbedingungen von R aufrufen mit:
> licence()
R beenden
[Bearbeiten]Zum Beenden gibt man q()
ein. Es erscheint die Frage:
Save workspace image? [y/n/c]:
Die Eingabe von y (yes) speichert die aktuelle Sitzungkonfiguration (z.B Objekte, Liste der geladenen Bibliotheken). n (no) verwirft die aktuellen Sitzungsänderungen, c (cancel) bricht den Beendungsvorgang ab.
Hilfe
[Bearbeiten]Zu jeder R-Funktionsweise gibt es eine R-interne Hilfeseite. Diese kann aufgerufen werden, wenn Sie vor die gefragte Funktion ein ? schreiben, z.B.:
> ?
licence
Es öffnet sich nun ein Hilfefenster, in welchem die gefragte Funktion erläutert wird (leider nur auf englisch). In der ersten Zeile der Hilfedatei wird der Name der Funktion angezeigt, gefolgt von dem Paket, in welchem diese vorhanden ist. Des Weiteren werden alle Optionen angezeigt, die mit der Funktion angegeben werden können.
apropos()
[Bearbeiten]apropos()
sucht einen Ausdruck in der Liste der Funktionen und Vektorvariablen.
apropos
("plot")
liefert eine Liste der Funktionsnamen und Vektoren, welche den Ausdruck 'plot' enthalten.
help()
[Bearbeiten]Die Funktion help()
zeigt dieselben R-interne Dokumentation zu einem Befehl an, wie das oben beschriebene Fragezeichen (?). Beispielsweise liefert
help
(plot)
die Dokumentation zum Befehl plot()
. Der Aufruf lässt sich aber wie oben beschrieben abkürzen als
?
plot
help.start()
[Bearbeiten]Mit help.start()
werden im Standardbrowser die Links zu den englischsprachigen R-Anleitungen angezeigt. Sie sind im Installationsverzeichnis von R unter doc/html/ abgelegt. Enthalten sind unter anderem eine Einführung in R, Datenim- und export, R-Installation und Administration, Referenzen zu den Paketen, sowie eine Suchmaschine mit einem Verzeichnis von Schlagworten.
RSiteSearch()
[Bearbeiten]Die Funktion RSiteSearch('Suchbegriff')
ist ein einfacher Weg über das Internet mehrere Hilfeseiten auf einmal zu durchsuchen. Im Internetbrowser werden die Treffer aus der Suche in R-Dokumenten, den Hilfeseiten der Funktionen und der R-help-Mailingliste aufgelistet.
Die Basispakete
[Bearbeiten]R Standardpakete
[Bearbeiten]- base -- Grundlegende Funktionen
- graphics -- Die wichtigsten Funktionen zum Erstellen von Grafiken
- stats -- Wichtige Statistikfunktionen
- utils -- Pakete installieren, Hilfefunktionen, Dateneingabe
Zusatzpakete
[Bearbeiten]Da R ein offenes Projekt ist, an dem jeder mitarbeiten kann, stehen zahlreiche Zusatzpakete mit zusätzlichen Funktionen zur Verfügung.
Sofern Sie über einen Internetanschluss verfügen, können Sie diese Pakete direkt von der R-Kommandozeile nachinstallieren.
Installation per install.packages
[Bearbeiten]Der Befehl hierzu lautet: install.packages()
Eine Liste aller zur Verfügung stehenden Zusatzpakete finden Sie unter: http://cran.r-project.org/web/packages/available_packages_by_name.html
Wenn Sie beispielsweise das „foreign“-Paket installieren möchten, geben Sie folgenden Befehl ein:
> install.packages(“foreign“)
Manche der Zusatzpakete benötigen weitere (abhängige) Zusatzpakete. Diese werden automatisch mitinstalliert, wenn Sie den Befehl mit einer Option erweitert eingeben:
> install.packages(“foreign“, dependencies=TRUE)
Sobald Sie den Befehl eingegeben haben, werden Sie aufgefordert, einen Server auszuwählen, von dem aus Sie die Zusatzpakete installieren möchten. Wählen Sie einen Server aus Ihrer Nähe und bestätigen Sie mit „OK“. Sie können den Server mit dem Befehl chooseCRANmirror()
wechseln. Dies ist z.B. notwendig, wenn das gewünschte Zusatzpaket auf dem ausgewählten Server nicht verfügbar ist.
Weitere Pakete sind zu finden unter: http://cran.r-project.org/
Fehlermeldung bei Mac OS X
[Bearbeiten]Wenn Sie R von einem Mac aus betreiben und ein Zusatzpaket installieren möchten, bekommen Sie unter Umständen folgende Fehlermeldung:
"cannot create HTML package index in: make.packages.html()"
Dies ist keine echte Fehlermeldung. Das Problem liegt darin, dass die Hilfedateien und -verzeichnisse erst nach dem ersten Aufruf von „Hilfe“ auf Ihrem Rechner angelegt werden. Wählen Sie also aus dem Menü „Hilfe => R-Hilfe“ aus. Es erscheint die R-Hilfe-Seite. Von nun an ist das erforderliche Verzeichnis angelegt, und die Fehlermeldung sollte nicht mehr erscheinen.
Installation von Zusatzpaketen über die Shell
[Bearbeiten]Falls Sie ein Paket manuell über die CRAN-Webseiten heruntergeladen haben, muss dieses über die Kommandozeile installiert werden. Wechseln Sie hierzu auf der Shell in das Verzeichnis, in welches Sie die tar-Datei heruntergeladen haben, und geben ein:
R CMD INSTALL paket
wobei Sie "paket" durch den Datei- bzw.Paketnamen (ohne .tar.gz) ersetzen.
Zusatzpakete aktivieren und deaktivieren
[Bearbeiten]Bitte beachten Sie, dass die Funktionen der Zusatzpakete zunächst nicht aufgerufen werden können! Hierfür müssen Sie das entsprechende Paket zuerst mit library(PAKETNAME) aktivieren. Um beispielsweise das „foreign“-Paket zu aktivieren, geben Sie also ein:
> library
(foreign)
Wenn die Funktionen der Zusatzpakete nicht mehr benötigt werden, können diese mit detach(“package:PAKETNAME“) deaktiviert werden, in unserem Fall also per:
> detach
("package:foreign")
Zusatzpakete aktualisieren
[Bearbeiten]Die R-Basis- und Zusatzpakete lassen sich mit update.packages()
aktualisieren.
Übersicht über installierte Zusatzpakete
[Bearbeiten]Mit installed.packages()
erhalten Sie ein Übersicht über alle installierten Zusatzpakete sowie deren Versionen.
siehe auch
[Bearbeiten]
Rechnen mit R
[Bearbeiten]R ist unter anderem ein mächtiger Taschenrechner. Folgende Rechenfunktionen können mit R ausgeführt werden:
Addition | + |
Subtraktion | - |
Multiplikation | * |
Division | / |
Exponenten | ^ oder ** |
Modulo | %% |
Wurzel | sqrt(x) |
Beispiele
[Bearbeiten]Addition
[Bearbeiten]> 2+4 [1] 6
Subtraktion
[Bearbeiten]> 4-1 [1] 3
Multiplikation
[Bearbeiten]> 2*2 [1] 4
Division
[Bearbeiten]> 4/2 [1] 2
Potenzen
[Bearbeiten]Für die Berechnung von Potenzen gibt es zwei Alternativen
> 2^3 [1] 8
bzw. mit Notation mit einem doppelten Multiplikationszeichen,
> 2**3 [1] 8
In der folgenden Zeile wird die Potenz einer Dezimalzahl berechnet.
> 0.1**2 [1] 0.01
Division mit Rest
[Bearbeiten]Bei der Division mit Rest gibt der Divisor (im folgenden Beispiel ) an, welche ganzzahligen Reste als Ergebnis auftreten können (im folgenden Beispiele 0,1,2)
> 10%%3 [1] 1
Für negative Dividenden (-5) mit Divisor 4 gilt das analog mit , da gilt:
> (-5)%%4 [1] 3
Wurzeln
[Bearbeiten]> sqrt(100) [1] 10
Das Ziehen einer Wurzel erfolgt über die Funktion sqrt
. Damit Funktionen arbeiten können, benötigen sie ein „Argument“. Das Argument ist in unserem Fall die Zahl 100, da wir die Wurzel aus 100 ziehen wollen. Argumente werden der Funktion in runden Klammern angehängt. So erklärt sich der Befehl sqrt(100)
(siehe oben).
Kommastellen
[Bearbeiten]In R ist das Dezimaltrennzeichen ein Punkt (und nicht, wie im deutschsprachigen Raum üblich, ein Komma).
> 2.01 + 4.2 [1] 6.21
> 2.6 * 3.72 [1] 9.672
Nachkommastellen
[Bearbeiten]R zeigt standardmäßig 6 Nachkommastellen an. Intern rechnet R mit "doppelter Genauigkeit". Damit sind Nummern mit ca. 17 Stellen (1 Ziffer + 16 Nachkommastellen oder eben eine 17 stellige Zahl ohne Nachkommastellen) repräsentierbar. Möchte man die Nachkommastellen entsprechend angezeigt bekommen, so kann man dies mit der options
-Funktion einstellen:
options(digits=17)
Nach dieser Eingabe liefert R Ergebnisse mit bis zu 16 Nachkommastellen.
Runden
[Bearbeiten]R zeigt standardmäßig 6 Nachkommastellen an. Ziehen wir die Wurzel aus 3, erhalten wir folgendes Ergebnis:
> sqrt(3) [1] 1.732051
Dieses Ergebnis kann mit der Funktion round gerundet werden:
> round(sqrt(3)) [1] 2
Es besteht des Weiteren die Möglichkeit, die Anzahl der Nachkommastellen in der round-Funktion mitanzugeben. Die round-Funktion kann zwei Argumente verarbeiten. Das erste Argument heißt x und ist die Zahl, die gerundet werden soll (in unserem Beispiel „Wurzel aus 3“). Das zweite Argument heißt „digits“ und gibt an, auf wieviele Nachkommastellen das Argument x gerundet werden soll. Wollen wir das Ergebnis mit zwei Nachkommastellen angegeben bekommen, so lautet der Befehl:
> round(x=sqrt(3), digits=2) [1] 1.73
Wenn man den Namen des Argumentes mit in die Funktion schreibt, spielt die Reihenfolge der Argumente keine Rolle. So könnten wir die Berechnung in unserem Falle auch erzeugen durch:
> round(digits=2, x=sqrt(3)) [1] 1.73
Eine Übersicht über die Argumente einer Funktion (und ihrer Reihenfolge) liefert die Help-Seite, die wir in unserem Falle aufrufen können per:
> ?round
Wenn man die Reihenfolge der Argumente einer Funktion kennt, so muss man die Argumente nicht unbedingt als solche benennen. In unserem Beispiel funktioniert auch die Eingabe:
> round(sqrt(3), 2) [1] 1.73
Dies liegt daran, dass das erste Argument x (in unserem Falle sqrt(3)) und das zweite Argument digits (in unserem Falle 2 Nachkommastellen) heißt. Wichtig ist hierbei allerdings, dass man die Argumentwerte in der tatsächlich geforderten Reihenfolge schreibt, welche durch die Help-Seite (?round) eingesehen werden kann.
Integrieren
[Bearbeiten]Zum Integrieren kann die Funktion integrate
verwendet werden. In folgendem Beispiel wird die Dichtefunktion der Standardnormalverteilung von 0 bis +Unendlich integriert (und damit die Wahrscheinlichkeit bestimmt, dass eine Standardnormalverteilung einen positiven Wert annimmt):
> integrate(dnorm, 0, Inf) 0.5 with absolute error < 4.7e-05
Möchte man der zu integrierenden Funktion weitere Parameter übergeben, kann man das im Anschluss an die drei ersten Parameter der Funktion integrate() tun. In folgendem Beispiel integrieren wir die Dichte einer N(2,5^2) verteilten Zufallsgröße von 0 bis +Unendlich:
> integrate(dnorm, 0, Inf, mean=1, sd=5) 0.5792597 with absolute error < 1.4e-05
Daten in R
[Bearbeiten]Daten in R können in Form verschiedener Objekte auftreten und auf vielfältige Weise manipuliert werden. Sie können direkt eingegeben oder über eine Textdatei oder Datenbank eingelesen und ausgegeben werden.
Variablen
[Bearbeiten]Variablen dienen in R, wie in anderen Programmiersprachen, der Speicherung von Daten. Dies können sowohl einfache Datentypen sein oder auch komplexe Datentypen wie Vektoren. Variablen bestehen aus einem Namen und einem Wert.
Bezeichnungskonventionen für Variablen
[Bearbeiten]- Variablen beginnen mit einem Buchstaben und sollten keine Umlaute und Sonderzeichen enthalten, mit Ausnahme des Unterstrichsymbols _.
- ein Variablennamen kann neben dem Unterstrichsymbols _ auch Zahlen enthalten, also z.B. alter1 oder alter_1.
- Der Name darf nicht mit einer Zahl beginnen. Variablennamen wie 3r sind in R nicht erlaubt.
Diese Bezeichnungskonventionen in R gelten analog in vielen anderen Programmiersprachen (z.B. Javascript).
Wertzuweisung an Variablen
[Bearbeiten]Der Wert einer Variable kann in R auf zwei Weisen zugewiesen werden:
- mit dem Gleicheitszeichen "=" und
- mit dem Pfeiloperator "->"
> x=10 > y<-20
Beide Zuweisungsmöglichkeiten führen intern zu einem analogen Resultat. Die Ausgabe der Variableninhalte x und y zeigt, dass beide Zuweisung zu x und y erfolgreich die Werte 10 und 20 zugewiesen haben. > x [1] 10 > y [1] 20 >
Der ersten Variable mit dem Namen x wurde der Wert 10 zugewiesen, mittels = Zeichen, der Wert von y wurde mittels <- zugewiesen. Beide Weisen bedeuten das gleiche. Anschließend wurden die Werte ausgegeben. Dazu muss man einfach den Variablennamen eintippen. Im Gegensatz zu vielen anderen Programmiersprachen wird der Typ einer Variable nicht explizit definiert.
Groß- und Kleinschreibung
[Bearbeiten]R unterscheidet zwischen Groß- und Kleinschreibung bei den Variablennamen. Die Variable x sei wie oben bereits mit dem Wert 10 belegt. Wenn man nun versucht, den Wert von X (als Großbuchstaben) auszugeben, meldet R. dass diese Objekt nicht gefunden wurde, während von x (als Kleinbuchstaben) den vorher definierten Wert 10 erhält.
> X Fehler: Objekt 'X' nicht gefunden > x [1] 10
Variableninhalte ausgeben
[Bearbeiten]Durch die einfache Eingabe eines Variablennamens in die R-Konsole wird der Inhalt der Variable ausgegeben. Dies gilt auch für Vektoren oder Matrizen.
> z [1] 5.0 3.0 4.0 8.0 6.0 2.5 0.0 1.3
Variablen anzeigen und Variablen löschen
[Bearbeiten]Der Befehl ls()
listet alle Variablen auf, die sich in der aktuellen Worksession befinden.
Genauso einfach kann man auch Variablen löschen. Dies geschieht durch den Befehl rm()
und die Angabe des Variablennamen in der Klammer.
> ls() [1] "bigtable" "bt" "fl" "names" "t100" "tt" > rm(t100) > ls() [1] "bigtable" "bt" "fl" "names" "tt" >
In diesem Beispiel wurden zuerst alle Variablennamen aufgelistet und anschließend wurde die Variable t100 mittels rm gelöscht.
Variablen vergleichen
[Bearbeiten]Das Vergleichen von zwei Variablen ist vor allem in der Programmierung sehr wichtig.
> x==y [1] FALSE > y=10 > x==y [1] TRUE
Beim Vergleich der beiden Variablen x und y werden deren Inhalte verglichen. Mittels == wird verglichen, ob der Wert beider Variablen gleich ist. Dieser Fakt klingt trivial, aber in einigen objekt-orientierten Programmiersprachen wie Java wird dies anders gehandhabt. Zu beachten ist, dass man ohne Fehlermeldung einen numerischen Wert mit einem String vergleichen kann. Dies ist eine Quelle für Fehler.
Variablen als Vektoren
[Bearbeiten]In der Regel arbeitet man in R nicht mit einzelnen Werten, sondern mit Liste von Datensätze. Ein einzelner Datensatz setzt sich dann aus mehreren Werten zusammen (z.B. Temperatur, pH-Wert, Sauerstoffgehalt), die dann bei der Datenerhebung die Temperatur, den pH-Wert und den Sauerstoffgehalt an einem Messzeitpunkt beschreibt. Wenn man die Erhebung im zeitlichen Verlauf (z.B. jeden Tag für 365 Tage) wiederholt entsteht eine Tabelle mit 3 Spalten und 365 Zeilen, wobei in der Regel eine weitere Zeile als 0-te Zeile ergänzt wird, die als Spaltenüberschrift (header) interpretiert wird.
Temperaturverlauf als Vektor
[Bearbeiten]In dem folgende Beispiel betrachtet man die erste Spalte für die Temperatur als Vektor mit 5 Messzeitpunkten, die einer Variablen gespeichert werden.
> temperatur <- c(11,12,15,9,10) > temperatur [1] 11 12 15 9 10
Vergleichsoperation für den Temperaturverlauf
[Bearbeiten]Verbindet man diese Variable mit eine Vergleichsoperation, dann erhält man einen Vektor mit den Boolschen Variablen für die Gültigkeit der Vergleichsoperation.
> temperatur > 10 [1] TRUE TRUE TRUE FALSE FALSE
Die letzten beiden Werte erfüllen, die Bedingung (eine Temperatur von 10 zu überschreiten) nicht. Diese Vergleichsoperation für Vektoren kann man z.B. verwenden, festzustellen, wann Messwerte einen Grenzwert überschritten haben.
Einfache Datentypen (modes)
[Bearbeiten]Bei der Einführung der Variablen wurde nur kurz erwähnt, dass Variablen verschiedene Dinge beinhalten können. Welche Datentypen dies sein können, wird in diesem und den folgenden Abschnitten erläutert. Prinzipiell gibt es in R drei Datentypen, einfache Datentypen, komplexe Datentypen und speziellere Datentypen. Wir beginnen mit den einfachen Datentypen, die in den bisherigen Beispielen auch schon eingesetzt haben. Die wesentlichen einfachen Datentypen sind:
numeric
für Zahlen (wobei zwischeninteger
unddouble
unterschieden werden kann)complex
für komplexe Zahlenlogical
für logische Wertecharacter
für Zeichenraw
für Bytes
> 5 > 3i+2 > TRUE > "abcde" > as.raw(65)
Zusätzlich gibt es einige etwas speziellere Datentypen, die zunächst nicht weiter behandelt werden sollen
function
für Funktionencall
für Funktionsaufrufeexpression
für Ausdrücke
Mit der Funktion mode()
lässt sich der Datentyp eines Objekts bestimmen. Der mode ist eine grundlegende Eigenschaft eines jeden Objekts. Eine weitere grundlegende Eigenschaft ist length()
. Zusätzliche Eigenschaften können mit attributes()
ermittelt werden.
Komplexe Datentypen: Klassen
[Bearbeiten]Aus einfachen Daten lassen sich verschiedene Arten von Datenstrukturen zusammensetzen. Dies sind
vector
für Listen von Objekten gleichen Typslist
für beliebige Listen von Objekten (auch rekursiv)factor
für Vektoren zur Gruppierung von Objektenmatrix
array
data.frame
- ...
Welche Datenstruktur ein Objekt besitzt, kann mit class()
ermittelt werden. Klassen sind ein allgemeines Konzept von erweiterten Datentypen. Jedes Objekt besitzt eine Klasse, die mit einem einfachen Datentyp übereinstimmt oder zusätzlich festgelegt werden kann.
Klassen sind wichtig für so genannte generische Funktionen, die je abhängig von der Klasse eines übergebenen Objekts arbeiten. Beispielsweise gibt es die Klasse Date
, mit der ein numerischer Wert als Datum interpretiert werden kann. Die Klasse eines Objekts lässt sich mit class()
feststellen.
d <- as.Date("2005-01-01") # Umwandlung einer Zeichenkette in ein Date-Objekt mode(d) [1] "numeric" class(d) [1] "Date"
Zeichenketten
[Bearbeiten]Zeichen oder Zeichenketten werden mit einfachen oder doppelten Anführungszeichen geschrieben. Dabei werden die Daten als n-dimensionale Vektoren gespeichert. Mehrere dieser Vektoren können zu einer Matrix zusammengefügt werden. Die Vektoren können drei verschiedene Datentypen enthalten, numerische und logische Werte sowie Text. Des weiteren existieren Funktionen, mit welchen Datenreihen erzeugt werden können.
h <- 'Hallo' w <- 'Welt!' paste(h,w,sep=", ") [1] "Hallo, Welt!"
In diesem Beispiel werden zwei Zeichenketten miteinander verknüpft und ein Separator zwischen den Zeichenketten eingefügt. Es werden also eigentlich drei Zeichenketten miteinander verknüpft. Für diese Zeichenkettenverknüpfung wird der Befehl paste benutzt.
Die Länge von Zeichenketten lässt sich mit dem Befehl nchar ermitteln.
> x=" ABC" > nchar(x) [1] 4
Die Zeichenkette x hat die Länge 4, das Leerzeichen vor dem ersten A wird mitgezählt.
Zeichenketten lassen sich mit Hilfe verschiedener Befehle wie split, grep und substr bearbeiten.
> substr(x,2,3) [1] "AB"
Hier wird ein Substring aus x erzeugt. Der erste Parameter gibt den Start und der letzte das Ende des Substrings in der ursprünglichen Zeichenkette an. Die Nummerierung der Zeichen beginnt bei 1. In diesem Fall werden die Buchstaben AB ausgewählt. Wenn der Start- und der Endwert gleich sind, wird nur ein Buchstabe ausgewählt.
> substr(x,2,2) [1] "A"
Vektoren
[Bearbeiten]Ein Vektor ist ein Datentyp in R, der eine Reihe anderer Datentypen wie z. B. numeric oder character enthält. Ein Vektor ist ein eindimensionales Array. Hier ein Beispiel aus der Genetik, ein Vektor mit SNPs von 150 Tieren.
> s1 [1] GG GG GG GG GG AC GG AA GG AC GG AG AG AC AG AC GG GG AC GG AA GG GG AG CC AA GG AC AA GG AG AC GG GG AG GG [37] GG GG AG GG AG GG AG AC AG AG GG AG GG AA GG AG AG GG AA AC AG GG AG GG AA AC GG GG AA GG GG GG AG GG AG AG [73] AA AC GG AG AG AA AG AG AG AG AA AA AG AC GG GG CC AA GG GG AC CC GG AC AG AC AC GG AG GG AC AG AA AG GG CC [109] AG GG AG AG AG AC AG AA AC AA AC AA AG AG GG GG GG AG GG GG AG GG AG GG AG AA GG GG AA AC AG AG GG AG AG AA [145] AA GG AG AC AA GG
Auf die Elemente eines Vektors kann man wie folgt zugreifen:
> s1[1] [1] GG Levels: AA AC AG CC GG
Hier wurde ein einzelnes Element, das erste Element des Vektors, ausgewählt. Im Gegensatz zu den meisten anderen Programmiersprachen wird das erste Element eines Vektors in R nicht mit 0 sondern mit 1 angesprochen. Zusätzlich werden immer die Level bei Vektoren ausgegeben, die Faktoren enthalten.
> s1[3:15] [1] GG GG GG AC GG AA GG AC GG AG AG AC AG Levels: AA AC AG CC GG
Durch die Angabe eines Bereichs können auch mehrere Elemente ausgewählt werden. In diesem Beispiel wurden die Elemente 3 bis 15 ausgewählt.
> class(s1) [1] "factor" > dim(s1) NULL > length(s1) [1] 150
Mit class findet man heraus, um was für einen Vektor es sich handelt, hier ist es ein Vektor der Faktoren enthält. Der Befehl dim liefert überraschenderweise bei Vektoren null, die Länge eines Vektors lässt sich aber mittels length bestimmen, hier enthält der Vektor 150 Elemente.
> levels(s1) [1] " AA" " AC" " AG" " CC" " GG"
Wenn man einen Vektor mit Faktoren hat, kann man mittels levels die unterschiedlichen Elemente extrahieren und in Kombination mit length die Anzahl der Elemente ermitteln.
length(levels(s1)) [1] 5
Wenn man herausfinden möchte wie oft die einzelnen Faktoren im Vektor vorkommen, kann man den Befehl table verwenden.
> table(s1) s1 AA AC AG CC GG 22 22 46 4 56
Manuelle Dateneingabe
[Bearbeiten]Eine einfache Möglichkeit manueller Dateneingabe ist die Funktion c
:
c(5,3,4,8,6,2.5,0,1.3)
liest die Zahlenfolge "5, 3, 4, 8, 6, 2.5, 0, 1.3" ein. Wichtig ist hierbei, dass als Dezimaltrennzeichen ein Punkt stehen muss.
Der eben genannte Aufruf erzeugt nur die Ausgabe
[1] 5.0 3.0 4.0 8.0 6.0 2.5 0.0 1.3
Eingabe von logischen Werten:
[Bearbeiten]abc <- c(TRUE,FALSE,TRUE,FALSE,FALSE,T,F,T,T)
speichert die logischen Werte in abc. Statt TRUE und FALSE werden oft die Variablen T und F genutzt. Diese sind standardmäßig gesetzt, können aber vom Benutzer geändert werden, was eine Fehlerquelle darstellt.
Umgang mit Datensätzen (Erstellen, Auswählen und Filtern)
[Bearbeiten]GNU R: Umgang mit Datenätzen (Erstellen, Auswählen und Filtern)
Datenimport und -export
[Bearbeiten]Der Datenaustausch zwischen verschiedenen Anwendungen ist oft eine mühsame Angelegenheit mit vielen Fallstricken. Er erfordert daher einiges an Aufmerksamkeit und Sorgfalt. R kann zahlreiche Formate einlesen. Welches Format im Einzelfall am geeignetsten ist, muss oft ausprobiert werden, besonders wenn das native Format eines Programmes nicht unterstützt wird. So wird z.B. das Dateiformat der Statistiksoftware Statistica von R nicht unterstützt. Allerdings bietet Statistica die Möglichkeit, die Daten unter anderem als SPSS-Datei oder als CSV-Datei (via Text File) zu exportieren, die von R eingelesen werden können.
Import
[Bearbeiten]Import aus Textdateien
[Bearbeiten]Mit der read.csv
, read.table
und verwandten Funktionen können Daten aus Textdateien (txt) importiert werden. read.table
ist die Basisfunktion zum Import von Textdateien. read.csv
und read.csv2
sowie einige Funktionen mehr sind Anpassungen an häufig auftretenden Fälle. CSV ist z.B. das Standardexportformat für viele Tabellenkalkulationen und andere Anwendungen, unterscheidet sich aber, je nachdem ob als Dezimaltrennzeichen der Punkt (englischer Sprachraum) oder das Komma (bei uns) verwendet wird.
Legen Sie eine txt-Datei mit folgendem Inhalt an, indem Sie die folgenden Zeilen markieren, kopieren und in einen Texteditor einfügen:
Geschlecht Alter Gewicht Groesse m 28 80 170 w 18 55 174 w 25 74 183 m 29 101 190 m 21 84 185 w 19 74 178 w 27 65 169 w 26 56 163 m 31 88 189 m 22 78 184
Speichern Sie diese Textdatei unter dem Namen „Tabellentest.txt“ auf Ihre Festplatte. Nun können Sie die Tabelle mit der Funktion read.table() in R einlesen:
> meinetabelle <- read.table("/Pfad/zur/Tabelle.txt", header=TRUE)
Das Argument header=TRUE besagt, dass die erste Zeile der Datei keine Daten enthält, sondern die Bezeichnungen (Variablen) der Tabellenspalten angibt.
Die Tabelle ist nun in dem Objekt meinetabelle vorhanden. Sie können sie sich ansehen, indem Sie eingeben:
> meinetabelle
Geschlecht Alter Gewicht Groesse 1 m 28 80 170 2 w 18 55 174 3 w 25 74 183 4 m 29 101 190 5 m 21 84 185 6 w 19 74 178 7 w 27 65 169 8 w 26 56 163 9 m 31 88 189 10 m 22 78 184
In unserem Beispiel waren die Daten jeweils mit einem Leerzeichen getrennt. Haben Sie eine Textdatei, in welcher die Daten durch einen Tab getrennt sind, müssen sie die read.table-Funktion um das Argument sep=“\t“
erweitern:
> meinetabelle <- read.table("/Pfad/zur/Tabelle.txt", sep=“\t“, header=TRUE)
Wurden die Daten von einer Tabellenkalkulation, wie z.B. Excel, aber auch aus Statistikprogrammen, als CSV-Datei (comma separated values) exportiert, dann muss noch unterschieden werden, welche Schreibkonvention verwendet wurde. Bei englischsprachiger Software wird der Punkt als Dezimaltrennzeichen verwendet und das Komma, um die verschiedenen Werte voneinander zu trennen. In diesem Fall ist read.csv
zu verwenden. Sofern das Komma als Dezimaltrennzeichen dient und der Strichpunkt (;) die einzelnen Werte voneinander trennt, dann kommt read.csv2
zum Einsatz.
Tipp: Bei CSV-Dateien kommt es leicht zu Problemen, wenn Textvariablen, z.B. mit Kommentaren, vorhanden sind. Diese können das jeweilige Trennzeichen enthalten. Beim Import kommt es dann dazu, dass nachfolgende Felder mit falschen Inhalten gefüllt werden. Nicht jedes importierende Programm gibt eine Fehlermeldung aus, obwohl mehr Felder als erwartet auftreten. Das gilt auch für R. Eine Abhilfe besteht darin, ein alternatives Trennzeichen zu verwenden, das garantiert nicht in den Textvariablen auftritt, z.B. @ (wenn es sich nicht zufällig um Emailadressen handelt). Allerdings ist das nicht mit allen Programmen möglich. Eine weitere Möglichkeit besteht darin, Stringvariablen in Anführungszeichen zu setzen. Auch das ist nicht immer möglich. Im ungünstigsten Fall müssen die Textvariablen nachbearbeitet und das jeweilige Trennzeichen ersetzt werden. Auf jeden Fall ist es erforderlich die Daten nach dem Import auf Fehler zu kontrollieren. Bei R führt das zusätzliche Datenfeld dazu, dass ein zusätzlicher Fall angelegt wird, der durchgängig mit fehlenden Werten (NA) belegt ist. Mit dim(x) kann einfach überprüft werden, ob mehr Fälle als erwartet vorliegen. |
Import aus dem Zwischenspeicher / Clipboard
[Bearbeiten]Analog dem Import aus Textdateien kann statt einer File bei read.table auch stdin() als Quelle angegeben werden. In diesem Fall wartet R auf Texteingaben. Wenn sich im Zwischenspeicher eine Tabelle befindet, kann diese per Copy and Paste übernommen werden.
> a <- read.table(file=stdin(),header=T) 0: Name Geschlecht Lieblingsfarbe # R wartet auf Eingabe 1: Hans m gruen 2: Waldemar w blau 3: Tanja m rosa 4: # Return in leerer Zeile schließt Eingabe ab > a Name Geschlecht Lieblingsfarbe 1 Hans m gruen 2 Waldemar w blau 3 Tanja m rosa
Dies ist oft die einfachste Variante des Imports, wenn aus Browsern oder PDF-Files Tabellen übernommen werden sollen, die bereits hinreichend formatiert sind.
Tipp: Wenn die Daten aus einer HTML-Seite übernommen werden, ist die Verwendung des Webbrowser Firefox in Verbindung mit dem Add-On Table2Clipboard hilfreich.
Wenn die Standardeinstellung mit Tabulator-Trennung Probleme macht, funktioniert zum Beispiel die Parameterkombination row-seperator: "\n", column-seperator: "@" in Table2Clipboard und read.table(file=stdin(),header=T,dec=".",sep="@") in R. |
Import aus MySQL
[Bearbeiten]Um aus R auf eine MySQL-Datenbank zugreifen zu können, muss das Paket RMySQL installiert sein. Es benötigt zusätzlich das Paket DBI (und unter Windows die Datei libmySQL.dll
, die in MySQL enthalten ist).
library(RMySQL) # package RMySQL laden drv = dbDriver("MySQL") # MySQL verwenden # Verbinde mit einer Datenbank con = dbConnect(drv,"user/password@dbname") # Verbinde mit einer Datenbank und verwende Benutzer/Passwort aus der Datei .my.cnf con = dbConnect(drv,"dbname") # Andere Möglichkeit con <- mysqlNewConnection(drv,"dbname","user","password") # listet alle Tabellen auf dbListTables(con) # Anfrage rs <- dbGetQuery(con,"SELECT COUNT(*) FROM mytable")
Hilfreich sind auch die Funktionen mysqlReadTable
und mysqlWriteTable
.
Import aus SPSS
[Bearbeiten]Sie können Ihre vorliegenden SPSS-Daten in R importieren. Hierzu müssen Sie allerdings zunächst ein Zusatzpaket in R installieren. Funktionen zum Datenimport aus SPSS bieten beispielsweise die Pakete foreign und Hmisc. Sie installieren also zunächst eines der Zusatzpakete per:
install.packages("foreign", dependencies = TRUE)
oder
install.packages("Hmisc", dependencies = TRUE)
Das Argument dependencies=TRUE besagt, dass alle weiteren relevanten Zusatzpakete, die eventuell für foreign und Hmisc benötigt werden, direkt mitinstalliert werden. Bevor sie die Funktionen der Zusatzpakete nutzen können, müssen Sie diese aktivieren per:
library(foreign) oder library(Hmisc)
Der Import kann nun über die folgenden Funktionen erfolgen:
- read.spss() (aus dem foreign-Paket)
- spss.get() (aus dem Hmisc-Paket)
Dies geschieht mit der read.spss-Funktion beispielsweise so:
meinspss <- read.spss("/der/pfad/zur/SPSSdatei.sav")
Beachten Sie, dass Sie den kompletten Pfad zur SPSS-Datei angeben müssen. Auf Windows-Systemen werden Pfadangaben normalerweise mit einem Backslash (\) dargestellt. Dies funktioniert in R nicht, da der Backslash in R ein Steuerungszeichen ist. Die übliche Schreibweise in R mit dem Schrägstrich (/) funktioniert aber auch unter Windows einwandfrei. Falls unter Windows der Backslash beibehalten werden soll, muss jeder Backslash durch zwei Backslashes ersetzt werden (z.B. C:\\Pfad\\zur\\SPSSdatei.sav
).
Sind in der SPSS-Datei nominale Daten vorhanden, deren numerische Ausprägungen mit Labels hinterlegt sind (z.B. bei einer Variable „Geschlecht“ sind die Ausprägungslabels 0=weiblich, 1=männlich gesetzt), so werden die ausgeschriebenen Labels als Variablenwert in R übernommen
Wenn Sie möchten, dass nicht die Variablenlabels, sondern die numerischen Ausprägungen (z.B. Geschlecht = 0;1) übernommen werden, muss der Befehl um das Argument use.value.labels=FALSE
erweitert werden:
meinspss <- read.spss("/pfad/zur/SPSSdatei.sav", use.value.labels=FALSE)
Jetzt sind in dem Objekt meinspss die Daten der SPSS-Datei vorhanden. Sie können sie sich ansehen, indem Sie eingeben:
meinspss
Tipp: Für Variablennamen mit Umlauten können beim Import aus SPSS-Dateien Probleme auftreten. Deshalb ist es möglicherweise notwendig vor dem Import die Sprachoptionen richtig zu setzen (z.B. Sys.setlocale(locale="de_DE.ISO8859-15") ). read.spss übernimmt auch die in SPSS vergebenen Variablenlabels, allerdings als spezielles Attribut. Diese können über attr(meinspss,"variable.labels") als Vektor ausgegeben und entsprechend als Titel für Tabellen und Graphiken weiter verwendet werden. ( Als Beispiel, wie sich SPSS-Labess in R importiert lassen, dient dieses Skript. ) |
Import aus XML
[Bearbeiten]Grundsätzlich gibt es zwei Mechanismen zum importieren von Daten aus einer XML Datei.
- Suche eine Element mit folgenden Eigenschaften (dafür gibt XPath)
- Wenn du über ein Element mit folgenden Eigenschaften stolperst tue dies
Das erstere ist einfacher und das zweite effizienter.
Nehmen wir folgende XMLDatei an:
<root> <child1> <child2>data1</child2> <child2>data2</child2> </child1> </root>
In beiden Fällen brauchen wir:
install.packages(XML) library(XML)
Für die erste Variante:
xmlobj <- xmlTreeParse(xmlfile) data <- xpathSApply(xmlobj, "/root/child1/*", xmlValue(x))
Die zweite Variante:
data <<- list() counter <<-1 state <<- F xmlEventParse(xmlfile,useTagName=F,addContext=F,handlers=list( startElement=function(name,...){ if(!state) { if(name=="child2") state<<- T else {} }}, text=function(name,...){ if(state) { data[[counter]]<<-name counter<<-counter+1 }}, endElement=function(name,...){ if(state) { if(name=="child2") state<<- F else {} }}))
Man sieht sofort, dass man die zweite Variante nur benutzen will, wenn die erste unglaublich langsam ist.
Import aus Excel-Dateien und CSV-Dateien
[Bearbeiten]Excel Dateien können auf verschiedenen Wegen in R importiert werden. Welcher Weg für den Benutzer der Richtige ist hängt von folgenden Bedingungen ab:
- Excel-Version,
- Umfang der Daten,
- Strukturierung der Daten.
Excel ist sehr weit verbreitetes Programm zur Verarbeitung von Tabellen. Es gibt diverse Versionen dieser Software und durch die kontinuierliche Weiterentwicklung von Excel gibt es auch verschieden Versionen des Excel Dateiformats. Für die verschiedenen Excel Formate gibt es Importmöglichkeiten in R z.B. via eines Datenbanktreibers.
Neben diesen Importmöglichkeiten gibt es den oft praktikableren Weg, die Datei im Excel Format in eine CSV (Comma-Separated Values) Datei umzuwandeln. Dazu kann man Excel selbst aber auch andere Programme wie Open Office verwenden. Der Nachteil dieses Weges ist, dass man nur eine Tabelle umwandeln kann. Oft bestehen Excel Dateien aus mehreren Tabellen. Nach der Umwandlung kann man die CSV Datei in R wie folgt einlesen:
tt = read.csv("t.csv")
Hier wird die Datei t.csv aus dem aktuellen Arbeitsverzeichnis in die Variable tt vom Typ "list" eingelesen. Alternativ kann auch folgende Anweisung verwendet werden:
tt = read.table("t.csv", sep=",")
Die Option "sep" legt fest, welches Zeichen R als Zelltrenner in der Datei interpretieren soll. Weitere Optionen sind unter GNU R: read.table zu finden.
HDF5 Export/Import
[Bearbeiten]HDF5 unterstützt eine performante Speicherung von potenziell sehr grossen R-Objekten wie Vektoren, Matrizen und Arrays in einem Programmiersprachen unabhängigen Binärformat. HDF5 kann daher als alternative zu R's implementierten save/load Funktionen verwendet werden. Da es mit HDF5 auch möglich ist, nur Subsets von gespeicherten Daten einzulesen können damit auch Datensätze verarbeitet werden, die grösser als der Computer-RAM sind.
Das auf CRAN verfügbare Paket h5 implementiert das HDF5 Interface, siehe auch
http://cran.r-project.org/web/packages/h5/index.html
library(h5) # Erstelle einen Integer-Vektor, eine Numeric-Matrix und ein Character-Array testvec <- as.integer(rnorm(100) * 100) testmat <- matrix(rnorm(120), ncol = 3) testarray <- array(LETTERS[c(1:26, 1:26)], c(2, 2, 13)) # Speichere Objekte in HDF5-File file <- h5file("test.h5") file["testgroup", "testmat"] <- testmat file["testgroup", "testvec"] <- testvec file["testgroup", "testarray"] <- testarray h5close(file)
Daten laden und speichern
[Bearbeiten]Daten laden
[Bearbeiten]Daten können mit load("Dateiname")
geladen werden.
Wenn die Datei im Internet liegt, muss sie mit Hilfe der url()
-Funktion geladen werden
load(url("http://Pfad/zu/Datei.RData")) # Beispiel-URL
Daten speichern
[Bearbeiten]Mit der Funktion ls()
listet R alle vorliegenden Variablen auf.
Arbeitsspeicher speichern
[Bearbeiten]Mit save.image("dateiname.RData")
wird das vorliegende Datenframe (alle Variablen) als sichtbare Datei im working directory (getwd()) gespeichert (Wenn man nur save.image()
ausführt, wird das Datenframe als ".RData" gespeichert und ist dann im Dateibrowser unsichtbar).
Wenn man dann R wieder startet, wird diese Datei automatisch geladen. Unter Linux scheint es notwendig zu sein, den Arbeitsspeicher per Hand zu laden: Zunächst muss man in das Verzeichnis wechseln, in dem die Datei liegt. Diese wird dann mittels load("Dateiname.RData") geladen.
einzelne Objekte speichern
[Bearbeiten]Wenn nur einzelne Objekte gespeichert werden sollen, wird die save
-Funktion angewandt.
Mit dem list
-Parameter werden die gewünschten Objekte angegeben, welche in die Datei file
gespeichert werden sollen.
save(file="/Users/produnis/working/R/Einzelobjekt.RData", list="Objekt") # Beispiel
Arbeitsverzeichnis
[Bearbeiten]Das aktuelle Arbeitsverzeichnis kann per getwd()
angezeigt werden.
Mit dem Befehl dir()
werden die Dateien des aktuellen Arbeitsverzeichnisses angezeigt.
Mit dem Befehl setwd()
kann das aktuelle Arbeitsverzeichnis gewechselt werden (set Working Directory = setwd).
setwd("/Users/myaccount/R/") # Neues Arbeitsverzeichnis setzen
Auf Dauer kann es einfacher sein, ein eigenes Arbeitsverzeichnis beim Startvorgang einzustellen. Für diese Fälle gibt es die Datei Rprofil.site. Dieser muss nur eine letzte Zeile (gefolgt von einem Zeilenumbruch) mit dem Befehl "setwd" hinzugefügt werden.
CSV Dateien
[Bearbeiten]Oft liegen die Daten, die Sie analysieren wollen, in einem CSV-Format vor. Möchte man diese Daten z.B. statistisch auswerten, muss man diese von der eigenen Festplatte in den Arbeitsbereich einladen. Gegeben seien Klausurergebnis mit 3 Aufgaben und 5 Personen
name , aufgabe1 , aufgabe2 , aufgabe2 Anna , 10 , 15 , 13 Bert , 3.5 , 13 , 0 Camilla , 12 , 8 , 15 Dieter , 5 , 6 , 7 Emilia , 15 , 15 , 14.5
Laden in einen Dataframe
[Bearbeiten]Dabei wird z.B. die obige CSV-Datei[1] in einen Dataframe studentdata geladen.
studentdata <- read.csv("data.csv", header=TRUE, stringsAsFactors=FALSE)
Spaltensummen berechnen
[Bearbeiten]Wenn die obige CSV-Datei die Ergebnisse einer Klausur darstellen, so kann man die Daten nun auswerten. Exemplarisch werden in diesem Fall lediglich
- Spaltensummen zur Berechnung der Gesamtpunktzahl berechnet und
- eine Spalte mit der Summe der Aufgaben ergänzt.
Danach steht der Dataframe in seiner verarbeiteten Form zur Speicherung in einer neuen Datei bereit.
a1 <- studentdata$aufgabe1
a2 <- studentdata$aufgabe2
a3 <- studentdata$aufgabe3
studentdata$summe <- a1+a2+a3
Datenstruktur nach Berechnung der Punktesumme
[Bearbeiten]Die CSV-Datei wird nach der Speicherung später die folgenden Spaltenstruktur besitzen
name , aufgabe1 , aufgabe2 , aufgabe2 , summe
Anna , 10 , 15, 13 , 38
Bert , 3.5 , 13, 0 , 16.5
Camilla , 12 , 8 , 15 , 35
Dieter , 5 , 6 , 7 , 18
Emilia 15 , 15 , 14.5 , 44.5
Speichern der CSV-Datei nach der Auswertung
[Bearbeiten]Der folgende Befehl schreibt dann den Inhalte eines Dataframes in eine CSV-Datei (z.B. nach R die Punktesummen in den Teilaufgaben ausgerechnet hat).
Mit folgendem Befehl wird dann die Dataframe in der neu angelegten Datei datasumme.csv[2]. Existiert die Datei bereits, wird diese überschrieben. Daher ist es ratsam für Rohdaten nicht zu überschreiben, sondern die verarbeiteten Daten in eine neue Datei zu schreiben. Dies gilt insbesondere, wenn man Fehler in der Verarbeitung hat und dann der Dataframe ggf. leer ist.
write.csv(studentdata, "datasumme.csv", row.names = FALSE)
Laden von CSV-Dateien
[Bearbeiten]Mit folgendem Befehl kann man die CSV-Datei in einen Dataframe einladen. In dem obigen Aufbau der CSV-Datei gibt es eine Headerzeile mit den Spaltenbezeichnungen.
name , aufgabe1 , aufgabe2 , aufgabe2
Um R die Information zu geben, dass die erste Zeile als Spaltenbezeichnungen zu lesen sind, gibt man header=TRUE in Ladebefehl an. Dies ist in der Regel ein sinnvolles Vorgehen, weil man Zahlenwerten nicht ansieht, welche Bedeutung diese haben (z.B. Anzahl von Tieren Temperatur, Länge, Breite, Alter, ...). Fehlen diese Informationen und beginnt CSV-Datei direkt mit dem ersten Datensatz, verwendet man header=FALSE . Die obige Datei hätte dann das folgende Aussehen.
Anna , 10 , 15, 13 Bert , 3.5 , 13, 0 Camilla , 12 , 8 , 15 Dieter , 5 , 6 , 7 Emilia 15 , 15, 14.5
Linux und Mac
[Bearbeiten]Unter Linux und Mac wird der Pfadnamen standardmäßig mit einem Slash "/" getrennt
studentdata <- read.csv("/home/teacher/documents/data.csv", header=TRUE, stringsAsFactors=FALSE)
Windows
[Bearbeiten]Unter Windows ist der Backslash "\" zur Trennung der Pfadnamen verwendet. Im Pfadname ist dabei der doppelte Backslash als Trennung zu verwenden.
studentdata <- read.csv("C:\\Users\\Teacher\\Documents\\data.csv", header=TRUE, stringsAsFactors=FALSE)
Speichern von CSV-Dateien
[Bearbeiten]In diesem Beispiel geht man davon, dass die Daten in R in einem Dataframe vorliegen. Der Dataframe wurde dabei durch einen Auswertungsalgorithmus neu erzeugt, bzw. ein Dataframe mit Rohdaten wurde durch den Algoríthmus modifiziert. Im obigen Beispiel hat der der Algorithmus die Summe aller Teilaufgaben ausgerechnet und das Ergebnis in einer Spalte summe ergänzt.
name , aufgabe1 , aufgabe2 , aufgabe2 , summe Anna , 10 , 15, 13 , 38 Bert , 3.5 , 13, 0 , 16.5 Camilla , 12 , 8 , 15 , 35 Dieter , 5 , 6 , 7 , 18 Emilia 15 , 15 , 14.5 , 44.5
StringsAsFactors
[Bearbeiten]Wenn man diese CSV-Speicherungsmethode verwendet, sollte man im Normalfall spezifizieren, das Stringvariable (hier die Vornamen in der ersten Spalte) nicht als Faktoren interpretiert werden. Dies erfolgt mit dem Parameter stringsAsFactors=FALSE. Damit konvertiert R die Textvariable in der ersten Spalte nicht in einen Faktor.
Linux und Mac
[Bearbeiten]Unter Linux und Mac wird auch beim Speichern der Pfadnamen standardmäßig mit einem Slash "/" getrennt. Wenn die Rohdate
write.csv(studentdata, "/home/teacher/documents/datasumme.csv", row.names = FALSE)
Windows
[Bearbeiten]Unter Windows ist der Backslash "\" zur Trennung der Pfadnamen verwendet. Im Pfadname ist dabei der doppelte Backslash als Trennung zu verwenden.
write.csv(studentdata, "C:\\Users\\Teacher\\Dokumente\\datasumme.csv", row.names = FALSE)
Quellennachweise
[Bearbeiten]- ↑ Bert Niehaus (2023) data.csv aus GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: data.csv
- ↑ Bert Niehaus (2023) datasumme.csv aus GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: datasumme.csv
Daten selektieren
[Bearbeiten]Daten auswählen
[Bearbeiten]Sehr oft möchte man nicht alle Daten aus einer eingelesenen Datei verarbeiten, sondern nur Teile davon. Hier bietet R elegante Lösungen basierend auf Rs sehr flexiblen Parameterverarbeitung.
Inhaltsverzeichnis[Bearbeiten]
|
Extrahieren von Spalten aus einer Tabelle
[Bearbeiten]Problem 1
[Bearbeiten]Ich habe ein Tabelle und möchte nun diese Tabelle reduzieren. Es sollen nur die Spalten ausgewählt werden, die mit den Buchstaben "Row" anfangen.
Lösung 1
[Bearbeiten]Wir verwenden als Beispiel mit eine kleine Tabelle, um das Prinzip der Selection deutlich zu machen (siehe CSV-Beispieldatei data.csv[1]):
name | aufgabe1 | aufgabe2 | aufgabe3 | punkte |
---|---|---|---|---|
Anna | 10 | 15 | 13 | 38 |
Bert | 3.5 | 13 | 0 | 16.5 |
Camilla | 12 | 8 | 15 | 35 |
Dieter | 5 | 6 | 7 | 18 |
Emilia | 15 | 15 | 14.5 | 44.5 |
Friedrich | 11 | 12 | 4 | 27 |
Mit dem dim kann man die Dimension der Tabelle (dataframe) überprüfen.
> dim(studentdata) [1] 6 5
Die Originaltabelle mit 6 Zeilen und 5 Spalten. Nun wollen wir die Spalten extrahieren, die mit dem Prefix "aufgabe" beginnen.
log4aufgaben <- grepl("aufgabe", colnames(studentdata))
Mit dem logischen grep-Befehl grepl erhält man eine Vektor mit boolschen Variable "TRUE" bzw. "FALSE", wobei der Wahrheitswert angibt, ob der Spaltennamen mit "aufgabe beginnt.
name | aufgabe1 | aufgabe2 | aufgabe3 | punkte |
---|---|---|---|---|
FALSE | TRUE | TRUE | TRUE | FALSE |
Mit dem normalen grep-Befehl (ohne "l" am Ende) erhält man die Spaltenindizes, die mit "aufgabe" beginnen.
index4aufgaben <- grep("aufgabe", colnames(studentdata))
Als Resultat erhält man einen Vektor mit 3 Einträgen
2 | 3 | 4 |
Wenn man nun die Anzahl der Aufgaben in einer Tabelle bestimmen möchte, muss man nur die Länge des Indexvektors "index4aufgaben" berechnen
aufgabenanzahl <- length(index4aufgaben)
Nun extrahieren wir alle Spalten, die die Punkte für einzelne Aufgaben enthält.
nur_aufgaben <- studentdata[ , index4aufgaben]
Die Tabelle nur_aufgaben enthält nur die Spalten mit Aufgabenpunkten und reduziert damit Ausgangstabelle auf die mit "grep" gefundenen Indizes.
aufgabe1 | aufgabe2 | aufgabe3 |
---|---|---|
10 | 15 | 13 |
3.5 | 13 | 0 |
12 | 8 | 15 |
5 | 6 | 7 |
15 | 15 | 14.5 |
11 | 12 | 4 |
Wenn wir nun die Dimension des resultierenden Dataframes/Tabelle untersuchen, erhält man 6 Zeilen und 3 Spalten.
> dim(nur_aufgabe) [1] 6 3
Extrahieren von Spalten mit Spaltennamen
[Bearbeiten]Problem 2
[Bearbeiten]Gegeben ist ein Tabelle (Dataframe) mit bekannten Spaltenüberschriften (column names) und möchte nun aus dieser Tabelle einzelne Spalten, die in einem speziellen Anwendungsfall von Interesse sind, zu einer neuen Tabelle zusammenzufassen.
CSV-Datei - Dataframe 2
[Bearbeiten]name , aufgabe1 , aufgabe2 , aufgabe3 , summe Anna , 10 , 15, 13 , 38 Bert , 3.5 , 13, 0 , 16.5 Camilla , 12 , 8 , 15 , 35 Dieter , 5 , 6 , 7 , 18 Emilia 15 , 15 , 14.5 , 44.5
Die obige Datei wird in einen Dataframe geladen:
studentdata <- read.csv("klausur.csv", header=TRUE, stringsAsFactors=FALSE)
Lösung 2
[Bearbeiten]Man erstellt zunächst eine neue Tabelle in dem nur der Name der Person und die erreichte Punktzahl in der Klausur enthalten ist.
name <- studentdata$name
summe <- studentdata$summe
klausur_ergebnis <- data.frame(name,summe)
Die erzeugte Tabelle hat zwei Spalten mit dem Namen "name" und "summe". Wenn man diesen Dataframe wieder in eine CSV-Datei speichert, erhält man folgende CSV-Datei mit dem Namen "klausurergebnis.csv" mit folgenden Befehl.
write.csv(studentdata, "datasumme.csv", row.names = FALSE)
Die Tabelle hat dann die folgenden Spaltenstruktur.
"name" , "summe" "Anna" , 38 "Bert" , 16.5 "Camilla" , 35 "Dieter" , 18 "Emilia" , 44.5
Quellennachweis
[Bearbeiten]Matrix- und Listenoperationen
[Bearbeiten]Matrix- und Listenoperationen
[Bearbeiten]Matrizen
[Bearbeiten]Die wichtigsten Befehle für Matrizen in Kurzform:
t(matrix) ............transponierte matrix eigen(matrix)$val ... Eigenwerte eigen(matrix)$vec ... Eigenvektoren cov(swiss) .......... Kovarianz cor(swiss) .......... Korrelation diag(Eigenwerte) .... Diagonale der Eigenwerte %*% ................. Matrixmultiplikation
Beispiel - Matrixmultiplikation
[Bearbeiten]Ein Standardmatrixmultiplikation , die bei gegebener Matrix und einem gegebenen Spaltenvektor , kann wie folgt berechnet werden:
A <- matrix(c(1,2,3,4,5,6), ncol=3)
x <- c(4,2,1)
b = A %*% x
In diesem Beispiel wird im ersten Befehl ein Spaltenvektor c(1,2,3,4,5,6) in eine Matrix mit 3 Spalten konvertiert (ncol=3 number of columns 3), die dann als Matrix zwei Zeilen besitzt.
Zugriff auf Komponenten, Spalten, Zeilen der Matrix
[Bearbeiten]Den Zugriff auf einzelne
- Komponenten,
- Reihen und
- Spalten
einer Matrix erfolgt durch Doppelindizierung analag zum Matrixindex in der Mathematik.
Matrixkomponente
[Bearbeiten]Mit A[1,2] greift man auf das Element in der ersten Zeile und zweiten Spalte zu.
komp <- A[2,3]
Mit der Zuweiseung enthält komp den Wert der Komponenten in der 2. Zeile und 3. Spalte (also 6).
Matrixspalte
[Bearbeiten]Durch Weglassen des Zeilenindex wählt man alle Elemente der jewiligen Spalte aus. Im folgenden Beispiel wird aus der Matrix die 2. Spalte ausgewählt.
spalte <- A[,2]
Matrixzeile
[Bearbeiten]Durch Weglassen des Spaltenindex wählt man alle Elemente der jewiligen Zeile aus. Im folgenden Beispiel wird aus der Matrix die 2. Zeile ausgewählt.
spalte <- A[2,]
Listen
[Bearbeiten]Für Listen stehen die Funtionen lapply
bzw. sapply
zur Verfügung. Dabei wird auf jedes Element eines geordneten Objektes eine definierbare Funktion angewandt.
Beispiel:
In dem data.frame cars
sind die beiden metrischen Variablen speed
(Geschwindigkeit) und dist
(Distanz bis zum Stillstand) enthalten.
Wir wollen nun zu jeder Variable das arithmetische Mittel:
R> lapply ( cars, function(x){ mean(x) } ) $speed [1] 15.4 $dist [1] 42.98
Generell gibt lapply
eine Liste mit den resultierenden Objekten aus:
R> class ( lapply ( cars, function(x){ mean(x) } ) ) [1] "list"
Die Funktion sapply
fasst die daraus resultierenden Listenelemente zusätzlich zu einem einzelnen Objekt zusammen:
R> sapply ( cars, function(x){ mean(x) } ) speed dist | 15.40 42.98 R> class ( sapply ( cars, function(x){ mean(x) } ) ) [1] "numeric"
Bei komplexeren Objekten (und insbesondere bei Datumsobjekten der Klassen POSIXt
) tritt zuweilen das Problem auf, dass bei der Verwendung von lapply
die Klassendefinition verloren geht.
Dieses Problem kann durch folgenden Aufruf gelöst werden:
do.call( c , lapply ( liste , function (x) { x$datum) } ) )
Benutzeroberflächen und Erweiterungen
[Bearbeiten]R kann von anderen Programmen/Prozessen Befehle empfangen und Ergebnisse zurückgeben. Dadurch ist es möglich graphische Benutzeroberflächen für R zu schreiben oder in andere Anwendungen zu integrieren.
Graphische Benutzeroberflächen
[Bearbeiten]Die Entwicklung grafischer Benutzeroberflächen für GNU R steckt noch in den Anfängen. Eine komplette Liste der verschiedenen Projekte findet sich unter http://www.r-project.org/GUI. Die unten gelisteten Projekte verfolgen das Ziel, eine mehr oder weniger vollständige Benutzeroberfläche zu entwickeln (im Gegensatz z.B. zu reinen Skript-Editoren):
JGR (Jaguar)
[Bearbeiten]JGR wird von der Uni Augsburg entwickelt. JGR ist eine einfache grafische Benutzeroberfläche für R, geschrieben in Java. Nützlich sind hier vor allem der Paketmanager zum Laden von Zusatzpaketen und der Objektbrowser, welcher die vorhandenen Daten übersichtlich ordnet und auch bearbeiten lässt. Dem Programmmenü können eigene Funktionen hinzugefügt werden. Eine Anleitung hierzu befindet sich in der Paketbeschreibung.
JGR benötigt Sun 1.5 SDK und muss für Linux/Unix selbst kompiliert werden.
R Commander
[Bearbeiten]R Commander ist eine Menu-Oberfläche von John Fox für Anfänger, Umsteiger und Mausbenutzer, die sich schwer damit tun, die Kommandos von R zu lernen.
http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/
R Commander kann als Bibliothek unter R geladen werden. Man benötigt also kein Java und man muss nichts kompilieren.
RKWard
[Bearbeiten]RKWard ist ein GUI für R unter KDE Frameworks 5. Es ist derzeit für GNU/Linux, macOS und Windows verfügbar. Enthalten sind unter anderem ein Paketmanager, Skript-Editor, Daten-Editor, Objektbrowser und Hilfebrowser. Neue Dialoge zu Statistikfunktionen lassen sich über Plugins hinzufügen.
Sciviews-R
[Bearbeiten]Sciviews ist eine Verbindung von mehreren Anwendungen, die das Arbeiten mit R erleichtern sollen. Sciviews ist derzeit nur unter Windows lauffähig.
RStudio
[Bearbeiten]RStudio hält unter einer GUI Console und mehrere Skriptfenster (Source) zum Einen sowie Workspaceinhalte, History und Grafikfenster, Workingdirectory, aktive/passive Pakete und ein Hilfefenster zum Anderen gemeinsam parat. Das Grafikfenster hält eine Historyfunktion und einfache Exportmöglichkeiten vor. Aus der History kann sowohl in die Console als auch das Skriptfenster kopiert werden. RStudio ist für Windows, Mac und Linux verfügbar.
Sonstige Schnittstellen
[Bearbeiten]R in Emacs: ESS
[Bearbeiten]Für den Texteditor Emacs gibt es mit ESS (Emacs Speaks Statistics) bereits eine fertige All-In-One-Lösung.
Neben Standardfunktionen (automatische Codeformatierung, kontextabhängige Hilfe) besteht der Hauptvorteil darin, dass in einem Fensterbereich programmiert werden kann und sich dann flexibel und schnell einzelne Befehle, Funktionen, Teile oder ganze Programme an R senden lassen. Ergebnisse von R werden in diesem Fall in einem zweiten Fensterbereich in Emacs oder der ausgewählten Grafikumgebungen ausgeben.
Auf diese Weise ist es z.B. auch möglich R-Prozesse auf entfernten Rechnern zu steuern.
Näheres zu ESS findet sich unter: http://ess.r-project.org/
Tipp: Wenn Sie ESS unter Mac OS X mit dem für die GUI-Version standardmässig verwendeten Quartz-Window-Manager verwenden wollen, dann empfiehlt sich die Installation und Einbindung des Pakets CarbonEL und setzen von options(device="quartz") . |
Automation und dynamische Dokumenterstellung
[Bearbeiten]Batchmode
[Bearbeiten]Mit R kann der gesamte Funktionsumfang auch automatisiert werden. Dazu wird lediglich eine Source-Datei mit Programmcode benötigt, die dann z.B. folgendermaßen unter LINUX zur Ausführung gebracht werden kann:
bash> R --vanilla --save < /verzeichnis/meine_sourcefile.r
Auf diese Weise lassen sich ohne komplizierte Navigation durch Menüs usw. aktuelle Graphiken erstellen oder Berechnungen durchführen und (z.B. via cron) automatisieren.
Dynamische Dokumenterstellung mit dem Paket (S-/odf-)Weave
[Bearbeiten]Statistiken sind kein Selbstzweck. Zumeist steht am Ende statistischer Auswertungen ein Bericht oder eine wie auch immer geartete Veröffentlichung der Ergebnisse. Mit dem Paket Sweave ist es möglich den Prozess der Statistischen Auswertung und der Dokumentation dieser Arbeit in einem Workflow zu behandeln. Die Idee ist, dass R-Befehle in ein Dokument eingefügt werden und durch statistische Auswertungen ersetzt werden. Dadurch lassen sich leicht aktualisierbare Berichte erstellen oder Forschungsarbeiten schon während der statistischen Auswertung erstellen. Sweave ist auch ein großer Schritt in Richtung replizierbarer statistischer Auswertungen, da sich Daten, Auswertungsprozeduren und Auswertungsergebnisse in einem Dokument ablegen lassen.
Derzeit ist dies für drei Dokumentformate möglich: .odf , .tex und html.
Open document Format (.odt) ist das Standardformat der freien Textverarbeitung Open Office bzw. LibreOffice
Tex ist ein relativ altes und etabliertes Textsatzsystem, das vom gewohnten What-you-see-is-what-you-get zu Gunsten des What-you-see-is-what-you-mean-Paradigmas abweicht. Text wird hier von Anweisungen und Tags umgeben, die dem System sagen, wie ein bestimmter Textteil zu setzen ist. Dadurch können während des Schreibens Layout-Fragen im Hintergrund bleiben.
odfWeave ist ein eigenes Paket, das (noch) nicht Teil der Standardinstallation ist und muss manuell nachinstalliert werden: |
> install.packages("odfWeave", dependencies=TRUE) > library(utils) # Laden der neuinstallierten Pakete > library(odfWeave)
Sweave ist Teil des utils
-Paketes und muss ggf. ebenfalls installiert werden.
Grundprinzipien dynamischer Dokumenterstellung
[Bearbeiten]Die Idee hinter (S)Weave ist folgende: Wir erstellen ein Dokument. An bestimmten Stelle geben wir eine Anweisung, dass eine Statistik oder Graphik eingefügt werden soll. Bei Bedarf lassen wir R das Dokument berechnen und erhalten ein Dokument mit Tabellen, Diagrammen usw.
Die Anweisungen an R werden bei Verwendung des Sweave-Pakets typischerweise in einer charakteristischen Form gegeben, die der Noweb-Syntax folgen. Dabei handelt es sich um Blöcke (genannt Chunks) mit folgender Syntax:
<<Blockname,Aufrufparameter,... >>= #1. Startteil #R Befehle #2. Anweisungen print(iris) @ #3. Schlussteil
Zu beachten ist die dreiteilige Struktur: Der Startteil hat die Form <<... >>=
, der Anweisungsteil besteht aus gewöhnlichen R Befehlen und zum Schluss jedes Chunks steht als charakteristisches Erkennungszeichen ein @
R und Open Office
[Bearbeiten]Öffnen Sie ein Open-Office-Dokument, fügen Sie an einer beliebigen Stelle das folgende Chunk ein:
<<Unser_erster_Testoutput,echo=FALSE>>= print(iris) #Ausgabe des Datensatz iris @
Speichern Sie das neu erstellte Dokument zum Beispiel unter dem Namen "roffice.odt
".
In R können Sie jetzt mit dem Befehl
> odfWeave("/pfad/zur/datei/roffice.odt","/pfad/zur/datei/rofficeout.odt")
alle Chunks in dem Office Dokument roffice.odt
durch die entsprechenden Berechnungen ersetzen lassen.
In unserem Fall sollte das neu erstellte Dokument rofficeout.odt
nach dem Öffnen in Open Office den Ausdruck des Iris-Datensatzes enthalten. Damit dürfte das wesentliche Prinzip deutlich geworden sein. Da Open Office auch problemlos in das derzeit noch verbreitete doc
-Format exportieren kann, bietet odfWeave
die entscheidende Schnittstelle für alle R-Nutzerinnen, die auf den Austausch mit Windows/MS Office-Produkten angewiesen sind.
Bleibt der Vollständigkeit halber noch der Parameter echo
zu erklären. echo=TRUE
hätte zur Folge gehabt, dass die Anweisung print(iris)
mit in das Dokument rofficeout.odt
geschrieben worden wäre.
R und Latex
[Bearbeiten]Zur Erzeugung von (La)Tex-Dokumenten geht man identisch vor wie bei odf-Dateien. In eine tex-Datei werden chunks integriert und in einem zweiten Schritt mit R durch die Ergebnisse ersetzt. Konventional enden Tex-Sweave-Dateien allerdings mit der Endung .Rnw
(für R - Noweb) und statt odfWeave kommt Sweave zum Einsatz:
> Sweave("texfile.Rnw")
generiert die Datei "texfile.tex" im selben Verzeichnis. Diese kann dann mit Latex in verschiedenste Formate wie Postscript oder PDF gebracht werden.
Unter LINUX lässt sich der gesamte Arbeitsschritt folgendermaßen automatisieren:
bash> echo "library(\"utils\"); Sweave(\"/Pfad/Dateiname.Rnw\")" | R --no-save --no-restore ; bash> latex /Pfad/Dateiname.tex
Dynamische Webseiten mit R
[Bearbeiten]Das Paket R2HTML
implementiert den Sweave-Workflow für Html-Seiten und ermöglicht damit weltweit abrufbare und automatisch aktualisierte statistische Auswertungen.
Ausblick
[Bearbeiten]So weit die grundlegende Funktionsweise von odfWeave und Sweave. Der eigentliche Clou ist jedoch sicher, dass auf diese Weise automatisiert Graphiken und formatierte Tabellen eingebunden werden können, was in Kürze in einem der nächsten Kapitel ausgeführt werden wird.
Bis dahin sind die entsprechenden Hilfeseiten zu empfehlen:
> ?Sweave > ?odfWeave
(Und wer sich schon einarbeitet, kann natürlich auch diesen Artikel ergänzen. (-; )
Alternativen zu Sweave
[Bearbeiten]Abgesehen von Sweave gibt es heute auch noch "knitr". Mit diesem R-Package ist es ebenso möglich dynamische Dokumentenerstellung durchzuführen. Es erlaubt weiters mehr Einstellungsmöglichkeiten als Sweave.
> install.packages("knitr", dependencies=TRUE)
> library("knitr")
> knit("C:/Users/Pfad/zur/Datei.Rnw")
Durch die Installation von knitr und der weiteren Befehlskette wird aus einer *.Rnw-Datei eine *.tex-Datei erstellt, die dann beispielsweise unter Windows mit MikTeX via , zu einer *.pdf-Datei kompiliert werden kann. So ist ein durchgehender Arbeitsprozess gestaltbar.
Weblinks
[Bearbeiten]- odfWeave-Manual (PDF, englisch)
- Offizielle knitr-Seite des Erfinders von knitr (englisch)
- Wikipedia-Artikel: Knitr (englisch)
- Wikipedia-Artikel: Open Document Format (odf / odt)
- Wikipedia-Artikel: Open Office
- Wikipedia-Artikel: TeX
Diagramme und Grafiken erzeugen
[Bearbeiten]Mit R
können die verschiedensten Diagramme und Grafiken erstellt werden.
Funktionen zum Erstellen von Diagrammen
[Bearbeiten]barplot()
-- Erstellen von Säulendiagrammenboxplot()
-- Erstellen von Boxplots (beinhaltet: Maximalwert, Minimalwert, Median, Quartile, Ausreißer)contour()
-- Erstellen von Konturdiagrammen, plotten von Isoliniendotchart()
-- Erstellen von Punktediagrammenforestplot
- (aus dem Zusatzpaket "rmeta") erzeugt ein so genanntes "Forest Plot" zusammen mit einer Texttabelle.hist()
-- Erstellen von Histogrammenmap
- (aus dem Paket "maps" und "mapdata") erstellt Karten von Ländern, Kontinenten und der Weltmetaplot
- (aus dem Zusatzpaket "rmeta") erzeugt ein so genanntes "Forest Plot" (Meta-Analyse-Plot), welches im Rahmen von Metaanalysen gängig ist.par()
-- Setzen von grafischen Parameternpersp()
-- Erstellen von Dreidimensionalen Abbildungenpie()
-- Erstellen von Kreisdiagrammenplot()
-- Standardfunktion zum Erstellen von Diagrammentitle()
-- Beschriftung von Diagrammen
Funktionen zum Erstellen zusätzlicher grafischer Elemente
[Bearbeiten]colors()
zeigt eine Übersicht aller Standardfarben, genauergesagt ihrer Farbwörter (blue, red, green, ...) an.- lines(x,y) - Zum Zeichnen von beliebigen Linienzügen und Funktionen.
- polygon(x,y) - erzeugt ein (beliebiges) Vieleck, dass schraffiert oder mit Farbe gefüllt werden kann.
plotmath
- fügt einem Plot mathematische Symbol hinzu
Grafiken speichern
[Bearbeiten]jpeg()
- speichert die Grafik als jpeg-Datei ab.png()
- speichert die Grafik als png-Datei ab.pdf()
-- speichert eine Grafik als PDF-Datei ab.postscript()
-- Speichert die Grafikausgabe in eine Postscript-Datei.savePlot()
-- Speichert die aktuelle Grafik in eine DateidevSVG()
-- speichert eine Grafik als SVG-Datei ab. Dazu ist das Zusatzpaket RSvgDevice erforderlich.
siehe auch
[Bearbeiten]Literatur
[Bearbeiten]- Paul Murrell (2005): "R Graphics", Chapman & Hall, 301 Seiten, ISBN 158488486X
Weblinks
[Bearbeiten]- Beispiele von Benutzer Thire in der Wikipedia
- Category:Created_with_R in Wikimedia Commons
- R Graphics by Paul Murrell
Deskriptive Statistik
[Bearbeiten]Dieses Kapitel gibt einen kurzen Überblick über gängige Verfahren der deskriptiven Statistik. Deskriptive Statistik versucht im wesentlichen die Eigenschaften einer großen Anzahl von Fällen in möglichst charakteristische Kennwerte zusammenzufassen.
Als Beispiel verwenden wir den Datensatz Bundesliga
im Paket wikibooks
:
library(wikibooks) data(Bundesliga)
Überblick über den Datensatz
[Bearbeiten]Wie class(Bundesliga)
zeigt, ist Bundesliga ein Objekt vom Typ data.frame. Ein Überblick über die enthaltenen Variablen liefert:
R> names(Bundesliga) [1] "Saison" "Spieltag" "Datum" [4] "Anpfiff" "Heim" "Gast" [7] "Tore.Heim" "Tore.Gast" "Tore.Heim.Halbzeit" [10] "Tore.Gast.Halbzeit"
Einen ersten Eindruck über den ganzen data.frame
liefert str(Bundesliga)
hinsichtlich der Variablentypen und summary(Bundesliga)
hinsichtlich deren typischen Ausprägungen.
Mittelwert, Extremwerte und Streuung
[Bearbeiten]Mittelwerte
[Bearbeiten]Angenommen uns interessieren zunächst die Tore pro Spiel (also der Tore der Heim- und Gast-Mannschaft zusammen):
R> tore <- Bundesliga$Tore.Heim + Bundesliga$Tore.Gast
Das arithmetische Mittel (durchschnittliche Anzahl an Toren pro Begegnung) errechnet sich dann als
R> mean(tore) [1] 3.0991
Den Zentralwert (Median) als ebenfalls gebräuchlicher Mittelwert kann auch für ordinale Daten berechnet werden und liefert den Wert, der die 50% kleineren von den 50% grösseren Variablenwerte trennt:
R> median(tore) [1] 3
Die Methode des Median lässt sich durch Quantile beliebig verallgemeinern:
R> quantile(tore,c(0,0.5,1)) 0% 50% 100% 0 3 12 R> quantile(tore,seq(0.1,by=0.1)) 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 1 2 2 2 3 3 4 5 6 12
Was war die geringste (Minimum) und höchste Zahl (Maximum) an Toren in einem Spiel?
R> cat( min(tore), max(tore) ) 0 12
Minimum und Maximum liefert auch die Funktion range
.
Wie im Kapitel Umgang mit Datensätzen beschrieben können wir uns die entsprechenden Fälle jederzeit anzeigen lassen:
Bundesliga[tore==max(tore),]
Streuung
[Bearbeiten]Die Spannweite zwischen höchstem und niedrigstem Wert erhält man durch:
diff ( range (tore ) )
Das gebräuchlichste Maß für die Streuung einer Variablen ist die Varianz:
In Bezug auf unser Beispiel errechnet sich die Varianz entsprechend als:
R> (sum( (tore-mean(tore) ) ^2) )/(length(tore) ) [1] 3.4091
Natürlich verfügt über diese Standardfunktion. Allerdings berechnet die Funktion var
die inferenzstatistische, davon abweichend definierte Variante der Varianz:
Somit ermitteln wir die deskriptive Varianz am einfachsten mit:
R> var(tore) * (length(tore)-1) / length(tore) [1] 3.4091
Das selbe Problem ergibt sich hinsichtlich der Standardabweichung, die als Quadratwurzel der eben berechneten Varianz definiert ist. Die Funktion sd
liefert nur die inferenzstatistische Variante.
Daher empfiehlt sich bei häufigem Gebrauch die Definition folgender Funktionen:
varianz <- function(x) {n=length(x) ; var(x) * (n-1) / n} stdabw <- function(x) {n=length(x) ; sqrt(var(x) * (n-1) / n)}
Damit kann die (deskriptive) Standardabweichung leichter berechnet werden:
stdabw(tore) [1] 1.8464
Häufigkeitstabellen und Prozenttabellen
[Bearbeiten]Die Funktion table
fasst verschiedene Kategorien zusammen und erstellt daraus eine Häufigkeitstabelle:
R> table(tore) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 880 1627 3057 2670 2438 1319 828 358 146 44 24 10 5
Die entsprechende Prozentwert-Tabelle erhält man, wenn man die Absolutwerte durch die Gesamtzahl der Begegnungen (=Länge des Vektors Tore) teilt und mit 100 multipliziert. Der Übersichtlichkeit halber runden wir mit round noch auf 2 Nachkommastelle:
R> round( table(tore) / length(tore) *100 ,2) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 6.56 12.14 22.80 19.92 18.19 9.84 6.18 2.67 1.09 0.33 0.18 0.07 0.04
Eine schöne Formatierungsalternative stellt auch die Funktion describe
zur verfügung, wenn das Paket Hmisc
installiert wurde:
R> describe(tore) tore n missing unique Mean .05 .10 .25 .50 .75 .90 .95 13406 0 13 3.099 0 1 2 3 4 6 6 0 1 2 3 4 5 6 7 8 9 10 11 12 Frequency 880 1627 3057 2670 2438 1319 828 358 146 44 24 10 5 % 7 12 23 20 18 10 6 3 1 0 0 0 0:
Mehrdimensionale Häufigkeitsverteilungen
[Bearbeiten]Die Funktion table(Zeilenvariable,Spaltenvariable,weitere Dimensionen) erstellt auch konditionale Häufigkeitstabellen. Damit lassen sich zum Beispiel die Tore in Abhängigkeit von der Saison darstellen. Eine andere Möglichkeit ist ftable
, die auch die Formelnotation
(abhängige Var. ~ 1. unabhäng. + 2. unabhäng. + ...
)
akzeptiert:
ftable(tore~Saison,data=Bundesliga) tore 0 1 2 3 4 5 6 7 8 9 10 11 12 Saison 1963/1964 13 19 45 46 49 30 20 10 4 1 1 1 1 1964/1965 12 26 46 56 42 29 18 4 3 3 1 0 0 1965/1966 21 39 65 59 43 41 19 12 1 3 2 1 0 [...]
Gruppenspezifische Auswertung von Variablen
[Bearbeiten]Angenommen uns interessiert die mittlere Anzahl geschossener Tore pro Saison. Mit der Funktion tapply(VARIABLE, GRUPPENVARIABLE, FUNKTION)
ist dies besonders einfach zu berechnen.
tapply(tore, Bundesliga$Saison, mean)
Dabei ist das erste Argument die betrachtete Variable (Anzahl der geschossenen Tore) und das zweite Argument die Variable nach der gruppiert werden soll (Saison). Als 3. Argument kann eine beliebige Funktion bestimmt werden. Das Ergebnis ist im Falle der Funktion mean
ein benannter Vector:
1963/1964 1964/1965 1965/1966 2.229167 1.945833 2.009804 [...]
Regressionsanalyse
[Bearbeiten]Einleitung
[Bearbeiten]Mit Regressionen wird versucht eine abhängige, metrische Variable in Abhängigkeit von einer oder mehreren unabhängigen Variablen zu beschreiben. Die abhängige Variable soll dadurch üblicherweise kausal auf die Effekte andere Variablen zurückgeführt werden.(Bspw. Regression der persönlichen Laune abhängig vom Wetter) Es gibt zum Teil recht unterschiedliche Regressionsverfahren und R stellt eine Vielzahl an Methoden bereit. Die einfachste Variante eines Regressionsmodells ist die lineare Regression.
Lineare Regression
[Bearbeiten]Ein erstes Beispiel: Lebensalter und Gewicht
[Bearbeiten]Als erstes Beispiel verwenden wir den Datensatz aus Beispiel 5, welcher das Gewicht eines Babys an verschiedenen Lebenstagen enthält. Es werden die Befehle plot()
, abline
, lm
, install.packages
, library
, xyplot
, geom_point
, geom_line
und geom_smooth
verwendet.
Zunächst stellen wir die Daten mit plot()
graphisch dar:
plot(bsp5, type="o", main="Gewicht des Babys", ylab="Gewicht in Gramm", xlab="Lebenstag", col="blue", lwd=2)
Nun fügen wir die Regressionsgeraden hinzu, indem wir die Funktion lm(Y~X)
mit dem Befehl abline()
in die Graphik integrieren.
Y
ist in diesem Falle die Spalte des Gewichts (also hier:bsp5[,2]
)X
ist in diesem Falle die Spalte der Lebenstage (also hier:bsp5[,1]
)
Der Befehl lautet demzufolge:
abline(lm(bsp5[,2]~bsp5[,1]))
Alternative mit xyplot
[Bearbeiten]Um eine Regressionsgerade durch eine Punktwolke zu ziehen, kann auch der Befehl xyplot
aus dem Zusatzpaket lattice
verwendet werden.
Falls lattice
noch nicht installiert ist, muss dies natürlich nun nachgeholt werden:
install.packages("lattice", dependencies = T)
Anschließend aktivieren wir das lattice
-Paket:
library(lattice)
Eine Regressionsgerade erhält man durch:
xyplot(y~x, type=c("p","r"))
Angewendet auf Beispiel 5 lautet der Befehl:
xyplot(bsp5[,2]~bsp5[,1], type=c("p","r"))
Wir erhalten nun eine Punktwolke (type="p"
) der Daten, durch welche die Regressionsgerade (type="r"
) verläuft.
Alternative mit ggplot
[Bearbeiten]Für ggplot()
muß die Bibliothek ggplot2
geladen werden
library("ggplot2")
Mit den Daten von Beispiel 5 wird ein ggplot()
-Objekt erstellt:
g <- ggplot(bsp5, aes(x = Lebenstag, y = Gewicht)) +
geom_point(colour="blue", size = 2.5) + # Daten als Punkte
geom_line(colour="blue", size = 0.8) # Linie, die die Punkte verbindet
Schließlich wird die Regressionsgerade hinzugefügt. Das ebenfalls mögliche Konfidenzintervall um die Gerade wird ausgeblendet.
# Regressionsgerade, ohne Konfidenzintervall (level=0)
g + geom_smooth(method = "lm", colour = "black", level = 0)
Lineare Modelle mit R
[Bearbeiten]Bei linearer Modellierung wird angenommen, dass die Effekte verschiedener unabhängiger Variablen folgendermassen addiert werden können:
In können zur Berechnung linearer Modelle zum Beispiel die Funktionen lm (für "linear model") oder glm (für "generalized linear model") genutzt werden. Diese verwenden für den obigen Ausdruck die folgende Formelnotation:
Y ~ Variable_X1 + Variable_X2 + …
Die Funktion lm berechnet eine Reihe von Statistiken für dieses Modell, die allerdings in der für diese Funktion voreingestellten Ausgabemethode print.lm
unterdrückt werden. Ausgegeben werden standardmäßig nur die Aufrufbedingungen ("Call:") und die Koeffizienten:
R> lm(bsp5$Gewicht~bsp5$Lebenstag)
Call: lm(formula = bsp5$Gewicht ~ bsp5$Lebenstag)
Coefficients: (Intercept) bsp5$Lebenstag 2971.1 37.5
Eine sehr viel detailliertere Auswertung bekommt man zum Beispiel durch Verwendung der Funktion summary:
R> summary ( lm (bsp5$Gewicht ~ bsp5$Lebenstag) )
Call: lm(formula = bsp5$Gewicht ~ bsp5$Lebenstag)
Residuals:
Min 1Q Median 3Q Max
-167.0 -90.3 20.4 79.7 171.4
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2971.13 43.69 68.0 < 2e-16 *** bsp5$Lebenstag 37.48 1.19 31.5 2.1e-14 ***
--- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 104 on 14 degrees of freedom Multiple R-Squared: 0.986, Adjusted R-squared: 0.985 F-statistic: 991 on 1 and 14 DF, p-value: 2.15e-14
Residuals
- Hier sind die Quartile der Residuen angegeben.
Coefficients
- In der ersten Spalte werden die Konstante (
Intercept
) und die Regressionskoeffizienten des Modells ausgegeben. (Vorsicht beim Vergleich: Dabei handelt es sich nicht um Beta-Werte)
In den folgenden Spalte werden (für die Beispieldaten selbstverständlich sinnlose) inferenzstatistische Masse (Masse für die Verallgemeinerbarkeit der Stichprobe auf die Grundgesamtheit) angezeigt:
- Für jeden der Koeffizienten wird neben der Berechnung Standardfehler (
Std. Error
) ein t-Test mit der Null-Hypothese durchgeführt, für den der entsprechende t-Wert und die SignifikanzPr(>|t|)
angegeben wird.
Größen, die das Gesamtmodell betreffen
:
- Der Standardfehler der Gesamtschätzung (
Residual standard error
). - Das Bestimmtheitsmass (
Multiple R-Square
) und das um die Anzahl der Modellvariablen Korrigierte Bestimmtheitsmass (Adjusted R-squared
) geben an wieviel Prozent der Varianz der Residuen von den realen Werten durch das Modell erklärt wird (in welchem Umfang also die Schätzung von von den realen Werten abweicht). Bei einem Wert von 1 liegen alle Punkte auf der Gerade bzw. Fläche. Je näher an 0 sich der Wert annähert, umso mehr streuen die Messwerte um den angenommenen Verlauf. - Die Ergebnisse des F-Test in der letzten Zeile prüfen die Verallgemeinerbarkeit des Gesamtmodells (F-Wert, Freiheitsgrade und Signifikanz).
Clusteranalyse
[Bearbeiten]Clusteranalyse-Algorithmen finden sich in verschiedenen Paketen von R. Eine Übersicht findet sich in der Taskview Cluster.
- k-Means Algorithmen (Standardpaket stats):
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"))
- Fuzzy C-Means Algorithmen (Paket e1071):
cmeans(x, centers, iter.max = 100, verbose = FALSE, dist = "euclidean", method = "cmeans", m = 2, rate.par = NULL, weights = 1, control = list())
- Hierarchische Clusteranalyse (Standardpaket stats):
hclust(d, method = "complete", members=NULL)
- Zur Berechnung der Distanzen d (Standardpaket stats):
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
Signifikanztests
[Bearbeiten]Mit R
lassen sich diverse Signifikanztests durchführen.
Testauswahl
[Bearbeiten]Bei der Auswahl des geeigneten Verfahrens ist von entscheidener Bedeutung:
- das Datenniveau (nominal-ordinal-metrisch)
- ob die Daten normalverteilt sind
- die Stichprobe (verbunden/unverbunden)
NOMINAL | ORDINAL | METRISCH | ||||||
nicht normalverteilt, aber ähnlich |
normalverteilt | |||||||
unabhängig | abhängig | unabhängig | abhängig | unabhängig | abhängig | unabhängig | abhängig | |
χ2 für: k x l -Felder 2 x 2 Felder |
χ2 McNemar-Test für: 2 x 2 Felder |
Mann-Whitney |
Wilcoxon |
Mann-Whitney |
Wilcoxon |
F-Test (Varianzquotiententest) entscheidet über: |
t-Test für verbundene Stichproben | |
Varianz- homogenität t-Test |
Varianz- heterogenität Welch-Test | |||||||
nichtparametrische Testverfahren | parametrische Testverfahren |
Testdurchführung in R
[Bearbeiten]Test | Durchführung in R |
Chi-Quadrat-Test (χ2) | chisq.test
|
exakter Test nach Fisher | fisher.test
|
Kolmogoroff-Smirnov-Test | ks.test
|
Mann-Whitney-Test | wilcox.test , mit spezieller Optionseinstellungwilcox_test aus dem coin -Package
|
Shapiro-Wilk-Test | shapiro.test
|
t-Test | t.test
|
Varianzquotienten-Test (alias F-Test) |
var.test
|
Welch-Test | t.test , mit spezieller Optionseinstellung
|
Wilcoxon-Test | wilcox.test
|
Weblinks
[Bearbeiten]
Rasch-Modelle
[Bearbeiten]Für R
liegen Zusatzpakete bereit, mit deren Hilfe diverse Rasch-Modelle analysiert werden können.
Package eRm
[Bearbeiten]Mit Hilfe des Package eRm
(extended Rasch modeling) lassen sich folgende Analysen durchführen:
- das dichotome logistische Rasch-Modell
- das linear-logistische Test-Modell
- das Ratingskalen-Modell
- das partial-credit Modell
- das lineare Ratingskalen-Modell
- das lineare partial-credit Modell
Installation
[Bearbeiten]Das Package wird installiert mit dem Befehl (Unter Linux ist gcc-fortran als Voraussetzung zu installieren):
install.packages("eRm", dependencies=TRUE)
Mit Eingabe des Befehls werden die benötigten Zusatzpakete gtools, splines, ROCR, gplots, gdata
mitinstalliert (sofern sie bislang noch nicht installiert wurden).
Vor der Nutzung des Packages muss es erst aktiviert werden per:
library(eRm)
Das dichotome logistische Rasch-Modell
[Bearbeiten]Der Befehl zur Analyse nach dem dichotomen logistischen Rasch-Modell lautet RM()
.
Als Untersuchungsobjekt für RM()
wird eine Matrix benötigt, welche dichotome Daten enthält (0 und 1). Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
RM()
[Bearbeiten]An den RM()
-Befehl können folgende Parameter übergeben werden:
RM(X, W, se=TRUE, sum0=TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Summennormierung / FALSE=ItemnormierungetaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
Beispieldatensatz
[Bearbeiten]Als Beispieldatensatz sollen die Ergebnisse des Minigolfwettbewerbs aus Beispiel 8 genommen werden.
0
bedeutet, dass das entsprechende Loch nicht mit einem Schlag getroffen wurde1
bedeutet, dass das entsprechende Loch mit einem Schlag getroffen wurde
Die Ergebnisse des Wettbewerbs lauten wie folgt.
Loch1 Loch2 Loch3 Loch4 Loch5 Loch6 Loch7 Loch8 Loch9 Loch10 Hans 0 1 1 0 1 1 0 1 1 1 Karola 1 0 1 1 1 0 1 1 1 0 Matthias 1 1 1 0 1 1 1 1 0 0 Stefan 0 0 1 1 0 1 1 0 0 1 Sabine 1 1 1 1 1 1 1 0 0 0 Irma 1 1 0 1 1 1 0 1 0 0 Heike 1 0 1 0 1 1 0 0 0 1 Ralf 1 1 1 0 1 1 0 0 0 0 Rainer 1 1 0 1 1 0 0 1 0 1 Simon 1 0 1 1 1 0 1 0 1 0 Andreas 1 1 1 0 1 0 0 0 0 0 Elke 1 1 0 1 0 1 0 0 1 0 Gabi 0 1 1 1 0 0 1 0 0 1 David 1 1 0 1 0 0 0 0 0 0 Jonas 1 1 0 1 1 0 1 1 0 0 Nicklas 1 1 1 1 0 1 0 0 1 0 Sandra 0 1 0 0 1 0 1 1 0 1 Mario 1 0 1 0 1 1 0 0 0 0 Guido 1 1 1 0 0 0 0 0 1 0 Lisa 0 1 1 0 0 0 1 0 0 0 Peter 1 0 1 0 1 0 0 0 1 0 Justus 1 1 1 0 0 0 1 0 0 1 Josef 1 0 1 0 0 0 0 0 0 0 Brigitte 1 1 1 0 0 0 1 0 1 0 Kevin 0 1 0 0 1 0 0 1 0 1 Marcel 1 1 0 0 0 0 0 0 0 0 Nadine 1 0 0 1 0 1 0 0 1 0 Alex 1 0 0 0 0 0 0 0 0 0 Katharina 0 1 0 0 0 1 1 0 1 1 Daniel 1 1 0 0 0 0 0 0 0 0 Jens 1 1 0 1 0 0 1 0 1 0 Dieter 1 0 0 0 0 0 1 1 0 0 Sebastian 1 0 1 0 1 0 0 0 1 1 Anne 0 0 0 0 1 0 1 0 0 1
Diese Tabelle wird wie folgt erzeugt:
minigolf <- structure(list(Loch1 = c(0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0), Loch2 = c(1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0), Loch3 = c(1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), Loch4 = c(0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), Loch5 = c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1), Loch6 = c(1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 ), Loch7 = c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1), Loch8 = c(1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0), Loch9 = c(1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 ), Loch10 = c(1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1)), .Names = c("Loch1", "Loch2", "Loch3", "Loch4", "Loch5", "Loch6", "Loch7", "Loch8", "Loch9", "Loch10" ), class = "data.frame", row.names = c("Hans", "Karola", "Matthias", "Stefan", "Sabine", "Irma", "Heike", "Ralf", "Rainer", "Simon", "Andreas", "Elke", "Gabi", "David", "Jonas", "Nicklas", "Sandra", "Mario", "Guido", "Lisa", "Peter", "Justus", "Josef", "Brigitte", "Kevin", "Marcel", "Nadine", "Alex", "Katharina", "Daniel", "Jens", "Dieter", "Sebastian", "Anne"))
Parameterschätzung
[Bearbeiten]Die Analyse und Parameterschätzung erfolgt zunächst durch Aufruf der Funktion RM()
RM(minigolf)
Dies liefert folgende Ausgabe:
Results of RM estimation: Call: RM(X = minigolf) Conditional log-likelihood: -155.7848 Number of iterations: 17 Number of parameters: 9 Basic Parameters eta: eta 1 eta 2 eta 3 eta 4 eta 5 eta 6 eta 7 eta 8 eta 9 Estimate 0.7802107 0.4036248 -0.3177005 0.1641012 -0.4439830 -0.07408871 -0.8568075 -0.4439830 -0.5748605 Std.Err 0.3448683 0.3320590 0.3359948 0.3291390 0.3407310 0.33035472 0.3653347 0.3407311 0.3469895
Diese Ausgabe zeigt "lediglich" die eta-Parameter mit dazugehöriger Standardabweichung an.
Da zu weiteren Analysen der Output des RM(minigolf)
-Befehls benötigt wird, speichern wir diesen in die Variable result
result <- RM(minigolf)
Einen besseren Überblick über die soeben durchgeführte Analyse bietet die summary()
-Funktion. Mit ihrem Aufruf werden auch die wichtigen beta-Parameter ausgegeben:
summary(result)
Dies liefert folgende Ausgabe:
Results of RM estimation: Call: RM(X = minigolf) Conditional log-likelihood: -155.7848 Number of iterations: 17 Number of parameters: 9 Basic Parameters (eta) with 0.95 CI: Estimate Std. Error lower CI upper CI eta 1 0.780 0.345 0.104 1.456 eta 2 0.404 0.332 -0.247 1.054 eta 3 -0.318 0.336 -0.976 0.341 eta 4 0.164 0.329 -0.481 0.809 eta 5 -0.444 0.341 -1.112 0.224 eta 6 -0.074 0.330 -0.722 0.573 eta 7 -0.857 0.365 -1.573 -0.141 eta 8 -0.444 0.341 -1.112 0.224 eta 9 -0.575 0.347 -1.255 0.105 Item Easiness Parameters (beta) with 0.95 CI: Estimate Std. Error lower CI upper CI beta Loch1 1.363 0.385 0.609 2.118 beta Loch2 0.780 0.345 0.104 1.456 beta Loch3 0.404 0.332 -0.247 1.054 beta Loch4 -0.318 0.336 -0.976 0.341 beta Loch5 0.164 0.329 -0.481 0.809 beta Loch6 -0.444 0.341 -1.112 0.224 beta Loch7 -0.074 0.330 -0.722 0.573 beta Loch8 -0.857 0.365 -1.573 -0.141 beta Loch9 -0.444 0.341 -1.112 0.224 beta Loch10 -0.575 0.347 -1.255 0.105
Zur graphischen Darstellung stehen die Funktionen plotICC()
und plotjointICC()
zur Verfügung. plotjointICC()
benötigt das RM()
-Output und zeigt die Item-Characteristic-Curves aller Variablen an:
plotjointICC(RM(minigolf))
oder in unserem Fall
plotjointICC(result)
Mit plotICC()
werden die Item-Characteristic-Curve für jedes Item einzeln graphisch dargestellt. Hierbei wird durch drücken der Returntaste zur nächsten Item-Graphik gewechselt.
plotICC(result)
Im Gegensatz zu plotjointICC()
kann plotICC()
auch die Outputs von PCM()
und RSM()
verarbeiten.
Schätzung der Personenparameter
[Bearbeiten]Die Schätzung der Personenparameter erfolgt mit dem Befehl person.parameter()
. Als Input benötigt der Befehl den Output der RM()
-Analyse.
person.parameter(RM(minigolf))
oder in unserem Fall auch
person.parameter(result)
Dies liefert die Ausgabe:
Person Parameters: Raw Score Estimate Std.Error 0 -3.30890751 NA 1 -2.37460583 1.0814193 2 -1.50799727 0.8233509 3 -0.91866630 0.7238722 4 -0.43133018 0.6781861 5 0.01539553 0.6628318 6 0.45847521 0.6727929 7 0.93481125 0.7136595 8 1.41970665 NA 9 1.90460205 NA 10 2.38949746 NA
Auch hier ist es sinnvoll, den Output in eine Variable zu speichern
pp <- person.parameter(result)
Die Ausgabe lässt sich mit der plot()
-Funktion grafisch darstellen:
plot(pp)
Ruft man den summary()
-Befehl auf, erhält man die Personenparameter für jeden einzelnen Probanden:
summary(pp)
Estimation of Ability Parameters Collapsed log-likelihood: -37.38117 Number of iterations: 9 Number of parameters: 7 ML estimated ability parameters (without spline interpolated values): Estimate Std. Err. 2.5 % 97.5 % theta Hans 0.93481125 0.7136595 -0.4639356 2.3335581 theta Karola 0.93481125 0.7136595 -0.4639356 2.3335581 theta Matthias 0.93481125 0.7136595 -0.4639356 2.3335581 theta Stefan 0.01539553 0.6628318 -1.2837309 1.3145219 theta Sabine 0.93481125 0.7136595 -0.4639356 2.3335581 theta Irma 0.45847521 0.6727929 -0.8601747 1.7771251 theta Heike 0.01539553 0.6628318 -1.2837309 1.3145219 theta Ralf 0.01539553 0.6628318 -1.2837309 1.3145219 theta Rainer 0.45847521 0.6727929 -0.8601747 1.7771251 theta Simon 0.45847521 0.6727929 -0.8601747 1.7771251 theta Andreas -0.43133018 0.6781861 -1.7605505 0.8978901 theta Elke 0.01539553 0.6628318 -1.2837309 1.3145219 theta Gabi 0.01539553 0.6628318 -1.2837309 1.3145219 theta David -0.91866630 0.7238722 -2.3374298 0.5000972 theta Jonas 0.45847521 0.6727929 -0.8601747 1.7771251 theta Nicklas 0.45847521 0.6727929 -0.8601747 1.7771251 theta Sandra 0.01539553 0.6628318 -1.2837309 1.3145219 theta Mario -0.43133018 0.6781861 -1.7605505 0.8978901 theta Guido -0.43133018 0.6781861 -1.7605505 0.8978901 theta Lisa -0.91866630 0.7238722 -2.3374298 0.5000972 theta Peter -0.43133018 0.6781861 -1.7605505 0.8978901 theta Justus 0.01539553 0.6628318 -1.2837309 1.3145219 theta Josef -1.50799727 0.8233509 -3.1217353 0.1057408 theta Brigitte 0.01539553 0.6628318 -1.2837309 1.3145219 theta Kevin -0.43133018 0.6781861 -1.7605505 0.8978901 theta Marcel -1.50799727 0.8233509 -3.1217353 0.1057408 theta Nadine -0.43133018 0.6781861 -1.7605505 0.8978901 theta Alex -2.37460583 1.0814193 -4.4941487 -0.2550629 theta Katharina 0.01539553 0.6628318 -1.2837309 1.3145219 theta Daniel -1.50799727 0.8233509 -3.1217353 0.1057408 theta Jens 0.01539553 0.6628318 -1.2837309 1.3145219 theta Dieter -0.91866630 0.7238722 -2.3374298 0.5000972 theta Sebastian 0.01539553 0.6628318 -1.2837309 1.3145219 theta Anne -0.91866630 0.7238722 -2.3374298 0.5000972
Gültigkeitskontrollen
[Bearbeiten]Das aufgestellte Rasch-Modell lässt sich auf verschiedene Weisen hinsichtlich seiner Gültigkeit überprüfen.
- bedingter Likelihood-Quotiententest
bedingter Likelihood-Quotiententest
[Bearbeiten]Der bedingte Likelihood-Quotiententest erfolgt durch Aufruf der Funktion LRtest
.
LRtest(object, splitcr = "median", se = FALSE)
Hierbei gelten die Parameter:
object
= Output vonRM(), PCM()
oderRSM()
splitcr
= Teilungskriterium "median", "mean" oder in Form eines Vektorsse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
Es gelten folgende Hypothesen:
- H0 = "Das Rasch-Modell gilt" (keine Signifikanz)
- H1 = "Das Rasch-Modell gilt nicht" (Signifikanz)
Wir rufen nun die Funktion für unseren Minigolfwettbewerb auf:
LRtest(result)
und erhalten die Ausgabe:
Warning message: Persons with median raw scores are assigned to the lower raw score group! Andersen LR-test: LR-value: 12.58 Chi-square df: 9 p-value: 0.183
Hierbei ist LR-value
der Chi2-Wert und df
die Anzahl der Freiheitsgrade. Da der p-Wert nicht signifikant ist, wird H0 = "Das Rasch-Modell gilt" beibehalten.
Der kritische Chi2-Wert kann noch manuell per qchisq()
errechnet werden. Hierbei müssen Testwahrscheinlichkeit und Anzahl der Freiheitsgrade übergeben werden:
qchisq(0.95,df=21)
Dies liefert das Ergebnis
[1] 32.67057
Da der Chi2-Wert des Tests kleiner ist als der kritische Wert, bestätigt sich erneut die Annahme, dass H0 = "Das Rasch-Modell gilt" beibehalten werden kann.
Wald-Test
[Bearbeiten]Der Wald-Test erfolgt durch Aufruf der Funktion Waldtest
.
Waldtest(object, splitcr = "median")
Hierbei gelten die Parameter:
object
= Output vonRM()
splitcr
= Teilungskriterium "median", "mean" oder in Form eines Vektors
Erreicht ein Item Signifikanz, kann es nicht weiterverwendet werden. Rufen wir die Funktion auf
Waldtest(result)
erhalten wir die Ausgabe:
Wald test on item level (z-values): z-statistic p-value beta Loch1 0.127 0.899 beta Loch2 0.462 0.644 beta Loch3 0.764 0.445 beta Loch4 -1.317 0.188 beta Loch5 -1.299 0.194 beta Loch6 0.009 0.993 beta Loch7 0.721 0.471 beta Loch8 -1.661 0.097 beta Loch9 0.795 0.427 beta Loch10 2.041 0.041
Wir sehen, dass für "Loch10" ein signifikanter p-Wert errechnet wurde. Somit kann dieses Item nicht weiter verwendet werden.
Graphischer Test
[Bearbeiten]Zur graphischen Überprüfung steht die Funktion plotGOF()
zur Verfügung. Sie benötigt den Output der Funktion LRtest()
.
plotGOF(LRtest(result))
Wir erhalten die folgende Graphik:
Itemfit, Personfit und theoretische Wahrscheinlichkeiten
[Bearbeiten]eRm stellt weitere Funktionen zur Überprüfung des Modells zur Verfügung. Mit itemfit()
lassen sich Item-, mit personfit()
Personenparameter überprüfen.
itemfit(pp)
liefert die Ausgabe:
Itemfit Statistics: Chisq df p-value Outfit MSQ Infit MSQ Loch1 43.838 34 0.120 1.289 1.230 Loch2 36.199 34 0.366 1.065 1.055 Loch3 33.027 34 0.515 0.971 0.997 Loch4 29.060 34 0.708 0.855 0.901 Loch5 28.248 34 0.745 0.831 0.880 Loch6 28.045 34 0.754 0.825 0.902 Loch7 33.386 34 0.498 0.982 1.010 Loch8 28.035 34 0.754 0.825 0.860 Loch9 31.049 34 0.613 0.913 0.994 Loch10 34.331 34 0.452 1.010 1.082
und
personfit(pp)
liefert die Ausgabe:
Personfit Statistics: Chisq df p-value Outfit MSQ Infit MSQ Hans 17.798 10 0.058 1.780 1.303 Karola 11.819 10 0.297 1.182 1.095 Matthias 7.756 10 0.653 0.776 0.893 Stefan 14.821 10 0.139 1.482 1.397 Sabine 6.598 10 0.763 0.660 0.761 Irma 10.073 10 0.434 1.007 1.057 Heike 10.010 10 0.440 1.001 1.017 Ralf 7.068 10 0.719 0.707 0.731 Rainer 10.336 10 0.412 1.034 1.087 Simon 9.683 10 0.469 0.968 0.948 Andreas 5.985 10 0.817 0.598 0.628 Elke 9.789 10 0.459 0.979 1.019 Gabi 12.173 10 0.274 1.217 1.138 David 7.577 10 0.670 0.758 0.782 Jonas 9.314 10 0.503 0.931 0.975 Nicklas 8.608 10 0.570 0.861 0.918 Sandra 13.950 10 0.175 1.395 1.299 Mario 8.679 10 0.563 0.868 0.897 Guido 7.427 10 0.685 0.743 0.756 Lisa 8.748 10 0.556 0.875 0.981 Peter 8.679 10 0.563 0.868 0.897 Justus 7.841 10 0.644 0.784 0.810 Josef 5.786 10 0.833 0.579 0.745 Brigitte 7.546 10 0.673 0.755 0.783 Kevin 13.795 10 0.183 1.380 1.296 Marcel 4.687 10 0.911 0.469 0.641 Nadine 11.708 10 0.305 1.171 1.183 Alex 3.566 10 0.965 0.357 0.715 Katharina 14.189 10 0.165 1.419 1.349 Daniel 4.687 10 0.911 0.469 0.641 Jens 9.023 10 0.530 0.902 0.940 Dieter 12.208 10 0.271 1.221 1.070 Sebastian 10.010 10 0.440 1.001 1.017 Anne 13.278 10 0.209 1.328 1.333
Die Funktion pmat()
liefert die Item-Personen-Matrix zurück, welche die theoretisch zu erwartenden Wahrscheinlichkeiten enthält.
pmat(pp)
Loch1 Loch2 Loch3 Loch4 Loch5 Loch6 Loch7 Loch8 Loch9 Loch10 Hans 0.9087360 0.8474865 0.7922326 0.64956115 0.75005628 0.6203015 0.70281159 0.51949106 0.6203015 0.58902851 Karola 0.9087360 0.8474865 0.7922326 0.64956115 0.75005628 0.6203015 0.70281159 0.51949106 0.6203015 0.58902851 Matthias 0.9087360 0.8474865 0.7922326 0.64956115 0.75005628 0.6203015 0.70281159 0.51949106 0.6203015 0.58902851 Stefan 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Sabine 0.9087360 0.8474865 0.7922326 0.64956115 0.75005628 0.6203015 0.70281159 0.51949106 0.6203015 0.58902851 Irma 0.8608014 0.7753352 0.7030992 0.53513568 0.65080429 0.5036230 0.59493064 0.40171309 0.5036230 0.47093647 Heike 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Ralf 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Rainer 0.8608014 0.7753352 0.7030992 0.53513568 0.65080429 0.5036230 0.59493064 0.40171309 0.5036230 0.47093647 Simon 0.8608014 0.7753352 0.7030992 0.53513568 0.65080429 0.5036230 0.59493064 0.40171309 0.5036230 0.47093647 Andreas 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Elke 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Gabi 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 David 0.6094070 0.4654413 0.3740124 0.22506903 0.31982741 0.2038101 0.27036825 0.14486293 0.2038101 0.18339296 Jonas 0.8608014 0.7753352 0.7030992 0.53513568 0.65080429 0.5036230 0.59493064 0.40171309 0.5036230 0.47093647 Nicklas 0.8608014 0.7753352 0.7030992 0.53513568 0.65080429 0.5036230 0.59493064 0.40171309 0.5036230 0.47093647 Sandra 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Mario 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Guido 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Lisa 0.6094070 0.4654413 0.3740124 0.22506903 0.31982741 0.2038101 0.27036825 0.14486293 0.2038101 0.18339296 Peter 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Justus 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Josef 0.4639351 0.3256806 0.2489215 0.13875159 0.20687009 0.1243376 0.17050026 0.08589618 0.1243376 0.11077415 Brigitte 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Kevin 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Marcel 0.4639351 0.3256806 0.2489215 0.13875159 0.20687009 0.1243376 0.17050026 0.08589618 0.1243376 0.11077415 Nadine 0.7175126 0.5863461 0.4930741 0.32103255 0.43358751 0.2941499 0.37626806 0.21616820 0.2941499 0.26772600 Alex 0.2667609 0.1687664 0.1222835 0.06342887 0.09881113 0.0563279 0.07953407 0.03800055 0.0563279 0.04976174 Katharina 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Daniel 0.4639351 0.3256806 0.2489215 0.13875159 0.20687009 0.1243376 0.17050026 0.08589618 0.1243376 0.11077415 Jens 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Dieter 0.6094070 0.4654413 0.3740124 0.22506903 0.31982741 0.2038101 0.27036825 0.14486293 0.2038101 0.18339296 Sebastian 0.7988114 0.6890338 0.6032488 0.42499412 0.54475410 0.3944637 0.48533092 0.30123749 0.3944637 0.36367126 Anne 0.6094070 0.4654413 0.3740124 0.22506903 0.31982741 0.2038101 0.27036825 0.14486293 0.2038101 0.18339296
Die Funktion residuals()
gibt schließlich die Residuen aus.
Loch1 Loch2 Loch3 Loch4 Loch5 Loch6 Loch7 Loch8 Loch9 Loch10 Hans -3.1555061 0.4242166 0.5121089 -1.3614569 0.5772636 0.7823805 -1.5378130 0.9617489 0.7823805 0.8352908 Karola 0.3169064 -2.3572861 0.5121089 0.7345073 0.5772636 -1.2781505 0.6502741 0.9617489 0.7823805 -1.1971879 Matthias 0.3169064 0.4242166 0.5121089 -1.3614569 0.5772636 0.7823805 0.6502741 0.9617489 -1.2781505 -1.1971879 Stefan -1.9926014 -1.4885510 0.8109814 1.1631740 -1.0938990 1.2389866 1.0297814 -0.6565831 -0.8071113 1.3227759 Sabine 0.3169064 0.4242166 0.5121089 0.7345073 0.5772636 0.7823805 0.6502741 -1.0397724 -1.2781505 -1.1971879 Irma 0.4021296 0.5382980 -1.5388725 0.9320327 0.7325027 0.9927801 -1.2119047 1.2203847 -1.0072724 -0.9434682 Heike 0.5018565 -1.4885510 0.8109814 -0.8597166 0.9141612 1.2389866 -0.9710798 -0.6565831 -0.8071113 1.3227759 Ralf 0.5018565 0.6717943 0.8109814 -0.8597166 0.9141612 1.2389866 -0.9710798 -0.6565831 -0.8071113 -0.7559859 Rainer 0.4021296 0.5382980 -1.5388725 0.9320327 0.7325027 -1.0072724 -1.2119047 1.2203847 -1.0072724 1.0599192 Simon 0.4021296 -1.8577071 0.6498264 0.9320327 0.7325027 -1.0072724 0.8251474 -0.8194137 0.9927801 -0.9434682 Andreas 0.6274582 0.8399270 1.0139491 -0.6876225 1.1429521 -0.6455474 -0.7766935 -0.5251513 -0.6455474 -0.6046561 Elke 0.5018565 0.6717943 -1.2330739 1.1631740 -1.0938990 1.2389866 -0.9710798 -0.6565831 1.2389866 -0.7559859 Gabi -1.9926014 0.6717943 0.8109814 1.1631740 -1.0938990 -0.8071113 1.0297814 -0.6565831 -0.8071113 1.3227759 David 0.8005870 1.0716803 -0.7729656 1.8555542 -0.6857223 -0.5059463 -0.6087318 -0.4115862 -0.5059463 -0.4738979 Jonas 0.4021296 0.5382980 -1.5388725 0.9320327 0.7325027 -1.0072724 0.8251474 1.2203847 -1.0072724 -0.9434682 Nicklas 0.4021296 0.5382980 0.6498264 0.9320327 -1.3651826 0.9927801 -1.2119047 -0.8194137 0.9927801 -0.9434682 Sandra -1.9926014 0.6717943 -1.2330739 -0.8597166 0.9141612 -0.8071113 1.0297814 1.5230364 -0.8071113 1.3227759 Mario 0.6274582 -1.1905796 1.0139491 -0.6876225 1.1429521 1.5490729 -0.7766935 -0.5251513 -0.6455474 -0.6046561 Guido 0.6274582 0.8399270 1.0139491 -0.6876225 -0.8749273 -0.6455474 -0.7766935 -0.5251513 1.5490729 -0.6046561 Lisa -1.2490835 1.0716803 1.2937187 -0.5389226 -0.6857223 -0.5059463 1.6427596 -0.4115862 -0.5059463 -0.4738979 Peter 0.6274582 -1.1905796 1.0139491 -0.6876225 1.1429521 -0.6455474 -0.7766935 -0.5251513 1.5490729 -0.6046561 Justus 0.5018565 0.6717943 0.8109814 -0.8597166 -1.0938990 -0.8071113 1.0297814 -0.6565831 -0.8071113 1.3227759 Josef 1.0749298 -0.6949654 1.7370465 -0.4013791 -0.5107127 -0.3768191 -0.4533717 -0.3065414 -0.3768191 -0.3529500 Brigitte 0.5018565 0.6717943 0.8109814 -0.8597166 -1.0938990 -0.8071113 1.0297814 -0.6565831 1.2389866 -0.7559859 Kevin -1.5937316 0.8399270 -0.9862428 -0.6876225 1.1429521 -0.6455474 -0.7766935 1.9042131 -0.6455474 1.6538325 Marcel 1.0749298 1.4389206 -0.5756898 -0.4013791 -0.5107127 -0.3768191 -0.4533717 -0.3065414 -0.3768191 -0.3529500 Nadine 0.6274582 -1.1905796 -0.9862428 1.4542864 -0.8749273 1.5490729 -0.7766935 -0.5251513 1.5490729 -0.6046561 Alex 1.6579131 -0.4505900 -0.3732561 -0.2602394 -0.3311273 -0.2443156 -0.2939495 -0.1987502 -0.2443156 -0.2288398 Katharina -1.9926014 0.6717943 -1.2330739 -0.8597166 -1.0938990 1.2389866 1.0297814 -0.6565831 1.2389866 1.3227759 Daniel 1.0749298 1.4389206 -0.5756898 -0.4013791 -0.5107127 -0.3768191 -0.4533717 -0.3065414 -0.3768191 -0.3529500 Jens 0.5018565 0.6717943 -1.2330739 1.1631740 -1.0938990 -0.8071113 1.0297814 -0.6565831 1.2389866 -0.7559859 Dieter 0.8005870 -0.9331141 -0.7729656 -0.5389226 -0.6857223 -0.5059463 1.6427596 2.4296249 -0.5059463 -0.4738979 Sebastian 0.5018565 -1.4885510 0.8109814 -0.8597166 0.9141612 -0.8071113 -0.9710798 -0.6565831 1.2389866 1.3227759 Anne -1.2490835 -0.9331141 -0.7729656 -0.5389226 1.4583163 -0.5059463 1.6427596 -0.4115862 -0.5059463 2.1101592
Informationsindices
[Bearbeiten]Die Informationsindices "Akaike Information Criterion" (AIC), "Bayes Information Criterion" (BIC) und "consistent Akaike Information Criterion" (CAIC) überprüfen, welches Modell am besten auf die Daten passt. Hierbei gilt: je kleiner der Informationsindex, desto besser passt das Modell. Die dazugehörige Funktion lautet IC()
und benötigt den Output der person.parameter()
-Funktion. In unserem Beispiel rufen wir sie also auf per:
IC(person.parameter(RM(minigolf)))
oder
IC(person.parameter(result))
oder
IC(pp)
Die Funktion liefert die folgende Ausgabe:
Information Criteria: value npar AIC BIC cAIC joint log-lik -199.8864 16 431.7728 456.1946 472.1946 marginal log-lik -216.1203 9 450.2406 463.9779 472.9779 conditional log-lik -155.7848 9 329.5697 343.3069 352.3069
Das linear-logistische Test-Modell
[Bearbeiten]Der Befehl zur Analyse nach dem linear-logistischen Test-Modell lautet LLTM()
Als Untersuchungsobjekt für LLTM()
wird eine Matrix benötigt, welche dichotome Daten enthält (0 und 1). Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
LLTM()
[Bearbeiten]An den LLTM()
-Befehl können folgende Parameter übergeben werden:
LLTM(X, W, mpoints = 1, groupvec = 1, se = TRUE, sum0 = TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsmpoints
= Anzahl der Messpunktegroupvec
= Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wirdgroupvec=1
gesetzt, werden keine Gruppen verwendetse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0etaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
Das Ratingskalen-Modell
[Bearbeiten]Der Befehl zur Analyse nach dem Ratingskalen-Modell lautet RSM()
Als Untersuchungsobjekt für RSM()
wird eine Matrix oder Datenframe benötigt. Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
RSM()
[Bearbeiten]Die folgenden Parameter können an RSM()
übergeben werden:
RSM(X, W, se = TRUE, sum0 = TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0etaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
Beispieldatensatz
[Bearbeiten]Als Beispieldatensatz nehmen wir die Fragebogenerhebung aus Beispiel 9.
Dieser Fragebogen besteht aus 27 Fragen, welche die Antworten "nie / selten / manchmal / oft / immer
" zulassen. Die Antworten werden wie folgt codiert:
- 1 = nie
- 2 = selten
- 3 = manchmal
- 4 = oft
- 5 = immer
Der Fragebogen wurde von 122 Personen ausgefüllt. Der Befehl zur Erzeugung dieses Datensatzes lautet:
bsp9 <- structure(list(Frage1 = c(4, 4, 5, 5, 5, 1, 3, 3, 3, 3, 5, 5, 5, 3, 3, 4, 5, 4, 3, 2, 2, 2, 3, 4, 3, 4, 4, 2, 5, 5, 5, 5, 5, 5, 1, 3, 4, 3, 3, 4, 3, 3, 3, 3, 5, 3, 3, 3, 2, 5, 4, 5, 2, 4, 3, 2, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage2 = c(3, 5, 4, 5, 4, 5, 3, 3, 5, 3, 5, 4, 4, 4, 2, 5, 5, 3, 2, 2, 2, 2, 3, 2, 3, 5, 4, 4, 3, 3, 5, 3, 5, 2, 3, 3, 5, 4, 3, 4, 1, 4, 4, 4, 5, 2, 2, 3, 2, 3, 5, 5, 3, 5, 3, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage3 = c(4, 4, 4, 4, 3, 3, 2, 2, 4, 2, 5, 3, 1, 2, 3, 4, 4, 3, 3, 3, 4, 5, 4, 5, 4, 4, 3, 3, 5, 5, 2, 4, 4, 3, 2, 3, 4, 3, 3, 3, 1, 3, 3, 2, 4, 1, 1, 3, 3, 3, 5, 5, 4, 2, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage4 = c(4, 3, 1, 3, 3, 4, 4, 3, 3, 3, 5, 5, 1, 3, 2, 2, 4, 4, 2, 2, 4, 5, 4, 5, 3, 4, 5, 5, 5, 3, 5, 2, 5, 3, 2, 3, 3, 4, 3, 4, 1, 2, 3, 4, 5, 2, 3, 2, 3, 2, 4, 5, 4, 1, 4, 2, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage5 = c(5, 1, 2, 5, 2, 4, 4, 1, 1, 4, 5, 4, 3, 5, 3, 5, 1, 1, 4, 5, 5, 4, 2, 4, 3, 1, 2, 1, 3, 4, 2, 1, 1, 4, 1, 1, 2, 4, 2, 3, 3, 4, 4, 4, 5, 2, 2, 2, 3, 3, 4, 2, 3, 3, 4, 3, 5, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage6 = c(5, 3, 1, 4, 5, 5, 4, 3, 3, 4, 5, 5, 4, 4, 3, 2, 4, 5, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 2, 5, 5, 4, 5, 4, 2, 2, 5, 3, 3, 3, 1, 4, 4, 4, 5, 3, 2, 3, 1, 2, 5, 4, 3, 5, 4, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage7 = c(3, 3, 2, 4, 4, 3, 4, 3, 5, 3, 4, 5, 3, 4, 2, 3, 4, 3, 4, 3, 2, 2, 2, 1, 4, 4, 4, 4, 3, 3, 5, 5, 4, 4, 4, 2, 5, 3, 3, 4, 2, 5, 3, 3, 5, 4, 3, 5, 3, 3, 4, 5, 4, 3, 5, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage8 = c(4, 5, 5, 5, 4, 5, 4, 2, 5, 4, 5, 5, 4, 4, 4, 4, 5, 3, 3, 1, 3, 4, 4, 3, 3, 5, 5, 5, 5, 4, 5, 5, 5, 3, 3, 4, 5, 3, 3, 4, 2, 5, 3, 4, 5, 3, 3, 4, 3, 4, 5, 4, 4, 4, 5, 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage9 = c(5, 5, 5, 5, 5, 5, 5, 2, 5, 3, 5, 4, 4, 4, 2, 4, 5, 4, 2, 2, 3, 4, 4, 4, 3, 5, 5, 5, 5, 3, 4, 4, 5, 4, 5, 4, 5, 4, 4, 4, 2, 5, 4, 4, 5, 2, 3, 2, 4, 2, 4, 4, 4, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage10 = c(2, 1, 5, 4, 3, 4, 2, 4, 5, 1, 3, 2, 1, 1, 1, 5, 4, 2, 2, 5, 3, 5, 2, 2, 3, 1, 1, 2, 5, 5, 2, 3, 3, 4, 2, 5, 4, 5, 5, 3, 2, 5, 4, 3, 4, 2, 4, 1, 4, 3, 5, 3, 3, 4, 5, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage11 = c(3, 1, 5, 4, 4, 3, 3, 2, 1, 3, 4, 4, 1, 4, 4, 4, 4, 1, 3, 5, 5, 5, 3, 5, 5, 2, 5, 2, 1, 2, 5, 3, 5, 5, 1, 1, 2, 5, 4, 4, 3, 3, 4, 4, 5, 3, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage12 = c(1, 5, 3, 2, 5, 3, 2, 1, 1, 2, 1, 4, 3, 1, 3, 1, 1, 3, 3, 1, 3, 1, 2, 2, 4, 4, 5, 5, 3, 1, 3, 1, 1, 4, 2, 1, 5, 4, 3, 3, 2, 4, 3, 2, 5, 5, 1, 1, 3, 3, 4, 5, 4, 4, 4, 2, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage13 = c(2, 4, 2, 3, 3, 3, 3, 3, 2, 2, 4, 4, 1, 2, 1, 2, 4, 4, 2, 3, 2, 3, 3, 1, 2, 3, 5, 4, 4, 2, 1, 3, 5, 3, 4, 1, 5, 3, 3, 3, 1, 2, 3, 1, 4, 5, 3, 1, 4, 4, 2, 4, 2, 2, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage14 = c(4, 3, 2, 4, 4, 5, 4, 3, 2, 4, 5, 4, 5, 3, 1, 4, 5, 5, 1, 3, 2, 3, 3, 5, 3, 3, 5, 4, 4, 3, 5, 3, 5, 3, 4, 3, 4, 4, 4, 2, 1, 4, 3, 3, 4, 2, 2, 5, 4, 4, 1, 2, 2, 3, 4, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage15 = c(4, 3, 2, 5, 4, 5, 3, 2, 1, 4, 5, 4, 5, 3, 3, 3, 5, 5, 2, 3, 4, 4, 1, 2, 3, 4, 5, 5, 3, 5, 1, 2, 3, 3, 1, 4, 5, 3, 5, 2, 2, 5, 4, 4, 4, 5, 5, 4, 3, 3, 1, 5, 1, 1, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage16 = c(3, 5, 1, 5, 4, 1, 3, 2, 3, 2, 5, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 5, 3, 1, 2, 5, 4, 3, 3, 5, 4, 4, 4, 5, 4, 4, 3, 4, 3, 4, 5, 5, 5, 4, 4, 5, 5, 1, 5, 5, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage17 = c(4, 4, 4, 2, 3, 2, 2, 4, 5, 3, 1, 4, 5, 3, 2, 4, 4, 4, 1, 2, 4, 5, 3, 4, 1, 4, 5, 3, 1, 3, 3, 4, 1, 5, 2, 4, 3, 5, 5, 4, 1, 5, 3, 4, 4, 5, 4, 5, 4, 4, 5, 5, 3, 4, 5, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage18 = c(4, 2, 1, 5, 3, 5, 2, 4, 3, 4, 2, 3, 1, 3, 2, 2, 2, 1, 1, 4, 1, 5, 2, 5, 2, 1, 2, 5, 3, 2, 5, 4, 4, 1, 3, 1, 2, 5, 4, 5, 3, 5, 3, 3, 5, 3, 5, 2, 4, 5, 1, 2, 1, 3, 5, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage19 = c(3, 1, 4, 5, 4, 5, 4, 2, 5, 5, 5, 3, 3, 5, 4, 4, 1, 2, 2, 2, 1, 1, 1, 1, 3, 3, 4, 2, 4, 1, 3, 5, 5, 5, 2, 4, 4, 4, 3, 5, 2, 4, 3, 4, 5, 3, 5, 2, 3, 4, 5, 5, 3, 1, 5, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage20 = c(4, 3, 4, 3, 3, 5, 4, 1, 4, 3, 5, 4, 4, 2, 4, 2, 5, 4, 4, 1, 3, 3, 2, 5, 4, 5, 5, 5, 5, 4, 5, 4, 5, 4, 2, 4, 5, 2, 4, 3, 2, 4, 3, 3, 5, 5, 2, 3, 1, 2, 2, 4, 5, 5, 5, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage21 = c(4, 2, 3, 5, 3, 5, 4, 3, 3, 3, 5, 5, 5, 5, 4, 5, 5, 3, 5, 3, 3, 2, 3, 4, 3, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 2, 4, 3, 2, 5, 3, 4, 5, 3, 2, 4, 4, 4, 3, 5, 5, 5, 4, 4, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage22 = c(5, 3, 5, 4, 3, 5, 4, 1, 5, 3, 5, 4, 4, 4, 3, 5, 5, 3, 4, 4, 3, 3, 2, 3, 5, 5, 5, 5, 5, 4, 2, 2, 5, 5, 3, 4, 4, 4, 4, 3, 5, 3, 3, 4, 5, 5, 3, 3, 5, 5, 5, 5, 3, 5, 4, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage23 = c(4, 5, 4, 2, 2, 4, 3, 1, 5, 4, 5, 4, 4, 5, 5, 5, 5, 4, 5, 3, 2, 3, 2, 4, 4, 4, 4, 4, 5, 4, 5, 3, 3, 4, 3, 3, 1, 4, 4, 3, 3, 4, 4, 5, 5, 4, 4, 2, 4, 5, 5, 5, 3, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage24 = c(5, 4, 1, 4, 4, 5, 4, 3, 5, 4, 4, 5, 4, 4, 3, 1, 4, 4, 3, 2, 3, 2, 2, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 1, 5, 4, 3, 2, 3, 3, 4, 3, 3, 3, 4, 1, 4, 3, 4, 5, 3, 2, 5, 2, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage25 = c(3, 3, 1, 3, 4, 5, 4, 3, 4, 3, 4, 4, 4, 5, 3, 3, 4, 5, 4, 1, 3, 2, 3, 1, 4, 4, 5, 5, 5, 4, 1, 4, 2, 4, 5, 4, 5, 4, 2, 4, 3, 4, 3, 4, 4, 5, 1, 5, 2, 3, 5, 5, 3, 5, 3, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage26 = c(4, 2, 5, 5, 5, 1, 5, 4, 3, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 2, 2, 2, 4, 5, 4, 4, 3, 5, 5, 5, 5, 5, 3, 5, 3, 5, 5, 3, 3, 3, 2, 3, 3, 4, 4, 5, 2, 5, 3, 4, 5, 4, 3, 3, 4, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage27 = c(2, 5, 2, 4, 4, 4, 3, 1, 3, 5, 5, 5, 5, 4, 3, 4, 2, 2, 3, 3, 2, 2, 3, 4, 3, 5, 5, 4, 5, 3, 1, 3, 1, 2, 2, 4, 5, 4, 4, 3, 5, 4, 3, 4, 5, 5, 3, 5, 3, 4, 5, 4, 3, 5, 4, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5)), .Names = c("Frage1", "Frage2", "Frage3", "Frage4", "Frage5", "Frage6", "Frage7", "Frage8", "Frage9", "Frage10", "Frage11", "Frage12", "Frage13", "Frage14", "Frage15", "Frage16", "Frage17", "Frage18", "Frage19", "Frage20", "Frage21", "Frage22", "Frage23", "Frage24", "Frage25", "Frage26", "Frage27"), row.names = c(NA, 122L), class = "data.frame", na.action = structure(123:231, .Names = c("38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221"), class = "omit"))
Der Datensatz ist nun in der Variablen bsp9
gespeichert. Die Daten können eingesehen werden, indem die Variable aufgerufen wird:
bsp9
Parameterschätzung
[Bearbeiten]Die Analyse erfolgt durch Aufruf der RSM()
-Funktion
RSM(bsp9)
Da der Output noch für weitere Analysen benötigt wird, speichern wir ihn in die Variable rsm.result
:
rsm.result <- RSM(bsp9)
Somit wird durch Aufruf der Variablen der Output wieder ausgegeben:
rsm.result
Results of RSM estimation: Call: RSM(X = bsp9) Conditional log-likelihood: -3045.451 Number of iterations: 20 Number of parameters: 29 Basic Parameters eta: eta 1 eta 2 eta 3 eta 4 eta 5 eta 6 eta 7 eta 8 Estimate 0.03942847 -0.1626761 -0.1761274 -0.4188407 0.0664840 0.03942847 0.3960766 0.3263914 Std.Err 0.11411907 0.1139070 0.1139206 0.1147358 0.1142076 0.11411903 0.1164774 0.1158098 eta 9 eta 10 eta 11 eta 12 eta 13 eta 14 eta 15 eta 16 Estimate -0.2434006 -0.01457923 -0.5822437 -0.5003087 -0.0819464 -0.08194639 0.2436041 0.03942844 Std.Err 0.1140388 0.11398516 0.1158746 0.1152457 0.1138975 0.11389774 0.1151493 0.11411904 eta 17 eta 18 eta 19 eta 20 eta 21 eta 22 eta 23 eta 24 eta 25 Estimate -0.3917694 -0.1357728 0.08002696 0.3263914 0.3681175 0.2711103 0.01240908 0.0664840 0.3541815 Std.Err 0.1145923 0.1138901 0.11425720 0.1158098 0.1161972 0.1153532 0.11404490 0.1142077 0.1160637 eta 26 eta 27 eta 28 eta 29 Estimate 0.08002695 -1.2993059 -4.0572947 -7.5319724 Std.Err 0.11425714 0.1444744 0.2686848 0.4036785
Wird die Variable rsm.result
an die summary()
-Funktion übergeben, werden neben den eta-Werten auch die beta-Werte angezeigt:
summary(RSM(bsp9))
oder in unserem Fall
summary(rsm.result)
liefern die (hier in Wikibooks aus Platzgründen gekürzte) Ausgabe:
Results of RSM estimation: Call: RSM(X = bsp9) Conditional log-likelihood: -3045.451 Number of iterations: 20 Number of parameters: 29 Basic Parameters (eta) with 0.95 CI: Estimate Std. Error lower CI upper CI eta 1 0.039 0.114 -0.184 0.263 eta 2 -0.163 0.114 -0.386 0.061 eta 3 -0.176 0.114 -0.399 0.047 eta 4 -0.419 0.115 -0.644 -0.194 ( . . . ) eta 27 -1.299 0.144 -1.582 -1.016 eta 28 -4.057 0.269 -4.584 -3.531 eta 29 -7.532 0.404 -8.323 -6.741 Item Easiness Parameters (beta) with 0.95 CI: Estimate Std. Error lower CI upper CI beta Frage1.c1 0.080 0.114 -0.144 0.304 beta Frage1.c2 -1.139 0.270 -1.667 -0.611 beta Frage1.c3 -3.817 0.433 -4.666 -2.968 beta Frage1.c4 -7.212 0.606 -8.399 -6.024 beta Frage2.c1 0.039 0.114 -0.184 0.263 beta Frage2.c2 -1.220 0.270 -1.749 -0.692 beta Frage2.c3 -3.939 0.434 -4.789 -3.089 beta Frage2.c4 -7.374 0.607 -8.564 -6.185 beta Frage3.c1 -0.163 0.114 -0.386 0.061 beta Frage3.c2 -1.625 0.271 -2.155 -1.094 beta Frage3.c3 -4.545 0.438 -5.403 -3.687 beta Frage3.c4 -8.183 0.615 -9.388 -6.978 ( . . . ) beta Frage26.c1 0.354 0.116 0.127 0.582 beta Frage26.c2 -0.591 0.271 -1.122 -0.060 beta Frage26.c3 -2.995 0.433 -3.843 -2.147 beta Frage26.c4 -6.115 0.601 -7.294 -4.937 beta Frage27.c1 0.080 0.114 -0.144 0.304 beta Frage27.c2 -1.139 0.270 -1.667 -0.611 beta Frage27.c3 -3.817 0.433 -4.666 -2.968 beta Frage27.c4 -7.212 0.606 -8.399 -6.024
Schwellenwerte
[Bearbeiten]Die Schwellenwerte (Thresholds) der einzelnen Items werden mit der Funktion thresholds()
angezeigt.
thresholds(rsm.result)
liefert die Ausgabe:
Design Matrix Block 1: Location Threshold 1 Threshold 2 Threshold 3 Threshold 4 Frage1 1.80297 -0.08002 1.21928 2.67797 3.39466 Frage2 1.84356 -0.03943 1.25988 2.71856 3.43525 Frage3 2.04567 0.16268 1.46198 2.92066 3.63735 Frage4 2.05912 0.17613 1.47543 2.93412 3.65081 Frage5 2.30183 0.41884 1.71815 3.17683 3.89352 Frage6 1.81651 -0.06648 1.23282 2.69150 3.40819 Frage7 1.84356 -0.03943 1.25988 2.71856 3.43525 Frage8 1.48692 -0.39608 0.90323 2.36191 3.07860 Frage9 1.55660 -0.32639 0.97291 2.43160 3.14829 Frage10 2.12639 0.24340 1.54271 3.00139 3.71808 Frage11 1.89757 0.01458 1.31389 2.77257 3.48926 Frage12 2.46524 0.58224 1.88155 3.34023 4.05692 Frage13 2.38330 0.50031 1.79961 3.25830 3.97499 Frage14 1.96494 0.08195 1.38125 2.83994 3.55662 Frage15 1.96494 0.08195 1.38125 2.83994 3.55662 Frage16 1.63939 -0.24360 1.05570 2.51438 3.23107 Frage17 1.84356 -0.03943 1.25988 2.71856 3.43525 Frage18 2.27476 0.39177 1.69108 3.14976 3.86645 Frage19 2.01877 0.13577 1.43508 2.89376 3.61045 Frage20 1.80297 -0.08003 1.21928 2.67796 3.39465 Frage21 1.55660 -0.32639 0.97291 2.43160 3.14829 Frage22 1.51488 -0.36812 0.93119 2.38987 3.10656 Frage23 1.61188 -0.27111 1.02820 2.48688 3.20357 Frage24 1.87058 -0.01241 1.28690 2.74558 3.46227 Frage25 1.81651 -0.06648 1.23282 2.69150 3.40819 Frage26 1.52881 -0.35418 0.94512 2.40381 3.12050 Frage27 1.80297 -0.08003 1.21928 2.67796 3.39465
Das partial-credit Modell
[Bearbeiten]Der Befehl zur Analyse nach dem partial-credit Modell lautet PCM()
Als Untersuchungsobjekt für PCM()
wird eine Matrix oder Datenframe benötigt. Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
PCM()
[Bearbeiten]Die folgenden Parameter können an PCM()
übergeben werden:
PCM(X, W, se = TRUE, sum0 = TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0etaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
Das lineare Ratingskalen-Modell
[Bearbeiten]Der Befehl zur Analyse nach dem linearen Ratingskalen-Modell lautet LRSM()
Als Untersuchungsobjekt für LRSM()
wird eine Matrix oder Datenframe benötigt. Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
LRSM()
[Bearbeiten]Die folgenden Parameter können an LRSM()
übergeben werden:
LRSM(X, W, mpoints = 1, groupvec = 1, se = TRUE, sum0 = TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsmpoints
= Anzahl der Messpunktegroupvec
= Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wirdgroupvec=1
gesetzt, werden keine Gruppen verwendetse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0etaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
Das lineare partial-credit Modell
[Bearbeiten]Der Befehl zur Analyse nach dem linearen partial-credit Modell lautet LPCM()
Als Untersuchungsobjekt für LPCM()
wird eine Matrix oder Datenframe benötigt. Die Reihen der Matrix entsprechen den Untersuchungsfällen (n) und die Spalten entsprechen den Ergebnissen der Items.
LPCM()
[Bearbeiten]Die folgenden Parameter können an LPCM()
übergeben werden:
LPCM(X, W, mpoints = 1, groupvec = 1, se = TRUE, sum0 = TRUE, etaStart)
X
= die zu analysierernde DatenmatrixW
= optionale Designmatrix zur Normierung auf ein bestimmtes Itemsmpoints
= Anzahl der Messpunktegroupvec
= Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wirdgroupvec=1
gesetzt, werden keine Gruppen verwendetse
= Berechnung der Standardfehler (TRUE=ja / FALSE=nein)sum0
= TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0etaStart
= optionale Übergabe von vermuteten Parameterschätzwerten
unterstütze Funktionen im eRm-Package
[Bearbeiten]Das eRm-Package enthält/unterstützt weitere Funktionen, denen Objekte aus der Rasch-Analyse übergeben werden müssen.
Funktion | benötigt Output von |
|
|
|
|
---- andere Packages ---- |
|
|
|
|
|
---- andere Packages ---- |
|
Package TAM
[Bearbeiten]Package ltm
[Bearbeiten]Literatur
[Bearbeiten]- Koller, Alexandrowicz & Hatzinger (2012): "Das Rasch Modell in der Praxis. Eine Einführung in eRm." Wien: facultas/UTB. ISBN 978-3-8252-3786-8.
- Poinstingl, Mair & Hatzinger (2007): "Manual zum Softwarepackage eRm (extended Rasch modeling)", Pabst, ISBN 978-3-8996-7438-5
- Mair & Hatzinger (2007): "Extended Rasch modeling: The eRm package for the application of IRT Models in R", Journal of Statistical Software 20(9) (PDF)
- Rizopoulos (2006): "ltm: An R Package for Latent Variable Modeling and Item Response Analysis." Journal of Statistical Software 17(5) (PDF)
Weblinks
[Bearbeiten]
Datum- und Zeitfunktionen
[Bearbeiten]Einleitung
[Bearbeiten]Oft sind wir am Zeitpunkt der Datenerhebung interessiert. Typischerweise wird dann zusätzlich zu den relevanten Variablen eine oder mehrere Variable mit Datum und/oder Uhrzeit erhoben. Dies gilt ganz besonders für technische Anwendungen wie z.B. die Analyse von Messdaten oder die automatisierte Auswertung von Log-Dateien.
R
verfügt über eine Vielzahl an Funktionen um Zeitpunkte zu repräsentieren, Zeitintervalle zu berechnen oder Zeitreihen zu analysieren, die in diesem Kapitel vorgestellt werden.
Grundlegende Datumfunktionen
[Bearbeiten]Umwandeln von Character-Vektoren in Datum-Variablen
[Bearbeiten]Typischerweise liegen Datum-Variablen nach einem Daten-Import nur als character
vor:
R> datensatz$datum [1] "1. Nov 2007 12:00" [2] "3. Nov 2007 11:23" [3] "3. Nov 2007 14:12" [...] R> class(datensatz$datum) [1] "character"
Um diese Variable als Datum zu behandeln, müssen wir definieren, in welcher Form das Datum vorliegt. Hierzu bietet sich die Funktion strptime()
an. Datumbestandteile und Trennzeichen lassen sich flexibel über den Parameter format
angeben. Datumsbestandteile beginnen immer mit einem %
-Zeichen. Die Bedeutung dieser Zeichen lässt sich über ?strptime
nachlesen, für unser Beispiel funktioniert die folgende Syntax:
R> datum <- strptime(datensatz$datum,format="%d. %b %Y %R") R> datum [1] "2007-11-01 12:00:00" [2] "2007-11-03 11:23:00" [3] "2007-11-03 14:12:00" [...] R> class(datum) [1] "POSIXt" "POSIXlt"
Die Variable ist nun als Datum definiert.
Einfache Definition von Datum-Variablen
[Bearbeiten]Die Funktion ISOdate(Jahr,Monat,Tag,Stunde,Minute,Sekunde)
kann zur einfachen Definition eines Datum-Objekts verwendet werden:
tag_der_befreiung<- ISOdate(1945,05,08,23,01) tag_der_befreiung [1] "1945-05-08 23:01:00 GMT"
Aktuelles Datum: Sys.time()
[Bearbeiten]Die Funktion Sys.time()
liefert das aktuelle Datum.
jetzt <- Sys.time()
Berechnen von Zeitintervallen
[Bearbeiten]Zeitintervalle lassen sich mittels der Funktion difftime()
oder noch einfacher folgendermaßen berechnen:
jetzt - tag_der_befreiung Time difference of 22851 days intervall <- (jetzt-tag_der_befreiung) class (intervall) [1] difftime
Angenommen wir interessieren uns eigentlich für die Stunden seit der offiziellen Kapitulation der Wehrmacht. Dann können wir das Objekt intervall
vom Typ difftime
folgendermaßen umrechnen:
as.numeric(intervall,units='hours') [1] 548427
Plotten zeitabhängiger Daten
[Bearbeiten]Die Funktion plot()
verwendet eine spezielle Methode, wenn als unabhängige Variable Zeitdaten spezifiziert werden:
zeitpunkte <- sort(ISOdate(2007,1:12,1:12,0:23,0:23)) # erzeugt 24 Beispiel-Zeitpunkte und sortiert sie zeitlich werte <- 1:24 - 4*sin(1:24) # erzeugt 24 Beispielwerte plot(werte~zeitpunkte,type='l',xlab='Jahr 2007',ylab='Beispieldaten') # Plottet die Zeitreihe als Liniendiagramm
Die Skalierung und Beschriftung der x-Achse passt sich entsprechend der Zeitspanne der Daten an und wird automatisch entweder in Stunden, Tagen, Monaten oder Jahren ausgegeben.
Analyse von Zeitreihen
[Bearbeiten]Als einfachste Funktion zur Darstellung von Zeitreihen bietet R den ts Befehl an. Dieser ordnet mit der Struktur ts(Datenvektor, start=Jahreszahl, frequency=Datenpunkte pro Jahr) einer univariaten Reihe von Zahlen einen jeweiligen Zeitpunkt, beginnend mit dem Startjahr und in der genannten Frequenz pro Jahr, zu.
Block-Randomisierung
[Bearbeiten]Einleitung
[Bearbeiten]Innerhalb von klinischen Studien (Clinical Trials) kann es notwendig sein, eine Block-Randomisierung durchzuführen.
In R
steht hierzu z.B. das Zusatzpaket "blockrand
" zur Verfügung.
blockrand
[Bearbeiten]Installation
[Bearbeiten]Das Paket wird mit folgendem Befehl über das Internet installiert:
install.packages("blockrand", dependencies=TRUE)
Verwendung
[Bearbeiten]Bevor das Paket genutzt werden kann, muss es aktiviert werden per:
library(blockrand)
Jetzt kann eine einfache Randomisierungsliste erzeugt werden per:
blockrand(150,2)
Hierbei werden 150 Probanden zufällig in 2 Gruppen eingeteilt. Standardmäßig heissen diese Gruppen "A" und "B". Um ihnen eigene Labels zuzuweisen nutzt man die Option "levels":
blockrand(150,2, levels=c("Intervention", "Placebo"))
Auch die Blockgröße kann angegeben werden:
blockrand(150,2, block.sizes=2, levels=c("Intervention", "Placebo"))
Hierbei gilt, dass der Wert von block.sizes
von R mit 2 multipliziert wird, um dann Blockgrößen aller geraden Zahlen innerhalb des Werts zu generieren.
Wird block.sizes = 2
gewählt, generiert R zufällig Blöcke der Größe 2 und 4. Wird block.sizes = 3
gewählt, generiert R zufällig Blöcke der Größe 2, 4 und 6.
siehe auch
[Bearbeiten]
Programmieren mit R
[Bearbeiten]Ein weiterer Vorteil von R
besteht darin, dass man neue Funktionsweisen nach seinen Bedürfnissen programmieren kann. Im Anhang Programmierbeispiele werden die hier verwendeten Programmierbeispiele gesammelt.
Programmieren mit R
[Bearbeiten]In R ist es möglich eigene Programme zu schreiben und eigene Zusatzpakete zu entwickeln. Elementar für die Programmierung ist die Möglichkeit eigene Funktionen zu definieren und die Möglichkeit Kontrollstrukturen zu benutzen. R erlaubt auch die rekursive Ausführung von Funktionen.
Für Programmierer die mit anderen Programmiersprachen arbeiten und sich mit der R-Programmierung vertraut machen wollen, sind folgende Unterschiede augenfällig:
- Die Handhabung von Parametern bei Funktionsaufrufen ist in R sehr variabel. Die erscheinenden Spielarten des Funktionsaufrufe werden in einem späteren Abschnitt erläutert.
- Alle Aufrufe wie z.B. "getwd()" sind Methoden, auch wenn sie im interaktiven Modus wie Shell-Kommandos benutzt werden. Es sind immer Klammern zu verwenden. Der Vorteil ist, dass es keine Kollision zwischen Variablennamen und Methodenaufrufen geben kann.
- Die Namen von Methoden lehnen sich an bekannten Kommandonamen an, sind aber wie alle Namen in R schwer vorherzusehen. So liefert "ls()" nicht die Auflistung eines Verzeichnisses sondern eine Auflistung aller Variablen. Auch die in R verwandte Punktsyntax unterscheidet sich z.B. von jener in Java. So würde man in Java das Erzeugen einer Datentabelle eher in der Form table.read("data.csv") umsetzen. In R wird das Verb vor das Objekt gestellt read.table("daten.csv").
Variablen und Kommentare
[Bearbeiten]Kommentare werden durch das Zeichen # eingeleitet. Kommentare gelten von diesem Zeichen bis zum Zeilenende.
x = 0 # setzt den Wert der Variable auf 0, der Wert ist numerisch
Der Geltungsbereich von Variablen entspricht den Erwartungen. Eine in einer Funktion definierten Variable kann nicht außerhalb der Funktion benutzt werden. Variablen sind nicht getypt wie in Java. Eine Variable kann beliebige Inhalte haben und auch wechseln. Viele Fehler in der Entwicklung eigener R-Scripte sind Typfehler, d.h. der Entwickler erwartet einen anderen Datentyp. Diese Fehler sind in der Regel nicht offensichtliche, weil viele Operationen mit den verschiedenen Datentypen und auch zwischen verschiedenen Datentypen möglich. So kann ein numerischer Wert mit einem String ohne Fehler verglichen werden.
Iterationen
[Bearbeiten]Iteration, Schleifen, lassen sich in R auf drei Arten definieren, durch
- die for-Schleife
- die while-Schleife
- die repeat-Schleife.
Schleifen bestehen aus zwei Teilen der Schleifenkontrolle und dem Inhalt der Schleife. Der Schleifeninhalt ist ein eigener Programmblock, der mit geschweiften Klammern umschlossen wird. Wenn man mehr als einen Befehl in der Schleife ausführen möchte, das ist die Regel, dann müssen die einzelnen Befehle durch Semikolons getrennt werden. Jetzt konkret. Der Syntax der for-Schleife lautet for(Variable in Wert){R Befehle in der Schleife}. Zur Illustration dieser sehr abstrakten Beschreibung hier ein Beispiel:
> x = 0 > for(i in 1:10){x=x+1; print(x);} [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10
In diesem Beispiel wird innerhalb der Schleife, die von 1 bis 10 läuft, die Variable x um eins erhöht und mit print ausgegeben. Aufeinander folgende Befehle müssen durch das Semikolon getrennt werden. Dieselbe Schleife kann mittels while-Anweisung wie folgt formuliert werden:
> x = 0 > while(x<10){x=x+1; print(x);} [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10
Jetzt fehlt nur noch die repeat-Schleife. Eigentlich handelt es sich bei der repeat-Schleife um ein umgedrehte while-Schleife. In R ist es ein wenig komplizierter.
> x = 0 > repeat{x=x+1; print(x); if(x>=10) break} [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10
Die repeat-Schleife muss explizit per break-Befehl beendet werden. Aus diesem Grund kommt hier die if-Anweisung zum Einsatz. Die if-Anweisung dient der bedingten Ausführung von Befehlen. Diese werden im nächsten Abschnitt beschrieben.
Bedingte Ausführung
[Bearbeiten]Innerhalb der Funktion können Variablenbedingungen mit dem if()
-Befehl abgefragt werden. Der Aufruf erfolgt etwa so:
if
(VARIABLENBEDINGUNG) {FUNKTIONSWEISE}
Innerhalb der Klammern des if()
-Befehls werden die Variablenbedingungen gesetzt. Falls diese Bedingungen erfüllt sind, wird der Code innerhalb der geschweiften Klammern ausgeführt. Folgende Bedingungen können abgefragt werden:
Bedingungen | |
== | gleich |
!= | ungleich |
< | kleiner |
<= | kleiner-gleich |
> | größer |
>= | größer-gleich |
Verknüpfungen | |
&& | und |
|| | oder |
Mit diesem Wissen könnten wir nun unsere Funktion etwas erweitern:
myfunc <- function(x=3,y=7){ z <- x+y # Die Summe von x und y wird in z gespeichert if(z>20) { # Abfrage, ob die Summe größer als 20 ist z <- "wow, bist du gross" # wenn ja, dann schreibe einen Text in das Objekt z } return(z) # z wird zurückgemeldet }
Mehrere Bedingungen können verknüpft werden, z.B. so:
myfunc <- function(x=3,y=7){ if(x<0 && y<0) { # Abfrage, ob x und y negativ sind x <- x*(-1) # wenn ja, dann mache beide positiv y <- y*(-1) } z <- x+y # Die Summe von x und y wird in z gespeichert if(z==0 | z>50) { # Abfrage, ob z gleich 0 oder größer 50 ist z <- "Summe ist 0 oder größer 50" # wenn ja, schreibe einen Text... } return(z) # z wird zurückgemeldet }
In R gibt es neben dem dem if-else Konstrukt eine Variante else-if, bei der mehrere if Anweisungen verkettet werden können.
if(args[1]== "AnalyseError"){ print("DEBUG: AnalyseError"); } else if(args[1]== "AnalyseAvgRuntime") { print("DEBUG: AnalyseAvgRuntime"); } else { print("FATAL: missing Arguments"); }
In der R-Sprache:
Siehe auch
[Bearbeiten]
Eigene Funktionen programmieren
[Bearbeiten]GNU R: eigene Funktionen programmieren
Dateioperationen
[Bearbeiten]Eine der wichtigsten Eigenschaften von Programmen ist Kooperation mit anderen Programmen. Also welche Schnittstellen (engl. Interfaces) bietet mein Programm. Wie kann ich Daten importieren, exportieren und wie kann ich mein Programm steuern. In dem ganzen Buch sind schon einzelne Dinge wie der Import von Daten beschrieben worden. R kann Daten aus verschiedenen Quellen importieren, die einfachste Form ist das Einlesen von CSV-Dateien. R ermöglicht eine Datei-basierte Eingabe, Ausgabe und Steuerung von R. Nachfolgend werden alle relevanten R-Funktionen beschrieben die diese Datei-basierte Ein-, Ausgabe und Steuerung ermöglichen.
Dateioperationen
[Bearbeiten]Basis für alle R-Dateioperationen ist das Arbeitsverzeichnis (eng.: working directory). Alle Dateioperationen beziehen sich auf dieses Verzeichnis, es sei denn bei dem Aufruf einer Dateioperation wird explizit etwas anderes angegeben.
Eigene Zusatzpakete erstellen
[Bearbeiten]R
wird von einer großen Anzahl von Freiwilligen weiter auf- und ausgebaut.
Es besteht die Möglichkeit, sich mit selbsterstellten Funktionen und/oder Datensätzen am Aufbau zu beteiligen. Die gängigste Methode ist, seine Daten in einem eigenen Zusatzpaket zu bündeln, und dieses dann über das CRAN der Allgemeinheit zugängig zu machen.
Paket erstellen
[Bearbeiten]Um die Daten und Funktionen zu einem Paket zu bündeln steht die Funktion package.skeleton()
zur Verfügung. Sie erstellt die erforderlichen Unterverzeichnisse des Pakets, legt die Daten und Funktionen in eben diesen ab und generiert Dummy-Dateien zur Dokumentation.
Die Paketverzeichnisse
[Bearbeiten]Ein Paket besteht aus einem Hauptverzeichnis (welches den Namen des Pakets haben sollte) und mehreren Unterverzeichnissen. Die benötigten Paket-Unterverzeichnisse werden von package.skeleton()
automatisch angelegt.
Die Inhalte der Verzeichnisse werden im Folgenden dargestellt:
Hauptverzeichnis:
|
Unterverzeichnisse:
|
Dokumentation schreiben
[Bearbeiten]Dokumentationen werden im "R Documentation"-Format geschrieben. Dies ist eine ASCII-Datei, welche die Dateiendung ".Rd" besitzt und ins man
-Verzeichnis gelegt wird. Wie bereits oben beschrieben, legt die Funktion package.skeleton()
Dummy-Dokumentations-Dateien zu allen Objekten, Daten und Funktionen an, welche mit dem Paket gebündelt werden sollen. Sie müssen "lediglich" noch mit den passenden Infos erweitert werden.
Dokumentation zu datasets
[Bearbeiten]Jeder Datensatz muss eine Dokumentationsdatei besitzen. Diese ist wie folgt aufzubauen:
\name{DATENSATZNAME} # hier wird der Name des Datensatzes eingetragen \docType{data} # hier muss bei datasets immerdata
eingetragen werden. \title{KURZBESCHREIBUNG} # hier kommt eine kurze Überschrift der Daten hin \description{BESCHREIBUNG} # hier kommt eine kurze Beschreibung über die Daten hin. \usage{DATENAUFRUF} # hier wird beschrieben, wie die Daten aufzurufen sind (dies ist meist der Name des Datensatzes). \format{FORMAT} # hier wird das Datenformat eingetragen, also z.B. vector, matrix, data frame bei Matrizen und Data frames sollte eine Beschreibung der Zeilen und Spalten gegeben werden. \references{QUELLEN} # hiermit können Literaturangaben angegeben werden. \source{QUELLE} # hier wird eingetragen, woher die Daten stammen (Originalquelle) \keyword{datasets} # hier muss bei datasets immerdatasets
eingetragen werden.
Dokumentation zu Funktionen
[Bearbeiten]Jede Funktion sollte im man-Verzeichnis eine eigene Dokumentationsdatei erhalten. Diese ist wie folgt aufzubauen:
\name{FUNKTIONSNAME} # hier wird der Name der Funktion eingetragen
\alias{ALIASNAME} # Falls mehrere Funktionen auf dieselbe Help-Seite verweisen
werden diese hier mit je einer alias-Zeile aufgelistet
\title{KURZBESCHREIBUNG} # hier kommt eine kurze Überschrift der Funktion hin
\description{BESCHREIBUNG} # hier kommt eine kurze Beschreibung über die Funktionsweise
der Funktion hin.
\usage{FUNKTIONSAUFRUF} # hier wird beschrieben, wie die Funktion aufzurufen ist.
z.B.: function(argument1, argument2, ...)
\arguments{ # hier werden die Argumente, die übergeben werden können,
\item{ARGUMENT1} durch die Aufzählung "item" beschrieben.
\item{ARGUMENT2}
}
\details{DETAILS} # hier kommt eine exakte Beschreibung hin, welche den "description"
-Part ergänzt und erweitert.
\references{QUELLEN} # hiermit können Quellenangaben angegeben werden.
\note{NOTIZ} # hier können Notizen eingetragen werden.
\author{AUTOR} # Informationen über die Autoren. URLs und E-Mail können innerhalb
per \url{http://www.foo.bar} und \email{e@mail.de} angegeben werden
\examples{BEISPIELE} # innerhalb der Klammern können Beispielaufrufe formuliert werden.
\keyword{keyword1} # Hier muss mindestens ein R-Keyword gesetzt werden. Für eine Übersicht
\keyword{keyword2} # an Keywords tippen Sie ein: file.show(file.path(R.home("doc"), "KEYWORDS"))
Dokumentation zum Paket
[Bearbeiten]Im Gegensatz zu Datensätzen und Funktionen muss die Dummy-Dokumentations-Datei zur Paketdokumentation mit dem Befehl promptPackage()
angelegt werden.
Die einzig geforderte Angabe innerhalb dieser Datei ist:
\docType{package} # das "package" muss so stehen bleiben!
Paket überprüfen und fertig stellen
[Bearbeiten]Wenn man alle oben aufgeführten Schritte durchgeführt hat, ist es an der Zeit, das Paket fertigzustellen. Bevor dies geschieht, muss das Paket allerdings noch auf Fehler überprüft werden. Dies geschieht in der Shell. Man geht hierzu in das Verzeichnis, in welchem das Hauptverzeichnis des Pakets (als Unterverzeichnis) liegt, und tippt in die Shell den folgenden Befehl ein:
R CMD check PAKETNAME
Da das Paketverzeichnis den Namen des Pakets tragen sollte (s.o.), weiss das Script, wo es nach Daten suchen muss. Nun wird das Paket auf mögliche Fehler hin überprüft. Es ist wichtig, dass man erst weiter arbeitet, wenn diese Routine fehlerfrei durchläuft!!!
Ist die Überprüfung fehlerfrei verlaufen, kann das Paket zu einer tar.gz
-Datei geschnürt werden. Hierzu gibt man in die Shell ein:
R CMD build PAKETNAME
Das Script holt sich die passenden Versions-Informationen aus der DESCRIPTION
-Datei, so dass die tar-Datei (entsprechend der Version) automatisch als z.B. PKGNAME_1.12.tar.gz
erstellt wird.
Paket zum CRAN hochladen
[Bearbeiten]Das fertige Paket kann nun per FTP zum CRAN hochgeladen werden. Die URL lautet:
- ftp://cran.R-project.org/incoming/
- Username: anonymous
- Passwort: (Ihre E-Mail-Adresse)
Mit der als Passwort angegebenen Adresse muss dann eine Info-Mail an cran@r-project.org gesendet werden. Das Paket wird zunächst auf mögliche Fehler überprüft und anschließend dem CRAN hinzugefügt.
Weblinks
[Bearbeiten]
Andere Programmiersprachen einbinden
[Bearbeiten]Auch andere Programmiersprachen können eingebunden werden wie z.B.:
C++
[Bearbeiten]Java
[Bearbeiten]Finden von Programmfehlern und Debugging
[Bearbeiten]Ursache von Programmfehlern sind zumeist Fehlannahmen über die von (Unter-)Funktionen zurückgegebenen Inhalte oder Datentypen der übergebenen Objekte. Oft ist es deshalb wünschenswert, den Zustand beim Programmabbruch genauer zu analysieren. R stellt hierfür verschiedene Methoden und Optionen zur Verfügung. |
R unterstützt das Auffinden von Fehlern mit mehreren Hilfsfunktionen und Optionen. Welche bei der Fehlersuche eingesetzt werden, hängt letztlich von Vorlieben der ProgrammiererInnen ab. Dieser Abschnitt soll einen Überblick über die Möglichkeiten geben.
Manuelles Einfügen von Ausgabewerten
[Bearbeiten]R gibt zumeist relativ präzise Fehlermeldungen, warum ein Programmabbruch erfolgt ist, aber leider keine Zeilenangaben. Dies erschwert es manchmal, die genaue Stelle zu finden, an der der Fehler auftrat. Daher ist es oft sinnvoll, mehrere print
oder cat
-Funktionen mit unterscheidbarer Ausgabe an verschiedenen Stellen zu setzen. Falls die entsprechende Ausgabe erfolgt, ist der Fehler an dieser Stelle noch nicht aufgetreten.
Wenn eingegrenzt werden konnte, wo der Fehler auftritt, macht es Sinn, sich die Zustände der der Funktion übergebenen Objekte an charakteristischen Stellen mit print
ausgeben zu lassen. Je nach Fehlermeldung sind auch die Funktionen length
und class
sehr nützlich bei der Fehlersuche.
Gängige Fehler
[Bearbeiten]Wie bereits erwähnt treten Fehler häufig deshalb auf, weil Funktionen andere Objekte übergeben werden als diese erwarten. Wer verstanden hat, wie Objektklassen funktionieren, dürfte auch die meisten der Fehlermeldungen verstehen. Dennoch kann die Interpretation von Fehlermeldungen und die Fehlersuche in R
nicht nur Anfängern immer wieder Schwierigkeiten bereiten.
Hier sollen ein paar häufige Fehler und Lösungen beschrieben werden:
- Manchmal ist es nicht ganz einfach zu verstehen, welche Klasse eine Funktion erwartet. Auskunft hierüber gibt immer die Hilfe-Seite einer Funktion. Hier wird meist genau unter
arguments
beschrieben was die Funktion an Eingabeobjekten erwartet. Untervalue
sind die Objekte und deren Klasse beschrieben, die die Funkton zurückgibt. - Problematisch ist z.B. die Klasse
factor
. Sie verhält sich aus Nutzersicht wie eincharacter
-Vektor, besteht aber in Wahrheit aus Elementen vom Typnumeric
. Dies ist insbesondere beim Datenimport aus Dateien (z.B. mitread.csv
) problematisch, wenn Spalten mit Nummern (z.B. wegen zusätzlicher Buchstaben) als Strings importiert und auf Grund der Einstellungen automatisch einfactor
erzeugt werden. Eine Konvertierung inas.numeric
gibt dann unter Umständen nicht die erwarteten Werte zurück, sondern die interne Repräsentation desfactor
. Eine korrekte Behandlung erfordert in diesem Fall kontraintuitives Vorgehen.as.numeric ( as.character ( variable ) )
. - Listenreferenzierungen sorgen bei Anfängern ebenfalls oft für Verwirrung.
Error-Recovery mit dem Browser
[Bearbeiten]Eine der nützlichsten Einstellungen betrifft die Frage, was passiert, wenn ein Fehler aufgetreten ist. Dies kann über options(error)
festgelegt werden:
Standardmässig wird eine Fehlermeldung dargestellt und die Programmausführung abgebrochen: options(error=print)
Stattdessen kann aber mit options(error=recover)
im Fehlerfall auch automatisch ein so genannter Browser
gestartet werden.
Dies soll in einem Beispiel verdeutlicht werden. Einem data.frame
werden statt Vektoren oder Listen der Code der Funktion sum
übergeben:
> options(error=print) > data.frame(1:10,sum) Fehler in as.data.frame.default(x[[i]] , optional = TRUE) : kann Klasse '"function"' nicht in data.frame umwandeln
Wenn options(error=recover)
gesetzt wird, springt R
in den browser:
> options(error=recover) > data.frame(1:10,sum) Fehler in as.data.frame.default(x[[i]], optional = TRUE) : kann Klasse '"function"' nicht in data.frame umwandeln Enter a frame number, or 0 to exit 1: data.frame(1:10, sum) 2: as.data.frame(x[[i]], optional = TRUE) 3: as.data.frame.default(x[[i]], optional = TRUE) Auswahl: _
Der Browser dient dazu durch die Hierarchien des Funktionsaufrufs (sogenannte frames) zum Zeitpunkt des Fehlers zu navigieren. In diesem Fall gibt es drei frames: Den Funktionsaufruf (1:
) und zwei von der Funktion data.frame aufgerufene Unterfunktionen (2:
und 3:
).
Die Browser hat zwei Zustände:
frame
-Auswahl: In derframe
-Auswahl kann durch Eingabe der entsprechenden Nummern in den entsprechenden frame gesprungen werden.frame
-Editor: Imframe
-Editor können alle Funktionen und Kommandos wie gewöhnlich benutzt werden. Insbesondere werden Objekte durch einfache Eingabe ihres Namens ausgegeben. Durch eine LeereingabeRETURN
springt der Browser zurück in die frame-Auswahl.
Wählen wir beispielsweise frame
1, unseren ursprünglichen Funktionsaufruf, in dem wir 1
eingeben:
Auswahl: 1 Called from: data.frame(1:10, sum)
Wir befinden uns nun in frame
1 und können die Objekte dort betrachten. Um alle Objekte des frame
aufzulisten, benutzen wir die Funktion ls()
:
ls() [1] "check.names" "check.rows" "data.row.names" "i" [5] "mrn" "n" "namesi" "ncols" [9] "no.vn" "nrows" "object" "row.names" [13] "stringsAsFactors" "tmpname" "vlist" "vnames" [17] "x" "xi"
Dies sind alles Variablen, die die Funktion data.frame()
intern bei der Erstellung neuer Objekte generiert. Uns interessieren hier beispielhaft die der Funktion data.frame
übergegebenen Werte, die in x
gespeichert sind:
[[1]] [1] 1 2 3 4 5 6 7 8 9 10 [[2]] function (..., na.rm = FALSE) .Primitive("sum")
Erkennbar ist, dass eine Liste mit zwei Werten übergeben wurde. Das Listenelement [[1]]
enthält die Werte 1:10, das Listenelement [[2]]
die Funktion sum
.
Wir verlassen den Browser durch eine Leereingabe (RETURN
) (zum Wechseln in die frame
-Auswahl) und die Eingabe einer 0
(zum Beenden des Browsers)
Derart lassen sich alle Werte zum Zeitpunkt des Programmabbruchs untersuchen. Wenn ein Fehler auftritt und nicht klar ist, welche Funktionen zum Fehler führten und welche Werte vorher übergeben wurden, sollte generell options(error=recover)
gesetzt werden. Die error-recovery kann nach der Korrektur der Fehler mit options(error=print)
wieder deaktiviert werden.
Verfolgen von Funktionen mit trace
[Bearbeiten]
Anwendungsbeispiele
[Bearbeiten]In diesem Anhang finden sich Anwendungsbeispiele und -datensätze, die zum Testen der beschriebenen R-Funktionen dienen
Datenbeispiele
[Bearbeiten]Beispiel 1
[Bearbeiten]Geschlecht Alter Gewicht Groesse m 28 80 170 w 18 55 174 w 25 74 183 m 29 101 190 m 21 84 185 w 19 74 178 w 27 65 169 w 26 56 163 m 31 88 189 m 22 78 184
R-Befehl zum Erzeugen dieser Tabelle:
w <-factor
(c
("m", "w", "w", "m", "m", "w", "w", "w", "m", "m")) x <-c
(28, 18, 25, 29, 21, 19, 27, 26, 31, 22) y <-c
(80, 55, 74, 101, 84, 74, 65, 56, 88, 78) z <-c
(170, 174, 183, 190, 185, 178, 169, 163, 189, 184) bsp1 <-data.frame
(w, x, y, z)colnames
(bsp1) <- c("Geschlecht", "Alter", "Gewicht", "Groesse")rm
(w, x, y, z) bsp1
Beispiel 2
[Bearbeiten]Geschlecht Note m 2 w 1 m 5 m 3 w 4 m 3 w 2 w 2 w 1 m 3 m 1 w 4 m 2 w 1 m 4 m 3 w 5 m 2 w 1 w 2
R-Befehl zum Erzeugen dieser Tabelle:
x <-factor
(c
("m", "w", "m", "m", "w", "m", "w", "w", "w", "m", "m", "w", "m", "w", "m", "m", "w", "m", "w", "w")) y <-c
(2,1,5,3,4,3,2,2,1,3,1,4,2,1,4,3,5,2,1,2) bsp2 <-data.frame
(x,y)colnames
(bsp2) <- c("Geschlecht", "Note")rm
(x,y) bsp2
Beispiel 3
[Bearbeiten]Erfolg Abschlussnote 1 0 5 2 1 3 3 1 2 4 0 4 5 1 1 6 0 6 7 1 3 8 1 2 9 0 4 10 1 3 11 0 6 12 0 5 13 0 4 14 1 3
R-Befehl zum Erzeugen dieser Tabelle:
a <-factor
(c
(0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1)) b <-c
(5, 3, 2, 4, 1, 6, 3, 2, 4, 3, 6, 5, 4, 3) bsp3 <-data.frame
(a,b)colnames
(bsp3) <- c("Erfolg", "Abschlussnote")rm
(a,b) bsp3
Beispiel 4
[Bearbeiten]Name Geschlecht Lieblingsfarbe Einkommen 1 Hans maennlich gruen 1233 2 Caro weiblich blau 800 3 Lars intersexuell gelb 2400 4 Ines weiblich schwarz 4000 5 Samira weiblich gelb 899 6 Peter maennlich gruen 1100 7 Sarah weiblich blau 1900
R-Befehl zum Erzeugen dieser Tabelle:
w <-c
("Hans","Caro","Lars","Ines","Samira","Peter","Sarah") x <-factor
(c
("maennlich","weiblich","intersexuell","weiblich","weiblich","maennlich","weiblich")) y <-factor
(c
("gruen","blau","gelb","schwarz","gelb","gruen","blau")) z <-c
(1233,800,2400,4000,899,1100,1900) bsp4 <-data.frame
(w,x,y,z)colnames
(bsp4) <- c("Name", "Geschlecht", "Lieblingsfarbe", "Einkommen")rm
(w,x,y,z) bsp4
Beispiel 5
[Bearbeiten]Lebenstag Gewicht 1 1 3180 2 3 2960 3 6 3220 4 11 3270 5 12 3350 6 15 3410 7 19 3700 8 23 3830 9 28 4090 10 33 4310 11 35 4360 12 39 4520 13 47 4650 14 60 5310 15 66 5490 16 73 5540
R-Befehl zum Erzeugen dieser Tabelle:
x <-c
(1, 3, 6, 11, 12, 15, 19, 23, 28, 33, 35, 39, 47, 60, 66, 73) y <-c
(3180, 2960, 3220, 3270, 3350, 3410, 3700, 3830, 4090, 4310, 4360, 4520, 4650, 5310, 5490, 5540) bsp5 <-data.frame
(x,y)colnames
(bsp5) <- c("Lebenstag", "Gewicht")rm
(x,y)
Beispiel 6
[Bearbeiten]Person Date Age Sex DimBody DimEmotion DimSelf DimFamily DimFriends DimSchool TotalScore 1 190053 2008-08-20 15 f 75.00 85.00 65.00 85.00 70.00 90.00 78.33 2 190050 2008-01-24 16 m 80.00 80.00 75.00 65.00 70.00 60.00 71.67 3 190052 2008-02-05 11 m 70.00 65.00 35.00 80.00 45.00 95.00 65.00 4 190002 2006-12-07 11 f 85.00 90.00 85.00 70.00 80.00 55.00 77.50 5 190002 2008-01-31 13 f 75.00 90.00 75.00 55.00 85.00 70.00 75.00 6 190005 2007-02-22 12 m 65.00 90.00 70.00 95.00 75.00 65.00 76.67 7 190035 2007-05-22 14 f 60.00 85.00 65.00 75.00 80.00 55.00 70.00 8 190021 2006-08-30 16 f 55.00 50.00 50.00 30.00 55.00 55.00 49.17 9 190014 2006-12-07 12 m 75.00 90.00 40.00 85.00 75.00 60.00 70.83 10 190029 2006-11-21 13 f 55.00 70.00 60.00 65.00 85.00 55.00 65.00 11 190025 2006-12-07 12 f 100.00 95.00 95.00 100.00 90.00 85.00 94.17 12 190025 2007-02-20 13 f 85.00 95.00 85.00 85.00 95.00 75.00 86.67 13 190036 2007-06-05 12 m 55.00 75.00 80.00 85.00 90.00 75.00 76.67 14 190031 2007-02-13 13 f 60.00 80.00 60.00 80.00 90.00 55.00 70.83 15 190034 2007-05-19 16 f 50.00 55.00 45.00 80.00 70.00 30.00 55.00 16 190044 2007-10-23 13 m 75.00 65.00 60.00 85.00 60.00 75.00 70.00 17 190041 2007-08-16 16 f 90.00 90.00 90.00 100.00 70.00 60.00 83.33 18 190046 2007-11-15 14 f 70.00 75.00 90.00 70.00 80.00 75.00 76.67 19 190034 2007-07-19 16 f 50.00 60.00 45.00 90.00 75.00 55.00 62.50 20 191028 2006-10-26 7 f 66.67 100.00 100.00 66.67 50.00 83.33 77.78 21 191035 2007-05-22 6 f 66.67 83.33 66.67 100.00 100.00 100.00 86.11 22 191037 2007-05-31 6 m 66.67 83.33 100.00 83.33 66.67 83.33 80.56 23 191036 2007-06-19 6 f 100.00 83.33 100.00 83.33 83.33 66.67 86.11 24 192052 2008-02-05 8 f 80.00 60.00 60.00 80.00 75.00 65.00 70.00 25 190028 2006-10-26 9 f 65.00 65.00 60.00 80.00 75.00 75.00 70.00 26 190028 2008-02-15 11 f 85.00 90.00 70.00 95.00 90.00 90.00 86.67 27 191028 2008-02-16 9 f 80.00 95.00 100.00 95.00 80.00 85.00 89.17 28 190039 2007-05-29 9 f 70.00 90.00 80.00 95.00 90.00 95.00 86.67 29 190037 2007-05-31 8 m 90.00 75.00 60.00 100.00 90.00 80.00 82.50 30 191030 2007-02-22 9 f 80.00 75.00 60.00 85.00 85.00 60.00 74.17 31 192030 2007-02-22 8 m 85.00 95.00 60.00 85.00 60.00 80.00 77.50 32 190030 2007-02-22 11 f 70.00 90.00 60.00 65.00 80.00 55.00 70.00 33 190022 2006-05-07 10 m 95.00 95.00 80.00 85.00 50.00 65.00 78.33 34 190048 2008-01-08 11 f 65.00 75.00 60.00 85.00 70.00 60.00 69.17 35 190017 2007-12-18 8 f 40.00 80.00 70.00 60.00 55.00 75.00 63.33 36 190015 2006-11-28 12 f 60.00 60.00 60.00 75.00 90.00 80.00 70.83 37 191002 2008-01-31 9 f 80.00 100.00 90.00 70.00 95.00 65.00 83.33 38 271050 2008-01-31 13 m 85.00 65.00 70.00 70.00 70.00 70.00 71.67 39 270050 2008-01-31 16 m 55.00 60.00 60.00 55.00 70.00 50.00 58.33 40 270052 2008-02-05 11 m 40.00 45.00 55.00 65.00 40.00 65.00 51.67 41 271052 2008-02-05 10 m 85.00 45.00 40.00 70.00 50.00 55.00 57.50 42 272052 2008-02-05 8 f 60.00 55.00 70.00 70.00 80.00 75.00 68.33 43 271002 2007-02-22 8 f 80.00 65.00 65.00 75.00 40.00 60.00 64.17 44 271002 2007-01-26 8 f 85.00 80.00 80.00 75.00 80.00 90.00 81.67 45 270002 2007-01-26 12 f 75.00 85.00 90.00 70.00 95.00 75.00 81.67 46 271002 2008-01-31 9 f 60.00 60.00 65.00 60.00 70.00 75.00 65.00 47 270002 2008-01-31 13 f 80.00 70.00 90.00 70.00 85.00 80.00 79.17 48 270005 2007-01-23 12 m 65.00 45.00 45.00 45.00 50.00 60.00 51.67 49 270005 2007-01-23 12 m 65.00 55.00 45.00 35.00 55.00 55.00 51.67 50 270010 2007-05-22 9 f 70.00 65.00 75.00 90.00 50.00 95.00 74.17 51 270014 2007-04-18 13 m 75.00 65.00 50.00 65.00 30.00 65.00 58.33 52 270022 2006-12-07 10 m 85.00 90.00 75.00 100.00 55.00 70.00 79.17 53 270025 2006-11-30 12 f 100.00 80.00 80.00 85.00 95.00 95.00 89.17 54 270025 2007-02-20 13 f 90.00 95.00 80.00 80.00 95.00 95.00 89.17 55 270028 2006-10-26 9 f 55.00 65.00 60.00 45.00 50.00 35.00 51.67 56 270028 2008-02-16 11 f 55.00 45.00 50.00 50.00 50.00 55.00 50.83 57 270029 2006-11-21 13 f 70.00 50.00 70.00 50.00 85.00 80.00 67.50 58 271030 2006-12-14 9 f 35.00 65.00 60.00 55.00 75.00 45.00 55.83 59 270030 2006-12-14 11 f 60.00 55.00 35.00 60.00 60.00 55.00 54.17 60 270035 2007-05-22 14 f 60.00 60.00 55.00 65.00 90.00 55.00 64.17 61 270036 2007-06-05 12 m 80.00 60.00 65.00 80.00 70.00 85.00 73.33 62 270036 2007-06-19 12 m 60.00 55.00 75.00 75.00 65.00 85.00 69.17 63 270037 2007-05-31 8 m 80.00 90.00 75.00 85.00 95.00 85.00 85.00 64 270039 2007-05-29 9 f 45.00 80.00 70.00 90.00 95.00 85.00 77.50 65 270041 2007-08-16 16 f 85.00 95.00 75.00 75.00 90.00 70.00 81.67 66 270044 2007-10-23 13 m 60.00 65.00 55.00 75.00 55.00 50.00 60.00 67 270046 2007-11-15 14 f 60.00 70.00 65.00 80.00 60.00 80.00 69.17 68 270048 2008-01-08 11 f 60.00 60.00 55.00 80.00 75.00 50.00 63.33 69 270002 2007-02-22 12 f 70.00 75.00 65.00 55.00 75.00 60.00 66.67 70 270004 2006-11-25 14 f 90.00 100.00 100.00 95.00 85.00 100.00 95.00 71 270017 2007-12-13 8 f 60.00 80.00 65.00 85.00 50.00 80.00 70.00 72 271028 2008-02-16 9 f 95.00 75.00 75.00 70.00 80.00 75.00 78.33 73 270015 2006-11-28 12 f 85.00 90.00 85.00 75.00 85.00 95.00 85.83 74 271036 2007-06-19 6 f 85.00 85.00 80.00 60.00 95.00 80.00 80.83 75 270045 2007-10-23 7 m 75.00 80.00 55.00 70.00 60.00 75.00 69.17 76 270040 2007-08-07 5 f 90.00 70.00 75.00 75.00 65.00 70.00 74.17 77 271037 2007-05-31 6 m 80.00 90.00 80.00 95.00 80.00 55.00 80.00 78 271035 2007-05-22 7 f 80.00 100.00 85.00 80.00 75.00 75.00 82.50 79 271010 2007-05-22 6 m 100.00 65.00 70.00 90.00 75.00 80.00 80.00 80 270033 2007-03-22 4 m 80.00 80.00 90.00 75.00 75.00 65.00 77.50 81 271036 2007-06-05 7 f 60.00 80.00 70.00 85.00 85.00 65.00 74.17 82 271028 2006-10-26 7 f 95.00 85.00 80.00 90.00 70.00 65.00 80.83
R-Befehl zur Erzeugung des Datensatzes:
bsp6 <- structure(list(Person = c("190053", "190050", "190052", "190002", "190002", "190005", "190035", "190021", "190014", "190029", "190025", "190025", "190036", "190031", "190034", "190044", "190041", "190046", "190034", "191028", "191035", "191037", "191036", "192052", "190028", "190028", "191028", "190039", "190037", "191030", "192030", "190030", "190022", "190048", "190017", "190015", "191002", "271050", "270050", "270052", "271052", "272052", "271002", "271002", "270002", "271002", "270002", "270005", "270005", "270010", "270014", "270022", "270025", "270025", "270028", "270028", "270029", "271030", "270030", "270035", "270036", "270036", "270037", "270039", "270041", "270044", "270046", "270048", "270002", "270004", "270017", "271028", "270015", "271036", "270045", "270040", "271037", "271035", "271010", "270033", "271036", "271028"), Date = structure(c(1219183200, 1201129200, 1202166000, 1165446000, 1201734000, 1172098800, 1179784800, 1156888800, 1165446000, 1164063600, 1165446000, 1171926000, 1180994400, 1171321200, 1179525600, 1193090400, 1187215200, 1195081200, 1184796000, 1161813600, 1179784800, 1180562400, 1182204000, 1202166000, 1161813600, 1203030000, 1203116400, 1180389600, 1180562400, 1172098800, 1172098800, 1172098800, 1146952800, 1199746800, 1197932400, 1164668400, 1201734000, 1201734000, 1201734000, 1202166000, 1202166000, 1202166000, 1172098800, 1169766000, 1169766000, 1201734000, 1201734000, 1169506800, 1169506800, 1179784800, 1176847200, 1165446000, 1164841200, 1171926000, 1161813600, 1203116400, 1164063600, 1166050800, 1166050800, 1179784800, 1180994400, 1182204000, 1180562400, 1180389600, 1187215200, 1193090400, 1195081200, 1199746800, 1172098800, 1164409200, 1197500400, 1203116400, 1164668400, 1182204000, 1193090400, 1186437600, 1180562400, 1179784800, 1179784800, 1174518000, 1180994400, 1161813600), class = c("POSIXt", "POSIXct" ), tzone = ""), Age = c(15, 16, 11, 11, 13, 12, 14, 16, 12, 13, 12, 13, 12, 13, 16, 13, 16, 14, 16, 7, 6, 6, 6, 8, 9, 11, 9, 9, 8, 9, 8, 11, 10, 11, 8, 12, 9, 13, 16, 11, 10, 8, 8, 8, 12, 9, 13, 12, 12, 9, 13, 10, 12, 13, 9, 11, 13, 9, 11, 14, 12, 12, 8, 9, 16, 13, 14, 11, 12, 14, 8, 9, 12, 6, 7, 5, 6, 7, 6, 4, 7, 7), Sex = structure(c(1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L), .Label = c("f", "m"), class = "factor"), DimBody = c(75, 80, 70, 85, 75, 65, 60, 55, 75, 55, 100, 85, 55, 60, 50, 75, 90, 70, 50, 66.67, 66.67, 66.67, 100, 80, 65, 85, 80, 70, 90, 80, 85, 70, 95, 65, 40, 60, 80, 85, 55, 40, 85, 60, 80, 85, 75, 60, 80, 65, 65, 70, 75, 85, 100, 90, 55, 55, 70, 35, 60, 60, 80, 60, 80, 45, 85, 60, 60, 60, 70, 90, 60, 95, 85, 85, 75, 90, 80, 80, 100, 80, 60, 95), DimEmotion = c(85, 80, 65, 90, 90, 90, 85, 50, 90, 70, 95, 95, 75, 80, 55, 65, 90, 75, 60, 100, 83.33, 83.33, 83.33, 60, 65, 90, 95, 90, 75, 75, 95, 90, 95, 75, 80, 60, 100, 65, 60, 45, 45, 55, 65, 80, 85, 60, 70, 45, 55, 65, 65, 90, 80, 95, 65, 45, 50, 65, 55, 60, 60, 55, 90, 80, 95, 65, 70, 60, 75, 100, 80, 75, 90, 85, 80, 70, 90, 100, 65, 80, 80, 85), DimSelf = c(65, 75, 35, 85, 75, 70, 65, 50, 40, 60, 95, 85, 80, 60, 45, 60, 90, 90, 45, 100, 66.67, 100, 100, 60, 60, 70, 100, 80, 60, 60, 60, 60, 80, 60, 70, 60, 90, 70, 60, 55, 40, 70, 65, 80, 90, 65, 90, 45, 45, 75, 50, 75, 80, 80, 60, 50, 70, 60, 35, 55, 65, 75, 75, 70, 75, 55, 65, 55, 65, 100, 65, 75, 85, 80, 55, 75, 80, 85, 70, 90, 70, 80), DimFamilie = c(85, 65, 80, 70, 55, 95, 75, 30, 85, 65, 100, 85, 85, 80, 80, 85, 100, 70, 90, 66.67, 100, 83.33, 83.33, 80, 80, 95, 95, 95, 100, 85, 85, 65, 85, 85, 60, 75, 70, 70, 55, 65, 70, 70, 75, 75, 70, 60, 70, 45, 35, 90, 65, 100, 85, 80, 45, 50, 50, 55, 60, 65, 80, 75, 85, 90, 75, 75, 80, 80, 55, 95, 85, 70, 75, 60, 70, 75, 95, 80, 90, 75, 85, 90), DimFriends = c(70, 70, 45, 80, 85, 75, 80, 55, 75, 85, 90, 95, 90, 90, 70, 60, 70, 80, 75, 50, 100, 66.67, 83.33, 75, 75, 90, 80, 90, 90, 85, 60, 80, 50, 70, 55, 90, 95, 70, 70, 40, 50, 80, 40, 80, 95, 70, 85, 50, 55, 50, 30, 55, 95, 95, 50, 50, 85, 75, 60, 90, 70, 65, 95, 95, 90, 55, 60, 75, 75, 85, 50, 80, 85, 95, 60, 65, 80, 75, 75, 75, 85, 70), DimSchool = c(90, 60, 95, 55, 70, 65, 55, 55, 60, 55, 85, 75, 75, 55, 30, 75, 60, 75, 55, 83.33, 100, 83.33, 66.67, 65, 75, 90, 85, 95, 80, 60, 80, 55, 65, 60, 75, 80, 65, 70, 50, 65, 55, 75, 60, 90, 75, 75, 80, 60, 55, 95, 65, 70, 95, 95, 35, 55, 80, 45, 55, 55, 85, 85, 85, 85, 70, 50, 80, 50, 60, 100, 80, 75, 95, 80, 75, 70, 55, 75, 80, 65, 65, 65), TotalScore = c(78.33, 71.67, 65, 77.5, 75, 76.67, 70, 49.17, 70.83, 65, 94.17, 86.67, 76.67, 70.83, 55, 70, 83.33, 76.67, 62.5, 77.78, 86.11, 80.56, 86.11, 70, 70, 86.67, 89.17, 86.67, 82.5, 74.17, 77.5, 70, 78.33, 69.17, 63.33, 70.83, 83.33, 71.67, 58.33, 51.67, 57.5, 68.33, 64.17, 81.67, 81.67, 65, 79.17, 51.67, 51.67, 74.17, 58.33, 79.17, 89.17, 89.17, 51.67, 50.83, 67.5, 55.83, 54.17, 64.17, 73.33, 69.17, 85, 77.5, 81.67, 60, 69.17, 63.33, 66.67, 95, 70, 78.33, 85.83, 80.83, 69.17, 74.17, 80, 82.5, 80, 77.5, 74.17, 80.83)), .Names = c("Person", "Date", "Age", "Sex", "DimBody", "DimEmotion", "DimSelf", "DimFamily", "DimFriends", "DimSchool", "TotalScore"), row.names = c(NA, -82L), class = "data.frame")
Beispiel 7
[Bearbeiten]Die Ergebnisse eines Hochsprungwettbewerbs lauten wie folgt.
0
bedeutet, dass die entsprechende Höhe nicht übersprungen wurde1
bedeutet, dass die entsprechende Höhe übersprungen wurde
1.00 1.10 1.20 1.30 1.50 1.60 1.70 1.90 2.00 2.20 Hans 1 1 1 1 1 1 1 1 1 1 Karola 1 1 1 1 1 1 1 1 1 0 Matthias 1 1 1 1 1 1 1 1 0 0 Stefan 1 1 1 1 1 1 1 0 0 0 Sabine 1 1 1 1 1 1 1 0 0 0 Irma 1 1 1 1 1 1 0 0 0 0 Heike 1 1 1 1 1 1 0 0 0 0 Ralf 1 1 1 1 1 1 0 0 0 0 Rainer 1 1 1 1 1 0 0 0 0 0 Simon 1 1 1 1 1 0 0 0 0 0 Andreas 1 1 1 1 1 0 0 0 0 0 Elke 1 1 1 1 0 0 0 0 0 0 Gabi 1 1 1 1 0 0 0 0 0 0 David 1 1 1 1 0 0 0 0 0 0 Jonas 1 1 1 1 0 0 0 0 0 0 Nicklas 1 1 1 1 0 0 0 0 0 0 Sandra 1 1 1 0 0 0 0 0 0 0 Mario 1 1 1 0 0 0 0 0 0 0 Guido 1 1 1 0 0 0 0 0 0 0 Lisa 1 1 1 0 0 0 0 0 0 0 Peter 1 1 1 0 0 0 0 0 0 0 Justus 1 1 1 0 0 0 0 0 0 0 Josef 1 1 1 0 0 0 0 0 0 0 Brigitte 1 1 1 0 0 0 0 0 0 0 Kevin 1 1 0 0 0 0 0 0 0 0 Marcel 1 1 0 0 0 0 0 0 0 0 Nadine 1 1 0 0 0 0 0 0 0 0 Alex 1 1 0 0 0 0 0 0 0 0 Katharina 1 1 0 0 0 0 0 0 0 0 Daniel 1 1 0 0 0 0 0 0 0 0 Jens 1 1 0 0 0 0 0 0 0 0 Dieter 1 0 0 0 0 0 0 0 0 0 Sebastian 1 0 0 0 0 0 0 0 0 0 Anne 1 0 0 0 0 0 0 0 0 0
Diese Tabelle wird wie folgt erzeugt:
hochsprung <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(34L, 10L), .Dimnames = list( c("Hans", "Karola", "Matthias", "Stefan", "Sabine", "Irma", "Heike", "Ralf", "Rainer", "Simon", "Andreas", "Elke", "Gabi", "David", "Jonas", "Nicklas", "Sandra", "Mario", "Guido", "Lisa", "Peter", "Justus", "Josef", "Brigitte", "Kevin", "Marcel", "Nadine", "Alex", "Katharina", "Daniel", "Jens", "Dieter", "Sebastian", "Anne"), c("1.00", "1.10", "1.20", "1.30", "1.50", "1.60", "1.70", "1.90", "2.00", "2.20")))
Beispiel 8
[Bearbeiten]Die Ergebnisse eines Minigolfwettbewerbs lauten wie folgt.
0
bedeutet, dass das entsprechende Loch nicht mit einem Schlag getroffen wurde1
bedeutet, dass das entsprechende Loch mit einem Schlag getroffen wurde
Loch1 Loch2 Loch3 Loch4 Loch5 Loch6 Loch7 Loch8 Loch9 Loch10 Hans 0 1 1 0 1 1 0 1 1 1 Karola 1 0 1 1 1 0 1 1 1 0 Matthias 1 1 1 0 1 1 1 1 0 0 Stefan 0 0 1 1 0 1 1 0 0 1 Sabine 1 1 1 1 1 1 1 0 0 0 Irma 1 1 0 1 1 1 0 1 0 0 Heike 1 0 1 0 1 1 0 0 0 1 Ralf 1 1 1 0 1 1 0 0 0 0 Rainer 1 1 0 1 1 0 0 1 0 1 Simon 1 0 1 1 1 0 1 0 1 0 Andreas 1 1 1 0 1 0 0 0 0 0 Elke 1 1 0 1 0 1 0 0 1 0 Gabi 0 1 1 1 0 0 1 0 0 1 David 1 1 0 1 0 0 0 0 0 0 Jonas 1 1 0 1 1 0 1 1 0 0 Nicklas 1 1 1 1 0 1 0 0 1 0 Sandra 0 1 0 0 1 0 1 1 0 1 Mario 1 0 1 0 1 1 0 0 0 0 Guido 1 1 1 0 0 0 0 0 1 0 Lisa 0 1 1 0 0 0 1 0 0 0 Peter 1 0 1 0 1 0 0 0 1 0 Justus 1 1 1 0 0 0 1 0 0 1 Josef 1 0 1 0 0 0 0 0 0 0 Brigitte 1 1 1 0 0 0 1 0 1 0 Kevin 0 1 0 0 1 0 0 1 0 1 Marcel 1 1 0 0 0 0 0 0 0 0 Nadine 1 0 0 1 0 1 0 0 1 0 Alex 1 0 0 0 0 0 0 0 0 0 Katharina 0 1 0 0 0 1 1 0 1 1 Daniel 1 1 0 0 0 0 0 0 0 0 Jens 1 1 0 1 0 0 1 0 1 0 Dieter 1 0 0 0 0 0 1 1 0 0 Sebastian 1 0 1 0 1 0 0 0 1 1 Anne 0 0 0 0 1 0 1 0 0 1
Diese Tabelle wird wie folgt erzeugt:
minigolf <- structure(list(Loch1 = c(0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0), Loch2 = c(1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0), Loch3 = c(1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0), Loch4 = c(0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0), Loch5 = c(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1), Loch6 = c(1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 ), Loch7 = c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1), Loch8 = c(1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0), Loch9 = c(1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 ), Loch10 = c(1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1)), .Names = c("Loch1", "Loch2", "Loch3", "Loch4", "Loch5", "Loch6", "Loch7", "Loch8", "Loch9", "Loch10" ), class = "data.frame", row.names = c("Hans", "Karola", "Matthias", "Stefan", "Sabine", "Irma", "Heike", "Ralf", "Rainer", "Simon", "Andreas", "Elke", "Gabi", "David", "Jonas", "Nicklas", "Sandra", "Mario", "Guido", "Lisa", "Peter", "Justus", "Josef", "Brigitte", "Kevin", "Marcel", "Nadine", "Alex", "Katharina", "Daniel", "Jens", "Dieter", "Sebastian", "Anne"))
Beispiel 9
[Bearbeiten]Ein Fragebogen besteht aus 27 Fragen, welche die Antworten "nie / selten / manchmal / oft / immer
" zulassen. Die Antworten werden wie folgt codiert:
- 1 = nie
- 2 = selten
- 3 = manchmal
- 4 = oft
- 5 = immer
Der Fragebogen wird nun von 122 Personen ausgefüllt. Da dieser Datensatz relativ groß ist, wird auf eine Darstellung der Tabelle verzichtet. Der Code zum Erzeugen des Datensatzes lautet:
bsp9 <- structure(list(Frage1 = c(4, 4, 5, 5, 5, 1, 3, 3, 3, 3, 5, 5, 5, 3, 3, 4, 5, 4, 3, 2, 2, 2, 3, 4, 3, 4, 4, 2, 5, 5, 5, 5, 5, 5, 1, 3, 4, 3, 3, 4, 3, 3, 3, 3, 5, 3, 3, 3, 2, 5, 4, 5, 2, 4, 3, 2, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage2 = c(3, 5, 4, 5, 4, 5, 3, 3, 5, 3, 5, 4, 4, 4, 2, 5, 5, 3, 2, 2, 2, 2, 3, 2, 3, 5, 4, 4, 3, 3, 5, 3, 5, 2, 3, 3, 5, 4, 3, 4, 1, 4, 4, 4, 5, 2, 2, 3, 2, 3, 5, 5, 3, 5, 3, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage3 = c(4, 4, 4, 4, 3, 3, 2, 2, 4, 2, 5, 3, 1, 2, 3, 4, 4, 3, 3, 3, 4, 5, 4, 5, 4, 4, 3, 3, 5, 5, 2, 4, 4, 3, 2, 3, 4, 3, 3, 3, 1, 3, 3, 2, 4, 1, 1, 3, 3, 3, 5, 5, 4, 2, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage4 = c(4, 3, 1, 3, 3, 4, 4, 3, 3, 3, 5, 5, 1, 3, 2, 2, 4, 4, 2, 2, 4, 5, 4, 5, 3, 4, 5, 5, 5, 3, 5, 2, 5, 3, 2, 3, 3, 4, 3, 4, 1, 2, 3, 4, 5, 2, 3, 2, 3, 2, 4, 5, 4, 1, 4, 2, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage5 = c(5, 1, 2, 5, 2, 4, 4, 1, 1, 4, 5, 4, 3, 5, 3, 5, 1, 1, 4, 5, 5, 4, 2, 4, 3, 1, 2, 1, 3, 4, 2, 1, 1, 4, 1, 1, 2, 4, 2, 3, 3, 4, 4, 4, 5, 2, 2, 2, 3, 3, 4, 2, 3, 3, 4, 3, 5, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage6 = c(5, 3, 1, 4, 5, 5, 4, 3, 3, 4, 5, 5, 4, 4, 3, 2, 4, 5, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 2, 5, 5, 4, 5, 4, 2, 2, 5, 3, 3, 3, 1, 4, 4, 4, 5, 3, 2, 3, 1, 2, 5, 4, 3, 5, 4, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage7 = c(3, 3, 2, 4, 4, 3, 4, 3, 5, 3, 4, 5, 3, 4, 2, 3, 4, 3, 4, 3, 2, 2, 2, 1, 4, 4, 4, 4, 3, 3, 5, 5, 4, 4, 4, 2, 5, 3, 3, 4, 2, 5, 3, 3, 5, 4, 3, 5, 3, 3, 4, 5, 4, 3, 5, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage8 = c(4, 5, 5, 5, 4, 5, 4, 2, 5, 4, 5, 5, 4, 4, 4, 4, 5, 3, 3, 1, 3, 4, 4, 3, 3, 5, 5, 5, 5, 4, 5, 5, 5, 3, 3, 4, 5, 3, 3, 4, 2, 5, 3, 4, 5, 3, 3, 4, 3, 4, 5, 4, 4, 4, 5, 4, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage9 = c(5, 5, 5, 5, 5, 5, 5, 2, 5, 3, 5, 4, 4, 4, 2, 4, 5, 4, 2, 2, 3, 4, 4, 4, 3, 5, 5, 5, 5, 3, 4, 4, 5, 4, 5, 4, 5, 4, 4, 4, 2, 5, 4, 4, 5, 2, 3, 2, 4, 2, 4, 4, 4, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage10 = c(2, 1, 5, 4, 3, 4, 2, 4, 5, 1, 3, 2, 1, 1, 1, 5, 4, 2, 2, 5, 3, 5, 2, 2, 3, 1, 1, 2, 5, 5, 2, 3, 3, 4, 2, 5, 4, 5, 5, 3, 2, 5, 4, 3, 4, 2, 4, 1, 4, 3, 5, 3, 3, 4, 5, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage11 = c(3, 1, 5, 4, 4, 3, 3, 2, 1, 3, 4, 4, 1, 4, 4, 4, 4, 1, 3, 5, 5, 5, 3, 5, 5, 2, 5, 2, 1, 2, 5, 3, 5, 5, 1, 1, 2, 5, 4, 4, 3, 3, 4, 4, 5, 3, 3, 3, 3, 3, 5, 5, 5, 5, 3, 3, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage12 = c(1, 5, 3, 2, 5, 3, 2, 1, 1, 2, 1, 4, 3, 1, 3, 1, 1, 3, 3, 1, 3, 1, 2, 2, 4, 4, 5, 5, 3, 1, 3, 1, 1, 4, 2, 1, 5, 4, 3, 3, 2, 4, 3, 2, 5, 5, 1, 1, 3, 3, 4, 5, 4, 4, 4, 2, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage13 = c(2, 4, 2, 3, 3, 3, 3, 3, 2, 2, 4, 4, 1, 2, 1, 2, 4, 4, 2, 3, 2, 3, 3, 1, 2, 3, 5, 4, 4, 2, 1, 3, 5, 3, 4, 1, 5, 3, 3, 3, 1, 2, 3, 1, 4, 5, 3, 1, 4, 4, 2, 4, 2, 2, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage14 = c(4, 3, 2, 4, 4, 5, 4, 3, 2, 4, 5, 4, 5, 3, 1, 4, 5, 5, 1, 3, 2, 3, 3, 5, 3, 3, 5, 4, 4, 3, 5, 3, 5, 3, 4, 3, 4, 4, 4, 2, 1, 4, 3, 3, 4, 2, 2, 5, 4, 4, 1, 2, 2, 3, 4, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage15 = c(4, 3, 2, 5, 4, 5, 3, 2, 1, 4, 5, 4, 5, 3, 3, 3, 5, 5, 2, 3, 4, 4, 1, 2, 3, 4, 5, 5, 3, 5, 1, 2, 3, 3, 1, 4, 5, 3, 5, 2, 2, 5, 4, 4, 4, 5, 5, 4, 3, 3, 1, 5, 1, 1, 5, 2, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage16 = c(3, 5, 1, 5, 4, 1, 3, 2, 3, 2, 5, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 5, 3, 1, 2, 5, 4, 3, 3, 5, 4, 4, 4, 5, 4, 4, 3, 4, 3, 4, 5, 5, 5, 4, 4, 5, 5, 1, 5, 5, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage17 = c(4, 4, 4, 2, 3, 2, 2, 4, 5, 3, 1, 4, 5, 3, 2, 4, 4, 4, 1, 2, 4, 5, 3, 4, 1, 4, 5, 3, 1, 3, 3, 4, 1, 5, 2, 4, 3, 5, 5, 4, 1, 5, 3, 4, 4, 5, 4, 5, 4, 4, 5, 5, 3, 4, 5, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage18 = c(4, 2, 1, 5, 3, 5, 2, 4, 3, 4, 2, 3, 1, 3, 2, 2, 2, 1, 1, 4, 1, 5, 2, 5, 2, 1, 2, 5, 3, 2, 5, 4, 4, 1, 3, 1, 2, 5, 4, 5, 3, 5, 3, 3, 5, 3, 5, 2, 4, 5, 1, 2, 1, 3, 5, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage19 = c(3, 1, 4, 5, 4, 5, 4, 2, 5, 5, 5, 3, 3, 5, 4, 4, 1, 2, 2, 2, 1, 1, 1, 1, 3, 3, 4, 2, 4, 1, 3, 5, 5, 5, 2, 4, 4, 4, 3, 5, 2, 4, 3, 4, 5, 3, 5, 2, 3, 4, 5, 5, 3, 1, 5, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage20 = c(4, 3, 4, 3, 3, 5, 4, 1, 4, 3, 5, 4, 4, 2, 4, 2, 5, 4, 4, 1, 3, 3, 2, 5, 4, 5, 5, 5, 5, 4, 5, 4, 5, 4, 2, 4, 5, 2, 4, 3, 2, 4, 3, 3, 5, 5, 2, 3, 1, 2, 2, 4, 5, 5, 5, 3, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage21 = c(4, 2, 3, 5, 3, 5, 4, 3, 3, 3, 5, 5, 5, 5, 4, 5, 5, 3, 5, 3, 3, 2, 3, 4, 3, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 2, 4, 3, 2, 5, 3, 4, 5, 3, 2, 4, 4, 4, 3, 5, 5, 5, 4, 4, 3, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage22 = c(5, 3, 5, 4, 3, 5, 4, 1, 5, 3, 5, 4, 4, 4, 3, 5, 5, 3, 4, 4, 3, 3, 2, 3, 5, 5, 5, 5, 5, 4, 2, 2, 5, 5, 3, 4, 4, 4, 4, 3, 5, 3, 3, 4, 5, 5, 3, 3, 5, 5, 5, 5, 3, 5, 4, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage23 = c(4, 5, 4, 2, 2, 4, 3, 1, 5, 4, 5, 4, 4, 5, 5, 5, 5, 4, 5, 3, 2, 3, 2, 4, 4, 4, 4, 4, 5, 4, 5, 3, 3, 4, 3, 3, 1, 4, 4, 3, 3, 4, 4, 5, 5, 4, 4, 2, 4, 5, 5, 5, 3, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage24 = c(5, 4, 1, 4, 4, 5, 4, 3, 5, 4, 4, 5, 4, 4, 3, 1, 4, 4, 3, 2, 3, 2, 2, 5, 4, 5, 3, 4, 3, 5, 5, 4, 4, 3, 1, 5, 4, 3, 2, 3, 3, 4, 3, 3, 3, 4, 1, 4, 3, 4, 5, 3, 2, 5, 2, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage25 = c(3, 3, 1, 3, 4, 5, 4, 3, 4, 3, 4, 4, 4, 5, 3, 3, 4, 5, 4, 1, 3, 2, 3, 1, 4, 4, 5, 5, 5, 4, 1, 4, 2, 4, 5, 4, 5, 4, 2, 4, 3, 4, 3, 4, 4, 5, 1, 5, 2, 3, 5, 5, 3, 5, 3, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage26 = c(4, 2, 5, 5, 5, 1, 5, 4, 3, 5, 5, 5, 5, 5, 5, 4, 4, 5, 5, 2, 2, 2, 4, 5, 4, 4, 3, 5, 5, 5, 5, 5, 3, 5, 3, 5, 5, 3, 3, 3, 2, 3, 3, 4, 4, 5, 2, 5, 3, 4, 5, 4, 3, 3, 4, 4, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), Frage27 = c(2, 5, 2, 4, 4, 4, 3, 1, 3, 5, 5, 5, 5, 4, 3, 4, 2, 2, 3, 3, 2, 2, 3, 4, 3, 5, 5, 4, 5, 3, 1, 3, 1, 2, 2, 4, 5, 4, 4, 3, 5, 4, 3, 4, 5, 5, 3, 5, 3, 4, 5, 4, 3, 5, 4, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5)), .Names = c("Frage1", "Frage2", "Frage3", "Frage4", "Frage5", "Frage6", "Frage7", "Frage8", "Frage9", "Frage10", "Frage11", "Frage12", "Frage13", "Frage14", "Frage15", "Frage16", "Frage17", "Frage18", "Frage19", "Frage20", "Frage21", "Frage22", "Frage23", "Frage24", "Frage25", "Frage26", "Frage27"), row.names = c(NA, 122L), class = "data.frame", na.action = structure(123:231, .Names = c("38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "158", "159", "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221"), class = "omit"))
Beispiel 10
[Bearbeiten]In einer Untersuchung wurde bei Kinder (Self) und deren Eltern (Proxy) bestimmte Werte über die Kinder abgefragt. Die Kinder schätzten sich also zunächst selber ein, anschließend haben die Eltern ihre Kinder eingeschätzt. Zusätzlich existieren zu jedem Item Normwerte (Norm), die den deutschen Durchschnitt widerspiegeln.
bsp10 <- structure(list(Case = c("1", "1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3", "3", "3", "6", "6", "6", "6", "6", "6", "8", "8", "8", "8", "8", "8", "87", "87", "87", "87", "87", "87", "97", "97", "97", "97", "97", "97", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "4", "4", "4", "4", "4", "4", "5", "5", "5", "5", "5", "5", "6", "6", "6", "6", "6", "6", "8", "8", "8", "8", "8", "8", "87", "87", "87", "87", "87", "87", "97", "97", "97", "97", "97", "97", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm", "Norm"), Item = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Item", "Body", "Emotion", "Family", "Friends", "School", "Index"), class = "factor"), Score = c(73.201612015845, 59.5103286592648, 51.211152156733, 57.8338409160427, 62.8406196084782, 59.8493862271105, 64.2956371038732, 43.2100676781528, 45.2472845564316, 53.2323487558682, 48.0853674487552, 59.8493862271105, 47.0820037411972, 50.611904867224, 38.3277278491481, 33.7624512920086, 42.9406488823006, 44.4784623272101, 49.6265680017606, 37.86511552469, 46.5337891235228, 57.8338409160427, 34.8124918251294, 42.2729427242036, 55.6028554137324, 44.7951224546969, 53.2511808274062, 49.7945287460269, 51.0750344123124, 48.2897549745108, 64.2956371038732, 46.5276241871987, 49.4651816728235, 46.928570478635, 51.0750344123124, 48.2897549745108, 64.2956371038732, 43.2100676781528, 47.9305655106504, 49.7945287460269, 54.4010389092698, 53.1070741073933, 52.679424728785, 40.0684105152636, 59.0810578447264, 9.28427673577973, 41.2400158442848, 40.2047327317923, 49.5401073855047, 44.2682553036083, 56.0092601714117, 9.28427673577973, 41.2400158442848, 41.7118474878159, 71.2257238675, 63.0762558775002, 49.1044321652144, 59.6677528939964, 63.6827432674325, 66.246501340745, 59.3808825999571, 49.3745883304313, 45.4684267559846, 52.5916164348338, 55.4046058734162, 52.6531091581688, 43.6611274898783, 34.6555670768689, 43.7937149049355, 59.6677528939964, 32.9468364077597, 34.7243154371611, 34.770256416197, 40.0684105152636, 53.4121134505333, 34.1372899040197, 51.4234786227506, 41.7118474878159, 55.8940393515167, 38.1771760608847, 42.1816928023213, 52.5916164348338, 47.6930520805652, 38.7563367324969, 49.5401073855047, 44.2682553036083, 42.1816928023213, 45.9407404477103, 35.348549195, 38.7563367324969, 75.22, 81.23, 79.16, 78.54, 72.52, 77.73, 74.36, 78.52, 79.77, 70.39, 72.07, 77.14), Number = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("First", "Norm"), class = "factor"), Proxy = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Proxy", "Self", "SelfNorm", "ProxyNorm" ), class = "factor")), .Names = c("Case", "Item", "Score", "Number", "Proxy"), row.names = 2:103, class = "data.frame")1>
Grafikbeispiele
[Bearbeiten]Die hier verwendeten Grafiken stammen von Benutzer Thire und sollen die Themen des Kapitels GNU R: Diagramme veranschaulichen.
Grafikbeispiel 1
[Bearbeiten]Quelltext:
class=c(0,18.5,25,30,35,40,100) cols=c("skyblue4","darkgreen","yellow","orange","red","darkred","black") gr=seq(1.4,2.2,length=100) bmi.k<-function(groesse,konstant) { return(groesse^2*konstant) } png(filename="BodyMassIndex.png", width=1024, height=768, pointsize=12) par(bg="whitesmoke") plot(gr,bmi.k(gr,18),type="n",xlim=c(1.60,1.99),ylim=c(40,125),xaxt="n",yaxt="n",cex.axis=1.4,cex.lab=1.3,cex.main=1.7,xlab="Größe [in m]",ylab="Gewicht [in kg]", main="Body Mass Index") polygon(c(gr,rev(gr)),c(bmi.k(gr,class[1]),rev(bmi.k(gr,class[2]))),col=cols[1]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[2]),rev(bmi.k(gr,class[3]))),col=cols[2]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[3]),rev(bmi.k(gr,class[4]))),col=cols[3]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[4]),rev(bmi.k(gr,class[5]))),col=cols[4]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[5]),rev(bmi.k(gr,class[6]))),col=cols[5]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[6]),rev(bmi.k(gr,class[7]))),col=cols[6]) polygon(c(gr,rev(gr)),c(bmi.k(gr,class[7]),rev(bmi.k(gr,class[8]))),col=cols[7]) box() grid(lty="dotdash",col="darkgrey") abline(v=seq(1.65,1.95,by=0.1),h=seq(50,110,by=20),lty="dotted",col="grey") legend(x="bottomright",inset=0.005,legend=c("Untergewicht","Normalgewicht","Präadipositas","Adipositas Grad I","Adipositas Grad II","Adipositas Grad III"),col=cols,lwd=6,bg="skyblue") axis(1,at=format(seq(1.60,2,by=0.1),nsmall=2),labels=format(seq(1.60,2,by=0.1),nsmall=2),cex.axis=1.5) axis(1,at=seq(1.65,2,by=0.1),cex.axis=1.2,col.axis="grey") axis(2,at=seq(40,120,by=10),cex.axis=1.5) dev.off()
Grafikbeispiel 2
[Bearbeiten]Quelltext:
parliament<-function(x, labels=names(x), edges=5000, col=rainbow(length(x)), rad.in=0.25, ...) { plot(c(-1,1), c(0,1), type="n", axes=FALSE, xlab="", ylab="", ...) y=c(0,pi*cumsum(x)/sum(x)) ang=seq(0,pi,length=edges) for (aktiv in 1:(length(y)-1)) { poly=ang[ y[aktiv]<=ang & ang<=y[aktiv+1] ] polygon(c(cos(poly),0), c(sin(poly),0),col=col[aktiv],border=col[aktiv]) text( (cos(y[aktiv])+cos(y[aktiv+1])+rad.in*cos(y[aktiv])+rad.in*cos(y[aktiv+1]))/4, (sin(y[aktiv])+sin(y[aktiv+1])+rad.in*sin(y[aktiv])+rad.in*sin(y[aktiv+1]))/4, col="white", labels=paste(labels[aktiv], "\n" ,x[aktiv]), cex=1.2, adj=c(0.5,0.5)) } polygon(rad.in*cos(ang),rad.in*sin(ang),col=par("bg"),border=par("bg")) } x<-c(21,66,7,68,21) names(x)<-c("FPÖ", "ÖVP", "BZÖ", "SPÖ", "Grüne") png(filename="Mandate2006.png", width=1300, height=850, pointsize=12) par(bg="whitesmoke") parliament(x, col=c("#126ca8", "black", "#ec921a", "red", "#61bb46"), main="Nationalratswahl 2006 - Mandatsverteilung", cex.main=1.7) dev.off()
Grafikbeispiel 3
[Bearbeiten]Quelltext:
qs=c(0,0.5,0.75,0.9,0.95,0.99) cs=heat.colors(length(qs)) qplot<-function(qs,x,pdf,cdf,pfl) { plot(x,pdf,type="n",ylim=range(pdf,0)*1.25,xlab="",ylab="") for (q in 1:(length(qs)-1)) { xd= x[(cdf>=qs[q])&(cdf<=qs[q+1])] yd= pdf[(cdf>=qs[q])&(cdf<=qs[q+1])] polygon(c(xd,xd[length(xd)],xd[1]),c(yd,0,0),col=cs[q],border=cs[q]) lines(c(xd[length(xd)],xd[length(xd)]),c(max(pdf)*1.1-0.01,max(pdf)*1.1+0.01),col=cs[q],lwd=3) arrows(xd[length(xd)]-pfl,max(pdf)*1.1,xd[length(xd)],max(pdf)*1.1,lwd=2,length=0.15) text(xd[length(xd)],max(pdf)*1.15,paste("q(",format(qs[q+1]*100),"%)=",format(xd[length(xd)],digits=1,nsmall=1,decimal.mark=","),sep=""),col=cs[q],cex=1.5,adj=c(1,0)) } } png(filename = "Quantile_graph.png", width=1500, height=1000, pointsize=12) par(mfrow=c(2,1),bg="whitesmoke") ## normalverteilung x=seq(-0.6,2.3,by=0.0001) pdf=dnorm(x=x) cdf=pnorm(q=x) qplot(qs,x,pdf,cdf,0.35) title(main="Quantile der Normalverteilung") ## chi-quadrat verteilung df=3 x=seq(0,11.3,length=10000) pdf=dchisq(x=x,df=df) cdf=pchisq(q=x,df=df) qplot(qs,x,pdf,cdf,1.3) title(main="Quantile der chi-Quadrat Verteilung") dev.off()
Grafikbeispiel 4
[Bearbeiten]Quelltext:
#value at risk graph quant=0.10 min=-1.7 max=2.6 mean=2.1 s=seq(min,max,length=10000) d=dnorm(s,mean=mean) q=qnorm(quant,mean=mean) sq=c(s[s<q],q,min) dq=c(d[s<q],0,0) png(filename = "VaR_graph.png", width=1300, height=800, pointsize=12) par(bg="whitesmoke") plot(s,d,type="n",xlab="Portfoliowert [in Mio. EUR]",ylab="Wahrscheinlichkeit",main="Value at Risk",xlim=range(s)*0.935) abline(h=0,col="grey") polygon(x=c(s,max,min),y=c(d,0,0),col="snow3") polygon(x=sq,y=dq,col="skyblue") text(x=(q-min)*0.93+min,y=dnorm(q,mean=mean)*0.3,label=paste(format(100*quant),"%",sep=""),col="blue",cex=1.7) lines(x=c(q,q),y=c(0,dnorm(q,mean=mean)*1.35),col="red",lwd=3) text(x=(q-min)*0.9+min,y=dnorm(q,mean=mean)*1.4,label=paste("VaR=",format(q, digits=2)," Mio EUR",sep=""),col="red",cex=1.6) lines(x=c(mean,mean)*0.9,y=c(0,dnorm(mean,mean=mean)*0.95),col="darkgrey",lwd=2) text(x=mean*0.87,y=dnorm(mean*0.9,mean=mean)*0.66,label=paste("Portfoliowert heute: ",mean*0.9," Mio EUR",sep=""),col="black",srt=90) dev.off()
Grafikbeispiel 5
[Bearbeiten]Verwendet werden die Daten aus Beispiel 10.
Der Befehl zum Erzeugen der Grafik lautet:
library(lattice) # Lädt das lattice-Grafikpaket
colors <- c("skyblue4", "blue", "darkgreen","#61bb46") # Farben für Werte und Labels key.list <- list(space = "right", # Legende Ausrichtung title="Assessed", cex.title=1.2, # Legendenüberschrift und Größe points=list(pch=c(0,15,3,8), col=colors, cex=1), # Legendensymbole text=list(levels(bsp10$Proxy), cex=1, font=1), # Legende mit Schriftgröße und -art col=colors) # LegendenSchriftfarbe grafik <- dotplot(Item ~ Score | Case , groups=Proxy, data=bsp10, layout = c(3,4), # Diagramme werden in 3 Spalten und 4 Reihen aufgeteilt key = key.list, # Verwende die Daten aus dem Objekt "key.list" xlab = list(label="Score (T-Rasch)", cex=1.5, font=2), # Label für X-Achse, Schriftgröße, fett ylab = list(label="Dimensions", cex=1.5, font=2), # Label für Y-Achse, Schriftgröße, fett, main= list(label="Each kid: first measure self and proxy", cex=2,5), # Überschrift #sub = list(label="Kinder: alle Erst- und Zweiterhebungen", cex=1, font=3), scales = list(cex=1.2, ces=2), # Achsenbeschriftung (Schriftgröße) between = list(x=0.5, y=0.5), # Abstand zwischen den Diagrammen cex = 1, # Größe der Symbole pch=c(0,15,3,8), col=colors) # Symbolart der Werte und deren Farbe update(grafik, panel = function(...){panel.grid(h=-1,v=-20) # Gitter hinzufügen panel.dotplot(...) })
rm(colors,key.list,grafik)
siehe auch
[Bearbeiten]
Befehle-Index
[Bearbeiten]Auf dieser Seite sollen alle R-Befehle alphabetisch gesammelt werden.
A
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
acf(x)
|
acf(x) errechnet die Autokorrelation der Daten mit verschiedenen Intervallen und erstellt eine entsprechende Grafik.
|
all(x)
|
all(x) fragt ab, ob das Objekt x nur den Wahrheitswert TRUE enthält.
|
any(x)
|
any(x) fragt ab, ob das Objekt x mindestens einmal den Wahrheitswert TRUE enthält.
|
apply(x)
|
apply(x,col,func) wendet auf die Spalten col eines Arrays x die Funktion func an.
|
apropos()
|
apropos() sucht einen Ausdruck in der Liste der Funktionen und Vektorvariablen.
|
as.factor(x)
|
as.factor(x) wandelt das Objekt x in einen Faktor um.
|
as.matrix(x)
|
as.matrix(x) wandelt das Objekt x in eine Matrix um. Parametrische Schätzungen benötigen zur weiteren Berechnung eine Matrix.
|
attach(x)
|
attach(x) nimmt das Objekt x in den Suchpfad auf.
|
available.packages()
|
available.packages() zeigt alle verfügbaren Zusatzpakete (eines Servers) an.
|
B
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
barplot()
|
barplot() erstellt Säulendiagramme.
|
blockrand()
|
blockrand() (aus dem gleichnamigen Zusatzpaket) erzeugt Block-Randomisierungen für Clinical Trials.
|
boxplot()
|
boxplot() erstellt ein Boxplot der Daten.
|
by()
|
by(mydata, mydatat$byvar, mean(x)) erzeugt eine Datensauswertung (hier mean(x)) getrennt für jede Stufe der in byvar genannten Variablen.
|
C
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
c
|
concatenate (abgekürzt mit c ) bedeutet "aneinanderhängen". So lassen sich Zahlen- oder Buchstabenreihen einem Vektor zuordnen, z.B.:mein.vector <- c(2,4,5,6)
|
cat()
|
mit cat(a,b,c) werden die Elemente a, b und c zusammengeführt und in Zeichenketten konvertiert.
|
cbind()
|
mit cbind(a,b,c) lassen sich die Vektoren a, b und c spaltenweise zu einer Matrix zusammenführen (siehe auch rbind() )
|
ceiling(x)
|
ceiling(x) rundet alle Werte im Objekt x auf ganze Zahlen auf (siehe auch floor() zum abrunden).
|
chisq.test(x)
|
chisq.test(x) führt den Chi-Quadrat-Test auf das Objekt x aus.
|
chooseCRANmirror()
|
Mit chooseCRANmirror() wird ein CRAN-Mirror für die bestehende Session ausgewählt.
|
class()
|
class()
|
colnames()
|
colnames() weist den Spalten einer Matrix einen "Namen" (Label) zu. Siehe rownames() für Reihen)
|
colors()
|
colors() zeigt eine Übersicht aller Farben an, die derzeit verfügbar sind.
|
comment()
|
comment() weist einem Objekt einen Kommentar (Label) zu
|
cor(a,b)
|
cor(a,b) errechnet Korrelationkoeffizienten zwischen a und b .
|
cor.test(a,b)
|
cor.test(a,b) errechnet Korrelationkoeffizienten samt Signifikanzniveau und Konfidenzintervallen.
|
curve(FUN(x), ...)
|
curve(FUN(x),...) zeichnet eine Kurve. Siehe auch GNU R: plot.
|
D
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
data()
|
data() aktiviert einen Datensatz (z.B. aus einem Zusatzpaket) bzw. listet verfügbare Datensätze auf.
|
data.entry(x)
|
data.entry(x) öffnet den Daten-Editor und ermöglicht so die Bearbeitung der Daten (hinzufügen/löschen/editieren) des Objekts x .
|
data.frame(a,b,c)
|
data.frame(a,b,c) führt die Objekte a, b, c zu einem Datenframe zusammen.
|
deparse(x)
|
deparse(x) gibt einen dem Ausdruck oder Objekt x entsprechenden String zurück. Damit lassen sich z.B. die internen Repräsentationen von Datenobjekten ausgeben und bearbeiten/weiterverwenden.
|
detach(x)
|
detach(x) löscht das Datenframe x aus dem Suchpfad bzw. deaktiviert eingebundene Zusatzpakete.
|
devSVG()
|
devSVG() speichert eine Grafik als SVG-Datei ab. Dazu ist jedoch das Zusatzpaket RSvgDevice erforderlich.
|
dim(x)
|
Mit dim(x) wird die Anzahl der Dimensionen (Anzahl der Spalten und Anzahl der Zeilen) der Matrix x ermittelt.
|
dimnames(x)
|
Mit dimnames(x) werden den Dimensionen (Spalten/Zeilen) der Matrix x "Namen" (Labels) zugeordnet.
|
dir()
|
dir() ist ein Alias zu list.files() und zeigt die Dateien des aktuellen Arbeitsverzeichnises an.
|
dotchart(x)
|
dotchart(x) erstellt Punktediagramme.
|
duplicated(data)
|
duplicated(data) überprüft den Datensatz data auf doppelte bzw. mehrfach eingetragene Fälle (Duplikate) und gibt TRUE/FALSE-Werte für jeden Eintrag zurück (siehe auch unique() ).
|
E
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
edit(x)
|
edit(x) ruft das Objekt x in einem externen Editor zur Bearbeitung auf (siehe auch fix(x) ).
|
exp(x)
|
exp(x) gibt die Exponentinalfunktion für die in x enthaltenen Werte.
|
F
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
factanal(x)
|
factanal(x) führt eine Haupt- und Maximum-Likelihood-Faktorenanalyse auf das Objekt x durch (siehe auch princomp(x) ).
|
factor()
|
factor() erzeugt ein Faktor-Objekt.
|
fisher.test(x)
|
fisher.test(x) führt den exakten Test nach Fisher für das Objekt x durch.
|
fix(x)
|
fix(x) ruft das Objekt x in einem graphischen Editor auf. So lassen sich Daten korrigieren, editieren und erweitern (siehe auch edit(x) für externen Editor).
|
floor(x)
|
floor(x) rundet alle Werte im Objekt x auf ganze Zahlen ab (siehe auch ceiling(x) zum aufrunden).
|
forestplot
|
forestplot (aus dem Zusatzpaket "rmeta") erzeugt ein so genanntes "Forest Plot" zusammen mit einer Texttabelle. (siehe auch metaplot )
|
G
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
gcd(x,y)
|
gcd(x,y) (aus dem schoolmath -Paket) berechnet den größten gemeinsamen Teiler der Zahlen x und y.
|
getwd()
|
getwd() gibt das aktuelle Arbeitsverzeichnis aus.
|
ggplot()
|
ggplot() aus dem Paket ggplot2 stellt eine Alternative zur Standard-plot()-Funktion dar.
|
glm()
|
glm() ist die Hauptfunktion für generalized linear models (inkl. logistische Regressionsanalyse).
|
graphics.off()
|
Mit graphics.off() werden alle Graphikfenster geschlossen.
|
grep(TEXT, x)
|
grep(TEXT, x) untersucht, ob der Text TEXT im Objekt x enthalten ist.
|
gsub
|
Mit gsub("Muster","Ersetzung",Objekt) lassen sich Zeichenketten (mehrfach) in einem Objekt ersetzen.
|
H
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
head()
|
Mit dem Befehl head(DATA, n) lassen sich die ersten n Datenreihen des Datensatzes DATA anzeigen. Der Befehl tail() liefert hingegen die letzten n Datenreihen.
|
help() / ?
|
help() bzw. ? zeigt die R-interne Dokumentation zu einem Befehl an.
|
help.start()
|
help.start() öffnet den Standardbrowser mit den Links zu den R-Manualen.
|
hist()
|
hist() erstellt ein Histogramm der Daten.
|
history()
|
history() gibt die letzten Befehle in ein separates Fenster aus.
|
I
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
identical(x, y)
|
identical(x, y) überprüft, ob die Objekte x und y identisch sind. Als Antwort wird TRUE/FALSE augegeben.
|
install.packages(mypkg)
|
install.packages(mypkg) installiert das Zusatzpaket mypkg
|
intersect(x, y)
|
intersect(x, y) gibt die gemeinsamen Elemente (Schnittmenge) beider Vektoren x und y als neuen Vektor aus.
|
is.character(x)
|
is.character(x) überprüft, ob das Objekt x vom Typ character ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.element(x, y)
|
is.element(x, y) überprüft, ob das Objekt x im Objekt y enthalten ist.
|
is.factor(x)
|
is.factor(x) überprüft, ob das Objekt x vom Typ factor ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.logical(x)
|
is.logical(x) fragt die logical-Eigenschaft des Objekts x ab. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.matrix(x)
|
is.matrix(x) überprüft, ob das Objekt x eine Matrix ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.na(x)
|
is.na(x) überprüft, ob ein Objekt x ein Element NA ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.numeric(x)
|
is.numeric(x) überprüft, ob das Objekt x numerisch ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
is.prim(x)
|
is.prim(x) (aus dem schoolmath -Paket) überprüft, ob die Zahl x eine Primzahl ist.
|
is.vector(x)
|
is.vector(x) überprüft, ob das Objekt x ein Vector ist. Als Antwort wird TRUE/FALSE ausgegeben.
|
ISOdate()
|
ISOdate(Jahr,Monat,Tag,Stunde,Minute,Sekunde) kann zur einfachen Definition eines Datum-Objekts verwendet werden.
|
J
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
jpeg()
|
Mit Hilfe von jpeg() können Graphiken in eine .jpeg-Datei gespeichert werden. Für das png-Format steht der Befehl png() zur Verfügung.
|
K
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
ks.test()
|
ks.test() führt den Kolmogorov-Smirnov-Test durch.
|
L
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
lapply(x,func)
|
lapply ermöglicht es, dieselbe Funktion func auf eine Liste x von Objekten anzuwenden. lapply ist damit eine (i.d.R. bessere) Alternative zur Benutzung von Schleifen/Loop-Konstruktionen.
|
legend(x)
|
Mit legend(x) wird eine Legende für x einer Grafik zugefügt.
|
length(x)
|
Mit length(x) wird die Anzahl der Elemente von x ermittelt.
|
level(x)
|
Mit level(x) werden die Level x zurückgegeben. Dabei kann x ein Vector oder z.B. eine Spalte eines data.frame sein.
|
library()
|
library() gibt eine Liste aller installierten Pakete (packages) aus.
Mit |
lines(x,y)
|
lines(x,y) verbindet mit den Vektoren x und y übergebene Punktkoordinaten mit Linien.
|
list.files()
|
list.files() zeigt die Dateien des aktuellen Arbeitsverzeichnises an. Alternativ kann auch dir() verwendet werden.
|
load(file)
|
load(file) lädt eine gespeicherte R-Sitzung in den Arbeitsspeicher.
|
loadedNamespaces()
|
loadedNamespaces() liefert eine Liste der aktuellen Namensräume.
|
ls()
|
ls() nennt alle Variablen in der aktuellen R-Sitzung (genau so wie objects() ).
|
ls.str()
|
ls.str() listet alle Objekte der aktuellen R-Sitzung mit ihrer Struktur. Es handelt sich also um eine Kombination von ls() und str() .
|
M
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
map()
|
map() (aus den Paketen "maps" und "mapdata") erstellt Karten von Ländern, Kontinenten und der Welt.
|
match()
|
match(v,s) durchsucht einen Vektor B, nach Übereinstimmungen in einem Suchvektor s .
|
matrix(a,b,c)
|
matrix(a,b,c) führt die Objekte a, b, c zu einer Matrix zusammen.
|
mean(x)
|
mean(x) bestimmt das arithmetische Mittel eines Zahlenvektors x .
|
median(x)
|
median(x) bestimmt den Median eines Zahlenvektors x .
|
merge(x, y, ...)
|
merge(x, y, ...) fügt zwei Tabellen anhand einer übereinstimmenden Spalte zusammen
|
metaplot
|
metaplot erzeugt ein so genanntes "Forest Plot" (Meta-Analyse-Plot), welches im Rahmen von Metaanalysen gängig ist. (siehe auch forestplot )
|
mode(x)
|
mode(x) überprüft, von welchem Typ das Objekt x ist. Als Antwort wird entsprechend character, numeric ausgegeben.
|
N
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
na.omit(x)
|
na.omit(x) filtert (für Berechnungen) die fehlenden Werte (missing data, NA ) aus dem Objekt x heraus.
|
names(x)
|
names(x) gibt die Variablennamen des Data-Frames x an.
|
nchar(x)
|
nchar(x) gibt Anzahl der Buchstaben in x an.
|
ncol(x)
|
ncol(x) gibt Anzahl der Spalten in x an.
|
nrow(x)
|
nrow(x) gibt Anzahl der Zeilen in x an.
|
O
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
objects()
|
objects() nennt alle Variablen in der aktuellen R-Sitzung (genau so wie ls() ).
|
odfWeave()
|
odfWeave() ersetzt die in Open Office Dokumenten integrierten R-Anweisungen durch die resultierenden Textausgaben, Tabellen und Graphiken.
|
options()
|
options() ermöglicht Abfrage und Setzen globaler Voreinstellungen wie Textausgabeeigenschaften, GraphicDevice, etc.
|
order()
|
Der Befehl order(OBJEKT$x) ordnet den Datensatz OBJEKT anhand des dort enthaltenen metrischen Vektor x in aufsteigender Reihenfolge.
|
P
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
pairs()
|
pair() ist eine Funktion zum Zeichnen einer Scatterplot-Matrix
|
par()
|
par() ist eine Funktion zum Setzen grafischer Parameter
|
package.skeleton()
|
package.skeleton() erstellt automatisch die Grundstruktur für neue (selbstprogrammierte) Zusatzpakete.
|
paste(a,b,c)
|
Mit paste(a,b,c) können beliebig viele Argumente (a, b, c, "beliebig") ausgeprintet werden.
|
pdf()
|
Mit Hilfe von pdf() können Graphiken im weit verbreiteten .pdf-Format gespeichert werden.
|
persp()
|
Mit persp() können dreidimensionalen Abbildungen erstellt werden.
|
pie()
|
Mit pie() können Kreisdiagramme erstellt werden.
|
plot(x,y)
|
plot(x,y) ist die universelle Funktion zur Erzeugung von Streudiagrammen und Linienzügen aus den Vektoren x und y.
|
png()
|
Mit Hilfe von png() können Graphiken in eine .png-Datei gespeichert werden. Für das jpeg-Format steht der Befehl jpeg() zur Verfügung.
|
polygon(x,y)
|
Mit der Grafikfunktion polygon(x,y) können Grafiken mit beliebigen geschlossenen Linienzügen erweitert werden.
|
postscript()
|
postscript() speichert die Grafikausgabe in eine Postscript-Datei.
|
prime.factor(x)
|
prime.factor(x) (aus dem schoolmath -Paket) zerlegt die Zahl x in ihre Primfaktoren.
|
primes(x,y)
|
primes(x,y) (aus dem schoolmath -Paket) zeigt die Primzahlen an, welche sich zwischen x und y befinden.
|
print
|
print(x) gibt das Objekt x entsprechend seiner definierten Methode auf dem Bildschirm/das Standardgerät aus.
|
princomp(x)
|
princomp(x) führt eine Hauptkomponentenanalyse auf das Objekt x durch (siehe auch factanal(x) ).
|
Q
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
quit() / q()
|
quit() bzw. q() beendet R.
|
R
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
rbind()
|
mit rbind(a,b,c) lassen sich die Vektoren a, b und c reihenweise zu einer Matrix zusammenführen (siehe auch cbind() )
|
read.csv(file)
|
read.csv(file) liest eine ASCII-Datei file , welche im amerikanischen CSV-Format vorliegt, ein.
|
read.csv2(file)
|
read.csv2(file) liest eine ASCII-Datei file , welche im deutschen CSV-Format vorliegt, ein.
|
read.table(file)
|
read.table(file) liest eine Tabelle, welche in der ASCII-Datei file vorliegt, ein.
|
rep(x, n)
|
rep(x, n) gibt n Wiederholungen des Elements x zurück.
|
rev(x)
|
rev(x) dreht die Reihenfolge der Zahlenreihe x um.
|
rm(x)
|
rm(x) löscht das Objekt x aus dem Arbeitsspeicher.
|
rnorm(n)
|
rnorm(n) erzeugt n normalverteilte Zufallszahlen.
|
round(x)
|
round(x) rundet die Zahl x auf oder ab.
|
rownames()
|
rownames() weist den Reihen einer Matrix einen "Namen" (Label) zu. Siehe colnames() für Spalten)
|
rug()
|
rug() stellt einen Balken unter dem Diagramm dar, in dem die Dichte und der Ort der Datenpunkte dargestellt wird.
|
S
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
sample(x)
|
Mit sample(x) kann ein Vektor umgruppiert oder Teilstichproben daraus gezogen werden.
|
sapply(x,func)
|
sapply ermöglicht es, dieselbe Funktion func auf eine Liste x von Objekten anzuwenden, und gibt das Ergebnis als Vektor aus.
|
save()
|
save() speichert ausgewählte Objekte in eine Datei.
|
save.image("file.RData")
|
save.image("file.RData") speichert den aktuellen Arbeitsspeicher.
|
savePlot()
|
savePlot() speichert die aktuelle Grafik in eine Datei.
|
scan()
|
scan() ermöglicht eine manuelle Dateneingabe für einen Vektor.
|
scm(x,y)
|
scm(x,y) (aus dem schoolmath -Paket) berechnet das kleinste gemeinsame Vielfache der Zahlen x und y.
|
search()
|
search() zeigt die Suchliste an, unter anderem auch geladene Bibliotheken.
|
searchpaths()
|
searchpaths() zeigt die Suchliste mit Pfadangaben der geladenen Bibliotheken an.
|
seq()
|
Mit Hilfe von seq(from, to, by) kann eine Datensequenz erstellt werden.
|
setdiff(x, y)
|
setdiff(x, y) gibt die Elemente von x , die nicht in y enthalten sind, als neuen Vektor aus. Funktioniert auch umgekehrt mit setdiff(y, x) .
|
setequal(x, y)
|
setequal(x, y) untersucht beide Vektoren auf Gleichheit und gibt TRUE/FALSE aus.
|
setwd(dir)
|
Mit setwd(dir) kann das Arbeitsverzeichnis geändert werden.
|
shapiro.test(x)
|
shapiro.test(x) führt einen Shapiro-Wilk-Test auf die Zahlenreihe x durch. Hierdurch wird bestimmt, ob die Zahlenreihe x normalverteilt ist.
|
sink()
|
sink() leitet den Konsolen-Output in eine Datei um.
|
sort()
|
Der Befehl sort(x) ordnet den metrischen Vektor x in aufsteigender Reihenfolge (siehe order() zum sortieren eines Datensatzes).
|
source()
|
Mit dem Befehl source() werden R-Skripte geladen und sofort ausgeführt.
|
sqrt(x)
|
sqrt(x) zieht die Quadratwurzel aus der Zahl x.
|
str()
|
str() gibt Auskunft über die Struktur von R-Objekten.
|
strptime()
|
strptime() wandelt Datum- und Zeitangaben in das Format POSIXlt bzw. POSIXct um.
|
strsplit()
|
strsplit() spaltet eine Zeichenkette abhängig vom angegebenen Muster.
|
sub()
|
Mit sub("Muster","Ersetzung",Objekt) lassen sich Zeichenketten in einem Objekt ersetzen.
|
subset()
|
Mit subset() lässt sich eine Teilgruppe von Daten aus einem data.frame bilden.
|
sum()
|
Mit sum() wird die Summe der übergebenen Werte bestimmt.
|
summary()
|
Mit summary() lassen sich das Minimum, das Maximum, das 1. und 3. Quantil sowie Mittelwert und der Median von Verteilungen ausgeben.
|
Sweave()
|
Sweave() ersetzt die in (La)Tex-Dokumenten integrierten R-Anweisungen durch die resultierenden Textausgaben, Tabellen oder generiert Graphiken und bindet diese automatisch in die Tex-Datei ein.
|
Sys.time()
|
Sys.time() liefert das aktuelle Datum und die aktuelle Uhrzeit im Format POSIXlt bzw. POSIXct
|
T
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
t.test()
|
t.test() führt einen t-Test (und bei Bedarf einen Welch-Test) durch.
|
table()
|
Mit table() werden Häufigkeitstabellen erstellt.
|
tail()
|
Mit dem Befehl tail(DATA, n) lassen sich die letzten n Datenreihen des Datensatzes DATA anzeigen. Der Befehl head() liefert hingegen die ersten n Datenreihen.
|
tan(x)
|
tan(x) berechnet den Tangens von x .
|
title()
|
title() ermöglicht das (nachträgliche) Beschriften von Grafiken.
|
tolower(x)
|
tolower(x) wandelt den String x in Kleinbuchstaben um.
|
toupper(x)
|
toupper(x) wandelt den String x in Großbuchstaben um.
|
U
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
union(x, y)
|
union(x, y) vereinigt die Werte des Vektors x mit den Werten des Vektors y , die nicht bereits in x enthalten sind. Umgekehrt funktioniert auch union(y, x) .
|
unique()
|
unique(data) überprüft den Datensatz data auf doppelte bzw. mehrfache Einträge und liefert den Datensatz ohne Duplikate zurück (siehe auch duplicated() ).
|
unlink()
|
unlink() löscht eine Datei oder ein Verzeichnis
|
update(x)
|
update(x) erweitert das bestehende Modell x.
|
update.packages()
|
update.packages() aktualisiert die geladenen R-Basis- und Zusatzpakete.
|
V
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
var(x,y)
|
var(x,y) berechnet die Varianz oder Kovarianz der Variable x bzw. der Variablen x und y .
|
var.test(x,y)
|
var.test(x,y) führt einen Varianzquotienten-Test (F-Test) durch.
|
W
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
which()
|
Die Funktion which() gibt an, welche Indizes eines Objektes den Wert "TRUE" besitzen.
|
wilcox.test(x,y)
|
wilcox.test(x,y) führt je nach Optionsgabe den Wilcoxon-Test oder den Mann-Whitney-Test für x und y durch.
|
wilcox_test(x,y)
|
wilcox_test(x,y) (aus dem coin -Package) führt den Mann-Whitney-Test durch.
|
write()
|
write() schreibt Daten in eine Datei.
|
write.table()
|
write() schreibt einen Data Table in eine Datei.
|
X
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
x11()
|
x11() öffnet ein Grafikfenster per X11.
|
xtabs()
|
xtabs() dient dazu Kreuztabellen zu erstellen.
|
Y
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
Z
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
Befehl | Kurzbeschreibung |
Lösung der Übungsaufgaben
[Bearbeiten]Umgang mit Datensätzen (Erstellen, Auswählen und Filtern)
[Bearbeiten]1. Lassen Sie sich die zweite und fünfte Zeile von meinedaten ausgeben.
meinedaten[c(2,5),] Name Geschlecht Lieblingsfarbe Einkommen 2 Caro weiblich blau 800 5 Samira weiblich gelb 899
2.Lassen Sie nur die Namen der Personen ausgeben, deren Lieblingsfarbe "gelb" ist.
Gesucht sind die Fälle, deren Lieblingsfarbe "gelb" ist. Die Namen stehen in der 1. Spalte:
> meinedaten[meinedaten$Lieblingsfarbe=="gelb",1] [1] "Lars" "Samira"
zum selben Ergebnis führt:
> meinedaten[meinedaten$Lieblingsfarbe=="gelb","Name"] [1] "Lars" "Samira"
3. Welchen Namen und welches Geschlecht hat die Person mit dem niedrigsten Einkommen? (Benutzen sie hierzu die Funktion rank(variable), die für eine gegebene Variable den Rang in einer aufsteigend geordneten Liste liefert.)
Gesucht ist also der Fall, dessen Einkommen in einer geordneten Liste den ersten Rang hat. Hier interessieren uns nur die Spalten/Variablen "Name" und "Geschlecht":
meinedaten[rank(meinedaten$Einkommen)==1,c("Name","Geschlecht")] Name Geschlecht 2 Caro weiblich
Cross-Reference für SPSS-Benutzer
[Bearbeiten]Auf dieser Seite sollen SPSS-Umsteigern durch bekannte Begriffe und Befehle auf die entsprechenden R-Befehle verwiesen werden.
Fehlen wichtige SPSS-Befehle oder Lösungen für Probleme? Stellen Sie Ihre Frage auf der Diskussionsseite.
A
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
B
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
C
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
|
|
|
|
D
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
E
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
F
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
|
|
|
|
G
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
H
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
I
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
J
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
K
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
L
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
M
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
N
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
O
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
P
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
Q
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
R
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
Recodierung
|
|
S
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
T
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
|
|
U
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
V
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
|
|
W
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
|
|
X
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
Y
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
Z
[Bearbeiten]A - B - C - D - E - F - G - H - I - J - K - L - M - N - O - P - Q - R - S - T - U - V - W - X - Y - Z
|
|
Programmierbeispiele
[Bearbeiten]Diese Seite sammelt die Programmierbeispiele für das Kapitel Programmieren mit R.
Warnung! | |
Grundsätzlich sollten in R Skripte nicht ungeprüft verwendet werden, da R-Skripte u.U. zum Starten von Angriffen gegen den eigenen oder fremde Rechner verwendet werden können. Dies gilt für dieses Buch im Besonderen, da auf Wikibooks alle Artikel und somit auch die Skripte frei editierbar sind. |
Beispiel 1: Abschlussnote
[Bearbeiten]Eine (gedachte) Abschlussnote ergibt sich aus 3 Teilnoten. Hierbei fliessen die ersten 2 Noten zu 30% - und die dritte Note zu 40% in die Abschlussnote ein. Wir programmieren uns also eine nette kleine Funktion, die uns die Abschlussnote aus den Teilnoten errechnet.
Abschlussnote <- function(x,y,z){ x.note <- (x/100)*30 y.note <- (y/100)*30 z.note <- (z/100)*40 abschluss <- x.note + y.note + z.note cat ("Abschlussnote:", abschluss, "\n") }
Wir können die Funktion nun aufrufen per: Abschlussnote(x, y, z)
, wobei x, y, z durch die jeweiligen Teilnoten ersetzt werden, z.B. so:
Abschlussnote(1.1, 1.7, 1.5)
Wir erhalten:
Abschlussnote: 1.44
Beispiel 2: Cut-Off-Points
[Bearbeiten]Bestimmung des Cut-Off-Points eines Assessmentinstruments anhand von Sensitivität und Spezifität.
Übergeben werden muss der Funktion:
- ein Vektor x, welcher die einzelnen Summenwerte (des Assessmentinstruments) enthält
- ein Vektor y, welcher für den entsprechenden Summenwert angibt, ob ein Risiko vorliegt (bzw. Ereignis eintraf) oder nicht (z.B. "0 und 1" oder "j und n").
- der Parameter
risk
, welcher angibt, wodurch die positive Gruppe im Vektor y repräsentiert wird (s.o., z.B. "0 oder 1" bzw. "j oder n") - der Parameter
dir
, welcher anzeigt- ob ein höherer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
dir="GREATER"
) - ob ein niedrigerer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
dir="LESS"
)
- ob ein höherer Summenwert (x) die Chance zur positiven Gruppenzugehörigkeit erhöht (
- der Parameter
plot
, welcher perTRUE / FALSE
angibt, ob eine Graphik ausgegeben werden soll, oder nicht.
sens.spec <- function(x,y, risk=1, dir="LESS", plot=F) { frame <- data.frame(x,y) var.min <- min(na.omit(x)) # welches ist der niedrigste Wert? var.max <- max(na.omit(x)) # welches ist der höchste Wert? dummy <- var.min cat("\r") cat("Minimum of value: ", var.min, "\r") cat("Maximum of value: ", var.max, "\r", "\r") cat("Risk is coded with: ", risk, "\r") if (tolower(dir) %in% c("greater", "g")) { cat("greater value means higher risk", "\r", "\r") } if (tolower(dir) %in% c("less","l")) { cat("lesser value means higher risk", "\r", "\r") } sesp.table <- cbind(999, 999, 999, 999, 999, 999, 999) # dient der Indizierung, wird später gelöscht (s.u.) while(dummy <= var.max) { ### true/false positive/negative if (tolower(dir) %in% c("less","l")) { tp <- length(frame$x[frame$x<=dummy & frame$y==risk]) # true positive fp <- length(frame$x[frame$x<=dummy & frame$y!=risk]) # false positive tn <- length(frame$x[frame$x>dummy & frame$y!=risk]) # true negative fn <- length(frame$x[frame$x>dummy & frame$y==risk]) # false negative } if (tolower(dir) %in% c("greater", "g")) { tp <- length(frame$x[frame$x>=dummy & frame$y==risk]) # true positive fp <- length(frame$x[frame$x>=dummy & frame$y!=risk]) # false positive tn <- length(frame$x[frame$x<dummy & frame$y!=risk]) # true negative fn <- length(frame$x[frame$x<dummy & frame$y==risk]) # false negative } sensi <- round((tp / (tp+fn)),digits=3) # Sensitivität speci <- round((tn / (tn+fp)),digits=3) # Spezifität sesp.table <- rbind(sesp.table, c(dummy, sensi, speci, tp,fp,tn,fn)) dummy <- (dummy+1) } colnames(sesp.table) <- c("Value", "Sensitivy", "Specificy", "tp", "fp", "tn", "fn") sesp.table <- sesp.table[-1,] # hier werden die "999" gelöscht if (plot==T) { plot.table <- cbind(sesp.table[,2], sesp.table[,3]) plot(plot.table) } if (plot==F) { print(sesp.table) cat("\r") cat("Cut-Off-Points include positive cases", "\r") cat("\r") } } sens.spec(x, y) # Aufruf der Funktion
Beispiel 3: Entfernen von Umlauten
[Bearbeiten]Diese Funktion entfernt störende Umlaute
noumlaute <- function(variable) { ## ---------------------------------------------------------------------- ## Funktion entfernt stoerende Umlaute, unten stehende Liste ggf. erweitern ## ---------------------------------------------------------------------- variable <- gsub("ä","ae",variable) variable <- gsub("ü","ue",variable) variable <- gsub("ö","oe",variable) variable <- gsub("Ü","Ue",variable) variable <- gsub("Ä","Ae",variable) variable <- gsub("Ö","Oe",variable) variable <- gsub("ß","ss",variable) return(variable) }
Beispiel 4: Zeit Sampler
[Bearbeiten]Diese Funktion erzeugt eine randomisierte Liste von je einem aller Wochentagen im Monat September.
randay<-function(name1, name2)#name1 und name2 sind nur labels fuer den Output { start.date <- strptime("2008/09/01","%Y/%m/%d") # erzeugt das Startdaum, welches dem ersten Montag im Montag entspricht end.date <- strptime("2008/09/30","%Y/%m/%d") # erzeugt das Enddatum, welches hier immer gleich ist MON <- seq(start.date, end.date, by="7 days") # erzeugt die Sequenz "vom Startdatum bis zum Enddatum, alle 7 Tage" start.date <- strptime("2008/09/02","%Y/%m/%d") # und legt das Ergebnis in einem Object ab. end.date <- strptime("2008/09/30","%Y/%m/%d") TUE <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/03","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") WED <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/04","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") THU <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/05","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") FRI <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/06","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") SAT <- seq(start.date, end.date, by="7 days") start.date <- strptime("2008/09/07","%Y/%m/%d") end.date <- strptime("2008/09/30","%Y/%m/%d") SUN <- seq(start.date, end.date, by="7 days") a <- c(sample(MON,1),sample(TUE,1),sample(WED,1),sample(THU,1),sample(FRI,1),sample(SAT,1),sample(SUN,1)) # Sampling a <- sort(a) cat("Name 1:", name1, "Name 2:", name2, "\n", format(a, "%a %m/%d/%y"), "\n")}
siehe auch
[Bearbeiten]
Beispielskripte
[Bearbeiten]Warnung! | |
Grundsätzlich sollten in R Skripte nicht ungeprüft verwendet werden, da R-Skripte u.U. zum Starten von Angriffen gegen den eigenen oder fremde Rechner verwendet werden können. Dies gilt für dieses Buch im Besonderen, da auf Wikibooks alle Artikel und somit auch die Skripte frei editierbar sind. |
Importieren von SPSS-Datensätzen
[Bearbeiten]Das folgende Skript verdeutlicht den Import von Variable Labels in SPSS, der sich mit read.spss etwas umständlich gestaltet.
## Zweck: Das Skript lädt eine SPSS-Datei incl. Kommentaren ## ---------------------------------------------------------------------- ## Verwendung: Pfad der SPSS-Datei und auszugebenden R-Datei in ## spssfile und rfile definieren und ausführen. Die exportierte R-Datei ## ist dann im angegebenen Verzeichnis verfügbar und kann mit ## load ("/Pfad/zur/Datei/rdatei.r") in SPSS eingebunden werden ## GGf. kann der Datensatzname "a" angepasst werden. ## ---------------------------------------------------------------------- ## Author: euro, Date: 30 May 2007, 21:43 # SPSS-Datei spssfile <- "/Pfad/zur/Datei/spssdatei.sav" # R-datei rfile <- "/Pfad/zur/Datei/rdatei.r" ################################################################################ noumlaute <- function(variable) { ## ---------------------------------------------------------------------- ## Funktion entfernt stoerende Umlaute, unten stehende Liste ggf. erweitern ## ---------------------------------------------------------------------- variable <- gsub("ä","ae",variable) variable <- gsub("ü","ue",variable) variable <- gsub("ö","oe",variable) variable <- gsub("Ü","Ue",variable) variable <- gsub("Ä","Ae",variable) variable <- gsub("Ö","Oe",variable) variable <- gsub("ß","ss",variable) return(variable) } library(foreign) ## Sprachoptionen ## ggf. durch andere zu ersetzen Sys.setlocale(locale="de_DE.ISO8859-15") ## eigentlicher Import a.spss <- (read.spss(spssfile)) a <- as.data.frame(a.spss) ## Übernahme der Kommentare in jede Variable des Datensatz "a" cat( "importing names.") for (i in 1:length(attr(a.spss,"variable.labels"))) { comment(a[,i]) <- noumlaute(attr(a.spss,"variable.labels")[i]) cat (".") } cat (" ready/n") ## Speichern der Datei save(a,file=rfile)
Übersicht programmspezifischer Voreinstellungen
[Bearbeiten]Das wikibooks
-Zusatzpaket
[Bearbeiten]- ↑ Bert Niehaus (2023) data.csv GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: data.csv