3 Datenspeicherung und Austausch von Daten in:

Andreas Behr, Ulrich Pötter

Einführung in die Statistik mit R, page 42 - 53

2. Edition 2010, ISBN print: 978-3-8006-3599-3, ISBN online: 978-3-8006-4878-8, https://doi.org/10.15358/9783800648788_42

Series: Vahlens Kurzlehrbücher

Bibliographic information
D A D Statistik braucht Daten. Hier beschreiben wir, wie man Daten einliest, wie man Daten speichert und an andere Programme weitergibt. Die Datenaufbereitung ist der wohl zeitintensivste Teil jeder Datenanalyse. Die effiziente Speicherung aufbereiteter Daten und ein möglichst einfacher Austausch mit Datenproduzenten sowie Nutzern anderer Programme ist daher Voraussetzung jeder Arbeit mit statistischen Daten. 3.1 Dateien und Datenspeicherung 3.1.1 Datenerfassung 3.1.2 Datenspeicherung 3.1.3 Übergabe von Daten an andere Programme 3.1.4 Dateien und Pfade 3.1.5 Dateien im Internet 3.2 Dateien anderer Statistikprogramme 3.2.1 SPSS, Stata und Co 3.2.2 Label 3.2.3 Zusätzlich definierte fehlende Werte 3.2.4 Datenaustausch mit Excel 3.3 Übungsaufgaben . Dateien und Datenspeicherung . . Datenerfassung R selbst bietet nur rudimentäre Möglichkeiten flexibler Datenerfassung, schließlich ist es eine Programmierumgebung für die Auswertung von Daten. Etliche Programme erlauben die effiziente manuelle Erfassung von Daten einschließlich der Möglichkeiten, gültige Bereiche von Variablenwerten zu erzwingen und den korrekten Ablauf nach Filterfragen zu überprüfen. Ein freies (kostenloses, mit Zugang zum Quellcode) Programm ist epidata (erhältlich von www.epidata.dk). Datenspeicherung und Austausch von Daten Für kleine Datenmengen oder Beispiele kann man die Datenerfassung aber direkt in R vornehmen. Im Folgenden wird als Beispiel die Erfassung der beiden Variablen x und y für zwei Personen Hans und Susi zu zwei verschiedenen Zeitpunkten gezeigt: > name < c(rep("Hans",2),rep("Susi",2)) > t < rep(c(1,2),2) > x < c(2,3,4,5) > y < c(5,4,3,2) > daten < data.frame(name,t,x,y) Es wird ein Objekt der Struktur data.frame mit demNamen daten erzeugt, das die vier Variablen (Vektoren) name, t, x und y enthält. Da die Variable name eine character Variable ist, wurden die Ausprägungen in Anführungszeichen eingegeben. Der data.frame() Befehl wandelt dann allerdings die character Variable name in einen Faktor um: > class(daten$name) [1] "factor" Wollte man das verhindern, etwa um später direkt mit den Namen zu arbeiten, hätte > daten < data.frame(name,t,x,y,stringsAsFactors=F) angegeben werden müssen. Ein einmal definiertes Datenfile kann mit der Funktion edit etwas komfortabler bearbeitet werden. Das folgende Beispiel greift dabei auf den oben definierten Datensatz zurück: > daten2 < edit(daten) Beim Aufruf öffnet sich ein Tabellenblatt, in dem die Daten des Datensatzes daten dargestellt werden. Man kann direkt Werte ändern oder neue Datensätze oder Variable erzeugen. Schließt man das Datenblatt, so wird der geänderte Datensatz als data.frame daten2 gespeichert. . . Datenspeicherung In R sind Daten zuerst einmal nur im Arbeitsspeicher verfügbar. Nach Beendigung der R-Sitzung sind alle Daten verloren, die nicht gespeichert wurden. Daher ist es wichtig, Daten in Dateien speichern zu können, wenn diese zukünftig wieder verwandt werden sollen. Eine Möglichkeit, Zwischenergebnisse, Dataframes und Matrizen zu speichern, benutzt den Befehl write.table(). Als Beispiel speichern wir unseren selbst erstellten Dataframe daten unter dem Dateinamen test.dat ab. Bei der Definition des Dataframes daten sollte beachtet werden, dass das Symbol t (der Name einer Spalte des Dataframes daten) in R auch auf eine vordefinierte Funktion mit diesem Namen, nämlich die Transposition einer Matrix verweist. Da in R (wie auch in LISP) Symbole gleichzeitig auf eine Funktion und auf den Wert einer Variablen verweisen können, kann es keine Verwechslung des Variablennamens mit der ebenso benannten Funktion geben. . Dateien und Datenspeicherung > write.table(daten,Ąle="test.dat") write.table() schreibt eine ASCII-Datei mit vorgegebenem Trennzeichen zwischen den Spalten eines Dataframes (eine CSV-Datei, comma-separated variables). Einlesen können wir die Daten mit read.table(): > dat < read.table("test.dat") > dat name t x y 1 Hans 1 2 5 2 Hans 2 3 4 3 Susi 1 4 3 4 Susi 2 5 2 > is.data.frame(dat) [1] TRUE Die Daten sind also wieder als data.frame Objekt in R verfügbar und haben ihre Variablennamen behalten. Eine zweite Möglichkeit, Zwischenergebnisse zu speichern, bietet der save() Befehl: > save(daten,Ąle="test.Rdata") Er speichert ein (binäres) Abbild des Dataframes daten in der Datei test.Rdata. Das ist schneller als eine Speicherung in einer CSV-Datei, und es ist auch garantiert, dass die entsprechenden Dateien zwischen Rechnern portabel sind. Aber die Datei kann nur von R gelesen werden. > load("test.Rdata") stellt das gespeicherte Objekt (hier: den Dataframe daten) im Speicher wieder her (es bedarf also keiner Zuweisung wie beim Lesen aus einer CSV-Datei). . . Übergabe von Daten an andere Programme Die Datei test.dat hat nach dem Schreiben mit write.table() ohne weitere Optionen den folgenden Inhalt: "name" "t" "x" "y" "1" "Hans" 1 2 5 "2" "Hans" 2 3 4 "3" "Susi" 1 4 3 "4" "Susi" 2 5 2 Die ersteZeile enthält die Namen der Variablen, alle weiteren Zeilen je eine Zeile des Dataframes daten. Zusätzlich ist als erste Spalte nach den Variablennamen Will man die Daten in einem anderen Verzeichnis als im gerade definierten Arbeitsverzeichnis ablegen, dann muss man beachten, dass die Trennung zwischen den Ebenen der Verzeichnisangabe nicht mit Backslash (\), sondern mit Slash (/) erfolgen muss. Mit dem save() Befehl können auch andere R Objekte wie Funktionen, Arrays und Ergebnisse statistischer Berechnungen gespeichert werden. Datenspeicherung und Austausch von Daten ein Zeilenname eingefügt, der hier einfach aus Strings mit den Zeilennummern besteht. In jeder Zeile sind Angaben durch Leerzeichen getrennt. In dieser Form sind die Daten zwischen verschiedenen Rechnertypen und Betriebssystemen austauschbar und können auch von anderen Programmen ohne spezielle Software gelesen (und geändert) werden. Manchmal verlangen andere Programme eine etwas andere Anordnung, andere Trennzeichen, oder keine erste Zeile mit den Namen der Variablen. Dies kann durch Varianten des write.table() Befehls erreicht werden. So schreibt > write.table(daten,Ąle="test2.dat", + sep=";",row.names=F,col.names=F) eine Datei ohne Variablennamen in der ersten Zeile (col.names=F) und ohne Zeilennamen (row.names=F), wobei die einzelnen Spalten durch „;“ getrennt werden (sep=";"). Eine weitere, möglicherweise wichtige Angabe ist eine Option, die festlegt, wie fehlende Werte (NA in R) in der Datei repräsentiert werden sollen. Das geschieht mittels na=. Die Voreinstellung ist na="NA". Außerdem kann festgelegt werden, wie in der Datei Zahlen dargestellt werden, indem das Zeichen für das Dezimaltrennzeichen angegeben wird (dec="." ist die Voreinstellung, in Deutschland würden aber viele Programme ein Dezimalkomma, also dec="," erwarten). . . Dateien und Pfade Dateien sind in allen Betriebssystemen in einem hierarchischen Pfadsystem angeordnet. Um Dateien zu lesen und zu schreiben, muss man R mitteilen, an welcher Stelle im Dateisystem das passieren soll. Gibt man keinen Pfad explizit an, dann benutzt R ein Standardverzeichnis. Das aktuell verwandte Verzeichnis kann man mit getwd() abfragen oder im Menü unter Datei -> Verzeichnis wechseln finden. Dort kann man es auch ändern. Alternativ kann man den Befehl setwd() benutzen. Pfadangaben unter Windows müssen in R entweder in der Form "c:/mein Pfad/zu meinen/Dateien" oder in der Form "c:\\mein Pfad\\zu meinen\\Dateien" angegeben werden, der übliche einfache Backslash „\“ funktioniert nicht, weil „\“ in R ein Escape-Zeichen ist, das u.a. zur Darstellung spezieller Zeichen etwa in Graphiken benutzt wird. Man kann auch aus R heraus mit Dateien und Pfaden arbeiten, sie erzeugen, kopieren oder löschen. Die Funktionen dir.create() und Ąle.create() legen ein Verzeichnis bzw. eine Datei an, dir() zeigt die Dateien im gegenwärtigen Arbeitsverzeichnis an. Mit einem Pfad als erstem Argument werden die Dateien des angegebenen Pfades angezeigt. Ąle.copy(,) kopiert Dateien, Ąle.rename(,) benennt Dateien um, Ąle.remove() löscht Dateien. unzip() entpackt mit „zip“ archivierte Dateien. Die Variante UnZip() im Paket memisc enthält etwas andere (und manchmal hilfreiche) Optionen. Mit system() kann man beliebige Befehle des Betriebssystems ausführen. Das „wd“ in den Befehlen steht für „working directory“. . Dateien anderer Statistikprogramme . . Dateien im Internet Viele Daten sind im Internet erhältlich. Solche Daten kann man direkt aus R heraus herunterladen. Z.B. bietet das Statistische Bundesamt eine Public Use Version des Mikrozensus an. Um sie herunterzuladen, kann man schreiben: > urlname < paste("http://www.forschungsdatenzentrum.de/", + "bestand/mikrozensus/cf/2002/", + "fdz_mikrozensus_cf_2002_spss.zip", + sep="") > download.Ąle(urlname,"meinMZ02.zip") versuche URL Šhttp://www.forschungsdatenzentrum....Š Content type application/zip length 2663490 bytes (2.5 Mb) URL geöfnet downloaded 2.5 Mb Die Datei ist nun unter dem Namen „meinMZ .zip“ im gegenwärtigen Arbeitsverzeichnis abgelegt. Man kann die Datei nun entpacken, etwa aus R heraus mit dem system() Befehl: > system("unzip meinMZ02.zip") Damit es in unserem Beispiel funktioniert, muss ein Programm mit dem Namen unzip installiert sein. Oder man benutzt den R-eigenen unzip() Befehl: > unzip("meinMZ02.zip") Verschiedene finanzielle Zeitreihen lassen sich auch direkt im Internet abfragen. Entsprechende Funktionen werden sowohl vom Paket fImport als auch vom Paket TTR angeboten. So erhält man z.B. die Kurse von IBM durch: > library(TTR) > ibm < getYahooData("IBM",20090407,20090606) . Dateien anderer Statistikprogramme . . SPSS, Stata und Co Viele Datensätze liegen in Formaten vor, die von anderen Statistikprogrammen erstellt worden sind. Das Paket foreign erlaubt das Lesen (und teilweise das Schreiben) von Dateien, die von SPSS, SAS, STATA, Minitab, EpiInfo Wir haben den paste() Befehl nur verwandt, um die lange Adresse lesbar zu machen. Die Adresse kann natürlich auch (als String) direkt als erstes Argument des download.file() Befehls benutzt werden. Das Statistische Bundesamt garantiert nicht die Stabilität der Internet-Adresse für die Public- Use-Version des Mikrozensus . Die Adresse mag sich also geändert haben. Es gibt noch eine ganze Reihe von spezialisierten Paketen, die die Abfrage von netzbasierten Daten erlauben. Die Möglichkeiten umfassen Literaturdatenbanken ebenso wie GoogleMaps (Paket RgoogleMaps), oder Wettervorhersagen. Datenspeicherung und Austausch von Daten oder SYSTAT erstellt worden sind. Angenommen, wir möchten die Campus- Version des Mikrozensus einlesen. Wir haben die SPSS-Version im letzten Kapitel heruntergeladen und entpackt. Man kann die Daten nun durch > library(foreign) > dat < read.spss("mz02_cf.sav",to.data.frame=T, + use.value.labels=F) einlesen. Die ersteOption verlangt, dieDaten in einenDataframe zu verwandeln (nicht in eine Liste (Typ list), die Voreinstellung), die zweite Option verhindert, dass Variable mit „value labels“ in R-Faktoren verwandelt werden. Der Name der zweiten Option ist etwas irreführend, weil auch mit use.value.labels=F die Namen der Variablenwerte mitgespeichert werden. Man verliert also keine Information, wenn man auf die Umwandlung in Faktoren verzichtet. Andererseits kann man viel einfacher mit den numerischen Werten als mit Faktoren arbeiten. Die Namen der Variablenwerte werden als „Attribute“ der Variablen abgespeichert. Z.B. enthält die Variable ef32 das Geschlecht der Befragten. Man erhält Auskunft über die Kodierung durch den Befehl attr(): > attach(dat) > attr(ef32,"value.labels") Weiblich Männlich 2 1 . . Label für Variable und deren Werte Viele der kommerziellen Statistikprogramme sehen die Möglichkeit vor, kurze Informationen über Variable und ihre Werte mit den Daten zu speichern. In R ist nur eine Variable vom Typ factor mit den zugehörigen levels in beschränktem Maße in der Lage, solche Informationen wiederzugeben. Allerdings sind lange Wertelabel in Faktoren kontraproduktiv, weil man sie bei der Arbeit mit den Variablen jeweils exakt angeben müsste. Erhältlich unter http://www.forschungsdatenzentrum.de/campus-file.asp. Die Dokumentation zusammen mit den Daten in einer Datei oder einer kohärenten Dateistruktur zu halten ist sehr hilfreich. Das gilt insbesondere dann, wenn Daten in mehreren Versionen gehalten werden oder sich häufiger ändern. Label für Variable und ihre Werte sind dabei nur ein erster und unvollständiger Schritt, weil etwa Änderungen in Datensätzen so nicht dokumentiert werden können. Daher sind in den letzten Jahren für verschiedene Anwendungskontexte Ansätze zur Normierung von gleichzeitiger Dokumentation und Datenhaltung entwickelt worden. Dazu gehören insbesondere die Formate hdf5 (http://hdf.ncsa.uiuc.edu), ncdf (http://www. unidata.ucar.edu/packages/netcdf) und DDI (http://www.ddialliance.org). Insbesondere DDI gewinnt zunehmend an Bedeutung in den Sozialwissenschaften. R unterstützt diese Formate zum Teil. Zu nennen sind insbesondere die Pakete hdf5, spssDDI und ncdf. DDI benutzt eine Teilmenge von XML zur Strukturierung von Dokumentation und Daten. Das Paket XML erlaubt den direkten Zugriff auf entsprechende Dateien. Allerdings ist die Dokumentation logisch von der statistischen Datenverarbeitung getrennt. Daher sollte eine Sprache wie R auch keine Vorgaben für die Datendokumentation erzwingen. . Dateien anderer Statistikprogramme Liest man Daten aus SPSS- oder Stata-Dateien ein, dann werden die Angaben zu Wertelabeln und Variablenlabeln in Attributen des entsprechenden Dataframes abgelegt und man muss mit den etwas umständlichen Befehlen attributes() bzw. attr() arbeiten. Das Paket memisc erlaubt sowohl einen einfacheren als auch effektiveren Zugriff auf SPSS- oder Stata-Dateien. Es werden nur ausgewählte Variable und/oder Fälle tatsächlich in den Speicher geladen und man kann direkt auf die Variablen- oder Wertelabel zugreifen. Zudem stellt das Paket eine Variante von data.frame zur Verfügung, in dem diese Größen in R abgelegt und verwaltet werden können. Für die Mikrozensusdaten kann man etwa schreiben: > library(memisc) > dat < spss.system.Ąle("mz02_cf.sav") > ### Liest alle Daten > daten < as.data.set(dat) > ### Nur einen Teil > daten2 < subset(dat,select=c(geschl=ef32,famst=ef35)) Der Befehl spss.system.Ąle() liest nur die ersten Zeilen der jeweiligen Datei und extrahiert die wichtigsten Informationen wie Variablennamen und Fallzahlen. Da keine großen Dateien gelesen werden müssen, kann der Befehl sehr schnell ausgeführt werden und man erhält einen ersten Überblick über den Inhalt der Datei. Die Daten können dann entweder mit as.data.set() insgesamt gelesen werden oder mit subset() teilweise. Die letzte Möglichkeit ist gerade für große Datensätze sehr hilfreich. Zudem kann man auch gleichzeitig Fälle auswählen und Variable umbenennen. Das Ergebnis ist in beiden Fällen ein data.set, eine Erweiterung des data.frame Objektes, die einen einfacheren Umgang mit Labeln und anderen Eigenarten von SPSS- und Stata-Dateien ermöglicht. Gleichzeitig verhält es sich für die meisten R-Befehle wie ein normaler Dataframe. Ob ein Objekt ein data.set ist, wird mit is.data.set() getestet. Der Befehl codebook() liefert eine erste Zusammenfassung der Daten, die etwas ausführlicher als summary() ist: > codebook(daten2) geschl ŠEF32 GeschlechtŠ Storage mode: integer Measurement: nominal Values and labels N Percent 1 ŠMännlichŠ 12087 48.1 48.1 2 ŠWeiblichŠ 13050 51.9 51.9 ============================ famst ŠEF35 FamilienstandŠ Storage mode: integer Ebenso wie die analogen Befehle spss.portable.file, spss.fixed.file() und Stata.file(). Datenspeicherung und Austausch von Daten Measurement: nominal Values and labels N Percent 1 ŠLedigŠ 9648 38.4 38.4 2 ŠVerheiratetŠ 12149 48.3 48.3 3 ŠVerwitwetŠ 2029 8.1 8.1 4 ŠGeschiedenŠ 1311 5.2 5.2 Zugriff auf die Label erhält man mit dem Befehl labels(). > labels(daten2$famst) Values and labels: 1 ŠLedigŠ 2 ŠVerheiratetŠ 3 ŠVerwitwetŠ 4 ŠGeschiedenŠ Der Befehl query() sucht in allen Labeln und sonstigen im Datensatz enthaltenen Dokumentationen nach einemWort oder Wortbestandteil. Man kann sich also relativ schnell auch in Datensätzen mit vielen Variablen orientieren. > query(daten2,"Familie",fuzzy=F) $famst description: EF35 Familienstand Mit dem Befehl annotation() kann man sich alle vorhandenen Dokumentationen zu Variablen und deren Werten in einem data.set ausgeben lassen. Will man die Werte- oder Variablenlabel ändern, kann man die Funktion relabel() verwenden. Sie erlaubt auch Änderungen von Teilen der entsprechenden Strings, ohne die vollständigen Label angeben zu müssen. Bei der Arbeit mit Labeln muss noch beachtet werden, dass die Interpretation der zugehörigen Strings durch die Wahl eines Kodierungssystems für die jeweilige lokale Sprache (die für den lokalen Rechner definiert ist) und die Kodierung der Label durch den Datenproduzenten erschwert wird. Unterschiedliche Konventionen der verschiedenen Statistikprogramme und Konflikte mit lokalen Einstellungen führen oft zu unleserlichen Wiedergaben von Labeln. Zwar können die meisten Textverarbeitungsroutinen von R durch Angabe des verwandten Kodiersystems auch mit Umlauten, kyrillischen, chinesischen, mathematischen Schriftzeichen umgehen, aber welches Kodierungssystem in fremden Dateien verwandt wird, kann praktisch nicht auf Grund des Textes selbst entschieden werden. Beim Austausch von Daten, die Texte enthalten, also auch wenn Label verwandt werden, sollte man auf die Kodierung achten und auf jeden Fall das Kodierungssystem angeben. Der Befehl read.spss() enthält die Option reencode, eine logische Variable mit der Voreinstellung NA. Bei der Voreinstellung wird eine Umkodierung versucht, wenn das lokale System (der eigene Rechner) die UTF- Kodierung verwendet. In allen anderen Fällen kann man versuchen, die Option als T zu wählen. Wenn das auch nicht weiterhilft oder zu fehlerhaften Ergebnissen führt, dann kann man den Befehl iconv() . Dateien anderer Statistikprogramme verwenden, um Label und Variablennamen explizit von einer Kodierung in eine andere zu verwandeln: > x < c("Ekstr\xf8m","J\xf6reskog","bi\xdfchen Z\xfcrcher") > y < iconv(x,"latin1","utf 8") > y [1] "Ekstrøm" "Jöreskog" "bißchen Zürcher" Die Label der Mikrozensusdaten etwa sind gegenwärtig in Latin1 kodiert und können mit dem obigen iconv() Befehl in UTF 8 (oder ein anderes System, das benutzt werden soll) umgewandelt werden. . . Zusätzlich definierte fehlende Werte Eine weitere Eigenart sowohl von SPSS als auch von Stata ist die Möglichkeit, verschiedene Arten fehlender Werte zu unterscheiden und diese Information im Datensatz zu speichern. Für statistische Auswertungen ist es wohl meistens egal, welcher „Art“ fehlende Daten sind oder was sonst noch durch diese Codes an Information bereitgestellt wird. Die Information über den zugrunde liegenden Wert ist jedenfalls für Statistiken nicht verfügbar. Deshalb reicht es auch, in R nur eine einzige Markierung für fehlende Werte, NA, zu haben. Allerdings ignoriert der Befehl read.spss() des Pakets foreign die zusätzlich definierten fehlenden Werte entweder völlig und liefert einfach deren Code zurück. Das passiert, wenn die Option use.missings denWert F hat. Ist dagegen use.missing=T als Option gewählt, werden alle nutzerdefinierten fehlenden Werte in NA verwandelt. Das ist auch die Voreinstellung, wenn man die Option to.data.frame als T gewählt hat. Man muss dann also entweder die zusätzlichen Werte, die als fehlend markiert sind, nachträglich in den mit read.spss() erstellten Dataframes zu NA Werten machen oder die Nutzerdefinition einfach übernehmen. Zwar wird auch ein Attribut Missings erzeugt, aber mit diesem Attribut lässt sich nur sehr umständlich arbeiten. Die Funktionen spss.system.Ąle() und verwandte Befehle des Paketsmemisc übernehmen die zusätzlich definierten Missings, setzen sie aber nicht unmittelbar in NA um. Statt dessen wird ein value.Ąlter definiert, der missing.values, valid.values und valid.range definiert. Entsprechende Testmethoden sind is.missing() bzw. is.valid(). Damit kann man einfach alle fehlenden Werte auf NA (oder einen anderen Wert) setzen. Z.B. gibt es im Mikrozensus die Frage nach dem Zuzugsjahr in die BRD. Das Codebuch gibt die Codes an als In der Bundesrepublik geboren und früher zugezogen und später zugezogen – Ohne Angabe Deutscher Datenspeicherung und Austausch von Daten Wir lesen die Daten ein und sehen, wie sie in der SPSS-Datei abgelegt sind: > library(memisc) > dat < spss.system.Ąle("mz02_cf.sav") > daten3 < subset(dat,select=c(zuzug=ef53)) > codebook(daten3) Lässt man die Angaben über die Jahre des Zuzugs weg und kürzt den Ausdruck ein wenig, ergibt sich zuzug ŠEF53 ZuzugsjahrŠ Values and labels N Percent 0 M ŠDeutscherŠ 12943 51.5 1900 Šin der BRD geborenŠ 9482 77.8 37.7 1949 Š1949 oder frueherŠ 276 2.3 1.1 ..... 9999 ŠOhne AngabeŠ 1023 8.4 4.1 In der SPSS-Datei ist also der Wert („Deutscher“) als fehlender Wert markiert (das „M“ in der zweiten Spalte), nicht aber (keine Angabe). Das ist eine ziemlich eigentümliche Auffassung fehlender Werte. Der Wert ist eine valide und keinesfalls fehlende Angabe. Dagegen fehlt die Angabe offenbar, wenn der Code angegeben ist. Der ist aber nicht als fehlender Wert kodiert. Es ist daher in allen Fällen geboten, in den Codebüchern die vollständige Definition der Variablen nachzuschlagen und sich nicht auf die Information aus den SPSS-Dateien zu verlassen. . . Datenaustausch mit Excel Häufig sind Daten weder in den Formaten statistischer Pakete abgelegt, noch in Datenbanken oder als Textdateien verfügbar. Etliche Datenproduzenten benutzen das TabellenkalkulationsprogrammMicrosoft-Excel für den Datenaustausch, ebenso wie für die Produktion und Dokumentation der Daten. Die einfachste Möglichkeit, mit Daten im Excel-Format zu arbeiten, besteht darin, die zu importierenden Excel-Dateien als CSV-Dateien abzuspeichern. Die entsprechende CSV-Datei kann dann in R mittels read.table() eingelesen Das Paket memisc stellt den Befehl include.missings() bereit, der eine Kopie des Arguments erstellt, in der alle fehlenden Werte als valide erklärt sind. Alle Tabellenkalkulationsprogramme (nicht nur Microsofts Excel) sind entworfen worden, um möglichst einfach und durchsichtig Werte in Tabellen zu berechnen. Zur Datenhaltung, zur Datendokumentation oder zum Austausch statistischer Daten sind sie wenig geeignet. Weder erzwingen sie die Ablage von Daten in der Form von Dataframes oder ähnlicher Konzepte, die Statistikpakete wie SPSS oder R etc. erwarten. Noch sind Zusatzinformationen (Titel, Datenherkunft, Variablenbeschreibung, fehlende Werte etc.) an einem identifizierbaren Ort abgelegt. Das setzt voraus, dass das Programm Excel selbst zur Verfügung steht. Ist das nicht der Fall, oder werden andere Betriebssysteme als die vonMicrosoft benutzt, kann man oft auf OpenOffice (www.openoffice.org) zurückgreifen, das viele Varianten von Excel lesen (und anschließend in einem passenden CSV-Format speichern) kann. . Übungsaufgaben werden, wenn auchmit einer Variation der Optionen. Für die häufigste Variante von CSV-Dateien gibt es eine Abkürzung: > rdaten < read.csv("exceldat.csv") Der entsprechende Befehl, formuliert mit read.table(), würde lauten: > rdaten < read.table("exceldat.csv", + header=T,sep=",",dec=".") wobei sep="," das Trennzeichen zwischen Feldern angibt und dec="." das Zeichen „.“ als Dezimaltrennungszeichen definiert. Wenn die Daten etwa mit Dezimalkomma geschrieben wurden und ein „;“ als Trennungszeichen benutzt wurde, dann müsste > rdaten < read.table("exceldat.csv", + header=T,sep=";",dec=",") geschriebenwerden. Beim entsprechenden Befehlwrite.table() sollte zusätzlich die Option row.names=F angegeben werden, damit in Excel die Spaltenbezeichnungen nicht verschoben sind: > write.table(rdaten,"exceldat.csv",row.names=F,sep=";",dec=",") Einige Zusatzpakete stellen auch die Möglichkeit bereit, Daten direkt aus ∗.xls Dateien zu lesen (der Befehl read.xls() im Paket gdata ) und zu schreiben (der Befehlwrite.xls() im Paket dataframes2xls). Die PaketeRExcelInstaller und xlsReadWrite erlauben es ebenfalls, direkt ∗.xls Dateien zu lesen und zu schreiben, funktionieren aber nur bei installiertem Excel unter den Microsoft- Betriebssystemen. . Übungsaufgaben 1) Erzeugen Sie einen Dataframe dat mit den folgenden Daten: pid name dob IQ 1 Susi 1946 79 2 Carmen 1954 131 3 Herbert 1937 122 4 Karl 1932 93 Diese Pakete setzen aber voraus, dass weitere Programme (im Fall von gdata und dataframes2xls Perl bzw. Python) installiert sind. Wir raten dringend davon ab, eigene Daten im Excel-Format ∗.xls zu speichern oder weiterzugeben. Neben den Beschränkungen in der Zahl der Fälle und Variablen sowie der Beschränkung der Genauigkeit der Zahlenrepräsentation führt die recht willkürliche Microsoft-Politik in den Standard-Installationen von Excel zu ebenso undurchschaubaren Übersetzungen von Formaten, die zudem nicht ohne weiteres rückgängig gemacht werden können. Eine Excel ∗.xls Datei aus Deutschland ist in den USA nur mit zusätzlichem Aufwand (Anweisungen, Makros, Dokumentation) interpretierbar. An die zusätzlichen Probleme beim Austausch mit anderen Betriebssystemen kann nur erinnert werden; dazu kommen die Probleme der Dokumentation sowie mögliche Unstimmigkeiten, wenn mehrere Tabellen in einer Datei gespeichert werden. Datenspeicherung und Austausch von Daten Speichern Sie diesen Dataframe mit write.table(), entfernen Sie mit dem Befehl rm(dat) (remove) den Datensatz aus dem Arbeitsspeicher und lesen Sie die Daten aus der Datei wieder in den Arbeitsspeicher. 2) Überlegen Sie sich, ob Sie bei der Speicherung von Datenmöglicherweise Genauigkeit verlieren können.Machen Sie sich einenDataframemit einer Variablen X und den Werten (0.7333,3/7,pi,exp(1)). Speichern Sie die Daten in einer CSV-Datei. Löschen Sie denDataframe imArbeitsspeicher und laden Sie die Daten erneut. Vergleichen Sie die erneut geladenen Daten mit der Funktion identical() mit den Werten 0.7333,3/7 etc. Untersuchen Sie auch mit ihrem Editor die Darstellung der Werte in der CSV-Datei.

