Zum Inhalt springen

GNU R/ Druckversion

Aus Wikibooks

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]
  1. Das Setup-Programm im Paket base herunterladen (ca. 23 MB).
  2. Dieses Programm ausführen.
  3. 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]
  1. Shell-Kommando: docker run -e PASSWORD={yourpwd} rocker/rstudio
  2. In einem Browser: localhost:8787
  3. Login: rstudio/{yourpwd}


[Bearbeiten]

Quellen

[Bearbeiten]
  1. http://cran.r-project.org/bin/linux/debian/ Debian GNU R Repository
  2. 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 zwischen integer und double unterschieden werden kann)
  • complex für komplexe Zahlen
  • logical für logische Werte
  • character für Zeichen
  • raw 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 Funktionen
  • call für Funktionsaufrufe
  • expression 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 Typs
  • list für beliebige Listen von Objekten (auch rekursiv)
  • factor für Vektoren zur Gruppierung von Objekten
  • matrix
  • 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:

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

https://www.hdfgroup.org/HDF5

http://cran.r-project.org/web/packages/h5/index.html

https://github.com/mannau/h5

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]
  1. Bert Niehaus (2023) data.csv aus GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: data.csv
  2. 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]):

Datentabelle: studentdata
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.

Datentabelle: studentdata
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

Vektor: index4aufgaben
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.

Datentabelle: nur_aufgaben
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.

[Bearbeiten]


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äulendiagrammen
  • boxplot() -- Erstellen von Boxplots (beinhaltet: Maximalwert, Minimalwert, Median, Quartile, Ausreißer)
  • contour() -- Erstellen von Konturdiagrammen, plotten von Isolinien
  • dotchart() -- Erstellen von Punktediagrammen
  • forestplot - (aus dem Zusatzpaket "rmeta") erzeugt ein so genanntes "Forest Plot" zusammen mit einer Texttabelle.
  • hist() -- Erstellen von Histogrammen
  • map - (aus dem Paket "maps" und "mapdata") erstellt Karten von Ländern, Kontinenten und der Welt
  • metaplot - (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 Parametern
  • persp() -- Erstellen von Dreidimensionalen Abbildungen
  • pie() -- Erstellen von Kreisdiagrammen
  • plot() -- Standardfunktion zum Erstellen von Diagrammen
  • title() -- 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 Datei
  • devSVG() -- 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
[Bearbeiten]


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 Signifikanz Pr(>|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:

  1. das Datenniveau (nominal-ordinal-metrisch)
  2. ob die Daten normalverteilt sind
  3. 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 Optionseinstellung
wilcox_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
[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.

An den RM()-Befehl können folgende Parameter übergeben werden:

RM(X, W, se=TRUE, sum0=TRUE, etaStart)
  • X = die zu analysierernde Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Summennormierung / FALSE=Itemnormierung
  • etaStart = 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 wurde
  • 1 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 von RM(), PCM() oder RSM()
  • splitcr = Teilungskriterium "median", "mean" oder in Form eines Vektors
  • se = 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 von RM()
  • 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 Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • mpoints = Anzahl der Messpunkte
  • groupvec = Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wird groupvec=1 gesetzt, werden keine Gruppen verwendet
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0
  • etaStart = 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 Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0
  • etaStart = 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 Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0
  • etaStart = 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 Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • mpoints = Anzahl der Messpunkte
  • groupvec = Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wird groupvec=1 gesetzt, werden keine Gruppen verwendet
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0
  • etaStart = 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 Datenmatrix
  • W = optionale Designmatrix zur Normierung auf ein bestimmtes Items
  • mpoints = Anzahl der Messpunkte
  • groupvec = Vector der Länge N, welche die Gruppenzugehörigkeiten enthält. Wird groupvec=1 gesetzt, werden keine Gruppen verwendet
  • se = Berechnung der Standardfehler (TRUE=ja / FALSE=nein)
  • sum0 = TRUE=Normierung der Parameter auf sum-0 / FALSE=Begrenzung des ersten Parameters auf 0
  • etaStart = 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
  • plotjointICC()
  • LRtest()
  • plotICC()
  • Waldtest()
  • person.parameter()
---- andere Packages ----
  • thresholds()
  • plotGOF()
  • LRtest()
  • IC()
  • itemfit()
  • personfit()
  • pmat()
---- andere Packages ----
  • person.parameter()

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:

  • DESCRIPTION: Diese Datei gibt eine Beschreibung des Pakets. Das Format ihres Inhalts ist vorgegeben. Da mit package.skeleton() eine Dummy-DESCRIPTION-Datei angelegt wird, müssen die Inhalte nur noch entsprechend ausgefüllt bzw. ergänzt werden.
Package: (Name des Pakets)
Type: Package
Version: (Paketversion, z.B. 1.3)
Date: (Datum des Erstellens, z.B. 2007-06-02)
Author: (Liste der Autoren, mit Kommata getrennt)
Maintainer: (Name des Hauptautors und dessen E-Mail-Adresse)
Depends: R (>= 2.4.0), PKGNAME (R-Version und andere benötigte Zusatzpakete)
Description: (Eine kurze Beschreibung des Pakets, Sinn und Zweck)
License: GPL version 2 or newer
URL: (einen oder mehrere Links)

Unterverzeichnisse:

  • data: In diesem Verzeichnis befinden sich die Datensätze, die in dem Paket enthalten seien sollen.
  • man: Hier befinden sich alle Dokumentationen im "R Dokumentationformat (Rd)". Dokumentationen sollten für alle Datensätze und Funktionen des Pakets erstellt werden.
  • R: In diesem Verzeichnis befinden sich die Funktionen des Pakets.

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 immer data 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 immer datasets 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:

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.

[Bearbeiten]


Andere Programmiersprachen einbinden

[Bearbeiten]

Auch andere Programmiersprachen können eingebunden werden wie z.B.:

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. Unter value 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 ein character-Vektor, besteht aber in Wahrheit aus Elementen vom Typ numeric. Dies ist insbesondere beim Datenimport aus Dateien (z.B. mit read.csv) problematisch, wenn Spalten mit Nummern (z.B. wegen zusätzlicher Buchstaben) als Strings importiert und auf Grund der Einstellungen automatisch ein factor erzeugt werden. Eine Konvertierung in as.numeric gibt dann unter Umständen nicht die erwarteten Werte zurück, sondern die interne Repräsentation des factor. 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 der frame-Auswahl kann durch Eingabe der entsprechenden Nummern in den entsprechenden frame gesprungen werden.
  • frame-Editor: Im frame-Editor können alle Funktionen und Kommandos wie gewöhnlich benutzt werden. Insbesondere werden Objekte durch einfache Eingabe ihres Namens ausgegeben. Durch eine Leereingabe RETURN 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 wurde
  • 1 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 wurde
  • 1 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 - 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.

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.

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.

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()).

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.

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)

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.

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.

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.

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.

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.


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 library(package) wird ein Bibliothek eingebunden.

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().

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.

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.

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.

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)).

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.

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.

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

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.

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.

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.

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.

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.

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


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 - 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

