Stránky

Weekend Reading

Veľmi sympatický projekt...
Viac info:
S tým súvisí:
Iné:

MT

18. 4. 2014

Výpočet kalibračného faktora

Pre lepšiu kalibráciu CGM systému, ktorým sa zaoberáme, je dobré vedieť ako systém počíta kalibračný faktor. Na internete je možné nájsť všeličo. Od pochybných odporúčaní až po serióznejšie výpočty ako napríklad tu: myparadigm.eu. Akoby zo zásady nikto neuvádza aspoň nejaké referencie alebo niečo na základe čoho by sa dalo usúdiť odkiaľ sú konkrétne informácie.

Systémom vypočítaný kalibračný faktor $CF$ je zapísaný v dátovom CSV súbore z CareLinku, čiže v tabuľke, ktorá obsahuje všetky údaje zo systému. Otázka je ako vypočítať to isté číslo $CF$ pomocou ISIGu a kalibračnej glykémie. Obe informácie sú tiež zapísané v CSV súbore.

Prvým krokom pri výpočte kalibračného faktora je spárovanie kalibračnej glykémie zodpovedajúcej hodnoty $ISIG$. Píše sa o tom napr. v patente č. US6426847Fig. 11. Koncentrácia glukózy v podkoží zaostáva za koncentráciou v krvi. Zhruba 10 minút (údajne empiricky zistené). Glukózový monitor preto počká nejaký čas od zadania kalibračnej glykémie a až potom spáruje kalibračnú glykémiu s nameraným ISIGom. Perióda vzorkovania ISIGu je 5 minút. Glukózový monitor spáruje kalibračnú glykémiu s treťou hodnotou ISIGu od času zadania (plus-mínus) kalibračnej glykémie. Výsledkom je oneskorenie až do 15 minút [US6426847, stĺpec 11, riadok 55].

Keď už máme spárované kalibračné hodnoty, potom výpočet kalibračného faktora závisí od
  • počtu predchádzajúcich kalibračných faktorov (prvý sa počíta inak ako ostatné)
  • doby používania konkrétneho senzora (napr. senzor sa reštartuje po 3 dňoch)
  • iné...
...aspoň tak sa píše v patentoch US6426847 a US20090112478. Presný algoritmus výpočtu kalibračného faktora použitý práve v systéme, ktorý skúmame, len tak ľahko nezistíme. Možností ako by to mohlo byť je naozaj veľa, čo dokazujú aj uvedené patenty. Môžme sa však aspoň priblížiť ku skutočnému algoritmu. Aj tak to môže byť užitočné.

Ukázalo sa, že systém počíta s jednotkami [mg/dl]. Ďalej, že hodnoty v CSV súbore sú prakticky vždy zaokrúhlené. K presným číslam, s ktorými počíta systém (glukózový monitor) sa nedostaneme. Preto ani výsledky, ktoré dostaneme nebudú rovné zapísaným v CSV súbore. Budú len „dostatočne blízke“.

Prvý kalibračný faktor

V nediabetickom denníku prišla prvá výzva ku kalibrácii 16.02. o 20:37. Zodpovedajúca časť CSV súboru je nasledovná:

TimestampVýstrahaKalibračná glykémia senzora (mmol/l)Glukóza zo senzora (mmol/l)Hodnota ISIGRaw-TypeRaw-Values
16.2.2014 20:36:00SensorCalCAL_TYPE=meter_bg_now, ISIG=25,9, VCNTR=null, BACKFILL_INDICATOR=null
16.2.2014 20:37:55Varovanie senzora: Zmeraj GK teraz (104)AlarmSensorALARM_TYPE=104, AMOUNT=0, ACTION_REQUESTOR=sensor
16.2.2014 20:41:00SensorCalCAL_TYPE=meter_bg_now, ISIG=26,02, VCNTR=null, BACKFILL_INDICATOR=null
16.2.2014 20:43:00CalBGForGHAMOUNT=81, ORIGIN_TYPE=manual
16.2.2014 20:43:264,5CalBGForPHAMOUNT=81, ACTION_REQUESTOR=pump
16.2.2014 20:46:00SensorCalCAL_TYPE=waiting, ISIG=26,02, VCNTR=null, BACKFILL_INDICATOR=null
16.2.2014 20:51:00SensorCalCAL_TYPE=waiting, ISIG=25,92, VCNTR=null, BACKFILL_INDICATOR=null
16.2.2014 20:56:004,425,87GlucoseSensorDataAMOUNT=80, ISIG=25,87, VCNTR=null, BACKFILL_INDICATOR=null
16.2.2014 20:57:00SensorCalFactorCAL_FACTOR=3,125
16.2.2014 21:01:004,426,13GlucoseSensorDataAMOUNT=80, ISIG=26,13, VCNTR=null, BACKFILL_INDICATOR=null

