Unik kombination
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.
= [r"I([0-3]|4[^6]|[5-9])", r"C|D[0-4]", r"F0|[GH]", r"E",
caexps 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]
:cano] = map(cano, us201401[:Ent]) us201401[
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.
Tillstånd med demens, som allt oftare kommit att rapporteras som dödsorsak, kan ligga både under första avsnittet i kapitel 5 för psykiska störningar (F00–F09) och under kapitel 6 för nervsystemet. De har därför slagits ihop, och även de inte så vanligt förekommande kapitlen 7–8 för ögat och örat (koder som börjar på H) har för enkelhetens skull inkluderats här.
Infektioner i kapitel 1 (A00–B99), vilket exempelvis inkluderar sepsis, har slagits ihop med luftvägsinfektioner som influensa och lunginflammation (J00–J22). Det finns organspecifika infektioner i ett stort antal andra kapitel, som skulle kunna inkluderas här, men dessa har oftast inte så stor betydelse som rapporterade dödsorsaker.
Vissa skräpkoder – hjärtstopp (I46), andningssvikt (J96) och koder i kapitel 18 (R00–R99) – har inte inkluderats.
Kapitelordningen i ICD-10 har inte följts, utan vanligare koder (som cirkulationsorgan, tumörer och nervsystem) har lagts i början av listan.
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.