Analiza wystąpienia udaru niedokrwiennego mózgu

Czytanie zajmie Ci około 14 minut
Zanonimizowana próbka danych NFZ dotycząca wystąpienia udaru niedokrwiennego mózgu NFZ opublikował dane, zobaczmy czy coś ciekawego z nich można wyciągnąć?

Dzisiaj wpis gościnny – autorstwa Dominiki Kuc. Opublikowałem na Dane i Analizy link do danych z zaproszeniem do skorzystania z nich. We wpisie na fanpage’u napisałem też, że jeśli ktoś zechce to mogę go opublikować tutaj. Dominika skorzystała i przygotowała analizę. Widzicie jak łatwo?

A teraz oddaję już miejsce na Waszych ekranach Dominice.

Przedmiot mojej analizy stanowi zanonimizowana próbka danych udostępniona przez Narodowy Fundusz Zdrowia dotycząca wystąpowania udaru niedokrwiennego mózgu. Więcej informacji na ten temat oraz dane znajdziemy pod TYM adresem.

Zbiór danych dotyczy świadczeń i leków refundowanych na rzecz pacjentów, spośród których u pewnego odsetka wystąpił udar niedokrwienny mózgu. Dane o udarze dotyczącą kolejnych dwóch lat po zrealizowaniu recepty na lek.

Udar mózgu jest uważany za trzecią najczęstszą przyczynę zgonu i główny powód inwalidztwa osób dorosłych. Jak podaje Światowa Organizacja Udaru Mózgu (World Stroke Organization), na świecie 80 mln osób przeszło udar mózgu, a 50 mln z nich jest z jego powodu niepełnosprawnych. Ta organizacja ustanowiła Światowy Dzień Udaru Mózgu, który przypada na 29 października.

Rozróżnia się dwa rodzaje udarów – niedokrwienny i krwotoczny. Rocznie prawie 80 tys. Polaków doświadcza udaru niedokrwiennego, który stanowi 85 proc. przypadków udaru. Połowa osób, która przeżyje, zmaga się z niedowładami, zaburzeniami mowy i innych funkcji. Większość z nich musi być otoczona całodobową opieką dotyczącą wszelkich codziennych czynności. Eksperci podkreślają, że kluczowe dla rokowania w udarze mózgu jest właściwe rozpoznanie i szybka interwencja lekarska (źródło).

Dane NFZ rozdzielone są na 6 tabel. Tabela pacjenci zawiera dane określające, czy u danego pacjenta wystąpił udar niedokrwienny w analizowanym okresie dwóch lat. Mamy próbkę złożoną z 500000 pacjentów. Aby uzyskać informację na temat wieku pacjenta, płci oraz powiatu, w którym mieszka, możemy połączyć ją z tabelą parametry pacjentów. W celu identyfikacji powiatu, wykorzystamy dodatkowy plik „kody_teryt.txt”. Zawiera on identyfikację powiatów po kodach TERYT. Dzięki plikowi „Powiaty” w formacie shp będziemy mogli utworzyć wizualizację frakcji udarów w poszczególnych województwach. Pondato wykorzystamy plik „wojewodztwa.txt” aby podzielić dane według województw. Przy szukaniu przyczyn udaru weźmiemy pod uwagę wynagrodzenie brutto w danym powiecie (plik „wyn_brutto_2016_gus.txt”) oraz poziom zanieczyszczeń w powiecie (plik „zanieczyszczenia.txt”). Dane na temat pochodzą z Banku Danych Lokalnych.

Następne dwie tabele – świadczenia oraz procedury zawierają zanonimizowane dane. Pierwsza z nich kryje między innymi informację o produkcie jednostkowym. Na jego podstawie świadczeniobiorcy rozliczają się z płatnikiem. Jest on określony za pomocą jednorodnych grup pacjentów (JGP), jednakże jego format w tabeli został poddany procesowi anonimizacji i nie możemy zanalizować jego treści. Z kolei tabela procedury zawiera informacje o wykonanych procedurach medycznych, lecz kod procedury również jest zaszyfrowany. Tajemnicy nie stanowią dla nas informacje o zrealizowanych receptach na leki refundowane, zawarte w tabeli recepty. Po wciągnięciu dwóch dodatkowych plików, „ATC1.txt” oraz „ATC2.txt” możemy określić jakie to są leki wg klasyfikacji anatomiczno-terapetyczno-chemicznej (ATC). Ostatnia udostępniona tabela nazywa się rozpoznania i możemy z niej odczytać, czy udar mózgu był głównym rozpoznaniem choroby u danego pacjenta.

