Unik kombination

Postad 2019-04-22 av Karl Pettersson. Taggar: epidemiologi

Den 12 och 13 april skrev jag om amerikansk forskning om att statistik baserad på dödsorsaksintyg leder till underskattning av antalet personer som dör med infektioner, speciellt infektioner med resistenta organismer, som bidragande orsak. Jag noterade att om hänsyn tas till alla orsaker som rapporterats på intygen, verkar infektioner inte bli sämre representerade än med alternativa metoder som föreslagits. Problemet ligger i att den rapportering som är enkelt tillgänglig via officiell statistik bygger på underliggande dödsorsak, som det rapporteras en av per dödsfall. Som reglerna kring detta är uppbyggda prioriteras bakomliggande, kroniska tillstånd, som hjärtsjukdom, cancer och demens, framför tillstötande infektioner, som lunginflammation och sepsis.

Det är tydligt att enbart rapportering av underliggande dödsorsaker inte är tillfredsställande om vi vill få en bild av alla tillstånd som är relevanta ur ett folkhälsoperspektiv för att förklara dödsfall. En viktig orsak till systemets popularitet är dess enkelhet när det gäller att sammanställa tabeller som kan användas för att överblicka dödsorsaksmönstret. När det per definition bara finns en orsak per individ kommer snittet av två orsaker alltid att vara tomt, och det går att skapa unioner av orsaker (exempelvis alla som dör av hjärtsjukdom eller cancer) genom enkel addition. Om vi i stället tar alla med hjärtsjukdom eller cancer nämnd på intyget fungerar inte detta, eftersom det finns överlappningar mellan grupperna. För USA finns mikrodata över alla dödsfall (med vissa uppgifter borttagna, men alla nämnda dödsorsaker inkluderade, så att det går att skapa exempelvis unioner av olika grupper) publikt tillgängliga via National Center for Health Statistics (2018), men att analysera dessa kan vara relativt komplext, och för många andra länder (som Sverige) finns sådana data inte publicerade.

I det följande skall jag visa på en modell som tar hänsyn till alla dödsorsaker som nämnts på intyget, samtidigt som den bevarar additiviteten hos underliggande dödsorsaker. Kod i Julia och SQL finns tillgänglig i katalogen postdata/2019-04-22-unik under denna bloggs GitHub-förråd. I exemplet använder jag mig av data för amerikanska dödsfall i januari 2014 (243 719 dödsfall). Om de har lästs in i en MySQL-databas med mitt Usmort-paket kan de extraheras till en CSV, som används för analysen, med hjälp av SQL-filen. Den centrala funktionaliteten finns i följande rader Julia.

caexps = [r"I([0-3]|4[^6]|[5-9])", r"C|D[0-4]", r"F0|[GH]", r"E",
    r"[AB]|J[0-2]", r"J([3-8]|9[^6])", r"[V-Y]", r"K", r"N", r"D[5-9]",
    r"F[1-9]", r"L", r"M", r"O", r"P", r"Q"]
cano(entstr) = BitArray(map((c)->occursin(c, entstr), caexps)).chunks[1]
us201401[:cano] = map(cano, us201401[:Ent])

Listan caexps definierar ett antal reguljära uttryck som matchar grupper av koder i ICD-10. I stort sett motsvarar de kapitlen i ICD-10, dock med vissa undantag.

Fälten med nämnda dödsorsaker har slagits ihop till ett fält Ent, som, för varje dödsfall matchas mot uttrycken i caexps med funktionen cano. Denna funktion returnerar ett naturligt tal \(n\) sådant att om en substräng i fältet matchas av uttryck nummer \(i\) (om indexeringen börjar på 0; Julias konvention är dock att börja på 1) i caexps gäller \(n\& 2^i=2^i\) och \(n\& 2^i=0\) i annat fall, där \(\&\) är bitvis OCH. Fält som enbart innehåller skräpkoder tilldelas alltså 0, fält med enbart koder för cirkulationsorganen (I00–I99, utom I46) tilldelas 1, de med enbart tumörer 2, de med cirkulationsorgan och tumörer (men inga andra icke skräpkoder) 3 (binärt 11) och så vidare. På detta sätt kommer varje möjlig kombination av orsaker i listan att tilldelas ett unikt tal, och det går att addera antalet dödsfall med olika tal för att få fram det totala antalet dödsfall med något av talen (förutsatt att de strängar som matchas av uttrycken i caexps inte överlappar).