Chapter Preview

References

Zusammenfassung

Vorteile

- Einführung in die statistische Analyse mit R für Wirtschafts- und Sozialwissenschaftler

- Inklusive hilfreicher Tipps wie "Ansprechende Grafiken mit R gestalten"

Zum Thema

R ist ein Statistikprogramm, das kostenlos über das Internet verbreitet wird und dessen Source Codes frei zugänglich sind.

Aufgrund dieses kostenlosen Angebots gehen immer mehr Dozenten dazu über, neben SPSS auch R zu lehren bzw. SPSS durch R zu ersetzen.

In R steht dem Nutzer die gesamte Bandbreite statistischer Verfahren zur Verfügung. Durch die eigenständige Programmierumgebung ist die Software sehr flexibel und erlaubt notwendige Modifikationen und Erweiterungen verfügbarer Prozeduren.

Zum Werk

Dieses Buch führt leicht verständlich in die statistische Analyse mit R ein. Anhand von Beispielen wird die Umsetzung der wichtigsten Methoden der Statistik, wie sie üblicherweise in den Grundkursen gelehrt werden, mit R vorgestellt.

Das Buch verfolgt entsprechend zwei Ziele:

1. Vorstellung der statistischen Methoden,

2. Benutzung des Werkzeuges R zur Analyse von Daten.

Inhalt

- Grundlagen von R

- Datenbehandlung und graphische Darstellungen mit R

- Datenbeschreibungen (deskriptive Statistik)

- Wahrscheinlichkeitsverteilungen

- Regressionsanalysen

- Optimierungsverfahren

- Simulationen mit R

Neben vielen neuen, wirtschaftsorientierten Beispielen wird nun auch in die Paneldatenanalyse und Stichprobentheorie eingeführt.

Zu den Autoren

Dr. Andreas Behr ist wissenschaftlicher Mitarbeiter am Institut für Statistik und Ökonometrie der Universität Münster.

Dr. Ulrich Pötter ist wissenschaftlicher Mitarbeiter am Institut für Statistik der Universität Bochum.

Zielgruppe

Für Studierende und Dozenten der Wirtschaftswissenschaften im Bachelor an Universitäten und Fachhochschulen.