Beispiele zum 
Experimental Data Analyst

ADDITIVE GmbH
Abt. Engineering & Science
Rohrwiesenstraße 2
D-61381 Friedrichsdorf/Ts.
  Tel.:  +49 6172 5905 30
  Fax:  +49 6172 77613
  email: mathematica@additive-net.de
  www:  http://www.additive.net.de

Die Mathematica Applications Library

Mathematica hat sich in den vergangenen Jahren als unentbehrliches Werkzeug im Ingenieurwesen etabliert. Es bietet dem professionellen Anwender, durch seinen mächtigen und fortschrittlichen Funktionsumfang, eine unerreichte Flexibilität bei der Analyse, Modellierung und Visualisierung der während der täglichen Ingenieurarbeit anfallenden Daten. Im Sommer 1994 startete Wolfram Research die Veröffentlichung der Mathematica Anwendungs-Pakete, die dem Benutzer sofort einsetzbare Funktionen aus speziellen Anwendungsbereichen bieten. Dem Anwender wird durch diese Pakete der schrittweise Einstieg in die Thematik bis zum Expertenwissen leicht gemacht. Die Zahl der Zusatzpakete wurde seit dieser Zeit auf über 30 Zusatzpakete erweitert.

Ein Übersicht zu den Zusatzpaketen ist aktuell im INTERNET zu finden.

http://www.additive-net.de/software/mathematica/packages/mma.packages.shtml

System Anpassung Demonstration

Mit den Beispielen in desem Dokument können Sie nur arbeiten, wenn Sie das Zusatzpaket installiert haben. Das ist bei Ihnen nicht der Fall.
Das Dokument stellt damit lediglich eine Demonstration der Möglichkeiten dar.
Nachfolgende werden Ihnen die Möglichkeiten des Zusatzpaketes aufgezeigt.

Die Mathematica Applications Library

Elecrical Engineering
Experimental Data Analyst
Finance Essentials
Fuzzy Logic Pack
General Optimization
Mechanical Systems
Optica
Technical Trader
Tensor in Physics
Time Series
Scientific Astronomer
Signals & Systems
Structural Mechanics
Industrial Thermics
Wavelet Explorer
TSiDynamics / TSiControls
Nodal
MathLive
InterCall
MathTensor
MathLink to Excel, Word und Access
Mathematica Link zu Origin

Einführung

Experimental Data Analyst ist ein System, welches Mathematica für die Analyse von experimentellen Daten erweitert.

Die wesentliche Eigenschaft, die experimentelle Daten charakterisiert, ist die Existenz von Fehlern. Diese Fehler einfach zu ignorieren hieße eventuell nützliche Information zu entfernen und kann dazu führen, daß die gewonnenen Ergebnisse keine Aussagekraft mehr haben. Experimental Data Analyst versucht Fehlerwerte bei der Bearbeitung von Daten zu verwenden und quantifiziert die Fehler im Ergebnis der Analyse.

Schauen wir uns einige der Leistungsmerkmale des Experimental Data Analysts an.

Visualisierung

Daten-Verteilung

Beginnen wir mit einer Situtation, bei der die Varianz so groß ist, das im Vergleich dazu die individuellen Fehler nicht signifikant sind.

\(\(		LoadData[Darwin]\)\)

?CrossFertilizedData

?SelfFertilizedData

Die Verteilung der Daten graphisch dargestellt:

Histogram[CrossFertilizedData];

Histogram[SelfFertilizedData];

Man kann  erkennen, daß die kreuzbefruchteten Pflanzen im allgemeinen größer sind als die selbstbefruchteten. Um dies zu quantifizieren können wir die in Mathematica eingebauten statistischen Routinen benutzen, oder eine Box-Graphik verwenden.

BoxPlot[{CrossFertilizedData, SelfFertilizedData}, 
      AspectRatio -> 1.5];

Die "Taille" der Box ist der Median der Daten, die "Schulter" das obere Quartil, die "Hüfte" das untere Quartil und die Linien repräsentieren die Grenze der Daten.

Damit wird visuell sehr deutlich, daß und wie sich die beiden Datensätze unterscheiden.

Explizite Fehler