Med hjälp av funktionen propfsa går det att summera antalet dödsfall för de olika orsakstalen per kön och ålder: exempelvis sparar pus201401f=propfsa(us201401, "F", 0, Inf) en sammanställning för kvinnor i alla åldrar, sorterad efter talens förekomst i dataramen pus201401f. De vanligast förekommande talen är 1, enbart cirkulationsorgan (15,2 procent av alla dödsfall), 2, enbart tumörer (11,6 procent) och 4, enbart nervsystem (7,2 procent). De vanligaste kombinationerna är 5, nervsystem+cirkulation (4,0 procent) och 9, endokrina organ+cirkulation (3,0 procent). De inkluderar fall där demens eller diabetes rapporteras tillsammans med hjärtsjukdom, slaganfall eller åderförkalkning. Mönstret för män är likartat, men 0x40, enbart yttre orsaker, som olyckor, mord och självmord, kommer på tredje plats (5,9 procent). Det är 2,1 procent av kvinnorna och 1,8 procent av männen som har 0, enbart skräpkoder.

Om systemet skall vara användbart för att ge en översiktlig bild över dödligheten är det önskvärt att kunna täcka en stor andel av dödsfallen med ett litet antal tal. Det är en anledning till att listan definierats på kapitelnivå i stället för att användare finare indelningar. En summering av andelarna för de 15 översta talen (bortsett från 0) ger 58,3 procent för kvinnor och 56,7 procent för män. Det är inte en riktigt lika koncis sammanfattning som i översikter som Murphy, Xu och Kochanek (2013), där de 15 vanligaste orsakerna, i den gruppering av underliggande dödsorsaker som används, står för nära 80 procent.

Funktionerna propall och propsome exemplifierar hur bitvisa operationer kan användas för att summera förekomsten av olika tal. De tar som argument ramar som genererats av funktioner som propfsa och kräver alltså inte tillgång till mikrodata. Om pus201401f skapats som ovan, ger propall(pus201401f, 5) andelen kvinnor med koder från nervsystem och cirkulation (10,1 procent, vari alltså ingår de 4,0 procent som enbart har dessa koder), medan propsome(pus201401f, 5) ger andelen med någon kod för nervsystem eller cirkulation (62,0 procent).

Funktionen ncaexps kan användas för att lista de uttryck som ingår i ett visst tal; den skulle också kunna mappas mot en lista med beskrivande texter om de olika orsaksgrupperna.

Det finns problem med rapportering av relevanta dödsorsaker som inte går att komma åt ens med system baserade på alla orsaker som nämns på intyget. Exempelvis kan infektioner som bakomliggande orsaker, snarare än komplikationer, underrapporteras, exempelvis om äldre personer dör av hjärtproblem några veckor efter att ha haft influensa. Uppskattningar av överdödlighet till följd av influensa görs också ofta med metoder som inte alls använder sig av dödsorsaksintygen (Nicoll m.fl. 2012). Ett relaterat problem är att vissa diagnoser, som olika hjärtproblem, kan rapporteras på ett sätt som inte är vidare informativt. I viss mån har jag sökt motverka detta genom att exkludera koder för hjärtstopp (I46), men det blir alltid problem med gränsdragningen: uteslutning av exempelvis hjärtsvikt (I50) skulle kunna försvaras på liknande grunder, men vi kan inte gärna ta bort tillstånd under kranskärlssjukdom (I20–I25), fast de ibland också kan användas som skräpkoder.

Referenser

Murphy, Sherry L., Jiaquan Xu och Kenneth D. Kochanek. 2013. ”Deaths: final data for 2010”. https://www.cdc.gov/nchs/data/nvsr/nvsr61/nvsr61_04.pdf.

National Center for Health Statistics. 2018. ”Data Access - Vital Statistics Online”. http://www.cdc.gov/nchs/data_access/vitalstatsonline.htm.

Nicoll, A, B C Ciancio, V Lopez Chavarrias, K Mølbak, R Pebody, B Pedzinski, P Penttinen, M van der Sande, R Snacken och M D Van Kerkhove. 2012. ”Influenza-related deaths - available methods for estimating numbers and detecting patterns for seasonal and pandemic influenza in Europe”. Eurosurveillance 17 (18). doi:10.2807/ese.17.18.20162-en.