
# Install THE PACKAGES before using the MV-DLNM function#####
install.packages("Rtools")
install.packages("dlnm")
install.packages("splines")
install.packages("foreach")
install.packages("tsModel")
install.packages("Epi")



MV.DLNM.SIM<-function(directory,dataname,maxlagx,sumy,repeats)
{
path<-paste(directory,dataname,sep="/")  

library(dlnm) 
library(splines)
library(foreign)
library(tsModel)
library(Epi)

#1 Remove missing values in the RAW DATA  ######
#data1 <- read.csv("C:/Users/GUO/Desktop/taipei_data.csv", header=T, sep=",")

data1 <- read.csv(path, header=T, sep=",")


## Select the length of study in days
data1<-data1[240:360,]

ppp<-as.data.frame(c(1:maxlagx))

ppp2<-as.data.frame(c(1:maxlagx))

num=repeats
for (loop in 1:num){
#  set.seed(loop+100)

one<-as.data.frame(data1[,'death'])
two<-as.data.frame(data1[,-3])
one$var<-runif(dim(one)[1])
sortone<-one[order(one$var),]
colnames(sortone)<-c('death','var')
rownames(sortone)<-NULL
data<-as.data.frame(cbind(sortone,two))#»s³y¥Xnull data





for (jj in 1:length(data[,1]))
(
  #  data$death[jj]<-data$death[jj]+rpois(1,data$tmp[jj])
  #  data$death[jj]<-data$death[jj]
 # data$death[jj]<-max((data$death[jj]+rpois(1,as.integer(data$tmp[jj]/5))),1)
#  data$death[jj]<-max((data$death[jj]+rpois(1,as.integer(data$tmp[jj]/2))),1)
  #data$death[jj]<-rpois(1,2)+max((rpois(1,as.integer(data$tmp[jj]))),1)
  
  
  ##WIN setting
  
  #W1 data$death[jj]<-max((rpois(1,as.integer(data$tmp[jj]))),1)

#W2  data$death[jj]<-max(as.integer(0.3*((rpois(1,as.integer(data$tmp[jj]))))),1)
  
  
  data$death[jj]<-max((rpois(1,as.integer(data$tmp[jj]))),1)
)


data$date<-as.Date(data$date)
rm.data <- data[complete.cases(data), ]
rm.data$tmean<-rm.data$tmp
rm.data$o3mean<-rm.data$O3
rm.data$pm10mean<-rm.data$PM.10
rm.data$pm2.5mean<-rm.data$PM.2.5


#2 create lag mortality outcome####
maxlag <-maxlagx

p<-list()

p2<-list()
for (day in 1:maxlag){
  dim<-as.numeric(dim(rm.data)[1])
  today=rm.data[,"death"]
  lag<- list()
  for(i in 1:day) {
    lag[[i]]<- c(matrix(NA,i,1),today[-c((dim-i+1):dim)])
  }
  lagg<-as.data.frame(lag);colnames(lagg)=paste('lag',1:day,sep='')
  sumlagg<-as.data.frame(apply(lagg,1,sum));colnames(sumlagg)="sumlag"
  ne<-cbind(today,lagg,sumlagg,rm.data[,c("year","date","tmean","o3mean","pm10mean","pm2.5mean","weekday_1","weekday_2","weekday_3","weekday_4","weekday_5","weekday_6","weekday_7")])
  newy<-as.data.frame(ne$today+ne$sumlag);colnames(newy)="newy"
  nnew<-cbind(newy,ne)
  
  #3 x generates the CROSS-BASIS#####
  # KNOTS FOR EXPOSURE-RESPONSE FUNCTION
  vk_2 <- quantile(nnew$tmean, c(10, 75, 90) / 100, na.rm = T)
  # KNOTS FOR THE LAG-RESPONSE FUNCTION
  ldf <- 5
  
  lk <- logknots(maxlag, df = ldf)
  # COMPUTE THE CROSS-BASIS
  cb_2<- crossbasis(nnew$tmean, lag = maxlag, argvar = list(fun = "bs",
                                                            degree = 2, knots = vk_2), arglag = list(knots = lk))
  
  
  #5 RUN THE MODEL#####
  #y
  model<- glm(today ~ cb_2+ ns(date, 8 * length(unique(year)))+o3mean+pm2.5mean+offset(log(sumlag))
              +weekday_2+weekday_3+weekday_4+weekday_5+weekday_6+weekday_7,family =quasipoisson(link=log) , nnew)
  
  model_null<- glm(today ~  ns(date, 8 * length(unique(year)))+o3mean+pm2.5mean+offset(log(sumlag))
                   +weekday_2+weekday_3+weekday_4+weekday_5+weekday_6+weekday_7,family =quasipoisson(link=log) , nnew[-c(1:maxlag),])
  p[[i]]<-anova(model,model_null,test="Chisq")[2,5]

#  p[[i]]<- ifelse(p[[i]]<0.05,1,0)

  
  
  #5 RUN THE DLNM MODEL#####
  #y
  model2<- glm(today ~ cb_2+ ns(date, 8 * length(unique(year)))+o3mean+pm2.5mean
              +weekday_2+weekday_3+weekday_4+weekday_5+weekday_6+weekday_7,family =quasipoisson(link=log) , nnew)
  
  model_null2<- glm(today ~  ns(date, 8 * length(unique(year)))+o3mean+pm2.5mean
                   +weekday_2+weekday_3+weekday_4+weekday_5+weekday_6+weekday_7,family =quasipoisson(link=log) , nnew[-c(1:maxlag),])
  p2[[i]]<-anova(model2,model_null2,test="Chisq")[2,5]
  
}

lag_p<-as.data.frame(p)
colnames(lag_p)<-paste("lag",1:maxlag,sep='')

ppp<-cbind(ppp,as.data.frame(t(lag_p)))


lag_p2<-as.data.frame(p2)
colnames(lag_p2)<-paste("lag",1:maxlag,sep='')

ppp2<-cbind(ppp2,as.data.frame(t(lag_p2)))

}
ppp<-ppp[sumy,-1]
#print(ppp)
#ppp2<-ppp[,-1]
#apply(ppp2,1,sum)


ppp2<-ppp2[maxlagx,-1]
#print(ppp2)
comp<-c(1:repeats)
comp2<-c(1:repeats)
comp3<-c(1:repeats)
finalout<-cbind(t(ppp),t(ppp2),comp,comp2,comp3)
colnames(finalout)<-c("MV-DLNM","DLNM","Compare","MV-DLNM_Pow","DLNM_Pow")

for (kk in 1:repeats)
  (  finalout[kk,3]<-ifelse(finalout[kk,1]<finalout[kk,2],1,0))

for (kk in 1:repeats)
  (  finalout[kk,4]<-ifelse(finalout[kk,1]<0.05,1,0) )

for (kk in 1:repeats)
  (  finalout[kk,5]<-ifelse(finalout[kk,2]<0.05,1,0) )

path3<-paste(directory,"Final_results.csv",sep="/")  

write.csv(finalout,file=path3)

print(finalout)

Win_rate<-as.data.frame(sum(finalout[,3])/repeats)
colnames(Win_rate)<-"MVDLNM Win rate"
print(Win_rate)

MVDLNMPOW<-as.data.frame(sum(finalout[,4])/repeats)
colnames(MVDLNMPOW)<-"MVDLNM POWER"
print(MVDLNMPOW)

DLNMPOW<-as.data.frame(sum(finalout[,5])/repeats)
colnames(DLNMPOW)<-"DLNM POWER"
print(DLNMPOW)


}


##Run the function with directory - dataset name and the maximum number of lag exposure

MV.DLNM.SIM("C:/Users/GUO/Desktop","taipei_data.csv",30,10,1000)
