Ero sivun ”Epidemiologinen malli” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
pEi muokkausyhteenvetoa
(teknistä viilausta)
 
(81 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{arviointi|moderaattori=Jouni}}
{{metodi|moderaattori=Jouni|edistyminen=Täysluonnos|edistymistaulu=Kyllä}}
[[op_en:Epidemiological_modelling]]  
[[op_en:Epidemiological_modelling]]  


== Kysymys ==
== Kysymys ==


Miten arvioidaan vakavan pneumokokkitaudin tautitaakka tilanteessa, jossa  
Miten arvioidaan vakavan pneumokokkitaudin [[tautitaakka]] tilanteessa, jossa
kansalliseeen rokotusohjelmaan on valittu tietyt rokoteserotyypit sisältävä konjugaattirokote?
kansalliseeen rokotusohjelmaan on valittu tietyt rokoteserotyypit sisältävä konjugaattirokote?


== Rajaus ==
* Vakava pneumokokkitauti tarkoittaa invasiivista, veriviljelyllä varmennettua pneumokokkitautia (ks. [[Vertailuperusteet|vertailuperusteet]]).
* Vakava pneumokokkitauti tarkoittaa invasiivista pneumokokkitautia (ks. [[Vertailuperusteet|vertailuperusteet]]).
* Arvioidaan tautitapausten vuosittainen määrä kaikissa ikäryhmissä.
* Arvioidaan tautitapausten vuosittainen määrä kaikisssa ikäryhmissä.
* Rokotuskattavuus, rokotteen teho ja aika rokotusten aloittamisesta ovat riittävät, jotta rokoteserotyyppien nielukantajuus ja tauti häviävät.
* Rokotuskattavuus, rokotteen teho ja aika rokotusten aloittamisesta ovat riittävät, jotta rokoteserotyyppien kantajuus ja tauti häviävät.
* Oletetaan, että rokoteserotyyppien nielukantajuus korvautuu täysin muilla pneumokokin serotyypeillä, joiden taudinaiheuttamiskyky säilyy ennallaan.
* Oletetaan, että rokoteserotyyppien kantajuus korvautuu täysin muilla serotyypeillä, joiden taudinaiheuttamiskyky säilyy ennallaan.
 


== Vastaus ==
== Vastaus ==
Mallin antama ennuste tautitapausten vuosittaisesta määrästä ikäluokittain
lasketaan ennustemallin avulla (ks. 'Perustelut' alla).


== Perustelut ==
Ennuste vakavien pneumokokkitautitapausten vuosittaisesta määrästä ikäluokittain lasketaan laskennallisen mallin avulla (ks. 'Perustelut' alla). Tässä vaiheessa ennuste koskee veriviljelypositiivista vakavaa pneumokokkitautia (invasive pneumococcal disease, IPD).


Pneumokokkitaudin rokotusten jälkeinen tautitaakka arvioidaan kantajuuden laskennallisen korvautumismallin avulla. Mallissa rokoteserotyyppien kantajuus häviää vähitellen rokotusohjelman kohdeväestössä sekä rokotetun että rokottamattoman väestönosan keskuudessa. Samalla rokotetyyppien kantajuus korvautuu ei-rokotetyyppien kantajuudella. Tämän korvautumisen seuraukset voidaan laskea ennen rokotuksia vallinneiden seotyppikohtaisten kantajuusosuuksien ja tautimäärien perusteella.  
Voit verrata eri rokotteita keskenään tai rokotetta/rokotteita tilanteeseen, jossa ei rokoteta lainkaan.


<br>
* <big>'''<u>Ohje käyttäjälle: Valitse vertailuun haluamasi rokotteet ja klikkaa painiketta "Aja koodi".</u>'''


Korvautumisen seuraukset riippuvat oleellisesti kahdesta mallissa hyödynnetystä oletuksesta
PCV10, PCV13 ja 'Ei rokoteta'-skenaarion voi tehdä suoravalintana. Sen lisäksi voit tarkastella myös rokotetta, johon itse valitset haluamasi serotyypit. Tulokset lasketaan erilliselle välilehdelle. </big>


# Rokotteen ulkopuolisten serotyyppien kantajuusosuudet toisiinsa verrattuina eivät muutu rokotuksen vaikutuksesta
<rcode embed=0 graphics=1 variables="
# Rokotuksella ei ole vaikutusta yksittäisten serotyyppien taudinaiheuttamiskykyyn
name:vac|description:Mitkä vaihtoehdot otetaan tarkasteluun?|type:checkbox|options:
'PCV10';PCV-10;
'PCV13';PCV-13;
'Ei_rokoteta';Ei rokoteta|
default:'PCV10';'PCV13'|
category:Skenaariot|
name:custom_vac|description:Haluatko lisäksi määritellä oman rokotteen?|type:selection|options:
FALSE;En;
TRUE;Kyllä|
default:FALSE|
name:vac_user|description:Valitse serotyypit uuteen konjugaattirokotteeseen|type:checkbox|options:
'1';1;
'3';3;
'4';4;
'6A';6A;
'6B';6B;
'6C';6C;
'7';7F;
'8';8;
'9N';9N;
'9V';9V;
'10';10;
'11';11;
'12';12;
'14';14;
'15';15;
'16';16;
'18C';18C;
'19A';19A;
'19F';19F;
'20';20;
'22';22;
'23A';23A;
'23F';23F;
'33';33;
'35';35;
'38';38;
'Oth';Other|
default:'19F';'23F';'6B';'14';'9V';'4';'18C';'1';'7'|
category:Oma rokote|
category_conditions:custom_vac;TRUE"
>
library(OpasnetUtils)
library(ggplot2)


Rokottamisen vaikutus tautimäärään lasketaan kantajuuden muutosten kautta ja korvautuminen pneumokokkiserotyyppien kantajuudessa heijastuu suoraan muutoksena niiden aiheuttamissa tautimäärissä. Rokotusten vaikutus kokonaistautitaakkaan riippuu oleellisesti rokoteserotyyppien taudinaiheuttamiskyvystä verrattuna muiden serotyyppien taudinaiheuttamiskykyyn.  Joidenkin serotyyppien kohdalla tarkastellaan kuitenkin myös vaihtoehtoista oletusta, jossa rokote voi vähentää serotyypin aiheuttaman taudin esiintymistä rokotettujen keskuudessa ilman vaikutusta kantajuuteen.
if(custom_vac) {
vac <- c(vac, "Oma")
}


