[chronojump] Fixed RSE comparison of Time (shortsLibraty) and Position (X. Padulles)
- From: Xavier Padullés <xpadulles src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Fixed RSE comparison of Time (shortsLibraty) and Position (X. Padulles)
- Date: Sat, 16 Jan 2021 10:37:35 +0000 (UTC)
commit eaf8eaf03b5e6389bb1abe1e1d3da74d1dbf1e6a
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]