Alebo vo forme grafu:

Vypočítajme prvý kalibračný faktor. Kalibračná glykémia $CGB = 4,5$ [mmol/l] čo je $81$ [mg/dl]. V CSV súbore zapísané ako AMOUNT=81, viď tabuľka vyššie. Treria hodnota $ISIG$ od zadania $CBG$ je $ISIG = 25,87$ [nA]. Potom kalibračný faktor $CF$ [mg/dl/nA] je
$$ \begin{equation} CF_0 = \frac{CBG}{ISIG} = \frac{81}{25,87} \dot{=} 3,131    \end{equation}$$ kde index ${}_0$ znamená, že je to nultý $CF$ (pred ním neprebehla žiadna kalibrácia). Výsledok je „blízko“ k tomu čo je zapísané v CSV súbore.

Kalibračný faktor je vypočítaný v čase tretej vzorky ISIGu od kalibračnej glykémie. V CSV súbore však môže byť zapísaný neskôr. Aspoň tak sa zdá.

Nasledujúci kalibračný faktor

Ďalšia kalibračná glykémia bola zadaná o 2:26. $CBG=5,3$ [mmol/l], teda $95,4$ [mg/dl] zapísané ako AMOUNT=95. Použijeme $CBG=95$ [mg/dl]. Priraďme k tomu (viď tabuľka nižšie) $ISIG = 19,22$ [nA]. Potom
$$ \begin{equation} CF_c = \frac{CBG}{ISIG} = \frac{95}{19,22} \dot{=} 4,943  \end{equation}$$ Hodnota $CF_c$ nie je „dostatočne blízka“ kalibračnému faktoru zapísanému v CSV súbore. To preto, že ak existujú predchádzajúce kalibrácie, výpočet aktuálneho $CF$ berie do úvahy aj tieto. $CF_c$ je  len pomer aktuálnej kalibračnej glykémie k priradenému ISIGu. Predchádzajúci kalibračný faktor označme $CF_p$. V tomto prípade je to prvý v poradí, teda $CF_p = 3,131$ [mg/dl/nA].

Podľa všetkého, za štandardných okolností sa nasledujúci $CF$ vypočíta ako priemer hodnôt $CF_p$ a $CF_c$, teda
$$ \begin{equation} CF = \frac{CF_p + CF_c}{2} = \frac{3,131 + 4,943}{2} \dot{=} 4,037  \end{equation} $$ čo je opäť „dostatočne blízko“ k hodnote zapísanej v CSV súbore. Zodpovedajúca časť CSV súboru je v nasledujúcej tabuľke a na nasledujúcom obrázku:

TimestampVýstrahaKalibračná glykémia senzora (mmol/l)Glukóza zo senzora (mmol/l)Hodnota ISIGRaw-TypeRaw-Values
17.2.2014 2:26:00
3,419,78GlucoseSensorDataAMOUNT=62, ISIG=19,78, VCNTR=null, BACKFILL_INDICATOR=null
17.2.2014 2:26:255,3CalBGForPHAMOUNT=95, ACTION_REQUESTOR=pump
17.2.2014 2:31:003,419,6GlucoseSensorDataAMOUNT=62, ISIG=19,6, VCNTR=null, BACKFILL_INDICATOR=null
17.2.2014 2:36:003,319,41GlucoseSensorDataAMOUNT=60, ISIG=19,41, VCNTR=null, BACKFILL_INDICATOR=null
17.2.2014 2:41:004,419,22GlucoseSensorDataAMOUNT=80, ISIG=19,22, VCNTR=null, BACKFILL_INDICATOR=null
17.2.2014 2:42:00SensorCalFactorCAL_FACTOR=4,119
17.2.2014 2:46:004,319,07GlucoseSensorDataAMOUNT=78, ISIG=19,07, VCNTR=null, BACKFILL_INDICATOR=null



Problém s výraznou zmenou ISIGu

Podľa uvedeného postupu vypočítajme niekoľko ďalších kalibračných faktorov $CF$. Porovnanie s hodnotami $CF_{CSV}$ zapísanými v CSV súbore je v nasledujúcej tabuľke:
p.č. kalibrácie$CBG$$ISIG$$CF_c$$CF_p$$CF$$CF_{CSV}$
08125,87--3,1313,125
19519,224,9433,1314,0374,119
2887,6611,4884,0377,7635,079
3597,128,2877,7638,0255,464
4796,3212,5008,02510,2638,177
51086,0917,73410,26313,99913,443
61036,715,37313,99914,68614,742
7726,5710,95914,68612,82312,09

Výrazná a pomerne rýchla zmena v hodnotách $ISIG$, aká nastala v tomto prípade, je „neštandardná situácia“.  Ako vidíme z tabuľky vyššie v „neštandardnej situácii“ náš algoritmus nezodpovedá tomu skutočnému. Nami vypočítané $CF$ a skutočné $CF_{CSV}$ nie sú „dostatočne blízke“. Po čase, keď sa situácia s hodnotami $ISIG$ stala štandardnou sú $CF$ a $CF_{CSV}$ opäť „dostatočne blízke“. Pri štandardných podmienkach teda náš algoritmus funguje. Tým sme overili aj tvrdenia na myparadigm.eu.

Po 72 hodinách sa senzor musí opäť spustiť ako nový senzor. Odôvodnene sa domnievam, že aj výpočty skutočného $CF$ sa tým spustia nanovo. V nediabetickom denníku po 72 hodinách nenastali žiadne výrazné zmeny v ISIG hodnotách. Môžme to považovať za „štandardné“ podmienky pri meraní. Vypočítajme $CF$ pre údaje po 72 hodinách používania senzora podľa postupu uvedeného vyššie. Výsledky sú v tabuľke:
p.č. kalibrácie$CBG$$ISIG$$CF_c$$CF_p$$CF$$CF_{CSV}$
0835,15--16,11715,828
1855,0017,00016,11716,55816,385
2744,8015,41716,55815,98715,862
3765,2314,53215,98715,26014,767
4775,6813,55615,26014,40813,802
5746,3011,74614,40813,07712,518
6707,339,55013,07711,31310,309
7949,3510,05311,31310,68310,002

Vidíme, že pre „štandardné“ podmienky pri meraní, čo teraz znamená, že ISIG sa nemení nepredvídane, sme dostatočne dobre vypočítali kalibračný faktor.

Alebo nie?

MT

Medzery v CGM dátach

predchádzajúcich poznámkach sme ukázali ako jednoducho zaplátať konkrétnu medzeru v CGM dátach. Na nasledujúcom obrázku je (ledva) vidieť všetky ostatné zaplátané (rovnakým spôsobom ako v predch. pozn.) medzery v ISIGu v nediabetickom denníku.


Zároveň je znázornený priebeh kalibračného faktora ako je zaznamenaný v dátovom súbore z CareLinku. Naznačené sú skokové zmeny kalibračného faktora a tiež je vypočítaný interpolovaný kalibračný faktor.