Schauen wir uns nun Daten an, bei denen zu den verschiedenen Punkten explizite Fehler vorhanden sind.

LoadData[Reactance]

?ReactanceData

EDAListPlot[ReactanceData];

Die Horizontalen Balken repräsentieren den Fehler  in der  unabhängigen Variablen, in diesem Fall die Frequenz, und der vertikale Balken repräsentiert die abhängige Variable, hier den Cotangens der Phase.

Werden die Daten aus verschiedenen Experimenten mit unterschiedlichen Geräten zusammengestellt, so können sich die Fehlerwerte von Punkt zu Punkt unterscheiden. Dies ist auch der Fall, wenn sich die Fehler nicht-linear durch die Berechnung ausbreiten, wie das obige Beispiel zeigt.

Fitten

Da wir die Größen für die wahrscheinlichen Fehler  für jeden Punkt haben, werden wir diese auch in der Auswertung nutzen.

Der Fit einer Geraden an die Daten führt zu:

LinearFit[ReactanceData, {0, 1}, x]

Hieran können wir verschiedenes Interessantes sehen :
Der Experimental Data Analyst hat weniger versucht, den obersten Punkt zu erreichen, da bekannt ist, daß dieser den größten Fehler besitzt. Jedoch wurde versucht, die Gerade durch alle Fehlerbalken passieren zu lassen.
Das Ergebniss für die Parameter der Gerade (X[0] ist der Achsenabschnitt und X[1] die Steigung), zeigt auch deren berechnete Fehler basierend auf den Fehlern der Eingabedaten. x[0] ist -52± 12 und x[1] ist 0.00215± 0.0047. Die Graphik zeigt drei Geraden, die Gestrichelten sind die Grenzen der Geraden bei der Benutzung der Fehler des Parameters höchster Ordnung x[1]. 

Zusammengefasst zeigt sich, daß der Experimental Data Analyst die gesamte verfügbare Information  benutzt hat, um einen besseren Fit zu geben
als wenn nur die gemessenen Werte betrachtet werden. Desweitern erhält man noch eine Abschätzung für die Zuverlässigkeit des Ergebnisses. Bessere Antworten mit mehr Glaubwürdigkeit.

Robustes Fitten

Noch ein weiteres Beispiel, Daten aus der Datierung mittels Carbon-Methode:

LoadData[CThDating]

?CThDatingData

LinearFit[CThDatingData, {0, 1}, x]

In diesem Beispiel gibt es einen Punkt, der so weit von der "offensichtlichen" Gerade entfernt ist, daß trotz dessen großen Fehlerwert es die "gefittete" Gerade in dessen Richtung gezogen worden ist. Man ist versucht, Punkte die man nicht möchte zu entfernen, doch dies sollte auf einer quantitativen Grundlage basieren und nicht subjektiv durch den Wissenschaftler erfolgen. Genau das macht die robuste Fit-Routine des Experimental Data Analyst.

RobustCurveFit[CThDatingData, {0, 1}, x]

Dies liefert eine viel befriedigerendes Ergebnis, bei welchem die Gruppe der vier oberen Punkte nun näherungsweise auf der gefitteten Linie liegen und die zwei Ausrutscher ignoriert wurden.

Nicht-lineares Fitten

Die Lineare Fit Routine des Experimental Data Analyst beherrscht alle Fälle die  auch Mathematicas eingebauter Fit  kann. Das bedeutet, daß  es keine Beschränkung für die Größe des verwendeten Polynoms gibt und das der Benutzer auch Basissätze von nicht-polynomialen Funktionen definieren kann.

Es gibt ausserdem noch eine allgemeinere, nichtlineare Version. Hier sind ein paar simulierte experimentelle Daten, bei denen ein Fehler nur mit der abhängigen Variablen verknüpft ist.

data = 
      Table[N[{x, {Log[x] + Random[], Random[] + 1}}], {x, 1, 300, 10}];

EDAListPlot[data]

Nun benutzen wir unser Wissen über die Daten, um daran eine Logarithmus Funktion zu fitten.

FindFit[data,  a Log[b x + c],  x,  {{a, 1}, {b, 1}, {c, 1}}]

Wieder versucht der Experimental Data Analyst, die Fehler der gefundenen Parameter zu bestimmen.

