villes_s<-list()
for(i in 1:length(villes)) {
villes_s[[i]]<-villes[[i]][villes[[i]]$saison=="summer",]
villes_s[[i]]$temps <- ave(villes_s[[i]]$time,villes_s[[i]]$annee, FUN = seq_along)
}
names(villes_s)<-cities
table of N obs per months to check to have only summer month
for (i in 1:length(villes)){
print(table(villes_s[[i]]$mois))
}
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 540 558 558 540 0 0 0
trshld95<-c()
for (i in 1:length(villes_s)){
trshld95[i]<-quantile(villes_s[[i]]$tempmax, probs=c(0.975),na.rm=TRUE)
villes_s[[i]]$heat_wave<-0
villes_s[[i]]$heat_wave[which(villes_s[[i]]$tempmax > trshld95[i])]<- 1
}
Â
Number of Heat Wave for each city:
| Heat wave=0 | Heat wave=1 | |
|---|---|---|
| bm | 2143 | 53 |
| bordeaux | 2143 | 53 |
| clermont | 2142 | 54 |
| grenoble | 2141 | 55 |
| lehavre | 2142 | 54 |
| lille | 2143 | 53 |
| lyon | 2142 | 54 |
| marseille | 2142 | 54 |
| montpellier | 2145 | 51 |
| nancy | 2142 | 54 |
| nantes | 2141 | 55 |
| nice | 2142 | 54 |
| paris | 2144 | 52 |
| rennes | 2142 | 54 |
| rouen | 2143 | 53 |
| strasbourg | 2143 | 53 |
| toulouse | 2141 | 55 |
# creation of no2 variable of today and previous day
#function filter {stats}
for (i in 1:length(villes_s)){
villes_s[[i]]<-transform(villes_s[[i]], no2moy = as.vector(filter(no2,sides = 1, filter = rep(1, 2))/2), no2Lag1=Lag(no2,1),no2Lag2=Lag(no2,2))
}
Code:
## create dataframe without missing values
for (i in 1:length(villes_s)){
villes_s[[i]]<-na.omit(villes_s[[i]][, c("cardiaque","o3","Jours","Vacances","hol","heat_wave","no2moy")])
#villes_s[[i]]<-villes_s[[i]][villes_s[[i]]$Dates>="2007-06-01",]
villes_s[[i]]$time<-1:nrow(villes_s[[i]])
}
# start bootstrap
nreps=1000 #number of bootstrap reps
results<-matrix(NA,nrow = 17,ncol=10)
colnames(results)<-c("city","NDE","NDE_2.5","NDE_97.5","NIE","NIE_2.5","NIE_97.5","PMM","PMM_2.5","PMM_97.5")
for (i in (1:length(villes_s))){
boot.nde<- rep(NA,nreps)
boot.nie <- rep(NA,nreps)
boot.pmm <- rep(NA,nreps)
for (rep in 1:nreps)
{
dat_resample <- sample(1:nrow(villes_s[[i]]),nrow(villes_s[[i]]),replace=T)
dat_boot <- villes_s[[i]][dat_resample,]
# outcome model - Poisson Regression: Mortality, HW and O3
m.outcome<-glm(cardiaque~heat_wave+o3+ns(time,df=round(8*length(time)/365.25))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(8*length(time)/365.25))+Jours+Vacances+hol,data=dat_boot)
# save coefficients
theta1<-coef(m.outcome)[2]
theta2<-coef(m.outcome)[3]
beta1<-coef(m.mediator)[2]
# estimate CDE and NIE
boot.nde[rep] <- exp(theta1) #NDE
boot.nie[rep] <-exp(theta2*beta1) #NIE
boot.pmm[rep] <-boot.nde[rep]*(boot.nie[rep]-1)/(boot.nde[rep]*boot.nie[rep]-1) #NIE
} #end bootstrap
results[i,1]<-cities[[i]]
results[i,2]<-median(boot.nde, na.rm=T)
results[i,3]<-quantile(boot.nde, 0.025, na.rm=T)
results[i,4]<-quantile(boot.nde, 0.975, na.rm=T)
results[i,5]<-median(boot.nie, na.rm=T)
results[i,6]<-quantile(boot.nie, 0.025, na.rm=T)
results[i,7]<-quantile(boot.nie, 0.975, na.rm=T)
results[i,8]<-median(boot.pmm, na.rm=T)
results[i,9]<-quantile(boot.pmm, 0.025, na.rm=T)
results[i,10]<-quantile(boot.pmm, 0.975, na.rm=T)
}
# output CDE and NIE and confidence intervals
Results:
res<-data.frame(results)
for (i in (2:10)){
res[,i]<-as.numeric(as.character(res[,i]))
}
res[,2:10]<-round(res[,2:10],digits = 4)
kable(res)%>%kable_styling()%>%
column_spec(1, bold = T, border_right = T)%>%
column_spec(4, border_right = T)%>%
column_spec(7, border_right = T)
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bm | 0.9912 | 0.8741 | 1.1250 | 0.9869 | 0.9303 | 1.0469 | 0.0538 | -6.2033 | 5.5744 |
| bordeaux | 0.9241 | 0.8388 | 1.0095 | 1.0192 | 0.9881 | 1.0517 | -0.2497 | -2.2694 | 2.2138 |
| clermont | 1.0433 | 0.9089 | 1.1749 | 1.0046 | 0.9756 | 1.0346 | 0.0442 | -2.6958 | 2.1599 |
| grenoble | 0.9862 | 0.8496 | 1.1334 | 1.0314 | 0.9994 | 1.0608 | 0.2455 | -6.6852 | 8.3387 |
| lehavre | 0.9790 | 0.8525 | 1.1211 | 0.9965 | 0.9493 | 1.0434 | -0.0080 | -3.8968 | 3.8469 |
| lille | 0.9489 | 0.8496 | 1.0466 | 1.0084 | 0.9781 | 1.0407 | -0.0901 | -3.3829 | 3.5985 |
| lyon | 0.9727 | 0.8896 | 1.0612 | 0.9940 | 0.9738 | 1.0132 | 0.0761 | -2.5442 | 2.5705 |
| marseille | 0.9810 | 0.8940 | 1.0765 | 1.0010 | 0.9958 | 1.0082 | -0.0085 | -0.8857 | 0.7113 |
| montpellier | 1.1683 | 1.0184 | 1.3126 | 1.0000 | 0.9964 | 1.0031 | -0.0003 | -0.0300 | 0.0322 |
| nancy | 0.8429 | 0.7383 | 0.9461 | 0.9976 | 0.9662 | 1.0263 | 0.0130 | -0.1881 | 0.2582 |
| nantes | 1.0690 | 0.9392 | 1.1927 | 1.0040 | 0.9731 | 1.0346 | 0.0496 | -1.0756 | 2.2856 |
| nice | 0.8918 | 0.7622 | 1.0247 | 0.9987 | 0.9850 | 1.0059 | 0.0103 | -0.1279 | 0.2523 |
| paris | 0.9669 | 0.9079 | 1.0246 | 0.9965 | 0.9825 | 1.0089 | 0.0643 | -1.5928 | 1.6282 |
| rennes | 0.8451 | 0.6707 | 1.0455 | 1.0133 | 0.9653 | 1.0666 | -0.0543 | -1.6832 | 1.7839 |
| rouen | 1.0148 | 0.9100 | 1.1320 | 0.9966 | 0.9543 | 1.0356 | 0.0053 | -4.2066 | 5.7058 |
| strasbourg | 1.0342 | 0.9231 | 1.1387 | 0.9961 | 0.9643 | 1.0293 | -0.0787 | -4.5787 | 3.7572 |
| toulouse | 1.0323 | 0.9155 | 1.1389 | 0.9977 | 0.9759 | 1.0184 | -0.0191 | -2.1384 | 2.5741 |
Natural Direct Effect
Natural Indirect Effect