[chronojump/shortsLibrary] Fixed RSE comparison of Time (shortsLibraty) and Position (X. Padulles)



commit f057a34f56c640ab4e036a1c9c78a82044dd6376
Author: Xavier Padullés <testing chronojump org>
Date:   Fri Jan 15 12:54:50 2021 +0100

    Fixed RSE comparison of Time (shortsLibraty) and Position (X. Padulles)

 r-scripts/tests/shortsLibrary/validation.R | 82 ++++++++++++++++++++----------
 1 file changed, 56 insertions(+), 26 deletions(-)
---
diff --git a/r-scripts/tests/shortsLibrary/validation.R b/r-scripts/tests/shortsLibrary/validation.R
index be9f8f5f..b95114e2 100644
--- a/r-scripts/tests/shortsLibrary/validation.R
+++ b/r-scripts/tests/shortsLibrary/validation.R
@@ -1,6 +1,12 @@
 
 require(shorts)
 
+get_residuals <- function(Vmax, K, time, position, T0 = 0){
+    predicted_position = Vmax*(time - T0 + (1/K)*exp(-K*(time - T0))) -Vmax/K
+    meanResiduals = mean(abs(position - predicted_position))
+    return(meanResiduals)
+}
+
 getModelWithOptimalTimeCorrection <- function(split_times)
 {
     # print("In getModelWithOptimalTimeCorrection()")
@@ -47,16 +53,23 @@ getModelWithOptimalTimeCorrection <- function(split_times)
 }
 WorlChampionshipSplitTimes <- 
read.csv2("~/chronojump/r-scripts/tests/shortsLibrary/WorlChampionshipSplitTimes.csv")
 