Peak-Fit

Eine häufige Anwendung für nicht-lineares fitten ist der "Peak-Fit". Dabei wird als Modell eine Kombination von Peak-Funktionen angesetzt. Der Experimental Data Analyst unterstützt verschiedene Arten von Pear-Funktionen: Gauss, Lorentz und BreitWigner. Durch eine Kombination dieser und mit Hilfe von Anfangswerten für die Parameter können gute Ergebnisse erzielt werden.

Trotz der Werbe-Behauptungen für einige Produkte gibt es immer noch keine Möglichkeit, um automatisch bessere  Parameter zu finden, als ein Mensch es kann. Der Experimental Data Analyst stellt auch Funktionen zur Verfügung, um Startwerte für die Parameter zu finden, die in einfachen Fällen gute Ergebnisse liefern.

LoadData[Cobalt60]

?Cobalt60Data

EDAListPlot[Cobalt60Data];

Es ist ziemlich deutlich, daß hier ein Peak existiert, so daß man sich gut auf den eingebauten Peak Such-Algorithmus verlassen kann.

FindPeaks[Cobalt60Data, Gaussian, ShowProgress -> True]

Er schlägt eine  Funktion und zugehörige Startwerte für deren Parameter als Modell vor. Wir können diese als Parameter für die FindFit Routine benutzen, um einen kompletten Fit zu erhalten, der auch alle Fehler berücksichtigt.

FindFit[Cobalt60Data,(E^(-((((IndependentVariable - Center[1]))^2)/(2 Sigma[1]^2)))) Amplitude[1] + Bkgd[0] + IndependentVariable Bkgd[1],IndependentVariable,({{Bkgd[0], 175.331140350877179`}, {Bkgd[1], -0.0793859649122806931`}, {Amplitude[1], 145.611842105263171`}, {Center[1], 1830.00000000000007`}, {Sigma[1], 48.0000000000000071`}})]

Glätten von Daten

Eine andere Art Fehler in Daten zu behandeln besteht darin, sie durch Glätten zu entfernen. Als Beispiel hier die Cobalt60 Daten:

EDAListPlot[SmoothData[Cobalt60Data]];

Genauso wie in anderen Teilen des Experimental Data Analyst haben wir viel Kontrolle über den verwendeten Algorithmus und dessen Parameter, falls wir uns damit im Detail beschäftigen wollen.

Sind beispielsweise aufeinanderfolgende Werte so voneinander abhängig, daß ein positiver Fehler in einem Wert durch einen negativen Fehler im anderen kompensiert wird, so wäre die Methode "WeightedAverage" am besten angebracht.

EDAListPlot[SmoothData[Cobalt60Data, Method -> WeightedAverage]];

Wissen wir hingegen, daß die Fehler durch Rauschen begründet sind, so können wir sie über die Frequenz mittels "WeightedFourier" ausfiltern.

EDAListPlot[
      SmoothData[Cobalt60Data, Method -> WeightedFourier, Points -> 11]];

Fehlende Daten

Ein weiteres Gebiet von Problemen handelt von fehlenden Daten.

LoadData[Ozone]

?OzoneData

ListContourPlot[OzoneData];

In diesem Beispiel gibt es Löcher in den bekannten Daten, da die durch den Satelliten abgedeckten Bahnen sich nicht immer überlappen.
Die fehlende größere Fläche rührt eventuell von einer Fehlfunktion der Meßapparatur her. Wir können mit dem Experimental Data Analyst versuchen, die fehlenden Daten zu ergänzen.

ListContourPlot[FillData[OzoneData]];

Er hat dies mittels dem Wert des nächsten Nachbars vollbracht, aber für die größere Fläche ist dies so nicht möglich. Jedoch können durch Wiederholung dieses Verfahrens alle Punkte aufgefüllt werden.

ListContourPlot[FillData[OzoneData, MaximumIterations -> 2]];

Wahlweise können wir verschiedene Methoden benutzen, die eventuell angebrachter sind.

ListContourPlot[FillData[OzoneData, Method -> ColumnInterpolation]];

ListContourPlot[FillData[OzoneData, Method -> SmoothFill]];