gantt
title LPR-registre
dateFormat YYYY
axisFormat %Y
section LPR2 somatisk
lpr_adm + lpr_diag :done, 1977, 2019
section LPR2 psykiatrisk
t_psyk_adm + t_psyk_diag :done, 1995, 2019
section LPR3 samlet
lpr_a_kontakt + lpr_a_diagnose :active, 2019, 2027
Forstå LPR
Struktur, historie og nuancer - før du skriver kode
Det Nationale Patientregister (LPR) er kilden til diagnoser og hospitalskontakter. Det dækker alle offentlige hospitalsindlæggelser og ambulante kontakter i Danmark.
LPR er mere komplekst end de fleste registre, fordi det skiftede format i 2019 og er splittet i somatiske og psykiatriske tabeller. Denne side forklarer strukturen - perioderne, ICD-koderne, diagnosetyperne og de faldgruber du skal kende, før du trækker data. De konkrete udtræksopskrifter ligger i Udtræk fra LPR.
Kort fortalt: LPR skiftede format i 2019 - brug LPR2 (frem til marts 2019) og LPR3 (derefter) og kombinér dem. Alle ICD-koder har et D-præfiks, du typisk stripper, og du vælger diagnosetyper (A/B til udfald, +G til baseline-komorbiditet).
Læserækkefølge: Læs denne side først for at forstå data. Gå derefter til Udtræk fra LPR for de kørende kodeeksempler. Du bygger selve kohorten i Fase 10.
LPR er opdelt i to perioder
I marts 2019 skiftede LPR format. Studier der dækker perioden på tværs af 2019 skal forespørge begge systemer og kombinere dem.
| LPR2 somatisk | LPR2 psykiatrisk | LPR3 | |
|---|---|---|---|
| Periode | frem til marts 2019 | frem til marts 2019 | marts 2019 og frem |
| Kontaktregister | lpr_adm |
t_psyk_adm |
lpr_a_kontakt |
| Diagnoseregister | lpr_diag |
t_psyk_diag |
lpr_a_diagnose |
| Dækker psykiatri | Nej | Ja | Ja (begge samlet) |
| Join-nøgle | recnum |
k_recnum / v_recnum¹ |
dw_ek_kontakt |
| Datokolonne | d_inddto (Date) |
d_inddto (Date) |
kont_starttidspunkt (datetime)² |
| pnr-kolonne | pnr |
v_cpr³ |
pnr |
| Diagnosekode | c_diag |
c_diag |
diag_kode |
| Diagnosetype | c_diagtype |
c_diagtype |
diag_kode_type |
| Kontakttype | c_pattype ("0" = indlagt) |
c_pattype |
kont_type ("ALCA00" = indlagt) |
¹ t_psyk_adm har k_recnum; t_psyk_diag har v_recnum - omdøb begge til recnum inden join. ² datetime-format - konverter med as.Date(). ³ Omdøb: rename(pnr = v_cpr).
Hvorfor to registre - kontakt og diagnose? LPR opdeler hver hospitalskontakt i to tabeller: kontaktregistret (fx lpr_adm) har én række per kontakt med pnr, datoer og hospital, men ikke diagnoserne; diagnoseregistret (fx lpr_diag) har én række per diagnose med ICD-koden, men ikke pnr eller dato. Én kontakt kan have flere diagnoser. Du joiner de to på kontakt-nøglen (recnum i LPR2, dw_ek_kontakt i LPR3) for at få pnr + dato + diagnose i samme tabel. Det er den join, udtræksopskrifterne i Udtræk fra LPR bygger på. Samme princip gælder operationer og procedurer: lpr_sksopr (LPR2) har SKS-koden + recnum, men ikke pnr eller dato, så den joines til lpr_adm på nøjagtig samme måde, når du vil finde hvem der fik en operation og hvornår.
Psykiatri: separat i LPR2, samlet i LPR3 Inden 2019 var psykiatriske diagnoser (F-koder: demens, depression mv.) gemt i separate registre (t_psyk_adm, t_psyk_diag). Strukturen ligner somatisk LPR2, men kolonnenavnene afviger - se tabelnoterne ovenfor. Fra marts 2019 samler LPR3 begge: somatiske og psykiatriske kontakter og diagnoser indgår i de samme tabeller, og du behøver ikke en særskilt psykiatrisk forespørgsel.
Endnu ældre psykiatri (1969-1994). Det Psykiatriske Centralregister er elektronisk fra 1969, men dækker kun indlagte patienter frem til 1995 (ambulante besøg kom først med fra 1995). Diagnoser før 1994 er kodet i ICD-8 (numeriske koder, fx 290-315, hvor 290 dækker demens), ikke ICD-10 F-koder. Disse ældre data ligger normalt ikke i standard-LPR-udtrækket og rekvireres særskilt (se Rigsarkivet og NCRR, Aarhus Universitet). Skal dit studie dække den periode, så husk at mappe ICD-8 til dine F-kode-grupper.
LPR3 dækker hospitalskontakter fra marts 2019 og frem, og du tilgår dem via LPR_A-filerne (lpr_a_kontakt, lpr_a_diagnose). Vær opmærksom på, at LPR_A også indeholder ambulante data tilbage fra omkring 2017, hvoraf noget allerede ligger i LPR2 - det skal derfor renses for dubletter (se faldgruben nedenfor).
Ny forsker/nyt projekt? Brug kun LPR_A-filerne. LPR3 er blevet leveret i to formater: det ældre LPR_F (kontakter, diagnoser, forloeb) og det nuværende LPR_A (lpr_a_kontakt, lpr_a_diagnose). For nye projekter er LPR_F reelt dødt - brug LPR_A. Begge kan ligge i din mappe og dække de samme år, så hvis du også indlæser LPR_F (eller blander de to), får du duplikerede rækker. Alle eksempler på dette site bruger lpr_a_*.
Faldgrube: overlappende data. Nogle projekter har ældre kontakter (allerede dækket af LPR2) liggende inde i LPR3-tabellerne (lpr_a_kontakt). Fjern dem ved at filtrere lprindberetningssystem == "LPR3", så den samme kontakt ikke tælles to gange på tværs af LPR2 og LPR3. Det er projektspecifikt - på DARTER er det faldgrube 5; ellers tjek med din datamanager.
Baggrund: LPR_F vs LPR_A (kan springes over)
Da LPR3 blev lanceret i marts 2019, blev forskningsdata først distribueret i LPR_F-modellen: et forløbsorienteret (forloeb) format med separate kontakter-, diagnoser- og forloeb-tabeller. Forskerservice gik senere over til den kontaktbaserede LPR_A-model (lpr_a_kontakt, lpr_a_diagnose), som er den, projekter modtager i dag. De to repræsenterer de samme underliggende kontakter forskelligt, så de er ikke tænkt til at blive kombineret - vælg LPR_A.
ICD-koder og D-præfikset
ICD-10 (International Classification of Diseases, 10. revision) er WHO’s internationale system til klassifikation af sygdomme og tilstande. Alle hospitaldiagnoser i Danmark kodes med ICD-10, fx G30 for Alzheimers sygdom og F00 for demens ved Alzheimers.
Alle ICD-10-koder i DST har et foranstillet "D": "DG30" (Alzheimers), "DF00" (demens), "DI21" (akut myokardieinfarkt).
Strip typisk D-præfikset inden sammenligning - det giver mere læsbar kode og genbrug til mange udfald:
mutate(icd3 = substr(c_diag, 2, 4)) # "DG30" → "G30" (3-tegns kode)
mutate(icd4 = substr(c_diag, 2, 5)) # "DI219" → "I219" (4-tegns kode)substr(x, start, stop) beholder tegnene fra position start til og med stop (talt fra 1). substr(c_diag, 2, 4) springer position 1 (D-præfikset) over og beholder tegn 2, 3 og 4: "DG30" → "G30". Brug 2–5 til 4-tegns koder: "DI219" → "I219".
Diagnosetyper: A, B og G
| Kode | Betydning | Hvornår inkluderes den |
|---|---|---|
| A | Aktionsdiagnose - primær årsag til kontakten | Altid til udfald |
| B | Bidiagnose - yderligere tilstand til stede | Altid til udfald |
| G | Grundmorbus - underliggende baggrundstilstand | Kun til baseline-komorbiditet |
# Til udfald og eksklusionsdiagnoser:
filter(c_diagtype %in% c("A", "B"))
# Til baseline-komorbiditet (NMI):
filter(c_diagtype %in% c("A", "B", "G"))Behold type-kolonnen i dit udtræk. Tag c_diagtype (i LPR3: diag_kode_type) med i dit output, ikke kun diagnosekoden. Det koster én kolonne og lader dig senere variere case-definitionen - fx hovedanalyse på A + B, sensitivitetsanalyse på kun A (aktionsdiagnose) eller inklusive G - uden at forespørge LPR igen.
Tilbagekaldte diagnoser i LPR3 (senere_afkraeftet)
LPR3 markerer diagnoser der er tilbagekaldt. Standardfiltret:
filter(is.na(senere_afkraeftet) | senere_afkraeftet != "Ja")is.na()-delen er bevidst. R’s standardadfærd er: NA != "Ja" returnerer NA - ikke TRUE. Et filter betragter NA som FALSE og dropper rækken. filter(senere_afkraeftet != "Ja") alene ville derfor fjerne alle diagnoser der slet ikke har en tilbagekaldelsesmarkering (dvs. NA-felter) - selvom de bestemt ikke er tilbagekaldt. is.na(...) retter det: “behold rækken hvis feltet er NA ELLER hvis det ikke er "Ja"”. Filtret beholder dermed ukategoriserede diagnoser, hvilket er den sikreste antagelse.
Udfordring med LPR_A: diagnose-spike omkring 2019-2020
Overgangen til LPR3’s kontaktbaserede model ændrede også hvordan ambulante diagnoser registreres, og det kan forvrænge antallet af diagnoser hen over overgangen.
I LPR2 blev et forløb af ambulante besøg typisk opsummeret med én (aktions)diagnose for hele forløbet. I LPR3 kan hver kontakt bære sine egne diagnoser. Så en patient med 10 ambulante besøg for depression, der gav én diagnoserække i LPR2, kan give ti rækker i LPR3 - samme sygdom, langt flere registreringer.
Den synlige effekt er et spike i antallet af diagnoser omkring 2019-2020, til stede for de fleste diagnoser, og synligt selv hvis du kun ser på primærdiagnosen (aktionsdiagnosen). Det kompliceres yderligere af et overlap med COVID-19 i 2020 og gør perioden endnu sværere at tolke.
Der findes ingen samlet, vedtaget løsning. Det er et reelt problem i registerforskning, især for analyser der kun bygger på hospitalsdiagnoser.
Vi opfordrer derfor til at visualisere antallet af de diagnoser der bruges i jeres studie på tværs af kalenderår
library(lubridate)
alle_dx %>%
mutate(year = year(date_contact)) %>% # date_contact fra dit LPR-udtræk
count(year) %>%
arrange(year)
# plot n mod year og kig efter et spring omkring 2019-2020De fleste diagnoser viser spiket. Nogle få er stabile hen over overgangen (fx type 1-diabetes) og er et nyttigt sanity check: springer selv en stabil diagnose i dine data, er der noget andet galt.
Til inspiration og evaluering af diagnostisk stabilitet hen over overgangen, se Aarhus-Psychiatry-Research/diagnostic-stability-lpr2-lpr3 (metodisk inspiration, ikke kode til genbrug).
Næste skridt
Nu kender du LPR’s struktur og de vigtigste faldgruber. Næste skridt er at trække diagnoserne ud med kode:
Se også
- Register-overblik: bekræftede kolonnenavne for alle LPR-registre
- Faldgruber på DST: kendte problemer med LPR på DST
Eksternt om LPR3 og 2019-overgangen
- Sundhedsdatastyrelsen - “Vejledning til LPR3_F” (PDF): Forskerservices officielle vejledning til den forskningsrettede LPR3_F-datamodel (indhold, nøgler og LPR2→LPR3-overgangen)
- Sundhedsdatastyrelsen - “Vejledning i udtræk fra Landspatientregisteret” (PDF): generel udtræksvejledning fra Forskerservice; dækker også det kontaktbaserede LPR_A-/LPR3-format
- ctpteam/DST - “Guide to LPR3”: institutionel guide til LPR3-strukturen
- Aarhus-Psychiatry-Research/diagnostic-stability-lpr2-lpr3: peer-reviewed, gennemarbejdet eksempel på diagnostisk stabilitet hen over LPR2→LPR3-overgangen (metodisk inspiration, ikke kode til genbrug)
Kodeopslag
- SKS-browseren: slå ICD-diagnose- og SKS-procedurekoder op
- LPR-kodeark (PDF-download): esundhed.dk’s samlede kodeark for LPR
- DST TIMES - DIAG: DST’s værdisæt for ICD-diagnosekoder med
D-præfiks (dokumenteret under Forebyggelsesregistret)