V spodnom grafe na predchádzajúcom obrázku červený signál $SG$ prekrýva Glukózu zo senzora, pretože červený $SG$ je vypočítaný „štandardne“, teda $ISIG$ (zaplátaný) násobený kalibračným faktorom $CF$, ktorý sa mení skokovo. Zelený signál $SG$ je vypočítaný „neštandardne“, teda $ISIG$ násobený interpolovaným kalibračným faktorom.

Priblížme si jednotlivé zaujímavé časti. V prvom rade na začiatku merania počas prvej noci došlo k výraznému poklesu hodnoty signálu $ISIG$, viď obrázok:


Príčinou určite nie je pokles koncentrácie glukózy v krvi a teda ani v intersticiálnej tekutine. Skôr je to spôsobené zmenami v „prostredí“, v ktorom sa nachádzala elektróda senzora. Ťažko bližšie špecifikovať tieto zmeny.

Kalibračný faktor takpovediac zareagoval na tento výrazný pokles ISIGu s oneskorením. Príčiny tohto sú v tomto konkrétnom prípade rôzne. Nemá význam ich veľmi rozoberať a pripomínam, že sú to len prvé hodiny mojej vlastnej skúsenosti s CGM. V každom prípade oneskorená „reakcia“ kalibračného faktora vysvetľuje prečo do obeda (zhruba) ukazoval systém „nesprávnu“ glukózu zo senzora.

Ďalší obrázok ukazuje ako interpolovaný „spôsobí“ odstránenie skokovej zmeny v zobrazovanej glukóze zo senzora. O 6:21 sa po kalibrácii pomerne výrazne zmenil kalibračný faktor oproti predchádzajúcemu. ISIG bol v tom čase ustálený, čiže aj glukóza v podkoží. Výsledok je takpovediac nežiadúci skok v zobrazovanej glukóze zo senzora. Viď obrázok:


Na tomto obrázku je vidieť aj výraznú medzeru zaplátanú interpolovaným (dopočítaným) ISIGom. V túto nočnú hodinu som spal zrejme v nejakej „elektromagneticky nekompatibilnej“ polohe. Glukózový monitor stratil signál od vysielača na viac ako 40 minút a preto sa nezaznamenával nameraný ISIG a teda nezobrazovala sa ani glukóza zo senzora.

Nasledujúci obrázok ilustruje situáciu, keď ISIG je v podstate ustálený, kalibračný faktor sa zmení a prejaví sa to ako skok v zobrazovanej glukóze zo senzora. Interpolovaný $CF$ sa mení „plynulejšie“ a teda vo vypočítanom signále $SG$ pomocou interpolovaného $CF$ nie sú skokové zmeny. Zelený signál $SG$ preto lepšie zodpovedá merianiam glukomerom oproti červenému signálu $SG$. (Mimochodom, kalibračný faktor by sa, samozrejme, dal vypočítať aj vhodnejšie ako len lineárnou interpoláciou, ale to je na inú tému...)


Aby sme ukázali všetky zaujímavé úseky na tému medzery a skokové zmeny, tak koniec nediabetického denníka vyzerá nasledovne:


Kalibračný faktor začal pomaly klesať pretože ISIG začal kupodivu rásť. Pritom koncentrácia glukózy sa pochopiteľne nijako nezmenila oproti predchádzajúcim dňom. Zaujímavé.

MT

12. 4. 2014

Medzera v CGM dátach

V nediabetickom denníku je dňa 19.02. tesne pred 21:01 „medzera“ v zobrazovanej glukóze zo senzora. Je to vidieť aj na obrázku v predchádzajúcich poznámkach. Podobných medzier je v CGM dátach nediabetického denníka viac. Táto je však výnimočná. Otázkou je ako tieto diery zaplátať.

Výnimočná medzera

