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 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 0 0 0 0 0 480 496 496 480 0 0 0
## First condition for heat wave
for (i in 1:length(villes_s)){
villes_s[[i]]$heat_wave1<-NA
for (r in 3:nrow(villes_s[[i]])){
villes_s[[i]]$heat_wave1[r]<- if (villes_s[[i]]$tempmoy[r] >= trshld975[i] & villes_s[[i]]$tempmoy[r-1] >= trshld975[i] & villes_s[[i]]$tempmoy[r-2] >= trshld975[i] ) 1 else 0
}}
## Second condition for heat wave
for (i in 1:length(villes_s)){
for (r in 3:nrow(villes_s[[i]])){
villes_s[[i]]$heat_wave[r]<- if (villes_s[[i]]$heat_wave1[r] == 1 & (villes_s[[i]]$tempmoy[r] >= trshld995[i] | villes_s[[i]]$tempmoy[r-1] >= trshld995[i] | villes_s[[i]]$tempmoy[r-2] >= trshld995[i])) 1 else 0
}}
Â
Number of Heat Wave for each city, for the period from 2000 to 2015:
| Heat wave=0 | Heat wave=1 | |
|---|---|---|
| bordeaux | 1924 | 26 |
| clermont | 1926 | 24 |
| grenoble | 1914 | 36 |
| lehavre | 1927 | 23 |
| lyon | 1918 | 32 |
| marseille | 1915 | 35 |
| montpellier | 1922 | 28 |
| nancy | 1918 | 32 |
| nantes | 1926 | 24 |
| nice | 1924 | 26 |
| paris | 1923 | 27 |
| rennes | 1918 | 32 |
| rouen | 1925 | 25 |
| strasbourg | 1912 | 38 |
| toulouse | 1921 | 29 |
Number of O3>90 perc episodes per city:
| O3>90perc=0 | O3>90perc=1 | |
|---|---|---|
| bordeaux | 1756 | 196 |
| clermont | 1756 | 196 |
| grenoble | 1756 | 196 |
| lehavre | 1756 | 196 |
| lyon | 1756 | 196 |
| marseille | 1757 | 195 |
| montpellier | 1756 | 196 |
| nancy | 1756 | 196 |
| nantes | 1756 | 196 |
| nice | 1757 | 195 |
| paris | 1756 | 196 |
| rennes | 1756 | 196 |
| rouen | 1756 | 196 |
| strasbourg | 1757 | 195 |
| toulouse | 1756 | 196 |
Code:
# some data management
for (i in 1:length(villes_s)){
villes_s[[i]]$time<-1:nrow(villes_s[[i]]) # Create a new variable for time
}
# start bootstrap
nreps=800 #number of bootstrap reps
results<-matrix(NA,nrow = 15,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(nocc_tot~heat_wave+o3+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #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
Code:
# start bootstrap
nreps=800 #number of bootstrap reps
results_bin<-matrix(NA,nrow = 15,ncol=10)
colnames(results_bin)<-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(nocc_tot~heat_wave+o3_90+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #end bootstrap
results_bin[i,1]<-cities[[i]]
results_bin[i,2]<-median(boot.nde, na.rm=T)
results_bin[i,3]<-quantile(boot.nde, 0.025, na.rm=T)
results_bin[i,4]<-quantile(boot.nde, 0.975, na.rm=T)
results_bin[i,5]<-median(boot.nie, na.rm=T)
results_bin[i,6]<-quantile(boot.nie, 0.025, na.rm=T)
results_bin[i,7]<-quantile(boot.nie, 0.975, na.rm=T)
results_bin[i,8]<-median(boot.pmm, na.rm=T)
results_bin[i,9]<-quantile(boot.pmm, 0.025, na.rm=T)
results_bin[i,10]<-quantile(boot.pmm, 0.975, na.rm=T)
}
# output CDE and NIE and confidence intervals
Results For Continuous Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.5059 | 1.2886 | 1.7479 | 1.0276 | 1.0044 | 1.0549 | 0.0758 | 0.0120 | 0.1560 |
| clermont | 1.4536 | 1.2305 | 1.7438 | 1.0181 | 0.9922 | 1.0502 | 0.0552 | -0.0249 | 0.1641 |
| grenoble | 1.1647 | 1.0264 | 1.3217 | 1.0321 | 1.0095 | 1.0581 | 0.1845 | 0.0517 | 0.5914 |
| lehavre | 1.2822 | 1.0348 | 1.5426 | 1.0317 | 0.9870 | 1.0837 | 0.1282 | -0.0637 | 0.5612 |
| lyon | 1.3798 | 1.1874 | 1.6187 | 1.0324 | 1.0166 | 1.0516 | 0.1054 | 0.0522 | 0.2088 |
| marseille | 1.1492 | 1.0366 | 1.2496 | 1.0045 | 0.9996 | 1.0126 | 0.0339 | -0.0026 | 0.1167 |
| montpellier | 1.1000 | 0.9299 | 1.2816 | 1.0075 | 0.9934 | 1.0235 | 0.0616 | -0.3205 | 0.7226 |
| nancy | 1.2492 | 1.0689 | 1.4631 | 0.9989 | 0.9787 | 1.0232 | -0.0048 | -0.1434 | 0.1407 |
| nantes | 1.2098 | 1.0231 | 1.4676 | 1.0688 | 1.0278 | 1.1145 | 0.2901 | 0.1110 | 0.7687 |
| nice | 1.2238 | 1.0513 | 1.3998 | 1.0041 | 0.9984 | 1.0149 | 0.0226 | -0.0108 | 0.1225 |
| paris | 1.7157 | 1.4008 | 2.1435 | 1.0511 | 1.0312 | 1.0821 | 0.1111 | 0.0680 | 0.1658 |
| rennes | 1.2876 | 1.0893 | 1.5107 | 1.0548 | 1.0067 | 1.1114 | 0.2027 | 0.0230 | 0.4782 |
| rouen | 1.3871 | 1.2058 | 1.6102 | 1.0664 | 1.0281 | 1.1079 | 0.1917 | 0.0864 | 0.3304 |
| strasbourg | 1.4538 | 1.3017 | 1.6112 | 1.0227 | 1.0019 | 1.0496 | 0.0690 | 0.0052 | 0.1552 |
| toulouse | 1.2413 | 1.1007 | 1.3838 | 1.0333 | 1.0131 | 1.0585 | 0.1493 | 0.0569 | 0.3111 |
Results For Binary Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.4898 | 1.2908 | 1.7319 | 8.9659 | 2.5989 | 41.4950 | 0.9606 | 0.8343 | 0.9926 |
| clermont | 1.4086 | 1.1966 | 1.6779 | 8.2179 | 2.0807 | 51.7838 | 0.9617 | 0.7799 | 0.9951 |
| grenoble | 1.1759 | 1.0366 | 1.3386 | 3.3319 | 0.6802 | 17.9409 | 0.9461 | 0.1979 | 1.4579 |
| lehavre | 1.3147 | 1.0697 | 1.6148 | 2.5642 | 0.2251 | 24.8367 | 0.9348 | -1.6233 | 3.0791 |
| lyon | 1.4056 | 1.1916 | 1.6575 | 2.4020 | 0.7954 | 7.3337 | 0.8368 | -0.5225 | 0.9758 |
| marseille | 1.1490 | 1.0471 | 1.2523 | 1.1894 | 0.9801 | 1.6733 | 0.6092 | -0.1111 | 0.8782 |
| montpellier | 1.1044 | 0.9343 | 1.2851 | 1.1873 | 0.6129 | 2.4631 | 0.8209 | -1.3505 | 3.4000 |
| nancy | 1.2417 | 1.0633 | 1.4514 | 1.1643 | 0.3542 | 3.8211 | 0.8220 | -3.6223 | 5.1768 |
| nantes | 1.2410 | 1.0478 | 1.4735 | 25.6910 | 2.4893 | 359.7313 | 0.9929 | 0.8659 | 0.9998 |
| nice | 1.2100 | 1.0464 | 1.3894 | 1.4231 | 0.9286 | 2.9250 | 0.7282 | -0.0964 | 0.9781 |
| paris | 1.7279 | 1.3741 | 2.1536 | 15.2519 | 5.9191 | 50.6905 | 0.9712 | 0.9273 | 0.9909 |
| rennes | 1.2601 | 1.0633 | 1.4940 | 33.5869 | 2.8043 | 703.5327 | 0.9940 | 0.8863 | 0.9998 |
| rouen | 1.3990 | 1.2104 | 1.6335 | 32.7542 | 4.2233 | 394.9961 | 0.9911 | 0.9183 | 0.9993 |
| strasbourg | 1.4281 | 1.2823 | 1.5834 | 7.8511 | 1.9582 | 35.4654 | 0.9576 | 0.7534 | 0.9928 |
| toulouse | 1.2558 | 1.1202 | 1.4032 | 3.1359 | 1.0964 | 10.3081 | 0.9151 | 0.3947 | 0.9831 |
Natural Direct Effect
Natural Indirect Effect
Code:
# some data management
for (i in 1:length(villes_s)){
villes_s[[i]]$time<-1:nrow(villes_s[[i]]) # Create a new variable for time
}
# start bootstrap
nreps=800 #number of bootstrap reps
results<-matrix(NA,nrow = 15,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(cv_tot~heat_wave+o3+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #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
Code:
# start bootstrap
nreps=800 #number of bootstrap reps
results_bin<-matrix(NA,nrow = 15,ncol=10)
colnames(results_bin)<-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(nocc_tot~heat_wave+o3_90+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #end bootstrap
results_bin[i,1]<-cities[[i]]
results_bin[i,2]<-median(boot.nde, na.rm=T)
results_bin[i,3]<-quantile(boot.nde, 0.025, na.rm=T)
results_bin[i,4]<-quantile(boot.nde, 0.975, na.rm=T)
results_bin[i,5]<-median(boot.nie, na.rm=T)
results_bin[i,6]<-quantile(boot.nie, 0.025, na.rm=T)
results_bin[i,7]<-quantile(boot.nie, 0.975, na.rm=T)
results_bin[i,8]<-median(boot.pmm, na.rm=T)
results_bin[i,9]<-quantile(boot.pmm, 0.025, na.rm=T)
results_bin[i,10]<-quantile(boot.pmm, 0.975, na.rm=T)
}
# output CDE and NIE and confidence intervals
Results For Continuous Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.5333 | 1.2879 | 1.8535 | 1.0275 | 0.9912 | 1.0704 | 0.0739 | -0.0246 | 0.1949 |
| clermont | 1.7926 | 1.3603 | 2.3460 | 0.9962 | 0.9493 | 1.0481 | -0.0088 | -0.1381 | 0.1154 |
| grenoble | 1.2618 | 0.9899 | 1.5835 | 1.0561 | 1.0117 | 1.1022 | 0.2107 | 0.0144 | 0.9073 |
| lehavre | 1.2471 | 0.8745 | 1.7303 | 1.1107 | 1.0178 | 1.2255 | 0.3460 | -0.8233 | 2.6958 |
| lyon | 1.4485 | 1.1374 | 1.7946 | 1.0328 | 1.0055 | 1.0635 | 0.0987 | 0.0164 | 0.2424 |
| marseille | 1.0635 | 0.9270 | 1.2312 | 1.0059 | 0.9994 | 1.0178 | 0.0562 | -0.6345 | 0.9293 |
| montpellier | 1.0789 | 0.7463 | 1.5156 | 1.0089 | 0.9842 | 1.0408 | 0.0266 | -0.6698 | 1.0073 |
| nancy | 1.5422 | 1.1576 | 2.0306 | 0.9915 | 0.9508 | 1.0389 | -0.0256 | -0.2020 | 0.1335 |
| nantes | 1.2502 | 0.9106 | 1.6383 | 1.0843 | 0.9961 | 1.1797 | 0.2926 | -0.0766 | 1.5830 |
| nice | 1.1255 | 0.8554 | 1.4127 | 1.0091 | 0.9980 | 1.0314 | 0.0570 | -0.5099 | 0.9636 |
| paris | 1.7815 | 1.3652 | 2.2762 | 1.0524 | 1.0240 | 1.0879 | 0.1085 | 0.0538 | 0.1729 |
| rennes | 1.4659 | 0.9452 | 2.1707 | 1.0306 | 0.9395 | 1.1293 | 0.0896 | -0.3871 | 0.9082 |
| rouen | 1.3011 | 0.9760 | 1.6338 | 1.0783 | 1.0131 | 1.1663 | 0.2576 | 0.0043 | 0.9911 |
| strasbourg | 1.5298 | 1.2436 | 1.8193 | 0.9850 | 0.9377 | 1.0251 | -0.0449 | -0.2148 | 0.0740 |
| toulouse | 1.2398 | 1.0020 | 1.5241 | 1.0525 | 1.0171 | 1.0983 | 0.2181 | 0.0574 | 0.7908 |
Results For Binary Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.4841 | 1.2752 | 1.7013 | 8.8887 | 2.6331 | 41.8605 | 0.9600 | 0.8278 | 0.9930 |
| clermont | 1.4163 | 1.1848 | 1.6678 | 8.2661 | 1.9440 | 48.4141 | 0.9620 | 0.7678 | 0.9951 |
| grenoble | 1.1833 | 1.0378 | 1.3343 | 3.1608 | 0.6627 | 16.7460 | 0.9476 | 0.2158 | 1.5972 |
| lehavre | 1.3053 | 1.0667 | 1.5928 | 2.5796 | 0.2944 | 22.8162 | 0.9300 | -1.1118 | 4.7234 |
| lyon | 1.4182 | 1.1801 | 1.6414 | 2.4633 | 0.8491 | 8.0006 | 0.8386 | -0.6336 | 0.9721 |
| marseille | 1.1532 | 1.0565 | 1.2540 | 1.1816 | 0.9813 | 1.6420 | 0.5930 | -0.1955 | 0.8699 |
| montpellier | 1.1002 | 0.9424 | 1.2836 | 1.1609 | 0.5908 | 2.3586 | 0.8209 | -3.5830 | 4.3788 |
| nancy | 1.2322 | 1.0532 | 1.4399 | 1.1399 | 0.3048 | 4.2635 | 0.8406 | -4.6805 | 6.2442 |
| nantes | 1.2492 | 1.0553 | 1.5183 | 24.6077 | 2.4769 | 373.8229 | 0.9925 | 0.8823 | 0.9996 |
| nice | 1.2149 | 1.0447 | 1.3933 | 1.4447 | 0.9278 | 2.6317 | 0.7252 | -0.1852 | 0.9668 |
| paris | 1.7238 | 1.3804 | 2.1752 | 15.2836 | 6.0095 | 51.6234 | 0.9727 | 0.9283 | 0.9912 |
| rennes | 1.2685 | 1.0590 | 1.4783 | 37.6765 | 2.8967 | 579.5126 | 0.9943 | 0.8898 | 0.9998 |
| rouen | 1.3930 | 1.2034 | 1.6152 | 35.5309 | 4.0903 | 318.8118 | 0.9922 | 0.9125 | 0.9992 |
| strasbourg | 1.4272 | 1.2829 | 1.5698 | 7.7021 | 2.0842 | 38.4858 | 0.9580 | 0.7676 | 0.9935 |
| toulouse | 1.2554 | 1.1286 | 1.4090 | 3.3125 | 1.2356 | 10.4968 | 0.9204 | 0.5148 | 0.9816 |
Natural Direct Effect
Natural Indirect Effect
Code:
# some data management
for (i in 1:length(villes_s)){
villes_s[[i]]$time<-1:nrow(villes_s[[i]]) # Create a new variable for time
}
# start bootstrap
nreps=800 #number of bootstrap reps
results<-matrix(NA,nrow = 15,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(nocc_tot~heat_wave+o3+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #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
Code:
# start bootstrap
nreps=800 #number of bootstrap reps
results_bin<-matrix(NA,nrow = 15,ncol=10)
colnames(results_bin)<-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(nocc_tot~heat_wave+o3_90+ns(time,df=round(3*length(time)/122))+Jours+Vacances+hol,data=dat_boot,family=quasipoisson)
# mediator model - multinomial linear regression
m.mediator<-lm(o3~heat_wave+no2moy+ns(time,df=round(3*length(time)/122))+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) #PMM
} #end bootstrap
results_bin[i,1]<-cities[[i]]
results_bin[i,2]<-median(boot.nde, na.rm=T)
results_bin[i,3]<-quantile(boot.nde, 0.025, na.rm=T)
results_bin[i,4]<-quantile(boot.nde, 0.975, na.rm=T)
results_bin[i,5]<-median(boot.nie, na.rm=T)
results_bin[i,6]<-quantile(boot.nie, 0.025, na.rm=T)
results_bin[i,7]<-quantile(boot.nie, 0.975, na.rm=T)
results_bin[i,8]<-median(boot.pmm, na.rm=T)
results_bin[i,9]<-quantile(boot.pmm, 0.025, na.rm=T)
results_bin[i,10]<-quantile(boot.pmm, 0.975, na.rm=T)
}
# output CDE and NIE and confidence intervals
Results For Continuous Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.5050 | 1.2832 | 1.7276 | 1.0290 | 1.0048 | 1.0547 | 0.0793 | 0.0138 | 0.1613 |
| clermont | 1.4575 | 1.2424 | 1.7386 | 1.0182 | 0.9934 | 1.0492 | 0.0541 | -0.0197 | 0.1569 |
| grenoble | 1.1607 | 1.0357 | 1.3005 | 1.0319 | 1.0109 | 1.0594 | 0.1811 | 0.0593 | 0.5154 |
| lehavre | 1.2826 | 1.0664 | 1.5591 | 1.0313 | 0.9845 | 1.0809 | 0.1272 | -0.0703 | 0.4345 |
| lyon | 1.3855 | 1.1770 | 1.6093 | 1.0316 | 1.0165 | 1.0533 | 0.1039 | 0.0525 | 0.1865 |
| marseille | 1.1504 | 1.0623 | 1.2458 | 1.0044 | 0.9994 | 1.0120 | 0.0335 | -0.0041 | 0.1109 |
| montpellier | 1.1056 | 0.9316 | 1.2813 | 1.0066 | 0.9946 | 1.0233 | 0.0522 | -0.5118 | 0.8170 |
| nancy | 1.2491 | 1.0625 | 1.4763 | 1.0000 | 0.9790 | 1.0240 | 0.0005 | -0.1528 | 0.1475 |
| nantes | 1.2142 | 1.0268 | 1.4716 | 1.0701 | 1.0315 | 1.1185 | 0.2900 | 0.1149 | 0.7626 |
| nice | 1.2177 | 1.0558 | 1.3937 | 1.0044 | 0.9987 | 1.0145 | 0.0249 | -0.0069 | 0.1193 |
| paris | 1.7142 | 1.3965 | 2.1080 | 1.0527 | 1.0297 | 1.0819 | 0.1117 | 0.0688 | 0.1623 |
| rennes | 1.2778 | 1.0931 | 1.5216 | 1.0548 | 1.0084 | 1.1068 | 0.2050 | 0.0320 | 0.4856 |
| rouen | 1.3878 | 1.1961 | 1.5856 | 1.0677 | 1.0327 | 1.1092 | 0.1989 | 0.1024 | 0.3290 |
| strasbourg | 1.4572 | 1.3111 | 1.6261 | 1.0228 | 0.9999 | 1.0485 | 0.0673 | -0.0004 | 0.1419 |
| toulouse | 1.2404 | 1.1066 | 1.3871 | 1.0333 | 1.0117 | 1.0572 | 0.1484 | 0.0586 | 0.2961 |
Results For Binary Ozone:
| city | NDE | NDE_2.5 | NDE_97.5 | NIE | NIE_2.5 | NIE_97.5 | PMM | PMM_2.5 | PMM_97.5 |
|---|---|---|---|---|---|---|---|---|---|
| bordeaux | 1.4884 | 1.2809 | 1.7147 | 9.5017 | 2.5775 | 42.7266 | 0.9641 | 0.8230 | 0.9925 |
| clermont | 1.4059 | 1.1814 | 1.6595 | 7.9246 | 1.7550 | 50.3589 | 0.9626 | 0.7004 | 0.9953 |
| grenoble | 1.1821 | 1.0369 | 1.3463 | 3.0242 | 0.6917 | 12.8590 | 0.9410 | 0.0130 | 1.6424 |
| lehavre | 1.2952 | 1.0518 | 1.5673 | 2.6227 | 0.2832 | 26.3602 | 0.9352 | -2.5239 | 3.3444 |
| lyon | 1.4067 | 1.2263 | 1.6264 | 2.3063 | 0.8004 | 7.2868 | 0.8334 | -0.3017 | 0.9719 |
| marseille | 1.1503 | 1.0437 | 1.2595 | 1.1967 | 0.9620 | 1.7491 | 0.6133 | -0.3138 | 0.8829 |
| montpellier | 1.1137 | 0.9498 | 1.2964 | 1.1958 | 0.5976 | 2.3984 | 0.8153 | -3.8212 | 3.7594 |
| nancy | 1.2364 | 1.0645 | 1.4529 | 1.1312 | 0.3020 | 4.5906 | 0.8364 | -3.6178 | 5.9662 |
| nantes | 1.2397 | 1.0337 | 1.4809 | 24.5893 | 2.8541 | 293.7958 | 0.9927 | 0.9064 | 0.9997 |
| nice | 1.2053 | 1.0432 | 1.3894 | 1.4174 | 0.9059 | 2.8411 | 0.7220 | -0.6344 | 0.9785 |
| paris | 1.7291 | 1.3905 | 2.1342 | 15.7180 | 6.4250 | 55.4055 | 0.9731 | 0.9300 | 0.9920 |
| rennes | 1.2613 | 1.0730 | 1.4972 | 33.9426 | 3.0054 | 633.0013 | 0.9940 | 0.8957 | 0.9998 |
| rouen | 1.3948 | 1.2153 | 1.5980 | 34.9744 | 4.3325 | 314.7414 | 0.9921 | 0.9205 | 0.9992 |
| strasbourg | 1.4303 | 1.2697 | 1.5754 | 7.7439 | 2.0084 | 38.0677 | 0.9577 | 0.7610 | 0.9935 |
| toulouse | 1.2528 | 1.1139 | 1.3932 | 3.2039 | 1.1726 | 10.6449 | 0.9185 | 0.4458 | 0.9841 |
Natural Direct Effect
Natural Indirect Effect