#############################################################################
# Function running the optimisation from 'f-compute_beta_var.R` location-wise
#############################################################################
optimise_for_location <- function(location_name, df, objective_var) {
# Filter data for the location
location_data = df |> dplyr::filter(loc == location_name)
# Perform constrained optimization
optim_results = optim(par = -0.05, # Initial guess
fn = compute_beta_var,
obj = objective_var,
df = location_data,
method = "L-BFGS-B",
lower = -1, # Enforce lower bound
upper = 0) # Enforce upper bound
# Return optimized values of e_Te and e_RH
return(data.frame(loc = location_name, e_Te = optim_results$par, e_RH = optim_results$par))
}
optimise_for_location_TWO_Deltas <- function(location_name, df, objective_var) {
location_data <- df |>
dplyr::filter(loc == location_name)
optim_results <- optim(
par = c(-0.05, -0.05),
fn = compute_TWO_beta_vars,
objective_var = objective_var,
df = location_data,
method = "L-BFGS-B",
lower = c(-1, -1),
upper = c(0, 0)
)
data.frame(
loc = location_name,
e_current = optim_results$par[1],
e_lag = optim_results$par[2]
)
}
optimise_for_location_DISTINCT_Deltas <- function(location_name, df, objective_var) {
location_data <- df |>
filter(loc == location_name)
optim_results <- optim(
par = c(-0.05, -0.05),
fn = TMP_compute_beta_var,
objective_var = objective_var,
df = location_data,
method = "L-BFGS-B",
lower = c(-1, -1),
upper = c(0, 0)
)
data.frame(
loc = location_name,
e_Te = optim_results$par[1],
e_RH = optim_results$par[2]
)
}