Hausarbeit

Werbung
Statistische Software
Seminar
Warum wir falsch liegen und trotzdem weitermachen Aktuelle Themen in Banken und Versicherungen
von Martin Dörr
betreut durch Sebastian Kaiser
31. August 2010
Inhaltsverzeichnis
1 Einleitung
2
2 Vorstellen der Statistikwerkzeuge
2.1 PASW (SPSS) . . . . . . . . . . .
2.1.1 Die Geschichte . . . . . .
2.1.2 Die Struktur . . . . . . . .
2.1.3 Vor- und Nachteile . . . .
2.2 SAS . . . . . . . . . . . . . . . .
2.2.1 Die Geschichte . . . . . .
2.2.2 Die Struktur . . . . . . . .
2.2.3 Vor- und Nachteile . . . .
2.3 Matlab . . . . . . . . . . . . . . .
2.3.1 Die Geschichte . . . . . .
2.3.2 Die Struktur . . . . . . . .
2.3.3 Vor- und Nachteile . . . .
2.4 R . . . . . . . . . . . . . . . . . .
2.4.1 Die Geschichte . . . . . .
2.4.2 Die Struktur . . . . . . . .
2.4.3 Vor- und Nachteile . . . .
2.5 Excel . . . . . . . . . . . . . . . .
2.5.1 Die Geschichte . . . . . .
2.5.2 Die Struktur . . . . . . . .
2.5.3 Vor- und Nachteile . . . .
2.6 weitere Software . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 ausgewählte Funktionen für Ökonometrie
4 Leistungsoptimierung
4.1 R und Matlab . . . . . . . . . . . . . . . .
4.1.1 Geschwindigkeit des Codes messen
4.1.2 synonymer Code . . . . . . . . . .
4.1.3 effizienter Arbeitsspeichergebrauch
4.2 SAS . . . . . . . . . . . . . . . . . . . . .
4.3 Excel . . . . . . . . . . . . . . . . . . . . .
4.4 abschließende Anmerkung . . . . . . . . .
5 Zusammenfassung
3
3
3
3
4
5
5
6
9
10
10
10
11
12
12
13
15
17
17
17
17
19
21
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
24
24
25
27
30
34
37
38
1
Kapitel 1
Einleitung
Computergestützte Verfahren sind in der heutigen Statistik nicht mehr wegzudenken. So ermöglichen sie erst das schnelle Berechnen aufwendiger und meistens nur
über numerische Algorithmen zu lösende Formeln z.B. bei der Parameterschätzung
in (generalisierten) linearen Modellen. Des weiteren können verallgemeinerte Algorithmen ohne größere Umstände wiederkehrende Aufgaben lösen, ohne dafür stets
den Lösungsweg neu zu erarbeiten, was besonders im Bereich von Simulationen,
Bayes-Inferenz und Graphikerzeugung eine deutliche Arbeitserleichterung bedeutet.
Auch nicht zu vernachlässigen ist die bequeme und zuverlässige Speicherung, Verwaltung und Abfrage von riesigen Datenmengen, die heutige Datenspeicher mühelos
stemmen können.
In dieser Arbeit sollen die bedeutensten Statistikwerkzeuge vorgestellt werden,
wie optimale Lösungwege aussehen und kurz eingeführt werden, welche Funktionen
sie für finanzökonometrische Fragestellungen bereit halten.
2
Kapitel 2
Vorstellen der Statistikwerkzeuge
2.1
2.1.1
PASW (SPSS)
Die Geschichte
• Die Firma SPSS wurde 1968 an der amerikanischen Universität Stanford von
Norman H. Nie, C. Hadlai (Tex) Hull und Dale Bent gegründet.
• Die Statistik-Software SPSS wurde im Jahr der Firmengründung in ihrer ersten
Version veröffentlicht.
• Anfänglich wurde die Software für Lochkarten-Systeme und Großrechner konzipiert. 1983 kam dann die erste PC-Version auf dem Markt.
• SPSS Inc. wurde 2009 von IBM übernommen.
• Seit 2010 wird die Statistiksoftware SPSS Statistics unter dem Namen PASW
(Predictive Analysis SoftWare) vermarktet.
Der Name SPSS hat im Laufe der 40-jährigen Geschichte eine große Wandlung
durchgemacht. Ursprünglich stand SPSS als Abkürzung für Statistical Package for
the Social Sciences, später für Superior Performing Software System und Statistical
Product and Service Solutions. Heutzutage gilt SPSS als ein Markenname.
2.1.2
Die Struktur
Die Software PASW ist ein modular aufgebautes Programmpaket zur statistischen
Analyse von Daten.
Das Basismodul ermöglicht das grundlegende Datenmanagement und umfangreiche statistische und grafische Datenanalysen mit den gängigsten statistischen Verfahren. Diese grundlegende Plattform ist in vier Einheiten unterteilt: dem Dateneditor,
dem Syntaxeditor, Scripteditor und einem Ausgabenavigator.
Im Dateneditor werden die für die Auswertung zugrunde liegenden Daten ähnlich einer relationalen Datenbank-Tabelle verwaltet. Die Variablenansicht dient der
Definition von Variablen und deren Eigenschaften; hier wird also die Struktur der
Daten festgelegt. In dieser Ansicht lassen sich auch jederzeit die Eigenschaften der
vorhandenen Variablen ablesen und ändern, z.B. Typ, Label, fehlende Werte und
3
Meßniveau. Die Datenansicht zeigt die eingegebenen Werte der definierten Variablen. Hier besteht die Möglichkeit, nach Werten zu suchen oder sie zu verändern.
Müssen die Daten für bestimmte Analysen umstrukturiert werden, so bietet PASW
dafür ein leicht zu bedienendes Werkzeug an.
Das Ausführen von statistischen Analysen erfolgt über eine Befehlssyntax. Diese
bietet wie richtige Programmiersprachen Konstrukte wie Schleifen und Abfragen, Variablen dienen hier jedoch nur zur flexiblen Ansteuerung von Funktionen, aber nicht
der Speicherung und Weiterverarbeitung von Ergebnissen. Eingegeben und ausgeführt wird er im Syntaxeditor. Da sich die Analysen auch über die Menüstruktur und
benutzerfreundlichen Eingabemasken (GUI) bewerkstelligen lassen, deren Umfang
an Einstellungsmöglichkeiten für die jeweiligen Befehle hier meist beschränkt sind,
besteht bei diesem Auswertungsweg die Möglichkeit, die hinter der GUI verborgenen Befehlssyntaxi in den Syntaxeditor übertragen zu lassen, wo dann die fehlenden
Einstellungen hinzugefügt werden können.
Für Automatisierungen von Abläufen gibt es einen Scripteditor, der Visual Basic
for Applications verwendet.
Die meisten mit einer Prozedur erstellten Ergebnisse werden im Ausgabenavigator (Viewer) dargestellt. Die Ergebnisse können dort nicht nur betrachtet, sondern
auch bearbeitet, formatiert, in ihrer Reihenfolge umstrukturiert oder auch gelöscht
werden. Er besteht aus dem Inhaltfenster, wo die eigentlichen Ergebnisse der Prozeduren ausgegeben werden, und dem Gliederungsfenster, was übersichtlich alle Objekte, die durch die Auswertung entstanden sind, auflistet.
Die Inhalte von Dateneditor, Syntaxeditor und Ausgabenavigator werden in getrennten Dateien abgespeichert. Zu beachten ist, daß Ausgabenavigator-Dateien,
die mit der Version 16 und kleiner erstellt wurden, mit den Versionen 17 und größer
nicht mehr gelesen werden können.
Für spezielle Anwendungen gibt es Zusatzmodule, die auf dem Basismodul aufsetzen. So hat sich AMOS als Erweiterung zur Durchführung von Strukturgleichungsmodellen etabliert, mit Forecasting lassen sich Zeitreihenanalysen durchführen, und als Schnittstelle zu anderer Software (R, Python) dient das Modul Statistics
Developer.
Eine Einführung in PASW bietet unter anderem das Buch von Nagel und Hatzinger [1].
2.1.3
Vor- und Nachteile
Im folgenden sollen die wesentlichen Gründe genannt werden, warum sich viele Anwender für PASW als ihr statistisches Werkzeug entschieden haben:
+ Es ist weltweit das am meisten verbreitete Statistikprogramm, es wird in vielen
Wissenschaftszweigen verwendet, z.B. in der Soziologie, Psychologie, Biologie,
Medizin und BWL/VWL.
+ Da PASW ein ausführbares Programm ist, stehen die vorhandenen Analysemethoden in schnellem Maschinencode.
+ PASW beinhaltet eine vollständige graphische Benutzeroberfläche (Graphical
User Interface, kurz GUI). Der Anwender kann jede Funktion bequem per
Menünavigation erreichen. Das Einstellen von Parametern und Einbinden von
Daten ist intuitiv.
4
Abbildung 2.1: Sitzungsbeispiel von PASW
+ Ein eigener und sehr guter Dateneditor gehört zur Basisausstattung dazu.
+ Die Ausgabe von Graphiken und Analyseergebnissen ist ohne weitere Bearbeitung publikumsreif.
+ Von ausgeführten Analysen kann auf Wunsch die entsprechende Befehlssyntax
automatisch erstellt werden.
+ Schnittstellen zu R und Python sind im Modul Statistics Developer enthalten.
+ Umständliche Programmierung mit der Befehlssyntax wird nun durch Visual
Basic for Applications vereinfacht. Automatisierungen sind damit gut gestaltbar.
+ Ein umfassendes Hilfesystem gehört zur Grundausstattung dazu.
Den Vorteilen stehen folgende Nachteile gegenüber:
- Es ist ein kommerzielles Programm, für dessen Nutzung jährliche Lizenzgebühren anfallen.
- Jüngere statistische Methoden sind im Allgemeinen nicht implementiert.
- Es bietet deutlich weniger (exotische) statistische Verfahren an als andere Software.
2.2
2.2.1
SAS
Die Geschichte
Der Name SAS stand ursprünglich als Abkürzung für Statistical Analysis System,
ein Auswertungsprogramm zur Analyse von Daten aus der landwirtschaftlichen Forschung, das Anfang der 1970er Jahre von Jim Goodnight, John Sall und weiteren
5
Forschern an der NC State University entwickelt wurde. Als die Nachfrage nach dem
Programm wuchs, wurde das Unternehmen SAS Institute 1976 gegründet, um die
Software zu entwickeln und zu vertreiben. Heute wird der Name SAS nicht mehr als
Abkürzung verwendet, sondern als Markenname.
2.2.2
Die Struktur
Zu den Kerntechnologien von SAS gehören die Skriptsprache SAS-Language (einschließlich der Statistikprozeduren und -funktionen), die SAS-eigene Datenbank
(SAS-Datasets), das Enginekonzept für den Zugriff auf unterschiedlichste Datenformate, die Multi Vendor Architecture, also die betriebssystemunabhängige und übergreifende Architektur sowie verschiedene Middlewarekonzepte (SAS-IntegrationTechnologies).
SAS ist heute sehr stark auf das Gewinnen von Informationen und Wissen aus
Unternehmensdaten ausgerichtet, also auf Datenintegration, Business Intelligence
und deren Anwendungen in unterschiedlichsten betriebswirtschaftlichen Bereichen.
Daher wurde seit 2004 die SAS Intelligence Platform aufgebaut, die es ermöglicht,
geschäftliche Daten unternehmensweit zu verarbeiten und zu verwalten. Den Kern
bildet die SAS Open Metadata Architecture für die durchgängige und einheitliche
Speicherung von Metadaten für verschiedenste Anwendungsbereiche. Darum gruppiert sich eine Vielzahl von Anwendungen für die Datenintegration und -auswertung
für ganz unterschiedliche Benutzerrollen in den Unternehmen.
Eine dritte anwendungsorientierte Schicht stellen die Lösungen für verschiedene betriebswirtschaftliche (zum Beispiel Marketing) oder branchenspezifische (zum
Beispiel Entwicklung von Medikamenten) Fragestellungen dar. Diese bauen auf den
Kerntechnologien und auf der Intelligence Platform auf.
Die SAS-Sprache (SAS-Language)
Der aktive technische Kern der SAS-Software war immer und ist auch heute noch
ein Interpreter (Prozessor) für die Skriptsprache SAS-Language. Diese besteht aus
einer Vielzahl von Anweisungen (Statements), die jeweils mit einem Semikolon abgeschlossen werden. SAS-Code ist eine Aneinanderreihung von Anweisungen, die
nacheinander vom Interpreter ausgeführt werden. Hinter den Anweisungen verbergen sich vorgefertigte Funktionalitäten zum Teil sogar weitere Programmiersprachen
aus ganz unterschiedlichen Bereichen (in den 80er-Jahren hieß so etwas 4GL).
In einem sogenannten Prozedurschritt (PROC STEP) können vorgefertigte Prozeduren mit typischerweise wenigen Zeilen Programmcode aufgerufen werden, um
deskriptive und schließende Statistiken zu berechnen, Berichte und Grafiken in unterschiedlichsten Formaten zu erstellten sowie Daten und Konfigurationen zu verwalten.
Insgesamt sind es über 350 Prozeduren, die je nach Anwendung und Lizenzstruktur
zu zirka 20 Produkten zusammengefasst sind.
Folgende Bestandteile enthält die SAS-Language:
• Der sogenannte Datenschritt (DATA STEP), der in einer sehr mächtigen,
SAS-eigenen Datendefinitions- und -manipulationssprache geschrieben wird,
die bereits vor SQL existierte und wesentlich mächtiger, zum Teil aber auch
umständlicher als SQL ist. Die Syntax lehnt sich ein wenig an die Programmiersprache PL/I an. Im Gegensatz zu SQL kennt der DATA STEP iterative
6
und bedingte Anweisungen sowie Arrays und viele weitere Konstrukte, die es
erlauben Daten jedweder Art zu lesen, zu verarbeiten und zu speichern.
• Eine umfangreiche Makro-Sprache, die nach dem Textersetzungsprinzip funktioniert und mit der man sehr flexible, unter Umständen aber auch schwer
wartbare Programme schreiben kann.
• Ein SAS-eigenes SQL, das einige Erweiterungen, aber auch einige Kürzungen
gegenüber ANSI-SQL besitzt. Es ermöglicht den Zugriff auf das SAS-eigene
relationale Datenbanksystem (s.u.) sowie, über die Datenschnittstellen von
SAS/ACCESS (s.u.), auf die Datenbanksysteme verschiedenster Hersteller und
auf die Standardschnittstellen OLEDB und ODBC.
• Der Pass-Through auf die SQL-Sprachen verschiedenster Datenbanksysteme
wie Microsoft SQLServer, Oracle, DB2 und MySQL, wobei direkt der jeweilige
SQL-Dialekt verwendet werden kann.
• Eine Matrixsprache namens IML (Interactive Matrix Language).
Für die Ausführung dieser Skriptsprache steht schon immer Betriebssystemübergreifend die SAS-Fensterumgebung (SAS Windowing Environment, früher SAS
Display Manager) zur Verfügung. Sie dient dazu, Programme zu schreiben und auszuführen und Daten, Ergebnisse und Protokolle anzusehen. Zusätzlich kann SASCode im Enterprise Guide (s.u.) entwickelt und ausgeführt werden. In einem Anwendungsentwicklungsszenario (s.u.) wird SAS-Code auf dem Server ausgeführt und
die Ergebnisse in Client-Anwendungen angezeigt.
Die SAS-eigene Datenbank
SAS enthält mit dem SAS-Data-Set ein einfaches und effizientes internes Datenbankkonzept, das ganz auf die Erfordernisse der Informationsgewinnung ausgerichtet ist. Im Gegensatz zu transaktionsorientierten Datenbanken ist der Data Set auf
hohe Geschwindigkeiten beim Lesen und Schreiben großer Datenmengen optimiert.
Transaktionen finden nicht auf Satz-, sondern auf Tabellenebene statt. Man kann
mit dieser Datenbank zwar arbeiten wie mit einer gewöhnlichen Datenbank, also
mit den Mitteln der oben beschriebenen Skriptsprache per SQL oder DATA-Schritt
Tabellen anlegen, Sätze einfügen, ändern und löschen und es gibt auch Indizierung,
referentielle Integrität und Audit Trails. Häufiger werden allerdings Tabellen während der Verarbeitung einfach komplett neu geschrieben, daher gibt es auch das
Konzept der Historisierung von Tabellen (Generation Data Sets).
Die Ausrichtung auf die Informationsgewinnung zeigt sich auch in dem sehr sparsamen Typenkonzept, es gibt eigentlich nur zwei Datentypen: Fließkommazahlen
und Zeichenketten fester Länge.
Tabellen werden zu Bibliotheken (Libraries) zusammengefasst. Je nach Betriebssystem kann eine Bibliothek physisch durch ein Verzeichnis in einem hierarchischen
Filesystem (unter Unix und Windows) oder durch ein anderes physisches Speicherkonzept (unter klassischem zOS) repräsentiert werden. Bibliotheken werden durch
logische Namen (sogenannte Librefs) referenziert.
Für den optimierten Betrieb sehr großer Datenbanken auf Basis des SAS-eigenen
Speicherkonzepts gibt es ein eigenes Serverprodukt namens Scalable Performance
Data Server (SPDS).
7
Für die Speicherung von Datenwürfeln (Cubes) gibt es einen eigenen OLAPServer von SAS.
Der Zugriff auf externe Daten
Der lesende und schreibende Zugriff auf und die Integration von Daten aus ganz
unterschiedlichen Datenbanksystemen und Dateiformaten ist bei der Informationsgewinnung essentiell.
Für den Zugriff auf relationale Daten gibt es das Konzept der SAS-Engine, das
den Zugriff auf SAS-Datasets, XML-Daten und alle unterstützten fremden Datenbanksysteme über die einheitliche Schnittstelle der Library Engines bietet. Das Programmpaket SAS/ACCESS ermöglicht den Zugriff auf alle wichtigen Datenbanksysteme (nicht nur Oracle, DB2, Microsoft SQL Server, MySQL), auf Datenbanken
über ODBC und OLEDB sowie auf Files in den Desktop-Formaten (Microsoft Excel und Access, dBase, CSV etc.), soweit sich diese als strikt relationale Tabellen
auffassen lassen. Einen Überblick gibt die Einstiegsseite zur Dokumentation von
SAS/ACCESS.
Auf fremde relationale Datenbanksysteme kann, wie bereits erwähnt, auch über
Pass Through zugegriffen werden, wobei die SQL-Syntax des jeweiligen RDBMS
verwendet wird.
Der lesende und schreibende Zugriff auf nicht-relationale Daten in den unterschiedlichsten Formaten ist äußerst flexibel über Anweisungen im DATA-Schritt
möglich.
Betriebssysteme
Bereits in den 80er-Jahren konnte man SAS-Programme auf dem PC entwickeln
und mit geringen Änderungen, die in erster Linie den unterschiedlichen Filesystemen
geschuldet waren, auf dem Großrechner einsetzen (und umgekehrt). Heute kann SAS
auf verschiedenen Varianten der Betriebssysteme Windows, Unix und zOS betrieben
werden.
Betriebssystemübergreifendes Client-Server-Computing war ebenfalls bereits in
den 80er-Jahren mit Hilfe von SAS/CONNECT verfügbar. Dabei dient eine SASInstallation als Client und eine andere als Server. Dies ist auch heute noch verfügbar,
tritt jedoch in den Hintergrund, da Anwendungen auf Basis von Java, Microsoft
Windows sowie Webanwendungen die Rolle der Clients übernommen haben.
Anwendungsentwicklung
Eine eigene Entwicklungsumgebung namens SAS/AF mit der Programmiersprache
SCL (SAS Component Language, früher SAS Screen Control Language) dient der
Anwendungsentwicklung auf Basis von objektorientierter Software. Eine Besonderheit ist die Möglichkeit, eigene portable und betriebssystemübergreifende Anwendungen zu schreiben. Dies hat jedoch durch die weitreichenden Möglichkeiten der
Java- und .NET-Plattformen mittlerweile stark an Bedeutung verloren.
Für die Entwicklung von Webanwendungen mit SAS gab es zunächst SAS/Intrnet,
das auf der Webserver-Erweiterung CGI basiert. Auch diese Technologie, bei der
HTML-Seiten mit Hilfe verschiedener Programmierschnittstellen insbesondere im
8
DATA-Schritt erzeugt werden, gilt heute als veraltet und wird abgelöst durch die
folgenden Technologien.
Heute dienen Java EE und Microsoft .NET als Integrations- und Anwendungsentwicklungsplattformen. Hierzu gibt es SAS Integration Technologies mit Clientund Server-seitigen Komponenten. Client-seitig stehen Klassenbibliotheken für das
Integrated Object Model (IOM) in Java und .NET zur Verfügung, die den Zugriff auf
die verschiedenen Funktionalitäten der SAS-Server erlauben. Für die Entwicklung
von Java-basierten Desktop- und Web-Anwendungen steht mit Appdev Studio eine
eigene, Eclipse-basierte Entwicklungsumgebung zur Verfügung. Server-seitig gibt es
den Workspace Server für langdauernde Sitzungen (ein Serverprozess pro Clientprozess), den Stored Process Server für die sequentielle Abarbeitung von ClientAnfragen (feste Anzahl von Serverprozessen mit Lastverteilung) den OLAP-Server
für die Speicherung von Cubes sowie den Metadatenserver für die Speicherung von
technischen, fachlichen und anwenderbezogenen Metadaten.
Ein wichtiger Teil von Integration Technologies ist die SAS Web Infrastructure
Platform, die als Basis für die Web-Anwendungen der SAS Intelligence Platform
(siehe unten) fungiert.
Integration Technologies enthält weitere Services, unter anderem auch die Möglichkeit, BI Web Services zu entwickeln.
Intelligence Plattform
Die SAS-Intelligence-Platform (seit SAS Version 9) gibt Unternehmen die Möglichkeit, komplexe Informationsgewinnungsprozesse in heterogenen IT-Infrastrukturen
aufzubauen und sich dabei auf eine hochspezialisierte Softwarearchitektur und auf
rollenspezifisch ausgerichtete Frontends zu stützen. Die SAS-Intelligence-Platform
integriert einen großen Teil der oben genannten Komponenten der SAS Software und
stellt zusätzlich Frontends unter anderem für Administratoren und DatenintegrationsEntwickler (Desktop-Java-Anwendungen), Power-User (Windows-Anwendungen, auch
integriert in Microsoft Office), und Informationskonsumenten (Webanwendungen)
zur Verfügung. Eine zentrale Komponente der Intelligence Platform ist der Metadatenserver für die anwendungsübergreifende Verwaltung von Metadaten.
Die genaue Handhabung von SAS/STAT findet sich im User’s Guide von SAS
[2].
2.2.3
Vor- und Nachteile
Im folgenden sollen die wesentlichen Gründe genannt werden, warum sich viele Anwender für SAS als ihr statistisches Werkzeug entschieden haben:
+ Es besitzt die leistungsfähigste Datenbankanbindung. Die Datenabfrage ist
mächtiger als SQL, riesige Datenmengen kann es mühelos verarbeiten.
+ Es ist ein weit verbreitetes Statistikprogramm, vor allem in der Biologie und
Medizin.
+ Da SAS ein ausführbares Programm ist, stehen die vorhandenen Analysemethoden in schnellem Maschinencode. bequem per Menünavigation erreichen.
Das Einstellen von Parametern und Einbinden von Daten ist intuitiv.
9
Abbildung 2.2: Sitzungsbeispiel von SAS/STAT
+ Ein umfassendes Hilfesystem gehört zur Grundausstattung dazu.
+ Es bietet eine Schnittstelle zu R.
Den Vorteilen stehen folgende Nachteile gegenüber:
- Es ist ein kommerzielles Programm, für dessen Nutzung jährliche Lizenzgebühren anfallen.
- Exotische statistische Methoden sind im Allgemeinen nicht implementiert.
- SAS beinhaltet keine vollständige graphische Benutzeroberfläche (GUI).
2.3
2.3.1
Matlab
Die Geschichte
Matlab wurde Ende der 1970er Jahre von Cleve Moler an der Universität New Mexico entwickelt, um den Studenten die Fortran-Bibliotheken LINPACK und EISPACK
für lineare Algebra von einer Kommandozeile aus ohne Programmier-Kenntnisse
in Fortran zugänglich zu machen. Zusammen mit Jack Little und Steve Bangert
gründete Moler 1984 The MathWorks und machte Matlab zu einem kommerziellen
Produkt, das zusammen mit einer ersten Funktions-Sammlung, der Control System
Toolbox, vor allem in der Regelungstechnik viele Anwender fand.
2.3.2
Die Struktur
Das Programm Matlab ist ein Entwicklungssystem für die Programiersprache MATLAB, eine proprietäre Programmiersprache, die auf der jeweiligen Maschine (Computer) interpretiert wird. Diese ist speziell auf numerische Berechnungen und die
grafische Ausgabe der Ergebnisse ausgelegt. Operationen mit (komplexwertigen)
Vektoren und Matrizen stehen dabei im Mittelpunkt.
10
Abbildung 2.3: Sitzungsbeispiel von Matlab
Die Java-Entwicklungsumgebung (Abb. 2.3) unterstützt den Programmierer durch
ein Workspace-Fenster, indem alle erstellten Variablen mit ihrer Dimension aufgelistet werden, und durch eine Auflistung der letzten Befehle mit Ausführungsdatum.
Da diese Java-Umgebung die reinen Matlab-Programme leicht ausbremst, sollte sie
- wie ihr Name es andeutet - lediglich beim Entwickeln genutzt werden. Fertige
Programme können in einer reinen Konsole ausgeführt werden.
Toolboxes enthalten eine Sammlung an Funktionen für konkrete Aufgabenbereiche (entsprechend der Pakete in R), die kommerziell erhältlich sind.
MATLAB bietet aus der objektorientierten Programmierung die Konzepte von
Klassen, Vererbung, Pakete, Pass-by-Value Aufrufen und Pass-by-Reference Aufrufen.
Den Arbeitsspeicher teilt sich Matlab, bedingt durch seine numerische Ausrichtung, in 8 Byte Blöcke ein. Das ist genau der Platzbedarf für eine Double-Variable,
also einer Zahl mit 16 Stellen plus der Information über die Position des Kommas.
Auf diese Weise werden die numerischen Operationen beschleunigt, allerdings auf
Kosten des Arbeitsspeicherverbrauchs, da auch andere Zahlenformate (z.B. Integer) intern als Double verwaltet werden, die unter anderer Verwaltung mit deutlich
weniger Speicherplatz auskämen.
Eine allgemeine Einführung bietet das Buch von Schweizer [3].
2.3.3
Vor- und Nachteile
Matlab kann bei vielen Anwendern mit folgenden Eigenschaften punkten:
+ Bei Matlab handelt es sich um eine Programmiersprache. Dem Anwender liegt
somit ein sehr flexibles Werkzeug in den Händen, mit dem leicht Automatisierungen, wiederholende Abläufe (notwendig bei Simulationen) oder gar neue
Funktionen erstellt werden können.
+ Matlab läuft auf allen großen Betriebssystemen und Plattformen, also Windows, UNIX und Macintosh.
11
+ Manche Nachteile von Matlab (siehe in der folgenden Auflistung) werden dadurch kompensiert, daß Matlab mannigfaltige Schnittstellen zu anderen Programmiersprachen (C, C++, FORTRAN) oder Datenbanksystemen bietet.
+ Eine große Zahl von höheren Funktionen und praktisch alle Standardfunktionen sind in das System integriert.
+ Grafische Ausgabefunktionen, bis hin zu Animationen und interaktiven Bedienelementen, sind in Matlab enthalten.
+ Das System läßt sich leicht erweitern. Sowohl durch Zukauf von Paketen, als
auch durch eigene Programme.
+ Die Laufzeit von Operationen mit Matrizen oder Vektoren kann sich fast mit
Compilersprachen messen.
+ Matlab-Programme laufen ohne Änderungen auf vielen Plattformen.
+ Für ein High-Level System ist die Verbreitung von Matlab sehr groß.
+ Um nach einer interessierenden Funktion oder Paket zu suchen, kann die sehr
übersichtliche Internetseite http://... verwendet werden.
Den Vorteilen stehen folgende Nachteile gegenüber:
- Bei Matlab handelt es sich um einen Laufzeitinterpreter, d.h. die Befehle werden erst bei ihrer Ausführung in Maschinencode übersetzt. Dies läuft deutlich
langsamer ab, als wenn der Code in einem separaten Schritt in Maschinencode
umgewandelt (kompiliert) wurde und erst dann ausgeführt wird. Für neuere
Versionen ist jedoch ein Compiler zusätzlich erhältlich, der MATLAB-Code in
C-Code übersetzen kann.
- Die Anforderungen an den Arbeitsspeicher sind sehr groß.
- Neue Methoden werden häufig von den Methodenentwicklern selbst in R programmiert und als Paket für die Allgemeinheit zur Verfügung gestellt. Damit
liegt R „am Puls der Forschung“. Durch dieses beständige Einbringen ist mittlerweile ein großer Pool an Paketen/Methoden verfügbar (Anzahl).
- Es ist Lizenzsoftware.
- Bei bereitgestellten Funktionen kann der Quellcode nicht eingesehen werden,
was ein Nachvollziehen verhindert, auf welche Weise die Ergebnisse zustande
kommen.
2.4
2.4.1
R
Die Geschichte
Der Pate für R findet sich in S wieder, einer Programmiersprache für Statistik,
stochastische Simulation und Graphik, die seit 1976 in den Bell Laboratories bei
AT&T (heute bei Lucent Technologies) entwickelt wird, die in der aktuellen Version
12
S-PLUS 7 für Microsoft Windows und einigen UNIX-Systemen (darunter LINUX)
kommerziell vertrieben wird. R selbst wurde als Projekt von Ross Ihaka und Robert Gentleman ins Leben gerufen, um für Lehrzwecke eine freie Implementation zu
schaffen. Es basiert auf den Ideen von der Programmiersprache S, jedoch nicht auf
dessen Code. Die zeitliche Entwicklung von R soll in der folgenden Aufzählung kurz
wiedergegeben werden:
1992 Beginn des R-Projects.
1993 Die erste Binärversion erscheint auf Statlib.
1997 Das R Development Core Team wird von Personen aus Forschung und Wirtschaft aus aller Welt gegründet.
1999 Die erste Distributed Statistical Computing Konferenz und gleichsam das
Treffen aller Mitglieder des R Development Core Teams findet statt. Sie wird
in einem zwei-Jahres-Rhythmus neu auferlegt.
2000 R-1.0.0 wird veröffentlicht, die erste vollständig kompatible Version zur Sprache S der Version 3.
2001 Die Zeitschrift R News wird erstmalig herausgegeben.
2004 Die erste R Anwenderkonferenz useR! wird abgehalten.
2010 ist die aktuelle Version R-2.11.0 (Stand: Mai 2010). Die Kernfunktionen lassen
sich mittlerweile durch x Pakete erweitern.
2.4.2
Die Struktur
Bei R handelt es sich um eine Programiersprache, die auf der jeweiligen Maschine
(Computer) zur Laufzeit interpretiert wird. Diese ist speziell auf numerische Berechnungen und die grafische Ausgabe der Ergebnisse ausgelegt und für die Lehre
konzipiert. Operationen mit (komplexwertigen) Vektoren und Matrizen stehen dabei
im Mittelpunkt.
R bietet aus der objektorientierten Programmierung die Konzepte von Klassen,
Vererbung, Pakete und Pass-by-Value Aufrufen.
Des weiteren ist R eine vektorbasierte Sprache. Jedes Objekt wird intern durch
einen Vektor repräsentiert. Rechenoperationen sind auf diese Datenstruktur hin optimiert worden (siehe 4.1.2, Seite 25).
Funktionen mit ähnlicher Thematik werden in so genannte Pakete (Libraries) gebündelt. Anwender können sich diese Pakete zur Grundausstattung hinzuinstallieren
und so ihr R-System individualisieren.
Ähnlich der Datenkapselung bei einzelnen Objekten gibt es in R eine Organisation des gesamten Arbeitsspeichers - sogenannte environments (Umgebungen),
in denen Objekte, nahezu ohne Interaktionen zu anderen gleichzeitig existierenden
Umgebungen, gebündelt werden können. Dies sorgt auch dafür, daß gleichnamige
Objekte oder Datensätze, die in unterschiedlichen Umgebungen vorkommen, gegenseitig geschützt werden. So wird für jedes geladene Paket (Library) und jeden
Funktionenaufruf eine eigene Umgebung geschaffen. Zudem gibt es den Workspace
13
(.GlobalEnv) als besondere Umgebung, in der alle Objekte, die direkt in der Konsole erzeugt werden, abgespeichert werden. Damit R (und der Anwender) weiß, auf
welches Objekt zugegriffen wird, wenn Namensgleichheit herrscht, sind folgende Scoping Rules festgelegt worden, die unter anderem festlegen, in welcher Reihenfolge
verschiedene Umgebung nach Objekten durchsucht werden:
• Der Workspace .GlobalEnv steht im Suchpfad an Stelle 0 („in der Mitte“).
• An letzter Stelle im Suchpfad (eine negative) steht das Paket base.
• Zwischen dem Workspace und dem Paket base werden Objekte, die mit library()
oder attach() eingehängt wurden, platziert.
• Beim Aufruf einer Funktion wird eine Umgebung geschaffen, die dem bisherigen Suchpfad vorangestellt wird, also mit positiver Stelle .
Wird im Code nun auf ein Objekt verwiesen, so läuft R den Suchpfad von oben
(größte positive Stelle) nach unten (kleinste negative Stelle) soweit ab, bis es in
einer Umgebung fündig wird. Auf diese Weise wird sichergestellt, daß immer das
aktuellste (zuletzt definierte) Objekt unter gleichnamigen Objekten auch als Erstes
gefunden wird. Der aktuelle Suchpfad kann mit der Funktion search() abgefragt
werden. Beim Starten von R (Version 2.11.0) sieht dieser wie folgt aus:
0
-1
-2
-3
-4
-5
-6
-7
-8
.GlobalEnv
package:stats
package:graphics
package:grDevices
package:utils
package:datasets
package:methods
Autoloads
package:base
Neu zu erzeugende Objekte müssen nicht zwangsläufig in der Umgebung erstellt
werden, in der man sich augenblicklich befindet. Folgende drei Zuweisungsbefehle stehen dem Programmierer zur Verfügung, wobei die ersten zwei vorgestellten
Befehle Sonderfälle vom dritten darstellen:
<- Das neue Objekt wird lokal, also in der Umgebung erzeut, in der man sich befindet. Dieser Befehl dürfte für die alltägliche Programmierung ausreichen.
<<- Das neue Objekt wird im Workspace (.GlobalEnv) erzeugt.
assign() Erzeugung des neuen Objekts in der gewünschten Umgebung.
Zusätzliche Regeln zu der oben beschriebenen üblichen Suchreihenfolge wurden
durch die Einführung von Namespaces geschaffen. Namespaces definieren, welche
Objekte für den Benutzer und andere Funktionen (im Suchpfad) sichtbar sind und
welche nur innerhalb des eigenen Namespace sichtbar sind. Dies verhindert Konflikte
zwischen Funktionen gleichen Namens in gleichzeitig benutzten Paketen.
Den Arbeitsspeicher teilt sich R, genau wie Matlab, in 8 Byte Blöcke ein, was
auch hier schnellere numerische Berechnungen und einen aufgeblähten Speicherverbrauch zur Folge hat.
Weitere Informationen zu R finden sich in [4], [5] und [6].
14
Abbildung 2.4: Sitzungsbeispiel von R
2.4.3
Vor- und Nachteile
Im folgenden sollen die wesentlichen Gründe genannt werden, warum sich viele Anwender für R als ihr statistisches Werkzeug entschieden haben:
+ Bei R handelt es sich um eine Programmiersprache. Dem Anwender liegt somit
ein sehr flexibles Werkzeug in den Händen, mit dem leicht Automatisierungen,
wiederholende Abläufe (notwendig bei Simulationen) oder gar neue Funktionen
erstellt werden können.
+ Einer der herausragenden Vorteile, auch gegenüber der anderen Statistik-Software, ist, daß es sich bei R um eine Open-Source-Software handelt und unter
GPL lizenziert ist. Es ist möglich, sämtlichen Quellcode einzusehen, so daß es
sich bei R an keiner Stelle um eine „Black Box“ handelt, denn es kann überall
nachvollzogen werden, wie und was gerechnet wird.
+ Aufgrund der Open-Source-Struktur von R werden fehlerhafte Programmsequenzen von versierten Anwendern schnell aufgefunden, worauf hin ein korrigiertes Update in wenigen Tagen zur Verfügung gestellt werden kann.
+ Es ist kostenlos beziehbar unter www.r-project.org.
+ Das System läßt sich leicht auf die eigenen Bedürfnisse durch Installation bzw.
Entwicklung von Paketen anpassen.
+ Die Laufzeit von Operationen mit Matrizen oder Vektoren kann sich fast mit
Compilersprachen messen.
+ R läuft auf allen großen Betriebssystemen und Plattformen, also Windows,
UNIX (Linux, Solaris, FreeBSD, AIX, ...) und Macintosh.
15
+ R-Programme laufen ohne Änderungen auf vielen Plattformen.
+ Ein weiterer Vorteil ist der Support, der für R von vielen Freiwilligen, darunter
die Mitglieder des R Core Teams, geleistet wird. Dazu gehört die meist sehr
schnelle und kompetente Beantwortung von Fragen auf der Mailingliste R-help
sowie die Unterstützung von Entwicklern auf der Mailingliste R-devel.
+ Neue Methoden werden häufig von den Methodenentwicklern selbst in R programmiert und als Paket für die Allgemeinheit zur Verfügung gestellt. Damit
liegt R „am Puls der Forschung“. Durch dieses beständige Einbringen ist mittlerweile ein großer Pool an Paketen/Methoden verfügbar (Stand 02.07.2010:
2449).
+ Manche Nachteile von R (siehe in der folgenden Auflistung) werden dadurch
kompensiert, daß R mannigfaltige Schnittstellen zu anderen Programmiersprachen (C, C++, FORTRAN), Datenbanksystemen (Paket RODBC) oder Graphiktools (Paket RGtk2, ggobi) bietet.
+ Um nach einer interessierenden Funktion oder Paket zu suchen, wurde eine
Suchmaschine eingerichtet, die unter
– http://finzi/.psych.upenn.edu/search.html bzw.
– http://CRAN.R-project.org/search.html oder in R selbst mit der Funktion
– RSiteSearch()
aufgerufen werden kann.
Den Vorteilen stehen folgende Nachteile gegenüber:
- Bei R handelt es sich um einen Laufzeitinterpreter, d.h. die Befehle werden erst
bei ihrer Ausführung in Maschinencode übersetzt. Dies läuft deutlich langsamer ab, als wenn der Code in einem separaten Schritt in Maschinencode
umgewandelt (kompiliert) wurde und erst dann ausgeführt wird.
- Die Anforderungen an den Arbeitsspeicher sind sehr groß.
- Ein oftmals genannter Nachteil von R ist das Fehlen einer vollständigen graphischen Benutzeroberfläche (Graphical User Interface, kurz GUI), wie sie etwa
in SPSS vorhanden ist. Das Paket Rcmdr bietet sehr eingeschränkt eine solche
GUI.
- Ebensowenig bietet R keinen eigenen Dateneditor an. Änderungen können nur
umständlich über Zuweisungen im Programmcode oder mit Hilfe der Funktion
fix() erfolgen.
- Bei der Graphikausgabe erzeugt R weder dynamische (bei Änderung der zugrunde liegenden Daten aktualisiert sich die Graphik mit), noch interaktive
(z.B. manuelles Rotieren einer 3D-Punktewolke) oder verknüpfte (z.B. Markierung eines Objektes in der einen Graphik führt zur Markierung desselben
Objektes in allen weiteren Graphiken) Graphiken.
16
2.5
2.5.1
Excel
Die Geschichte
1982 Als erstes Spreadsheet-Programm aus dem Hause Microsoft wird Multiplan
für das System CP/M vermarktet. Unter MS DOS kann es sich gegen das
Konkurrenzprodukt Lotus 1-2-3 nicht durchsetzen.
1985 Die erste Excel-Version für das Betriebssystem MacOS wird herausgegeben.
1987 Die erste MS Excel-Version wird für das Betriebssystem MS DOS und der
Softwareumgebung Windows präsentiert. Um die Identität mit der Mac-Variante
hervorzuheben, startet Excel unter DOS mit der Versionsnummer 2.05.
1993 Aufgrund der Namensgleichheit zu einem bereits existierenden Programm eines anderen Herstellers kommt es zu einem Trademark-Gerichtsstreit, in dem
festgesetzt wird, daß Microsoft bei Pressemitteilungen und juristischen Dokumenten als offiziellen Warennamen „Microsoft Excel“ verwenden muß.
2.5.2
Die Struktur
Bei MS Excel handelt es sich um ein Tabellenkalkulationsprogramm (SpreadsheetProgramm), die Eingabefelder (Zellen) sind als Tabelle angeordnet. Es steht dem
Anwender völlig frei, wie er die Zellen für seine Aufgaben befüllt, formatiert oder
mit Kommentaren versieht. Die Tabellenkalkulation findet hauptsächlich durch Referenzierung anderer Zellen statt, wobei dann deren Inhalt für die Berechnung von
Formeln und Funktionen verwendet wird. Der Zellbezug ist dabei auf die aktuelle
Tabelle nicht beschränkt; er kann auch auf andere Tabellen verweisen, die sogar in
anderen Excel-Dateien stehen können.
Die Ergebnisse lassen sich leicht in grundlegende Diagramme wie Zeitreihen-,
Säulen- oder Kuchendiagramme graphisch aufbereiten. Die erstellten Diagramme
können dabei entweder auf dem zugehörigen Tabellenblatt verankert oder als eigenständiges Objekt innerhalb der Datei abgelegt werden.
Eine andere kompakte Darstellung der Daten bietet sich in der Erstellung von
Pivot-Tabellen, die MS Excel ebenfalls unterstützt.
Kompliziertere Berechnungen oder Interaktionen mit dem Benutzer lassen sich
mit der Macro-Sprache Visual Basic for Applications bewerkstelligen.
2.5.3
Vor- und Nachteile
Im folgenden sollen die wesentlichen Gründe genannt werden, warum es lohnend ist,
sich in MS Excel einzuarbeiten:
+ Es ist weltweit das am meisten verbreitete Tabellenkalkulationsprogramm.
+ Die leichte und bequeme Dateneingabe macht MS Excel zu einem idealen
Dateneditor für andere Programme (z.B. R).
+ MS Excel besitzt eine vollständige graphische Benutzeroberfläche. Sämtliche
Befehle sind über das Menü zu erreichen.
17
Abbildung 2.5: Sitzungsbeispiel von MS Excel
+ Die erstellten Graphiken sind ohne größere Formatierungen publikumsreif.
+ Die Graphiken sind dynamisch, d.h. sie reagieren unmittelbar auf Veränderungen in ihren Datenzellen.
+ Reichlich Literatur ist zu dieser Software publiziert worden.
Nachteile von MS Excel
- MS Excel ist ein kommerzielles Programm, für das man einmalig einen (im
Vergleich zu den anderen kommerziellen Statistikprogrammen) geringen Preis
zahlen muß.
- Bei den implementierten Funktionen handelt es sich um Black-Boxen. Der
Anwender kann nicht nachvollziehen, wie die Ergebnisse zustande kommen.
- Es fehlen viele grundlegende statistische Methoden. Dieser Nachteil soll in der
2010er Version reduziert werden.
- Aufgrund der langsamen Rechengeschwindigkeit arbeiten die Algorithmen mit
kleinen Rundungen, was die Rechengenauigkeit beeinträchtigt.
- Matrizenrechnung kann, wenn überhaupt, nur sehr umständlich über Visual
Basic for Applications erfolgen.
- Es bietet kaum Schnittstellen zu anderer Software, die nicht zum Office-Paktet
gehört.
- Der zuverlässige Datumsbereich ist sehr begrenzt. So führen Daten vor 1900
häufig zu Problemen; das Jahr 1900 wird als Schaltjahr eingestuft.
- Die Software-Hilfe von MS Excel behandelt nur ganz grundlegende Fragestellungen bezüglich der Bedienung.
18
- In MS Excel 2007 wurde ein historisierendes Menüsystem programmiert, was
die Position der Befehle im Menü je nach Verwendung des einzelnen Benutzers
abändert. Hilfestellungen in z.B. Online-Foren können dadurch keine konkrete
Schrittabfolge (gehe in Menü ..., dann ...) angeben. Dies wurde in der 2010erVersion wieder abgeschafft.
- Aufgrund der Tabellenkalkulationsstruktur bestehen enge Verknüpfungen von
Daten, Rechenwegen und Ergebnissen, was das Anwenden der selbst erzeugten
Routinen auf neue Daten verkompliziert.
2.6
weitere Software
Weitere Software, deren Funktionen für Ökonomen interessant sind, sollen hier kurz
vorgestellt werden. Eine Übersicht über Statistiksoftware jedweder Ausrichtung bietet die Internet-Seite
http://de.wikipedia.org/wiki/Liste_von_Statistik-Software.
EViews Die Software hat ihren Einsatzschwerpunkt in der Verarbeitung von Zeitreihen. Alle wichtigen Methoden der Zeitreihenanalyse von einfachen AR-, MA-,
ARMA-, über ARIMA-, ARIMAX-, ARCH-, GARCH- hin zu State-SpaceModellen bzw. Zustandsraummodellen sind durchführbar. Sowohl Cross-Sections als auch longitudinalen Daten können deskriptiv und analytisch dargestellt werden. EViews beherrscht allgemeine ökonometrische und statistische
Analysen, die Generierung von Vorhersagen und Modellsimulationen, sowie
die Ausgabe von Graphen und Tabellen, z.B. für Veröffentlichungen. EViews
ermöglicht Daten-Organisation inkl. Datenbankzugriffe.
gretl gretl ist eine freie Statistik-Software, hauptsächlich für Ökonometrie. Der Name ist ein Akronym für Gnu Regression, Econometrics and Time-series Library.
Sie kann mit anderen Statistik- und Ökonometrie-Paketen verwendet werden,
z.B. X-12-ARIMA, TRAMO/SEATS oder R. Sie ist in C geschrieben und nutzt
das GIMP-Toolkit für die grafische Benutzeroberfläche. Die Benutzeroberfläche ist in verschiedenen Sprachen verfügbar, auch in Deutsch. Für Ergebnisse
wird Gnuplot für die Erstellung von Grafiken und unter anderem LaTeX für
numerische Resultate und Modelle genutzt. Eine Kommandozeilenversion ist
ebenfalls verfügbar.
Limdep Limdep hat seinen Anwendungsschwerpunkt im Bereich Auswertung von
Regressionsmodellen für diskret abhängige Variablen bzw. Zielgrößen (Logistische Regression). Alleinstellungsmerkmal der Software ist die verarbeitbare
Modellkomplexität, die im Wesentlichen nur durch praktische Modellüberlegungen, Arbeitsspeicher und Rechenzeit begrenzt ist. Neben Logistischer Regression ist ein weiterer Anwendungsbereich der Software die Zeitreihenanalyse. Für die Software Limdep gibt es ein Erweiterungsmodul mit Namen Nlogit.
Limdep findet verbreitet Anwendung in Forschung, Studium und Verwaltung.
Es wird eingesetzt für die Paneldatenanalyse und in der Ökonometrie. Es sind
Logit-, Probit-, Tobit-Modelle und „discrete choice“-Modelle rechenbar.
RATS „Regression Analysis of Time Series“ bietet, wie der Name bereits beinhaltet, schwerpunktmäßig viele Werkzeuge für das Erstellen von Regressions19
und Zeitreihenmodellen, so zum Beispiel SUR-, ARIMA-, GMM-, ARCH-,
GARCH- und VAR-Modelle. Gespeicherte Daten können aus Text-, Spreadsheet- oder Datenbankdateien entnommen werden.
JMulTi JMulTi ist eine interaktive Software, die zum Analysieren von univariaten
und multivariaten Zeitreihen entwickelt wurde. Es arbeitet mit einer JavaBenutzeroberfläche und verwendet eine externe Engine für die statistischen
Berechnungen. Implementierte Features sind unter anderem GARCH-, VAR-,
VEC- und ARIMA-Modelle.
RiskLink-ALM RiskLink-ALM (Aggregate Loss Module) ist eine Anwendung zur
Katastrophenmodellierung, die dahingehend entwickelt ist mit angesammelten
Versicherungsdaten zu arbeiten. Es sind in dieser Anwendung bereits Katastrophengefahrmodelle von über 40 Gebieten weltweit enthalten.
20
Kapitel 3
ausgewählte Funktionen für
Ökonometrie
In diesem Abschnitt sollen zum einen Pakete/Toolboxes von Matlab und R vorgestellt werden, die sich mit Themen der Finanzökonometrie beschäftigen, und zum
anderen aufgezeigt werden, welche Funktionen beider Systeme identische Aufgaben
handhaben.
Zusatzpakete
Ein sehr weit gestecktes Feld der Finanzökonometrie deckt die Matlab Financial
Toolbox ab. So ermöglicht sie u.a.:
• Berechnung und Analyse von Prices, Yields und Sensitivities für Derivate und
anderer Wertpapiere, und für Portfolios von Wertpapieren
• Ausführen von Securities Industry Association (SIA) kompatiblem Fixed-Income
Pricing, Yield und Sensitivity Analyse
• Portfolios analysieren und verwalten
• Hedging-Strategien gestalten und bewerten
• Risiko erkennen, messen und kontrollieren
• Analyse und Berechnung von Cash Flows, einschließlich Rates of Return und
Depreciation Streams
• Analyse und Vorhersage von ökonomischer Aktivität
• Visualisierung und Analyse von finanziellen Zeitreihendaten
• Gestaltung von strukturierten Finanzinstrumenten, einschließlich AuslandswährungsInstrumenten
Die Matlab Financial Derivatives Toolbox schränkt sich auf folgende Finanzprodukte ein: [?]onds, Bond Options, Caps, Fixed-Rate Notes, Floating-Rate Notes,
Floors, Swaps, Swaption, Callable und Puttable Bonds und Options (Asian, Barrier,
Compound, Lookback und Vanilla Stock)
Für R bietet die Organisation Rmetrics eine ganze Palette von finanzökonometrischen Paketen an:
21
fOptions, fExoticOptions, fAsianOptions, fAssets, fBonds, fPortfolio, fRegression, fExtremes, timeSeries, ...
Da die Pakete gemäß der R-Philosophie kostenlos innerhalb der R-Konsole mit den
Befehlen
source("http://www.rmetrics.org/Rmetrics.R")
install.Rmetrics()
mit Quellcode beziehen lassen, die Organisation sich deshalb über die Veröffentlichung von Literatur bezüglich ihrer Funktionen finanziert, bleibt hier ein konkreter
Aufgaben-Überblick wie bei den Matlab-Toolboxes verwehrt.
synonyme Funktionen
Bezüglich des Black-Scholes-Modells stehen unter anderem folgende Funktionen zur
Verfügung:
Matlab
(Financial Toolbox)
blsprice
R
(fOptions)
GBSOption
blsgamma
blsdelta
blslambda
blsrho
blstheta
blsvega
GBSGreeks
SAS
(?)
BLKSHCLPRC
BLKSHPTPRC
GBSCharacteristics
Während Matlab in der Funktion blsprice sowohl der Call-, als auch der PutPreis ausgegeben wird, zeigt die R-Funktion GBSOption lediglich denjenigen an, der
per Parameter gesetzt wurde, und SAS bietet dafür zwei selbstständige Funktionen
an. Bei den Griechen gibt es in Matlab jeweils eine eigenständige Funktion, in R
wird dies erneut über einen Parameter einer gemeinsame Funktion gesteuert. Preisals auch Griechenberechnung kann unter R mit GBSCharacteristics durchgeführt
werden.
Bei der Call- und Put-Preisberechnung mit gleichen Parametern kommt es zu
unterschiedlichen Ergebnissen zwischen Matlab (links) und R (rechts):
blsprice(
Price
Strike
Rate
Time
Volatility
)
=
=
=
=
=
GBSOption(
TypeFlag
S
X
b
Time
sigma
r
)
100,
95,
0.1,
0.25,
0.5
=
=
=
=
=
=
=
"c", #oder "p"
100,
95,
0.1,
0.25,
0.5,
0
Ergebnis:
Callpreis = 14.04
Putpreis = 6.51
Ergebnis:
Callpreis = 13.70
Putpreis = 6.35
22
Beim Heston-Nandi-Garch-Modell konnten bezüglich des Pricing und der Berechnung der Griechen nur Funktionen in R gefunden werden. Für die Parameterschätzung aus einem vorhandenen Pfad dienen die Funktionen ugarch aus Matlab
und hngarchFit aus R. Um einen Pfad zu simulieren stehen die Funktionen ugarchsim (Matlab) und hngarchSim (R) zur Verfügung.
Matlab
(Financial Toolbox)
ugarch
ugarchsim
R
(fOptions,
fExoticOptions)
HNGOption
HNGGreeks
HNGCharacteristics
hngarchFit
hngarchSim
Die letzte Auflistung befaßt sich mit exotischen Optionen:
Matlab
R
(Financial
(fExoticOptions)
(Derivatives Toolbox)
barrierbycrr
StandardBarrierOption
barrierbyeqp
barrierbyitt
ForwardStartOption
23
Kapitel 4
Leistungsoptimierung
Numerische Berechnungen großen Ausmaßes können gewaltige Anforderungen an
einen Rechner darstellen. Trotz der rapiden Verbesserungen in der Hardwareleistung
kann hier auf Leistungsverbesserung von Softwarealgorithmen nicht verzichtet werden, da sie es erst ermöglichen, mit Hilfe der neusten Hardware detailgetreuere Berechnungen laufen zu lassen, die in realistischere Ergebnisse münden. Man bedenke
zudem, daß manchmal eine simple Verdopplung der Geschwindigkeit bedeutet, daß
Programme statt zweier Tage nur noch einen Tag Rechenzeit benötigen, oder daß
Berechnungen statt über Nacht auch eben während der Mittagspause laufen können, daß sich also die Wartezeit auf benötigte Endergebnisse deutlich verkürzen läßt.
Schließlich ist es in den meisten Fällen einfacher und kostengünstiger, einen verbesserten Algorithmus zu konzipieren, als sich einen höherwertigen Rechner zuzulegen.
Gleiches gilt für den Speicherverbrauch von Programmen. Eine Verringerung des
Speicherverbrauchs bringt auch Geschwindigkeit, vor allem, wenn vermieden werden kann, daß virtueller Speicher verwendet werden muß. Virtueller Speicher ist
Speicher, der auf der Festplatte in sogenannten Swap-Bereichen erzeugt wird. Er
erweitert virtuell den Hauptspeicher des Rechners - mit dem Nachteil, daß er um
ein Vielfaches (Größenordnung: 103 ) langsamer als echter Hauptspeicher ist. Manchmal kann eine Verringerung des Speicherverbrauchs das Lösen von Problemen erst
möglich machen, wenn sonst z.B. gar nicht genügend Hauptspeicher zur Verfügung
stünde.
Da beim Programmieren oder dem Aufrufen von Prozeduren oft unterschiedliche Wege zum gleichen Ziel führen, sollen in diesem Kapitel die konkurrierenden
Strategien mit Empfehlung der effizienteren vorgestellt werden.
4.1
R und Matlab
Da R und Matlab sehr ähnlich funktionieren und dementsprechend viele Leistungsverbesserungen auf gleichem Wege stattfinden, sollen beide Systeme hier gemeinsam
behandelt werden.
4.1.1
Geschwindigkeit des Codes messen
Bevor versucht wird, irgend einen Programmcode zu beschleunigen, muß zunächst
herausgefunden werden, welche Teile davon besonders langsam laufen, denn minimale Verbesserungen von bereits recht schnellem Code rechtfertigen selten den
24
Aufwand, der beim Neukonzipieren der Programme anfällt.
einfache Stoppuhr (R und Matlab)
Eine einfache Zeitmessung geschieht in Matlab mit dem Befehlspaar tic und toc,
von dem tic die Stoppuhr startet und toc die verstrichene Zeit ausgibt. Diese
schlichte Implementation eignet sich gut fürs Vergleichen der Geschwindigkeit vom
alten und neuen Code.
In R erledigt die gleiche Aufgabe die Funktion system.time().
Beim Invertieren einer 1000 × 1000-Matrix zeigt sich z.B., daß beide Systeme in
etwa gleich schnell arbeiten (links Matlab, rechts R):
Y = zeros(1000, 1000);
for i = 1:1000
for j = 1:1000
Y(i, j) = 1000 * (i - 1) + j;
end
end
Y = sin(Y);
Y = Y + eye(1000);
x <- 1:1000000
Y <- matrix(data = sin(x),
nrow = 1000,
byrow = TRUE
)
tic
Z = Y^(-1);
toc
system.time(solve(Y))
Elapsed time is 1.733237 seconds.
User
1.33
diag(Y) <- diag(Y) + 1
System verstrichen
0.00
1.42
Profiling (R und Matab)
Eine wesentlich detailierte Darstellung der verwendeten Rechenzeit findet sich unter
Matlab mit den beiden Befehlen profile on; und profile viewer;, die den zu
optimierenden Code einrahmen.
Nachdem der entsprechende Code ausgeführt wurde erscheint ein Fenster, das
die Profiling-Informationen anzeigt. Beim Klicken auf self time gelangt man zu einer
Tabelle, in der die ausgeführten Funktionen nach der tatsächlich benötigten Zeit
sortiert sind. Wird nun eine Funktion angewählt, so wird gezeigt, welche Zeilen
von ihr am längsten für ihre Ausführung brauchten. Zu beachten dabei ist, daß das
Profiling zeilenweise und nicht befehlsweise arbeitet. Darum sollte immer nur ein
Befehl pro Zeile stehen, um eindeutig bestimmen zu können, welcher Befehl welchen
Zeitanteil hat.
In R erledigt die Funktion Rprof() diese Tätigkeit.
4.1.2
synonymer Code
Schleifen durch Vektoroperationen erstetzen (R und Matlab)
R und MATLAB Programme werden erst zur Laufzeit interpretiert. Dies scheint sie
auf den ersten Blick als unpassend für Berechnungen großen Ausmaßes zu machen.
Die Stärke von R und MATLAB liegt nun darin, daß sie auf kompilierte Bibliotheken
zurückgreifen, die dahingehend kodiert sind Operationen auf Daten, die als Vektoren
gelagert sind, effizient auszuführen. Dies gilt auch für Matrizen, da sie intern als
Vektor von Vektoren aufgefaßt werden.
25
Für Schleifenoperationen wurde derartiges nicht konzipiert, weswegen bei ihnen
sich die langsame Laufzeitinterpretereigenschaft von R und MATLAB voll niederschlägt. Aus diesem Grund sollen - soweit möglich - Schleifen durch Vektoroperationen ersetzt werden.
Das folgende Beispiel (in MATLAB-Code) greift solch eine Verbesserung auf.
Hier wird zu einem konkreten Bogenmaß der entsprechende Sinuswert mit Hilfe
einer Schleife berechnet:
abstand
bogen
i
= pi/30;
= 0;
= 1;
while bogen
x(i) =
bogen =
i
=
end
<= 2*pi
sin(bogen);
bogen + abstand;
i + 1;
Und nun die wesentlich schnellere Variante in Vektorschreibweise:
x = sin(0:(pi/30):(2*pi));
Verwendung geeigneter logischer Operatoren (R und Matlab)
Bei logischen AND- oder OR-Operationen hat man in R und Matlab die Wahl von
jeweils zwei Operanden:
&, | führt ein logisches AND oder OR auf Arrays Element für Element durch
&&, || führt ein logisches AND oder OR auf skalaren Werten mit Kurzausführung
durch
Bei if- und while-Ausdrücken ist es effizienter den Kurzausführungs-Operator
(&& oder ||) zu verwenden. Ihr großer Vorteil besteht darin, daß nur so viel der
Logikverknüpfung ausgewertet wird, wie zu einer konkreten Aussage benötigt wird.
Es muß also meist nie die gesamte Logikverknüpfung abgearbeitet werden. Weiß
man bei der Programmierung, daß eine Abfrage oft ein FALSE ergibt, so sollte sie
am Anfang der Logikverknüpfung gestellt werden.
Während im folgenden Beispiel bei der ersten Abfrage alle Aussagen ausgewertet
werden, um zum Ergebnis FALSE zu gelangen
if(FALSE & TRUE & TRUE & FALSE){...}
bricht die Überprüfung im zweiten Beispiel bereits bei der ersten Aussage mit
Ergebnis FALSE ab:
if(FALSE && TRUE && TRUE && FALSE){...}
Load and Save verwenden (Matlab)
Load und Save sind gegenüber low-lewel Datei-I/O-Funktionen wie fread und fwrite
dahingehend optimiert worden schneller zu laufen und Fragmentierungen im Arbeitsspeicher zu reduzieren.
26
parallele Programmierung (R und Matlab)
Die Beschleunigung von Hardware wurde in den letzten Jahren nicht nur dahingehend verbessert, daß die Chips immer kleiner und der damit zeitfressende Weg
zwischen ausführenden Einheiten verkürzt wurde, wodurch die Arbeitstaktung erhöht werden konnte, sondern auch, daß einem Benutzer mehrere unabhänige CPUs
für die Ausführung seiner Software zur Verfügung standen (Stichworte: Mehr-KernRechner, Cluster-Netzwerk, Cloud-Computing). Üblicherweise versucht das Betriebssystem unabhängige Befehle zu erkennen und diese gleichzeitig an den parallelen
Rechenarchitekturen auszuführen. Dies funktioniert deutlich effizienter, wenn dem
Betriebssystem gesagt wird, welche Codeabschnitte diese Vorgehensweise zulassen.
Eine Programmstruktur, die für parallele Auswertung besonders gut geeignet
ist, sind Zählschleifen (for), da hier die Anzahl der Iterationen und die Werte der
Schleifenvariable im Voraus bekannt sind. Greifen die einzelnen Schleifendurchläufe
zudem lediglich auf konstante Variablen zurück, also solche, die in den vorausgehenden Schleifendurchläufen nicht verändert werden (und damit keine Konstanten!), so
sind die jeweiligen Iterationen der Schleife unabhängig und können ohne Probleme
parallel ausgeführt werden.
Finden sich solche Zählschleifen im Code, so sollte man das Konstrukt parfor in
Matlab und die Funktion runParallel() im R-Paket rparallel verwenden. Zum
R-Paket rparallel ist allerdings zu erwähnen, daß es eine R-Version kleiner 2.10
benötigt (Stand Juni 2010).
Code in C und FORTRAN programmieren (R und Matlab)
Wenn alle bisherigen Schritte der Code-Optimierung ausgeschöpft sind und die Geschwindigkeit des Programms immer noch nicht gut genug ist, so bieten Matlab und
R Schnittstellen für die Programmiersprachen C und FORTRAN an, dessen Code
in reine Maschinensprache kompiliert wird. Kritisch dabei ist die Stelle der Variablenübergabe, da deren Verwaltung sich in C und FORTRAN deutlich zu R und
Matlab unterscheiden - eine Variable wird einem festen Typ (Integer, Double, ...)
zugewiesen, den sie im Verlauf des Programms nicht ändern kann. Zudem ist der
kompilierte Maschinencode betriebssystemabhängig und funktioniert in der Regel
auf alternativen Plattformen nicht.
4.1.3
effizienter Arbeitsspeichergebrauch
.Last.value löschen (R)
Das abschließende Ergebnis eines Top-Level-R-Ausdrucks wird stets in der Variablen
.Last.value (aus dem Paket base) abgespeichert. Erst danach wird der folgende
Code ausgeführt. Nachdem z.B. ein sehr großes Objekt erzeugt wurde, kann auf diese Weise sehr viel Arbeitsspeicher zusätzlich belegt werden. Unter Umständen führt
dies dazu, daß bestimmte Daten aus dem Arbeitsspeicher in eine Auslagerungsdatei
(Swap) auf der Festplatte verschoben werden müssen, damit genug Ressourcen für
anschließende Berechnungen im Arbeitsspeicher wieder zur Verfügung stehen. Dieses Auslagern von Daten und das spätere Zugreifen auf ausgelagerte Daten benötigt
extrem viel Zeit und sollte durch geschickte Programmierung vermieden werden.
Ein Weg, dieses Auslagern zu vermeiden, ist, daß die Variable .Last.value nach ei-
27
nem arbeitsspeicherfressenden Top-Level-R-Ausdruck-Ergebnis umgehend aus dem
Arbeitsspeicher gelöscht bzw. mit einem sehr kleinen Objekt überschrieben wird:
...
# z.B. ein großes Objekt wird erzeugt
BIG <- irgendeineFunktion(...)
# .Last.value direkt aus Workspace löschen
rm(.Last.value)
# alternativ ein sehr kleines Objekt erzeugen,
# wodurch .Last.value auch wenig RAM verbraucht
dummy <- 1
# oder .Last.value direkt ein kleines Objekt zuweisen
.Last.value <- 1
# erst jetzt weiteren Programmcode ausführen lassen
...
Speicherplatz reservieren (R und Matlab)
R und Matlab erzeugen Variablen on the fly: Speicherplatz wird erst dann reserviert, wenn die Variablen (mitten im Programm-Code) erzeut werden. Obwohl R
und Matlab danach selbstständig die Speichergröße von Objekten wie z.B. Matrizen
und Vektoren anpaßt, ist es in den meisten Fällen eine gute Idee, den letztlich benötigten Speicherplatz im voraus und mit Hilfe von Vektor-Ausdrücken zuzuweisen.
Diese Prä-Allokation erhebt nur einmal die zeitlichen Kosten, die für das Zuweisen
von Speicherplatz anfallen und es garantiert, daß benachbarte Vektor- und Matrizenelemente in aneinander grenzenden Orten im RAM gelagert werden, was bei späteren
Operationen auf diesen Elementen erneut schnellere Zugriffszeiten ermöglicht.
Ein Beispiel (was bestimmt nicht 1 zu 1 übernommen werden darf) dafür wäre das
Auffinden von Literatur in einer Bibliothek; genauer: man sucht nach zwei Bänden
derselben Zeitschriften-Reihe. Weiß man nun, daß die Bibliothek die ZeitschriftenReihen bündig und geordnet anbietet, so braucht man an der Information lediglich
die Lagerdaten des ersten Bandes heraussuchen und kann von dessen Standpunkt aus
unmittelbar den zweiten Band finden. Verwendet die Bibliothek die oben genannte
Ordnung nicht, sondern präsentiert die Bände an zufälligen Stellen des Gebäudes, so
müßte man nach dem Auffinden des ersten Bandes zur Information zurückkehren, um
zusätzlich die Lagerdaten vom zweiten Band einzuholen; eine deutlich aufwändigere
und langsamere Vorgehensweise.
Zudem sollen, wenn möglich, größere Variablen zuerst erzeugt werden und danach
kleinere. Würden zuerst kleinere Variablen in den Speicher geladen, so bestünde die
Möglichkeit, daß diese derart unglücklich abgelegt werden, daß im Anschluß eine
große Variable nur noch fragmentiert in die verbleibenden freien Bereiche paßt.
In den folgenden Beispielen (in MATAB-Code) soll erneut der Sinus-Wert zu
einem konkreten Bogen-Maß ermittelt und abgespeichert werden. Im ungünstig programmierten Fall wird bei jedem Schleifendurchlauf der Vektor x sukzessiv um ein
Element verlängert:
28
abstand
bogen
i
= pi/30;
= 0;
= 1;
while bogen
x(i) =
bogen =
i
=
end
<= 2*pi
sin(bogen);
bogen + abstand;
i + 1;
Eine bessere Speicherbehandlung bietet der anschließende Code. Hier wird x
durch eine Vektor-Funktion (zeros()) als Vektor mit 61 Nullen vorab erzeugt:
abstand
= pi/30;
anzElemente = 61;
x
= zeros(1, anzElemente);
% (2*pi)/(pi/30) + 1
% Prä-Allokation
for i = 1:61
x(i)
= sin(abstand * (x-1));
end
Variablentyp beibehalten (R und Matlab)
Das Abändern der Klasse einer bestehenden Variablen bremst R und Matlab aus,
da extra Rechenzeit benötigt wird, diese Umstellung auszuführen. Darum ist es
ratsam, anstatt eine bestehende Variable zu überschreiben die benötigten Daten
in eine neue Variable zu schreiben. Die einzelnen Modi von Variablen sind logical,
numeric, complex und character - in R abfragbar mit der Funktion mode().
Anstatt also eine Variable vom Typ numeric in eine vom Typ character abzuändern (in R-Code)
x <- 1.64
...
x <- "95%-Quantil der NV"
besser eine zweite Variable erzeugen:
x.num <- 1.96
...
x.char <- "95%-Quantil der NV"
Schleifen statt rekursive Funktionen (R und Matlab)
Wie im Abschnitt Die Struktur von R und Die Struktur von Matlab vorgestellt wurde, wird beim Aufruf einer Funktion für diese eine Umgebung im Arbeitsspeicher
erzeugt, also Speicherplatz belegt. Da eine rekursive Funktion sich immer wieder
selbst aufruft und dabei eine neue Instanz von sich selbst erzeugt, ohne daß die vorherige beendet ist, wird also in jedem Rekursionsschritt eine zusätzliche Umgebung
erzeugt. Wenn nun viele und/oder große Objekte innerhalb der Funktion erzeugt
werden oder an sie übergeben werden, so summiert sich der Speicherverbrauch über
29
alle benötigten Rekursionsschritte, auch wenn die Objekte zum Teil identisch sind.
Erst wenn der letzte benötigte Rekursionsschritt erreicht wurde, enden die erzeugten
Instanzen der rekursiven Funktion in umgekehrter Reihenfolge ihrer Erzeugung und
geben dabei den verwendeten Speicherplatz wieder frei.
Bei Schleifen hingegen bleibt die Zahl der Variablen und damit einhergehend der
benötigte Speicherplatz konstant. Sie werden lediglich bei jedem Schleifendurchlauf
aktualisiert.
Das folgende Beispiel (in R-Code) soll den Unterschied im Speicherverbrauch
verdeutlichen. Dabei soll die Fakultät von n berechnet werden. Zunächst der Algorithmus bei einem rekursiven Ansatz:
fak.rek <- function(n)
{
if(n == 1 || n == 0) return(1)
else
return(n * fak.rek(n - 1))
}
Bei n = 100 und einem (vermuteten) Speicherbedarf von 10 Byte pro Instanz
bedarf es an der extremsten Stelle ca. 1 MB. Bei der Schleifenlösung
fak.it <- function(n)
{
if(n == 1 || n == 0) return(1)
fakultaet <- 1
for(i in 2:n)
{
fakultaet <- fakultaet * i
}
return(fakultaet)
}
werden durchgehend (vermutet) lediglich 50 Byte benötigt.
4.2
SAS
Zu den Optimierungsvorschlägen für SAS sei angemerkt, daß sie nicht immer zu
schnelleren Programmlaufzeiten führen.
Ressourcenkontrolle
Mit Hilfe der folgenden beiden Systemoptionen kann man sich Informationen über
den Ressourcenverbrauch von SAS Programmen verschaffen.
FullSTimer Liefert Informationen über die Dauer, die verbrauchte CPU-Zeit und
den Hauptspeicherverbrauch eines DATA oder PROC Steps.
SASTrace Gibt Aufschluss darüber, wie der Zugriff auf relationale Datenbanksysteme (RDBMS) von der entsprechenden SAS ACCESS Engine durchgeführt
und welche Befehlsteile direkt an die Datenbank weitergeleitet und welche
Teile von SAS selbst ausgeführt wurden.
30
Steuerung von SAS-Systemoptionen
Neben den Optionen zur Kontrolle von Ressourcenverbräuchen gibt es im SASSystem zahlreiche Systemoptionen, mit denen die Verwendung der Ressourcen gesteuert werden kann:
CPUCount Setzt die Anzahl der Prozessoren, die SAS nutzen darf.
MemSize Gibt an, wie viel Hauptspeicher SAS maximal verwenden darf.
SortSize Reguliert den Anteil des Hauptspeichers, der für Sortierschritte reserviert
werden soll.
SumSize Legt fest, wie viel Hauptspeicher für Aggregationen bereitgestellt werden
soll.
BufSize Bestimmt die Größe eines Datenpaketes in einem Eingabe-Ausgabe-Schritt
(Gegenstück zu BufNo).
BufNo Bestimmt die Anzahl der Datenpakete in einem Eingabe-Ausgabe-Schritt
(Gegenstück zu BufSize).
Threads Aufteilung von SAS-Schritten in Threads (unabhängige Programmstücke,
die zeitgleich ablaufen können).
Komprimierung verwenden
Bei großen Datensätzen mit vielen alphanumerischen Variablen lohnt es sich, die
(globale) SAS-Option COMPRESS = CHAR einschalten und in Ausnahmefällen die (lokale) DATA-STEP-Option COMPRESS = NO zu nutzen, denn dies spart zum einen
Speicherplatz, reduziert den Aufwand bei I/O-Operationen und SAS entscheidet
selbst, wann sich ein Komprimieren der Daten lohnt. Trotz der höheren CPUAuslastung beim Dekomprimieren bleibt unterm Strich neben der Platzeinsparung
auch ein Zeitgewinn, da die CPU stets (deutlich) schneller ist als I/O-Operationen.
Im Beispielprogramm sollen aus der Urtabelle alle Benutzer herausgeschrieben
werden, deren Nachname nicht mit „A“ beginnt. Im ersten Programmcode soll der
Fall vorgestellt werden, wo ohne Komprimierung gearbeitet wird. Zunächst wird
explizit die globale Komprimierungsoption ausgeschaltet. Der erste DATA-STEP
kopiert die Urdaten Eins zu Eins in eine neue Datei (für sich allein nutzlos, hilfreich
jedoch beim Zeitvergleich beider Alternativen). Dann werden im zweiten DATASTEP aus der unkomprimierten Zwischentabelle die gewünschten Datensätze herausgefiltert und in die unkomprimierte Endtabelle geschrieben.
OPTIONS COMPRESS = NO;
DATA ZwischentabelleUnkomprimiert;
SET UrTabelle;
RUN;
DATA EndtabelleUnkomprimiert;
SET ZwischentabelleUnkomprimiert;
WHERE (Substr (BenutzerNachname, 1, 1) NE "A");
RUN;
31
Im optimierten Fall wird zunächst die Urtabelle mit Hilfe der lokalen Komprimierungsoption in eine kompakte Zwischentabelle Eins zu Eins übertragen. Im zweiten
DATA-STEP wird aus der komprimierten Zwischentabelle eine komprimierte Endtabelle mit der gewünschten Selektion erstellt.
DATA ZwischentabelleKomprimiert (COMPRESS = CHAR);
SET UrTabelle;
RUN;
DATA EndtabelleKomprimiert (COMPRESS = CHAR);
SET ZwischentabelleKomprimiert;
WHERE (Substr (BenutzerNachname, 1, 1) NE "A");
RUN;
Das gleiche Ergebnis wird erzielt, wenn zu Beginn die (globale) SAS-Option
COMPRESS = CHAR gesetzt wird:
OPTIONS COMPRESS = CHAR;
DATA ZwischentabelleKomprimiert;
SET UrTabelle;
RUN;
DATA EndtabelleKomprimiert;
SET ZwischentabelleKomprimiert;
WHERE (Substr (BenutzerNachname, 1, 1) NE "A");
RUN;
sparsames Datensortieren
Beim Sortieren von Daten mit PROC SORT reicht es oftmals aus, wenn die Datensätze bei gleichen Ausprägungen in den Sortiervariablen in zufälliger Reihenfolge
aufgelistet und nicht nach zusätzlichen Kriterien weiter sortiert werden, was weniger Aufwand und somit ein Leistungsgewinn bedeutet. Dies kann erreicht werden,
indem entweder die (globale) SAS-Option NOSORTEQUALS oder die (lokale) PROC
SORT-Option NOEQUALS gesetzt wird.
Zunächst das Beispiel mit lokaler Einstellung:
PROC SORT NOEQUALS
DATA = Urtabelle
OUT = Zieltabelle;
BY
Strasse;
RUN;
Und hier das Beispiel mit globaler Einstellung und gleichem Ergebnis:
OPTIONS NOSORTEQUALS;
PROC SORT
DATA = Urtabelle
32
OUT
BY
RUN;
= Zieltabelle;
Strasse;
Datei in den Hauptspeicher laden
Wird eine Datei wird im Gesamtablauf häufig gelesen bzw. modifiziert, so lohnt
es sich, diese Datei mittels dem Befehl SASFILE in den Hauptspeicher zu laden,
wodurch der Zugriff auf diese Datei sehr schnell von statten geht. Dies funktioniert
natürlich nur, wenn die Datei nicht zu groß bzw. der Arbeitsspeicher genügend groß
ist.
Laden einer Datei in den Hauptspeicher:
SASFILE Arbeitstabelle LOAD;
Die Datei entladen und somit den verwendeten Hauptspeicher freigeben:
SASFILE Arbeitstabelle CLOSE;
Views statt Zwischentabellen
Werden die Ursprungsdaten in aufeinander folgenden Schritten stark und auf komplexe Weise modifiziert, das Abspeichern von Zwischentabellen lohnt jedoch nicht,
da sich z.B. die Ursprungsdaten über die Zeit zu sehr verändern, dann bieten sich
Views an, deren Erstellung im Hauptspeicher und via schnellen temporären Tabellen stattfindet und praktisch keinen Speicherplatz benötigt. Nachteilig ist, daß bei
jedem Zugriff auf die View die Ursprungsdaten erneut gelesen und gegebenenfalls
komplex verarbeitet werden müssen, weshalb sich Views vor allem für einmaliges
„Nachschlagen“ eignen - bei öfterem Nachschlagen könnte eine per SASFILE in den
Hauptspeicher geladene Zwischentabelle effektiver sein.
PROC SQL NOPRINT;
CREATE VIEW ViewName AS
SELECT ...
FROM ...
[WHERE ...]
[GROUP BY ...]
[ORDER BY ...]
;
QUIT;
Hash-Tabellen verwenden
Soll in einem DATA STEP gleichzeitig nach mehreren Informationen in verschiedenen Tabellen nachschlagen werden, so kann die Verwendung von Hash-Tabellen
(Streuwert-Tabellen) die Suche deutlich beschleunigen. Das dabei verwendete HashVerfahren ist ein Algorithmus zum Suchen von Datenobjekten in großen Datenmengen. Es basiert auf der Idee, daß eine mathematische Funktion die Position eines Objektes in einer Tabelle berechnet. Dadurch erübrigt sich das Durchsuchen vieler Datenobjekte, bis das Zielobjekt gefunden wird; der Suchaufwand bleibt konstant (O(1))
33
- unabhängig davon, wie viele Datensätze die Tabelle enthält. Der große Vorteil
von diesem Verfahren ist neben dem schnellen Zugriff, daß mehrere Hash-Tabellen
gleichzeitig verwendet werden können und so mehrere Schlüssel-Spalten und DatenSpalten genutzt werden können. Ein schlecht gewählter Hash-Algorithmus erzeugt
jedoch Kollisionen, eine besondere Situation, in der mehrere Datensätze denselben
Hashwert erhalten. Dies benötigt eine spezielle Behandlung durch das Verfahren,
was die Suchleistung deutlich senkt.
Da die Verwendung von Hash-Tabellen nicht durch ein kurzes Beispiel erläutert
werden kann, soll hier auf die Arbeit von Elena Muriel [7] verwiesen werden.
4.3
Excel
Die Leistung von MS Excel bezüglich Tabellenkalkulation läßt sich auf verschiedene Weise verbessern. Zum einen können selbsterstellte Macros mit Visual Basic for
Applications die verfügbare Funktionalität drastisch erhöhen, zum anderen bieten
Add-Ins hilfreiche Erweiterungen, um mit der gewöhnlichen Zellbezugtechnik aufwendigere Lösungswege zu beschreiten. Den ersten Ansatz effizient zu verwenden ist
nichts anderes, als was für Matlab und R im vorherigen Abschnitt vorgestellt wurde,
weswegen hier dieser Ansatz nicht weiter vertieft wird (Eine Einführung in VBAProgrammierung findet sich auf den Seiten der Fernuni Hagen [8]). Zum zweiten
Ansatz soll der Solver vorgestellt werden.
Die gewöhnliche Tabellenkalkulation ist dahingehend ausgelegt, aus vorgegebenen Daten ein Ergebnis aus genau definierten Zwischenschritten zu formen. Dieser
Ansatz scheitert, wenn zum Lösen des Problems Parameter verwendet werden müssen, die unbekannt sind und eine unendliche Vielfalt an möglichen Ausprägungen
besitzen und sie nicht durch schlichte Formeln (z.B. arithmetisches Mittel) geschätzt
werden können. Dieses Problem tritt u.a. bei generalisierten linearen Modellen auf,
deren Lösung meist nicht geschlossen, sondern nur iterativ bestimmt werden kann.
Im Folgenden soll gezeigt werden, wie mit Hilfe des Add-Ins Solver eine logistische
Regression dennoch gefittet werden kann.
Im Beispiel soll die Ausfallwahrscheinlichkeit von Krediten anhand von Scores
gefittet werden. Zugrunde liegen dafür 100 beobachtete Scores mit der dazugehörigen
Information, ob der vergebene Kredit zurückgezahlt wurde (1: Ausfall, 0: zurückgezahlt). Die Wahrscheinlichkeit, daß ein Kredit ausfällt, soll (wegen der logistischen
Regression) mittels der logistischen Verteilungsfunktion erfolgen. Der Prädiktor enthält einen Intercept und einen linearen Einfluß des Scores:
exp(β0 + β1 Score)
1 + exp(β0 + β1 Score)
1
=
1 + exp(−β0 − β1 Score)
P (Ausfall = 1|Score) =
Die untere Formel wird wegen ihrer höheren Stabilität verwendet. In Excel-ZellbezugNotation sieht für die erste Beobachtung des Beispiels die Wahrscheinlichkeitsformel
in Zeile 5 und Spalte D wie folgt aus:
= 1 / (1 + EXP(-$I$5 -$J$5 * A5))
Für die Parameter β0 und β1 in den Zellen I5 und J5 empfiehlt es sich, 0 als Startwert zu verwenden. Die optimale Parameterwahl für die obige Formel soll - wie im
34
Abbildung 4.1: Add-Ins-Manager von MS Excel
GLM-Ansatz auch - über die Likelihood stattfinden. Unsere Zielgröße Ausfall ist bernoulliverteilt, deren Likelihood (für eine einzelne Beobachtung) für ihren Parameter
π ist somit:
L(π) = π Ausfall (1 − π)1−Ausfall
Erneut in Excel-Zellbezug-Notation übersetzt sieht für die erste Beobachtung des
Beispiels die Likelihood in Zeile 5 und Spalte E wie folgt aus:
= D5^B5 * (1 - D5)^(1 - B5)
Mit Rücksicht auf die Rechenstabilität soll für die Optimierung die log-Likelihood
verwendet werden, deren Berechnung in Excel für die erste Beobachtung des Beispiels
in Zeile 5 und Spalte F ganz einfach berechnet wird:
= LOG(E5)
Die gesamte log-Likelihood ergibt sich aus den Summen der Einzel-log-Likelihoods.
In dem Beispiel steht damit in Zelle G5:
= SUMME(F5:F104)
Dies ist nun die Zelle, deren Wert maximiert werden soll. Soweit noch nicht
geschehen wird der Solver spätestens jetzt über Menü Extras/Add-Ins-Manager
installiert bzw. geladen (Abbildung 4.1) und kann dann im Menü Extras/Solver
gestartet werden.
Abbildung 4.2 zeigt, wie die Parameter für den Solver in diesem Beispiel gesetzt
werden: die Zielzelle ist G5 (gesamte log-Likelihood), dieser Wert soll maximiert
werden und die veränderbaren Zellen sind I5 und J5 (Parameter der logistischen
Regression). Das Ergebnis zeigt Abbildung 4.3.
Die zusätzliche Graphik zeigt zum einen die Datengrundlage (X-Werte: Zellen
A5:A104, Y-Werte: B5:B104) und die Kurve der bedingten Wahrscheinlichkeiten
für einen Kreditausfall gegeben dem Score (X-Werte: Zellen A5:A104, Y-Werte:
D5:D104). Damit die Kurve der Wahrscheinlichkeiten einen optisch ansprechenden
Verlauf vernimmt, müssen die Score-Werte in Spalte A geordnet aufgelistet sein.
35
Abbildung 4.2: Eingabefenster für Solver-Parameter
Abbildung 4.3: mit Solver optimierte Lösung der logistischen Regression
36
4.4
abschließende Anmerkung
Gelangt man beim Optimieren zu dem Punkt, an dem man sich den Kopf darüber
zerbricht, ob der neu geschaffene Code die zu Grunde liegende Berechnung richtig ausführt, dann sollte man von dem Wunsch einer verbesserten Leistung lieber
Abstand nehmen. Folgenden Spruch sollte man sich stets bei Optimierungen im
Hinterkopf halten:
Code, der ungenaue oder sogar falsche Ergebnisse liefert, ist
unbrauchbar, egal wie schnell er ist!
37
Kapitel 5
Zusammenfassung
Wegen des eigenen Dateneditors und der leichten Bedienung geeignet sich PASW
gut für Statistik-Einsteiger und Standardanalysen.
Durch seine leistungsstarke Datenbank-Engine bietet sich SAS vor allem für die
Auswertung riesiger Datenmengen an, die zudem von unterschiedlichen Systemen
erstellt und abgelegt wurden.
Da R und Matlab als Programmiersprachen eine hohe Flexibilität aufweisen,
eignen sie sich für selbstkonzipierte, rechenintensive Verfahren wie z.B. Simulationen.
Bei den im Seminar besprochenen mathematischen und statistischen Modellen bieten
beide Programme den größten Umfang an bereitgestellten Funktionen an.
Excel ist aufgrund seiner Schlichtheit eher für einfache Berechnungen und Dateneingaben geeignet.
38
Literaturverzeichnis
[1] H. Nagel and R. Hatzinger. PASW statistics. Pearson Education, 2009.
[2] Sas Institute Inc. SAS/STAT 9.1 User’s Guide. SAS Publishing, 2004.
[3] Wolfgang Schweizer.
GmbH, 2008.
MATLAB kompakt.
Oldenbourg Wissenschaftsverlag
[4] Uwe Ligges. Programmieren mit R. Springer Berlin Heidelberg New York, 2007.
[5] Venables, Smith, R Development Core Team.
Pfad]\doc\manual\R-intro.pdf, 2010.
An Introduction to R.
[R-
[6] R Development Core Team. R Language Definition. [R-Pfad]\doc\manual\Rlang.pdf, 2010.
[7] Elena Muriel.
Hashing Performance Time with Hash
http://www2.sas.com/proceedings/forum2007/039-2007.pdf, 2007.
Tables.
[8] Johannes Gogolok. VBA: Programmierung mit Excel. ftp://ftp.fernunihagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf, 1999.
39
Herunterladen