# Emission factors for road transport

## Question

What are the average emission factors of cars and other vehicles on air pollutants? Air pollutants include PM2.5 and CO2. Emission factors are expressed as g emission per km driven. Factors are given separately for different car types.

## Rationale

### Data

Data comes from Lipasto [1] and reflects the 2016 situation. (accessed 11.12.2018). Numbers are for combined street+road (assuming 27 % street).

Emission factors for road transport(g/km)
ObsVehiclePM2.5CO2CO2eqDescription
1bus0.119981014Half-full diesel bus on streets
2minibus0.1806816An empty diesel bus on streets
3gasoline car0.0026159159
4gasoline hybrid0.00208127.2127.2Assumes 20 % better energy efficiency
5hybrid with gasoline0.0010463.663.6Assumes 40 % gasoline and zero emissions from electricity
6diesel car0.023139141
7diesel hybrid0.0184111.2112.8Assumes 20 % better energy efficiency
8hybrid with diesel0.009255.656.4Assumes 40 % diesel and zero emissions from electricity
9electric car0.00068436.25236.252Assumes 0.19 kWh/km electricity from national grid. See Emission factors for burning processes. c(1,53000) * (1/1000)/(1/3.6)*0.19 # mg/MJ-->g/km
10gasoline CNG car0.001466.670.1Assumes 100 % gas
11gasoline ethanol car0.00143030Assumes 100 % flexifuel
12other car0.0026159159Assumes gasoline car
13Bike-0.0013-80-80Assumes compensatory reduction in car driving (50 % of gasoline car emission)
14vans0.070278554180.64732183.48244Indirectly calculated from Lipasto
15buses0.0447209341093.786791102.20248Indirectly calculated from Lipasto
16trucks0.0813254251222.689571229.59117Indirectly calculated from Lipasto
17motorcycles0.027740079106.64706111.74124Indirectly calculated from Lipasto
18mopeds0.03183000060.8231461.90407Indirectly calculated from Lipasto
19microcars0.02752000092.7874593.72712Indirectly calculated from Lipasto

Fine particle and carbon dioxide unit emissions for average vehicles. Fine particle emissions are taken from the Lipasto model[1] using average (mixed gasoline and diesel) values for personal car and diesel EURO3 (applied since 2000) values for composite vahicles. For CO2, typical emissions of a new car were used based on the Finnish Vehicle Administration AKE.[2] The following vehicles are used as typical examples of the class: 8-seat vehicle: Toyota Hiace 2.5 D4D 100 4 door long DX bus 4-seat vehicle: Toyota Corolla 2.0 90 D4D Linea Terra 5 door Hatchback (diesel) Car: Toyota Corolla 1.6 VVT-i Linea Terra 5ov Hatchback (gasoline)[3]

Relative emission decrease rate(%/a)
ObsVehiclePM2.5CO2CO2eqDescription
1bus50.50.5Guesstimates based on historical Lipasto numbers
2minibus50.50.5Guesstimates based on historical Lipasto numbers
3gasoline car50.50.5Guesstimates based on historical Lipasto numbers
4gasoline hybrid50.50.5Guesstimates based on historical Lipasto numbers
5hybrid with gasoline50.50.5Guesstimates based on historical Lipasto numbers
6diesel car50.50.5Guesstimates based on historical Lipasto numbers
7diesel hybrid50.50.5Guesstimates based on historical Lipasto numbers
8hybrid with diesel50.50.5Guesstimates based on historical Lipasto numbers
9electric car50.50.5Guesstimates based on historical Lipasto numbers
10gasoline CNG car50.50.5Guesstimates based on historical Lipasto numbers
11gasoline ethanol car50.50.5Guesstimates based on historical Lipasto numbers
12other car50.50.5Guesstimates based on historical Lipasto numbers
13Bike50.50.5Guesstimates based on historical Lipasto numbers

