{flexFitR}
is an R package designed for efficient modeling and
analysis of large and complex datasets. It offers powerful tools for
parameter estimation, model fitting, and visualization, leveraging the
{optimx}
package for optimization and the {future}
package for
parallel processing.
You can install the development version of flexFitR from GitHub with:
# install.packages("devtools")
devtools::install_github("AparicioJohan/flexFitR")
- Parameter Estimation: Utilizes
{optimx}
and derivative-free algorithms to solve and estimate parameters for a given function. - Parallelization: Implements parallel processing using the
{future}
package, enabling efficient fitting of hundreds of curves simultaneously. - Visualization Tools: Provides a variety of plots to visualize model fits, correlations, predictions, and more.
- Statistical Rigor: Offers standard errors and p-values for coefficients, as well as for predictions, supporting robust conclusions and interpretations.
- Prediction: Supports diverse prediction types, including point predictions, area under the curve (AUC), first and second derivatives, user-defined parameter functions, and more advanced transformations or custom expressions based on model parameters.
- Flexibility: Allows users to fix certain parameters in the model and specify different initial values per grouping factor.
- Custom Modeling Functions: Equipped with built-in modeling functions for common analysis tasks, while also permitting users to supply their own custom functions.
Here’s a simple example to get you started with {flexFitR}
. This
example demonstrates fitting a piecewise regression model:
library(flexFitR)
dt <- data.frame(
time = c(0, 29, 36, 42, 56, 76, 92, 100, 108),
variable = c(0, 0, 0.67, 15.11, 77.38, 99.81, 99.81, 99.81, 99.81)
)
plot(explorer(dt, time, variable), type = "xy")
fun <- function(t, t1 = 45, t2 = 80, k = 0.9) {
if (t < t1) {
y <- 0
} else if (t >= t1 && t <= t2) {
y <- k / (t2 - t1) * (t - t1)
} else {
y <- k
}
return(y)
}
# Fitting piecewise regression
mod_1 <- dt |>
modeler(
x = time,
y = variable,
fn = "fun",
parameters = c(t1 = 45, t2 = 80, k = 90)
)
print(mod_1)
Call:
variable ~ fun(time, t1, t2, k)
Residuals:
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.00000 0.00000 0.00000 0.07444 0.00000 0.67000
Optimization Results `head()`:
uid t1 t2 k sse
1 38.6 61 99.8 0.449
Metrics:
Groups Timing Convergence Iterations
1 0.4909 secs 100% 511 (id)
# Auto plot
plot(mod_1)
# Coefficients
coef(mod_1)
# A tibble: 3 × 6
uid coefficient solution std.error `t value` `Pr(>|t|)`
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 t1 38.6 0.0779 496. 4.54e-15
2 1 t2 61.0 0.0918 665. 7.82e-16
3 1 k 99.8 0.137 730. 4.47e-16
# Variance-Covariance Matrix
vcov(mod_1)
$`1`
t1 t2 k
t1 6.061705e-03 -0.002940001 1.877072e-07
t2 -2.940001e-03 0.008431400 4.204939e-03
k 1.877072e-07 0.004204939 1.870426e-02
# Making predictions
predict(mod_1, x = 45)
# A tibble: 1 × 4
uid x_new predicted.value std.error
<dbl> <dbl> <dbl> <dbl>
1 1 45 28.5 0.223
For detailed documentation and examples, visit flexFitR
- Vignette 1: How to start
- Vignette 2: Modeling plant emergence and canopy growth using UAV data
- Vignette 3: Modeling with constraints
- Vignette 4: Making predictions
- Vignette 5: Plotting options
Contributions to flexFitR are welcome! If you’d like to contribute, please fork the repository and submit a pull request. For significant changes, please open an issue first to discuss your ideas.
Please note that the flexFitR project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
flexFitR is licensed under the MIT License. See the LICENSE file for more details.