Damage vector for life-cycle analysis: Difference between revisions

From Opasnet
Jump to navigation Jump to search
(→‎Formula: variables renamed, code debugged but units are not clear)
(→‎Formula: code commented)
Line 65: Line 65:
damagesPerImpact <- opbase.data("Op_en5902.damagefactors") # Download the data from Opasnet Base.
damagesPerImpact <- opbase.data("Op_en5902.damagefactors") # Download the data from Opasnet Base.
damagesPerImpact <- reshape( # Reshape it into the wide format.
damagesPerImpact <- reshape( # Reshape it into the wide format.
damagesPerImpact[ , colnames(damagesPerImpact) != "Obs"],  
damagesPerImpact[ , colnames(damagesPerImpact) != "Obs"], # Data to be reshaped
times = "Result",  
times = "Result", # Column(s) to be reshaped
timevar = "Unique_categories",  
timevar = "Unique_categories", # Column identifiers
idvar = "Damage_categories",  
idvar = "Damage_categories", # Row identifiers
direction = "wide"
direction = "wide" # Reshape from long to wide format
)
)
colnames(damagesPerImpact) <- gsub("Result.", "", colnames(damagesPerImpact)) # Remove extra "Result." from colnames.
colnames(damagesPerImpact) <- gsub("Result.", "", colnames(damagesPerImpact)) # Remove extra "Result." from colnames.
rownames(damagesPerImpact) <- damagesPerImpact[[1]] # Make the first column the rownames.
rownames(damagesPerImpact) <- damagesPerImpact[[1]] # Make the first column the rownames.
Line 94: Line 95:


coffee <- opbase.data("Op_en5902.coffeecupinputs") # Download the data from Opasnet Base.
coffee <- opbase.data("Op_en5902.coffeecupinputs") # Download the data from Opasnet Base.
coffee <- coffee[ , colnames(coffee) != "Obs"]
coffee <- coffee[ , colnames(coffee) != "Obs"] # Remove the redundant Obs column.


cat("Primary prosesses related to a cup of coffee (in Euro)\n")
cat("Primary prosesses related to a cup of coffee (in Euro)\n")


print(xtable(coffee), type = 'html')
print(xtable(coffee), type = 'html')
# Combine the direct requirements of a coffee cup with a full vector of requirements and fill empty cells with 0.


coffee <- merge(data.frame(directRequirements = rownames(impactsPerDollar)), coffee, all.x = TRUE)
coffee <- merge(data.frame(directRequirements = rownames(impactsPerDollar)), coffee, all.x = TRUE)
coffee$Result <- ifelse(is.na(coffee$Result), 0, coffee$Result)
coffee$Result <- ifelse(is.na(coffee$Result), 0, coffee$Result)


# head(coffee)
# Get the normalisation data for different damages and make an ovariable out of it.


temp <- tidy(opbase.data("Op_en5904"), objname="normalisation")
temp <- tidy(opbase.data("Op_en5904"), objname="normalisation")
Line 112: Line 115:
data = temp
data = temp
))
))
# normalisation@output


impactsPerDollar <- impactsPerDollar * coffee$Result # Multiply data matrix with activities.
impactsPerDollar <- impactsPerDollar * coffee$Result # Multiply data matrix with activities.


out <- impactsPerDollar %*% damagesPerImpact
out <- impactsPerDollar %*% damagesPerImpact # Do a matrix multiplication


# After matrix operations, turn the output into a data.frame for graphics.
# After matrix operations, turn out into a data.frame for graphics.


out <- as.data.frame(out)
out <- as.data.frame(out)


out$directRequirements <- rownames(out)
out$directRequirements <- rownames(out)
out <- melt(out, idvars = "directRequirements", variable_name = "damages")
out <- melt(out, idvars = "directRequirements", variable_name = "damages") # Reshape into long format
out <- out[out$value >= sum(out$value) * limit , ]
out <- out[out$value >= sum(out$value) * limit , ] # Remove all rows with smaller values than the limit.
out <- dropall(out)
out <- dropall(out)  


# Rename the columns to reflect actual things.
# Rename the columns to reflect actual things.
Line 132: Line 133:
colnames(out)[colnames(out) == "value"] <- "Result"
colnames(out)[colnames(out) == "value"] <- "Result"


damages <- EvalOutput(new("ovariable", name = "damages", data = out))
damages <- EvalOutput(new("ovariable", name = "damages", data = out)) # Make an ovariable
 
#head(damages@output)


damageFractions <- damages / normalisation * 365
damageFractions <- damages / normalisation * 365 # Normalise and scale to daily values.


#head(damageFractions@output)
# Plot results on a bar graph.


cat("Effects smaller than", limit*100, "% of the total effect are not shown.\n")
cat("Effects smaller than", limit*100, "% of the total effect are not shown.\n")

Revision as of 16:53, 24 January 2013



Question

What are the damages per unit purchased commodity using a life-cycle assessment?

Answer

Rationale

Dependencies

Data

damagefactors(-)
ObsUnique_categoriesHuman healthEcosystem qualityClimate changeResourcesWater consumption
1Carcinogens0.00000280000
2Non-carcinogens0.00000280000
3Respiratory inorganics0.00070000
4Ionizing radiation0.000000000210000
5Ozone layer depletion0.001050000
6Respiratory organics0.000002130000
7Aquatic ecotoxicity00.0000502000
8Terrestrial ecotoxicity00.00791000
9Terrestrial acidification/nutrification01.04000
10Land occupation01.09000
11Aquatic acidification00000
12Aquatic eutrophication00000
13Global warming00100
14Non-renewable energy00010
15Mineral extraction00010
16Water withdrawal00000
17Water consumption00001

Example of coffee cup

coffeecupinputs(Euro)
ObsdirectRequirementsResult
131131A - Sugar cane mills and refining0.1
2112120 - Dairy cattle and milk production0.2
3311820 - Cookie, cracker, and pasta manufacturing0.5
4311920 - Coffee and tea manufacturing0.2
5221100 - Electric power generation, transmission, and distribution0.1
6322299 - All other converted paper product manufacturing0.04
7335210 - Small electrical appliance manufacturing0
8335221 - Household cooking appliance manufacturing0.01

Formula

What is the smallest fraction of the total effect you want to see?:

+ Show code

See also

Keywords

References


Related files

<mfanonymousfilelist></mfanonymousfilelist>