Vznikne nasledovne. CGM systém (konkrétne Guardian REAL-Time) ukončí činnosť senzora vždy po 72 hodinách. Presne to sa stalo v tomto prípade o 20:42. Systém vydal výstrahu Starý senzor. Keďže išlo o prvú výstrahu tohto typu pre daný senzor stačilo reštartovať činnosť senzora, teda spustiť senzor ako nový senzor. Fyzicky stále ten istý senzor potom pokračuje ďalších 72 hodín. „Nový senzor“ som spustil o 20:44. O 20:46 systém vyzval na zadanie glykémie pre kalibráciu. To znamená, že senzor už bol pripravený avšak čakalo sa na kalibráciu. Žiadna glukóza zo senzora sa na displeji nezobrazovala. Kalibračnú glykémiu som zadal o 20:49. O 21:01 sa obnovilo zobrazovanie glukózy zo senzora vypočítanej pomocou nového kalibračného faktora.

Plátanie medzery

Pri čakaní na kalibráciu sa glukóza zo senzora nezobrazovala ale signál ISIG sa meral a zaznamenával (s periódou vzorkovania 5 minút). V tomto prípade sú to „vzorky“ ISIGu v časoch 20:46, 20:51, a 20:56, viď Obr. 1. Pre úplné zaplátanie medzery chýba vzorka v čase 20:41. V tom čase bol však senzor „vypnutý“ preto systém nezaznamenal žiadny ISIG. Chýbajúcu vzorku možno dopočítať pomocou ostatných známych vzoriek, teda interpolovať. Najjednoduchšie lineárnou interpoláciou. Výsledok zaplátania medzery v ISIGoch je na nasledujúcom obraźku:

Obr. 1. Výnimočná medzera

Zaplátaný ISIG a výpočet SG

Máme zaplátaný signál $ISIG$ bez medzier. Poznáme kalibračné faktory pred aj za medzerou v CGM dátach. Vieme ako prepočítať $ISIG$ na glukózu zo senzora. Môžeme teda vypočítať signál $SG$ čo je vlastne „glukóza zo senzora“. Signál $SG$ je bez medzier na rozdiel od systémom zobrazovanej glukózy zo senzora. Výsledok je na nasledujúcom obrázku


Tvar signálu $SG$ takpovediac nezodpovedá priebehu signálu $ISIG$, ako ukazuje predchádzajúci obrázok. Z princípu CGM vieme, že by mal. Dôvodom je, že kalibračný faktor $CF$ sa mení skokovo ako je naznačené na obrázku.

Interpolovaný CF

Jednou z možností (jednoduchých) ako odstrániť skokové zmeny $CF$ je pospájať dané hodnoty kalibračného faktora úsečkami a pre každú hodnotu signálu $ISIG$ tak určiť samostatný $CF$. Inými slovami, opäť lineárna interpolácia „medzier“ v kalibračných faktoroch. Výsledok, teda interpolovaný $CF$, je na nasledujúcom obrázku:


Signál $SG$ vypočítaný pomocou interpolovaného $CF$ tvarom lepšie zodpovedá signálu $ISIG$. Navyše ak zažmúrime (lepšie keď zavrieme) oči, tak môžme povedať, že tento signál lepšie zodpovedá aj meraniam glukomerom. Áno, nedá sa to posúdiť pomocou dvoch modrých koliesok (merania glukomerom v grafe). Ja som si to však pozrel so zažmúrenými očami aj na iných častiach nediabetického denníka.

MT

7. 4. 2014

Weekend Reading

Prečo Weekend Reading? Pretože si potrebujem niekam zapisovať linky. Odkazy na stránky. Na toľko z nich som už zabudol, že až. Pretože aj tu sa to tak volá. Som na to zvyknutý a lenivý vymyslieť niečo iné. Pretože mi je jasné, že sa mi nechce udržiavať samostatnú podstránku s „linkami“ a toto je riešenie.

Okrem robotov google a iných vyhľadávačov to tu momentálne aj tak nikto nečíta, takže to aj tak zbytočne vysvetľujem.

...takže zbierka odkazov.

Skúsenosti s CGM:
Iné:


MT

4. 4. 2014

Prepočet ISIG na glukózu zo senzora

