Appropriation of the Azodyn-Pea 2019 model
2024-12-19
Packages
Functions
# Fonction pour repérer les différences entre deux df
differences_summary <- function(df1, df2) {
common_cols <- intersect(names(df1), names(df2)) # Colonnes communes
differences <- lapply(common_cols, function(col) {
rows_with_differences <- which(df1[[col]] != df2[[col]]) # Lignes avec différences
if (length(rows_with_differences) > 0) {
return(rows_with_differences) # Retourne les indices de lignes différentes
} else {
return(NULL) # Retourne NULL si pas de différences
}
})
names(differences) <- common_cols # Associe les noms des colonnes
return(differences)
}
#' transform a date in julian day
rvleExp.dateToNum_ad = function(dateStr) #' datStr, eg : "2014-01-01"
{
if (! is.character(dateStr)) {
return(NA);
}
return (as.numeric(as.Date(dateStr, format="%Y-%m-%d") + 2440588));
#' the date in julian day: 2456659
}
# rvleExp.dateToNum_ad("2014-01-01")
#' transform a date of the form 2456659 into an object Date
rvleExp.dateFromNum_ad = function(dateNum, round=T) #' dateNum, eg : 2456659; #' round, are numerical rounded
{
if (round) {
return(as.Date(as.Date(round(dateNum), origin="1970-01-01") - 2440588));
} else {
return(as.Date(as.Date(dateNum, origin="1970-01-01") - 2440588));
#' return a date object, eg: as.Date("2014-01-01")
}
}
# rvleExp.dateFromNum_ad(2456659)
Original data
setwd("~/azodyn_check/AZODYN_optileg/R")
file_sim = "../data/pea_simul.csv";
file_obs = "../data/pea_observations.csv";
f = rvle.open(pkg="AZODYN", file="AzodynPea.vpz")
simData = rvleExp.parseSim(file_sim=file_sim, vleObj=f, id=NULL)
# dim(simData) # 5 128; 5 137; 5 137; 5 136; 5 136
simData_cas1 = simData
obsData = rvleExp.parseObs(file_obs=file_obs, vleObj=f)
[Manager] simulation mono nb simus: 5
[Manager] end simulation and aggregation without parallelization
sim_vs_obs = rvleExp.compareSimObs(res=res, file_sim=simData, file_obs=obsData)
# dataframe vide pour stocker les résultats
rmse_cas1 <- data.frame(
output = character(),
RMSE = numeric(),
stringsAsFactors = FALSE
)
# Boucle pour calculer la RMSE par groupe "output"
for (output in sort(unique(sim_vs_obs$output))) {
sim_vs_obs_output <- sim_vs_obs[sim_vs_obs$output == output, ]
# Calcul de la RMSE
rmse_value <- rmse(sim_vs_obs_output$observed, sim_vs_obs_output$simulated)
# Ajout des résultats au dataframe
rmse_cas1 <- rbind(rmse_cas1, data.frame(output = output, RMSE = round (rmse_value,3)))
}
# rmse_cas1
ALL id
[1] "rmse LAI : 1.0569208998548"
[1] "rmse MS : 122.076772209186"
[1] "rmse NG : 1224.48033942446"
[1] "rmse P1G : 0.0290073505444224"
[1] "rmse Rdt : 13.2573989910306"
Focus on id 1
[1] "Rdt"
[1] "P1G"
[1] "NG"
[1] "MS"
[1] "LAI"
Focus on id 4
Data modification
setwd("~/azodyn_check/AZODYN_optileg/R")
file_sim = "../data/pea_simul_cas_4.csv"
file_obs = "../data/pea_observations.csv";
f = rvle.open(pkg="AZODYN", file="AzodynPea.vpz")
simData = rvleExp.parseSim(file_sim=file_sim, vleObj=f, id=NULL)
# dim(simData) # 5 128; 5 137; 5 137; 5 136; 5 136
simData_cas2 = simData
obsData = rvleExp.parseObs(file_obs=file_obs, vleObj=f)
1) Changing values
2) Deleting conditions
[1] "cPlant.RDTmax_var"
3) Adding conditions
[Manager] simulation mono nb simus: 5
[Manager] end simulation and aggregation without parallelization
sim_vs_obs = rvleExp.compareSimObs(res=res, file_sim=simData, file_obs=obsData)
# dataframe vide pour stocker les résultats
rmse_cas2 <- data.frame(
output = character(),
RMSE = numeric(),
stringsAsFactors = FALSE
)
# Boucle pour calculer la RMSE par groupe "output"
for (output in sort(unique(sim_vs_obs$output))) {
sim_vs_obs_output <- sim_vs_obs[sim_vs_obs$output == output, ]
# Calcul de la RMSE
rmse_value <- rmse(sim_vs_obs_output$observed, sim_vs_obs_output$simulated)
# Ajout des résultats au dataframe
rmse_cas2 <- rbind(rmse_cas2, data.frame(output = output, RMSE = round (rmse_value,3)))
}
# rmse_cas2
ALL id
[1] "rmse LAI : 0.865361780796514"
[1] "rmse MS : 62.6406879817228"
[1] "rmse NG : 550.9981306973"
[1] "rmse P1G : 0.0692214492904347"
[1] "rmse Rdt : 21.4649640656617"
Focus on id 1
[1] "Rdt"
[1] "P1G"
[1] "NG"
[1] "MS"
[1] "LAI"
Focus on id 4
Data preparation
setwd("~/azodyn_check/AZODYN_optileg/R")
file_sim = "../data/pea_simul_test1.csv";
file_obs = "../data/pea_observations_test1.csv";
f = rvle.open(pkg="AZODYN", file="AzodynPea.vpz")
simData = rvleExp.parseSim(file_sim=file_sim, vleObj=f, id=NULL)
# dim(simData) # 5 128; 5 137; 5 137; 5 136; 5 136
simData_cas3 = simData
obsData = rvleExp.parseObs(file_obs=file_obs, vleObj=f)
[Manager] simulation mono nb simus: 16
[Manager] end simulation and aggregation without parallelization
sim_vs_obs = rvleExp.compareSimObs(res=res, file_sim=simData, file_obs=obsData)
# conversion dates simul en dates normal
lignes_dates <- which(grepl("date_", sim_vs_obs$output))
df_res_date = data.frame ( droplevels(sim_vs_obs [lignes_dates,]));
rownames(df_res_date) = NULL
# unique(sim_vs_obs$output)
sim_vs_obs = droplevels(sim_vs_obs[!sim_vs_obs$output %in% c("date_MP","date_DRG"),])
sim_vs_obs$observed = as.numeric(sim_vs_obs$observed)
# dataframe vide pour stocker les résultats
rmse_cas3 <- data.frame(
output = character(),
RMSE = numeric(),
stringsAsFactors = FALSE
)
# Boucle pour calculer la RMSE par groupe "output"
for (output in sort(unique(sim_vs_obs$output))) {
sim_vs_obs_output <- sim_vs_obs[sim_vs_obs$output == output, ]
# Calcul de la RMSE
rmse_value <- rmse(sim_vs_obs_output$observed, sim_vs_obs_output$simulated)
# Ajout des résultats au dataframe
rmse_cas3 <- rbind(rmse_cas3, data.frame(output = output, RMSE = round (rmse_value,3)))
}
# rmse_cas3
ALL id
[1] "rmse LAI : 0.348544126896241"
[1] "rmse MS : 268.121329318601"
[1] "rmse TP : 13.4015025420531"
[1] "rmse NG : 852.684094477781"
[1] "rmse P1G14 : 0.0938011293135174"
[1] "rmse Rdt14 : 32.4827506969135"
[1] "rmse tNa : 1.0109520757031"
Focus on id 1
[1] "tNveg"
[1] "tNa"
[1] "date_DRG"
[1] "TP"
[1] "date_MP"
[1] "QNG"
[1] "P1G14"
[1] "Rdt14"
[1] "NG"
[1] "MS"
[1] "QNveg"
[1] "LAI"
Focus on id 77
[1] "tNveg"
[1] "tNa"
[1] "date_DRG"
[1] "TP"
[1] "date_MP"
[1] "QNG"
[1] "P1G14"
[1] "Rdt14"
[1] "NG"
[1] "MS"
[1] "QNveg"
[1] "LAI"
Focus on the dates
df_res_date = df_res_date[which(df_res_date$simulated > 0),] # a verifier est ce ok
rownames(df_res_date) = NULL
df_res_date$simulated_cor = rvleExp.dateFromNum_ad(df_res_date$simulated)
# df_res_date[!is.na(df_res_date$observed), ]
df_res_date = df_res_date[df_res_date$observed != "", ]
tags$div(
tags$h3("Comparison of the dates"),
DT::datatable(df_res_date, options = list(pageLength = 5)), options = list(pageLength = 5))
# rmse_cas1
# rmse_cas2
# rmse_cas3
rmse_cas_1_2_3 = rbind (rmse_cas_1_2,
data.frame(Output = rep(NA, 2), RMSE_case_1 = rep(NA, 2), RMSE_case_2 = rep(NA, 2)))
rmse_cas_1_2_3$Output_cas3 = rmse_cas3$output
rmse_cas_1_2_3$RMSE_case_3 = rmse_cas3$RMSE
tags$div(
tags$h3("RMSE"),
DT::datatable(rmse_cas_1_2_3, options = list(pageLength = 7))
)
Thank you for your attention