Paczka plików wykorzystana w analizie, zawierająca dane udostępnione przez GOV oraz dodatkowe pliki, jest do pobrania TUTAJ.

Zapraszam do lektury.

ID_PACJENTA ROK_WZGL TYDZIEN_UDARU CZY_UDAR
0 9910 NaN NaN False
1 953308 NaN NaN False
2 936540 NaN NaN False
3 902346 NaN NaN False
4 894583 NaN NaN False

Tabela pacjenci zawiera ID, które jest kluczem łączenia z innymi tabelami. W zbiorze danych mamy próbkę o wielkości 500000 obserwacji. Na początek zidentyfikuję u ilu pacjentów wystąpił udar, a następnie zbadam strukturę osób chorych.

Udar rozpoznano u około 0.59% pacjentów, czyli 2971 osób.

Kolumna „Tydzień udaru” nie została opisana w danych. Mogę się domyślać, że jest to tydzień, w którym rozpoznano udar od momentu zrealizowania recepty, ale nie jest to potwierdzona informacja.

Udar najczęściej występował po 26 tygodniach, to jest około pół roku. W danych nie ma informacji o tym, czy pacjent zmarł. Z innych źródeł wiadomo, że pacjent ma duże szanse na wyleczenie, o ile trafi do szpitala do 4,5 godziny od wystąpienia udaru. To bardzo niewiele.

Kolumna „ROK_WZGL” nie została uwzględniona w opisie danych. Ciężko mi do niej odnieść, gdy nie wiem jakie informacje zawiera.

Przypuszczam, że są to informacje o tym, z którego roku są dane, ponieważ bierzemy pod uwagę dwa kolejne lata od momentu recepty. Załóżmy, że recepta została zrealizowana w 2016 roku. 0 może oznaczć, że upłynęło mniej niż rok, a 1 to ponad rok, ale nie więcej niż 2 lata.

Przejdźmy do kolejnej tabeli, która powie nam więcej o charakterystyce próbki.

ID_PACJENTA GRUPA_WIEKOWA PLEC TERYT_POWIATU
0 792137 (73,78] 2 2212.0
1 366964 (38,43] 2 2207.0
2 786905 (63,68] 1 2209.0
3 210416 (23,28] 2 2216.0
4 643866 (58,63] 1 2263.0
ID_PACJENTA GRUPA_WIEKOWA PLEC TERYT_POWIATU ROK_WZGL TYDZIEN_UDARU CZY_UDAR
0 792137 (73,78] 2 2212.0 NaN NaN False
1 366964 (38,43] 2 2207.0 NaN NaN False

Upewnijmy się, że wszystkie informacje zostały porawnie połączone. Nie mamy pustych wierszy w kolumnie „CZY_UDAR”, więc wszystkich pacjentów z pierwszej tabeli można połączyć z tymi informacjami.

Zacznijmy od zbadania struktury płci w całej próbie.

Niestety opis danych nie zawiera informacji która wartość przypisana jest konkretnej płci, ale postaram się to wywnioskować. Pobieżnie patrząc w danych mamy więcej osób z udarem z grupy drugiej.

Po bliższym przyjrzeniu się danym widzimy, że w grupie 1 udar występuje nieco częściej. Stwierdzam to na podstawie danej ilości osób u których wystąpił udar podzielonej przez całą wielkość grupy.

Tak prezentuje się rozkład wieku w próbce. Mamy dokładność co 5 lat. Widać dwa piki. Podzielmy te dane według płci.

Po podziale wedłgu płci dalej mamy rozkłady bimodalne, ale każdy z nich ma nieco inny kształt. Na podstawie tego wykresu stwierdzam, że płeć 2 (kolor niebieski) to kobiety, ponieważ powszechnie wiadomo, że żyją one dłużej niż mężczyźni. Ale może być to też związane ze strukturą próbki, akurat tacy pacjenci zostali uwzględnieni w danych.

Skoncetrujmy się na tym 0.59% dobserwacji, u których wystąpił udar.

