Renamed files created inputs to REMI table

This commit is contained in:
Alex Gebben Work 2026-03-11 17:34:58 -06:00
parent c835e3accf
commit 5f17aa5acf
3 changed files with 129 additions and 79 deletions

View File

@ -1,4 +0,0 @@
AVG_VALUE <- (0.15 +0.20)/2
YEARLY_CAPACITY <- c(256,750,1000,1500)
NUM_OPERATING_STAFF <- round(AVG_VALUE*YEARLY_CAPACITY)
NUM_OPERATING_STAFF

129
REMI_Inputs.r Normal file
View File

@ -0,0 +1,129 @@
library(tidyverse)
library(fixest)
##########################Direct cost estimates
TOTAL_COMPUTER_CAPITAL_INVEST <- 1156875000/10^6 #Total "Computer" capital cost in terms of millions of dollars
#Split of spending at data centers https://jlarc.virginia.gov/pdfs/reports/Rpt598.pdf
BUILDING <- 0.196
COMPUTERS <- 0.682
OTHER <- 0.061
LAND <- 0.061
TOTAL <- (BUILDING+COMPUTERS+OTHER)
#Adjust assuming that land is not included in the total capital costs
BUILDING <- BUILDING/TOTAL
COMPUTERS <- COMPUTERS/TOTAL
OTHER <- OTHER/TOTAL
#Cost in each category
BUILDING <- BUILDING*TOTAL_COMPUTER_CAPITAL_INVEST
COMPUTERS <- COMPUTERS*TOTAL_COMPUTER_CAPITAL_INVEST
OTHER <- OTHER*TOTAL_COMPUTER_CAPITAL_INVEST
SCHEDULE <- c(250,500,250,500)#Data Center capacity schedule
#Assume half of all capital is spent a year before opening
CAPITAL_SCHEDULE_EST <- c(250,500,250,500,0)/2 + c(0,250,500,250,500)/2
CAPITAL_SCHEDULE_EST<- CAPITAL_SCHEDULE_EST/sum(SCHEDULE)
BUILDING <- BUILDING*CAPITAL_SCHEDULE_EST #Output of construction industry
COMPUTERS <- COMPUTERS*CAPITAL_SCHEDULE_EST #Purchases of Computers
OTHER <- OTHER*CAPITAL_SCHEDULE_EST #Other purchases
DOLLAR_VALUES <- cbind(2029:2033,BUILDING,COMPUTERS,OTHER) %>% as_tibble
colnames(DOLLAR_VALUES )[1] <- "Year"
#Include Batteries
BESS_COST <- 719027250/10^6
BESS_SCHEDULE <- c(0,250,500,250,500)
BESS_SCHEDULE <- BESS_SCHEDULE / sum(BESS_SCHEDULE )
BESS <- BESS_SCHEDULE*BESS_COST
DOLLAR_VALUES$BESS <- BESS
DOLLAR_VALUES
#Include gas generator costs
#Reciprocation Engine costs (No construction assumed)
CCG_COST <- 6165257143/10^6
RECIP_COST <- 50000000/10^6
RECIP_SCHEDULE <- c(0,640,640,0,0)
RECIP_SCHEDULE <- RECIP_SCHEDULE/sum(RECIP_SCHEDULE)
RECIP <- RECIP_COST*RECIP_SCHEDULE
#Combined cycle costs
CCG_SCHEDULE <- c(0,0,0,0,2400)
DOLLARS_PER_KW <- 782 #See https://www.eia.gov/electricity/generatorcosts/index.php for the 7820 number converted from cents per kw
DOLLARS_PER_MW <- DOLLARS_PER_KW*1000
MILL_DOLLARS_PER_MW <- DOLLARS_PER_MW/10^6
CCG_CONSTRUCTION_COSTS <- CCG_SCHEDULE*MILL_DOLLARS_PER_MW
CCG_CAPITAL_COST <- CCG_COST-CCG_CONSTRUCTION_COSTS[5] #Remove the construction cost to estimate final capital costs
CCG <- CCG_CAPITAL_COST *(CCG_SCHEDULE/sum(CCG_SCHEDULE))
TURBINE <- CCG +RECIP
DOLLAR_VALUES$TURBINE <- TURBINE
#######################Employment estimates
NAMES <- c("Trumbull Energy Center","Orange County Advanced Power Station","Shady Hills Combined Cycle Facility","Cumberland (TN)","Kingston","Lincoln Land Energy Center","Delta Blues Advanced Power Station","Homer","Vicksburg","Cheyenne Prairie","Legend and Lone Star","Wolf Summit Energy","Franklin Farms","Viola Generating Station","CPV Basin Ranch Energy Center","Smarr Combined Cycle Energy Facility","Waterford 5 & 6","Lake Charles","Jefferson Power Station")
CAP <- c(308.7*2+360,
453*2+400,
612,
454.8+323,
323,
638.4*2,
477+341.7,
4678,
819.4,
132,
754+453,
600,
1560,
705,
1490,
1425,
1640,
994,
754
)
DETAILED_REPORT <- c(1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0)
EMP <- c(25,27,12.5,30,NA,34,21,250,21,12,73,30,44,30,45,30,30,30,22)
PEAK_CONST <- c(920,NA,600,NA,300,500,300,2500,560,400,NA,400,(1500+1800)/2,500,1000,1200,700,1100,NA)
DATE <- c(2017,2018,2018,2022,2015,2020,2024,2025,2025,2012,2024,2025,2024,2024,2026,2026,2025,2020,2025)
DATA <- cbind(CAP,EMP,PEAK_CONST,DETAILED_REPORT,DATE) %>% as.matrix %>% as_tibble
DATA$NAMES <- NAMES
colnames(DATA ) <- c("Capacity","Emp","Peak_Const","Report_Quality","Report_Year","Plant")
REG_DATA <-DATA %>% select(Emp,Capacity,Report_Quality,Report_Year)
REG_DATA_TRIMMED <-DATA %>% filter(Plant!='Homer') %>% select(Emp,Capacity,Report_Quality,Report_Year)
MOD1 <- feols(log(Emp)~Capacity+Report_Quality+Report_Year,REG_DATA,vcov='hetero')
feols(log(Emp)~Capacity+Report_Quality+Report_Year,REG_DATA,vcov='hetero')
PRED_DATA <- DATA[1:4,]
PRED_DATA$Capacity <- c(640,1280,1280,3680)
PRED_DATA$Report_Year <- 2026
PRED_DATA$Plant <- 'Enyo'
PRED_DATA$Emp<- NA
round(exp(predict(MOD1,newdata=PRED_DATA)))
#PRED_DATA$Capacity<- c(640,1280,1280,3680) #Larger number includes the single cyle turbines that look to be turned off most of the time
PRED_DATA
PRED_OPERATING <- round(exp(predict(MOD1,newdata=PRED_DATA)))
POWER_OPERATORS <- c(0,PRED_OPERATING )
ALL_VALUES <- DOLLAR_VALUES
ALL_VALUES$POWER_OPERATORS <- POWER_OPERATORS
#ggplot(REG_DATA,aes(x=Capacity,y=log(Emp)))+geom_point()+geom_smooth(method='lm')
MOD2 <- feols(Peak_Const~Capacity+Report_Year+Report_Quality,DATA,vcov='hetero')
#ggplot(DATA,aes(x=Capacity,y=Peak_Const))+geom_point()+geom_smooth(method='lm')
###Construction Data
CONST_SCHEDULE_HISTORIC <- c(45,75,90,115,175,235,285,350,400,350,255,175,95,65) #Employment by month in the most recent 2011 Wyoming application for a generator (See one drive data)
PEAK_CONST_EMP_HISTORIC <- 400 #Historic peak employment rate
PEAK_RATIO <- (sum(CONST_SCHEDULE_HISTORIC )/12)/PEAK_CONST_EMP_HISTORIC
PEAK_RATIO #Also aligns with the 60% estimate used in the data center report on expenses
PRED_DATA_CONST <- PRED_DATA
PRED_DATA_CONST$Capacity <- c(640,640,0,2400) #Capacity Added in a given year
CONST_EMPLOYMENT_PRED <- round(predict(MOD2,PRED_DATA_CONST)*PEAK_RATIO)
CONST_EMPLOYMENT_PRED
EMP_2029 <- CONST_EMPLOYMENT_PRED[1]/4 #Shift based on starting in Q4 of 2029
CONST_EMPLOYMENT_PRED
CONST_EMPLOYMENT_PRED[1] <- CONST_EMPLOYMENT_PRED[1]-EMP_2029
CONST_EMPLOYMENT_PRED <- c(EMP_2029,CONST_EMPLOYMENT_PRED)
CONST_EMPLOYMENT_PRED <- CONST_EMPLOYMENT_PRED[c(1:3,5,4)] #Assume the CCG is built mostly in the previous year, but single cycles are same year, based on Enyo data sheet
ALL_VALUES$TURBINE_CONST_WORKERS <- CONST_EMPLOYMENT_PRED
ALL_VALUES