Softvér CareLink umožňuje export údajov vo forme dátového súboru. Tento súbor  obsahuje všetky možné údaje z CGM systému. Okrem iného sú v súbore zaznamenané časové priebehy glukózy zo senzora, kalibračného faktora $CF$ a signálu $ISIG$.

Systém zaznamenáva ISIG viac-menej vždy. Aj vtedy ak práve nezobrazuje na displeji hodnotu glukózy zo senzora. Glukóza zo senzora sa nezobrazuje napr. pri úvodnom warm-up senzora alebo pri čakaní na kalibráciu. Záznamy o ISIGu preto možno rozdeliť na dva typy. Hodnoty ISIGu, ku ktorým bola priradená glukóza zo senzora a ostatné zaznamenané ISIG hodnoty, napríklad tie počas čakania na kalibráciu.

Ako príklad uvažujme nediabetický denník, konkrétne údaje od 19.02., 17:15 až do polnoci. Na nasledujúcom obrázku sú dáta z denníka, ďalej hodnoty ISIG, tie ku ktorým je priradená hodnota glukózy zo senzora a nakoniec hodnoty kalibračného faktora.


Počas uvažovanej doby sa štyri krát meralo glukomerom pričom každé meranie bolo použité ako kalibračná glykémia senzora. Preto sa kalibračný faktor $CF$ štyri krát zmenil.

Overme či platí prepočet signálu $ISIG$ [nA] na glukózu zo senzora
$$ \begin{equation} \label{prepocet} SG = CF \cdot ISIG \end{equation} $$ kde $SG$ má byť „glukóza zo senzora“. V prvom rade, kalibračný faktor $CF$ je (zjavne) zaznamenávaný v jednotkách [mg/dl/nA]. My však chceme $SG$ v [mmol/l]. Prepočet [mg/dl] na [mmol/l] je nasledovný.

Molová hmotnosť molekuly glukózy je 180000 [mg/mol], teda 180 [mg/mmol]. Ak  je počet molekúl glukózy 1 mol, tak hmotnosť týchto molekúl, všetkých spolu, je 180 mg. Koncentrácia glukózy 1 [mmol/l] znamená, že v objeme jeden liter sa nachádza 1 mmol molekúl glukózy. To znamená, že v objeme 1 [l] je 180 [mg] glukózy. Potom v objeme 1 [dl] je 18 [mg] glukózy. Konečne, prevod je:
$$\begin{equation} \label{prevod} 1   \left[ \frac{\text{mmol}}{\text{l}} \right] = 18   \left[ \frac{\text{mg}}{\text{dl}} \right]  \end{equation}$$
Z uvedeného vyplýva, že prepočet $\eqref{prepocet}$ je potrebné prispôsobiť jednotkám kalibračného faktora $CF$, potom prepočet bude
$$ \begin{equation} \label{prepocet2} SG = \frac{CF \cdot ISIG}{18} \end{equation}$$ potom $SG$ je v jednotkách [mmol/l] pretože $CF$ je v [mg/dl/nA], $ISIG$ v [nA] a platí $\eqref{prevod}$.

Porovnanie výsledného signálu $SG$ so zobrazovanou glukózou so senzora je na nasledujúcom obrázku:


Vypočítaný signál $SG$, čo má byť „glukóza zo senzora“ nie je celkom zhodný so zobrazovanou a teda v dátovom súbore zapísanou hodnotou glukózy zo senzora. Dôvodom je, že CGM systémom zobrazovaná glukóza zo senzora je filtrovaná, inými slovami upravená tak aby mala hladký priebeh, a navyše zjavne aj zaokrúhlená.

Aký „ spôsob vyhladzovania“, presnejšie aký filter je v systéme použitý to v tejto chvíli neviem. Dá sa to odhadnúť, napríklad len tak nahrubo ako na myparadigm.eu, alebo trošku lepšie metódami identifikácie systémov. To však teraz nie je cieľom. Dôležité je, že s istotou poznáme jednotky $CF$ zapísaného v dátovom súbore, a že sme overili platnosť prepočtu $\eqref{prepocet2}$.

MT

3. 4. 2014