# Source data
 source("/Users/sarita/Economics Inc. Dropbox/R Codes/Napa Reports/Oc.projection.actual.performance.R")     

Executive Summary

This analysis uses historical waste tonnage data (CalRecycle statewide disposal reports, ochauler.com data, and Napa hauler records) to calibrate a predictive model for Orange County landfill tonnage through 2034. The City of Napa serves as a valuable case study because it has implemented strong financial incentives for waste diversion and has actively pursued organics diversion across both residential and commercial sectors since 2015. By leveraging Napa’s proven implementation patterns alongside statewide trends, the model projects realistic outcomes for Orange County, particularly in light of SB 1383 and SB 54, which will increase organics diversion and expand plastic reduction and recycling. Incorporating historical disposal patterns, conservative GDP growth estimates, and policy implementation assumptions, the model provides a grounded 10-year forecast to guide Orange County’s waste management planning.

In 2024, in county waste totaled 3,438,578 tons. Five year projections of landfill tonnage ranged from 3,286,602 to 3,969,183 tons. Ten year projections of tonnage ranged from 3,141,343 to 4,339,275 tons.

Data Overview and Parameters

Historical vs Projected Data

Historical Data Period: 2010 - 2024 (15 years). Historical data spans 15 years and when combined with GDP, provides the foundation for projecting trends through 2034. After removing outliers, historical Orange County tonnage data from 2012 onward was used for the analysis.

Projected Data Period: 2025 - 2034 (10 years). Economic projections utilize separate GDP projection variables to maintain data integrity between observed and forecasted values.

Geographic Coverage

It includes waste management and economic data for three geographic levels:

  • California statewide (population: 39,420,663 in 2024)

  • Orange County (population: 3,170,070 in 2024)

  • Incorporated City of Napa (population: 112,469 in 2024)

Key Data Categories

Waste Management Data (by region)

  • Landfill disposal (tons): California, Orange County, and Napa
  • Recycling (tons): Napa
  • Organics (tons): Napa

Economic Indicators

  • California Real GDP: Historical data | Projected data
  • US Real GDP: Historical data | Projected data
  • GDP per capita calculated for California and Orange County

Policy Implementation Variables

  • SB 1383 (organics diversion): Implementation beginning in 2022.
  • SB 54 (packaging reduction): Implementation beginning in 2027.
  • Napa implementation timeline: 20 years of policy implementation tracked

Derived Performance Metrics

  • Per capita waste generation calculated for all three geographic regions
  • Napa diversion rates: Overall (0.6% maximum) and organics-specific (0.5% maximum)

Model Creation Methodology Overview

The analytical model combines multiple data sources to create a comprehensive dataset spanning historical and projected periods, enabling assessment of waste management policies and their economic implications across California, Orange County, and Napa. The methodology integrates population demographics, waste tonnage data, economic indicators (GDP), and policy implementation timelines into a unified analytical framework.

Population Data Processing