if (length(vac) == 0) stop("Mitään skenaariota ei valittu")


user_args <- list(
Scenario = vac
)


temp <- opbase.data("Op_en6353", subset = "serotypes_in_typical_pneumococcal_vaccines")
temp$Obs <- NULL
colnames(temp)[colnames(temp) == "Result"] <- "Serotype"


[[File:Model_kuva_simplified2.jpg|alt=Figure 1]]
user_args$Vaccines <- temp[temp$Vaccine %in% user_args$Scenario, ]
 


if(custom_vac) {
user_args$Vaccines <- rbind(
user_args$Vaccines,
data.frame(Vaccine = "Oma", Serotype = vac_user)
)
}


'''Kuva 1. Korvautumismallin periaate.'''
objects.latest("Op_en6353", code_name = "initiate") # [[:op_en:Epidemiological modelling]] ovariables VacCar, VacIPD
Pneumokokin kantajuus (carriage, x-akseli) ja sairastumistapaukset kantajuusepisodia kohden (case-to-carrier ratio, y-akseli) rokotteen serotyypeille (VT) ja serotyypeille joihin rokote ei vaikuta (NVT) ennen rokotusohjelmaa (kuva A) ja sen jälkeen (kuva A). Sairastumistapaukset (DVT ja DNVT) on saatu kertomalla akseleiden arvot ja ne vastaavat kuvaajassa suorakulmion muotoisia alueita. Rokottamisen vaikutuksesta rokoteserotyyppien kantajuus häviää ja korvautuu muiden serotyyppien kantajuudella (kuva B). Tautitapausten määrä laskee hävinneen ja korvaavan kantajuuden sairastuttavuuden (RVT ja RNVT) eroavuuden vuoksi. Tautihäviämä on (kuva B) merkitty sinisellä suorakulmiolla.
 
== Viitteet ==
[http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003477  Nurhonen M, Auranen K (2014) Optimal Serotype Compositions for Pneumococcal Conjugate Vaccination under Serotype Replacement. PLoS Comput Biol 10(2): e1003477. doi:10.1371/journal.pcbi.1003477]
=== Korvautuminen ===
 
Linkki [[korvautuminen|korvautumissivulle]]
--[[Käyttäjä:Mnud|Markku N.]] ([[Keskustelu käyttäjästä:Mnud|keskustelu]]) 18. kesäkuuta 2014 kello 15.24 (UTC)otin kuvtekstin tältä sivulta
 
=== Laskenta ===
 
