<-
UreaEmissionsUSfunction(input.filename="NAME", nyears=1, nstates=1, EF.mean=1, EF.min=1, EF.max=1, iseed=1234, nreps=10000)
#Script Developed by: N Wiley
# Originally Developed: August 24th, 2022
# Last Update:
# Script estimates CO2 emissions from urea fertilizer application across all 50 US states using Tier methodology from the 2006 IPCC Guidelines
#Returns Gigagrams CO2 emissions for each state and then US totals for the years 1990-2020
# Input.filename was originially in units of N fertilizer Metric Tonnes but was then converted to urea fertilizer in metric tonnes
#-------Arguments--------
#input.filename <---- Name of file with activity data, which is a comma delimited (CSV) file
#activity data is in metric tonnes of urea fertilizer
# EFmean <------- 0.2
# EFmin <----- 0.1
# EFmax <----- 0.2
# nyears <-----31
# nstates <------ 50
{#set the seed
set.seed(iseed)
# Load libraries
library(triangle)
# Import input file
<-read.csv(file="data/Ureafert.csv", header = TRUE, fill=FALSE)
input.data
#---------Data Checks---------
#
# Check that urea amounts are numeric
for (n in 1:(nyears*2)){
+1] <- as.numeric(input.data[,n+1])
input.data[,n
}#
#Check that SD's are numeric
for(n in 1:(nyears*2)){
+1]<-as.numeric(input.data[,n+1])
input.data[,n
}
# Validity checks that urea.amount and SD's are within the expected min and max range
for(y in (1:nyears)){
for(s in (1:nstates)){
<- length(input.data[s,y+1]) > 0
check.urea.amount if(!check.urea.amount){stop("Warning: Urea amount is not greater than 0")}
}
}#
#---------Deterministic Results--------
<-matrix(0, nrow=nstates, ncol=nyears)
Deterministic.CO2C.statefor(y in (1:nyears)){
for(s in (1:nstates)){
<- input.data[s,(y*2)]*EF.mean
Deterministic.CO2C.state[s,y]
}
}
# Sum the state CO2-C emissions for grand totals in each year
<-apply(Deterministic.CO2C.state, MAR=2, FUN="sum")
Deterministic.CO2C.USA
# Convert state and total CO2-C Emissions (in Metric Tonnes) to CO2e in Gigagrams
### 44/12 converts CO2-C to CO2e
### 10^6 converts metric tonnes to gigagrams
<-(Deterministic.CO2C.state*(44/12))/10^6
Deterministic.CO2C.state<-(Deterministic.CO2C.USA*(44/12))/10^6
Deterministic.CO2C.USA
#--------Probabilistic Results----------
#simulate nreps for EFmean
### the EF shows a triangle distribution so there is a min, max, and mean EF
<-rtriangle(nreps, a=EF.min, b=EF.max, c=EF.mean)
EF.sim
# Simulate nreps for urea inputs
<-matrix(0, nrow=nstates*nyears, ncol=nreps)
urea.simfor(y in (1:nyears)){
for(s in (1:nstates)){
+((y-1)*50),]<-rnorm(nreps, mean=input.data[s,(y*2)], sd=input.data[s,3+((y-1)*2)])
urea.sim[s
}
}
# Estimate probabilistic results (in CO2-C for individual state totals and then year totals)
### Remember that this is now a triangle distribution, so we need to account for the mode instead of the median
### Estimate the state total emissions for each year
<-matrix(0, nrow=nstates*nyears, ncol=nreps)
Probabilistic.CO2C.statefor(y in (1:nyears)){
for(s in (1:nstates)){
+((y-1)*nstates),]<- EF.sim*urea.sim[s+((y-1)*nstates),]
Probabilistic.CO2C.state[s
}
}
# Sum the US and state totals for all 31 years (remember to convert from metric tonnes to gigagrams 10^6 and convert CO2-C to CO2 44/12)
### Get the MODE for the states emissions, create mode function
<-function(x,n=2){
mode<-round(x,n)
x<-unique(x)
uwhich.max(tabulate(match(x,u)))]
u[
}
### Sum the probabilistic emissions
<-matrix(0, nrow=nyears, ncol=nreps)
Probabilistic.CO2C.totalUSfor(y in (1:nyears)){
<-apply(Probabilistic.CO2C.state[(1+(50*(y-1))):(50+(50*(y-1))),], MAR=2, FUN="sum")}
Probabilistic.CO2C.totalUS[y,]
#------US Totals: Estimate mode and confidence intervals--------
<-matrix(0, nrow=nyears, ncol=3)
CO2C.USemission.resultsfor (y in (1:nyears)){
1]<- mode(Probabilistic.CO2C.totalUS[y,])
CO2C.USemission.results[y,<-quantile(Probabilistic.CO2C.totalUS[y,], probs = c(0.05, 1))
q2]<- q[1]
CO2C.USemission.results[y,3]<- q[2]
CO2C.USemission.results[y,
}
### Convert US total CO2-C Emissions (in Metric Tonnes) to CO2e in Gigagrams
### 44/12 converts CO2-C to CO2e
### 10^6 converts metric tonnes to gigagrams
<-(CO2C.USemission.results*(44/12))/10^6
CO2.USemission.results
#------Yearly state totals:Estimate mode and confidence intervals--------
<-matrix(0, nrow=nstates*nyears, ncol=3)
CO2C.Stateemission.resultsfor(y in (1:(nyears*nstates))){
1]<- mode(Probabilistic.CO2C.state[y,])
CO2C.Stateemission.results[y,<-quantile(Probabilistic.CO2C.state[y,], probs = c(0.05, 1))
q2]<- q[1]
CO2C.Stateemission.results[y,3]<- q[2]
CO2C.Stateemission.results[y,
}### Convert State CO2-C Emissions (in Metric Tonnes) to CO2e in Gigagrams
### 44/12 converts CO2-C to CO2e
### 10^6 converts metric tonnes to gigagrams
<-(CO2C.Stateemission.results*(44/12))/10^6
CO2.Stateemission.results
#
#-----------Return Statement------------
### Total US Results
<-CO2.USemission.results
CO2.USemission.resultscolnames(CO2.USemission.results)<-c("mode.GgCO2", "5 Percentile", "100 Percentile")
### Results by state for each year
<-CO2.Stateemission.results
CO2.Stateemission.resultscolnames(State.emission.results)<-c("mode.GgCO2", "5 Percentile", "100 Percentile")
#
###### End Script
}
Urea Emissions Estimation
This R Script uses a function that estimates CO2e emissions from urea fertilizer application across all 50 US states using methodology from the 2006 IPCC Guidelines.
This estimation returns gigagrams CO2e emissions for each state and then US totals for the years 1990-2020
<-UreaEmissionsUS(input.filename="data/Ureafert.csv") Final_UreaEmission