Artikelformat

Der Jojo-Effekt

Heute am Aschermittwoch beginnt mal wieder die Fastenzeit. Und der Kampf gegen die Kilos die die Waage unverschämterweise immer zu hoch anzeigt. Ich habe neben meiner Blutdruckstatistik auch eine über das Gewicht, weil ich mich ja seit Jahren jeden Morgen brav auf die Waage stelle und das dann wie es sich für einen Data-Scientist gehört auch entsprechend auswerte.

Es kommt mal wieder R zum Einsatz und das Datenfile ist jetzt noch einfacher gestrickt als bei den Blutdruckwerten:

Datum Zeit Gewicht
19.01.10 05:45 115.9
20.01.10 05:45 115.9
21.01.10 05:45 115.2

Der Sourcecode des R-Skriptes ähnelt erst mal sehr stark dem von der Blutdruckstatistik was ja dank Copy&Paste kein Wunder ist.

Nach diesen Zeilen haben wir in dem Dataframe wt_data also den Zeitstempel und das dazugehörende Gewicht drin. In den nächsten beiden Zeilen erweitern wir den Dataframe um Faktoren wie Monate oder Wochen.

Damit haben wir zu jedem Datum dann eine Information, zu welchem Monat oder welche Woche im Jahr es gehört. Das brauchen wir für die Auswertung. Zunächst schauen wir uns aber mal die Gewichtskurve der letzen dreißig Messungen an.

Damit wird dann eine solche Kurve erzeugt: gewicht-30 Das ist ziemlich zackig und hängt natürlich auch damit zusammen, dass moderne Waagen auf 100g genau (oder auch nicht, wir hatten da eine die schwankte um +- 5kg bei mehrmaligem Wiegen) anzeigen und die Werte also ungeglättet drin sind. Darum ist es eigentlich auch interessanter, wenn man ich einfach mal den ganzen Zeitraum anschaut. Bei mir wären das aktuel 1363 Messwerte, wenn ich die als Kurve in eine Graphik von 540 Pixel breite plotte sieht man exakt nichts außer viel schwarz. Also müssen wir mal die Kurve so aufbereiten, dass wir z.B. einfach für jeden Monat (deshalb vorher die Monatsstempel im Dataframe) einen Mittelwert bilden.

Die interessante Funktion hier ist „ddply“ das den Dataframe nimmt und mittels „summarize“ den Mittlerwert über alle Gewichtseinträge ermittelt die in der Spalte „month“ (unser Monatsstempel) den gleichen Wert haben. Den daraus resultierenden Dataframe können wir dann sehr einfach plotten:

gewicht-all

Hier sieht man sehr schön den sogenannten Jojo-Effekt, man nimmt ab und irgendwann später kommen die Kilos wieder, manchmal sogar mit Verstärkung.

Der letzte Plot betrachtet dann die letzen 12 Monate.

Hier berechnen wir erst mal den Startmonat der ein Jahr vom aktuellen Datum zurückliegt. Dann holen wir uns alle Daten aus dem Dataframe ab dem 1. dieses Startmonats in einen eigenen Dataframe (wt_range). Den plotten wir dann als Boxplot. Boxplots zeigen die Verteilung der Messwerte an, der schwarze Strich ist der Median, die Box definiert die 25% und 75% Qauntile. Die Ausreißer sind als schwarze Punkte dargestellt, der Mittlerwert des jeweiligen Monats ist durch einen roten Punkt repräsentiert. Der Plot sieht dann so aus:

gewicht-12Damit ist das Dilemma ausreichend gut dokumentiert und der Kampf gegen die Kilos geht weiter. Den Sourcecode für das R-Skript könnt ihr wie immer auch herunterladen.

Update: Wie Carsten in den Kommentaren richtig geschrieben hat sind die Graphen natürlich in gewisser Weise „Lüge mit Statistik“ da der angezeigte Wertebereich gerade mal die Spanne vom kleinsten bis zum größten Wert umfasst. Das ist ungefähr so wie wenn ich mit einem Mikroskop auf eine glatte Oberfläche gucke, die sieht bei entsprechender Vergrößerung auch aus wie ein Gebirgszug.

Zum Glück ist das in R ja sehr leicht zu ändern, wenn ich den Plot mit „+ ylim(0,130)“ aufrufe, dann läuft die Y-Achse tatsächlich von 0 bis 130. Und dann sieht der Verlauf der Jojo-Kurve natürlich viel „flacher“ aus:

weight-all-fullscale

Autor: Rainer

Diplom-Informatiker, Baujahr 1961, Vater von 2 Kindern, Hundehalter, Sportschütze und Vereinsvorstand, Hobbymusiker (mit zweifelhaftem Erfolg), politisch interessiert, Leseratte, Freizeit-Philosoph und letztlich Blogger.

2 Kommentare