75
Scale.r
View File

@ -1,75 +0,0 @@
library(tidyverse)
library(fixest)
NAMES <- c("Trumbull Energy Center","Orange County Advanced Power Station","Shady Hills Combined Cycle Facility","Cumberland (TN)","Kingston","Lincoln Land Energy Center","Delta Blues Advanced Power Station","Homer","Vicksburg","Cheyenne Prairie","Legend and Lone Star","Wolf Summit Energy","Franklin Farms","Viola Generating Station","CPV Basin Ranch Energy Center","Smarr Combined Cycle Energy Facility","Waterford 5 & 6","Lake Charles","Jefferson Power Station")
CAP <- c(308.7*2+360,
453*2+400,
612,
454.8+323,
323,
638.4*2,
477+341.7,
4678,
819.4,
132,
754+453,
600,
1560,
705,
1490,
1425,
1640,
994,
754
)
DETAILED_REPORT <- c(1,1,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0)
EMP <- c(25,27,12.5,30,NA,34,21,250,21,12,73,30,44,30,45,30,30,30,22)
PEAK_CONST <- c(920,NA,600,NA,300,500,300,2500,560,400,NA,400,(1500+1800)/2,500,1000,1200,700,1100,NA)
DATE <- c(2017,2018,2018,2022,2015,2020,2024,2025,2025,2012,2024,2025,2024,2024,2026,2026,2025,2020,2025)
DATA <- cbind(CAP,EMP,PEAK_CONST,DETAILED_REPORT,DATE) %>% as.matrix %>% as_tibble
DATA$NAMES <- NAMES
DATA
colnames(DATA ) <- c("Capacity","Emp","Peak_Const","Report_Quality","Report_Year","Plant")
REG_DATA <-DATA %>% select(Emp,Capacity,Report_Quality,Report_Year)
REG_DATA_TRIMMED <-DATA %>% filter(Plant!='Homer') %>% select(Emp,Capacity,Report_Quality,Report_Year)
DATA
MOD1 <- feols(log(Emp)~Capacity+Report_Quality+Report_Year,REG_DATA,vcov='hetero')
feols(log(Emp)~Capacity+Report_Quality+Report_Year,REG_DATA,vcov='hetero')
PRED_DATA <- DATA[1:4,]
PRED_DATA$Capacity <- c(250,750,1000,1500)
PRED_DATA$Report_Year <- 2026
PRED_DATA$Plant <- 'Enyo'
PRED_DATA$Emp<- NA
round(exp(predict(MOD1,newdata=PRED_DATA)))
#PRED_DATA$Capacity<- c(640,1280,1280,3680) #Larger number includes the single cyle turbines that look to be turned off most of the time
PRED_OPERATING <- round(exp(predict(MOD1,newdata=PRED_DATA)))
PRED_OPERATING
ggplot(REG_DATA,aes(x=Capacity,y=log(Emp)))+geom_point()+geom_smooth(method='lm')
#feols(log(Emp)~Capacity+Report_Quality+Report_Year,REG_DATA_TRIMMED,vcov='hetero')
MOD2 <- feols(Peak_Const~Capacity+Report_Year+Report_Quality,DATA,vcov='hetero')
feols(Peak_Const~Capacity+Report_Year+Report_Quality,DATA,vcov='hetero')
ggplot(DATA,aes(x=Capacity,y=Peak_Const))+geom_point()+geom_smooth(method='lm')
###Construction Data
CONST_SCHEDULE <- c(45,75,90,115,175,235,285,350,400,350,255,175,95,65)
PEAK_RATIO <- (sum(CONST_SCHEDULE )/12)/400
PEAK_RATIO
PRED_DATA_CONST <- PRED_DATA
PRED_DATA_CONST$Capacity <- c(640,640,0,2400)
CONST_EMPLOYMENT_PRED <- round(predict(MOD2,PRED_DATA_CONST)*PEAK_RATIO)
CONST_EMPLOYMENT_PRED
MOD2
CONST_SCHEDULE
95*2
PRED_DATA <- DATA[1:4,]
PRED_DATA