Bolus-Simulator Skript für gnuplot

  • Eigentlich war das als Antwort für den Thread Spritz-Ess-Abstand bei NovoRapid gedacht.
    Aber es ist ein bischen off-topic und der Post so lang mit den Bildern, dachte ich lieber ein eigener Thread.


    ---


    Ich stelle mir das mit dem SEA so vor:
    Essen lässt den BZ ansteigen.
    Insulin senkt den BZ.
    Wenn man die beiden Wirkkurven von IE und BE addiert, erhält man eine neue Funktion. Nämlich die Änderung des Blutzuckers.


    Ich hab da mal was vorbereitet.
    (Irgendwelche Extra-Effekte wie Resistenz bei hohem BZ usw werden ignoriert und BE-Faktor ist einfach 1)
    Obwohl das alles natürlich total vereinfacht ist, ist es doch halbwegs anschaulich und interessant was dabei rauskommt.


    Im Idealfall sieht das zum Beispiel so aus, gegessen wird eine BE und gleichzeitig wird eine IE gespritzt:
    [Blockierte Grafik: https://i.imgur.com/07612Jy.png]
    'essen' geht nach oben und würde den BZ um 20 angeben.
    'insulin' geht noch unten und würde den BZ um 20 senken
    Blutzuckeränderung = essen + insulin
    Hier ergibt das in der Summe sehr schön Null, also eine gerade Linie, weil die Kurven von essen und insulin sich genau aufheben.


    Kurzer Einschub wie es aussieht wenn man zu wenig spritzt, zum Beispiel 2 BE essen aber nur 1 IE spritzen:
    [Blockierte Grafik: https://i.imgur.com/NYKtFc1.png]
    essen würden den BZ um 40 angeben, insulin aber nur um 20 senken.
    In der Summe "fehlt am Ende etwas", die rote BZ-Linie geht nicht wieder auf 0 zurück.
    (Man müsste also nachspritzen oder vielleicht wollte man absichtlich einen hohen BZ)



    Problem ist dass es arger Zufall wäre, wenn die Wirkkurven von Essen und Insulin immer zusammen passen.
    Sagen wir die BE wirken doppelt so schnell wie das Insulin. 1 BE essen, 1 IE spritzen, aber die BE wirkt doppelt so schnell wie das Insulin:
    [Blockierte Grafik: https://i.imgur.com/2KJQ6qu.png]
    Die orangene BE-Linie steigt nun steiler als die grüne Insulin-Kurve runtergeht.
    Man sieht das nach ~4 Stunden der BZ wieder beim Anfangswert ankommt, aber zwischen hoch ging.
    Maximalwert etwa bei 12.


    Nun mit 1 IE spritzen, eine Zeiteinheit warten, dann 1 BE essen;
    [Blockierte Grafik: https://i.imgur.com/67nHIjP.png]
    Jetzt ist der BZ nur noch um umgefähr 3 gestiegen. (vorher 12!)
    Allerdings ging der BZ vorher auch erstmal runter, wenn man also schon einen tiefen BZ-Wert vor dem Essen hatte so würde man erstmal unterzuckern.
    Die Unterzucker wäre allerdings nur durch den zu langen SEA verursacht und würde dann wohl von selbst wieder weggehen sobald das essen wirkt.
    Aber gut ist das ja trotzdem nicht.


    Versuchen wir mal mit kürzerem SEA:
    Nun mit 1 IE spritzen, eine halbe Zeiteinheit warten, dann 1 BE essen:
    [Blockierte Grafik: https://i.imgur.com/DJFWGQi.png]
    der BZ geht nun um etwa 8 nach oben.


    Fazit:
    SEA=0 -> BZ ging um 12 hoch
    SEA=1 -> BZ ging nur um 3 hoch, dafür leider Unterzucker während der Mahlzeit
    SEA=0,5 -> BZ geht um 8 hoch. Nicht so gut wie bei SEA=1, aber dafür ohne Unterzuckerung und besser als gar kein SEA.


    ---


    Das Skript:
    ###################


    #############
    #############
    SEA = 0
    BE = 5
    IE = 3
    BEspeed = 0.5
    IEspeed = 1
    ##########
    #############


    reset


    # Scale font and line width (dpi) by changing the size! It will always display stretched.
    set terminal svg size 400,300 enhanced fname 'arial' fsize 10 butt solid
    set output 'out.svg'


    set grid
    set xtics 1
    set ytics 10
    set yrange [:]
    set xrange [-3:]


    set offset graph 0.1, graph 0.1, graph 0.1, graph 0.1


    set ylabel "Änderung BZ"
    set xlabel "Zeit"


    xoffset = -2



    #set xtics add ("essen & spritzen 0" "0") rotate by 90 right
    set xtics add ("spritzen" SEA) rotate by 90 right
    set xtics add ("essen" "0") rotate by 90 right

    essen(x) = ((( tanh(x*BEspeed+xoffset)) *BE)+BE)*10
    insulin(x) = ((( -tanh(x*IEspeed+xoffset-SEA)) *IE)-IE)*10
    BZ(x) = essen(x) + insulin(x)


    set title "BE:".BE ." IE:".IE . " SEA:".sprintf("%1.2f",SEA)."\n"." BE-Speed:".sprintf("%1.2f",BEspeed)."\nInsulin-Speed:".sprintf("%1.2f",IEspeed)


    set style line 1 linewidth 3 lc 7 lt 3
    set style line 2 linewidth 3 lc 3 lt 3
    set style line 3 linewidth 4 lc 1 lt 3
    set key outside bottom horizontal box
    plot essen(x) ls 1, insulin(x) ls 2, BZ(x) ls 3 title "BZ(x)=essen(x)+insulin(x)"


    ###############################


    einfach kopieren und auf http://gnuplot.respawned.com/ einfügen. (oder normales gnuplot installieren)
    In den ersten Zeilen in "####-Kasten" kann man die Werte für BE, IE usw ändern und gucken was für eine Grafik dann dabei rauskommt.

    Einmal editiert, zuletzt von Pelzlöffel ()

  • Danke Pelzlöffel für die Mühe mit diesem gnuplot-Thread und den ausführlichen Erklärungen dazu. Die Kurven machen die Verläufe sehr anschaulich.


    Schade, dass die Einflüsse auf den Blutglucosespiegel in Art und Wirkung so vielfältig und individuell verschieden sind. Darüber hinaus sind sie für uns 'Normalsterbliche' ja auch nicht mal annähernd quantifizierbar. Etwas wie Muskelauffüllung, Dawn-Phänomen, Insulin-Reorptionsgeschwindigkeit, Bedeutung des Fettgehalts einer Mahlzeit, Auswirkung von Infekten oder dem weibliche Zyklus können wir maximal schätzen, aber nicht im Sinne einer in eine Formel einsetzbaren Zahl exakt bestimmen. Und selbst wenn wir es könnten, würde diese Zahl morgen oder schon in einer halben Stunde wahrscheinlich nicht mehr zutreffen.


    So bleibt wirklich nichts anderes übrig, als die konsequente Auswertung der eigenen BZ-Verläufe.


    Aber vielleicht ist das auch gut so, denn was hätten wir hier sonst noch zu schreiben bzw. zu diskutieren ;-)


    Liebe Grüße vom Arbyter

    Das Leben ist zu kurz für ein langes Gesicht!

  • Danke Pelzlöffel für die Mühe mit diesem gnuplot-Thread und den ausführlichen Erklärungen dazu. Die Kurven machen die Verläufe sehr anschaulich.


    Schade, dass die Einflüsse auf den Blutglucosespiegel in Art und Wirkung so vielfältig und individuell verschieden sind. Darüber hinaus sind sie für uns 'Normalsterbliche' ja auch nicht mal annähernd quantifizierbar. Etwas wie Muskelauffüllung, Dawn-Phänomen, Insulin-Reorptionsgeschwindigkeit, Bedeutung des Fettgehalts einer Mahlzeit, Auswirkung von Infekten oder dem weibliche Zyklus können wir maximal schätzen, aber nicht im Sinne einer in eine Formel einsetzbaren Zahl exakt bestimmen.

    Wieso denkst Du, dass das nicht gehen sollte? Bzw. was machst Du denn anderes, wenn du Effekte schaetzt?


    Beispiel:
    Du hast von der letzten durchstandenen Infektion gelernt, dass Malzeitenbolus+Korrekturen zu einem Insulinverbrauch von 1.4 x Normalfaktor gefuehrt hat. Also: beim naechsten Mal (Tag) spritzt Du gleich 1.3xFaktor, wenn die Nase laeuft. (Natuerlich mit eventuell engerer BZ-Ueberwachung).


    Das ist ein sehr einfaches Modell, es kann sicher teilweise schiefgehen, ist aber immer noch besser als nur hinterher zu reagieren,
    wenn der BZ voellig aus der Bahn ist.


    Nur Mut zu empirischen Modellen!
    Martin

    Einmal editiert, zuletzt von FraOrolo ()

  • Erstmal: Danke, Pelzlöffel für die Mühe und die schicken Grafiken. Ich finde das zur Erklärung sehr anschaulich - vor allem für Nicht-Diabetiker, die nicht glauben wollen, dass ich nach dem Spritzen dann doch was essen muss, da ich mir das Insulin nicht wieder raussaugen kann (wenn der Chef noch was von Dir will, Du aber schon das Zeug im Bauch hast und jetzt nicht noch mal ne halbe Stunde warten kannst).


    Leider funktioniere ich auch nicht so gradlinig, dass ich dass so schön flach hinbekomme. Bei mir fährt das Leben häufiger mal Achterbahn und der BZ - der Trottel - fährt mit. Ich führe ja noch altmodisch Tagebuch, weil ich mir einbilde, dass ich dann den SEA für oft wiederkehrende Mahlzeiten-Zusammensetzungen immer mal nachschauen kann und dann nicht mehr so häufig danebenliege.


    Und? Für Pommes und Schrippen sowie Eiweissbrot funktioniert das auch prima - allerdings zusätzlich mit unterschiedlichen Insulinen. So langsam kann ich nämlich kein Brötchen essen, um es mit Novo Rapid in den Griff zu bekommen.


    Und es gibt auch Fälle, wo exakt die gleiche Mahlzeit sich unterschiedlich auswirkt. Einmal klappt es, einmal überhaupt nicht. Und nicht immer finde ich eine Ursache. Und dann gibt es die Fälle, da habe ich auch mal keine Lust, mich mit den 30 Minuten "auf der 160" zu beschäftigen und übe mich in Gleichmut - ist dann eben so.
    Wirklich krasse tiefe Werte (<70) würde ich mit der Dehnung des SEA nicht riskieren. Das wäre mir zu heikel als Experiment. Dann doch lieber noch mal beherzt zustechen und korrigieren - oder ne halbe Stunde radfahren.

    Man sollte eigentlich niemals im Leben die gleiche Dummheit machen, die Auswahl ist schließlich groß genug (Bertrand Russell).

  • Das ist ein sehr einfaches Modell, es kann sicher teilweise schiefgehen, ist aber immer noch besser als nur hinterher zu reagieren,
    wenn der BZ voellig aus der Bahn ist.

    Doch, so wie es derzeit scheint, kann ich nur nachträglich reagieren. Ich vermute, ich habe gerade meinen ersten Infekt seit Beginn meiner 'Insulinkarriere' hinter mir. Ich vermute es, denn ich fühlte mich in keiner Weise krank. Jedenfalls nicht mehr, als die üblichen Befindlichkeitsschwankungen im Rahmen unterschiedlicher Tagesform. Andererseits habe ich aber keine andere Erklärung dafür, dass meine Bolusrate von heut auf morgen plötzlich beim 1,7fachen lag, was nach 4 Tagen auch wieder vorbei war. Einzige für mich momentan sinnvoll erscheinende Erkärung: Ich hab mir einen Infekt eingefangen, den das Immunsystem aber noch rechtzeitig in den Griff bekommen hat. Und ein Immunsystem auf Hochtouren hat eben seinen Preis.


    Ich will damit sagen, das mein Insulinbedarf plötzlich ohne erkennbare Vorwarnung in die Höhe ging. Nun kann ich aber bei einem hohen BZ (wenigstens zur Zeit noch) nicht ausschließen, dass ich mich einfach mal bei den KH verschätzt habe. Gerade jetzt zur Zeit von Weihnachtsmärkten/-feiern. Und ich weiß, dass BZ-Ausreißer nach oben, gerade wenn am Abend aufgetreten, bei mir auch Auswirkungen auf den Insulinbedarf des nächsten Tages haben können. Ich werde also derzeit eher nicht geneigt sein, wegen zwei oder drei erhöhten Messwerten meine Bolusrate 'vorausschauend' auf 160 % zu setzen. Also laufe ich leider doch der Entwicklung hinterher und kann nur nachträglich korrigieren. Aber ich hoffe demnächst auf etwas mehr Klarheit, bin ich doch seit Sonntag mehr oder weniger glücklicher Träger eines Libre-Sensors.


    Aber trotzdem Danke für deinen Hinweis Martin, den ich sehr wohl verstanden habe. Ich hoffe, den Rest bringt die Erfahrung dann mit sich. Wie sagt Professor Gerd Gigerenzer immer so schön: Intuition ist gefühltes Wissen.


    Liebe Grüße vom Arbyter

    Das Leben ist zu kurz für ein langes Gesicht!

  • Toll gemacht Pelzlöffel. Ich habe mal mit den Kurven rumgespielt. In der Zeile 'set terminal' musste ich die fsize Option löschen, weil mein gnuplot dabei einen Fehler meldet. Gut, mal zu sehen, wie man gnuplot anwenden kann.


    Vor zwei Wochen habe ich mir das Programm sowieso installiert, weil ich meine Enlite Sensorkurven grafisch auswerten will. Ich zeichne die Kalibrierfaktoren über die Sensorlebensdauer und kann damit wunderbar sehen, wann ein Sensor auszutauschen ist. Das zeige ich demnächst mal im CGM Thema.