### Calculations

 ```# This is code Op_en2989/emfactor on page [[Emission factors of cars on air pollutants]]. library(OpasnetUtils) emfactor <- Ovariable("emfactor", ddata="Op_en2989") emfactor@data\$Year <- 2016 objects.store(emfactor) cat("Ovariable emfactor stored.\n") ```

 ```# This is code Op_en2989/emissionFactor on page [[Emission factors of cars on air pollutants]]. library(OpasnetUtils) library(ggplot2) library(reshape2) objects.latest("Op_en7925",code_name="preprocess") # [[:File:Finnish road traffic emissions by Liisa.zip]] emissionRT ggplot(emissionRT, aes(x=Consumption, y=CO2,colour=Location))+geom_point()+ facet_wrap(~Vehicle, scales="free") # coord_cartesian(xlim=c(0,500),ylim=c(0,10)) emissionRT\$EF.HC <- emissionRT\$HC / emissionRT\$Consumption ggplot(emissionRT, aes(x = Vehicle, y = EF.HC, colour=Location))+geom_point() # Units: CO [t], HC [t], NOx [t], PM [t], CH4 [t], N2O [t], SO2 [t], # CO2 [t], CO2eq [t], Consumption [t], Energy [TJ], Mileage [Mkm] dat <- melt( emissionRT, id.vars=c("Municipality","Source","Vehicle","Location","EF.HC","Consumption"), variable.name = "Pollutant", value.name = "Result" ) dat <- dat[!(dat\$Vehicle=="vans" & dat\$Location=="street" & dat\$Pollutant=="HC" & dat\$EF.HC>0.007),] reg <- list() for(i in unique(dat\$Vehicle)) { for(j in unique(dat\$Location)) { for(k in unique(dat\$Pollutant)) { tmpdat <- dat[dat\$Vehicle==i & dat\$Location==j & dat\$Pollutant==k,] if(nrow(tmpdat)>0) { tmp <- lm(Result ~ Consumption, data = tmpdat) reg <- rbind( reg, cbind( Vehicle = i, Location = j, Pollutant = k, as.data.frame(summary(tmp)[[4]]) ) ) } } } } #Vehicle Estimate Std. Error t value Pr(>|t|) #(Intercept) private cars 4.100480e+01 1.660571e+00 2.469319e+01 6.604968e-93 #Consumption private cars 4.039917e-02 2.289063e-04 1.764878e+02 0.000000e+00 #(Intercept)1 vans 1.777582e-05 2.382803e-04 7.460046e-02 9.405580e-01 #Consumption1 vans 4.269940e-02 2.063648e-07 2.069123e+05 0.000000e+00 #(Intercept)2 buses 4.038413e-01 1.960740e-02 2.059637e+01 2.250162e-71 #Consumption2 buses 4.282124e-02 2.060304e-05 2.078395e+03 0.000000e+00 #(Intercept)3 trucks 4.321900e-01 1.517886e-02 2.847315e+01 9.705433e-113 #Consumption3 trucks 4.266974e-02 4.031930e-06 1.058296e+04 0.000000e+00 #(Intercept)4 motorcycles -3.309552e-15 1.259225e-15 -2.628245e+00 9.035057e-03 #Consumption4 motorcycles 4.142677e-02 3.941630e-18 1.051006e+16 0.000000e+00 #(Intercept)5 mopeds -4.136940e-16 2.328126e-16 -1.776940e+00 7.661557e-02 #Consumption5 mopeds 4.142677e-02 4.417103e-18 9.378721e+15 0.000000e+00 #(Intercept)6 microcars -1.292794e-15 1.457366e-16 -8.870755e+00 7.319877e-17 #Consumption6 microcars 4.335997e-02 5.737516e-18 7.557272e+15 0.000000e+00 # Conclusions: # Consumption = constant * Energy within Vehicle groups # BUT: Strange small intercepts: for private cars and buses they are fairly large causing deviation in the relation. # For trucks makes slight variation. Therefore, we just drop the intercept and use the constant. # Standard errors are so small that they are meaningless # HC: vans on streets have two different emission factors. The larger is only on small # municipalities. The larger is less likely, so the smaller is used. # CO2 and all other pollutants = constant * Consumption tmp <- reg[grepl("Consumption",rownames(reg)),1:4] colnames(tmp)[4] <- "Result" emissionFactor <- Ovariable( "emissionFactor", data = tmp[!tmp\$Pollutant %in% c("Energy","Mileage"),] ) emissionFactor@meta\$unit <- "ton/ton" energyFactor <- Ovariable( "energyFactor", data = tmp[tmp\$Pollutant == "Energy", colnames(tmp) != "Pollutant"] ) energyFactor@meta\$unit <- "TJ/ton" mileageFactor <- Ovariable( "mileageFactor", data = tmp[tmp\$Pollutant == "Mileage", colnames(tmp) != "Pollutant"] ) mileageFactor@meta\$unit <- "Gm/ton" objects.store(emissionFactor, energyFactor, mileageFactor) cat("Ovariables emissionFactor, energyFactor, mileageFactor stored.\n") emissionFactor <- EvalOutput(emissionFactor) ggplot(emissionFactor@output, aes(x=Vehicle, y=emissionFactorResult, colour=Location))+ geom_point()+ facet_wrap(~ Pollutant, scales="free_y")+ theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0)) energyFactor <- EvalOutput(energyFactor) mileageFactor <- EvalOutput(mileageFactor) ```

 ```# This is code Op_en2989/caremf on page [[Emission factors for road transport]] library(OpasnetUtils) library(ggplot2) caremf <- Ovariable( "caremf", dependencies = data.frame( Name=c("emfactor","emfactorRate"), Ident=c( "Op_en2989/emfactor", # [[Emission factors for road transport]] "Op_en2989/emfactorRate" # [[Emission factors for road transport]] ) ), formula = function(...) { tmp <- max(emfactor\$Year):2035 timeline <- Ovariable( "timeline", output = data.frame( Year = tmp, Result = tmp - min(tmp) ), marginal = c(TRUE,FALSE) ) emf <- emfactor[,colnames(emfactor@output)!="Year"] * (1-emfactorRate/100)^timeline return(emf) } ) ggplot(EvalOutput(caremf)@output, aes(x=Year,y=caremfResult,colour=Vehicle))+geom_line()+ facet_wrap(~Pollutant, scales="free_y") objects.store(caremf) cat("Ovariable caremf stored.\n") ```

 ```# This is code Op_en2989/emfactorRate on page [[Emission factors for road transport]] library(OpasnetUtils) emfactorRate <- Ovariable( "emfactorRate", ddata = "Op_en2989", subset = "Relative emission decrease rate" ) objects.store(emfactorRate) cat("Ovariable emfactorRate stored.\n") ```