Counter for tumblr
Website Stats

SEMANTIC AND PRAGMATIC

Value is what counts, for sustainability investment, not just for being good

Value is what counts, for sustainability investment, not just for being good

April 30, 2018 

Xun Liao  @Xun_Liao


 

There have been hot debates on circular economy and how to reduce the carbon footprint from environmental life cycle assessment (LCA) perspective, which propped me to take a pause and reflect our daily LCA work and rethink the wisdom of Milton Friedman. As the result, this short article is to explain my view of what drives private sectors to conduct sustainability investment. 

Simply put,  Value is what counts, for sustainability investment, not for being good. In the other words, green investing from private sectors are often for profit, not just doing good for being good. It's also futile and even unfair to ask law-abiding private companies to reduce environmental impacts or social problems for the sake of just being good, especially when it might backfire at the expense of severe detrimental financial impacts or endangering its business survival. 

In my opinion, there is a fundamental difference when it comes to approaching sustainability issues for government/public authorities and private organizations/corporations. The motivation of green investing for government is usually for creating broad societal value, however, for private sectors, that is for private value creation.

For the government, it is their duty to design rules of the games, to give incentives for reward or publishment for individuals and private organizations to play fairly without deception and fraud. It is their duty to find the delicate balance of safeguarding the planet and meanwhile keeping its enterprises or industries in a competitive environment, as well as its citizens free from unemployment and hunger.

For private corporations, the primary duty of their existence is to create (mainly financial) value for shareholders without (potentially) violating current and future rules of the game or deviating certain moral value choices of its own employees. Therefore, for private sectors, the focuses of tackling sustainability issues are not lowering carbon or environmental impact themselves nor where most emissions occur, but identifying the most cost-effective areas to deliver co-benefits of environmental value and financial value (also considering the opportunity cost of doing nothing). 

In the other words, not all environmental impacts are created equally. It’s, therefore, imperative to conduct due diligence in order to understand what share of environmental impact might pose largest risks or opportunities where actions can be taken. Smart actions are what counts. 

My fellow people,  “Let us not love in word or tongue, but in deed and in truth” (1 John 3:18). 

Posted by Xun Liao at 19:55
Comments (0)
Find nth occurrence in a column

A solution to  find Nth occurence in a column coupled with INDEX/ MATCH function. 

Step 1: In Excel, Enable "Developer" tab in Excel:  

Pathway (for Mac): Preference--> Ribbons--> select "Developer" 

Step 2: Insert Macro 

Pathway: Develop--> Editor--> Insert module (copy the green text below)  

Function NthInstance(F As String, R As Range, N As Long) As String
Dim vA As Variant
vA = R.Value
For I = LBound(vA, 1) To UBound(vA, 1)
    If InStr(1, vA(I, 1), F) > 0 Then
        ct = ct + 1
        If ct = N Then
            NthInstance = R.Cells(I, 1).Address(1, 1)
          Exit Function
        End If
    End If
Next I
If ct < N Then NthInstance = "Only " & ct & " instances found"
End Function
 
Credit:  source of the VBA code 
http://www.mrexcel.com/forum/excel-questions/678792-find-nth-occurrence-column.html
 
Step 3: INDEX/INDIRECT function can then be applied to find values of Nth occurencies. 

e.g.

=INDEX($F$1:$H$10,ROW(INDIRECT(NthInstance($F29,$F$2:$F$10,$E29))),2)

Download an example sample here
 
Enjoy. 
 
Posted by Xun Liao at 14:39
Comments (0)
Ecoinvent v3.1 water balance in SimaPro

I did a bit statistical analysis of water balance in ecoinvent cut-off 3.1 version in SimaPro. What's shown is the difference between water emitted to air and "W-R", a.k.a. 

[water emitted to air ( consumption)  /  (water withdrawal- water release) - 1] *100% 

It looks like water difference of ~7000 (out of 13000, >50%) processes are within 10% (+/-), another 6000 processes have much bigger difference. I suspect this might be caused by the following two factors: 
 
1. Properties: Water embodied in mass properties ( e.g irrigation water, tap water, wastewater, etc) 
 
2. Boundary:  Issue related to boundary of water flows accounting, i.e. should salt water , turbined water being considered into the water balance
 
If boundary is okay, it suggests water in mass properties have to be carefully considered in order to do a proper water balance accounting. 
 
How do you think? If you'd like to comment, pls send an email to me :  xun.liao@epfl.ch 
 
P.S. I'm in disucssion with ecoinvent to figure out what's the best way to calculate water consumption. Stay tuned. 
Posted by Xun Liao at 19:57
Comments (0)
Visualise US LCI database in R

