Bijlage 6. – Zorgvraagtyperingsinstrument ggz volledig
[Regeling vervallen per 01-01-2025]
Zorgvraagtypering ggz is een methode waarop gescoorde zorgvraagkenmerken van een patiënt
toeleiden naar een set van zorgvraagtypes. Dit gebeurt aan de hand van een algoritme
dat de behandelaar adviseert welke zorgvraagtypes logisch zijn bij het ziektebeeld
van de patiënt. Hieronder wordt het algoritme onder het volledige ggz zorgvraagtyperingsmodel
stapsgewijs besproken. Dit is een technisch document en behandelt de werking van het
algoritme. Dit algoritme is in de basis hetzelfde als het algoritme dat in het Verenigd
Koninkrijk is ontwikkeld door de National Health Service (NHS).
Vooraf aan het algoritme kiest de behandelaar een supercluster (X niet-psychotisch
of organisch, Y psychotisch of Z organisch). Vervolgens vult de behandelaar de HoNOS+
in. Deze bestaat uit 19 items over de klachten, symptomatologie en het gedrag van
de patiënt. De items zijn te vinden in de codelijsten en worden gescoord op een vijfpuntsschaal
van 0 (geen klachten) tot 4 (zeer ernstig) met betrekking tot ernst. Hieronder staat
een ingevulde voorbeeld-HoNOS+, gevolgd door het algoritme in R en daarna een uitwerking
in leesbaarder format.
Tabel 1. Ingevulde voorbeeld-HoNOS+ voor een denkbeeldige patiënt in supercluster
X, niet-psychotisch en niet-organisch
Honosvraag_code
|
Ernst
|
Honos_antwoord
|
HV01
|
0
|
1
|
HV02
|
3
|
9
|
HV03
|
1
|
12
|
HV04
|
1
|
17
|
HV05
|
0
|
21
|
HV06
|
1
|
27
|
HV07
|
4
|
35
|
HV08
|
0
|
36
|
HV09
|
0
|
41
|
HV10
|
0
|
46
|
HV11
|
0
|
51
|
HV12
|
0
|
56
|
HV13
|
0
|
61
|
HV14
|
1
|
67
|
HV15
|
4
|
75
|
HV16
|
1
|
77
|
HV17
|
1
|
82
|
HV18
|
1
|
87
|
HV19
|
1
|
92
|
R code van zorgvraagtypering basis
# Coëfficiënten inladen
coefs = data.table(read.csv('coefs_basis_zorgvraagtypering.csv', sep=';', dec=','))
constante = data.table(read.csv('constant_basis_zorgvraagtypering.csv', sep=';', dec=','))
# Input van de gebruiker
superclust = # Input van gebruiker
scoretable = # Input van gebruiker, zie tabel 1
# left join scores met coefs
scores = merge(scoretable, coefs, by = ‘Honos_antwoord’), all.x = T, all.y = F)
# selecteer zorgvraagtypes met supercluster dat de gebruiker heft aangegeven
scores = scores[supercluster == superclust]
# Aggregeer als som van coëfficiënten per zorgvraagtype: Discriminant Fischer Score
(dfs)
scores = scores[, .(dfs = sum(ZVT_coef)), .(Zorgvraagtype)]
# join met constant
scores = merge(scores, constant, by = 'Zorgvraagtype')
# Neem som van dfs en constant per zorgvraagtype
scores[, dfs:= dfs + constant]
# Rode regels: sommige combinaties van zorgvraagtypes en scores zijn onwaarschijnlijk.
De waarschijnlijkheid van deze zorgvraagtypes moet naar 0, daarom wordt dfs op -100
gezet
# NB de gebruiker kan de betreffende zorgtypes nog wel kiezen, ze worden alleen niet
als waarschijnlijk geadviseerd
if(scoretable[Honosvraag_code == ‘HV06’, score] > 1){
scores[Zorgvraagtype %in% c(‘ZT01’, ‘ZT02’, ‘ZT03’, ‘ZT04’, ‘ZT05’), dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV07', Ernst] > 1 | scoretable[Honosvraag_code ==
'HV08', Ernst] > 1 | (scoretable[Honosvraag_code == 'HV07', Ernst] == 0 & scoretable[Honosvraag_code
== 'HV08', Ernst] == 0)){
scores[Zorgvraagtype == ‘ZT01’, dfs:= -100]
scores[Zorgvraagtype == ‘ZT02’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV07', Ernst] > 2 | scoretable[Honosvraag_code ==
'HV08', Ernst] > 2 | (scoretable[Honosvraag_code == 'HV07', Ernst] < 2 & scoretable[Honosvraag_code
== 'HV08', Ernst] < 2)){
scores[Zorgvraagtype == ‘ZT03’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV07', Ernst] > 3 | scoretable[Honosvraag_code ==
'HV08', Ernst] > 3 | (scoretable[Honosvraag_code == 'HV07', Ernst] < 3 & scoretable[Honosvraag_code
== 'HV08', Ernst] < 3)){
scores[Zorgvraagtype == ‘ZT04’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV07', Ernst]!= 4 & scoretable[Honosvraag_code ==
'HV08', Ernst]!= 4){
scores[Zorgvraagtype == ‘ZT05’, dfs:= -100]
}
if((scoretable[Honosvraag_code == 'HV07', Ernst] < 3 & scoretable[Honosvraag_code
== 'HV08', Ernst] < 3) | scoretable[Honosvraag_code == 'HV13', Ernst] < 3){
scores[Zorgvraagtype == ‘ZT06’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV07', Ernst] == 4 | scoretable[Honosvraag_code
== 'HV08', Ernst] == 4 | (scoretable[Honosvraag_code == 'HV07', Ernst] < 2 & scoretable[Honosvraag_code
== 'HV08', Ernst] < 2)){
scores[Zorgvraagtype == ‘ZT07’, dfs:= -100]
}
if((scoretable[Honosvraag_code == 'HV07', Ernst] <= 2 & scoretable[Honosvraag_code
== 'HV08', Ernst] <= 2) | scoretable[Honosvraag_code == 'HV15', Ernst] <= 2){
scores[Zorgvraagtype == ‘ZT08’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] == 0){
scores[Zorgvraagtype == ‘ZT10’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] >= 2){
scores[Zorgvraagtype == ‘ZT11’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] %in% c(0, 3, 4)){
scores[Zorgvraagtype == ‘ZT12’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] <= 2){
scores[Zorgvraagtype == ‘ZT13’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] <= 2){
scores[Zorgvraagtype == ‘ZT14’, dfs:= -100]
}
if(scoretable[Honosvraag_code == ''HV06', Ernst] <= 1 | scoretable[Honosvraag_code
== 'HV07', Ernst] <= 2){
scores[Zorgvraagtype == ‘ZT15’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV06', Ernst] <= 1){
scores[Zorgvraagtype == ‘ZT16’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV06', Ernst] == 0){
scores[Zorgvraagtype == ‘ZT17’, dfs:= -100]
}
if(!scoretable[Honosvraag_code == 'HV04', Ernst] %in% 1:2){
scores[Zorgvraagtype == ‘ZT18’, dfs:= -100]
}
if(!scoretable[Honosvraag_code == 'HV04', Ernst] %in% 2:3){
scores[Zorgvraagtype == ‘ZT19’, dfs:= -100]
}
if(!scoretable[Honosvraag_code == 'HV04', Ernst] %in% 3:4){
scores[Zorgvraagtype == ‘ZT20’, dfs:= -100]
}
if(scoretable[Honosvraag_code == 'HV04', Ernst] <= 1){
scores[Zorgvraagtype == ‘ZT21’, dfs:= -100]
}
# Neem exponent van de dfs
scores[, dfs:= exp(dfs)]
# Bereken hoe groot het aandeel van de exponenten van elk zorgvraagtype zijn van de
som van het geheel. Dit geeft de kans over de zorgvraagtypes
sum_dfs = sum(scores[, dfs])
scores[, dfs:= dfs / sum_dfs * 100]
scores = scores[, .(Zorgvraagtype, percentage = dfs)]
# Laat de gebruiker zien welke verdeling over de zorgvraagtypes het algoritme voorspelt.
Daarna kiest de gebruiker een zorgvraagtype, dit mag ook een ‘rode regel-type’ betreffen
Vertaling in leesbare taal
Aan de hand van de scores op de HoNOS+-items wordt in de codelijsten voor elke score
de coëfficiënten behorende bij de zorgvraagtypes in het supercluster opgezocht (X:
1 t/m 8; Y: 10 t/m 17; Z: 18 t/m 21). Hieronder een klein deel van de codelijst voor
HoNOS+-item 1 en score 0. Waarbij de zorgvraagtypes uit niet-overeenkomende superclusters
grijs zijn gemaakt, de grijze zorgvraagtypes worden in het algoritme niet meegenomen.
Tabel 2. Eerste regels codelijsten zorgvraagtypering
Voor elk item moet voor elk zorgvraagtype een coëfficiënt opgezocht worden. Hieronder
een voorbeeld voor de eerste vier items van onze voorbeeldpatiënt en zorgvraagtype
ZT01.
Als resultaat levert dit een tabel op met op elke rij een HoNOS+-item en voor elk
zorgvraagtype één coëfficiënt. Hieronder zien we de coëfficiënten voor de voorbeeldpatiënt,
voor de overzichtelijkheid laten we slechts de eerste twee zorgvraagtypes zien.
NB. Hier wijkt de uitleg iets af van de R-code, de volgorde van constante opzoeken
en de som nemen is verschillend. Dit maakt voor de uitkomst niet uit.
Voor elk zorgvraagtype moet een constante worden toegevoegd. Deze constante is in
de codelijsten te vinden. In de tabel hieronder hebben we die voor de twee zorgvraagtypes
op de onderste regel ingevoegd.
Tabel 5. Coëfficiënten voorbeeldpatiënt
Honosvraag_code
|
Ernst
|
Honos_antwoord
|
ZVT_coef_ZT01
|
ZVT_coef_ZT02
|
HV01
|
0
|
1
|
27,41261
|
27,54902
|
HV02
|
3
|
9
|
24,27606
|
24,37929
|
HV03
|
1
|
12
|
6,866777
|
6,902961
|
HV04
|
1
|
17
|
111,8597
|
111,9793
|
HV05
|
0
|
21
|
0
|
0
|
HV06
|
1
|
27
|
65,50367
|
65,69889
|
HV07
|
4
|
35
|
0
|
0
|
HV08
|
0
|
36
|
21,9093
|
21,9066
|
HV09
|
0
|
41
|
42,92262
|
42,89279
|
HV10
|
0
|
46
|
6,918559
|
7,117697
|
HV11
|
0
|
51
|
0
|
0
|
HV12
|
0
|
56
|
23,29812
|
23,18631
|
HV13
|
0
|
61
|
4,261629
|
4,306920
|
HV14
|
1
|
67
|
3,920682
|
3,943671
|
HV15
|
4
|
75
|
0
|
0
|
HV16
|
1
|
77
|
0
|
0
|
HV17
|
1
|
82
|
10,30121
|
10,08134
|
HV18
|
1
|
87
|
20,19949
|
20,23473
|
HV19
|
1
|
92
|
0
|
0
|
Constante
|
|
|
-228,215
|
-228,979
|
Sommige combinaties van zorgvraagtypes en scores zijn niet waarschijnlijk. Deze combinaties
worden uitgesloten met ‘rode regels’. De rode regels zijn te vinden in de codelijsten.
In deze codelijsten kunnen de individuele scores worden opgezocht. De coëfficiënten
van de zorgvraagtypes behorende bij de rode regel worden uitgesloten.
Per zorgvraagtype moet de som van de coëfficiënten en constante genomen worden. Daarna
wordt de exponent van deze som genomen. Deze twee stappen staan hieronder.
Tabel 6. Som van coëfficiënten en constante
|
ZT01
|
ZT02
|
Som dfs
|
141,4354
|
141,2005
|
Exponent van som
|
2,65843 * 10^61
|
2,1 & 10^61
|
Daarna wordt bepaald welk aandeel de exponent voor elk zorgvraagtype bijdraagt aan
de som van alle exponenten. Daarvoor wordt de som van alle exponenten genomen en de
exponent voor elk zorgvraagtype wordt gedeeld door de som van alle exponenten. Dit
geeft het aandeel van het totaal. Dit is vergelijkbaar met de waarschijnlijkheid dat
de patiënt in het betreffende zorgvraagtype past. Zie hieronder.
Tabel 6. Som van coëfficiënten en constante
|
ZT01
|
ZT02
|
Aandeel totaal
|
0,558458
|
0,441542
|
Waarschijnlijkheid
|
55,8%
|
44,2%
|
Als laatste stap moet de verdeling van waarschijnlijkheden aan de gebruiker worden
teruggekoppeld. Het zorgvraagtype met de hoogste waarschijnlijkheid moet worden geregistreerd.
De gebruiker kiest hierna een zorgvraagtype, dit moet een zorgvraagtype uit het betreffende
supercluster zijn. Het mag wel een zorgvraagtype zijn dat door de rode regels werd
uitgesloten van de waarschijnlijkheidsberekening.