Jakob Richter

Dänemark

Formeln in R (Teil 1)

Formeln (formula) werden in R an vielen verschiedenen Stellen genutzt. Natürlich für die lineare (lm()) und logistische Regression (glm(type="logit")), aber auch für die Survivalanalyse und das Cox-Modell (library("survival"); coxph()) um nur einige Beispiele zu nennen.

Zuerst der ganz allgemeine Aufbau einer formel
abhängige Variable ~ erklärende Variablen
(Ein kleiner Tipp für Mac-Nutzer an dieser Stelle: ~ lässt sich schreiben mit [alt] + N)
Die Formel y ~ x kann also verstanden werden als x erklärt y oder y ist abhängig von x.

Sicherlich bekannt ist, dass wir mehrere erklärende Variablen (EV) mit + verbinden können: y ~ x1 + x2
Doch es gibt zahlreiche weitere Möglichkeiten die rechte Seite der Formel aufzubauen:
Read the rest of this entry »

Zeilen in einer Matrix verdoppeln.

Hier ein kleiner Tipp aus dem R-Praxisleben. Beispiel: In einer Matrix (respektive data.frame) jede Zeile verdoppeln.

1
2
3
4
5
6
daten < - mtcars
 
#Doppelte Zeilen direkt untereinander
daten_doppelt <- daten[rep(1:nrow(daten),each=2),]
#Doppelte untereinander
daten_doppelt2 <- daten[rep(1:nrow(daten),times=2),]

Ja das ist wirklich nicht schwer. Die Grundidee: Die Selektionsvektoren, welche immer in den eckigen Klammern stehen, kann man natürlich auch nutzen um bestimmte Zeilen mehrfach zu wählen.

Damit es nicht nur bei diesem simplen Beispiel bleibt, was vielleicht jedem eingefallen wäre, noch ein paar Ideen, wie man mit dieser simplen Methode auch wesentlich komplexere Verdopplungen durchführen kann.
Read the rest of this entry »

lapply() und sapply() – Der Einstieg in die apply-Funktionen.

Warum gerade lapply() und keine der gebräuchlicheren Funktionen apply Funktionen aus R? Ganz einfach: lapply() ist die Grundfunktion und die anderen Funktionen bauen auf dieser Funktionsweise auf. Da man lapply() nicht nur auf Vektoren, sondern auch auf Listen anwenden kann bietet es ungeahnte (vllt. auch unausdenkbare) Möglichkeiten der Verwendung. Aus diesem Grund ist das Beispiel auch äußerst praxisunrelevant.

Funktionsweise lapply()

Versuch eines Schemas: So ungefähr arbeitet lapply().


Read the rest of this entry »

Schnelleres R dank Kompilierung (also ohne apply())

Inspiriert durch diesen Blogbeitrag wollte ich die Vorkompilierung selbst einmal ausprobieren und auch mit dem so hoch gelobten apply() vergleichen um mich von der Effektivität zu überzeugen.
Read the rest of this entry »

Hervorhebungen in Listings


Eine kleine Ergänzung zum Beitrag Quellcode und Latex in der Beamer-Class: Aus didaktischen Gründen kann es sehr hilfreich sein bestimmte Begriffe oder Abschnitte hervorzuheben.
Read the rest of this entry »

Daten im R-Quelltext hinterlegen.

Ok, dieses Beispiel wird man wohl selten gebrauchen, aber vielleicht mag es mal nützlich sein, wenn man jemandem ein wenig R-Code schicken will, der mit einem Datensatz arbeitet, ihr ihm aber nicht den kompletten Datensatz schicken wollt/könnt/dürft. Gleichzeitig sollte alles in einer Datei sein, damit der Empfänger nicht die Mühe hat alles noch mal einlesen zu müssen.

Funktioniert auch gut, wenn man sich nur selbst ein paar Daten ausdenken will, mit denen man etwas testen möchte. So erspart man sich lästiges c("a","b", usw.).

So geht’s:

1
2
3
4
5
6
datentxt <- "	lcavol	lweight	age	lbph	svi	lcp	gleason	pgg45	lpsa	train
1	-0.579818495	2.769459	50	-1.38629436	0	-1.38629436	6	  0	-0.4307829	T
2	-0.994252273	3.319626	58	-1.38629436	0	-1.38629436	6	  0	-0.1625189	T
3	-0.510825624	2.691243	74	-1.38629436	0	-1.38629436	7	 20	-0.1625189	T"
 
daten <- read.table(textConnection(datentxt))

Die ersten Textzeilen aus dem Prostata-Datensatz markieren, kopieren und dann datentxt <- "HIER" einfügen. Dabei darauf achten keine neuen Zeilenumbrüche einzubauen.

Hübscher Quellcode mit Latex und Beamer

Listings in LaTex und die Beamer-class
Aus gegebenem Anlass mal ein kurzer Beitrag, wie man Quelltext hübsch in eine LaTeX-Präsentation mit der Beamer-Class einbaut.
Anstelle der bekannten Verbatim-Umgebung wird hier auf das (auch für Berichte empfehlenswerte) Paket listings gesetzt.
Einge recht gute und knappe Hilfe findet man bei wikibooks.org

Vorteile:

  • farbiger Code
  • kein Problem mit langen Zeilen

Nachteile:

  • keine 😉

Read the rest of this entry »

Workflow für Simulationsstudien

Eine häufige Aufgabe ist es, für verschiedene Parameter ein und die selbe Simulation mit R durchzuführen und dann die Ergebnisse auszuwerten. Persönlich bevorzuge ich es, erst alles zu simulieren und dann auszuwerten. Dieses Vorgehen hat mehrere Vorteile: Bei langandauernden Simulationen müssen diese nur einmalig ausgeführt werden. Außerdem: Wenn ich mit meiner Auswertung unzufrieden bin, kann ich einfach die Auswertungsprozedur modifizieren ohne noch einmal alles durchlaufen lassen zu müssen und der Quelltext ist auch nachvollziehbarer. Insbesondere ist das Vorgehen aber auch angepasst auf die grafische Darstellung und Auswertung mit ggplot2.
Read the rest of this entry »

merge() – eine kleine Einleitung

Es kann sein, dass man in die Situation kommt verschiedene Datensätze miteinander kombinieren zu wollen. In einer Tabelle steht vielleicht für verschiedene Lebensmittel die Energiewerte und Vitamingehalte und in einer anderen Tabelle steht wie viel von welchem Lebensmittel eine Person gegessen hat. Will man jetzt schnell berechnen, wie viele kcal jede Person zu sich genommen hat kann man das schnell und elegant durch mergen der Datensätze, gefolgt von aggregate() um die kcal für jeden Patienten zusammenzurechnen.
Das ist natürlich nur ein dämliches Beispiel. Der geneigte R-Nutzer wird schon seine eigenen Anwendungen finden. Oft ist es auch viel einfacher Berechnungen an einem Datensatz durchzuführen als Funktionen zu basteln, die sich Daten aus mehreren Datensätzen zusammensuchen.
Read the rest of this entry »