-resultsColumns = c("Vmax3P", "Tau3P", "RSE3P"
-                   , "Vmax3CorrectedP", "Tau3CorrectedP", "RSE3CorrectedP"
-                   , "Vmax3S", "Tau3S", "RSE3S"
-                   , "Vmax3CorrectedS", "Tau3CorrectedS", "RSE3CorrectedS"
-                   , "Vmax4P", "Tau4P", "RSE4P"
-                   , "Vmax4CorrectedP", "Tau4CorrectedP", "RSE4CorrectedP"
-                   , "Vmax4S", "Tau4S", "RSE4S"
-                   , "Vmax4CorrectedS", "Tau4CorrectedS", "RSE4CorrectedS"
-                   , "Vmax5CorrectedS", "Tau5CorrectedS", "RSE5CorrectedS"
+# resultsColumns = c("Vmax3P", "Tau3P", "RSE3P"
+#                    , "Vmax3CorrectedP", "Tau3CorrectedP", "RSE3CorrectedP"
+#                    , "Vmax3S", "Tau3S", "RSE3S"
+#                    , "Vmax3CorrectedS", "Tau3CorrectedS", "RSE3CorrectedS"
+#                    , "Vmax4P", "Tau4P", "RSE4P"
+#                    , "Vmax4CorrectedP", "Tau4CorrectedP", "RSE4CorrectedP"
+#                    , "Vmax4S", "Tau4S", "RSE4S"
+#                    , "Vmax4CorrectedS", "Tau4CorrectedS", "RSE4CorrectedS"
+#                    , "Vmax5CorrectedS", "Tau5CorrectedS", "RSE5CorrectedS"
+# )
+
+resultsColumns = c("Vmax3P", "Vmax3S", "Vmax3CorrectedP", "Vmax3CorrectedS", "Vmax4P", "Vmax4S", 
"Vmax4CorrectedP", "Vmax4CorrectedS", "Vmax5CorrectedS"
+                   , "Tau3P", "Tau3S", "Tau3CorrectedP", "Tau3CorrectedS", "Tau4P", "Tau4S", 
"Tau4CorrectedP", "Tau4CorrectedS", "Tau5CorrectedS" 
+                   , "MeanError3P", "MeanError3S", "MeanError3CorrectedP", "MeanError3CorrectedS", 
"MeanError4P", "MeanError4S", "MeanError4CorrectedP", "MeanError4CorrectedS", "MeanError5CorrectedS"
 )
+
+
 results = matrix(nrow=length(WorlChampionshipSplitTimes[,1]), ncol = length(resultsColumns))
 colnames(results) = resultsColumns
 
@@ -81,7 +94,7 @@ analyze_splits <- function(WorlChampionshipSplitTimes){
             time = c(WorlChampionshipSplitTimes[i,5], WorlChampionshipSplitTimes[i,6], 
WorlChampionshipSplitTimes[i,7])
         )
         
-        # Padu's 3 split times model without correction
+    #Padu's 3 split times model without correction
         model = stats::nls(
             # position ~ I(Vmax*(time + (1/K)*exp(-K*time))) -Vmax/K, splitTimes3
             # corrected_time ~ (1/K) * I(LambertW::W(-exp(1)^(-distance / (Vmax * 1/K) - 1))) + distance / 
Vmax + 1/K
@@ -92,9 +105,10 @@ analyze_splits <- function(WorlChampionshipSplitTimes){
         # print(paste("P --- Vmax:", summary(model)$parameters[2], "Tau:", 1/summary(model)$parameters[1]))
         results[i, "Vmax3P"] = summary(model)$parameters[2]
         results[i, "Tau3P"] = summary(model)$parameters[1]
-        results[i, "RSE3P"] = summary(model)$sigma
+        results[i, "MeanError3P"] = get_residuals(summary(model)$parameters[2], 
summary(model)$parameters[1], splitTimes3$time, splitTimes3$position, T0 = 0)
+        # results[i, "MeanError3P"] = summary(model)$sigma
         
-        #Shorts 3 split times model without correction
+    #Shorts 3 split times model without correction
         model = with(
             splitTimes3,
             model_using_splits(position, time)
@@ -102,32 +116,37 @@ analyze_splits <- function(WorlChampionshipSplitTimes){
         # print(model)
         results[i, "Vmax3S"] = summary(model)$parameters[1]
         results[i, "Tau3S"] = summary(model)$parameters[2]
-        results[i, "RSE3S"] = model$model_fit$RSE
+        # results[i, "MeanError3S"] = model$model_fit$MeanError
+        results[i, "MeanError3S"] = get_residuals(summary(model)$parameters[1], 
summary(model)$parameters[2], splitTimes3$time, splitTimes3$position, T0 = 0)
         
-        # #Shorts 3 split times model with correction (Padu's correction)
+    # #Shorts 3 split times model with correction (Padu's correction)
         # # model = getModelWithOptimalTimeCorrection(splitTimes3)
         # model = getModelWithOptimalTimeCorrection(splitTimes3)
         # results[i, "Vmax3CorrectedS"] = summary(model)$parameters[1]
         # results[i, "Tau3CorrectedS"] = summary(model)$parameters[2]
-        # results[i, "RSE3CorrectedS"] = model$model_fit$RSE
+        # results[i, "MeanError3CorrectedS"] = model$model_fit$MeanError
         
-        # Padu's 4 split times model without correction
+    # Padu's 4 split times model without correction
         model = nls(position ~ Vmax*(time + (1/K)*exp(-K*time)) -Vmax/K, splitTimes4
                     , start = list(K = 0.81, Vmax = 10), control=nls.control(warnOnly=TRUE))
         # print(paste("P --- Vmax:", summary(model)$parameters[2], "Tau:", 1/summary(model)$parameters[1]))
         results[i, "Vmax4P"] = summary(model)$parameters[2]
         results[i, "Tau4P"] = summary(model)$parameters[1]
-        results[i, "RSE4P"] = summary(model)$sigma
+        # results[i, "MeanError4P"] = summary(model)$sigma
+        results[i, "MeanError4P"] = get_residuals(summary(model)$parameters[2], 
summary(model)$parameters[1], splitTimes4$time, splitTimes4$position, T0 = 0)
         
-        # Padu's 4 split times model with correction
-        model = nls(position ~ Vmax*(time + T0 + (1/K)*exp(-K*(time + T0))) -Vmax/K, splitTimes4
+        
+    # Padu's 4 split times model with correction
+        model = nls(position ~ Vmax*(time - T0 + (1/K)*exp(-K*(time - T0))) -Vmax/K, splitTimes4
                     , start = list(K = 0.81, Vmax = 10, T0 = 0.2), control=nls.control(warnOnly=TRUE))
         # print(paste("P --- Vmax:", summary(model)$parameters[2], "Tau:", 1/summary(model)$parameters[1]))
+        print(model)
         results[i, "Vmax4CorrectedP"] = summary(model)$parameters[2]
         results[i, "Tau4CorrectedP"] = summary(model)$parameters[1]
-        results[i, "RSE4CorrectedP"] = summary(model)$sigma
+        # results[i, "MeanError4CorrectedP"] = summary(model)$sigma
+        results[i, "MeanError4CorrectedP"] = get_residuals(summary(model)$parameters[2], 
summary(model)$parameters[1], splitTimes4$time, splitTimes4$position, T0 = summary(model)$parameters[3])
         
-        #Shorts 4 split times model without correction
+    #Shorts 4 split times model without correction
         model = with(
             splitTimes4,
             model_using_splits(position, time)
@@ -135,27 +154,38 @@ analyze_splits <- function(WorlChampionshipSplitTimes){
         # print(paste("Shorts --- Vmax:", summary(model)$parameters[1], "Tau:", 
1/summary(model)$parameters[2]))
         results[i, "Vmax4S"] = summary(model)$parameters[1]
         results[i, "Tau4S"] = summary(model)$parameters[2]
-        results[i, "RSE4S"] = model$model_fit$RSE
+        # results[i, "MeanError4S"] = model$model_fit$MeanError
+        results[i, "MeanError4S"] = get_residuals(summary(model)$parameters[1], 
summary(model)$parameters[2], splitTimes4$time, splitTimes4$position, T0 = 0)
         
-        #Shorts 4 split times model with time correction
+    #Shorts 4 split times model with time correction
         model = with(
             splitTimes4,
             model_using_splits_with_time_correction(position, time)
         )
+        
+        print(model)
+        print(summary(model)$parameters)
         # print(paste("Shorts --- Vmax:", summary(model)$parameters[1], "Tau:", 
1/summary(model)$parameters[2]))
         results[i, "Vmax4CorrectedS"] = summary(model)$parameters[1]
         results[i, "Tau4CorrectedS"] = summary(model)$parameters[2]
-        results[i, "RSE4CorrectedS"] = model$model_fit$RSE
+        # results[i, "MeanError4CorrectedS"] = model$model_fit$MeanError
+        results[i, "MeanError4CorrectedS"] = get_residuals(summary(model)$parameters[1], 
summary(model)$parameters[2], splitTimes4$time, splitTimes4$position, T0 = summary(model)$parameters[3])
         
-        #Shorts 5 split times model with time and distance correction
+    #Shorts 5 split times model with time correction
         model = with(
             splitTimes5,
             model_using_splits_with_time_correction(position, time)
         )
+        
+        print(model)
+        print(summary(model)$parameters)
+        
         # print(paste("Shorts --- Vmax:", summary(model)$parameters[1], "Tau:", 
1/summary(model)$parameters[2]))
         results[i, "Vmax5CorrectedS"] = summary(model)$parameters[1]
         results[i, "Tau5CorrectedS"] = summary(model)$parameters[2]
-        results[i, "RSE5CorrectedS"] = model$model_fit$RSE
+        # results[i, "MeanError5CorrectedS"] = model$model_fit$MeanError
+        results[i, "MeanError5CorrectedS"] = get_residuals(summary(model)$parameters[1], 
summary(model)$parameters[2], splitTimes5$time, splitTimes5$position, T0 = summary(model)$parameters[3])
+        
         
     }
     


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]