Skip to content

Commit

Permalink
Merge pull request #27 from kdorheim/further_param_experiments
Browse files Browse the repository at this point in the history
Trying to Tune Alpha and Change Parameter Bounds
  • Loading branch information
ptrscll authored Jun 24, 2024
2 parents 5df36d8 + a18a7d7 commit b7746cd
Show file tree
Hide file tree
Showing 12 changed files with 372 additions and 22 deletions.
46 changes: 46 additions & 0 deletions results/alpha_ecs_unc_nmse.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
parameters values
beta 0.732
q10_rh 2.64
diff 2.2
S 5
alpha 1.15015020270593

Objective Function Value: 0.000451
Counts: 23
Counts: 23
Convergence: 0
Messages: CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH

CO2 MSE: 50.3
T MSE: 0.0457
RMSE: 7.09
T MSE accounting for unc: 0.017

***Key Metrics***
TCRE: 2.4
TCR: 2.37

***Historical Warming and ERF***
GSAT Warming: 0.705
Ocean Heat Content Change: 459
Total Aerosol ERF: -1.24
WMGHG ERF: 3.66
Methane ERF: 0.539

***Future Warming***
scenario start end GSAT
ssp119 2021 2040 1
ssp119 2041 2060 1.35
ssp119 2081 2100 1.4
ssp126 2021 2040 1.01
ssp126 2041 2060 1.57
ssp126 2081 2100 1.89
ssp245 2021 2040 1
ssp245 2041 2060 1.78
ssp245 2081 2100 2.98
ssp370 2021 2040 1
ssp370 2041 2060 1.91
ssp370 2081 2100 4.14
ssp585 2021 2040 1.17
ssp585 2041 2060 2.37
ssp585 2081 2100 5.36
46 changes: 46 additions & 0 deletions results/alpha_ecs_unc_nmse_big_box.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
parameters values
beta 1.196
q10_rh 3.52
diff 2
S 5
alpha 0.947871668212818

Objective Function Value: 0.000403
Counts: 28
Counts: 28
Convergence: 0
Messages: CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH

CO2 MSE: 293
T MSE: 0.0419
RMSE: 17.1
T MSE accounting for unc: 0.0149

***Key Metrics***
TCRE: 2.36
TCR: 2.42

***Historical Warming and ERF***
GSAT Warming: 0.708
Ocean Heat Content Change: 435
Total Aerosol ERF: -1.24
WMGHG ERF: 3.26
Methane ERF: 0.538

***Future Warming***
scenario start end GSAT
ssp119 2021 2040 0.869
ssp119 2041 2060 1.1
ssp119 2081 2100 1.07
ssp126 2021 2040 0.887
ssp126 2041 2060 1.31
ssp126 2081 2100 1.5
ssp245 2021 2040 0.899
ssp245 2041 2060 1.57
ssp245 2081 2100 2.57
ssp370 2021 2040 0.912
ssp370 2041 2060 1.74
ssp370 2081 2100 3.82
ssp585 2021 2040 1.05
ssp585 2041 2060 2.15
ssp585 2081 2100 4.97
46 changes: 46 additions & 0 deletions results/alpha_ecs_unc_nmse_very_big_box.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
parameters values
beta 1.66
q10_rh 4.4
diff 1.8
S 6
alpha 0.83005939428505

Objective Function Value: 0.00031
Counts: 38
Counts: 38
Convergence: 0
Messages: CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH

CO2 MSE: 531
T MSE: 0.0338
RMSE: 23
T MSE accounting for unc: 0.0111

***Key Metrics***
TCRE: 2.69
TCR: 2.7

***Historical Warming and ERF***
GSAT Warming: 0.773
Ocean Heat Content Change: 438
Total Aerosol ERF: -1.24
WMGHG ERF: 2.99
Methane ERF: 0.539

***Future Warming***
scenario start end GSAT
ssp119 2021 2040 0.855
ssp119 2041 2060 1.05
ssp119 2081 2100 1.05
ssp126 2021 2040 0.877
ssp126 2041 2060 1.28
ssp126 2081 2100 1.48
ssp245 2021 2040 0.903
ssp245 2041 2060 1.57
ssp245 2081 2100 2.61
ssp370 2021 2040 0.926
ssp370 2041 2060 1.77
ssp370 2081 2100 4.01
ssp585 2021 2040 1.06
ssp585 2041 2060 2.18
ssp585 2081 2100 5.21
Binary file added results/alpha_initial_comparison_plots.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/alpha_sens.rda
Binary file not shown.
Binary file added results/alpha_sens_plots.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 47 additions & 0 deletions scripts/error_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,24 @@ nmse_unc <- function(x, x_upper, x_lower, y) {
sum((x[!is.na(x)])^2))
}

