Metodología bayesiana con modelos latentes (Autora: A.B. Ruiz-García)
11/04/19 11:12 ..... Divulgacion
En nuestro laboratorio hemos desarrollado una metodología bayesiana con empleo de modelos latentes para la estima de parámetros de diagnóstico de técnicas que facilite la toma de decisiones y método apropiado de detección, cuando no se dispone de técnica de referencia o gold-standard. El modelo se ha desarrollado empleando un virus de vid presente en España para poder evaluarlo con vistas a aplicarlo a virus emergentes.
A continuación se detalla la programación del modelo:
Código de OpenBUGS, que asume dos técnicas condicionalmente dependientes DAS-ELISA (ELISA) y spot real-time RT-PCR (spot), y una tercera independiente, real-time RT-PCR convencional (qPCR), y tres poblaciones. Priors informativos para sensibilidad (Se) y especificidad (Sp) de DAS-ELISA y real-time RT-PCR convencional. Priors no informativos, β (1,1), para sensibilidad y especificidad de spot real-time RT-PCR y prevalencias de tres poblaciones (Prev1, Prev2, Prev3). Likelihood ratios (LR) se calculan en cada iteración.
model;
{
y1[1:Q, 1:Q, 1:Q] ~ dmulti(p1[1:Q, 1:Q, 1:Q], n1)
y2[1:Q, 1:Q, 1:Q] ~ dmulti(p2[1:Q, 1:Q, 1:Q], n2)
y3[1:Q, 1:Q, 1:Q] ~ dmulti(p3[1:Q, 1:Q, 1:Q], n3)
p1[1,1,1] <- Prev1*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev1)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p1[1,2,1] <- Prev1*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev1)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p1[1,1,2] <- Prev1*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev1)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p1[1,2,2] <- Prev1*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev1)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p1[2,1,1] <- Prev1*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev1)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p1[2,2,1] <- Prev1*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev1)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p1[2,1,2] <- Prev1*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev1)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p1[2,2,2] <- Prev1*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev1)*SpqPCR*(Spspot*SpELISA+covDn)
p2[1,1,1] <- Prev2*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev2)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p2[1,2,1] <- Prev2*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev2)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p2[1,1,2] <- Prev2*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev2)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p2[1,2,2] <- Prev2*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev2)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p2[2,1,1] <- Prev2*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev2)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p2[2,2,1] <- Prev2*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev2)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p2[2,1,2] <- Prev2*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev2)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p2[2,2,2] <- Prev2*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev2)*SpqPCR*(Spspot*SpELISA+covDn)
p3[1,1,1] <- Prev3*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev3)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p3[1,2,1] <- Prev3*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev3)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p3[1,1,2] <- Prev3*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev3)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p3[1,2,2] <- Prev3*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev3)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p3[2,1,1] <- Prev3*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev3)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p3[2,2,1] <- Prev3*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev3)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p3[2,1,2] <- Prev3*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev3)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p3[2,2,2] <- Prev3*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev3)*SpqPCR*(Spspot*SpELISA+covDn)
ls <- (Sespot-1)*(1-SeELISA)
us <- min(Sespot,SeELISA) - Sespot*SeELISA
lc <- (Spspot-1)*(1-SpELISA)
uc <- min(Spspot,SpELISA) - Spspot*SpELISA
rhoD <- covDp / sqrt(Sespot*(1-Sespot)*SeELISA*(1-SeELISA))
rhoDc <- covDn / sqrt(Spspot*(1-Spspot)*SpELISA*(1-SpELISA))
covDn ~ dunif(lc, uc)
covDp ~ dunif(ls, us)
SeELISA~dbeta(108.41,18.49)
SpELISA~dbeta(34.17,1.34)
Sespot~dbeta(1,1)
Spspot~dbeta(1,1)
SeqPCR~dbeta(53.58,2.63)
SpqPCR~dbeta(51.41,7.23)
Prev1~dbeta(1,1)
Prev2~dbeta(1,1)
Prev3~dbeta(1,1)
LRELISApos<-SeELISA/(1-SpELISA)
LRELISAneg<-(1-SeELISA)/SpELISA
LRspotpos<-Sespot/(1-Spspot)
LRspotneg<-(1-Sespot)/Spspot
LRqPCRpos<-SeqPCR/(1-SpqPCR)
LRqPCRneg<-(1-SeqPCR)/SpqPCR
LRELISAposspotpos<-LRELISApos*LRspotpos
LRELISAposspotneg<-LRELISApos*LRspotneg
LRELISAnegspotpos<-LRELISAneg*LRspotpos
LRELISAnegspotneg<-LRELISAneg*LRspotneg
LRELISAposqPCRpos<-LRELISApos*LRqPCRpos
LRELISAposqPCRneg<-LRELISApos*LRqPCRneg
LRELISAnegqPCRpos<-LRELISAneg*LRqPCRpos
LRELISAnegqPCRneg<-LRELISAneg*LRqPCRneg
LRspotposqPCRpos<-LRspotpos*LRqPCRpos
LRspotposqPCRneg<-LRspotpos*LRqPCRneg
LRspotnegqPCRpos<-LRspotneg*LRqPCRpos
LRspotnegqPCRneg<-LRspotneg*LRqPCRneg
LRELISAposspotposqPCRpos<-LRELISApos*LRspotpos*LRqPCRpos
LRELISAposspotposqPCRneg<-LRELISApos*LRspotpos*LRqPCRneg
LRELISAposspotnegqPCRpos<-LRELISApos*LRspotneg*LRqPCRpos
LRELISAposspotnegqPCRneg<-LRELISApos*LRspotneg*LRqPCRneg
LRELISAnegspotposqPCRpos<-LRELISAneg*LRspotpos*LRqPCRpos
LRELISAnegspotposqPCRneg<-LRELISAneg*LRspotpos*LRqPCRneg
LRELISAnegspotnegqPCRpos<-LRELISAneg*LRspotneg*LRqPCRpos
LRELISAnegspotnegqPCRneg<-LRELISAneg*LRspotneg*LRqPCRneg
}
#Note: for this model initial values were:
#SeELISA=0.86,SpELISA=0.99,SeqPCR=0.97,SpqPCR=0.89
Con estos parámetros se puede establecer la probabilidad post-test de que una cepa esté infectada según los resultados del diagnóstico de una, dos o tres técnicas. De esta forma dependiendo de la prevalencia de la infección se puede seleccionar el método más apropiado para realizar el análisis.
A continuación se detalla la programación del modelo:
Código de OpenBUGS, que asume dos técnicas condicionalmente dependientes DAS-ELISA (ELISA) y spot real-time RT-PCR (spot), y una tercera independiente, real-time RT-PCR convencional (qPCR), y tres poblaciones. Priors informativos para sensibilidad (Se) y especificidad (Sp) de DAS-ELISA y real-time RT-PCR convencional. Priors no informativos, β (1,1), para sensibilidad y especificidad de spot real-time RT-PCR y prevalencias de tres poblaciones (Prev1, Prev2, Prev3). Likelihood ratios (LR) se calculan en cada iteración.
model;
{
y1[1:Q, 1:Q, 1:Q] ~ dmulti(p1[1:Q, 1:Q, 1:Q], n1)
y2[1:Q, 1:Q, 1:Q] ~ dmulti(p2[1:Q, 1:Q, 1:Q], n2)
y3[1:Q, 1:Q, 1:Q] ~ dmulti(p3[1:Q, 1:Q, 1:Q], n3)
p1[1,1,1] <- Prev1*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev1)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p1[1,2,1] <- Prev1*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev1)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p1[1,1,2] <- Prev1*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev1)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p1[1,2,2] <- Prev1*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev1)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p1[2,1,1] <- Prev1*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev1)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p1[2,2,1] <- Prev1*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev1)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p1[2,1,2] <- Prev1*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev1)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p1[2,2,2] <- Prev1*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev1)*SpqPCR*(Spspot*SpELISA+covDn)
p2[1,1,1] <- Prev2*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev2)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p2[1,2,1] <- Prev2*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev2)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p2[1,1,2] <- Prev2*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev2)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p2[1,2,2] <- Prev2*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev2)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p2[2,1,1] <- Prev2*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev2)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p2[2,2,1] <- Prev2*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev2)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p2[2,1,2] <- Prev2*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev2)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p2[2,2,2] <- Prev2*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev2)*SpqPCR*(Spspot*SpELISA+covDn)
p3[1,1,1] <- Prev3*SeqPCR*(Sespot*SeELISA+covDp) + (1-Prev3)*(1-SpqPCR)*((1-Spspot)*(1-SpELISA)+covDn)
p3[1,2,1] <- Prev3*SeqPCR*(Sespot*(1-SeELISA)-covDp) + (1-Prev3)*(1-SpqPCR)*((1-Spspot)*SpELISA-covDn)
p3[1,1,2] <- Prev3*(1-SeqPCR)*(Sespot*SeELISA+covDp) + (1-Prev3)*SpqPCR*((1-Spspot)*(1-SpELISA)+covDn)
p3[1,2,2] <- Prev3*(1-SeqPCR)*(Sespot*(1-SeELISA)-covDp) + (1-Prev3)*SpqPCR*((1-Spspot)*SpELISA-covDn)
p3[2,1,1] <- Prev3*SeqPCR*((1-Sespot)*SeELISA-covDp) + (1-Prev3)*(1-SpqPCR)*(Spspot*(1-SpELISA)-covDn)
p3[2,2,1] <- Prev3*SeqPCR*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev3)*(1-SpqPCR)*(Spspot*SpELISA+covDn)
p3[2,1,2] <- Prev3*(1-SeqPCR)*((1-Sespot)*SeELISA-covDp) + (1-Prev3)*SpqPCR*(Spspot*(1-SpELISA)-covDn)
p3[2,2,2] <- Prev3*(1-SeqPCR)*((1-Sespot)*(1-SeELISA)+covDp) + (1-Prev3)*SpqPCR*(Spspot*SpELISA+covDn)
ls <- (Sespot-1)*(1-SeELISA)
us <- min(Sespot,SeELISA) - Sespot*SeELISA
lc <- (Spspot-1)*(1-SpELISA)
uc <- min(Spspot,SpELISA) - Spspot*SpELISA
rhoD <- covDp / sqrt(Sespot*(1-Sespot)*SeELISA*(1-SeELISA))
rhoDc <- covDn / sqrt(Spspot*(1-Spspot)*SpELISA*(1-SpELISA))
covDn ~ dunif(lc, uc)
covDp ~ dunif(ls, us)
SeELISA~dbeta(108.41,18.49)
SpELISA~dbeta(34.17,1.34)
Sespot~dbeta(1,1)
Spspot~dbeta(1,1)
SeqPCR~dbeta(53.58,2.63)
SpqPCR~dbeta(51.41,7.23)
Prev1~dbeta(1,1)
Prev2~dbeta(1,1)
Prev3~dbeta(1,1)
LRELISApos<-SeELISA/(1-SpELISA)
LRELISAneg<-(1-SeELISA)/SpELISA
LRspotpos<-Sespot/(1-Spspot)
LRspotneg<-(1-Sespot)/Spspot
LRqPCRpos<-SeqPCR/(1-SpqPCR)
LRqPCRneg<-(1-SeqPCR)/SpqPCR
LRELISAposspotpos<-LRELISApos*LRspotpos
LRELISAposspotneg<-LRELISApos*LRspotneg
LRELISAnegspotpos<-LRELISAneg*LRspotpos
LRELISAnegspotneg<-LRELISAneg*LRspotneg
LRELISAposqPCRpos<-LRELISApos*LRqPCRpos
LRELISAposqPCRneg<-LRELISApos*LRqPCRneg
LRELISAnegqPCRpos<-LRELISAneg*LRqPCRpos
LRELISAnegqPCRneg<-LRELISAneg*LRqPCRneg
LRspotposqPCRpos<-LRspotpos*LRqPCRpos
LRspotposqPCRneg<-LRspotpos*LRqPCRneg
LRspotnegqPCRpos<-LRspotneg*LRqPCRpos
LRspotnegqPCRneg<-LRspotneg*LRqPCRneg
LRELISAposspotposqPCRpos<-LRELISApos*LRspotpos*LRqPCRpos
LRELISAposspotposqPCRneg<-LRELISApos*LRspotpos*LRqPCRneg
LRELISAposspotnegqPCRpos<-LRELISApos*LRspotneg*LRqPCRpos
LRELISAposspotnegqPCRneg<-LRELISApos*LRspotneg*LRqPCRneg
LRELISAnegspotposqPCRpos<-LRELISAneg*LRspotpos*LRqPCRpos
LRELISAnegspotposqPCRneg<-LRELISAneg*LRspotpos*LRqPCRneg
LRELISAnegspotnegqPCRpos<-LRELISAneg*LRspotneg*LRqPCRpos
LRELISAnegspotnegqPCRneg<-LRELISAneg*LRspotneg*LRqPCRneg
}
#Note: for this model initial values were:
#SeELISA=0.86,SpELISA=0.99,SeqPCR=0.97,SpqPCR=0.89
Con estos parámetros se puede establecer la probabilidad post-test de que una cepa esté infectada según los resultados del diagnóstico de una, dos o tres técnicas. De esta forma dependiendo de la prevalencia de la infección se puede seleccionar el método más apropiado para realizar el análisis.
blog comments powered by Disqus