library(tidyverse) library(scales) library(janitor) library(paletteer) dir.create("Results", showWarnings = FALSE) source("Scripts/Load_IMPLAN.r") SINGLE <- FALSE OUTPUT_RES <- function(SINGLE=FALSE){ IMPLAN <- GET_IMPLAN_DATA(SINGLE) IMPLAN_DOLLAR <- IMPLAN %>% filter(Impact!='Employment') IMPLAN_DOLLAR <- IMPLAN_DOLLAR %>% group_by(Type,Year,Impact,Source) %>% mutate(value=ifelse(Region=='US',value-min(value),value) ) %>% ungroup TEMP <- IMPLAN_DOLLAR %>% filter(Year==2028) %>% mutate(value=0) IMPLAN_DOLLAR <- rbind(IMPLAN_DOLLAR,rbind(TEMP %>% mutate(Year=2025),TEMP %>% mutate(Year=2026),TEMP %>% mutate(Year=2027))) IMPLAN_DOLLAR$Impact <- factor(IMPLAN_DOLLAR$Impact,levels=c('Output','Value Added','Income','Federal','State','County')) IMPLAN_DOLLAR$Region <- factor(ifelse(IMPLAN_DOLLAR$Region=="WY",'Wyoming',"Rest of United States"),levels=rev(c("Wyoming","Rest of United States"))) IMPLAN_DOLLAR_REGION <- IMPLAN_DOLLAR %>% filter(Impact %in% c('Income','Output','Value Added')) %>% group_by(Year,Region,Impact) %>% summarize(value=sum(value)) %>% ungroup ########################Plot of total impact in US and in Wyoming IMPLAN_REGION_DOLLAR_PLOT <- ggplot(IMPLAN_DOLLAR_REGION ,aes(x=Year,y=value/10^9,fill=Region,group=Region))+geom_area()+facet_wrap(~Impact,ncol=1)+ylab("Billion Dollars")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","#FFC425"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=seq(0,5000,by=1)) ########################Taxes IMPLAN_TAX <- IMPLAN_DOLLAR %>% filter(Impact %in% c("County","State","Federal")) OLD <- IMPLAN_TAX IMPLAN_TAX <- IMPLAN_TAX %>% group_by(Type,Year,Impact,Source) %>% mutate(value=ifelse(Region=='Rest of United States',value-min(value),value) ) %>% ungroup IMPLAN_TAX <- IMPLAN_TAX %>% mutate(Impact=ifelse(Region=='Rest of United States' & Impact!='Federal',"Other States",as.character(Impact))) IMPLAN_TAX$Impact <- ifelse(IMPLAN_TAX$Impact =='State',"Wyoming State Taxes",IMPLAN_TAX$Impact) IMPLAN_TAX$Impact <- ifelse(IMPLAN_TAX$Impact =='County',"Wyoming County Taxes",IMPLAN_TAX$Impact) IMPLAN_TAX$Impact <- factor(IMPLAN_TAX$Impact,levels=c('Output','Value Added','Income','Federal','Other States','Wyoming State Taxes','Wyoming County Taxes')) #IMPLAN_TAX <- IMPLAN_TAX[!(IMPLAN_TAX$Type=='Direct' & IMPLAN_TAX$Region=='Rest of United States'& IMPLAN_TAX$Impact!='Federal'),] #IMPLAN_TAX <-IMPLAN_TAX[!(IMPLAN_TAX$Type=='Direct' & IMPLAN_TAX$Region=='Wyoming'& IMPLAN_TAX$Impact=='Federal'),] IMPLAN_DOLLAR <- IMPLAN_DOLLAR %>% filter(!(Impact %in% c("County","State","Federal","Other States"))) %>% rbind(IMPLAN_TAX) IMPLAN_TAX_FIG_DATA <- IMPLAN_TAX %>% group_by(Year,Impact) %>% summarize(value=sum(value)) %>% ungroup TAX_PLOT <- ggplot(IMPLAN_TAX_FIG_DATA, aes(x=Year,y=value/10^6,fill=Impact,group=Impact))+geom_area()+ylab("Million Dollars")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","firebrick","#FFC425","#492F24"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=seq(0,5000,by=50)) #############Dollar values table NPV <- IMPLAN_DOLLAR %>% mutate(value=value/10^9,Discount_0=value,Discount_2=value/(1+0.02)^(Year-2028),Discount_5=value/(1+0.05)^(Year-2028),Discount_10=value/(1+0.1)^(Year-2028)) %>% group_by(Impact,Region) %>% summarize(Discount_0=sum(Discount_0),Discount_2=sum(Discount_2),Discount_5=sum(Discount_5),Discount_10=sum(Discount_10)) %>% ungroup NPV[,3:6] <-round(NPV[,3:6],2) WY_NPV <- cbind(c("Discount","0%","2%","5%","10%"),NPV %>% filter(Region=='Wyoming') %>% select(-Region) %>% t) %>% as_tibble colnames(WY_NPV ) <- WY_NPV[1,] WY_NPV <- WY_NPV[-1,] WY_NPV <- WY_NPV %>% mutate_if(is.character, str_trim) WY_NPV[,-1] <- lapply( lapply(WY_NPV[,-1] ,as.numeric) %>% as_tibble,dollar) %>% as_tibble WY_TAX <- WY_NPV[,c(1,5:7)] WY_NPV <- WY_NPV[,c(1:4)] #US US_NPV <- cbind(c("Discount","0%","2%","5%","10%"),NPV %>% filter(Region!='Wyoming') %>% select(-Region) %>% t) %>% as_tibble colnames(US_NPV ) <- US_NPV[1,] US_NPV <- US_NPV[-1,] US_NPV <- US_NPV %>% mutate_if(is.character, str_trim) US_NPV[,-1] <- lapply( lapply(US_NPV[,-1] ,as.numeric) %>% as_tibble,dollar) %>% as_tibble US_TAX <- US_NPV[,c(1,5:6)] US_NPV <- US_NPV[,c(1:4)] ALL_TAX <- US_TAX ALL_TAX[,2] <- dollar(parse_number(as.character(US_TAX[,2] %>% t))+ parse_number(as.character(WY_TAX[,2] %>% t))) ALL_TAX <- cbind(ALL_TAX,WY_TAX[,-1:-2]) #write.csv(US_TAX,"./Results/US_Tax_Values.csv",row.names=FALSE) ############Employment IMPLAN_EMPLOY <- IMPLAN %>% filter(Impact=='Employment',Source=='IMPLAN') %>% group_by(Year,Region,Impact) %>% summarize(value=sum(value)) %>% ungroup IMPLAN_EMPLOY <- IMPLAN_EMPLOY %>% group_by(Year,Impact) %>% mutate(value=ifelse(Region=='US',value-min(value),value) ) %>% ungroup TEMP <- IMPLAN_EMPLOY %>% filter(Year==2028) %>% mutate(value=0) IMPLAN_EMPLOY <- rbind(IMPLAN_EMPLOY,rbind(TEMP %>% mutate(Year=2025),TEMP %>% mutate(Year=2026),TEMP %>% mutate(Year=2027))) IMPLAN_EMPLOY$Region <- factor(ifelse(IMPLAN_EMPLOY$Region=="WY",'Wyoming',"Rest of United States"),levels=rev(c("Wyoming","Rest of United States"))) IMPLAN_EMPLOYMENT_PLOT <- ggplot(IMPLAN_EMPLOY ,aes(x=Year,y=value,fill=Region,group=Region))+geom_area()+ylab("Employment (Full-Time Equivalent)")+theme_bw()+ theme(plot.title = element_text(size = 22, face = "bold"), axis.title = element_text(size = 18),axis.text = element_text(size = 16),legend.text = element_text(size = 14),strip.text = element_text(size = 14),legend.position="top")+ theme(legend.title=element_blank())+scale_fill_manual(values=c("#3C3B6E","#FFC425"))+scale_x_continuous(breaks=seq(2025,2060,by=5))+scale_y_continuous(breaks=c(seq(0,50000,by=1000)),labels = label_comma()) ############Save results HEADER <- ifelse(SINGLE,"Single Phase: ","") write.csv(WY_NPV,paste0("./Results/",HEADER,"Wyoming_NPV_Values.csv"),row.names=FALSE) write.csv(US_NPV,paste0("./Results/",HEADER,"US_NPV_Values.csv"),row.names=FALSE) write.csv(NPV,paste0("./Results/",HEADER,"NPV_Values.csv"),row.names=FALSE) write.csv(ALL_TAX,paste0("./Results/",HEADER,"Tax_Values.csv"),row.names=FALSE) ggsave( filename = paste0("./Results/",HEADER,"Dollar Values of Model.png"), plot = IMPLAN_REGION_DOLLAR_PLOT, width = 8.5, height = 11*(3./4), units = "in", dpi = 300) ggsave( filename = paste0("./Results/",HEADER,"Tax Model.png"), plot = TAX_PLOT, width = 8.5, height = 11*(3./4), units = "in", dpi = 300) ggsave( filename = paste0("./Results/",HEADER,"Employment.png"), plot = IMPLAN_EMPLOYMENT_PLOT , width = 8.5, height = 11*(2/4), units = "in", dpi = 600) } OUTPUT_RES(TRUE) OUTPUT_RES(FALSE) ######### if(exists("RES")){rm(RES)} for(YEAR in 2028:2036){ TEMP <- read_csv(paste0("Model_Outputs/IMPLAN/Wyoming/WY_",YEAR,"/occupation_impacts_table.csv"))[,c(2:3,5)] colnames(TEMP) <- c("Occupation","Employment","Wages") TEMP$Wages <- parse_number(TEMP$Wages) TEMP <- TEMP %>% mutate(Year=YEAR) if(!exists("RES")){RES <- TEMP}else{RES <- rbind(RES,TEMP)} rm(TEMP) } if(exists("RES_US")){rm(RES_US)} for(YEAR in 2028:2036){ TEMP <- read_csv(paste0("Model_Outputs/IMPLAN/US/US_",YEAR,"/occupation_impacts_table.csv"))[,c(2:3,5)] colnames(TEMP) <- c("Occupation","Employment","Wages") TEMP$Wages <- parse_number(TEMP$Wages) TEMP <- TEMP %>% mutate(Year=YEAR) if(!exists("RES_US")){RES_US <- TEMP}else{RES_US <- rbind(RES_US,TEMP)} rm(TEMP) } JOBS <- rbind(RES %>% filter(Year<2036) %>% group_by(Occupation) %>% summarize(Peak_Employment=max(Employment),Employment=mean(Employment),Wages=mean(Wages)) %>% ungroup %>% arrange(desc(Employment)) %>% mutate(Region='Wyoming',Period='Construction'), RES %>% filter(Year==2036) %>% arrange(desc(Employment)) %>% mutate(Peak_Employment=Employment,Region='Wyoming',Period='Operations')%>% select(-Year), RES_US %>% filter(Year<2036) %>% group_by(Occupation) %>% summarize(Peak_Employment=max(Employment),Employment=mean(Employment),Wages=mean(Wages)) %>% ungroup %>% arrange(desc(Employment)) %>% mutate(Region='United States',Period='Construction'), RES_US %>% filter(Year==2036) %>% arrange(desc(Employment)) %>% mutate(Peak_Employment=Employment,Region='United States',Period='Operations')%>% select(-Year)) ### WY_JOBS <- JOBS %>% filter(Region=='Wyoming') %>% rename(Peak_Wy_Employment=Peak_Employment,Wy_Employment=Employment,Wy_Wages=Wages) %>% select(-Region) US_JOBS <- JOBS %>% filter(Region!='Wyoming') %>% rename(Peak_US_Employment=Peak_Employment,US_Employment=Employment,US_Wages=Wages) %>% select(-Region) JOINED <- WY_JOBS %>% left_join(US_JOBS) %>% mutate(US_Employment=US_Employment-Wy_Employment,Peak_US_Employment=Peak_Wy_Employment,US_Wages=US_Wages-Wy_Wages) JOINED$US_Employment <- ifelse(JOINED$US_Employment<0,0,JOINED$US_Employment) JOINED$US_Wages <- ifelse(JOINED$US_Employment==0,0,JOINED$US_Wages) JOINED$Peak_US_Employment <- ifelse(JOINED$US_Employment==0,0,JOINED$Peak_US_Employment) EMP_SUMMARY <- JOINED %>% mutate(Total_Employment=US_Employment+Wy_Employment,Total_Wages=US_Wages+Wy_Wages) %>% group_by(Period) %>% mutate(Rank=rank(-rank(Total_Employment))) %>% arrange(Period,Rank) TOTAL_JOBS <- JOBS %>% group_by(Occupation,Period) %>% summarize(Total_Employment=sum(Employment,na.rm=TRUE),Total_Wages=sum(Wages,na.rm=TRUE)) %>% ungroup %>% group_by(Period) %>% mutate(Rank=rank(-rank(Total_Employment))) %>% arrange(Period,Rank) JOBS %>% group_by(Occupation,Period) %>% summarize(Total_Employment=sum(Employment),Total_Wages=sum(Wages))