# mvsse - function to find the mean variance-standardized squared error
#
# args:
# x - observed values
# sd - standard deviation of observed values
# y - predicted values
#
# returns: numeric vector length 1 containing the NMSE between predicted and
# observed values
mvsse <- function(x, sd, y) {
vsse <- (x - y)^2 / (sd)^2
return(mean(vsse))
}


#######################################
### Single-Variable Error Functions ###
#######################################

# get_var_mse: function to find MSE between observed and predicted data for
# a given variable
Expand Down Expand Up @@ -156,6 +174,35 @@ get_var_mse_unc <- function(obs_data, hector_data, var, yrs, mse_fn) {
return(mse_fn(x = x, x_upper = x_upper, x_lower = x_lower, y = y))
}


# get_var_mvsse: function to find MVSSE between observed and predicted data
# for a given variable
#
# args:
# obs_data - data frame of observed data formatted like Hector data frame
# hector_data - data frame outputted by Hector
# var - variable name
# yrs - vector of years for finding MSE
#
# Returns: MSE between predicted and observed data for var
#
# Note: Assumes observed data contains symmetric upper and lower bounds 1 SD
# away from actual value
get_var_mse_unc <- function(obs_data, hector_data, var, yrs, mse_fn) {
x <- filter(obs_data, year %in% yrs & variable == var)$value
x_upper <- filter(obs_data, year %in% yrs & variable == var)$upper
sd <- x_upper - x
y <- filter(hector_data, year %in% yrs & variable == var)$value

return(mvsse(x = x, sd = sd, y = y))
}


#######################################
### Error Functions for Optim Usage ###
#######################################


# mean_T_CO2_mse: function to find the mean of the temperature and CO2 MSEs
# between observed and predicted data for a given variable
#
Expand Down
59 changes: 40 additions & 19 deletions scripts/graph_comparison_plots.R
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ TEMP_PATH <-
"HadCRUT.5.0.2.0.analysis.summary_series.global.annual.csv")

INI_FILE <- system.file("input/hector_ssp245.ini", package = "hector")
PARAMS <- c(BETA(), Q10_RH(), DIFFUSIVITY(), ECS())
PARAMS <- c(BETA(), Q10_RH(), DIFFUSIVITY(), ECS(), AERO_SCALE())

OUTPUT <- file.path(RESULTS_DIR, "ecs_initial_comparison_plots.jpeg")
OUTPUT <- file.path(RESULTS_DIR, "alpha_initial_comparison_plots.jpeg")


source(file.path(SCRIPTS_DIR, "major_functions.R"))
Expand All @@ -45,36 +45,57 @@ default_data <- run_hector(ini_file = INI_FILE,
vars = c(GMST(), CONCENTRATIONS_CO2()))
default_data$scenario <- "Hector - Default Fit"

nmse_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(0.732, 2.64, 2.4, 3),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
nmse_data$scenario <- "Hector - Fit to NMSEs w/ unc"

nmse_bb_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(1.084, 3.52, 2, 3),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))

nmse_bb_data$scenario <- "Hector - Fit to NMSEs w/ unc, big box"
# nmse_data <- run_hector(ini_file = INI_FILE,
# params = PARAMS,
# vals = c(0.732, 2.64, 2.4, 3, 1),
# yrs = 1750:2014,
# vars = c(GMST(), CONCENTRATIONS_CO2()))
# nmse_data$scenario <- "Hector - Fit to NMSEs w/ unc"
#
# nmse_bb_data <- run_hector(ini_file = INI_FILE,
# params = PARAMS,
# vals = c(1.084, 3.52, 2, 3, 1),
# yrs = 1750:2014,
# vars = c(GMST(), CONCENTRATIONS_CO2()))
# nmse_bb_data$scenario <- "Hector - Fit to NMSEs w/ unc, big box"

nmse_ecs_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(0.732, 2.24, 2.4, 5),
vals = c(0.732, 2.24, 2.4, 5, 1),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
nmse_ecs_data$scenario <- "Hector - NMSEs w/ unc & Tuning S"

nmse_bb_ecs_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(1.069, 3.52, 2, 5),
vals = c(1.069, 3.52, 2, 5, 1),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
nmse_bb_ecs_data$scenario <- "Hector - NMSEs w/ unc, big box & Tuning S"

hector_data <- rbind(default_data, nmse_data, nmse_bb_data, nmse_ecs_data, nmse_bb_ecs_data)
alpha_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(0.732, 2.24, 2.4, 5, 1.15),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
alpha_data$scenario <- "Hector - NMSEs w/ unc & Tuning S and Alpha"

