predict_work_till_distance() functionmodel_timing_gates_FD_fixed() and model_time_distance_FD_fixed() which allow user to set the fixed FD parameter. This was before done using additional parameter in model_timing_gates_FD() and model_time_distance_FD() functions, but now these functions only provide estimated FD. This is done to allow confidence intervals estimation, which was impossible to do since fixed FD was also estimated, but it was constrained by the optimization function to user-provided value.model_in_situ() function, the filtering parameters (velocity_threshold, velocity_step, and n_observations) are returned in the corrections element of the returned object. These are also returned in the CV element of the returned object for every cross-validation foldvelocity_threshold parameter in the model_in_situ() function is now by default NULL, in which case the velocity of the observation with the fastest acceleration is taken as the cutoff valuetheme_bw() from README and set default ggplot theme with ggdist::ggdist()find_optimal_FV_scalar() function and all upper-level calling functions which happens when resistance parameter is below zerosplit_times since it has AsIs object, causing issues with ggplot2 plotting in the README filemodel_radar_gun() and model_laser_gun() examples that happened on r-release-macos-arm64 and r-oldrel-macos-arm64 due to the perfect model fit causing “singular gradient matrix at initial parameter estimates”. This is sorted by adding simple noise to the simulated datamodel_in_situ() function to now use minpack.lm::nlsLM() instead of stats::lm() function, which now estimates MSS and MAC parameters, and it is thus easier to read the code, and estimate the confidence intervalsget_air_resistance() function where both head wind and tail wind returned the same resistance.make_FV_profile() function when estimating force-velocity profile with wind conditions.convert_FV() function when converting force-velocity profile back to acceleration-velocity profile with wind conditions.make_FV_profile() function to create_FVP().convert_FV() function to convert_FVP().predict_kinematics() function relative_power to power_relative to be in alignment with other variables.work, average_power, and average_power_relative to the output of predict_kinematics() function, and removed net_horizontal_force from the output to avoid confusion whether the inertia is included or not.shorts_model_fit() function to return model fit metrics in both absolute and percentage forms.model_sprint() wrapper function and updated internal new_shorts_model() constructor which provide changes in the model output format ("shorts_model" class). This will create BREAK CHANGE from the previous versions of the {shorts} package.predict_work_till_time() and predict_work_till_distance() to calculate horizontal work performance.model_radar_gun() and added alias model_laser_gun() function.model_timing_gates(), model_timing_gates_TC(), model_timing_gates_FD(), and model_timing_gaes_FD_TC(), functions. Now the TC parameter has positive sign.model_tether() and model_tether_DC() functions. Changed the sign of the DC parameter.model_ family of functions to include predict_ function in the model definition. Now MSS and MAC are estimated, rather than MSS and TAU. This improves readability of the model definition. Also moved MAC in the output after MSS parameter.model_timing_gates_FD_TC() function.model_timing_gates_DC() and model_timing_gates_TC_DC() functions.model_in_situ() function which performs embedded (i.e., in-situ) analysis of the session monitoring data using GPS or LPS systems which provide instantaneous acceleration and velocity.model_time_distance(), model_time_distance_TC(), model_time_distance_DC(), model_time_distance_TC_DC(), and model_time_distance_FD() functions. These are exactly the same as model_timing_gates family of functions, but with reverse predictor and outcome variables.create_sprint_trace() function for quickly creating sprint traces with time- and distance-shifts, as well as flying starts. Useful for creating examples for issues in modeling sprint traces."shorts_model" class. The plot method now plots four different types of plots, depending on the type argument: “model” (default), “kinematics-time”, “kinematics-distance”, or “residuals”.confint S3 method to provide confidence intervals of the parameters.coef S3 method to return all model parameters, not only sprint parameters.model_ family of functions.LPS_session dataset. This dataset represents a sample data provided by Local Positioning System (LPS) on a single individual performing a single basketball practice session (aprox. 90min). Sampling frequency is 20Hz.dynaspeed dataset.laser_gun_data dataset.inertia (mass; in kg) and resistance (force; in Newtons) to predict_force_, predict_power_, predict_relative_power_, as well as predict_kinematics() functions. This increases the ability of the {shorts} package to deal with external resistance, like weight vest, sled, and tether devices.predict_kinematics() function to include inertia (mass; in kg) and resistance (force; in Newtons) parameters, as well as to allow the user to either provide the shorts_model object, or provide MSS and MAC parameters. Additional parameter add_inertia_to_vertical to allow user to decided whether inertia should be added to bodymass when calculating vertical force.predict_force_at_velocity() functionfind_max_power_ and find_power_critial_ function to add support for the inertia (mass; in kg) and resistance (force; in Newtons) parametersmake_FV_profile() function and added support for the inertia (mass; in kg) and resistance (force; in Newtons) parameters. Removed the S3 print and plot methods, as well as the class type involving this functionconvert_FV() function available for the users and added support for the inertia (mass; in kg) and resistance (force; in Newtons) parameterspredict_time_at_distance_FV() function to use simpler convert_FV() functionfind_max_power functions to find_peak_power to avoid confusion between Pmax and Ppeakinertia (mass; in kg) and resistance (force; in Newtons) to optimal_FV() functioninertia (mass; in kg) and resistance (force; in Newtons) to probe_FV() functionmodel_tether_DC() function with an additional distance correction (DC) parameter estimate. DC parameter serves as an intercept when distance doesn’t start at zerouse_observed_MSS parameter to model_radar_gun() and model_tether() functions. This allows user to estimate MSS parameter from the observed dataFD parameter to model_timing_gates_FD() and model_timing_gates_FD_TC() functions, which allow user to provide fixed FD parameter value.predict() function not to return fitted values, but to use generic predict method on the object. This allows user to use newdata parameter. Added fitted() method to return fitted values insteadFV_slope_perc to profile_imb in the output of the optimal_ functionsfind_optimal_FV() and find_optimal_FV_peak() are now wrapped inside the optimal_FV, but the method is selected using method parameter (“max” for find_optimal_FV() and “peak” for find_optimal_FV_peak()). Please refer to examplesoptimal_ functions and moved to probe_FV() and probe_MSS_MAC() functions. Please refer to examplesfind_optimal_distance() function that can take other optimal and probe functions as parameter. Please refer to examplesfind_optimal_FV_peak() (now implemented in find_optimal_FV() function using method="peak" parameter) where information needed to calculate air resistance was not forwardedfind_optimal_MSS_MAC() and find_optimal_FV() functions. Some of the columns are renamed to better clarityconvert_FV() to convert from FV profile to sprint profile. This is used to calculate Peak Power (Ppeak) metric and its locationmin_func parameter to find_optimal_MSS_MAC_distance() and find_optimal_FV_distance(). This allows to optimize by using any other metricfind_optimal_FV_peak() function, which optimize the profile while keeping the Peak Power the same. Accompanying find_optimal_FV_peak_distance() is also addedformat_splits()model_tether() function for modeling data output from tether devices, which involve velocity at distancePmax_relative to Pmax_rel in the output of the make_FV_profile() functionF0_poly, F0_poly_rel, V0_poly, Pmax_poly, Pmax_poly_rel, and FV_slope_poly to the output of the make_FV_profile() function using the method outlined in Pierre Samozino and Nicolas Peyror, et al (2021) <doi: 10.1111/sms.14097>predict_time_at_distance_FV() which uses FV profile’s F0 and V0 to predict time at distance. For more info see Pierre Samozino and Nicolas Peyror, et al (2021) <doi: 10.1111/sms.14097>find_optimal_MSS_MAC(), find_optimal_MSS_MAC_distance(), find_optimal_FV(), find_optimal_FV_distance(). For more info on the FV optimization see Pierre Samozino and Nicolas Peyror, et al (2021) <doi: 10.1111/sms.14097>This is NEW version of the {shorts} package INCOMPATIBLE with the previous due to drastic changes in functions. Here are the changes utilized:
predict_ functions, time_correction and distance_correction are no longer used, since due to novel models of estimation, it is hard to neatly implement them into functions. Now the predict_ functions predict on a scale where sprint starts at t=0 and d=0, rather than on the original (data) scale. This will also remove the confusion for the user.predict_ functions, the user now uses MSS and MAC parametersstats::nls() to minpack.lm::nlsLM() in model_ functions. This is done to avoid “singular gradient” error and inability of the stats::nls() to estimate when there are zero residuals. Please make note that now when you use ... in model_ function, it will be forwarded to minpack.lm::nlsLM(). If you have been using control = stats::nls.control(warnOnly = TRUE) to avoid stats::nls() to throw error when fitting when there are zero residuals, now you can remove it. If needed use control = minpack.lm::nls.lm.control() instead.create_timing_gates_splits() function to generate timing gates splitsmodel_timing_gates(), model_timing_gates_TC(), model_timing_gates_FD(), and model_timing_gates_FD_TC(). All other functions have been removedmodel_radar_gun() which also estimates time correction (TC) parameter.model_radar_gun() feature n-folds cross-validation, as opposed to model_timing_gates() family of functions, which features leave-one-out cross-validation (LOOCV) due to small number of observations. Using the CV parameter, set n-fold cross-validations for the model_radar_gun() function.LOOCV in the shorts_model object to CV to reflect above changes in model_radar_gun() functionmodel_using_splits_with_distance_correction() function the predict_XXX_at_distance() family of functions doesn’t work correctly if distance_correction is used as parameter (i.e., different than zero). This is because the model definition is completely different, and predicting on the same distance scale is not possible. Please refer to Jovanović, M., Vescovi, J.D. (2020) for more information.plot.shorts_fv_profile() functionresiduals() S3 method, as well as with internal function shorts_model_fit() that provides model fit estimates (i.e. RMSE, MAE, MAPE)model_using_splits_with_distance_correction() function that implements novel model definition to estimate flying start distancemixed_model_using_splits_with_distance_correction() function that implements novel model definition to estimate flying start distanceggplot2 and tidyr package dependency and implemented it in S3 plotting functionsget_FV_profile now return a object class shorts_fv_profileshorts_fv_profile objectforce and relative_force to horizontal_force and relative_horizontal_force in the shorts_fv_profile object and data frame returned by the predict_kinematicsacceleration, bodymass, net_horizontal_force, air_resistance, and vertical_force, resultant_force_relative, power, and force_angle in the shorts_fv_profile object and data frame returned by the predict_kinematicsshorts_model and shorts_mixed_model objectsAdded sample radar gun data from Jean-Benoît Morin Microsoft Excel spreadsheet, freely available at his website (accessed October 27, 2020)). For more information ?jb_morin
Added get_FV_profile for generating Force-Velocity profile summary using Pierre Samozino and Jean-Benoît Morin method (for more DOI:10.1111/sms.12490)
get_air_resistance function to estimate air resistance in newtonspredict_air_resistance_at_time and predict_air_resistance_at_time functionspredict_force_at_time and predict_force_at_distance functionspredict_power_at_time and predict_power_at_distance functionspredict_relative_power_at_distance and predict_relative_power_at_time use air resistance to do the calculations. The default bodymass is 75kg. To replicate earlier function behavior, use predict_velocity_at_ multiplied by predict_acceleration_at_ to get relative power without air resistancepredict_kinematics now uses aforementioned changes in predict_relative_power_ functions, and added force and air resistance in the outputfind_max_power_distance and find_power_critical_distance now uses aforementioned changes and returns absolute power, rather than relative, and air resistance is used in the power calculationsfind_max_power_time, find_velocity_critical_time, find_acceleration_critical_time, and find_power_critical_time functionsmodel_using_radar_with_time_correction where time_correction parameter is estimatedmixed_model_using_radar_with_time_correction where time_correction parameter is estimateddata("vescovi")). For more info see ?vescovitime_correction and distance_correction to all model parameters output to align thempredict_kinematics function that predicts 0-6s distance (100Hz), velocity, acceleration, and relative powerprint, coef, summary, predict, and residuals methodsrandom parameter to mixed_ family of functions to allow higher flexibility in model definitions, but removed corrections_as_random_effects parameter. The default behavious is to use all parameters as random effects.... to model_using_radar and mixed_model_using_radar to be forwarded to nlme::nlmesprint-corrections vignette by adding a short simulation studytime_delay to time_correction in shorts::model_using_instant_velocity and shorts::mixed_model_using_instant_velocity functions to be more consistent across functions. Also, this correction is added to time, so use negative numbers insteadtime_correction in shorts::mixed_model_using_instant_velocity and shorts::mixed_model_using_split_times is now numeric vector, not column nametime_correction in shorts::model_using_split_times and shorts::mixed_model_using_split_timestime_correction in shorts:predict_ family of functionsdistance_correction in shorts:predict_ family of functionstime_correction in shorts::model_using_split_times_with_time_correction and shorts::mixed_model_using_split_times_with_time_correctiondistance_correction in shorts::model_using_split_times_with_corrections and shorts::mixed_model_using_split_times_with_correctionsshorts::mixed_model_ functionsmaxAbsErr from model_fit elementfind_ family of functions for finding max power and critical distance when velocity or acceleration reaches certain threshold... to all modeling functions so that extra parameters can be forwarded to the optimization enginesplit_times recreated using distance shift behind the first timing gate. Needed to demo mixed models with corrections_model_using_instant_velocity to _model_using_radar_model_using_split_times_ to _model_using_splits_