This is an example code to visulize US LCI database in R

library(igraph)

g1 <- graph.adjacency(B ,mode='undirected',diag=FALSE

V(g1)$label<-lp1  # set lp1 (degree of freedom) is  frequency of a process being used as input

V(g1)$label.color <- rgb(0, 0, .2, .8) # set color scheme

V(g1)$size=k*0.3  # change node size 

V(g1)$label.cex <- 1*V(g1)$size / max(V(g1)$size)+ .2  # change text size 

#split screen

split.screen(c(2,1))-> ind

#screen( ind[2])

#plot(g1,vertex.label=NA, layout=layout.auto)

screen( ind[2])

plot(g1,vertex.label=lp1, layout=layout.reingold.tilford)

plot(g1,vertex.label=NA, layout=layout.random)

For dynamic visualization, check out a network visualization (force-directed graph) of the 2012 industry-by-industry US Input-Output Table (15 sectors) provided by BEA.

http://www-personal.umich.edu/~mingxu/ionetwork12/

Posted by Xun Liao at 14:54
Comments (0)
R code for LCA database computation: ecoinvent 3.1
This is the R code to compute ecoinvent version 3.1 from SimaPro raw matrix export. The motivation for this work is to handle large database at ease. This code can be adapted for any database exported from SimaPro. It's potentially very useful if you want to compute selected impact results for databases at once. 
 
Main objectives of the current code are: 
  • extract sparse matrix (i, j, k) of ecoinvent version 3.1 for data storage 
  • compute final LCI results for all processs  
  • extract and sort impact assessment method characterization factors for ecoinvent v3.1 nomenclature as computable format 
  • compute IA results for the whole database 
 
Step 1:  Download and install free Open Source Rstudio from the URL  below: 
https://www.rstudio.com/products/rstudio/download/
 
Step 2: Export ecoinvent v3.1 database from SimaPro Dev as matrix format,  then save it as a comma-delimited CSV file.  Also, export selected impact assessment method as csv file, sperated by ";" . 
 
Step3: Apply the following R code for computation. 
Attention: text that might need to be ajusted are highlighted as yellow color.
For methodological and mathematical backgroud for this code, please refer to this document:  Mathematical formula for spatial LCA computation:  1. Site-Generic LCA
 
## start of the code
#Aug 18, 2015  Xun Liao 
 
## Section 1:  Create and compute system LCI for sparse matrix ecoinvent version 3.1 
# This code can be easily adapted for any other database or project work 
 
setwd("/Users/Desktop") # set up your own folder directory 
#read data
filename='EI31defaultUnitRaw.csv'
data<-read.table(filename,header=FALSE,sep=','); # change the file name accordingly 
 
#install libraries 
install.packages("Matrix")
library(Matrix)
 
# create reference matrix R 
R<-data[3,5:(dim(data)[2])];  #read reference matrix 
R<-as.matrix(R);  #format to matrix 
storage.mode(R)<-"double";  # convert data to 'double' format 
R[is.na(R)] <- 0;  # convert NA to zero 
R<-as.numeric(R); # format as a vector 
 
#Create matrix B
B<-data[(dim(data)[2]+3):(dim(data)[1]),5:(dim(data)[2])];
B<-as.matrix(B);
storage.mode(B)<-"double";
B[is.na(B)] <- 0;
B<-sweep(B, 2, R, "/");  # normalize matrix B 
B<-Matrix(B,sparse=TRUE);
Bsum<-summary(B);  # create location matrix (i,j,k) 
write.table(Bsum, file = "SparseEI31B.txt",sep = ",",row.names = FALSE,col.names=FALSE)  # save the matrix B as (i j k) format 
 
# create matrix A 
A<-data[7:(dim(data)[2]+2),5:(dim(data)[2])];
A<-as.matrix(A);
storage.mode(A)<-"double";
A[is.na(A)] <- 0;
# create diag A 
diagA<-diag(dim(A)[2]);
 
#create final invertible matrix A 
A<-sweep(A, 2, R, "/");
A<-(-A)+diagA; 
A<-Matrix(A,sparse=TRUE);
Asum<-summary(A);
write.table(Asum, file = "SparseEI31A.txt",sep = ",",row.names = FALSE,col.names=FALSE)
 
#create demand matrix F
F<-diag(dim(A)[2]);
 
#matrix inversion 
G<-B%*%solve(A,F);  # final LCI matrix G 
rm(F,R,Bsum,Asum,diagA) # clear variables that is not useful anymore 
 
#save the current workspace
save.image(file='EI3data.RData')
savehistory(file='EI3data.Rhistory')
 
##  Section 2: Extract and sort characterization factors of any impact assessment methodology for LCI database IA computation  
#Suppose you also have an impact assessment methodology characterization factors (e.g. IMPACT 2002+ or TRACI 2.1, ReCiPe) exported from SimaPro.  The objective here is to sort them out for ecoinvent elementary flows as computable format:
 
filename="IMPACT2002.CSV"; # for example, IMAPCT 2002+ method 
 
#read the IA csv file that is download from SimaPro
mydata <- read.delim(filename, header = FALSE, stringsAsFactors = FALSE);
 
# split data into different columns 
CF<-data.frame(unname(t((data.frame(strsplit(mydata[, 1], ";")))))); 
 
#identify start & end location for each impact category 
s<-which(CF$X1=="Impact category"); #starting location of impact categories 
s<-c(s,dim(CF)[1]); # add final row of last impact category
 
 # read impact category name 
Name<-as.matrix(CF$X1[s[1:length(s)-1]+1]);  # read impact category name 
NameUnit<-as.matrix(CF$X2[s[1:length(s)-1]+1]);  # read impact category name 
metaname<-data.frame(cbind(Name,NameUnit)) #combine indicator name and unit into one dataframe 
metaname<- do.call(paste, c(metaname[c("X1", "X2")], sep = ";")) #merge indicator name and unit into one column
 
#create matching ID for impact assessment method [compartment, ( sub-), name ]. check unit
CF$ID <- do.call(paste, c(CF[c("X1", "X3","X2")], sep = ";")) ;
 
#read elementary flow list for ecoinvent v3.1 database 
dbN<-data[(dim(data)[2]+3):(dim(data)[1]),1:4];
 
#create matching ID for inventory database;  dbN is nomenclature elementary flow name for ecoinvent v3.1 [category, sub-, name ] ; 
 
dbN$ID1 <- do.call(paste, c(dbN[c("V1", "V2","V3")], sep = ";")) ;  # sub-category senstive
dbN$ID2 <- do.call(paste, c(dbN[c("V1", "V2")],"(unspecified)", sep = ";")) ; #ingore sub-category
dbN$ID3 <- do.call(paste, c(dbN[c("V1", "V2","V3","V4")], sep = ";")) ; #meta info. 
 
 
#create an empty data frame C for storing matched characterization factors 
C<-data.frame(matrix(nrow=dim(dbN)[1], ncol=dim(Name)[1]))
m <- vector(mode="numeric", length=dim(dbN)[1])
 
# create CF matrix 
for (i in 1:(length(s)-1) ) {
  
  m1<-match(dbN$ID1,CF$ID[s[i]:s[i+1]])+s[i]-1;
  m2<-match(dbN$ID2,CF$ID[s[i]:s[i+1]])+s[i]-1;
 k<-data.frame(cbind(m1,m2,m));
 
# match sub-category value first, if sub-category value does not exist, use generic value that is based on compartment+name matching. This appraoch is consistent with SimaPro program. 
 
  k<- within(k,
             m<- ifelse(!is.na(m1),m1,m2)
             )
 
  C[i]<-CF$X5[k$m]
}
 
C<-as.matrix(C)
storage.mode(C)='double'
C[is.na(C)]=0;
names(C)=Name;  # assign impact categories name to characterization fator matrix for ecoinvent version 3.1 
print(as.matrix(colSums(C))) # check sorted CFs 
 
#format CF database
CEI<-data.frame(cbind(dbN$ID3,C))
names(CEI)=c("ElementoryFlow",metaname)
 
##  Section 3: Compute IA results , then format it for export 
#compute impact assessment results output for the database 
IA<-t(G)%*%C;
IA<-dataframe(as.matrix(IA));
 
#generate meta and output
colnames(IA)=metaname;
processname<- data.frame(t(data[1:5,4:dim(data)[2]]));
processname$X3<-NULL;
processname$X4<-NULL;
names(processname)<-as.matrix(processname[1,])
processname=processname[-1,];
 
#generate final IA results output 
output<-data.frame(cbind(processname,IA)); 
 
rm(CF,dbN,mydata,Name,s,filename) #clear variables 
 
#save the current workspace
save.image(file='EI3data.RData')
savehistory(file='EI3data.Rhistory')
 
## End of the code 
 
## My next steps are: 
  • to add contribution/ sensitivity/ supply chain analysis
  • to add uncertainty analysis
  • to visualize results 
  • to add spatialization analysis and location information (such as GIS ,etc) 
  • to extract information directly from original data provider (such as ecoinvent, NREL USLCI ,etc) 
 
Stay tuned! 
 
If you have any comments/questions, send me an email:  xun.liao@epfl.ch

 

Counter for tumblr
Website Stats

Posted by Xun Liao at 11:38
Comments (0)
GHG emissions due to direct land use change per crop per country

Dataset name:  GHG emissions due to direct land use by crop by country   (click to download; format: excel ".xlsx") 

Meta information: 

Version direct-land-use-change-assessment-tool-(version-2014-1-21-january-2014).xlsx.zip
Download Link: http://blonkconsultants.nl/en/tools/land-use-change-tool.html
   
Approach Excel Data Table
   
Scenario considered Weighted
   
   
Deliverables GHG emissions (kg / kg of product) 
   
Potential usage Corporate footprint and corporate reporting, such as CDP
   
Potential limitation

Omission of peat drainage that could be significant for southeast aisan countries, such as Indonesia and Malaysia, etc. 

FAO data might not be as reliable as satelite data provide by Hansen et al (2013, Science). Suggest to do a sense check using WRI global forest watch map based on data from Hansen et al.

  Hansen, M. C., P. V. Potapov, R. Moore, M. Hancher, S. A. Turubanova, A. Tyukavina, D. Thau, S. V. Stehman, S. J. Goetz, T. R. Loveland, A. Kommareddy, A. Egorov, L. Chini, C. O. Justice, and J. R. G. Townshend. 2013. “High-Resolution Global Maps of 21st-Century Forest Cover Change.” Science 342 (15 November): 850–53.
  http://www.globalforestwatch.org/
   
Time 01/11/15
Author Xun Liao
If questions, contact me  xun.liao@quantis-intl.com
  xun.liao@epfl.ch

 

Posted by Xun Liao at 18:05
Comments (0)
LCA resources and expert network

This is a catalogue I keep for resources related to life cycle assessment and its extended applications.  A short guide: 

-Methodology

-Regionalization

-Impact assessment 

-Applications

-Relationship with risk assessment

-Software and Tools

-Key experts in this fied

-Key initiatives

Methodology

Computational methodology

 
S Suh, G Huppes Journal of Cleaner Production 13 (7), 687-697 Methods for life cycle inventory of a product 
URL: http://www.carbonriver.com/wp-content/files_mf/1285185749Suh_Huppes_2005_Methods_of_LCI.pdf
 
Reinout Heijungs, Sangwon Suh. 2002. The computational structure of life cycle assessment
URL: http://www.universiteitleiden.nl/cml/ssp/publications/2002_004.pdf
 
Sangwon Suh. 2004. Functions, commodities and environmental impacts in an ecological–economic model
URL: http://aoatools.aua.gr/pilotec/files/bibliography/suh-0627150849/suh.pdf
 

EIO-LCA

 
Satish Joshi. 2000. Product Environmental Life-Cycle Assessment Using Input-Output Techniques
URL: https://www.msu.edu/~satish/JIE%20article-joshi-published.pdf
 
CHRIS HENDRICKSON, et al. 1998. Economic Input-Output Models for Environmental Life-Cycle Assessment
URL: http://www.cmu.edu/gdi/docs/economic-input-output1.pdf
 
Jeroen Guinée, Reinout Heijungs, et al. 2006. Environmental Impact of Products (EIPRO) Analysis of the life cycle environmental impacts related to the final consumption of the EU25
 

Review Articles 

Books

Guinée, Jeroen (Ed.) 2002. Handbook on Life Cycle Assessment Operational Guide to the ISO Standards

 

Policy-Making

The Role of Life Cycle Assessment in Environmental Policymaking

URL: http://www.ems.expertgrupp.se/Uploads/Documents/7-jan-2013/EMS_2012_4.pdf

Sangwon Suh.2011.The structure of life-cycle environmental impact of the U.S. economy
URL: http://www.carbonriver.com/wp-content/files_mf/thestructureoflifecycleenvironmentalimpactsofuseconomysuh.pdf

Other interesting books: 

Lethal model 2: The limits to growth revisited - ‎Nordhaus

URL:http://www.brookings.edu/~/media/projects/bpea/1992%202/1992b_bpea_nordhaus_stavins_weitzman.pdf

 

Website Links: 

Computational Sustainability

http://blog.computational-sustainability.org/

http://www.computational-sustainability.org/

Spatial LCA

http://chris.mutel.org/

Other Personal Blogs

http://www.doka.ch/lca.htm

Posted by Xun Liao at 16:25
Comments (0)
RSS