alpha_bb_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(1.196, 3.52, 2, 5, 0.948),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
alpha_bb_data$scenario <- "Hector - NMSEs w/ unc, big box & Tuning S and Alpha"

alpha_vbb_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = c(1.66, 4.4, 1.8, 6, 0.83),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))
alpha_vbb_data$scenario <- "Hector - NMSEs w/ unc, very big box & Tuning S and Alpha"

hector_data <- rbind(default_data, nmse_ecs_data, nmse_bb_ecs_data, alpha_data, alpha_bb_data, alpha_vbb_data)
hector_data$lower <- hector_data$value
hector_data$upper <- hector_data$value

Expand All @@ -89,4 +110,4 @@ ggplot(data = comb_data, aes(x = year, y = value, color = scenario)) +
geom_line() +
facet_wrap(~ variable, scales = "free") +
ggtitle("Comparing Parameterizations")
ggsave(OUTPUT, width = 15)
ggsave(OUTPUT, width = 16)
2 changes: 1 addition & 1 deletion scripts/major_functions.R
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ run_hector <- function(ini_file, params, vals, yrs, vars, include_unc = F) {
shutdown(core)

# Rescaling temperatures (if applicable)
if (GMST() %in% params) {
if (GMST() %in% vars) {
data <- rel_to_interval(data = data, var = GMST(), start = 1961, end = 1990)
}

Expand Down
76 changes: 76 additions & 0 deletions scripts/more_params_unc_nmse.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Script to use normalized the T and CO2 MSEs while accounting for T uncertainty
# Also includes ECS and alpha as params to optimize over
# Author: Peter Scully
# Date: 6/20/24

### Constants and Imports ###

# Importing libraries
library(hector)

# Setting up file paths
COMP_DATA_DIR <- file.path(here::here(), "comparison_data")
SCRIPTS_DIR <- file.path(here::here(), "scripts")
RESULTS_DIR <- file.path(here::here(), "results")

CO2_PATH <- file.path(COMP_DATA_DIR,
"Supplementary_Table_UoM_GHGConcentrations-1-1-0_annualmeans_v23March2017.csv")
TEMP_PATH <-
file.path(COMP_DATA_DIR,
"HadCRUT.5.0.2.0.analysis.summary_series.global.annual.csv")

INI_FILE <- system.file("input/hector_ssp245.ini", package = "hector")
PARAMS <- c(BETA(), Q10_RH(), DIFFUSIVITY(), ECS(), AERO_SCALE())

OUTPUT <- file.path(RESULTS_DIR, "alpha_ecs_unc_nmse_very_big_box.txt")


source(file.path(SCRIPTS_DIR, "major_functions.R"))

### Getting observational data ###
co2_data <- get_co2_data(CO2_PATH, include_unc = TRUE)
temp_data <- get_temp_data(TEMP_PATH, include_unc = TRUE)
obs_data <- rbind(co2_data, temp_data)

### Calling optim ###
best_pars <- run_optim(obs_data = obs_data,
ini_file = INI_FILE,
params = PARAMS,
lower = c(0, 2.2 - 0.44 * 5, 2.3 - 0.1 * 5, 2 - 1, 0),
upper = c(0.5 + 0.232 * 5, 2.2 + 0.44 * 5, 2.3 + 0.1 * 5, 5 + 1, 3),
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()),
error_fn = mean_T_CO2_nmse_unc,
include_unc = T,
method = "L-BFGS-B",
output_file = OUTPUT)

### Outputting individual MSEs ###
hector_data <- run_hector(ini_file = INI_FILE,
params = PARAMS,
vals = best_pars,
yrs = 1750:2014,
vars = c(GMST(), CONCENTRATIONS_CO2()))

T_mse <- get_var_mse(obs_data = obs_data,
hector_data = hector_data,
var = GMST(),
yrs = 1850:2014)
CO2_mse <- get_var_mse(obs_data = obs_data,
hector_data = hector_data,
var = CONCENTRATIONS_CO2(),
yrs = c(1750, 1850:2014))
T_mse_unc <- get_var_mse_unc(obs_data = obs_data,
hector_data = hector_data,
var = GMST(),
yrs = 1850:2014,
mse_fn = mse_unc)

write_metric("CO2 MSE:", CO2_mse, OUTPUT)
write_metric("T MSE: ", T_mse, OUTPUT)
write_metric("RMSE: ", sqrt(mean(CO2_mse, T_mse)), OUTPUT) # not 100% sure this is how we want to calculate this
write_metric("T MSE accounting for unc:", T_mse_unc, OUTPUT)
write("", OUTPUT, append = TRUE)

### Outputting table metrics ###
calc_table_metrics(PARAMS, best_pars, OUTPUT)
Loading

0 comments on commit b7746cd

Please sign in to comment.