Dodając czynnik płci wyraźnie widać, że nasz rozkład bimodalny to tak naprawdę dwa rozkłady. U płci pierwszej najczęstszy przedział wiekowy to (63,68], z kolei u płci drugiej jest to (78,83]. Czy na pewno są to kobiety? Z zamieszczonego niżej źródła czytamy, że „Stosunek wiek/płeć wygląda następująco: 18 – 45 – częściej chorują kobiety, 45 – 70 – częściej chorują mężczyźni, >70 – prawdopodobieństwo wyrównuje się”. Jednakże suma sumarum kobiety żyją przeciętnie dłużej, więc pozostaję przy hipotezie, że płeć 2 to kobiety (źródło).

Zamiast liczebności na wykresie pokazałam odsetek pacjentów mających udar, każda płeć to osobna krzywa. Wartości na osi Y można traktować jako prawdopdobieństwo, że osoba w danym wieku będzie mieć udar. Widzimy, że ryzyko w młodym wieku jest podobne, później mamy przewagę płci 1, a następnie, w okolicach 85 lat proporcje wyrównują się, żeby potem płeć 2 przewyższyła płeć 1. Prawa strona wykresu jest nieco zadziwiająca, podejrzyjmy ramkę danych by zobaczyć dokładną strukturę udarów w tej kategorii wiekowej.

index plec1_all plec1_udar plec2_all plec2_udar procent_1 procent_2
13 (83,88] 3748 95.0 8441 226.0 0.025347 0.026774
14 (88,93] 1336 32.0 3997 125.0 0.023952 0.031273
15 (93,98] 254 6.0 1014 30.0 0.023622 0.029586
16 (98,103] 18 1.0 84 0.0 0.055556 0.000000
17 (103,108] 1 0.0 18 2.0 0.000000 0.111111

W celu wyciągnięcia informacji o powiecie, z którego pochodzi dana obserwacja dodałam tabelę z identyfikacją kodów TERYT.

Powiat TERYT_POWIATU
0 aleksandrowski 0401
1 augustowski 2001

To są powiaty z najwększą ilością pacjentów, którzy mieli udar. Lecz bardziej interesująca będzie frakcja w powiatach, czyli ilość osób chorych na udar w danym powiecie podzielona przez ilość wszystkich osób.

Ilość osób Ilość osób z udarem Frakcja
Powiat
aleksandrowski 706 7.0 0.009915
augustowski 756 3.0 0.003968
bartoszycki 833 4.0 0.004802
bełchatowski 1580 7.0 0.004430
bialski 1591 9.0 0.005657

Tutaj są powiaty z największą frakcją osób, które mają udar. Warszawa juz nie jest wśród tych najwyższych. Zwizualizuję te dane na mapie geograficznej. W tym celu musimy doinstalować dodatkowe biblioteki oraz wczytać plik shp, który ma zdefiniowane współrzędne geograficzne.

Dodam jeszcze województwo.

Prawie w każdym województwie mamy jakieś powiaty z wartością odstającą. Najmniejniej chorych pacjentów jest w województwie wielkopolskim, natomiast nawięcej w lubelskim.

Zestawmy dane o frakcji osób w powiatach z przeciętnym miesięcznym wynagrodzeniem brutto. Dane na ten temat pochodzą z BDL, jako rok odniesienia przyjęłam 2016, jednakże nie mam pewności, że ten sam okres występuje w danych z NFZ. Będę porównywać wielkość wynagrodzenia, w danych mam uwzględniony jeszcze stosunek do średniej krajowej (Polska=100), ale będę korzystać z ostatniej kolumny.

Powiat Ilość osób Ilość osób z udarem Frakcja Województwo Kod wyn_stosunek_do_średniej_krajowej wynagrodzenie
0 aleksandrowski 706 7.0 0.009915 KUJAWSKO-POMORSKIE 401000 73.9 3170.04
1 augustowski 756 3.0 0.003968 PODLASKIE 2001000 89.0 3816.77
2 bartoszycki 833 4.0 0.004802 WARMIŃSKO-MAZURSKIE 2801000 80.4 3449.70
3 bełchatowski 1580 7.0 0.004430 ŁÓDZKIE 1001000 134.7 5778.97
4 bialski 1591 9.0 0.005657 LUBELSKIE 601000 74.2 3184.04

Przeciętne wynagrodzenia nie jest związane z częstością udaru mózgu. Widać to na wykresie – linia regresji nie jest zbyt dopasowana do danych. Policzenie mało istotnego R^2 było tylko rozrywką.

Przy podziale danych wedłuch województw również brak widocznych zależności.

Może poziom zanieczyszczeń powie nam coś więcej o nieoczywistych przyczynach udaru?

