################################
#COVID-19 DIAGNOSTICS EVALUATION
################################

rm(list=ls())

## setwd("C:\\Users\\Mweu\\Desktop\\All_Desktop\\COVID\\UAE\\Data")
setwd("C:\\Users\\User\\Desktop\\K9_dogs")

if(!'BRugs' %in% row.names(installed.packages())){install.packages('BRugs')}; require('BRugs')

cov.dat <- read.csv('Covid.csv',header=T)

str(cov.dat)

#####################################################################################################

##########################
#Data cleaning & Recoding
##########################

colnames(cov.dat)[c(2,3,4,6,7)] <- c('ID','Sex','DOB','K9.Test.date','K9.Test.result')

cov.dat <- cov.dat[!(cov.dat$Nationality=='Brazil' | cov.dat$Nationality=='N/A'),] #Exclude the two Brazilian & N/A individuals

cov.dat$Pop <- factor(ifelse((cov.dat$Nationality=='Afghanisthan' | cov.dat$Nationality=='Bangladesh' | cov.dat$Nationality=='india' |
                      cov.dat$Nationality=='India' | cov.dat$Nationality=='Indian' | cov.dat$Nationality=='Jordan' |
                        cov.dat$Nationality=='Nepal' | cov.dat$Nationality=='Pakistan' | cov.dat$Nationality=='Philipine' |
                        cov.dat$Nationality=='Philippines' | cov.dat$Nationality=='Phillipines' | cov.dat$Nationality=='Sri Lanka' |
                        cov.dat$Nationality=='Syrian'),'Asia','Africa'))

#utils::View(cov.dat[,c('Nationality','Pop')]) #Validate 'Pop' 

cov.dat$K9.res <- factor(ifelse((cov.dat$K9.Test.result=='Positive' | cov.dat$K9.Test.result=='Postive indication'),'pos','neg'))

cov.dat$PCR.res <- factor(ifelse(cov.dat$PCR.Test.result=='Positive','pos','neg'))

#Creating the variable 'Age'

cov.dat[,c('DOB','K9.Test.date','PCR.Test.date')] <- lapply(cov.dat[,c('DOB','K9.Test.date','PCR.Test.date')],
                                                            function(x) as.Date(x,format="%d/%m/%Y"))

#utils::View(cov.dat[,c('DOB','K9.Test.date','PCR.Test.date')]) #validate dates

cov.dat$Age <- floor(as.numeric((cov.dat$K9.Test.date - cov.dat$DOB)/365)) #age in years

###########################################################################################################

pops <- 2; n.tests <- 2

############
#BLCM model
############

model.covid <- function(){
  
  #Priors - Test 1: K9 Test; Test 2: PCR
  for (i in 1:2) {
    
    se[i] ~ dbeta(1,1)
    sp[i] ~ dbeta(1,1)
    
  }
  
  for (i in 1:2){
    
    p[i] ~ dbeta(1,1)
    
    pop[i,1:4] ~ dmulti(par[i,1:4],n[i])
    par[i,1] <- se[1]*se[2]*p[i] + (1-sp[1])*(1-sp[2])*(1-p[i])
    par[i,2] <- se[1]*(1-se[2])*p[i] + (1-sp[1])*sp[2]*(1-p[i])
    par[i,3] <- (1-se[1])*se[2]*p[i] + sp[1]*(1-sp[2])*(1-p[i])
    par[i,4] <- (1-se[1])*(1-se[2])*p[i] + sp[1]*sp[2]*(1-p[i])
    
    n[i] <- sum(pop[i,1:4])
    
  }
  
  p.se <- step(se[1] - se[2])
  p.sp <- step(sp[1] - sp[2])
  
}

#######################################################################################################

######
#Data
######

covid.mat <- matrix(NA,nrow=pops,ncol=n.tests^2)

for(p in 1:pops){
  
  covid.mat[p,1] <- nrow(cov.dat[cov.dat$K9.res=='pos' & cov.dat$PCR.res=='pos'& cov.dat$Pop==levels(cov.dat$Pop)[p],])
  covid.mat[p,2] <- nrow(cov.dat[cov.dat$K9.res=='pos' & cov.dat$PCR.res=='neg'& cov.dat$Pop==levels(cov.dat$Pop)[p],])
  covid.mat[p,3] <- nrow(cov.dat[cov.dat$K9.res=='neg' & cov.dat$PCR.res=='pos'& cov.dat$Pop==levels(cov.dat$Pop)[p],])
  covid.mat[p,4] <- nrow(cov.dat[cov.dat$K9.res=='neg' & cov.dat$PCR.res=='neg'& cov.dat$Pop==levels(cov.dat$Pop)[p],])
  
}

