Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions methods/common/additionality.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import glob
import os
import logging
from typing import Dict, Any, List
from typing import Dict, Any, List, Tuple

import numpy as np # type: ignore
import pandas as pd # type: ignore
Expand Down Expand Up @@ -85,7 +85,7 @@ def generate_additionality(
density: np.ndarray,
matches_directory: str,
expected_number_of_iterations: int,
) -> Dict[int, float]:
) -> Tuple[Dict[int, float], List[bool]]:
"""Calculate the additionality (or leakage) of a project from the counterfactual pair matchings
alongside the carbon density values and some project specific metadata."""
logging.info("Project area: %.2fmsq", project_area_msq)
Expand Down Expand Up @@ -220,6 +220,20 @@ def generate_additionality(
for year, values in treatment_data.items():
p_tot[year] = np.average(values)


# testing stoping criteria
final_p = treatment_data[end_year]
final_c = scvt[end_year]
additionality = [p - c for p, c in zip(final_p, final_c)]
cv = 0.05
df = np.array([x + 1 for x in range(len(additionality))])

a_mu = np.cumsum(additionality) / df
variance = np.sum(np.power((additionality - a_mu), 2)) / (df - 1)
stderr = np.sqrt(variance) / np.sqrt(df)
d = np.abs(cv * a_mu)
stopping_criteria = stderr / d

if partials_dir is not None:
figure, axis = plt.subplots(1, 3)
figure.set_figheight(10)
Expand Down Expand Up @@ -312,5 +326,5 @@ def generate_additionality(
for year, value in p_tot.items():
result[year] = value - c_tot[year]

return result
return result, stopping_criteria

15 changes: 14 additions & 1 deletion methods/outputs/calculate_additionality.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@
dest="matches",
help="Directory containing the parquet files of the matches.",
)
parser.add_argument(
"--stopping",
type=str,
required=True,
dest="stopping_csv",
help="The destination stopping criteria path.",
)
parser.add_argument(
"--output",
type=str,
Expand Down Expand Up @@ -81,7 +88,7 @@
project_gpd = gpd.read_file(args.project_boundary_file)
project_area_msq = area_for_geometry(project_gpd)

additionality = generate_additionality(
additionality, stopping_criteria = generate_additionality(
project_area_msq,
args.project_start,
args.evaluation_year,
Expand All @@ -95,3 +102,9 @@
writer.writerow(["year", "additionality"])
for year, value in additionality.items():
writer.writerow([year, value])

with open(args.stopping_csv, "w", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["iteration", "stable"])
for index, value in enumerate(stopping_criteria):
writer.writerow([index + 1, value])