Sensitivity analysis
A sensitivity analysis lets you change given parameter variable(s) across different iterations to see how the results respond.
Source: openLCA 2 manual — Parameter analysis
In this example, we will run a sensitivity analysis on the model created in Parameter redefinitions.
# retrieve an existing product system from the database
system = db.getForName(ProductSystem, "Coffee brewing")
# retrieve the impact method
method = db.getForName(ImpactMethod, "AWARE")
# target parameters
intensity = db.getForName(Parameter, "intensity")
with_milk = db.getForName(Parameter, "with_milk")
# process (scope) of the with_milk parameter
coffee_brewing = db.getForName(Process, "Coffee brewing")
# pick the first impact category of the impact method
impact = next(cat for cat in method.impactCategories)
# r is a dictionary of the form {(intensity, with_milk): value}
r = {}
# run the analysis over a range of intensity, with (1) or without (0) milk
for m in [0, 1]:
for i in [0, 2, 4, 6, 8, 10]:
parameters = [
ParameterRedef.of(intensity, i),
ParameterRedef.of(with_milk, coffee_brewing, m),
]
setup = (
CalculationSetup.of(system)
.withImpactMethod(method)
.withParameters(parameters)
)
result = SystemCalculator(db).calculate(setup)
value = result.getTotalImpactValueOf(Descriptor.of(impact))
r[(i, m)] = value
# print the results
keys = sorted(r.keys())
print("%10s %10s %20s" % ("Intensity", "Milk", impact.name))
for (i, m) in keys:
milk = "No" if m == 0 else "Yes"
print("%10d %10s %20s" % (i, milk, r[(i, m)]))
# Output:
# Intensity Milk Water use
# 0 No 0.004295
# 0 Yes 2.151795
# 2 No 0.090195
# 2 Yes 2.237695
# 4 No 0.176095
# 4 Yes 2.323595
# 6 No 0.261995
# 6 Yes 2.409495
# 8 No 0.347895
# 8 Yes 2.495395
# 10 No 0.433795
# 10 Yes 2.581295