Powiat Ilość osób Ilość osób z udarem Frakcja Województwo Kod Zanieczyszczenie
0 aleksandrowski 706 7.0 0.009915 KUJAWSKO-POMORSKIE 401000 0.05
1 augustowski 756 3.0 0.003968 PODLASKIE 2001000 0.01
2 bełchatowski 1580 7.0 0.004430 ŁÓDZKIE 1001000 0.85
3 bialski 1591 9.0 0.005657 LUBELSKIE 601000 0.01
4 białobrzeski 469 4.0 0.008529 MAZOWIECKIE 1401000 0.02

Tutaj również nie widzimy żadnej zależności. Moim zdaniem nasza próbka jest zbyt mało liczna, aby doszukiwać się takich zależności. Frakcje w powiatach różnią się dopiero na którymś miejscu po przecinku, więc na podstawie powiatów i informacji o nich ciężko określić przyczyny udarów.

Na heatmapie widać powiaty z największą frakcją z podziałem na płeć. Skala to odsetek udarów w danym powiecie.

Następna zanalizowana tabela zawiera informację o udzielnych świadczeniach.

ID_PACJENTA ID_EPIZODU ID_KONTAKTU ID_KSIEGI_GLOWNEJ ROK_SWIADCZENIA TYDZIEN_POCZATKU_KONTAKTU TYDZIEN_KONCA_KONTAKTU KOD_ZAKRESU KOD_PRODUKTU_JEDNOSTKOWEGO TYP_KOMORKI RODZAJ_SWIADCZEN KWOTA_ROZLICZONA
0 21466 55625667 20359413 NaN -2 2 2.0 1506110 5.01.00.0030856 16 PODSTAWOWA OPIEKA ZDROWOTNA 0
1 197685 84652115 98978481 NaN -2 2 2.0 1506110 5.01.00.0030856 16 PODSTAWOWA OPIEKA ZDROWOTNA 0
2 21466 13879209 82087452 NaN -2 3 3.0 1506110 5.01.00.0030856 16 PODSTAWOWA OPIEKA ZDROWOTNA 0
3 372836 46476951 43672487 NaN -2 1 1.0 1506110 5.01.00.0030856 3010 PODSTAWOWA OPIEKA ZDROWOTNA 0
4 845904 87283796 28396473 NaN -2 1 1.0 1506110 5.01.00.0030856 3010 PODSTAWOWA OPIEKA ZDROWOTNA 0

Kod zakresu, kod produktu jednostkowego oraz typ komórki zostały zanonimozowane. Nie da się wyciągnać z nich żadnej informacji (a przynajmniej nie tak łatwo jak z reszty danych).

Możemy sprawdzić rodzaj świadczeń i kwotę rozliczoną.

Rodzaj świadczeń jest wszędzie taki sam. Jest to podstawowa opieka zdrowotna. Kwota rozliczona prawie wszędzie jest równa zero. Te kolumny nie są zbyt interesujące.

Grupowanie możemy przeprowadzić również po ID. Najpierw sprawdzimy ile pacjentów występowało o świadczenia więcej niż raz.

A ile spośród nich miało udar?

Okazuje się, że 1,08% miało udar. Są to proporcje podobne jak w całej próbce danych.

Przedstawię teraz liczbę świadczeń pacjentów z udarem w podziale na ich wiek i płeć.

Rozkład wygląda podobnie jak ogólny rozkład wieku osób z udarem mózgu. Starsi pacjenci, u których wystąpił udar pobierali więcej świadczeń niż młodsi, ale nie doszukiwałabym się tutaj dużej zależności – po prostu jest ich analogicznie więcej w danych.

Pogrupujmy dane według ID Pacjenta oraz ID Epizodu, a następnie policzmy ilości epizodów dla tak pogrupowanych danych. Interesujące będą ilości większe niż 1.

Pacjenci, którzy mieli więcej niż jeden epizod związany z tym samym ID w większości nie mieli udaru, jak pokazuje powyższa tabelka. Tabela Procedury jest w całości zaszyfrowana.

ID_EPIZODU KOD_PROCEDURY
0 15079215 806.0
1 49779661 806.0
2 16963243 806.0
3 16963243 806.0
4 33131101 806.0

Kod procedury dawałby nam informację jakie badanie zostało wykonane przy tym epizodzie.

Przejdźmy do danych o receptach. Przy tych danych dodam kolumny które będą rozszyfrowywać kod ATC (w tym celu wciągnę dodatkowe pliki) i połączę wszystko po ID Pacjenta, tak jak to robiłam do tej pory. Pondato usunę kilka zbędnych kolumn.