R-program code for the replcement model as in  File S1 of
Nurhonen M, Auranen K: Optimal serotype compositions for pneumococcal conjugate vaccination under serotype replacement [[http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003477]
 
 
==== Esimerkkejä ====
* [http://fi.opasnet.org/fi_wiki/index.php?title=Toiminnot:RTools&id=P6CXptUReneZ8YNh Example model run]
 
{{comment|# |Yritin selvittää kuinka alla oleva koodi toimii. Huomasin että vaihtaessa arvoja ajoon, niin vaikuttaisi siltä että  ajon tulokset eivät kuitenkaan muutu?  |--[[Käyttäjä:Jaakko|Jaakko]] ([[Keskustelu käyttäjästä:Jaakko|keskustelu]]) 5. kesäkuuta 2014 kello 14.13 (UTC)}}
{{comment|# |Taulukot vastaavat näköjään aina lähtömallia, joka on PCv13, mutta pylväskuviossa muutettu malli on mukana.| --[[Käyttäjä:Mnud|Markku N.]] ([[Keskustelu käyttäjästä:Mnud|keskustelu]]) 9. kesäkuuta 2014 kello 09.18 (UTC)}}
 
<rcode embed=1 graphics=1 variables="
name:q_user|description:Proportion of VT carriage removed by vaccination|default:1|
name:p_user|description:Proportion of VT carriage removed by vaccination that is replaced by NVT|default:1|
name:adultcarriers|description:The true amount of more than 5-year-old carriers is n times larger than estimated. What is n?|default:1|
name:servac_user|description:Serotypes in a vaccine to look at|type:checkbox|options:
'19F';19F;'23F';23F;'6B';6B;'14';14;'9V';9V;'4';4;'18C';18C;'1';1;'7';7;
'6A';6A;'19A';19A;'3';3;'8';8;'9N';9N;'10';10;'11';11;'12';12;'15';15;
'16';16;'20';20;'22';22;'23A';23;'33';33;'35';35;'38';38;'6C';6C;'Oth';Other|
default:'19F';'23F';'6B';'14';'9V';'4';'18C';'1';'7';'6A';'19A';'3'
">
library(OpasnetUtils)
library(ggplot2)
 
objects.latest("Op_fi4305", code_name = "alusta") # [[Pneumokokkirokote]]
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]]
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]]


openv.setN(100)
openv.setN(100)
## Read the annual IPD and carriage incidence data.
## The 0 entries in IPD and carriage data are replaced by small values.
serotypes<-c(
"19F", "23F", "6B", "14", "9V", "4", "18C", "1", "7",
"6A", "19A", "3", "8", "9N", "10", "11", "12", "15",
"16", "20", "22", "23A", "33", "35", "38", "6C", "Oth")
car_under5<-c(
156030, 156030, 126990, 41200, 22290, 12830, 10130, 10, 14180,
54940, 24320, 12160, 1350, 20940, 4050, 72270, 10, 33100,
3380, 1350, 12160, 3380, 680, 30400, 4050, 27470, 24320 )
car_over5<-c(
168100, 314800, 256700, 209800, 114100, 62500, 200700, 100, 100,
158800, 54900, 30800, 8800, 8800, 20800, 97700, 100, 100,
191900, 25200, 72500, 22000, 100, 71300, 100, 79400, 330100 )
ipd_under5<-c(
7.78, 7.88, 24.39, 20.76, 2.91, 2.91, 6.64, 0.31, 3.02,
3.94, 9.88, 1.25, 0.10, 0.83, 0.41, 0.42, 0.21, 1.98,
0.21, 0.01, 0.93, 0.10, 0.42, 0.31, 0.42, 0.01, 0.73 )
ipd_over5<-c(
28.51, 53.72, 29.53, 99.43, 43.07, 76.99, 24.39, 6.58, 46.88,
17.42, 20.54, 55.04, 11.21, 25.20, 6.28, 12.76, 13.89, 9.18,
4.73, 3.29, 29.03, 4.40, 5.64, 12.41, 1.43, 5.50, 11.20 )
## Combine the data into 2 matrices of dimension 27*2:
IPD<-cbind(ipd_under5, ipd_over5)
Car<-cbind(car_under5, car_over5)
## Row numbers corresponding to the 3 different PCV formulations
## in matrices IPD and Car. Note: there is no serotype 5 in our data.
pcv7rows<-seq(7); pcv10rows<-seq(9); pcv13rows<-seq(12)
## Example S1.2A: Calculate the predicted incidence of IPD for the non-vaccine
## types(NVTs) under PCV13. The predictions are calculated separately for the
## two age classes. These are the values reported on the bottom panel in
## Figure 2 (there given as per 100K incidences).
postvacc <-Vaccination(IPD,Car,VT_rows=pcv13rows,p=1,q=1)
cat("Incidence of invasive pneumococcal disease after vaccination program (p=1, q=1).\n")
oprint(cbind(serotypes,postvacc[[1]]))
cat("Number of carriers after vaccination program.\n")
oprint(cbind(serotypes,postvacc[[2]]))
## Example S1.2B: Decrease in IPD incidence after adding a single new serotype
## to PCV13 separately for the two age categories.
next_under5<-NextVT(IPD[,1],Car[,1], VT_rows=pcv13rows,p=1)
next_over5 <-NextVT(IPD[,2],Car[,2], VT_rows=pcv13rows,p=1)
cat("Next serotype to add to a vaccine (p=1).\n")
oprint(rbind(serotypes, next_under5, next_over5))
# Nämä taulukot kannattaisi transposata niin näyttäisivät siistimmiltä.
## Example S1.3A: The optimal sequence for under 5 year olds when replacement is 100%.
## The output shows the decreases in IPD incidence for each step,
## corresponding to Figure 5(C). The last serotype (row 27, the category "Other")
## is excluded from any vaccine composition but is taken into account as a
## replacing serotype at each stage.
opt<-OptimalSequence(IPD[,1],Car[,1],VT_rows=0,Excluded_rows=27,p=1.0,HowmanyAdded=20)
cat("Optimal sequence of serotypes to add to a vaccine (p=1, HowmanyAdded=20).\n")
oprint(rbind(serotypes[opt[1,]],opt[2,]))
## Example S1.3B: The optimal sequence for the whole population when
## replacement is 50% and the current composition includes the PCV7 serotypes.
opt<-OptimalSequence(IPD,Car, VT_rows=pcv7rows,Excluded_rows=length(serotypes),
p=0.5,HowmanyAdded=17)
cat("Optimal sequence of serotypes to add to a vaccine (p=0.5, HownamyAdded=17).\n")
oprint(rbind(serotypes[opt[1,]],opt[2,]))
###################################


## Read the annual IPD and carriage incidence data.
## Read the annual IPD and carriage incidence data.
Rivi 156: Rivi 108:
Car@data <- Car@data[Car@data$Observation == "Carrier" , colnames(Car@data) != "Observation"]
Car@data <- Car@data[Car@data$Observation == "Carrier" , colnames(Car@data) != "Observation"]


servac <- Ovariable("servac", data = data.frame(
serotypes<-c(
Vaccine = rep(c("Current", "New"), each = length(serotypes)),
"19F", "23F", "6B", "14", "9V", "4", "18C", "1", "7",
Serotype = serotypes,
"6A", "19A", "3", "8", "9N", "10", "11", "12", "15",
Result = as.numeric(c(
"16", "20", "22", "23A", "33", "35", "38", "6C", "Oth"
serotypes %in% c("19F", "23F", "6B", "14", "9V", "4", "18C", "1", "7","6A", "19A", "3"),
)
serotypes %in% servac_user
 
))
# Näyttää monimutkaiselta tuo servacin määrittely. Eikö voisi tehdä helpomminkin?
))
 
servac <- merge(data.frame(Vaccine = user_args$Scenario), data.frame(Serotype = serotypes))
servac <- merge(
data.frame(user_args$Vaccines, Result = 1),  
servac,
all.y = TRUE
)
servac$Result <- as.numeric(!is.na(servac$Result))
servac <- Ovariable(
"servac",
data = servac
)
 
p_user <- q_user <- adultcarriers <- 1


p <- Ovariable("p", data = data.frame(Result = p_user))
p <- Ovariable("p", data = data.frame(Result = p_user))
Rivi 175: Rivi 140:
VacIPD <- EvalOutput(VacIPD)
VacIPD <- EvalOutput(VacIPD)


cat("Number of carriers\n")
if (1==0) {
oprint(summary(VacCar))
cat("servac\n")
cat("Incidence of invasive pneumococcal disease.\n")
oprint(summary(servac))
oprint(summary(VacIPD))
cat("Number of carriers\n")
oprint(summary(VacCar))
cat("Incidence of invasive pneumococcal disease.\n")
oprint(summary(VacIPD))
}


if("Iter" %in% colnames(VacCar@output)) N <- max(VacCar@output$Iter) else N <- 1
if("Iter" %in% colnames(VacCar@output)) N <- max(VacCar@output$Iter) else N <- 1


ggplot(VacCar@output, aes(x = Serotype, weight = result(VacCar) / N, fill = Vaccine)) + geom_bar(position = "dodge") + theme_gray(base_size = 24) +  
if (1==0) {ggplot(VacCar@output, aes(x = Serotype, weight = result(VacCar) / N, fill = Vaccine)) + geom_bar(position = "dodge") + theme_gray(base_size = 24) +  
labs(title = "Carriers", y = "Number of carriers in Finland")
labs(title = "Carriers", y = "Number of carriers in Finland") }


ggplot(VacIPD@output, aes(x = Serotype, weight = result(VacIPD) / N, fill = Vaccine)) + geom_bar(position = "dodge") + theme_gray(base_size = 24) +
ggplot(VacIPD@output, aes(x = Serotype, weight = result(VacIPD) / N, fill = Vaccine)) + geom_bar(position = "dodge") + theme_gray(base_size = 24) +
labs(title = "Incidence of invasive pneumococcal disease", y = "Number of cases / 100000 py")
labs(title = "Incidence of invasive pneumococcal disease", y = "Number of cases per year")


ggplot(VacIPD@output, aes(x = Vaccine, weight = result(VacIPD) / N, fill = Age)) + geom_bar(position = "stack") + theme_gray(base_size = 24) +
ggplot(VacIPD@output, aes(x = Vaccine, weight = result(VacIPD) / N, fill = Age)) + geom_bar(position = "stack") + theme_gray(base_size = 24) +
labs(title = "Incidence of invasive pneumococcal disease", y = "Number of cases / 100000 py")
labs(title = "Incidence of invasive pneumococcal disease", y = "Number of cases per year")


</rcode>
</rcode>


=== Funktioiden alustus ===
== Perustelut ==


<rcode name="alusta" label="Alusta funktiot" embed=1>
Pneumokokkitaudin rokotusten jälkeinen [[tautitaakka]] arvioidaan nielukantajuuden laskennallisen korvautumismallin <ref name="optimal"> Nurhonen M, Auranen K (2014) Optimal Serotype Compositions for Pneumococcal Conjugate Vaccination under Serotype Replacement. PLoS Computational Biology 10(2): e1003477. [http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1003477]</ref> avulla. Mallissa rokoteserotyyppien nielukantajuus häviää vähitellen rokotusohjelman kohdeväestöstä sekä rokotetun että rokottamattoman väestönosan keskuudessa. Samalla rokotetyyppien nielukantajuus korvautuu ei-rokotetyyppien kantajuudella. Tämän korvautumisen seuraukset voidaan laskea ennen rokotuksia vallinneiden serotyyppikohtaisten nielukantajuusosuuksien ja tautimäärien perusteella. Mallissa oletetaan, että rokoteserotyyppien nielunkantajuus korvautuu täysin ei-rokotetyyppien kantajuudella rokotteen saamimsen jälkeen.


library(OpasnetUtils)
Korvautumisen seuraukset riippuvat oleellisesti kahdesta mallissa hyödynnetystä oletuksesta
# Rokotteeseen kuulumattomien serotyyppien nielukantajuusosuudet toisiinsa verrattuina eivät muutu rokotuksen vaikutuksesta
# Rokotuksella ei ole vaikutusta yksittäisten serotyyppien taudinaiheuttamiskykyyn


#S1.4. The R-functions
Rokottamisen vaikutus tautimäärään lasketaan nielukantajuuden muutosten kautta ja korvautuminen pneumokokkiserotyyppien nielukantajuudessa heijastuu suoraan muutoksena niiden aiheuttamissa tautimäärissä. Rokotusten vaikutus kokonaistautitaakkaan riippuu oleellisesti rokoteserotyyppien taudinaiheuttamiskyvystä verrattuna muiden serotyyppien taudinaiheuttamiskykyyn. Joidenkin serotyyppien kohdalla tarkastellaan kuitenkin myös vaihtoehtoista oletusta, jossa rokote voi vähentää serotyypin aiheuttaman taudin esiintymistä rokotettujen keskuudessa ilman vaikutusta nielukantajuuteen. Pneumokokkien aiheuttama vuosittainen tautimäärä arvioidaan kaikissa ikäryhmissä.
###############################################################################
##
## R code for the core methods introduced in
## Markku Nurhonen and Kari Auranen:
## "Optimal serotype compositions for pneumococcal conjugate
## vaccination under serotype replacement",
## PLoS Computational Biology, 2014.
##
###############################################################################
## List of arguments common to most functions:
##
## IPD = matrix of IPD incidences by age class (columns) and serotype (rows)
## Car = corresponding matrix of carriage incidences
## VT_rows = vector of the row numbers in matrices IPD and Car
## corresponding to vaccine types (VT_rows=0 for no vaccination)
## p = proportion of lost VT carriage which is replaced by NVT carriage
## q = proportion of VT carriage lost either due to elimination or replacement
##
## This code includes 4 functions:
## Vaccination, NextVT, OptimalSequence and OptimalVacc.
##


Vaccination<-function(IPD,Car,VT_rows,p,q) {
Mallissa keskitytään tarkastelemaan vakavia eli invasiivisia, veriviljelyllä varmennettua pneumokokkitautia (ks. [[Vertailuperusteet|vertailuperusteet]]). Nämä syntyvät bakteerien päästessä elimistön muuten steriileille alueille vereen, selkäydinnesteeseen tai aivoihin, joissa ne aiheuttavat bakteremiaa ja aivokalvontulehdusta. Pneumokokkien aiheuttamat välikorvan tulehdukset ja keuhkokuumeet jäävät vähemmälle huomiolle.
##
## Result:
## A list of 2 matrices: IPD and carriage incidences
## after vaccination (corresponding to matrices IPD and Car).
## [Markku Nurhonen 2013]
##
if (VT_rows[1]>0) {
IPD<-as.matrix(IPD); Car<-as.matrix(Car)
# Post vaccination carriage incidences
Car_Total<-t(matrix(apply(Car,2,sum),dim(Car)[2],dim(Car)[1]))
Car2<-Car; Car2[VT_rows,]<-0
Car_NVT<-t(matrix(apply(Car2,2,sum),dim(Car2)[2],dim(Car2)[1]))
Car_VT<-Car_Total-Car_NVT
CarNew<-q*(1+p*Car_VT/Car_NVT)*Car2+(1-q)*Car
# Post vaccination IPD incidences
NVT_rows<-seq(dim(IPD)[1])[-1*VT_rows]
# CCR=Case-to-carrier ratios
CCR<-IPD/Car ; IPDNew<-0*IPD
# Apply the equation appearing above
# equation (1) in text for each serotype.
# First term applies to NVTs.
IPDNew[VT_rows,]<-(1-q)*IPD[VT_rows,]
# Second term applies to NVTs.
IPDNew[NVT_rows,]<-((Car_NVT+p*q*Car_VT)*(Car/Car_NVT)*CCR)[NVT_rows,]
}
else {
IPDNew<-IPD; CarNew<-Car
}
list(IPDNew,CarNew)
}


NextVT<-function(IPD,Car,VT_rows,p) {
Korvautumismalli on rakennettu vastaamaan konjugaattirokotteiden käytöstä viimeisten 15 vuoden aikana eri puolilla maailmaa kertynyttä kokemusta ja alan tieteellistä tutkimusta. Joistakin viimeisimmistä alan vertaisarvioiduista tutkimusartikkeleista on luettelo erillisellä sivulla: [[Viitteet]].
##
## Result:
## A vector of decreases in IPD due to adding a serotype
## to the vaccine. If VT_rows=0, initially no vaccination.
## For row indexes incuded in VT_rows, the result is 0.
## [Markku Nurhonen 2013]
##
IPD<-as.matrix(IPD); Car<-as.matrix(Car)
## VaccMat = IPD and Car matrices after vaccination
VaccMat<-Vaccination(IPD,Car,VT_rows,p,1)
IPD<-VaccMat[[1]]; Car<-VaccMat[[2]]
## Total_IPD,Total_Car = Matrices corresponding to
## overall IPD and carriage in each age class.
Total_IPD<-t(matrix(apply(IPD,2,sum),dim(IPD)[2],dim(IPD)[1]))
Total_Car<-t(matrix(apply(Car,2,sum),dim(Car)[2],dim(Car)[1]))
## Effect = decrease in IPD when one serotype is added to the vaccine.
## See equation (3) in text.
Effect<-(Total_IPD-IPD)*((IPD/(Total_IPD-IPD))-(p*Car/(Total_Car-Car)))
## Special case when only one NVT remains.
IPD_nonzero<-which(apply(IPD,1,sum)!=0)
if (length(IPD_nonzero)==1) {Effect[IPD_nonzero,]<-IPD[IPD_nonzero,]}


## Result is obtained after summation over age classes.
=== Korvautuminen ===
apply(Effect,1,sum)
}


OptimalSequence<-function(IPD,Car,VT_rows,Excluded_rows,p,HowmanyAdded) {
[[Korvautuminen]] on ilmiö, jossa rokotusten hävittämät pneumokokkiserotyypit korvautuvat väestössä osittain muilla serotyypeillä. Tällöin pneumokokkien kokonaismäärä ei vähene väestössä niin paljon kuin rokoteserotyyppien yleisyys antaisi olettaa. Ilmiötä on tarkemmin kuvattu [[korvautuminen|omalla sivullaan]].
##
## Starting from VTs indicated by the vector VT_rows
## (VT_rows=0, for no vaccination) sequentially add new VTs
## to the vaccine composition s.t. at each step the optimal
## serotype (corresponding to largest decrease in IPD) is added.
##
## Excluded_rows = Vector of indexes of the rows in matrices
## IPD and Car corresponding to serotypes that are not to
## be included in a vaccine composition, e.g. a row
## corresponding to a group of serotypes labelled "Other".
## Enter Excluded_rows=0 for no excluded serotypes.
## HowmanyAdded = number of VTs to be added.
##
## Result:
## Matrix of dimension 2*HowmanyAdded with 1st row indicating
## the row numbers of added serotypes in the order they appear
## in the sequence. The 2nd row lists the decreases in IPD
## due to addition of each type. [Markku Nurhonen 2013]
##
IPD<-as.matrix(IPD); Car<-as.matrix(Car)
## First check the maximum possible number of added VTs.
VT_howmany<-length(VT_rows)
if (VT_rows[1]==0) {VT_howmany<-0}
Excluded_howmany<-length(Excluded_rows)
if (Excluded_rows[1]==0) {Excluded_howmany<-0}
HowmanyAdded<-min(HowmanyAdded,dim(IPD)[1]-(VT_howmany+Excluded_howmany))
BestVTs<-BestEffects<-rep(0,HowmanyAdded)
## Sequential procedure: at each step find the best additional VT.
for (i in 1:HowmanyAdded) {
## Effects = Decrease in IPD after addition of each serotype
Effects<-NextVT(IPD,Car,VT_rows,p)
## Set Effects for VTs and excluded types equal to small values
## so that none of these will be selected as the next VT.
minvalue<- -2*max(abs(Effects))
if (Excluded_howmany>0) {Effects[Excluded_rows]<-minvalue}
if (VT_rows[1]>0) {Effects[VT_rows]<-minvalue}
## BestVTs[i] = Index of serotype with maximum decrease in IPD.
BestVTs[i]<-order(-1*Effects)[1]
## BestEffects[i] = Decrese in IPD due to addition of BestVTs[i]
## to the vaccine.
BestEffects[i]<-Effects[BestVTs[i]]
VT_rows<-c(VT_rows,BestVTs[i])
if (VT_rows[1]==0) {VT_rows<-VT_rows[-1]}
VaccMat<-Vaccination(IPD,Car,VT_rows,p,1)
IPD<-VaccMat[[1]]; Car<-VaccMat[[2]]
}
t(matrix(c(BestVTs,BestEffects),HowmanyAdded,2))
}


OptimalVacc<-function(IPD,Car,VT_rows,p,q,HowmanyAdded) {
[[File:Model_kuva_simplified2.jpg|thumb|center|600px|'''Kuva 1. Korvautumismallin periaate.'''
##
Pneumokokin nielukantajuus (carriage, x-akseli) ja sairastumistapaukset kantajuusepisodia kohden (case-to-carrier ratio, y-akseli) rokotteen serotyypeille (VT) ja serotyypeille joihin rokote ei vaikuta (NVT) ennen rokotusohjelmaa (kuva A) ja sen jälkeen (kuva A). Sairastumistapaukset (DVT ja DNVT) on saatu kertomalla akseleiden arvot ja ne vastaavat kuvaajassa suorakulmion muotoisia alueita. Rokottamisen vaikutuksesta rokoteserotyyppien nielukantajuus häviää ja korvautuu muiden serotyyppien kantajuudella (kuva B). Tautitapausten määrä laskee hävinneen ja korvaavan nielukantajuuden sairastuttavuuden (RVT ja RNVT) eroavuuden vuoksi. Tautihäviämä on (kuva B) merkitty sinisellä suorakulmiolla.]]
## Result:
## A list of 3 elements: (1) Row numbers of serotypes in the optimal
## vaccine composition (2)-(3) IPD and carriage incidences
## by serotype and age class corresponding to the optimal
## vaccine formed using the sequential procedure in the
## function OptimalSequence. [Markku Nurhonen 2013]
##
Additional_VTs<-OptimalSequence(IPD,Car,VT_rows,p,HowmanyAdded)[1,]
All_VTs<-c(VT_rows,Additional_VTs)
if (All_VTs[1]==0) All_VTs<-All_VTs[-1]
VaccMat<-Vaccination(IPD,Car,All_VTs,p,q)
list(All_VTs,VaccMat[[1]],VaccMat[[2]])
}


VacCar <- Ovariable("VacCar",
=== Aineisto ===
dependencies = data.frame(Name = c(
"IPD", # incidence of pneumococcus disease
"Car", # number of carriers of pneumococcus
"servac", # ovariable of serotypes in vaccine (1 for serotypes in a vaccine, otherwise result is 0)
"p", # proportion of eliminated VT carriage that is replaced by NVT carriage
"q" # proportion of of VT carriage eliminated by vaccine
)),
formula = function(...) {
## Result:
## An ovariable of carriage incidences
## after vaccination (corresponding to Car).
## [Markku Nurhonen 2013, Jouni Tuomisto 2014]
# Post vaccination carriage incidences
# Sum over serotypes and drop extra columns
Car_Total<- unkeep(oapply(Car, cols = "Serotype", FUN = sum) * 1, prevresults = TRUE)
# Car2 is a temporary ovariable with NVT carriers only
Car2 <- unkeep(Car * (1 - servac), prevresults = TRUE) # Take only NVT carriers
Car_NVT <- oapply(Car2, cols = "Serotype", FUN = sum) # Carriers of serotypes not in vaccine (NVT)
Car_VT <- Car_Total - Car_NVT # Carriers of vaccine serotypes


CarNew <- q * (1 + p * Car_VT / Car_NVT) * Car2 + (1 - q) * Car
Epidemiologinen malli perustuu kahteen aineistoon: (a) pneumokokkibakteerin nielukantajuuden ilmaantuvuus ja serotyyppijakauma sekä (b) vakavan pneumokokkitaudin ilmaantuvuus. Ks. aineistot alla olevast linkistä.


return(CarNew)
{{piilotettu|
}
)
VacIPD <- Ovariable("VacIPD",
dependencies = data.frame(Name = c(
"IPD", # incidence of pneumococcus disease
"Car", # number of carriers of pneumococcus
"servac", # ovariable of serotypes in vaccine (1 for serotypes in a vaccine, otherwise result is 0)
"p", # proportion of eliminated VT carriage that is replaced by NVT carriage
"q" # proportion of of VT carriage eliminated by vaccine
)),
formula = function(...) {
## Result:
## An ovariable of IPD incidence
## after vaccination (corresponding to ovariable IPD).
## [Markku Nurhonen 2013, Jouni Tuomisto 2014]
# Post vaccination carriage incidences (same code as in VacCar)
Car_Total <- unkeep(oapply(Car, cols = "Serotype", FUN = sum) * 1, prevresults = TRUE) # Sums over serotypes
Car2 <- unkeep(Car * (1 - servac), prevresults = TRUE)
Car_NVT <- oapply(Car2, cols = "Serotype", FUN = sum) # Carriers of serotypes not in vaccine (NVT)
Car_VT <- Car_Total - Car_NVT # Carriers of vaccine serotypes
CarNew <- q * (1 + p * Car_VT / Car_NVT) * Car2 + (1 - q) * Car
# Post vaccination IPD incidences
# CCR=Case-to-carrier ratios
CCR <- IPD / Car


# Apply the equation appearing above
Pneumokokin nielukantajuus (sarake Kantajuus, oireettomien kantajuusepisodien arvioitu lukumäärä vuodessa vuodessa)ja vakavan pneumokokkitaudin (IPD) keskimääräinen tapausmäärä vuodessa (sarake IPD) serotyypeittäin ja erikseen ikäryhmissä <5 ja 5+ vuotiaat. IPD-aineisto on vuosilta 2000-2009. Epidemiologisen mallin laskenta perustuu tähän aineistoon. Aineisto on sama kuin mallin esitelleessä tutkimisartikkelissa <ref name="optimal"></ref> käytetty aineisto.
# equation (1) in text for each serotype.
# First term applies to VTs.
IPDNewVT <- (1 - q) * IPD * servac


# Second term applies to NVTs.
<t2b name='Pneumokokki väestössä ' index='Serotyyppi,Ikäluokka,Observation' locations='Kantajuus,IPD' unit='tapausten lukumäärä vuodessa'>
IPDNewNVT <- (Car_NVT + p * q * Car_VT) * (Car / Car_NVT) * CCR * (1 - servac)
 
IPDNew <- IPDNewVT + IPDNewNVT
 
return(IPDNew)
}
)
 
objects.store(Vaccination, NextVT, OptimalSequence, OptimalVacc, VacCar, VacIPD)
 
cat("Funktiot Vaccination, NextVT, OptimalSequence, OptimalVacc sekä ovariablet VacCar, VacIPD tallennettu. \n")
 
</rcode>
 
=== Data ===
 
Pneumokokin esiintyvyys suomalaisessa väestössä. Carrier: (oireettomien) kantajien lukumäärä, Incidence: invasiivisen pneumokokkitaudin ilmaantuvuus 100000 henkilövuotta kohti.
 
{{piilotettu|
<t2b name='Pneumokokki väestössä' index='Serotype,Age,Observation' locations='Carrier,Incidence' unit='#, #/100000py'>
19F|Under 5|156030|7.78
19F|Under 5|156030|7.78
23F|Under 5|156030|7.88
23F|Under 5|156030|7.88
Rivi 488: Rivi 249:
Oth|Over 5|330100|11.2
Oth|Over 5|330100|11.2
</t2b>
</t2b>
}}
}}
=== Laskenta ===
Laskentaohjelman avulla voidaan verrata keskenään rokotteita PCV10 ja PCV13 (ks. käyttöliittymä yllä kohdassa 'Vastaus'). Lisäksi mukana vertailussa voi olla käyttäjän valitsemat serotyypit sisältävä pneumokokkirokote sekä tilanne, jossa ei rokoteta. Tuloksena esitetään mallin mukainen vakavien pneumokokkitautitapausten lukumäärä Suomessa vuosittain ensin serotyyppikohtaisesti ja sen jälkeen erikseen eri ikäluokissa. Ohjelmakoodi perustuu viitteen <ref name="optimal"></ref> liitetiedostoon S1.
Alkuperäinen koodi arkistoitu [http://opasnet.fi/fi_wiki/index.php?title=Epidemiologinen_malli&oldid=24970#Vastaus täällä].
=== Herkkyysanalyysi ===
Epidemiologisen mallin herkyyttä rokotteisiin sisältyvien serotyyppien oletetun suojan suhteen tarkastellaan erillisellä sivulla: [[:op_en:Sensitivity_analysis_pcv_model|herkkyysanalyysi]]. Herkkyysanalyysin perusteella mallin antamiin ennusteisiin eniten vaikuttava oletus liittyy serotyypin 3 rooliin 13-valenttisessa rokotteessa.
=== Funktioiden alustus (vain sovelluskehittäjille) ===
Mallissa käytetään samoja funktioita ja ovariableja kuin englanninkielisessä mallissa. Katso siis [[:op_en:Epidemiological modelling#Initiate functions]].


== Katso myös ==
== Katso myös ==
Rivi 494: Rivi 270:
{{pneumokokkirokote}}
{{pneumokokkirokote}}


Pneumokokki eli ''Streptococcus pneumoniae'' -bakteeri on maailmanlaajuisesti merkittävä lapsikuolleisuuden aiheuttaja. Siksi toimiva pneumokokkibakteerin rokotusohjelma on kansanterveystyönä kustannustehokkaimpien joukossa. Imeväisten rokottamisessa on käytetty kolmea eri konjugaattirokotetta, jotka sisältävät joko 7, 10 tai 13 pneumokokkiserotyyppiä. Rokotteet ovat sekä vähentäneet pneumokokin aiheuttamien sairauksien haittoja että muuttaneet pneumokokkiserotyppien keskinäisiä kantajuusosuuksia.
== Viitteet ==
 
<references/>
 
== Kommentoi ==
 
{{kommentointityökalu}}

Nykyinen versio 8. syyskuuta 2014 kello 10.01

Edistymisluokitus
Opasnetissa lukuisat sivut ovat työn alla eri vaiheissa. Niiden tietosisältöön pitää siis suhtautua harkiten. Tämän sivun sisällön edistyminen on arvioitu:
Tämä sivu on täysluonnos
Sivu on kirjoitettu kertaalleen alusta loppuun eli kaikki olennaiset sisällöt ovat jo paikoillaan. Kuitenkaan sisältöjä ei ole vielä kunnolla tarkistettu, ja esimerkiksi tärkeitä viitteitä voi puuttua.


Kysymys

Miten arvioidaan vakavan pneumokokkitaudin tautitaakka tilanteessa, jossa kansalliseeen rokotusohjelmaan on valittu tietyt rokoteserotyypit sisältävä konjugaattirokote?

  • Vakava pneumokokkitauti tarkoittaa invasiivista, veriviljelyllä varmennettua pneumokokkitautia (ks. vertailuperusteet).
  • Arvioidaan tautitapausten vuosittainen määrä kaikissa ikäryhmissä.
  • Rokotuskattavuus, rokotteen teho ja aika rokotusten aloittamisesta ovat riittävät, jotta rokoteserotyyppien nielukantajuus ja tauti häviävät.
  • Oletetaan, että rokoteserotyyppien nielukantajuus korvautuu täysin muilla pneumokokin serotyypeillä, joiden taudinaiheuttamiskyky säilyy ennallaan.


Vastaus

Ennuste vakavien pneumokokkitautitapausten vuosittaisesta määrästä ikäluokittain lasketaan laskennallisen mallin avulla (ks. 'Perustelut' alla). Tässä vaiheessa ennuste koskee veriviljelypositiivista vakavaa pneumokokkitautia (invasive pneumococcal disease, IPD).

Voit verrata eri rokotteita keskenään tai rokotetta/rokotteita tilanteeseen, jossa ei rokoteta lainkaan.


  • Ohje käyttäjälle: Valitse vertailuun haluamasi rokotteet ja klikkaa painiketta "Aja koodi".

PCV10, PCV13 ja 'Ei rokoteta'-skenaarion voi tehdä suoravalintana. Sen lisäksi voit tarkastella myös rokotetta, johon itse valitset haluamasi serotyypit. Tulokset lasketaan erilliselle välilehdelle.

Skenaariot

Mitkä vaihtoehdot otetaan tarkasteluun?:
PCV-10
PCV-13
Ei rokoteta

Haluatko lisäksi määritellä oman rokotteen?:

Oma rokote

Valitse serotyypit uuteen konjugaattirokotteeseen:
1
3
4
6A
6B
6C
7F
8
9N
9V
10
11
12
14
15
16
18C
19A
19F
20
22
23A
23F
33
35
38
Other

+ Näytä koodi

Perustelut

Pneumokokkitaudin rokotusten jälkeinen tautitaakka arvioidaan nielukantajuuden laskennallisen korvautumismallin [1] avulla. Mallissa rokoteserotyyppien nielukantajuus häviää vähitellen rokotusohjelman kohdeväestöstä sekä rokotetun että rokottamattoman väestönosan keskuudessa. Samalla rokotetyyppien nielukantajuus korvautuu ei-rokotetyyppien kantajuudella. Tämän korvautumisen seuraukset voidaan laskea ennen rokotuksia vallinneiden serotyyppikohtaisten nielukantajuusosuuksien ja tautimäärien perusteella. Mallissa oletetaan, että rokoteserotyyppien nielunkantajuus korvautuu täysin ei-rokotetyyppien kantajuudella rokotteen saamimsen jälkeen.

Korvautumisen seuraukset riippuvat oleellisesti kahdesta mallissa hyödynnetystä oletuksesta

  1. Rokotteeseen kuulumattomien serotyyppien nielukantajuusosuudet toisiinsa verrattuina eivät muutu rokotuksen vaikutuksesta
  2. Rokotuksella ei ole vaikutusta yksittäisten serotyyppien taudinaiheuttamiskykyyn

Rokottamisen vaikutus tautimäärään lasketaan nielukantajuuden muutosten kautta ja korvautuminen pneumokokkiserotyyppien nielukantajuudessa heijastuu suoraan muutoksena niiden aiheuttamissa tautimäärissä. Rokotusten vaikutus kokonaistautitaakkaan riippuu oleellisesti rokoteserotyyppien taudinaiheuttamiskyvystä verrattuna muiden serotyyppien taudinaiheuttamiskykyyn. Joidenkin serotyyppien kohdalla tarkastellaan kuitenkin myös vaihtoehtoista oletusta, jossa rokote voi vähentää serotyypin aiheuttaman taudin esiintymistä rokotettujen keskuudessa ilman vaikutusta nielukantajuuteen. Pneumokokkien aiheuttama vuosittainen tautimäärä arvioidaan kaikissa ikäryhmissä.

Mallissa keskitytään tarkastelemaan vakavia eli invasiivisia, veriviljelyllä varmennettua pneumokokkitautia (ks. vertailuperusteet). Nämä syntyvät bakteerien päästessä elimistön muuten steriileille alueille vereen, selkäydinnesteeseen tai aivoihin, joissa ne aiheuttavat bakteremiaa ja aivokalvontulehdusta. Pneumokokkien aiheuttamat välikorvan tulehdukset ja keuhkokuumeet jäävät vähemmälle huomiolle.

Korvautumismalli on rakennettu vastaamaan konjugaattirokotteiden käytöstä viimeisten 15 vuoden aikana eri puolilla maailmaa kertynyttä kokemusta ja alan tieteellistä tutkimusta. Joistakin viimeisimmistä alan vertaisarvioiduista tutkimusartikkeleista on luettelo erillisellä sivulla: Viitteet.

Korvautuminen

Korvautuminen on ilmiö, jossa rokotusten hävittämät pneumokokkiserotyypit korvautuvat väestössä osittain muilla serotyypeillä. Tällöin pneumokokkien kokonaismäärä ei vähene väestössä niin paljon kuin rokoteserotyyppien yleisyys antaisi olettaa. Ilmiötä on tarkemmin kuvattu omalla sivullaan.

Kuva 1. Korvautumismallin periaate. Pneumokokin nielukantajuus (carriage, x-akseli) ja sairastumistapaukset kantajuusepisodia kohden (case-to-carrier ratio, y-akseli) rokotteen serotyypeille (VT) ja serotyypeille joihin rokote ei vaikuta (NVT) ennen rokotusohjelmaa (kuva A) ja sen jälkeen (kuva A). Sairastumistapaukset (DVT ja DNVT) on saatu kertomalla akseleiden arvot ja ne vastaavat kuvaajassa suorakulmion muotoisia alueita. Rokottamisen vaikutuksesta rokoteserotyyppien nielukantajuus häviää ja korvautuu muiden serotyyppien kantajuudella (kuva B). Tautitapausten määrä laskee hävinneen ja korvaavan nielukantajuuden sairastuttavuuden (RVT ja RNVT) eroavuuden vuoksi. Tautihäviämä on (kuva B) merkitty sinisellä suorakulmiolla.

Aineisto

Epidemiologinen malli perustuu kahteen aineistoon: (a) pneumokokkibakteerin nielukantajuuden ilmaantuvuus ja serotyyppijakauma sekä (b) vakavan pneumokokkitaudin ilmaantuvuus. Ks. aineistot alla olevast linkistä.



Laskenta

Laskentaohjelman avulla voidaan verrata keskenään rokotteita PCV10 ja PCV13 (ks. käyttöliittymä yllä kohdassa 'Vastaus'). Lisäksi mukana vertailussa voi olla käyttäjän valitsemat serotyypit sisältävä pneumokokkirokote sekä tilanne, jossa ei rokoteta. Tuloksena esitetään mallin mukainen vakavien pneumokokkitautitapausten lukumäärä Suomessa vuosittain ensin serotyyppikohtaisesti ja sen jälkeen erikseen eri ikäluokissa. Ohjelmakoodi perustuu viitteen [1] liitetiedostoon S1.

Alkuperäinen koodi arkistoitu täällä.

Herkkyysanalyysi

Epidemiologisen mallin herkyyttä rokotteisiin sisältyvien serotyyppien oletetun suojan suhteen tarkastellaan erillisellä sivulla: herkkyysanalyysi. Herkkyysanalyysin perusteella mallin antamiin ennusteisiin eniten vaikuttava oletus liittyy serotyypin 3 rooliin 13-valenttisessa rokotteessa.

Funktioiden alustus (vain sovelluskehittäjille)

Mallissa käytetään samoja funktioita ja ovariableja kuin englanninkielisessä mallissa. Katso siis op_en:Epidemiological modelling#Initiate functions.

Katso myös

Tämä rokotehankintakeskustelu toimitettiin tiedoksi kansalliselle rokotusasiantuntijaryhmälle 8.9.2014.

Pneumokokkirokotteen hankinta kansalliseen rokotusohjelmaan
Arvioinnin osat

ROKOTEKYSELY - VASTAA TÄSTÄ · Rokotteen vertailuperusteet · Epidemiologinen malli · Taloudellinen arviointi

Englanninkieliset sivut

Tendering process for pneumococcal conjugate vaccine · Comparison criteria for vaccine · Epidemiological modelling · Economic assessment

Taustatietoa

Pneumokokki · Työjärjestys · Pneumokokkirokotevalmisteet · Kansallinen rokotusohjelma · Pneumokokkikonjugaattirokotteen vaikuttavuuden seuranta · Korvautuminen · Viitteet · Herkkyysanalyysi(Tal.arv.) · Rokotesanasto · Pneumokokkirokotteen turvallisuus

Tulosta: Koko materiaali · Pneumokokkirokotekysely


Viitteet

  1. 1,0 1,1 1,2 Nurhonen M, Auranen K (2014) Optimal Serotype Compositions for Pneumococcal Conjugate Vaccination under Serotype Replacement. PLoS Computational Biology 10(2): e1003477. [1]

Kommentoi