Energy Efficiency (EE) uses the Total Resource Cost (TRC) test to determine what EE resources to procure. TRC represents costs and benefits of EE projects to the Utility and Participant. Unfortunately, most Fuel-Substitution measures have very low TRC values under EE’s current Cost-Effectiveness framework which means Program Administrators struggle to implement them.
ED recognizes that the TRC currently does not include the participant Utility Bill Savings Benefits or the Costs of Infrastructure upgrades often involved in Fuel-Substitution projects.
If EE factored Participant Utility Bill Savings Benefits or the Costs of Infrastructure upgrades, how would this impact the TRC of Fuel-Sub projects?
To explore this question, Calculate Gas Benefits with Utility Bill Savings, and Total Costs with Infrastructure Costs of the Fuel-Sub Measures claimed in PG&E’s 2023 Plug Load and Appliance, and Upstream HVAC Programs in Single Family Homes.
#Selections
MeasAppType <- 'NR'
BldgType <- 'SFm'
SZ <- 'med'
ClimateZone <- 12
HeatPumpHVAC_res <- 'SWHC045'
HPWH_res <- 'SWWH025'
EU_HP_HVAC<-'DEER:HVAC_Eff_HP'
EU_HPWH<-'DEER:Res_ClothesDishWasher'
EUL_Claims_HeatPumpHVAC_res <- 15 #2024 Study recommends 23 years
EUL_Claims_HPWH_res <- 10 #2024 Study recommends 20 years
EUL_New_HeatPumpHVAC_res <- 23 #2024 Study recommends 23 years
EUL_New_HPWH_res <- 20 #2024 Study recommends 20 years
#Constants
PGE_WACC_A <- 0.0734 #Source:ACC, discount Rate
PGE_WACC_Q <- PGE_WACC_A/4
Divider_discount <- PGE_WACC_Q + 1
Asthma_CostRdxn_L <- 559
Asthma_CostRdxn_H <- 2473
The data inputs are shown below:
• Claims data was pulled from CEDARS in April 2024: https://cedars.sound-data.com/reports/download-record-level-report/claims/2023/
• Load Shapes profiles with Avoided Costs are from CEDARS: https://file.ac/l1-GqhWF8OU/
• Utility Bill Impacts were developed by Guidehouse
The data from the online sources were truncated and renamed to simplify this analysis; the names of these files are listed below.
#Read in Fuel Sub Claims 2023 Q1-Q4
FS23 <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\23_FS_Claims_PGE.xlsx") #Normal Replacement Only (No New Construction)
#Read in Load Shapes (accessible at https://file.ac/l1-GqhWF8OU/)
Gas_LS_QRT <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\G_LS_QRT.xlsx") #Quarterly LS
#Read in Bill Impacts Data
Utility_Bill_Ben_CARE <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\data_TH\\res_bill_impacts_PGE_Monthly_CARE.xlsx")
Utility_Bill_Ben_Market <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\data_TH\\res_bill_impacts_PGE_Monthly_Market.xlsx")
#Calculated Quarterly Avoided Costs (energy x LS) over EUL of the Claims
#Generate the Claim Year Quarters
EUL_Claims_HeatPumpHVAC_res <- list(Quarters$EUL_15)
EUL_Claims_HeatPumpHVAC_res<- as.data.frame(EUL_Claims_HeatPumpHVAC_res)
EUL_Claims_HPWH_res <- list(Quarters$EUL_10)
colnames(EUL_Claims_HeatPumpHVAC_res) <- c('CYQtr')
EUL_Claims_HPWH_res<- as.data.frame(EUL_Claims_HPWH_res)
colnames(EUL_Claims_HPWH_res) <- c('CYQtr')
EUL_New_HeatPumpHVAC_res <- list(Quarters$EUL_23)
EUL_New_HeatPumpHVAC_res<- as.data.frame(EUL_New_HeatPumpHVAC_res)
EUL_New_HPWH_res <- list(Quarters$EUL_20)
colnames(EUL_New_HeatPumpHVAC_res) <- c('CYQtr')
EUL_New_HPWH_res<- as.data.frame(EUL_New_HPWH_res)
colnames(EUL_New_HPWH_res) <- c('CYQtr')
#Total Therm Savings from Claims Data
Therm_TotalAnnual_HVAC <- c(sum(df_HeatPumpHVAC_res$`Therm_TotalAnnual`))
Therm_TotalAnnual_HPWH <- c(sum(df_HPWH_res$`Therm_TotalAnnual`))
#Generate the NPV of Commodity and T&D Avoided Costs
generate_qtrly_npv_1 <- function(load_shape,
considered_qtrs, discount_rate, Therms) {
filtered_load_shape <- filter(load_shape,
Qtr %in% considered_qtrs$CYQt) %>%
mutate(Qtr_step = 1:n()) %>%
mutate(Qtr_ID = Qtr_step-1) %>%
mutate(Total_Discounted = (Total/(discount_rate^Qtr_ID)))
result_1 <- c(sum(filtered_load_shape$'Total_Discounted'*Therms))
return (result_1)
}
GasComTD_HeatPumpHVAC_res <-
generate_qtrly_npv_1(Gas_LS_QRT,
EUL_Claims_HeatPumpHVAC_res, Divider_discount,
Therm_TotalAnnual_HVAC)
GasComTD_HPWH_res <-
generate_qtrly_npv_1(Gas_LS_QRT, EUL_Claims_HPWH_res,
Divider_discount, Therm_TotalAnnual_HPWH )
GasComTD_HeatPumpHVAC_res_new <-
generate_qtrly_npv_1(Gas_LS_QRT,
EUL_New_HeatPumpHVAC_res, Divider_discount,
Therm_TotalAnnual_HVAC)
GasComTD_HPWH_res_new <-
generate_qtrly_npv_1(Gas_LS_QRT, EUL_New_HPWH_res,
Divider_discount, Therm_TotalAnnual_HPWH )
#Gas GHG Adder
Gas_GHG_Adder <- 0.07 #$/tonne CO2 for 2023. The ACC inflates the $114 each year in the equivalent amount of the discount. So, when you discount the costs each yr, the values end up being constant.
Therm_gas_yrly_HVAC <-c(sum(df_HeatPumpHVAC_res$`Unit Therm First Baseline`))
Therm_gas_yrly_HPWH <- c(sum(df_HPWH_res$`Unit Therm First Baseline`))
Therm_HeatPumpHVAC_res <- (Therm_gas_yrly_HVAC* Gas_GHG_Adder)* EUL_HVAC_old
Therm_HPWH_res <- ( Therm_gas_yrly_HPWH* Gas_GHG_Adder)* EUL_HPWH_old
Therm_HeatPumpHVAC_res_new <-(Therm_gas_yrly_HVAC* Gas_GHG_Adder) * EUL_HVAC_new
Therm_HPWH_res_new <- ( Therm_gas_yrly_HPWH* Gas_GHG_Adder) * EUL_HPWH_new
#Calculate Total Gas Benefits
Calc_GasBen_HeatPumpHVAC_res <- GasComTD_HeatPumpHVAC_res
Calc_GasBen_HPWH_res <- GasComTD_HPWH_res
Calc_GasBen_HeatPumpHVAC_res_new <- GasComTD_HeatPumpHVAC_res_new
Calc_GasBen_HPWH_res_new <- GasComTD_HPWH_res_new
Calc_GasBen_wGasGHG_HVAC <- Calc_GasBen_HeatPumpHVAC_res_new + Therm_HeatPumpHVAC_res_new
Calc_GasBenwGasGHG_HPWH <- Calc_GasBen_HPWH_res_new + Therm_HPWH_res_new
percent_inc_GasGHG_HVAC <- (Calc_GasBen_wGasGHG_HVAC - Calc_GasBen_HeatPumpHVAC_res_new )/Calc_GasBen_HeatPumpHVAC_res_new
percent_inc_GasGHG_HPWH <- (Calc_GasBenwGasGHG_HPWH - Calc_GasBen_HPWH_res_new )/Calc_GasBen_HPWH_res_new
The Lifecycle FS NR Heat Pump HVAC Gas Benefits of the 2023 PGE claims are $1,682,950, and the total Lifecycle, Market-Rate Utility Bill savings for all mid-sized single family homes in these same claims are $891,217.
The Lifecycle FS NR HPWH Gas Benefits of the 2023 PGE claims are $407,492, and the total Lifecycle, Market-Rate Utility Bill savings for all mid-sized single family homes in these same claims are $672,260.
Measure | Gas Benefits | Bill Market Savings |
---|---|---|
HVAC Heat Pump | $1,682,950 | $891,217 |
Heat Pump Water Heater | $407,492 | $672,260 |
The data inputs are shown below:
• Claims data was pulled from CEDARS in April 2024: https://cedars.sound-data.com/reports/download-record-level-report/claims/2023/
• Load Shapes profiles with Avoided Costs are from CEDARS: https://file.ac/l1-GqhWF8OU/
• Infrastructure Costs were based on ED Study (LINK TO PDA)
The data from the online sources were truncated and renamed to simplify this analysis; the names of these files are listed below.
#Read in Fuel Sub Claims 2023 Q1-Q4
FS23 <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\23_FS_Claims_PGE.xlsx") #Normal Replacement Only (No New Construction)
#Read in Load Shapes (accessible at https://file.ac/l1-GqhWF8OU/)
kWh_LS_QRT <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\E_LS_QRT_22.xlsx") #Quarterly LS
#Read in Infrastructure Costs
Infra_Costs <- read_excel("C:\\Users\\mmh\\R Programming\\subtests\\FS_NewBens\\data_TH\\FS_InfraCosts.xlsx") #input as full cost to install Qtr. No Discounting Needed
kWh_TotalAnnual_HVAC <- c(sum(df_HeatPumpHVAC_res$`kWh_TotalAnnual`))
kWh_TotalAnnual_HPWH <- c(sum(df_HPWH_res$`kWh_TotalAnnual`))
#Generate the NPV of CO2 Avoided Costs
generate_qtrly_npv_e <- function(load_shape, climate_zone, end_use,
considered_qtrs, discount_rate,
kWh_TotalAnnual, AC) {
filtered_load_shape <- filter(load_shape, CZ == climate_zone, EU == end_use,
Qtr %in% considered_qtrs$CYQt) %>%
mutate(Qtr_step = 1:n()) %>%
mutate(Qtr_ID = Qtr_step-1) %>%
mutate(AC_type_discounted = (!!sym(AC)/(discount_rate^Qtr_ID)))
result3 <- c(sum(filtered_load_shape$AC_type_discounted*kWh_TotalAnnual))
return (result3)
}
#old EUL
AC_Sum_Gen_E_HeatPumpHVAC_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_Claims_HeatPumpHVAC_res, Divider_discount,
kWh_TotalAnnual_HVAC,'Gen')
AC_Sum_TD_E_HeatPumpHVAC_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_Claims_HeatPumpHVAC_res, Divider_discount,
kWh_TotalAnnual_HVAC,'TD')
AC_Sum_Co2_E_HeatPumpHVAC_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_Claims_HeatPumpHVAC_res, Divider_discount,
kWh_TotalAnnual_HVAC,'CO2')
AC_Sum_Gen_E_HPWH_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_Claims_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'Gen')
AC_Sum_TD_E_HPWH_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_Claims_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'TD')
AC_Sum_Co2_E_HPWH_res <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_Claims_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'CO2')
#new EUL
AC_Sum_Gen_E_HeatPumpHVAC_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_New_HeatPumpHVAC_res, Divider_discount,
kWh_TotalAnnual_HVAC,'Gen')
AC_Sum_TD_E_HeatPumpHVAC_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_New_HeatPumpHVAC_res , Divider_discount,
kWh_TotalAnnual_HVAC,'TD')
AC_Sum_Co2_E_HeatPumpHVAC_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HP_HVAC,
EUL_New_HeatPumpHVAC_res , Divider_discount,
kWh_TotalAnnual_HVAC,'CO2')
AC_Sum_Gen_E_HPWH_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_New_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'Gen')
AC_Sum_TD_E_HPWH_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_New_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'TD')
AC_Sum_Co2_E_HPWH_res_new <-
generate_qtrly_npv_e(kWh_LS_QRT, ClimateZone, EU_HPWH, EUL_New_HPWH_res,
Divider_discount, kWh_TotalAnnual_HPWH,'CO2')
#Calculate Total Electric Costs
Calc_ElecCost_HeatPumpHVAC_res <- (AC_Sum_Gen_E_HeatPumpHVAC_res + AC_Sum_TD_E_HeatPumpHVAC_res + AC_Sum_Co2_E_HeatPumpHVAC_res)*(-1)
Calc_ElecCost_HPWH_res <- (AC_Sum_Gen_E_HPWH_res + AC_Sum_TD_E_HPWH_res + AC_Sum_Co2_E_HPWH_res)*(-1)
Calc_ElecCost_HeatPumpHVAC_res_new <- (AC_Sum_Gen_E_HeatPumpHVAC_res_new + AC_Sum_TD_E_HeatPumpHVAC_res_new + AC_Sum_Co2_E_HeatPumpHVAC_res_new )*(-1)
Calc_ElecCost_HPWH_res_new <- (AC_Sum_Gen_E_HPWH_res_new + AC_Sum_TD_E_HPWH_res_new + AC_Sum_Co2_E_HPWH_res_new )*(-1)
#Add Infra Costs
Num_Measures <- FS23 %>% count(MeasureID)
Num_HPWH <- filter(Num_Measures, MeasureID == HPWH_res )
Num_HVAC <- filter(Num_Measures, MeasureID == HeatPumpHVAC_res )
InfraCosts <- filter(Infra_Costs, Sector == 'res')
HP_HVAC_InfraCosts <- InfraCosts$HP_HVAC*Num_HVAC$n
HPWH_InfraCosts <- InfraCosts$HPWH*Num_HPWH$n
HP_HVAC_InfC <- dollar(HP_HVAC_InfraCosts)
HPWH_InfC <- dollar(HPWH_InfraCosts)
TRC_Cost_HPHVAC <- dollar (c(sum(df_HeatPumpHVAC_res$'TRC Cost Gross')))
TRC_Cost_HPWH<- dollar(c(sum(df_HPWH_res$'TRC Cost Gross')))
The Lifecycle FS NR Heat Pump HVAC Total Costs for the 2023 PGE claims are $1,365,582, and the residential infrastructure costs are $641,175.
The Lifecycle FS NR HPWH Gas Benefits of the 2023 PGE claims are $641,200, and the and the residential infrastructure costs are $393,484.
Measure | TRC Costs | Infrastructure Costs |
---|---|---|
HVAC Heat Pump | $1,365,582 | $641,175 |
Heat Pump Water Heater | $641,200 | $393,484 |
#Calcualte increases to TRC Benefits
Claims_HP_HVAC <- filter(FS23, CZ == ClimateZone, MeasureID == HeatPumpHVAC_res, `Measure Application Type` == MeasAppType, `Building Type` == BldgType)
TRC_Claims_HP_HVAC <- mean(Claims_HP_HVAC$TRC)
Claims_HPWH <- filter(FS23, CZ == ClimateZone, MeasureID == HPWH_res, `Measure Application Type` == MeasAppType, `Building Type` == BldgType)
TRC_Claims_HPWH <- mean(Claims_HPWH$TRC)
TRC_New_HP_HVAC_EUL <- TRC_Claims_HP_HVAC * (1+((Calc_GasBen_HeatPumpHVAC_res_new-Calc_GasBen_HeatPumpHVAC_res)/Calc_GasBen_HeatPumpHVAC_res))
TRC_New_HPWH_EUL <- TRC_Claims_HPWH * (1+ ((Calc_GasBen_HPWH_res_new-Calc_GasBen_HPWH_res)/Calc_GasBen_HPWH_res))
#factor in elec costs increase to TRC
multiplier_elec_cost <- c(sum(df_HeatPumpHVAC_res$'Electric Supply Cost')) / c(sum(df_HeatPumpHVAC_res$'TRC Cost Gross'))
percent_inc_Costs_HPHVAC_EUL <-((Calc_ElecCost_HeatPumpHVAC_res_new-Calc_ElecCost_HeatPumpHVAC_res)/Calc_ElecCost_HeatPumpHVAC_res)* multiplier_elec_cost
TRC_EUL_Net_HPHVAC <-TRC_New_HP_HVAC_EUL - (TRC_New_HP_HVAC_EUL*percent_inc_Costs_HPHVAC_EUL)
multiplier_elec_cost_2 <- c(sum(df_HPWH_res$'Electric Supply Cost')) / c(sum(df_HPWH_res$'TRC Cost Gross'))
percent_inc_Costs_HPWH_EUL <- ((Calc_ElecCost_HPWH_res_new-Calc_ElecCost_HPWH_res)/Calc_ElecCost_HPWH_res)*multiplier_elec_cost_2
TRC_EUL_Net_HPWH<- TRC_New_HPWH_EUL - (TRC_New_HPWH_EUL*percent_inc_Costs_HPWH_EUL)
#Bill Impacts
Bill_EUL_HVAC <- Utility_Bill_HVAC_M_Total+Calc_GasBen_HeatPumpHVAC_res_new
Bill_EUL_HPWH <-Utility_Bill_HPWH_M_Total+ Calc_GasBen_HPWH_res_new
TRC_HP_HVAC_EUL_Bills <- TRC_EUL_Net_HPHVAC * (1+((Bill_EUL_HVAC-Calc_GasBen_HeatPumpHVAC_res_new)/Calc_GasBen_HeatPumpHVAC_res_new))
TRC_HPWH_EUL_Bills <- TRC_EUL_Net_HPWH * (1+ ((Bill_EUL_HPWH-Calc_GasBen_HPWH_res_new)/Calc_GasBen_HPWH_res_new))
Measure | TRC Claims | TRC, Increased from EUL Study | TRC, Increased from EUL Study & Bill Impacts | TRC, Increased from EUL Study & Bill Impacts, Decreased from Infra Cost | TRC, Increased from EUL Study, Gas GHG Adder from Methane, & Bill Impacts, Decreased from Infra Cost |
---|---|---|---|---|---|
HVAC Heat Pump, Residential | 0.77 | 0.92 | 1.26 | 0.88 | 0.90 |
Heat Pump Water Heater, Residential | 0.40 | 0.62 | 1.17 | 0.63 | 0.66 |