0 1
0 A Przewód pokarmowy i metabolizm
1 B Krew i układ krwiotwórczy
2 C Układ sercowo-naczyniowy
3 D Dermatologia
4 G Układ moczowo-płciowy i hormony płciowe
0 1
0 A01 Preparaty stomatologiczne
1 A02 Leki stosowane w chorobach związanych z nadmie…
2 A03 Leki stosowane w czynnościowych zaburzeniach p…
3 A04 Leki przeciwwymiotne i przeciw nudnościom
4 A05 Leki stosowane w chorobach dróg żółciowych i w…
ID_PACJENTA LICZBA_OPAKOWAN Full_name Name Powiat GRUPA_WIEKOWA PLEC TYDZIEN_UDARU CZY_UDAR ROK_SWIADCZENIA TYDZIEN_POCZATKU_KONTAKTU TYDZIEN_KONCA_KONTAKTU
0 84791 1.0 Leki działające na układ renina-angiotensyna Układ sercowo-naczyniowy radomszczański (58,63] 1 NaN False -2 36 36.0
1 84791 1.0 Leki działające na układ renina-angiotensyna Układ sercowo-naczyniowy radomszczański (58,63] 1 NaN False -2 33 33.0
2 84791 1.0 Leki działające na układ renina-angiotensyna Układ sercowo-naczyniowy radomszczański (58,63] 1 NaN False -2 36 36.0
3 84791 1.0 Leki działające na układ renina-angiotensyna Układ sercowo-naczyniowy radomszczański (58,63] 1 NaN False -2 33 33.0
4 84791 1.0 Leki działające na układ renina-angiotensyna Układ sercowo-naczyniowy radomszczański (58,63] 1 NaN False -2 36 36.0

Takie mamy podstawowe kategorie recept. Wsród osób, które miały udar najczęściej występują recepty dotyczące układu sercowo-naczyniowego oraz przewodu pokarmowego i metabolizmu.

Kategorie leków mogą być bardziej szczegółowe.

Mamy 84 szczegółowych kategorii. Zidentyfikuję 10 najczęstszych dla całej próby oraz 10 najczęstszych dla udarowców.

Grupując pacjentów po ID i patrząc na ilość opakowań leków, widzimy, że osoby które nie miały udaru zazwyczaj kupowały dużą ilość leków przeciwbólowych, zaś ci z udarem bardziej specjalistyczne.

Na heatmapie wyraźnie wyróżniają się starsze grupy pacjentów, które kupują leki związane z układem sercowo-naczyniowym oraz przewodem pokarmowym i metabolizmem. Mamy też trochę pustych mejsc, co oznacza że dana grupa wiekowa nie kupowała leków tego typu. Ilość leków została wyrażona w skali logarytmicznej.

ID_KONTAKTU KOD_ROZPOZNANIA CZY_GLOWNA
0 86184950 42069 T
1 77833278 60015 T
2 39973459 507306 T
3 96091782 7809601 T
4 91312211 9401202 T

Zazwyczaj udar mózgu był głównym rozpoznaniem choroby.

1 komentarz do wpisu “Analiza wystąpienia udaru niedokrwiennego mózgu”

  1. Panie Łukaszu,

    Kwestia prezentacyjna wyników (tabelki, wykresy) w tym artykule jest bardzo słaba. Tabelki rozjeżdżają się poza marginesy (wychodzą na szare tło), wykresy są małe i nie można z nich nic odczytać. Kod sam w sobie też jest mały – nie zastanawiał się Pan nad tym by wielkość czcionki dla kodu była taka sama jak dla normalnego tekstu? Przy przejściu z tekstu na kod trzeba skupić wzrok i oko co chwila się akomoduje – osobiście dla mnie jest to nieprzyjemne.

    Czytam Pana artykuły z miłą chęcią, bo oprócz wyciągania ciekawych wniosków, siatka prezentacyjna jest bardzo dobra – ma Pan swój styl. Natomiast ten artykuł jest najgorszy ze wszystkich jakie Pan umieścił – pod względem prezentacji wykresów i tabel. Wykresy w matplotlibie mogą być jeszcze ładniejsze niż w ggplot2 (proszę nad nimi popracować jeszcze i pobawić się większą ilością parametrów graficznych), trzeba się trochę więcej nakodzić, ale efekty są powalające.

    Odpowiedz

Dodaj komentarz