covid.mat <- list(covid.mat); names(covid.mat) <- 'pop'

#############################################################################################################

#############################
#Convert all to BUGS format
#############################

#write model to a file
writeModel(model.covid,'covid.model.txt')

#Bugs data
bugsData(covid.mat,fileName='covid.dat.txt')

#make 2 initial values chains 
bugsInits(inits=list(list(se=rep(0.50,times=2),sp=rep(0.90,times=2),p=rep(0.05,times=2))),numChains=1,'CID.Init1.txt')
bugsInits(inits=list(list(se=rep(0.60,times=2),sp=rep(0.99,times=2),p=rep(0.02,times=2))),numChains=1,'CID.Init2.txt')

#now check, load data, compile etc.
modelCheck("covid.model.txt") #check model file.
modelData("covid.dat.txt") #read data file
modelCompile(numChains=2) #compile model with 2 chains
modelInits('CID.Init1.txt',1) #read init data file
modelInits('CID.Init2.txt',2) #read init data file
#modelGenInits() #generate the missing initial values

modelUpdate(50000) #burn in

samplesSet(c('se','sp','p','p.se','p.sp')) #parameters to monitor

modelUpdate(50000) #more iterations 

#SOME DIAGNOSTICS FIRST
#Check convergence (Trace plots) - should ideally check all
#samplesHistory('se',mfrow=c(1,1)) # plot the chain,
#samplesHistory('sp',mfrow=c(1,1)) # plot the chain,
#samplesHistory('p',mfrow=c(1,1))

#Plot the Gelman-Rubin diagnostic statistics - ratio should be close to 1
#samplesBgr('se',mfrow=c(1,1))  
#samplesBgr('sp',mfrow=c(1,1))
#samplesBgr('p',mfrow=c(1,1))

#Density plots
samplesDensity('se',mfrow=c(1,1)) 
samplesDensity('sp',mfrow=c(1,1))
samplesDensity('p',mfrow=c(1,1))

(results.covid <- samplesStats('*'))

capture.output(results.covid,file='Covid.Tests.Res.txt')

library(xlsx)
write.csv(cov.dat, "C:/Users/User/Desktop/K9_dogs/cov.dat.CSV")

write.table(cov.dat, "C:/Users/User/Desktop/K9_dogs/cov.dat.txt", sep="\t") 

write.csv(mtcars, file = "mtcars.csv")
###############################################################333

## calcualtion of frequnceis 
setwd("C:\\Users\\User\\Desktop\\K9_dogs")
Freq_cov <- read.csv('cov.dat.csv',header=T)

Freq_LCA <- Freq_cov  

str(Freq_LCA)
summary(Freq_LCA)
head (Freq_LCA)
tail(Freq_LCA)
names (Freq_LCA)

## T1= K9.res
class(Freq_LCA$K9.res)
Freq_LCA$K9.res <- as.factor(Freq_LCA$K9.res)
summary(Freq_LCA$K9.res)
Tat<-table(Freq_LCA$K9.res, Freq_LCA$K9.res)
print(Tat)

## T2= PCR.res
class(Freq_LCA$PCR.res)
Freq_LCA$PCR.res <- as.factor(Freq_LCA$PCR.res)
summary(Freq_LCA$PCR.res)

## Pop (nationality)
class(Freq_LCA$Pop)
Freq_LCA$Pop <- as.factor(Freq_LCA$Pop)
summary(Freq_LCA$Pop)

names(Freq_LCA)

########## stratifiers based on species (Cow and Buffalo) ##############################
### species ###

## frequncy 
xtabs(~PCR.res[Pop=="Asia"]+ K9.res[Pop=="Asia"], Freq_LCA)
xtabs(~PCR.res[Pop=="Africa"]+ K9.res[Pop=="Africa"], Freq_LCA)





## Exporting Data From R
## http://www.sthda.com/english/wiki/exporting-data-from-r

# Loading mtcars data
data("mtcars")
# Write data to txt file: tab separated values
# sep = "\t"
write.table(mtcars, file = "mtcars.txt", sep = "\t",
            row.names = TRUE, col.names = NA)
# Write data to csv files:  
# decimal point = "." and value separators = comma (",")
write.csv(mtcars, file = "mtcars.csv")
# Write data to csv files: 
# decimal point = comma (",") and value separators = semicolon (";")
write.csv2(mtcars, file = "mtcars.csv")


##################################################################################################


