TSR-Proj / f-optimise_for_location.r
f-optimise_for_location.r
Raw
#############################################################################
# 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]
  )
}