Methods and data quality
This page explains how 115 candidate policies were screened and selected. It also shows how each policy is scored every year, which assumptions are made and how the data were checked.
Selection flow
Both sources feed one core set. An EEA policy and an OECD category can describe the same instrument. So the 27 selected EEA policies and 20 eligible OECD categories merge into 34 policy families. Follow the flows from left to right to see where each candidate ends up; hover over a flow for details.
How each policy is scored
Each policy p in sector s and year t is scored as follows.
Ip,s,t = Mp,s,t × Cp,s × Bp
- I, policy intensity
- Relative index on [0, 1].
- M, implementation
- The same-year OECD CAPMF stringency score ÷ 10, where a matching indicator exists. Otherwise, an assumed ramp-up: M = clip((t − t₀ − lag + 0.5) / ramp, 0, 1), where t₀ is the start year. Some policies keep an effect after they end. For these, M halves every h years (the half-life) from its last level: 2−(t − tend)/h.
- C, coverage
- How much of the sector the policy legally covers. It is an ordinal score (a rank on a fixed scale, not a measurement): 1 (whole sector), 0.5 (major subsector), 0.25 (defined segment), 0.1 (narrow pilot).
- B, bindingness
- How compulsory the policy is, as an ordinal score: 1 (mandatory rule or statute), 0.75 (price or obligation), 0.5 (incentive), 0.25 (information or voluntary). It is a researcher-assigned classification of legal compulsion, not a measure of enforcement, compliance or effectiveness.
Aggregation rules
- A residual bundle (one summary row per sector for smaller measures) takes the mean of its members' intensities. If any member is missing, the bundle value is missing too.
- Framework (L1) rows give context only. Never add them to instruments or programmes.
- A portfolio and its delivery schemes describe the same policy. Use one or the other, not both.
- There is no national total index, because rows overlap by design.
Sensitivity index
As a check, an equal-weight index takes the simple average (M + C + B) / 3. A "gated" version of it is set to zero before a policy starts. The main index multiplies its parts, following composite-indicator practice (OECD/JRC, 2008). Its weights are a stated convention, not an empirical estimate.
Every candidate and its decision
Five eligibility tests: (A) mitigation purpose, (B) applies in Ireland, (C) an identifiable instrument or framework, (D) an identified start date, (E) active within 2000–2023.
| Candidate | Sector | A B C D E | Reported kt | Cumulative share | Outcome | Reason or basis |
|---|
The 90% selection rule by sector
Within each sector, eligible EEA measures are ranked by their reported saving. The first available estimate is used: ex-post 2024 (reported estimate of effects after implementation), then ex-ante 2025, then ex-ante 2030 (projected in advance).
Measures are selected in rank order until they cover 90% of the sector's positive reported total. Each bar shows the share reached in one sector. Shares refer to reported totals, which may overlap, not to actual emission cuts.
Assumed timing profiles
When no OECD score matches, implementation rises in a straight line to full strength, counted from mid-year. If a policy ends but its effects last, implementation then halves every half-life. Speeds vary by type of mechanism. They are assumptions, not estimates.
Move the slider to see how a policy phases in and fades after it ends.
Internal consistency checks
All 20 of 20 internal consistency checks pass. They confirm that the dataset follows its own rules. They do not replace independent expert review.
| Check | Result | What it verifies |
|---|---|---|
| Unique keys | Pass | Exactly one row per policy (or residual), sector and year. |
| Historical records only | Pass | Planned-measure scenarios and group summary records are never treated as historical policies; they are kept only as provenance. |
| Complete classification | Pass | Every row has all classification and source labels. |
| Valid ranges | Pass | All normalised values lie in [0, 1]; missing values occur only where documented by a flag. |
| No fabricated observations | Pass | No independent observed implementation series is available, so those fields are intentionally blank. |
| Frameworks kept separate | Pass | National framework rows are never placed in an instrument or programme bundle. |
| ETS scope | Pass | All three EU ETS sector slices are labelled with the ETS regime. |
| 90% materiality rule | Pass | Every sector with a positive reported total reaches the 90% threshold. Sectors with a zero total (LULUCF) are reported as not assessable, not as 100%. |
| Complete time series | Pass | Every policy–sector series has 24 annual rows. |
| No outcome data in construction | Pass | No emissions inventory or observed emissions enter the construction; reported savings are used only for selection. |
| Intensity formula | Pass | Intensity equals implementation × coverage × bindingness for every policy row. Residual rows use the mean of member intensities. |
| Zero before start | Pass | The main intensity index is zero before each policy starts; the unweighted equal-weight index is retained separately with a gated companion. |
| Strict residual means | Pass | Residual means use a fixed denominator and never silently drop missing members. |
| No imputation of OECD data | Pass | OECD values are used only for the same year; there is no back-casting or carrying forward. |
| All candidates documented | Pass | All 68 EEA policy identities and 47 positive OECD categories are documented with a decision. |
| Every eligible policy represented | Pass | Each eligible EEA policy appears either in a core family or in a residual bundle. |
| No double counting | Pass | Records consolidated into a family (Part L editions, appliance standards) do not appear again as separate rows. |
| Savings excluded from intensity | Pass | Reported savings never enter the intensity calculation. |
| Traceable identities | Pass | Every original EEA record is linked to its canonical policy. |
| Zero and negative estimates kept | Pass | Reported zero and negative estimates are retained as reported, without truncation. |
Key methodological decisions
Policy identities
Ireland's EEA submission has 104 records: 98 individual measures and 6 group records that only summarise other records, so the groups are set aside. The 98 individual EEA records are consolidated into 68 policy identities by merging scenario variants (existing and additional measures). All original identifiers remain linked to the canonical policies.
Time window
The analysis window is 2000–2023 (OECD scores are available for 1990–2023). Policies that started before 2000 keep their original start years. Planned measures are never activated and OECD scores are not extended beyond 2023.
OECD data
OECD stringency scores are used only for the year in which they are observed. Where no score is available, a clearly labelled assumed timing profile is used instead; the two sources are never mixed silently.
Reported savings
Reported emission savings determine which policies are selected but never enter the intensity index. No emissions inventory is used in the construction.
Zero and negative estimates
The first available numeric estimate is retained even if it is zero or negative. Such values are reported as they are, not treated as missing.
Group and planned records
Group summary records and planned measures are not treated as historical policies, and their effects are not divided among members.
Instrument matching
OECD indicators are matched only where they describe the same instrument or its family. For example, the Energy Efficiency Obligation Scheme on suppliers is kept separate from mandatory audits for large enterprises. Likewise, boiler rules are not matched to the whole building code.
Renewable electricity
Feed-in tariffs and auctions can coexist. The portfolio therefore uses the mean of both OECD indicators, and planning measures are not treated as funding.
Building regulations
Successive Part L editions are consolidated into two families, dwellings and other buildings, so that the same OECD score is not counted repeatedly.
National anchors
Some major instruments are missing from the EEA registry. To include them, the dataset adds six national framework records, the EU ETS in each sector and other verified regulations.
Timing parameters
Lag, ramp-up and half-life values are scenario assumptions, not estimates from the literature. After expiry, any lingering effect starts from the last operational level.
Coverage
Coverage is scored on an ordinal legal-scope scale. It is explicitly not a physical share of activity or emissions.
Equal-weight index
The unweighted mean of the three components is provided unchanged, together with a gated version that is zero before a policy starts.
Retrospective selection
Policies were selected using recent (2024–2030) assessments, which may bias the results, especially in causal analysis. Test such analyses with alternative selections.
Known overlaps
| Parent or context | Related | Relationship |
|---|---|---|
| CAPMF_ACT_2015 | CAPMF_CLIMATE_COUNCIL | Shared governance context |
| CAPMF_ACT_2021 | CAPMF_NET_ZERO | Same statutory framework |
| CAPMF_ACT_2021 | CAPMF_CARBON_BUDGETS | Enabling framework |
| CAPMF_CARBON_BUDGETS | CAPMF_SECTOR_CEILINGS | Framework parent |
| IRL_P0026 | IRL_P0057 | Electricity portfolio contains deployment |
| IRL_P0026 | IRL_P0085 | Electricity portfolio contains deployment |
| IRL_P0028 | IRL_P0004 | Renewable heat portfolio overlap |
| IRL_P0028 | IRL_P0015 | Renewable heat portfolio overlap |
| IRL_P0028 | IRL_P0035 | Renewable heat portfolio overlap |
| CAPMF_PARTL_RES | IRL_P0013 | Building code heating requirement overlap |
| IRL_P0006 | IRL_P0036 | Public sector programme and delivery project |
| IRL_P0032 | IRL_P0017 | EEA says EEOS estimates exclude grant supported savings |
Related rows must not be summed. Use either the parent or its components. No numerical overlap discount is applied.
Data dictionary
Definitions of all 67 variables in the downloadable dataset. Variables 1–36 are the main analysis variables. Variables 37–67 record sources, assumptions and how rows may be combined.
| # | Column | Unit | Definition |
|---|---|---|---|
| 1 | year | year | Calendar year; complete annual grid 2000–2023. |
| 2 | period_type | category | Always 'historical': a retrospective reconstruction, not information available to decision-makers at the time. |
| 3 | policy_id | identifier | Canonical identifier of the policy family (IRL_ for EEA-derived policies, CAPMF_ for OECD-anchored instruments, RES_ for residual bundles). |
| 4 | policy_name | text | Standardised policy or instrument-family name; residual rows are sector summaries. |
| 5 | layer | category | Hierarchical level: L1 framework, L2 instrument, L3 delivery programme, or residual. Layers must not be summed. |
| 6 | bundle | category | Sector and mechanism grouping; pricing bundles distinguish ETS and non-ETS (ESR) regimes. |
| 7 | sector | category | Affected sector (Electricity, Buildings, Industry, Transport, Agriculture, LULUCF, Waste, F-gases), or Cross-sectoral for national frameworks. |
| 8 | multi_sector_flag | 0/1 | 1 if the policy appears in more than one sector. Repeated rows do not imply that effects are allocated between sectors. |
| 9 | regime | category | Emissions regime affected: EU ETS, non-ETS (ESR), LULUCF, or mixed. ESR is a harmonised label for non-ETS scope across the whole period. |
| 10 | mechanism | category | Policy mechanism (see the instrument guide). Residual bundles are 'mixed'. |
| 11 | instrument_type | category | Instrument type as reported in the EEA database, with documented corrections where the label contradicts the policy design. |
| 12 | ghg_affected | gas labels | Greenhouse gases affected (CO₂, CH₄, N₂O, F-gases, or all). |
| 13 | source_datasets | category | Source lineage: EEA, CAPMF, or both. |
| 14 | eea_pam_ids | identifiers | Identifiers of historical EEA policy-and-measure records contributing to the row. |
| 15 | capmf_code | identifiers | Matched OECD CAPMF indicator code(s), preferring level 4; parent and child levels are never mixed within one score. |
| 16 | match_confidence | category | Judgement of the OECD match: exact (same instrument), close (instrument family), partial (contextual proxy) or none. |
| 17 | selection_rule | category | Reason for inclusion: 90% materiality rule, OECD anchor, or residual. |
| 18 | sector_effect_rank | rank | Rank of the reported saving within the primary selection sector (descending). |
| 19 | reported_effect_kt | kt CO2-eq/year | Reported annual saving (kt CO₂e) used for selection only. Repeated across years and sectors; must never be summed or treated as an observed effect. |
| 20 | effect_source | category | Assessment from which the reported saving is taken: ex-post (2024), ex-ante with existing measures (2025) or ex-ante (2030). |
| 21 | start_year | year | Selected start year. Where based on the first positive OECD score, this is distinguished from a verified legal date. |
| 22 | end_year | year | Reported end of the source phase (inclusive); blank if open or continuing. |
| 23 | status_in_year | category | Status in the year: not yet started, active, expired with lingering effect, or expired with no effect. |
| 24 | years_since_start | years | Year minus start year; negative before the start. |
| 25 | implementation_raw_value | raw source unit | Reserved for independently observed implementation data (rates, uptake, expenditure). Blank in this version: no such series is available. |
| 26 | implementation_raw_unit | text | Unit of the observed implementation value; blank in this version. |
| 27 | implementation_source | category | Source of the implementation level: OECD-derived or assumed (including structural zeros before the start). |
| 28 | implementation_level | 0-1 indicator | Implementation on a 0–1 scale: same-year OECD stringency ÷ 10 where matched; otherwise an assumed timing profile. After expiry, an assumed half-life decay may apply. |
| 29 | capmf_stringency | 0-10 | Same-year OECD CAPMF stringency (0–10); mean of distinct matched codes where several apply. Flags M and K are treated as missing; no values are imputed. |
| 30 | coverage_share | ordinal 0-1 score | Ordinal scope score (0.1, 0.25, 0.5, 1). Despite the name, it is not a measured share of activity or emissions. |
| 31 | coverage_rationale | text | Justification for the scope score. |
| 32 | bindingness | ordinal 0-1 score | Ordinal bindingness score: 1 mandatory rule or statutory framework, 0.75 price or statutory obligation, 0.5 financial incentive, 0.25 information or voluntary. |
| 33 | intensity_index | 0-1 composite | Policy intensity = implementation × coverage × bindingness (0–1). For residuals, the strict mean of member intensities. A relative indicator, not a causal effect. |
| 34 | intensity_index_equal | 0-1 composite | Unweighted mean of implementation, coverage and bindingness; positive even before a policy starts. |
| 35 | data_quality_flag | semicolon list | Semicolon-separated quality flags (source conflicts, proxy scope, ordinal judgements, assumed timing, consolidation, residual rules). |
| 36 | source_citation | text/URLs | Official sources supporting the row. |
| 37 | mechanism_class | category | Timing class used for assumed implementation profiles (for example stock of buildings, price flow, asset subsidy). |
| 38 | all_eea_variant_ids | identifiers | All EEA record variants linked to the policy, including planned-measure scenarios kept for provenance only. |
| 39 | legacy_policy_ids | identifiers | Identifiers of source policy identities consolidated into the canonical row. |
| 40 | analytical_unit_ids | identifiers | Identifiers of intermediate analytical units linked through the original EEA records. |
| 41 | capmf_match_scope | category | Scope of the OECD match: instrument family, category context or framework context. |
| 42 | materiality_group_flag | 0/1 | 1 if at least one source member passed the sector 90% materiality rule. |
| 43 | anchor_flag | 0/1 | 1 if retained under the OECD anchor rule. |
| 44 | effect_reference_year | year | Reference year of the reported saving (2024, 2025 or 2030). |
| 45 | effect_value_state | category | State of the reported saving: positive, negative, zero, missing, family sum or mixed. |
| 46 | effect_source_field | source header | EEA reporting field used for the reported saving. |
| 47 | materiality_sector | category | Primary sector to which a multi-sector saving is assigned once for ranking. |
| 48 | materiality_effect_kt | kt CO2-eq/year | Saving used for ranking in the primary sector only; not a measured sector allocation. |
| 49 | start_year_basis | text | Evidence and reasoning behind the start year. |
| 50 | legacy | category | Whether effects are reported to continue after expiry. |
| 51 | bindingness_rationale | text | Justification for the bindingness score. |
| 52 | source_row_numbers | record positions | Record positions in the source EEA extract, for traceability. |
| 53 | aggregation_role | category | How the row may be combined with others (framework context, family representative, portfolio, residual summary, stand-alone). |
| 54 | member_policy_ids | identifiers | Policy identities represented by the row; for residuals, the fixed member list. |
| 55 | implementation_detail | text | Detailed source of the implementation value (OECD-derived, timing fallback, structural zero, assumed decay, residual averaging). |
| 56 | capmf_observation_status | flags | OECD observation flags: A normal, E estimated, K included elsewhere, M not applicable. |
| 57 | temporal_weight | 0-1 scenario | Assumed timing profile (0–1) evaluated for every row, even where OECD data determine implementation. Not an empirical response curve. |
| 58 | lag_years | years | Assumed lag before implementation begins (years). |
| 59 | ramp_years | years | Assumed duration of the linear phase-in (years). |
| 60 | half_life_years | years | Assumed half-life of lingering effects after expiry (years), applied only where sources indicate continuing effects. |
| 61 | parameter_basis | text | Status of the timing parameters: scenario assumptions, not empirically estimated. |
| 62 | intensity_index_equal_gated | 0-1 composite | Equal-weight index set to zero before the start and after an explicit end of effect; a sensitivity check on the main index. |
| 63 | coverage_score_type | category | Confirms that coverage is an ordinal scope score, not a measured share. |
| 64 | effect_scope | text | Warning that reported savings repeat across years and sectors and must not be summed. |
| 65 | score_family_id | identifier | OECD code set (or policy ID if unmatched). Rows sharing a code set share contextual information. |
| 66 | eligible_member_count | count | For residuals, the fixed number of analytical members. |
| 67 | valid_intensity_member_count | count | Number of members with a non-missing intensity value. |
Sources
Official documents used to verify dates, scope and methodology. Web sources were accessed on 25 September 2026.