Population data is collected from the Department of Finance (https://dof.ca.gov/forecasting/demographics/estimates/). A time-series approach was used for population predictions, specifically an Autoregressive Integrated Moving Average (ARIMA) model. The ARIMA methodology, developed by Box and Jenkins, is a statistical method for analyzing time-series data to understand patterns and predict future outcomes. The model captures autocorrelation (the relationship between an observation and its past values) and differencing (removing trends to make the series stationary) to produce a robust forecast.

Waste Tonnage Data Integration

Waste management data encompasses landfill tonnage for all three regions, and diversion categories for the City of Napa:

  • Landfill tonnage: Traditional waste disposal to landfills

  • Recycling tonnage: Materials processed through recycling programs

  • Organics tonnage: Organic waste diverted from landfills through composting and anaerobic digestion (Food Scraps and Green Waste/ Yard Waste)

The tonnage data is restructured to create region-specific variables, enabling comparative analysis of waste management performance across jurisdictions of different scales.

Orange County Tonnage

Initial review of data from Orange County landfills revealed a significant drop in tonnage after 2018, likely caused by the decrease in accepting out of county tonnage. The table outlines average annual tons accepted from each county before 2018 and since. The figures below show the inbound tonnage by year for all counties in the data set. The percentage change in landfill tonnage for Orange County between the two periods is 13.1%, while for all other counties combined it is -46.4%. The overall percent change in landfill tons in Orange County since 2012 is 30.4%. In the most recent 5 years, the percent change is 1.1%, and in the most recent 3 years it is -0.9%. To remove confounding effects of this change in policy, only landfill tons originating from Orange County were used in analysis to make historical projections. In the most recent years, This represents between 81 and 86% of all tonnage received at Orange County landfills.

print(plot2)

oc.by.county.pie

# Kable table
kable(avg_by_period, digits = 1, format = "markdown",
      col.names = c("County", "2014–2018 Avg Tons/Year", "2019–2024 Avg Tons/Year", "% Change"),
      format.args = list(big.mark = ","))
County 2014–2018 Avg Tons/Year 2019–2024 Avg Tons/Year % Change
Imperial 373.4 665.4 78.2
Los Angeles 1,638,635.3 859,456.8 -47.6
Not Applicable 976.0 NA NA
Orange County 3,003,484.5 3,395,870.5 13.1
Riverside 13,775.9 20,119.3 46.0
San Bernardino 112,159.7 41,806.9 -62.7
San Diego 7,482.0 27,864.1 272.4
Santa Barbara 29.4 7.0 -76.3
Ventura 123.1 16.6 -86.5

GDP Projection Methodology

The economic projections employ a conservative, multi-scenario approach:

  1. Historical Mean Growth: Long-term average growth rates (Average: 3.32%). For California GDP, the following year growth rates were removed: 2000 & 2009 (7.78 & -3.72).

  2. Recent Trend Analysis: Five-year recent growth patterns (Average: 2.57%)

  3. CBO-Based Projections: Official government forecasts (Average: 1.79%, actual year to year values were used)

California-specific projections adapt national CBO forecasts through historical state-to-national growth relationships while maintaining consistency across geographic scales (state, Orange County, Napa). The low mean of CBO projections relative to the recent and historical California specific growth patterns ensure this method offers a conservative growth approach.

Economic Performance Metrics

GDP per capita calculations provide standardized economic performance measures:

  • California GDP per capita uses direct division of state GDP by state population

  • Orange County GDP per capita applies a proportional allocation based on Orange County’s share of California’s population, assuming regional economic performance mirrors state averages

Waste Management Performance Indicators

Per capita waste generation rates are calculated for each geographic region by dividing landfill tonnage by population, providing comparable waste generation metrics that account for demographic differences.

Napa diversion rates serve as potential policy performance indicators*:

  • Overall diversion rate: Proportion of total waste diverted from landfills through recycling and organics programs since 2005

  • Organics-specific diversion rate: Proportion of organic waste successfully diverted from landfills, indirectly measuring SB 1383 policy effectiveness

*Not all recycling nor organic materials are collected through the franchised hauler and thus diversion may actually be higher than recorded.

SB 1383 - Organic Waste Diversion Requirements

Senate Bill 1383, effective January 1, 2022, mandates a statewide 75% reduction in organic waste disposal compared to 2014 levels by 2025. The model incorporates this policy through examining the reductions in organics as published in CalRecycle waste characterization studies, and the slope of Organics tonnage collection in Napa following initial program implementation to determine expected outcomes in Orange County.

SB 54 - Packaging and Product Stewardship

Senate Bill 54, effective January 1, 2025, requires significant reductions in single-use packaging and establishes extended producer responsibility for packaging waste. The model captures this policy through:

Waste reduction potential: Policy targets for packaging waste, estimated at 2.9 million tons statewide annually.

Economic implications: Producer responsibility requirements may influence waste generation patterns and recycling economics, measurable through changes in per-capita waste generation and recycling rates

Analytical framework: The model enables assessment of SB 54’s effectiveness in reducing overall waste generation and shifting waste composition toward more recyclable materials, particularly in comparison periods before and after 2027 implementation.

This methodology creates a robust analytical foundation for assessing the effectiveness of California’s waste management policies while accounting for demographic, economic, and temporal factors that influence policy outcomes.

Data-Driven Parameter Estimation

A correlation matrix between California GDP, Orange County population and Orange County landfill tons over time revealed strong relationships (|r| > 0.7) between GDP and landfill tonnage, landfill tonnage and population, and GDP and population.

Population and GDP Growth Projections

# Use actual historical data to project population and GDP growth
projection_data <- model_data %>% filter(data_type == "projected")

Population in Orange County experienced steep growth until 2018, a reduction in population until 2023, and population growth over the last two years.

Orange County’s population is expected to grow from about 3.18 million residents in 2025 to 3.22 million residents in 2034.

On the economic side, GDP per person is projected to reach roughly $8,403.79 by 2034, growing by $1,397.5 per person in the next 10 years. The integration of CBO projections with historic growth patterns ensures economic assumptions remain conservative while reflecting official government forecasts.

Together, these population and economic forecasts provide the foundation for estimating future waste generation, since more people and higher incomes typically lead to more overall waste.

Economic-Waste Relationship Calibration

To examine this theory, lanfill tons per capita were plotted against Orange County GDP per capita in the graph below.

# Calibrate the relationship between economic growth and waste generation
# using actual historical data


# California statewide relationship for validation
ca_economic_model <- lm(ca_waste_per_capita ~ ca_gdp_per_capita + I(year - 2012),
                        data = model_data %>% filter(!is.na(ca_waste_per_capita), data_type == "historical"))

# Display model results
# cat("Orange County Waste-Economic Model:\n")
# print(summary(oc_economic_model))
# cat("\nCalifornia Statewide Model (for validation):\n")
# print(summary(ca_economic_model))

# Extract key parameters
oc_gdp_elasticity <- coef(oc_economic_model)["oc_gdp_per_capita"]
oc_time_trend <- coef(oc_economic_model)["I(year - 2012)"]
ca_gdp_elasticity <- coef(ca_economic_model)["ca_gdp_per_capita"]

# cat("\nCalibrated Economic Parameters:\n")
# cat("OC GDP Elasticity:", round(oc_gdp_elasticity * 1000000, 4), "tons per capita per $1M GDP per capita\n")
# cat("OC Time Trend:", round(oc_time_trend, 6), "tons per capita per year\n")
# cat("CA GDP Elasticity (validation):", round(ca_gdp_elasticity * 1000000, 4), "\n")

# Calculate R-squared and model fit
oc_r_squared <- summary(oc_economic_model)$r.squared
ca_r_squared <- summary(ca_economic_model)$r.squared

#cat("Model Fit (R-squared):\n")
#cat("Orange County Model:", round(oc_r_squared, 3), "\n")
#cat("California Model:", round(ca_r_squared, 3), "\n")

# Now create your actual model visualization with clear annotations
p3 <- ggplot(model_data %>% filter(data_type == "historical"), 
             aes(x = oc_gdp_per_capita/1000, y = oc_waste_per_capita)) +
  geom_point(aes(color = year), size = 3, alpha = 0.8) +
  geom_smooth(method = "lm", se = TRUE, color = "darkred", linewidth = 1.2) +
  scale_color_viridis_c(name = "Year") +
  labs(title = "Orange County: Landfill Waste vs GDP Per Capita",
       subtitle = paste("R² =", round(oc_r_squared * 100, 1), 
                       "% | Coefficient =", round(oc_gdp_elasticity * 1000000, 1),
                       "tons per $1M GDP"),
       x = "GDP Per Capita ($1000s)",
       y = "Landfill Waste Per Capita (tons/year)",
       caption = "Note: Landfill waste only - excludes recycling, composting, and other diversion") +
           
  theme_minimal() +
  theme(plot.title = element_text(face = "bold", size = 14))

print(p3)

In Orange County, the analysis shows a strong relationship between economic growth and waste generation, with the GDP explaining 91.4% of the changes in per capita waste over time. For every $1 million increase in GDP per capita, the average waste per person in Orange County increases by 130 tons.

At the statewide level, California also shows the typical pattern, where higher GDP is associated with slightly higher per capita waste. The statewide model explains 85.1% of the variation, confirming that the economic approach is robust across geographic areas. For every $1 million increase in GDP per capita, the average waste per person in California as a whole increases by 11 tons.

Legislative Impact Calibration from Actual Data - SB 1383 and AB 1826

California

Waste characterizations across the state performed by CalRecycle saw the drop of organics found in waste sent to landfills from 37% in 2014 to 34% in 2018, with the most recent study finding 29% of landfill waste being comprised of organics in 2021. This represents an improved diversion rate for organics diversion of just over 1% per year.

######## review trends

# Analyze California's overall waste reduction trajectory
ca_trends <- model_data %>%
  filter(!is.na(ca_waste_per_capita), data_type == "historical") %>%
  arrange(year) %>%
  mutate(
    ca_annual_change_pct = (ca_waste_per_capita / lag(ca_waste_per_capita) - 1) * 100,
    period = case_when(
      year <= 2016 ~ "Pre-Legislative",
      year > 2016 & year <= 2021 ~ "Early Legislative",
      year > 2021 ~ "Active Implementation"
    )
  )
# Calculate average reduction rates by period
ca_period_analysis <- ca_trends %>%
  filter(!is.na(ca_annual_change_pct)) %>%
  group_by(period) %>%
  summarise(
    avg_annual_change = mean(ca_annual_change_pct, na.rm = TRUE),
    years = n(),
    .groups = 'drop'
  )

kable(ca_period_analysis, caption = "California Waste Reduction by Legislative Period", digits = 2)
California Waste Reduction by Legislative Period
period avg_annual_change years
Active Implementation 0.20 3
Early Legislative 2.37 5
Pre-Legislative 1.74 6
# Estimate realistic legislative impact parameters based on actual data
pre_legislative_trend <- ca_period_analysis$avg_annual_change[ca_period_analysis$period == "Pre-Legislative"]
legislative_trend <- ca_period_analysis$avg_annual_change[ca_period_analysis$period == "Active Implementation"]

early_trend <- ca_period_analysis$avg_annual_change[ca_period_analysis$period == "Early Legislative"]

if(length(legislative_trend) > 0 && length(pre_legislative_trend) > 0) {
  legislative_acceleration <- legislative_trend - pre_legislative_trend
  #cat("Actual Legislative Impact (California data):\n")
  #cat("Pre-legislative trend:", round(pre_legislative_trend, 2), "%/year\n")
  #cat("Legislative period trend:", round(legislative_trend, 2), "%/year\n")
  #cat("Legislative acceleration:", round(legislative_acceleration, 2), "%/year\n")
} else {
  legislative_acceleration <- -1.5  # Conservative estimate
  cat("Using estimated legislative impact due to insufficient data periods\n")
}

A policy impact analysis of California’s landfill waste per capita reveals distinct phases of AB 1826 (2016) and SB 1383 (2020) legislative effectiveness. The period between 2016 and 2020 were assumed to be the pre-legislative process and showed an average annual increase of 1.74% per year, while the active implementation period (2022 on) demonstrated a 0.2% annual increase. This represents a legislative acceleration effect of -1.54 percentage points per year. Despite improvements of waste management, California’s waste stream continued to increase over the time period.

Several models were applied to tonnage values in Orange County to monitor the effect of SB 1383 on landfill tonnage but no significant relationships were found.

Napa

Napa’s Organics and landfill tonnage was available starting in 2006. Using Napa’s organics diversion rate (organics/organics+landfill) a segmented regression was used to view the change in organics diversion over time. The City began focusing first on commercial diversion programs and later on residential pilots.

#source materials data from Napa

source("/Users/sarita/Economics Inc. Dropbox/R Codes/Napa Reports/Annual_Collection_Details_resi.mf.comm.R")

# Prepare Napa data (drop 2020/2021, keep #all other data)
napa_data <- napa_tonnage %>%
  filter(!(Year %in% c(2020, 2021)))%>%
  mutate(organics_diversion_rate = Organics_Tons / (Organics_Tons+Landfill_Tons) )

library(segmented)

# Fit a simple linear model
lm_fit <- lm(organics_diversion_rate ~ Year, data = napa_data)

# Find the breakpoint automatically

segmented_fit <- segmented(lm_fit, seg.Z = ~Year, psi = 2012)

plot(napa_data$Year, napa_data$organics_diversion_rate, xlab = "Year", ylab = "Napa Organics Diversion Rate",   main = "Segmented Regression of Organics Diversion Rate")
 plot(segmented_fit, add = TRUE, col = "red", lty = 2)

 #create tonnage w combo of historical and gdp
 
 model_data$oc_hist_gdp_proj<-(model_data$oc_historical_proj*.25)+(model_data$oc_gdp_proj*.75)
 
 
###use these values to update the values in the projected columns for sb 1383 impact
 
 initial_1383 <- ( coef(segmented_fit)[2])
 post_sb1383 <-( (coef(segmented_fit)[2] + coef(segmented_fit)[3]))
 
 # INTEGRATED FORECASTING MODEL WITH SB 1383 EFFECTS
# This approach ensures that growth projections build on the previous year's 
# actual tonnage (including legislative effects)

# Step 1: Create baseline models (same as your original approach)
oc_historical_model <- auto.arima(model_data$landfill_tons_orange_county)
oc_historical_forecast <- forecast(oc_historical_model, h = length(projection_years))

# Orange County waste vs economic factors (for GDP-based projections)
oc_economic_model <- lm(oc_waste_per_capita ~ oc_gdp_per_capita,
                        data = model_data %>% filter(!is.na(oc_waste_per_capita), data_type == "historical"))

# Step 2: Initialize the integrated projection
model_data <- model_data %>%
  arrange(year) %>%
  mutate(
    # Initialize columns
    oc_historical_proj = NA,
    oc_gdp_proj = NA,
    oc_baseline_proj = NA,  # Before any legislative effects
    sb1383_cumulative_factor = NA,
    oc_final_proj = NA,     # After SB 1383 effects
    sb1383_annual_reduction = NA
  )

# Step 3: Fill in historical data and first projection year
last_historical_year <- max(model_data$year[model_data$data_type == "historical"])
first_projection_year <- last_historical_year + 1

# Get baseline projections for all projection years
hist_projected <- data.frame(
  year = projection_years,
  oc_historical_proj = as.numeric(oc_historical_forecast$mean)
)

# Calculate GDP-based projections
projected_data <- model_data %>% filter(data_type == "projected")
projected_oc_waste_per_capita <- predict(oc_economic_model, newdata = projected_data)
gdp_projected <- data.frame(
  year = projected_data$year,
  oc_gdp_proj = projected_oc_waste_per_capita * projected_data$oc_population
)

# Step 4: Iterative projection that accounts for SB 1383 effects
for(i in 1:nrow(model_data)) {
  current_year <- model_data$year[i]
  
  if(model_data$data_type[i] == "historical") {
    # For historical data, use actual values
    model_data$oc_final_proj[i] <- model_data$landfill_tons_orange_county[i]
    model_data$sb1383_cumulative_factor[i] <- 1.0
    model_data$sb1383_annual_reduction[i] <- 0
    
  } else {
    # For projected years, use integrated approach
    
    # Get baseline projections (without legislative effects)
    hist_proj <- hist_projected$oc_historical_proj[hist_projected$year == current_year]
    gdp_proj <- gdp_projected$oc_gdp_proj[gdp_projected$year == current_year]
    
    # Combine baseline projections (your 25% historical, 75% GDP approach)
    baseline_proj <- (hist_proj * 0.1) + (gdp_proj * 0.9)
    model_data$oc_baseline_proj[i] <- baseline_proj
    
    # Calculate SB 1383 effects
    if(current_year < 2025) {
      # Before SB 1383 takes effect
      model_data$sb1383_cumulative_factor[i] <- 1.0
      model_data$oc_final_proj[i] <- baseline_proj
      model_data$sb1383_annual_reduction[i] <- 0
      
    } else {
      # SB 1383 is active - apply cumulative reductions
      years_since_start <- current_year - 2025 + 1
      
      # Calculate cumulative reduction factor
      annual_reduction_rate <- ifelse(current_year <= 2028, 0.01, post_sb1383)
      
      if(current_year <= 2028) {
        # Phase 1: Compound 1% annual reduction
        cumulative_factor <- (1 - 0.01)^years_since_start
      } else {
        # Phase 2: 1% for first 4 years, then lower rate
        years_phase1 <- 4  # 2025-2028
        years_phase2 <- years_since_start - 4
        cumulative_factor <- (1 - 0.01)^years_phase1 * (1 - post_sb1383)^years_phase2
      }
      
      model_data$sb1383_cumulative_factor[i] <- cumulative_factor
      
      # Apply SB 1383 reduction to the baseline projection
      tonnage_after_sb1383 <- baseline_proj * cumulative_factor
      model_data$oc_final_proj[i] <- tonnage_after_sb1383
      
      # Calculate annual reduction amount
      if(i > 1 && model_data$year[i-1] >= 2024) {
        # Base the reduction on previous year's actual tonnage
        prev_year_tonnage <- model_data$oc_final_proj[i-1]
        annual_reduction <- prev_year_tonnage * annual_reduction_rate
        model_data$sb1383_annual_reduction[i] <- annual_reduction
      } else {
        model_data$sb1383_annual_reduction[i] <- baseline_proj * (1 - cumulative_factor)
      }
    }
  }
  
  # Store individual projections for analysis
  model_data$oc_historical_proj[i] <- ifelse(model_data$data_type[i] == "projected", 
                                           hist_projected$oc_historical_proj[hist_projected$year == current_year], 
                                           NA)
  model_data$oc_gdp_proj[i] <- ifelse(model_data$data_type[i] == "projected",
                                    gdp_projected$oc_gdp_proj[gdp_projected$year == current_year],
                                    NA)
}

# Step 5: Create compatibility variables for existing code
model_data <- model_data %>%
  mutate(
    # For compatibility with existing Monte Carlo code
    oc_hist_gdp_proj = oc_baseline_proj,  # Baseline before legislative effects
    sb1383_tons = oc_baseline_proj - oc_final_proj,  # Total reduction amount
    
    # Additional useful variables
    sb1383_reduction_pct = ifelse(oc_baseline_proj > 0, (sb1383_tons / oc_baseline_proj) * 100, 0)
  )

# # Step 6: Diagnostic output
# cat("Integrated Forecasting Model Results:\n")
# cat("=====================================\n\n")
# 
# diagnostic_table <- model_data %>%
#   filter(data_type == "projected") %>%
#   dplyr::select(year, oc_historical_proj, oc_gdp_proj, oc_baseline_proj, 
#          sb1383_tons, oc_final_proj, sb1383_reduction_pct) %>%
#   mutate(across(where(is.numeric), ~round(.x, 0)))
# 
# print(diagnostic_table)

# # Step 7: Validation checks
# cat("\nValidation Checks:\n")
# cat("- SB 1383 starts in 2025:", any(model_data$sb1383_tons[model_data$year >= 2025] > 0), "\n")
# cat("- Reductions increase over time:", all(diff(model_data$sb1383_reduction_pct[model_data$year >= 2025 & model_data$year <= 2030]) >= 0), "\n")
# cat("- Final tonnage decreases from baseline:", all(model_data$oc_final_proj[model_data$data_type == "projected"] <= model_data$oc_baseline_proj[model_data$data_type == "projected"], na.rm = TRUE), "\n")

Based on the segmented regression, the organics diversion rate in Napa County increased by approximately 1.34 percentage points per year before 2012. This roughly follows the same pattern as seen in California as a whole. After this, the growth slowed significantly to approximately 0.2 percentage points per year.

The model uses the percentage values based on the reduction of organics found in landfill waste characterization from CalRecycle to project the next two years of continuing SB 1383 implementation, and the rate of increased organics percentage following the initial implementation of Napa programs to calculate the continued expected reduction of organics in landfill waste. The graph below shows how the increase in organics diversion is expected for the next 10 years.

# Step 8: Visualization
library(ggplot2)
library(tidyr)

plot_data <- model_data %>%
  filter(data_type == "projected") %>%
  dplyr::select(year, oc_historical_proj, oc_gdp_proj, oc_baseline_proj, oc_final_proj) %>%
  pivot_longer(cols = -year, names_to = "projection_type", values_to = "tonnage") %>%
  mutate(
    projection_type = recode(projection_type,
                           "oc_historical_proj" = "Historical Trend",
                           "oc_gdp_proj" = "GDP-based",
                           "oc_baseline_proj" = "Combined Baseline",
                           "oc_final_proj" = "Final (with SB 1383)")
  )

ggplot(plot_data, aes(x = year, y = tonnage, color = projection_type)) +
  geom_line(size = 1.2) +
  scale_y_continuous(labels = scales::comma) +
  labs(
    title = "Integrated Forecasting Model: Multiple Projection Methods",
    subtitle = "Shows baseline projections vs. final projections with SB 1383 effects",
    x = "Year",
    y = "Tonnage",
    color = "Projection Type"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")

# Additional plot: SB 1383 impact over time
sb1383_plot_data <- model_data %>%
  filter(data_type == "projected", year >= 2025) %>%
  dplyr::select(year, sb1383_reduction_pct, sb1383_annual_reduction)

ggplot(sb1383_plot_data, aes(x = year)) +
  geom_col(aes(y = sb1383_annual_reduction), fill = "#1b9e77", alpha = 0.7) +
  geom_line(aes(y = sb1383_reduction_pct * 10000), color = "darkgreen", size = 1.2) +
  scale_y_continuous(
    name = "Annual Reduction (tons)",
    labels = scales::comma,
    sec.axis = sec_axis(~./10000, name = "Cumulative Reduction (%)")
  ) +
  labs(
    title = "SB 1383 Impact Over Time",
    subtitle = "Green bars: Annual reduction amount, Dark line: Cumulative reduction percentage",
    x = "Year"
  ) +
  theme_minimal()

Legislative Impact Calibration from Actual Data - SB 54

California Based data

Baseline data gathered by CalRecycle estimated approximately 2.9 million tons of SB 54 products (single use packaging and foodware) were produced and sold in the state of California annually.

Based on statewide population estimates for 2024, this represents 0.07 tons per person annually. If this tonnage were reduced by 25% in 2032 as mandated, this would bring the new per capita weight of packaging materials to 0.06.

A per capita reduction in tons from baseline of all estimated 54 products was calculated for the state and then applied to the projections of SB 54 impact in Orange County based on the projected population.

knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, fig.align = 'center')
# Generate predictions using calibrated parameters

# # Analyze current plastic recycling streams affected by SB 54
 plastic_baseline <- waste_data %>%
   filter(waste_stream == "recycling_materials") %>%
   filter(material_type %in% c("film_plastic", "pet_1_bottles", "hdpe_2_bottles_natural", "hdpe_2_bottles_white", "hdpe_2_bottles_colored")) %>%
   group_by(year, material_type) %>%
   summarise(total_tons = sum(annual_tons, na.rm = TRUE), .groups = "drop")

 plastic_baseline <- plastic_baseline %>%
  left_join(model_data %>% dplyr::select(year, napa_population), by = "year")

 recent_years <- tail(sort(unique(plastic_baseline$year)), 3)
 
 film_per_capita <- plastic_baseline %>%
   filter(material_type == "film_plastic", year %in% recent_years) %>%
   mutate(per_capita = total_tons / napa_population) %>%
   summarise(avg_per_capita_film = mean(per_capita, na.rm = TRUE)) %>%
   pull(avg_per_capita_film)

 bottle_types <- c("pet_1_bottles", "hdpe_2_bottles_natural", "hdpe_2_bottles_white", "hdpe_2_bottles_colored")

 bottle_per_capita <- plastic_baseline %>%
   filter(material_type %in% bottle_types, year %in% recent_years) %>%
   group_by(year) %>%
   summarise(total_bottles_tons = sum(total_tons, na.rm = TRUE)) %>%
   left_join(model_data %>% dplyr::select(year, napa_population), by = "year") %>%
   mutate(per_capita = total_bottles_tons / napa_population) %>%
   summarise(avg_per_capita_bottles = mean(per_capita, na.rm = TRUE)) %>%
   pull(avg_per_capita_bottles)
 
 other_70 <- (0.70 / 0.30) * bottle_per_capita

 bottle.tons.reduction<-model_data %>%
  filter(year == 2032) %>%
  mutate( bottle_per_capita,
         result = bottle_per_capita * oc_population) %>%
  pull(result)

# instead of film per capita use the estimate from calrecycle household lbs per year
 model_data <- model_data %>%
   mutate(
     # Film plastics reduction: 10% in 2027 → 25% by 2032
    sb54_film_fraction = case_when(
       year < 2027 ~ 0,
       year <= 2032 ~ 0.10 + (year - 2027) * (0.25 - 0.10) / (2032 - 2027),
       TRUE ~ 0.25
     ),     sb54_film_tons = - sb54_film_fraction * (68.2/2.95/2000) * oc_population,

     # Bottle plastics reduction: 30% in 2027 → 60% by 2032
     sb54_bottle_fraction = case_when(
       year < 2027 ~ 0,
       year <= 2032 ~ 0.30 + (year - 2027) * (0.60 - 0.30) / (2032 - 2027),
       TRUE ~ 0.60
     ),
     sb54_bottle_tons = - sb54_bottle_fraction * bottle_per_capita * oc_population,
#
     # Total SB 54 impact
     sb54_total_tons = sb54_film_tons + sb54_bottle_tons,

#54 impact if california estimates are correct
 sb54_ca_estimate = case_when(
        year >= 2032 ~ (-2900000 * 0.25)/ca_population*oc_population,
      year >= 2027 ~ (-2900000 * 0.1)/ca_population*oc_population,
      TRUE ~ 0
     )
   )


 model_data <- model_data %>%
  mutate(
     total_predicted_landfill = oc_final_proj + sb54_ca_estimate   )

####update historical and projection_data
 historical_data <- model_data %>% filter(data_type == "historical")
 
 
 projection_data <- model_data %>% filter(data_type == "projected")%>%
 mutate(oc_waste_per_capita = total_predicted_landfill/oc_population)

# 1. RMSE from model
model_rmse <- sqrt(mean(residuals(oc_economic_model)^2, na.rm = TRUE))

# 2. Add confidence bounds
projection_data <- projection_data %>%
  mutate(
    # First, calculate the standard error of the prediction.
    # The '1.96' corresponds to a 95% confidence interval for a normal distribution.
    # The margin of error is derived from the model's RMSE.
    # The total uncertainty is the per-capita uncertainty scaled by population.
    # Note: this is a simplified example; a real forecast interval would be more complex.
    margin_of_error = 1.96 * model_rmse * oc_population,

    # Now, calculate the upper and lower bounds by adding/subtracting the margin of error
    # from the total predicted landfill tonnage.
    lower_bound = total_predicted_landfill - margin_of_error,
    upper_bound = total_predicted_landfill + margin_of_error
  )

# 3. Baseline from historical data
current_baseline <- tail(historical_data$landfill_tons_orange_county, 1)

# 4. Add percent change from baseline
projection_data <- projection_data %>%
  mutate(
    percent_change_from_baseline = (total_predicted_landfill - current_baseline) / current_baseline * 100
  )

Napa Based data on collected materials (for recycling) that fall under SB 54 products

Tonnage reports from the City of Napa have tracked the quantity of recyclable materials including single use packaging items like plastic film and bottles.

Data was reviewed as described below for patterns and estimates of reduction in tonnage but ultimately not used. For reference, the estimated tonnage reduced as a result of the information available from material specific tonnage studies only captured a portion of the likely effects estimated a reduction in tonnage of 12,767 vs. 57,817.75.

Calibrated Prediction Model

The model combines predictions based on internal time series, external economic drivers, and legislation implementation.

To estimate landfill tonnage values for Orange County 2025-2034, the model combines:

  • Historical trends in landfill tonnage,

  • Population projections,

  • GDP projections,

  • The impact of organics diversion implementation in the City of Napa since, 2006

  • The impact of SB 1383 in California statewide, and

  • Predicted SB 54 legislation impacts based on statewide data.

The baseline tonnage projections were calculated using a weighted combination of historical trends (25%) and projected GDP growth (75%).

The combined tonnage projections incorporate the expected policy impacts based on statewide diversion trends (SB 1383) and estimates of packaging waste in the landfill stream (SB 54).

Results: Data-Driven Projections

The calibrated model projects Orange County’s baseline waste generation (without legislative intervention) at 3,701,040 tons in 2025, growing to 4,339,275 tons by 2034 driven by population and economic growth. With policy intervention these values are reduced to 4,061,871 tons by 2034

Monte Carlo Simulation

A Monte Carlo simulation, a computational method that uses repeated random sampling to model the probability of different outcomes, was created to model the various possible landfill tonnage outcomes by simulating random variations in the factors that are outlined above (population, historical landfill tonnage patterns, GDP based projections, and the effects of varying levels of compliance for SB 1383 and SB 54.

Methodology Notes

This analysis employs Monte Carlo simulation with 10,000 iterations to capture uncertainty in key variables including population growth, economic conditions, and regulatory compliance rates. Legislative reduction targets are modeled with realistic ramp-up periods and incorporate both optimistic and pessimistic compliance scenarios.

Compliance Rate Uncertainties

The Monte Carlo simulation incorporates triangular probability distributions for compliance rates, reflecting real-world implementation uncertainties:

  • SB 1383: Compliance rates modeled between 75-90%, with 85% most likely
  • SB 54: Compliance rates modeled between 65-85%, with 75% most likely

Economic and Demographic Factors

The analysis incorporates projected changes in:

  • Population Growth: Orange County population projected to reach 3,223,640 by 2034
  • Economic Development: GDP per capita projections influence waste generation patterns
  • Baseline Waste Trends: Historical waste generation trends continue to influence future projections

Confidence Intervals: Results presented represent median projections with 90% confidence intervals accounting for modeling uncertainty.

Monte Carlo Simulation Results Summary
Year Mean Median Std Dev 5th %ile 25th %ile 75th %ile 95th %ile
2025 3,609,343 3,609,257 66,544 3,501,558 3,564,221 3,654,541 3,717,922
2026 3,673,872 3,675,550 85,942 3,528,228 3,616,906 3,731,969 3,812,400
2027 3,723,995 3,724,540 102,035 3,555,037 3,655,626 3,791,750 3,893,020
2028 3,791,314 3,791,004 116,516 3,599,903 3,712,223 3,868,864 3,984,218
2029 3,884,909 3,884,527 131,587 3,669,518 3,795,310 3,974,049 4,101,411
2030 3,951,992 3,951,472 148,007 3,709,496 3,853,269 4,049,297 4,196,234
2031 4,022,733 4,021,122 161,768 3,760,933 3,914,432 4,132,414 4,289,721
2032 4,066,408 4,066,867 176,116 3,779,014 3,947,735 4,186,600 4,359,039
2033 4,139,671 4,140,217 190,276 3,830,908 4,010,150 4,270,740 4,455,349
2034 4,208,430 4,206,921 205,639 3,873,452 4,067,786 4,347,278 4,548,982
Note:
All values in tons. Based on 10,000 Monte Carlo simulations.

Average forecast uncertainty spans 455,025 tons (11.6% of median forecast), indicating the typical range of possible outcomes due to uncertainties in population growth, economic conditions, and policy effectiveness.

Combined Scenarios for Tonnage Projections

The graph and table below show the projection based on GDP and historical tonnage (baseline), the projection with policy effects (combined), the median result of a Monte Carlo simulation, projections based on the laste three (Recent Trends (3 yrs)) and five years (Recent Trends (5 yrs)), effects of a potential recession (Recession), actual historical tonnage, and predictions modeled by OCWR. Because waste trends closely track California’s GDP, the we also include a projection that accounts for a potential economic downturn in 2027. To develop this scenario, the impacts of the 2008 recession on statewide landfill tonnage were analyzed. During that period, GDP and landfill tonnage became decoupled: while GDP recovered relatively quickly, landfill tonnage remained depressed for roughly six years. For the current projection, the deviation from historical disposal patterns observed since 2003 was reduced by half to represent a recession less severe than 2008. This adjustment was then applied to the combined model’s tonnage values to produce the recession scenario.

Scenario 2029 2034
OCWR 2,499,118 2,071,501
Recent Trend (3 yrs) 3,286,602 3,141,343
Recession 3,327,130 3,663,611
Recent Trend (5 yrs) 3,613,980 3,798,329
Combined 3,782,119 4,061,871
Monte Carlo 3,884,909 4,208,430
Baseline 3,969,183 4,339,275

Summary for Tipping Fee Negotiations

Conclusions and Recommendations for Tipping Fee Negotiations

Our comprehensive analysis of Orange County’s waste generation forecasts provides critical insights for upcoming landfill capacity and tipping fee negotiations. Based on integrated time series modeling, policy impact analysis, and Monte Carlo uncertainty quantification, we project significant changes in waste disposal patterns through 2034 that will directly impact county disposal costs and capacity requirements.

Key Findings

Baseline Waste Projections

Orange County’s waste generation is projected to reach 4,061,871 tons annually by 2034, representing a 18.1% change from current levels of 3,438,578 tons. Over the 10-year projection period, cumulative waste disposal will total approximately 38,293,386 tons, with an average annual disposal of 3,829,339 tons.

Legislative Impact and Compliance

California’s waste reduction mandates will significantly affect disposal volumes:

  • SB 1383 Compliance: Orange County is projected to achieve 75% compliance with organic waste reduction targets by 2030, resulting in substantial reductions in landfill-bound organics.

  • SB 54 Implementation: Packaging waste reduction requirements beginning in 2027 will contribute additional disposal reductions, with 59% projected compliance by 2034.

  • Combined Policy Impact: Legislative mandates will reduce total waste disposal by approximately 1,816,101 tons over the 10-year period (4.5% reduction from baseline projections), representing significant cost savings and reduced landfill capacity requirements.

Forecast Uncertainty and Planning Implications

Monte Carlo simulation analysis reveals forecast uncertainty of approximately ±11.6% around median projections, requiring capacity planning buffers of ±227,512 tons annually to accommodate 90% of likely scenarios. This uncertainty stems from variability in economic growth, population dynamics, and policy implementation effectiveness.

Financial Implications

Based on current tipping fee structures, the projected waste volumes translate to significant financial commitments:

  • Annual Disposal Costs: Approximately $167.6M per year in tipping fees at current rates
  • 10-Year Total Cost: $1,676M in cumulative disposal costs
  • Policy-Driven Savings: Legislative compliance will avoid approximately $79.5M in disposal costs over the projection period

Negotiation Recommendations

1. Volume-Based Pricing Structure

Given the projected 4.5% increase in waste volumes due to the combination of tightly linked relationship of GDP and waste generation, as well as the reduction caused by legislative mandates, Orange County should negotiate volume-based pricing that reflects actual disposal quantities rather than fixed capacity commitments. The increasing volume trajectory based on these projections along with the decreasing volume trajectory projected by OCWR supports arguments for flexible pricing structures that align costs with actual service needs.

2. Legislative Compliance Recognition

The county’s proactive compliance with SB 1383 and SB 54 requirements demonstrates environmental stewardship that reduces long-term landfill capacity needs. This compliance effort, resulting in 1,816,101 tons of avoided disposal, should be recognized in tipping fee structures through:

  • Environmental compliance credits for waste reduction achievements
  • Performance-based pricing that rewards exceeding legislative reduction targets
  • Long-term rate stability that reflects the county’s commitment to waste minimization

3. Uncertainty Management

The ±11.6% forecast uncertainty requires contract flexibility to accommodate volume variations. Recommended contract provisions include:

  • Flexible capacity reservations with 227,512 ton annual adjustment corridors
  • Volume variance clauses that account for economic and policy-driven fluctuations
  • Regular rate review mechanisms tied to actual volume performance and forecast updates

4. Multi-Year Rate Stability

The 10-year projection period supports multi-year rate agreements that provide:

  • Predictable cost escalation tied to inflation and operational cost indices
  • Volume threshold adjustments based on demonstrated policy compliance achievements
  • Shared risk mechanisms that account for both county waste reduction efforts and facility operational requirements

Strategic Advantages

  1. Data-Driven Projections: Comprehensive statistical analysis provides defensible volume forecasts based on economic, demographic, and policy factors.

  2. Legislative Compliance: Proactive implementation of state mandates demonstrates commitment to waste reduction and environmental stewardship.

  3. Uncertainty Quantification: Monte Carlo analysis provides realistic planning scenarios that support flexible contract structures.

  4. Long-term Perspective: 10-year projections enable strategic capacity planning that benefits both the county and waste management providers.

Conclusion

The analytical framework presented supports negotiating for sustainable, performance-based tipping fee structures that reflect the evolving waste management landscape. With projected disposal volumes of 3,829,339 tons annually and cumulative policy savings of $79.5M over 10 years, the county is well-positioned to secure favorable terms that align costs with actual service needs while supporting continued environmental compliance efforts.

The combination of robust forecasting methodology, quantified uncertainty assessment, and clear demonstration of legislative compliance provides a strong foundation for productive negotiations that serve both fiscal responsibility and environmental stewardship objectives.


This analysis uses your actual data to calibrate realistic projections. The model parameters are derived from observed performance rather than theoretical expectations, providing a more defensible basis for tipping fee negotiations.