Mittelwert verschieden langer Datenreihen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Montag 16. Oktober 2017, 12:08

Hallo!

Ich versuche den Mittelwert von verschiedenen Datenreihen zu berechnen. Das Problem ist, dass sie unterschiedlich lang sind und mein Mittelwert am Ende gegen das Ende der längsten Reihe strebt. Die angehängte Abbildung verdeutlicht mein Problem:

Bild

Die roten Dreiecke stellen den berechneten Mittelwert dar und diese sollten idealerweise mit den grünen Punkten deckungsgleich sein. Da am Ende allerdings Datenpunkte der blauen und grünen Kurve fehlen, läuft der Mittelwert weg.

Welche Möglichkeiten habe ich denn, um das möglichst elegant zu lösen? Mir wäre bisher nur Abschneiden eingefallen, dann bekomme ich aber das andere Extrem und der Mittelwert hört mit der blauen Kurve auf.

Vielen Dank!

zweihorn
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 16. Oktober 2017, 13:18

Es kommt ein bisschen auf die Natur der Daten an. Wenn du nicht abschneidest (was das einfachste und wahrheitsgemaesseste ist), dann bleibt dir nur Extrapolation. Und das wiederum heisst das du eine Funktion fitten musst. Die Daten die du zeigst sehen linear aus, dann geht das recht einfach. Du kannst aber auch Polynome etc fitten. Am Ende hast du dann 3 Funktionen, und berechnest an einer Stelle x die f,g und h von x, aus denen du dann deinen Mittelwert bildest. Ob das geht haengt aber eben sehr davon ab, wie gut die Daten sich fuer so ein Fitting eignen.
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Montag 16. Oktober 2017, 15:44

hmm... das hatte ich befürchtet. Abschneiden geht leider nicht, da es die Aussage der Daten ebenso "verfälscht", nur in die andere Richtung. Extrapolieren ist auch so eine Sache, ginge zwar prinzipiell, würde hier aber einen enormen Aufwand erfordern, da die Daten am Ende recht holprig sind...
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 16. Oktober 2017, 17:39

Einen Tod wirst du sterben muessen.
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Dienstag 17. Oktober 2017, 09:46

Neue Idee:

Ich normiere die Daten, so dass alle von 0 bis 1 gehen. Dann resample ich die einzelnen Reihen, damit ich passende Datenpunkte habe und einen Mittelwert bilden kann.

Parallel berechne ich den Mittelwert aus den jeweils letzten x-Werten. Dann skaliere ich den Mittelwert der normierten Reihen mit dem Mittelwert der letzten x-Werte. Mit den Daten meines Beispiels funktioniert das und da sich meine realen Daten nur sehr wenig voneinander unterscheide, sollte ein möglicher Fehler klein bleiben.

Habe ich da einen Gedankenfehler oder wäre das ein Weg?

Danke!
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 17. Oktober 2017, 10:13

Vielleicht verstehe ich da etwas nicht, aber ich sehe nicht, warum das dein Problem loest. Die Normierung aendert doch nur den Wertebereich, aber nicht die relativen Datenmengen zueinander. Das Grundproblem - entweder keinen Mittelwert wo keine Daten, oder geratene Daten - bleibt doch dabei auch erhalten :K
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Dienstag 17. Oktober 2017, 11:31

Wenn ich alle Daten auf einen Bereich zwischen 0 und 1 normiere, dann verschwindet das Problem mit den unterschiedlichen Endpositionen.

Wie sich das auf den Rest meiner Daten auswirkt, versuche ich gerade zu eruieren.
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 17. Oktober 2017, 11:57

Moment, du willst die *Zeit*-achse normieren? Oder was auch immer die genau ist, kann ja auch Versuchsnummer etc sein.. damit verlierst du doch die Korrespondenz zwischen Messwerten. Das ist dann doch komplett gelogen.
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Dienstag 17. Oktober 2017, 12:45

Ich versuche es nochmal genauer zu erklären:

Ich habe hier mehrere Messungen, die alle unter den gleichen Bedingungen erfolgt sind (Wiederholungsmessungen). Die y-Achse zeigt eine Spannung und x-Achse eine Kapazität. Die Kurven sind recht deckungsgleich, weisen allerdings eine natürliche Streuung auf. Jetzt hätte ich gerne den Mittelwert der Kurven, da es einfach übersichtlicher ist, eine anstatt 10 Kurven im Diagramm zu haben.

Da das einfache Mitteln der Werte am Ende das Ausgangsproblem aufweist, aber gerade die Schlusskapazität eine wichtige Größe ist, stört das Weglaufen des Mittelwertes. Daher dachte ich mir, dass ich die x-Achse einfach normiere, dann den Mittelwert bilde und letztlich die x-Achse mit dem Mittelwert der max. x-Werte wieder zurück skaliere. Da die Kurven alle recht gleich aussehen, dachte ich, dass es keine Verzerrungen geben dürfte, bzw. die recht klein ausfallen werden.
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 17. Oktober 2017, 13:07

Was du damit machst ist den die Werte der kleinsten Messreihe durch einen Faktor X zu dividieren, und alle mit einem anderen Faktor Y zu multiplizieren. Du verschiebst also alle Werte entlang der X-Achse. Das heisst dein Mittelwert wird auch an den Stellen, an denen er eigentlich gut zu bestimmen waere, verzerrt.

Und das Ergebnis ist doch nicht anders, als dein erster Ansatz: was du da siehst durch die Kurve ist einfach nur das angleichen des Mittelwerts an die Stellen, an denen du noch Daten hast. Jetzt pruegelst du einfach alle Daten so zusammen, dass dieses Ergebnis auch rauskommt, nur das vorher die Daten falscher sind.

Mir fehlt das physikalische Wissen ueber dein Problem. Und das statistische um solche Probleme schon haeufiger gehabt zu haben. Aber ich wuerde angesichts des gezeigten Bildes immer noch zu linearem fitting raten. Das gibt dir auch eine Varianz aus, womit du deine Kondensation in ein Diagramm hast, aber auch gleichzeitig die Unsicherheit darstellen kannst.
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Dienstag 17. Oktober 2017, 15:28

hm... ich glaube du hast recht. Im Prinzip suche ich so etwas wie eine "centerline". Gibt es da evtl. was?
__deets__
User
Beiträge: 3477
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 17. Oktober 2017, 15:32

Wie gesagt, lineares fitting. Gibt es in diversen Paketen, numpy hat da was etc. Misst du mal suchen, aus dem Kopf weiß ich das auch nicht.
zweihorn
User
Beiträge: 27
Registriert: Donnerstag 11. Mai 2017, 17:09

Dienstag 17. Oktober 2017, 17:39

ich dachte eher an so etwas, nur schon fertig: https://stackoverflow.com/questions/350 ... -2d-curves
Antworten