SPSS
R

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

SPSS
R

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

SPSS
R
COMPUTE a=b
überflüssig, einfach: a=b oder a <- b
(siehe Berechnen neuer Variablen )


CORRELATIONS (metrisch)
cor (x,y)


CROSSTABS x by y
table (x,y)


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

SPSS
R


DO REPEAT
for (i in a:b)


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

SPSS
R

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

SPSS
R


Filtern
Erklärung von Filtern


COMPUTE filtervar=(bla = 1).
FILTER
BY filter.
filtervar <- (bla == 1)
subset (x,filtervar)


FREQUENCY
table (x)

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

SPSS
R

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

SPSS
R

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

SPSS
R

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

SPSS
R

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

SPSS
R

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

SPSS
R

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

SPSS
R


MATRIX
matrix

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

SPSS
R

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

SPSS
R

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

SPSS
R


PRINT x
print(x) oder cat(x)


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

SPSS
R

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

SPSS
R


Recodierung

RECODE x
(1=1) (ELSE=SYSMIS) INTO y.
y <- unclass(x) # neue variable y = x

y[x==1] <- 1 # setzt an den stellen wo x=1 war y=1

y[x!=1] <- NA # setzt an den Stellen wo nicht 1 war y=NA


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

SPSS
R


SYS.MIS
NA


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

SPSS
R


T-TEST
PAIRS= x WITH y
t.test()


VARIABLE LABELS
attr()


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

SPSS
R

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

SPSS
R


VALUE LABELS
x 1 'label1' 2 'label2'
levels(x) <- c("label1","label2")


VARIABLE LABELS
attr()


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

SPSS
R


WEIGHT BY gewvar.
noch nicht global implementiert


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

SPSS
R

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

SPSS
R

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

SPSS
R



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" )
  • der Parameter plot, welcher per TRUE / 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]

GNU R: options

Das wikibooks-Zusatzpaket

[Bearbeiten]

GNU R: wikibooks-Zusatzpaket

  1. Bert Niehaus (2023) data.csv GitHub-Repository KnitR for Education https://github.com/niebert/knitr4education für eine Wikiversity-Lernressource - Datei: data.csv