From 9d5640ceb2a5c4899e8f5dc8bdb5f881efb7c05a Mon Sep 17 00:00:00 2001 From: AparicioJohan Date: Mon, 7 Oct 2024 11:10:27 -0500 Subject: [PATCH] fix x_var as output --- R/01_read.R | 3 ++- R/02_modeler.R | 1 + R/utils_S3_print.R | 5 +++-- README.Rmd | 2 +- README.md | 9 +++++---- docs/articles/canopy-model.html | 6 +++--- docs/articles/height-model.html | 2 +- docs/articles/how_to_start.html | 18 +++++++++--------- docs/articles/maturity-model.html | 2 +- docs/articles/plotting.html | 4 ++-- docs/index.html | 8 ++++---- docs/pkgdown.yml | 2 +- docs/reference/coef.modeler.html | 4 ++-- docs/reference/confint.modeler.html | 4 ++-- docs/reference/explorer.html | 2 +- .../figures/README_unnamed-chunk-6-1.png | Bin 33793 -> 33804 bytes docs/reference/metrics.html | 6 +++--- docs/reference/modeler-1.png | Bin 36158 -> 36545 bytes docs/reference/modeler.html | 10 +++++----- docs/reference/plot.modeler.html | 4 ++-- docs/reference/predict.modeler.html | 4 ++-- docs/reference/print.modeler.html | 4 ++-- docs/reference/vcov.modeler.html | 4 ++-- docs/search.json | 2 +- man/figures/README_unnamed-chunk-6-1.png | Bin 33793 -> 33804 bytes 25 files changed, 55 insertions(+), 51 deletions(-) diff --git a/R/01_read.R b/R/01_read.R index 59e91c0..941eca2 100644 --- a/R/01_read.R +++ b/R/01_read.R @@ -104,7 +104,8 @@ explorer <- function(data, x, y, id, metadata) { summ_metadata = resum, locals_min_max = max_min, dt_long = dt_long, - metadata = .keep + metadata = .keep, + x_var = x ) class(out) <- "explorer" return(out) diff --git a/R/02_modeler.R b/R/02_modeler.R index 4aea43c..3296c0e 100644 --- a/R/02_modeler.R +++ b/R/02_modeler.R @@ -291,6 +291,7 @@ modeler <- function(data, metrics = metrics, execution = end_time - init_time, response = variable, + x_var = x$x_var, keep = .keep, fun = fn, parallel = list("parallel" = parallel, "workers" = workers), diff --git a/R/utils_S3_print.R b/R/utils_S3_print.R index f3b2f1f..9566a6b 100644 --- a/R/utils_S3_print.R +++ b/R/utils_S3_print.R @@ -27,13 +27,14 @@ #' add_zero = TRUE, #' max_as_last = TRUE #' ) -#' plot(mod_1, id = c(1:5)) +#' plot(mod_1, id = c(1:4)) #' print(mod_1) print.modeler <- function(x, ...) { param <- select(x$param, -all_of(x$keep)) trait <- unique(x$dt$var) + chr <- paste(trait, "~", deparse(x$fn)) cat("\nCall:\n") - cat(paste(trait, "~", deparse(x$fn)), "\n") + cat(sub("x", replacement = x$x_var, x = chr, fixed = TRUE), "\n") cat("\n") if (nrow(param) == 1) { cat("Residuals:\n") diff --git a/README.Rmd b/README.Rmd index c87d0cf..7094043 100644 --- a/README.Rmd +++ b/README.Rmd @@ -37,7 +37,7 @@ 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, supporting robust conclusions and interpretations. +* Statistical Rigor: Offers standard errors and p-values for coefficients, as well as for predictions, supporting robust conclusions and interpretations. * Prediction: Facilitates the prediction of non-observed data points. * 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. diff --git a/README.md b/README.md index d82d57c..cd9ba49 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ devtools::install_github("AparicioJohan/flexFitR") - 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, supporting robust conclusions and interpretations. + coefficients, as well as for predictions, supporting robust + conclusions and interpretations. - Prediction: Facilitates the prediction of non-observed data points. - Flexibility: Allows users to fix certain parameters in the model and specify different initial values per grouping factor. @@ -85,7 +86,7 @@ mod_1 <- dt |> print(mod_1) Call: -variable ~ fun(x, t1, t2, k) +variable ~ fun(time, t1, t2, k) Residuals: Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -96,8 +97,8 @@ Optimization Results `head()`: 1 38.6 61 99.8 0.449 Metrics: - Groups Timing Convergence Iterations - 1 0.4068 secs 100% 511 (id) + Groups Timing Convergence Iterations + 1 0.354 secs 100% 511 (id) ``` ``` r diff --git a/docs/articles/canopy-model.html b/docs/articles/canopy-model.html index eb5bd58..85e531d 100644 --- a/docs/articles/canopy-model.html +++ b/docs/articles/canopy-model.html @@ -102,7 +102,7 @@

Exploring data explorer()
 names(explorer)
 #> [1] "summ_vars"      "summ_metadata"  "locals_min_max" "dt_long"       
-#> [5] "metadata"
+#> [5] "metadata" "x_var" +#> 2 0.8897 secs 100% 547 (id)
 plot(mod_1, id = c(195, 40))

plot fit

diff --git a/docs/articles/height-model.html b/docs/articles/height-model.html index aea1607..f85a8aa 100644 --- a/docs/articles/height-model.html +++ b/docs/articles/height-model.html @@ -102,7 +102,7 @@

Exploring data explorer()
 names(results)
 #> [1] "summ_vars"      "summ_metadata"  "locals_min_max" "dt_long"       
-#> [5] "metadata"
+#> [5] "metadata" "x_var"

Data exploration diff --git a/docs/articles/how_to_start.html b/docs/articles/how_to_start.html index f326492..2c84a53 100644 --- a/docs/articles/how_to_start.html +++ b/docs/articles/how_to_start.html @@ -135,7 +135,7 @@

1. Simple linear regressionmod #> #> Call: -#> Y ~ fn_lm(x, b, m) +#> Y ~ fn_lm(X, b, m) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -147,7 +147,7 @@

1. Simple linear regression#> #> Metrics: #> Groups Timing Convergence Iterations -#> 1 0.3649 secs 100% 259 (id)

+#> 1 0.3956 secs 100% 259 (id)

Once the model is fitted, we can examine the output, extract the estimated parameters, make some plots, and predict new x values.

+#> 1 0.4419 secs 100% 511 (id)

After fitting the model, we can examine the results, plot the fitted curve, extract the coefficients and their associated p-values, obtain the variance-covariance matrix, and make predictions for unknown values @@ -340,7 +340,7 @@

Providing Initial valuesmod_2 #> #> Call: -#> variable ~ fun(x, t1, t2, k) +#> variable ~ fun(time, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -352,7 +352,7 @@

Providing Initial values#> #> Metrics: #> Groups Timing Convergence Iterations -#> 1 0.4342 secs 100% 567 (id) +#> 1 0.4397 secs 100% 567 (id) coef(mod_2) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` @@ -378,7 +378,7 @@

Fixing parametersmod_3 #> #> Call: -#> variable ~ fun(x, t1, t2, k) +#> variable ~ fun(time, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -389,8 +389,8 @@

Fixing parameters#> 1 38.6 60.6 13.6 98 #> #> Metrics: -#> Groups Timing Convergence Iterations -#> 1 0.427 secs 100% 321 (id) +#> Groups Timing Convergence Iterations +#> 1 0.4103 secs 100% 321 (id) coef(mod_3) #> # A tibble: 2 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` diff --git a/docs/articles/maturity-model.html b/docs/articles/maturity-model.html index 5525bb0..9bbce74 100644 --- a/docs/articles/maturity-model.html +++ b/docs/articles/maturity-model.html @@ -102,7 +102,7 @@

Exploring data explorer()
 names(results)
 #> [1] "summ_vars"      "summ_metadata"  "locals_min_max" "dt_long"       
-#> [5] "metadata"
+#> [5] "metadata" "x_var"

Data exploration diff --git a/docs/articles/plotting.html b/docs/articles/plotting.html index 597fc20..32a5ac9 100644 --- a/docs/articles/plotting.html +++ b/docs/articles/plotting.html @@ -114,7 +114,7 @@

Expectation function and modelingmod #> #> Call: -#> variable ~ fn(x, t0, t1, t2) +#> variable ~ fn(time, t0, t1, t2) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -126,7 +126,7 @@

Expectation function and modeling#> #> Metrics: #> Groups Timing Convergence Iterations -#> 1 0.3531 secs 100% 334 (id)

+#> 1 0.3975 secs 100% 334 (id)

Plotting predictions and derivatives diff --git a/docs/index.html b/docs/index.html index 9f5090c..f88b852 100644 --- a/docs/index.html +++ b/docs/index.html @@ -95,7 +95,7 @@

FeaturesParameter 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, supporting robust conclusions and interpretations.
  • +
  • Statistical Rigor: Offers standard errors and p-values for coefficients, as well as for predictions, supporting robust conclusions and interpretations.
  • Prediction: Facilitates the prediction of non-observed data points.
  • 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.
  • @@ -137,7 +137,7 @@

    Example
    print(mod_1)
     
     Call:
    -variable ~ fun(x, t1, t2, k) 
    +variable ~ fun(time, t1, t2, k) 
     
     Residuals:
        Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    @@ -148,8 +148,8 @@ 

    Example 1 38.6 61 99.8 0.449 Metrics: - Groups Timing Convergence Iterations - 1 0.4068 secs 100% 511 (id)

    + Groups Timing Convergence Iterations + 1 0.354 secs 100% 511 (id)
     # Auto plot
     plot(mod_1)
    diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 549c89c..b16ca18 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,7 +7,7 @@ articles: how_to_start: how_to_start.html maturity-model: maturity-model.html plotting: plotting.html -last_built: 2024-10-07T15:34Z +last_built: 2024-10-07T16:06Z urls: reference: https://apariciojohan.github.io/flexFitR/reference article: https://apariciojohan.github.io/flexFitR/articles diff --git a/docs/reference/coef.modeler.html b/docs/reference/coef.modeler.html index 4b54bbd..7a791e3 100644 --- a/docs/reference/coef.modeler.html +++ b/docs/reference/coef.modeler.html @@ -112,7 +112,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -126,7 +126,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 3 1.3482 secs 100% 414 (id) +#> 3 1.3272 secs 100% 414 (id) #> coef(mod_1, id = 2) #> # A tibble: 3 × 6 diff --git a/docs/reference/confint.modeler.html b/docs/reference/confint.modeler.html index 29ef292..7d4afb6 100644 --- a/docs/reference/confint.modeler.html +++ b/docs/reference/confint.modeler.html @@ -117,7 +117,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -131,7 +131,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 3 1.9365 secs 100% 410 (id) +#> 3 1.8792 secs 100% 410 (id) #> confint(mod_1) #> # A tibble: 9 × 6 diff --git a/docs/reference/explorer.html b/docs/reference/explorer.html index d91909a..7caa0e0 100644 --- a/docs/reference/explorer.html +++ b/docs/reference/explorer.html @@ -117,7 +117,7 @@

    Examples ) names(results) #> [1] "summ_vars" "summ_metadata" "locals_min_max" "dt_long" -#> [5] "metadata" +#> [5] "metadata" "x_var" head(results$summ_vars) #> # A tibble: 6 × 12 #> var x Min Mean Median Max SD CV n miss `miss%` diff --git a/docs/reference/figures/README_unnamed-chunk-6-1.png b/docs/reference/figures/README_unnamed-chunk-6-1.png index e3dff33c526ca0fb4127a6c6fcb4ce8c70620850..f6d2a7f99f12c88a1986c8d098dbbb15914768d2 100644 GIT binary patch literal 33804 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 z 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 K<`;F#KmP~dd1&hZ literal 33793 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 XT_5Rp)US*H>BhO=4E1s`_`ClEm3TVl diff --git a/docs/reference/metrics.html b/docs/reference/metrics.html index a0186f4..89f705f 100644 --- a/docs/reference/metrics.html +++ b/docs/reference/metrics.html @@ -112,7 +112,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -124,8 +124,8 @@

    Examples#> 2 35.2 60.7 100.0 7.014 #> #> Metrics: -#> Groups Timing Convergence Iterations -#> 2 0.951 secs 100% 469 (id) +#> Groups Timing Convergence Iterations +#> 2 0.9623 secs 100% 469 (id) #> metrics(mod_1) #> # A tibble: 2 × 8 diff --git a/docs/reference/modeler-1.png b/docs/reference/modeler-1.png index 9f6cbcc0b245df6242aef70436cfd6047bb06176..381f146d1fa32c9bce4535e8af5a2f4e940ed2c8 100644 GIT binary patch literal 36545 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 G&;J9`3KK^F literal 36158 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 diff --git a/docs/reference/modeler.html b/docs/reference/modeler.html index 6c3b2e5..e46a967 100644 --- a/docs/reference/modeler.html +++ b/docs/reference/modeler.html @@ -220,7 +220,7 @@

    Examples#> 195 39.6 68.3 93.3 0.323 -0.01 0.000149 #> #> Metrics: -#> Groups Timing Convergence Iterations -#> 1 0.8988 secs 100% 901 (id) +#> Groups Timing Convergence Iterations +#> 1 0.863 secs 100% 901 (id) #> # Example 2 mod_2 <- dt_potato |> @@ -251,7 +251,7 @@

    Examplesprint(mod_2) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -263,7 +263,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 1 0.5793 secs 100% 349 (id) +#> 1 0.5927 secs 100% 349 (id) #> diff --git a/docs/reference/plot.modeler.html b/docs/reference/plot.modeler.html index e3d2089..56e0b84 100644 --- a/docs/reference/plot.modeler.html +++ b/docs/reference/plot.modeler.html @@ -175,7 +175,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -189,7 +189,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 3 1.4357 secs 100% 499.67 (id) +#> 3 1.4336 secs 100% 499.67 (id) #> plot(mod_1, id = 1:2) diff --git a/docs/reference/predict.modeler.html b/docs/reference/predict.modeler.html index 5af3808..d1eb8a1 100644 --- a/docs/reference/predict.modeler.html +++ b/docs/reference/predict.modeler.html @@ -156,7 +156,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -170,7 +170,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 3 1.3572 secs 100% 414 (id) +#> 3 1.3612 secs 100% 414 (id) #> # Point Prediction predict(mod_1, x = 45, type = "point", id = 2) diff --git a/docs/reference/print.modeler.html b/docs/reference/print.modeler.html index 579e99a..5642c7e 100644 --- a/docs/reference/print.modeler.html +++ b/docs/reference/print.modeler.html @@ -100,7 +100,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -115,7 +115,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 5 2.3763 secs 100% 435.2 (id) +#> 5 2.2439 secs 100% 435.2 (id) #> diff --git a/docs/reference/vcov.modeler.html b/docs/reference/vcov.modeler.html index b207aa6..da231ad 100644 --- a/docs/reference/vcov.modeler.html +++ b/docs/reference/vcov.modeler.html @@ -106,7 +106,7 @@

    Examplesprint(mod_1) #> #> Call: -#> Canopy ~ fn_piwise(x, t1, t2, k) +#> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -120,7 +120,7 @@

    Examples#> #> Metrics: #> Groups Timing Convergence Iterations -#> 3 1.3307 secs 100% 414 (id) +#> 3 1.3474 secs 100% 414 (id) #> vcov(mod_1) #> $`2` diff --git a/docs/search.json b/docs/search.json index 75f69b6..d5471ce 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -[{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Emergence and Maximun Canopy","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Emergence and Maximun Canopy","text":"","code":"data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = Canopy, id = Plot) names(explorer) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Emergence and Maximun Canopy","text":"","code":"p1 <- plot(explorer, type = \"evolution\", return_gg = TRUE) p2 <- plot(explorer, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"target-function","dir":"Articles","previous_headings":"","what":"Target Function","title":"Modelling Emergence and Maximun Canopy","text":"fn_piwise() \\[\\begin{equation} f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"fitting-models","dir":"Articles","previous_headings":"","what":"Fitting Models","title":"Modelling Emergence and Maximun Canopy","text":"","code":"mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(195, 40), add_zero = TRUE ) mod_1 #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 390.5 1004.2 1618.0 1618.0 2231.8 2845.5 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 40 34.8 53.7 72.5 2846 #> 195 38.7 60.0 91.7 390 #> #> Metrics: #> Groups Timing Convergence Iterations #> 2 0.8683 secs 100% 547 (id) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"providing-different-initial-values","dir":"Articles","previous_headings":"","what":"Providing different initial values","title":"Modelling Emergence and Maximun Canopy","text":"","code":"initials <- data.frame( uid = c(195, 40), t1 = c(70, 60), t2 = c(40, 80), k = c(100, 100) ) kable(initials) mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = initials, subset = c(195, 40), add_zero = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"fixing-some-parameters-of-the-model","dir":"Articles","previous_headings":"","what":"Fixing some parameters of the model","title":"Modelling Emergence and Maximun Canopy","text":"","code":"fixed_params <- data.frame(uid = c(195, 40), k = c(100, 100)) kable(fixed_params) mod_3 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE ) plot(mod_3, id = c(195, 40)) kable(mod_3$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"correcting-maximun-value","dir":"Articles","previous_headings":"","what":"Correcting Maximun value","title":"Modelling Emergence and Maximun Canopy","text":"","code":"mod_4 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_4, id = c(195, 40)) kable(mod_4$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"comparing-models","dir":"Articles","previous_headings":"","what":"Comparing Models","title":"Modelling Emergence and Maximun Canopy","text":"","code":"rbind.data.frame( mutate(mod_1$param, model = \"1\", .before = uid), mutate(mod_2$param, model = \"2\", .before = uid), mutate(mod_3$param, model = \"3\", .before = uid), mutate(mod_4$param, model = \"4\", .before = uid) ) |> filter(uid %in% 195) |> kable()"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Plant Height","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Plant Height","text":"","code":"data(dt_chips) results <- explorer(dt_chips, x = DAP, y = c(PH, Canopy), id = Plot) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Plant Height","text":"","code":"p1 <- plot(results, type = \"evolution\", return_gg = TRUE) p2 <- plot(results, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2, nrow = 2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"estimating-days-to-emergence","dir":"Articles","previous_headings":"","what":"Estimating days to emergence","title":"Modelling Plant Height","text":"\\[\\begin{equation} f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fitting-models-for-canopy","dir":"Articles","previous_headings":"","what":"Fitting models for canopy","title":"Modelling Plant Height","text":"","code":"fixed_params <- data.frame(uid = c(195, 40), k = c(100, 100)) mod_1 <- dt_chips |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"target-function-for-plant-height","dir":"Articles","previous_headings":"","what":"Target function for plant height","title":"Modelling Plant Height","text":"fn_exp2_exp() \\[\\begin{equation} f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fixing-parameters-and-providing-initial-values","dir":"Articles","previous_headings":"","what":"Fixing parameters and providing initial values","title":"Modelling Plant Height","text":"","code":"fixed_params <- mod_1 |> pluck(\"param\") |> select(uid, t1) kable(fixed_params) initials <- mod_1 |> pluck(\"param\") |> select(uid, t1, t2) |> mutate(alpha = 1 / 600, beta = -1 / 30) kable(initials)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fitting-models-for-plant-height","dir":"Articles","previous_headings":"","what":"Fitting models for plant height","title":"Modelling Plant Height","text":"Using t1 previous model fixed parameter using t2 initial parameter per plot.","code":"mod_2 <- dt_chips |> modeler( x = DAP, y = PH, grp = Plot, fn = \"fn_exp2_exp\", parameters = initials, fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"getting-started","dir":"Articles","previous_headings":"","what":"Getting started","title":"How to start","text":"basic idea vignette illustrate users use flexFitR package. ’ll start basic example: simple linear regression. Although example primary focus package, serve demonstrate use.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"simple-linear-regression","dir":"Articles","previous_headings":"","what":"1. Simple linear regression","title":"How to start","text":"example, ’ll work small dataset consisting 6 observations, X independent variable Y dependent variable. First, define objective function. case, function fn_lm represent linear regression, b intercept m slope regression. plot_fn function, integrated package, allows us plot function parameters provided. useful visualizing shape function fitting model data. fit model, use modeler function. function, pass x independent variable, y dependent variable, vector parameters assign initial values coefficient b coefficient m. model fitted, can examine output, extract estimated parameters, make plots, predict new x values. order get coefficients variance-covariance matrix make use coef vcov function, takes model object argument. Finally, can make predictions using predict function, takes fitted model object X value want make prediction. can compare lm function R, give results similar obtained package.","code":"library(flexFitR) library(dplyr) library(ggpubr) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) plot(explorer(dt, X, Y), type = \"xy\") fn_lm <- function(x, b, m) { y <- b + m * x return(y) } plot_fn(fn = \"fn_lm\", params = c(b = 10, m = 5)) mod <- dt |> modeler( x = X, y = Y, fn = \"fn_lm\", parameters = c(b = -5, m = 10) ) mod #> #> Call: #> Y ~ fn_lm(x, b, m) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -12.5905 -6.0762 -0.3476 0.0000 6.1952 12.8952 #> #> Optimization Results `head()`: #> uid b m sse #> 1 -15.5 19.5 449 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.3649 secs 100% 259 (id) a <- plot(mod, color = \"blue\", title = \"Raw data\") b <- plot(mod, type = 4, n_points = 200, color = \"black\") ggarrange(a, b) coef(mod) #> # A tibble: 2 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 1 b -15.5 9.86 -1.57 0.192 #> 2 1 m 19.5 2.53 7.71 0.00152 vcov(mod) #> $`1` #> b m #> b 97.21937 -22.435238 #> m -22.43524 6.410068 predict(mod, x = 4.5) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 1 4.5 72.3 5.01"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"comparison-with-lm","dir":"Articles","previous_headings":"1. Simple linear regression","what":"Comparison with lm","title":"How to start","text":"previous example fairly simple, can consider complex scenario need fit just one function, hundreds functions several groups. can achieved using grp argument modeler function. Additionally, can parallelize processes setting parallel argument TRUE defining number cores use. ’s important note depending functions defined user, parameters may need constrained, required greater less zero. cases, certain parameters might need fixed known values. complex situations, many curves fit working complex functions—whether non linear regressions specific parameter constraints cases parameters fixed group—modeler offers extensive flexibility.","code":"mo <- lm(Y ~ X, data = dt) summary(mo)$coefficients #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) -15.46667 9.859988 -1.568629 0.191812151 #> X 19.51429 2.531811 7.707639 0.001524882 vcov(mo) #> (Intercept) X #> (Intercept) 97.21937 -22.435238 #> X -22.43524 6.410068 predict(mo, newdata = data.frame(X = 4.5), se.fit = TRUE) #> $fit #> 1 #> 72.34762 #> #> $se.fit #> [1] 5.010599 #> #> $df #> [1] 4 #> #> $residual.scale #> [1] 10.59133"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"piece-wise-regression","dir":"Articles","previous_headings":"","what":"2. Piece-wise regression","title":"How to start","text":"following example, although still simple, represents slightly complex function greater number parameters. case, piece-wise regression, parameterized t1, t2, k, defined following expression: fitting model, let’s take look example dataset. can make plot piecewise function fit model using modeler function. fitting model, can examine results, plot fitted curve, extract coefficients associated p-values, obtain variance-covariance matrix, make predictions unknown values x. Finally, illustrate provide different initial values function dealing multiple groups, also show fix parameters objective function.","code":"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) } 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\") plot_fn(fn = \"fun\", params = c(t1 = 25, t2 = 70, k = 90)) mod_1 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = c(t1 = 45, t2 = 80, k = 90) ) mod_1 #> #> Call: #> variable ~ fun(x, 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.4007 secs 100% 511 (id) plot(mod_1) # Coefficients coef(mod_1) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 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 #> #> 1 1 45 28.5 0.223"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"providing-initial-values","dir":"Articles","previous_headings":"2. Piece-wise regression","what":"Providing Initial values","title":"How to start","text":"example, don’t grouping variable. However, default, function assigns unique identifier (uid) dataset. , need specify uid = 1 initial values fixed parameters. one group, need modify parameters argument accordingly. approach primarily illustrative purposes.","code":"init <- data.frame(uid = 1, t1 = 20, t2 = 30, k = 0.8) mod_2 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = init ) mod_2 #> #> Call: #> variable ~ fun(x, 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.4342 secs 100% 567 (id) coef(mod_2) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 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"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"fixing-parameters","dir":"Articles","previous_headings":"2. Piece-wise regression","what":"Fixing parameters","title":"How to start","text":"vignette provided basic introduction using flexFitR package, starting simple examples linear regression piecewise regression. goal demonstrate fundamental features flexibility package. However, complex situations can arise working high-throughput phenotypic (HTP) data, involve multiple groups, parameter constraints, advanced modeling scenarios. complex situations illustrated vignettes, use real HTP data showcase full capabilities flexFitR package.","code":"fix <- data.frame(uid = 1, k = 98) mod_3 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = c(t1 = 45, t2 = 80, k = 90), fixed_params = fix ) mod_3 #> #> Call: #> variable ~ fun(x, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.0000 0.0000 0.6700 0.8789 1.8100 1.8100 #> #> Optimization Results `head()`: #> uid t1 t2 sse k #> 1 38.6 60.6 13.6 98 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.427 secs 100% 321 (id) coef(mod_3) #> # A tibble: 2 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 1 t1 38.6 0.396 97.5 3.15e-12 #> 2 1 t2 60.6 0.429 141. 2.34e-13 plot(mod_3) rbind(metrics(mod_1), metrics(mod_2), metrics(mod_3)) #> # A tibble: 3 × 8 #> uid var SSE MAE MSE RMSE r_squared n #> #> 1 1 variable 0.449 0.0744 0.0499 0.223 1.00 9 #> 2 1 variable 0.449 0.0744 0.0499 0.223 1.00 9 #> 3 1 variable 13.6 0.879 1.51 1.23 0.999 9"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Maturity","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Maturity","text":"","code":"data(dt_potato) results <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Maturity","text":"","code":"p1 <- plot(results, type = \"evolution\", return_gg = TRUE) p2 <- plot(results, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2, nrow = 2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"target-function-for-maturity","dir":"Articles","previous_headings":"","what":"Target function for maturity","title":"Modelling Maturity","text":"fn_lin_pl_lin() \\[\\begin{equation} f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"fitting-models-for-maturity","dir":"Articles","previous_headings":"","what":"Fitting models for maturity","title":"Modelling Maturity","text":"","code":"mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = c(195, 40), add_zero = TRUE ) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"fixing-parameters-from-the-canopy-model","dir":"Articles","previous_headings":"","what":"Fixing parameters from the canopy model","title":"Modelling Maturity","text":"","code":"fixed_params <- results |> pluck(\"dt_long\") |> filter(var %in% \"Canopy\" & uid %in% c(195, 40)) |> group_by(uid) |> summarise(k = max(y), .groups = \"drop\") mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"passing-initial-values","dir":"Articles","previous_headings":"","what":"Passing initial values","title":"Modelling Maturity","text":"","code":"initials <- mod_2 |> pluck(\"param\") |> select(uid, t1, t2) |> mutate(t3 = 100, k = 0.32, beta = -0.01) kable(initials) mod_3 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = initials, subset = c(195, 40), add_zero = TRUE ) plot(mod_3, id = c(195, 40)) kable(mod_3$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"adding-constrains-to-the-optimization","dir":"Articles","previous_headings":"","what":"Adding constrains to the optimization","title":"Modelling Maturity","text":"","code":"mod_4 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin2\", parameters = c(t1 = 38.7, t2 = 62, dt = 28, k = 0.32, beta = -0.01), lower = c(-Inf, -Inf, 0, -Inf, -Inf), upper = c(Inf, Inf, Inf, Inf, 0), method = c(\"nlminb\", \"L-BFGS-B\"), subset = c(195, 40), add_zero = TRUE ) plot(mod_4, id = c(195, 40)) kable(mod_4$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"example-dataset-and-loading-libraries","dir":"Articles","previous_headings":"","what":"Example dataset and loading libraries","title":"Plotting Options","text":"","code":"library(flexFitR) library(dplyr) library(ggpubr) set.seed(10) 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) ) |> mutate(variable = variable + rnorm(n = n(), mean = 5, sd = 6))"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"expectation-function-and-modeling","dir":"Articles","previous_headings":"","what":"Expectation function and modeling","title":"Plotting Options","text":"","code":"fn <- function(t, t0, t1, t2) t0 / (1 + exp((t1 - t) / t2)) mod <- dt |> modeler( x = time, y = variable, fn = \"fn\", parameters = c(t0 = 100, t1 = 50, t2 = 5) ) mod #> #> Call: #> variable ~ fn(x, t0, t1, t2) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -6.1496 -2.9462 2.1181 0.4716 3.2479 6.7654 #> #> Optimization Results `head()`: #> uid t0 t1 t2 sse #> 1 101 49.2 4.01 169 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.3531 secs 100% 334 (id)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"plotting-predictions-and-derivatives","dir":"Articles","previous_headings":"","what":"Plotting predictions and derivatives","title":"Plotting Options","text":"","code":"a <- plot(mod, color = \"blue\", title = \"Raw data\") b <- plot(mod, type = 4, n_points = 200, color = \"black\") c <- plot(mod, type = 5, n_points = 200, color = \"black\") d <- plot(mod, type = 6, n_points = 200, color = \"black\") ggarrange(a, b, c, d)"},{"path":"https://apariciojohan.github.io/flexFitR/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Johan Aparicio. Author, maintainer. Jeffrey Endelman. Author. University Wisconsin Madison. Copyright holder.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Aparicio J, Endelman J (2024). flexFitR: Flexible Non-Linear Least Square Modelling. R package version 0.1.0, https://github.com/AparicioJohan/flexFitR, https://apariciojohan.github.io/flexFitR/.","code":"@Manual{, title = {flexFitR: Flexible Non-Linear Least Square Modelling}, author = {Johan Aparicio and Jeffrey Endelman}, year = {2024}, note = {R package version 0.1.0, https://github.com/AparicioJohan/flexFitR}, url = {https://apariciojohan.github.io/flexFitR/}, }"},{"path":[]},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement johanstevenapa@gmail.com. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"flexfitr-","dir":"","previous_headings":"","what":"Flexible Non-Linear Least Square Modelling","title":"Flexible Non-Linear Least Square Modelling","text":"flexFitR R package designed efficient modeling analysis large complex datasets. offers powerful tools parameter estimation, model fitting, visualization, leveraging {optimx} package optimization future package parallel processing.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Flexible Non-Linear Least Square Modelling","text":"can install development version flexFitR GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"AparicioJohan/flexFitR\")"},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"features","dir":"","previous_headings":"","what":"Features","title":"Flexible Non-Linear Least Square Modelling","text":"Parameter Estimation: Utilizes {optimx} derivative-free algorithms solve estimate parameters given function. Parallelization: Implements parallel processing using future package, enabling efficient fitting hundreds curves simultaneously. Visualization Tools: Provides variety plots visualize model fits, correlations, predictions, . Statistical Rigor: Offers standard errors p-values coefficients, supporting robust conclusions interpretations. Prediction: Facilitates prediction non-observed data points. Flexibility: Allows users fix certain parameters model specify different initial values per grouping factor. Custom Modeling Functions: Equipped built-modeling functions common analysis tasks, also permitting users supply custom functions.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"example","dir":"","previous_headings":"","what":"Example","title":"Flexible Non-Linear Least Square Modelling","text":"’s simple example get started flexFitR. example demonstrates fitting piecewise regression model:","code":"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(x, 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.4068 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|)` 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 1 1 45 28.5 0.223"},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"Flexible Non-Linear Least Square Modelling","text":"detailed documentation examples, visit flexFitR Vignette 1: start Vignette 2: Modeling Canopy Vignette 3: Modeling Plant Height Vignette 4: Modeling VIs","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"contributing","dir":"","previous_headings":"","what":"Contributing","title":"Flexible Non-Linear Least Square Modelling","text":"Contributions flexFitR welcome! ’d like contribute, please fork repository submit pull request. significant changes, please open issue first discuss ideas.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Flexible Non-Linear Least Square Modelling","text":"Please note flexFitR project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"Flexible Non-Linear Least Square Modelling","text":"flexFitR licensed MIT License. See LICENSE file details.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2024 flexFitR authors Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"Perform extra sum--squares F-test compare two nested models class modeler. test assesses whether additional parameters full model significantly improve fit compared reduced model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"","code":"# S3 method for class 'modeler' anova(reduced_model, full_model = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"reduced_model object class modeler representing reduced model fewer parameters. full_model optional object class modeler representing full model parameters. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"tibble containing columns F-statistic corresponding p-values, indicating whether full model provides significantly better fit reduced model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) #> Loading required package: foreach #> Loading required package: future plot(mo_1) mo_2 <- modeler(dt, X, Y, fn = \"fn_quad\", param = c(a = 1, b = 10, c = 5)) plot(mo_2) anova(mo_1, mo_2) #> # A tibble: 1 × 9 #> uid RSS_reduced RSS_full n df1 df2 F `Pr(>F)` . #> #> 1 1 449. 385. 6 1 3 0.494 0.533 ns"},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficients of a Modeler Object — coef.modeler","title":"Coefficients of a Modeler Object — coef.modeler","text":"Extract estimated coefficients object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficients of a Modeler Object — coef.modeler","text":"","code":"# S3 method for class 'modeler' coef(x, id = NULL, metadata = FALSE, df = FALSE, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficients of a Modeler Object — coef.modeler","text":"x object class modeler, typically result calling modeler() function. id optional unique identifier filter specific group. Default NULL. metadata Logical. TRUE, metadata included along coefficients. Default FALSE. df Logical. TRUE, degrees freedom fitted model returned alongside coefficients. Default FALSE. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficients of a Modeler Object — coef.modeler","text":"data.frame containing model's estimated coefficients, standard errors, optional metadata degrees freedom specified.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficients of a Modeler Object — coef.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficients of a Modeler Object — coef.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3482 secs 100% 414 (id) #> coef(mod_1, id = 2) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 2 t1 35.2 0.239 147. 6.57e-12 #> 2 2 t2 60.7 0.371 164. 3.53e-12 #> 3 2 k 100. 0.541 185. 1.68e-12"},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence Intervals for a modeler Object — confint.modeler","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"Extract confidence intervals estimated parameters object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"","code":"# S3 method for class 'modeler' confint(x, parm = NULL, level = 0.95, id = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"x object class modeler, typically result calling modeler() function. parm character vector specifying parameters confidence intervals calculated. NULL, confidence intervals parameters returned. Default NULL. level numeric value indicating confidence level intervals. Default 0.95, corresponding 95% confidence interval. id optional unique identifier filter specific group. Default NULL. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"tibble containing lower upper confidence limits specified parameter.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 35, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 0.968957 1.452134 1.897212 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 15 38.5 69.4 99.8 1.0071 #> 35 52.2 61.4 100.0 1.8972 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.9365 secs 100% 410 (id) #> confint(mod_1) #> # A tibble: 9 × 6 #> uid coefficient solution std.error ci_lower ci_upper #> #> 1 15 t1 38.5 0.162 38.1 38.8 #> 2 15 t2 69.4 0.283 68.7 70.1 #> 3 15 k 99.8 0.205 99.3 100. #> 4 35 t1 52.2 2.00 47.3 57.1 #> 5 35 t2 61.4 2.87 54.4 68.5 #> 6 35 k 100. 0.281 99.3 101. #> 7 45 t1 38.3 0.00704 38.3 38.3 #> 8 45 t2 64.5 0.00972 64.4 64.5 #> 9 45 k 100. 0.0104 100. 100."},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":null,"dir":"Reference","previous_headings":"","what":"General-purpose optimization — .fitter_curve","title":"General-purpose optimization — .fitter_curve","text":"function .fitter_curve used internally find parameters requested.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General-purpose optimization — .fitter_curve","text":"","code":".fitter_curve(data, id, fn, method, lower, upper, control, .keep)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"General-purpose optimization — .fitter_curve","text":"data nested data.frame columns . id optional vector IDs filter data. Default NULL, meaning ids used. fn string specifying name function used curve fitting. Default \"fn_piwise\". method character vector specifying optimization methods used. See optimx package available methods. Default c(\"subplex\", \"pracmanm\", \"anms\"). lower Numeric vector specifying lower bounds parameters. Default -Inf parameters. upper Numeric vector specifying upper bounds parameters. Default Inf parameters. control list control parameters passed optimization function. example, list(maxit = 500).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"General-purpose optimization — .fitter_curve","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = 195, add_zero = TRUE )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":null,"dir":"Reference","previous_headings":"","what":"Drone Data in Potato 2022 — dt_chips","title":"Drone Data in Potato 2022 — dt_chips","text":"Vegetative indices biomass related traits potato trial arranged p-rep design.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Drone Data in Potato 2022 — dt_chips","text":"","code":"dt_chips"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Drone Data in Potato 2022 — dt_chips","text":"tibble 1568 rows 17 variables: Trial chr trial name DAP dbl denoting Days planting Plot dbl denoting unique plot id Row dbl denoting row coordinate Range dbl denoting range coordinate Gen chr denoting genotype id Yield dbl Total Yield measured end season VineMaturity dbl VineMaturity measure season Red - Canopy dbl denoting drone-derived traits","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Drone Data in Potato 2022 — dt_chips","text":"UW - Potato Breeding Program","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":null,"dir":"Reference","previous_headings":"","what":"Drone Data in Potato 2020 — dt_potato","title":"Drone Data in Potato 2020 — dt_potato","text":"Vegetative indices biomass related traits potato trial arranged p-rep design.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Drone Data in Potato 2020 — dt_potato","text":"","code":"dt_potato"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Drone Data in Potato 2020 — dt_potato","text":"tibble 1372 rows 17 variables: Trial chr trial name DAP dbl denoting Days planting Plot dbl denoting unique plot id Row dbl denoting row coordinate Range dbl denoting range coordinate Gen chr denoting genotype id Yield dbl Total Yield measured end season VineMaturity dbl VineMaturity measure season Red - Canopy dbl denoting drone-derived traits","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Drone Data in Potato 2020 — dt_potato","text":"UW - Potato Breeding Program","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":null,"dir":"Reference","previous_headings":"","what":"Explore Data — explorer","title":"Explore Data — explorer","text":"Explores data data frame wide format.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Explore Data — explorer","text":"","code":"explorer(data, x, y, id, metadata)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Explore Data — explorer","text":"data data.frame wide format containing data. x name column `data` contains x points. y names columns `data` contain variables analyzed. id names columns `data` contains grouping variable. metadata names columns `data` keep across analysis.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Explore Data — explorer","text":"object class explorer, list containing following elements: summ_vars data.frame containing summary statistics trait x point, including minimum, mean, median, maximum, standard deviation, coefficient variation, number non-missing values, percentage missing values, percentage negative values. summ_metadata data.frame summarizing metadata. locals_min_max data.frame containing local minima maxima mean y values x. dt_long data.frame long format, columns uid, metadata, var, x, y metadata character vector names variables keep across.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Explore Data — explorer","text":"function helps explore dataset analyzed modeler().","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Explore Data — explorer","text":"","code":"library(flexFitR) data(dt_potato) results <- dt_potato |> explorer( x = DAP, y = c(Canopy, PH), id = Plot, metadata = c(Gen, Row, Range) ) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\" head(results$summ_vars) #> # A tibble: 6 × 12 #> var x Min Mean Median Max SD CV n miss `miss%` #> #> 1 Canopy 29 0 0 0 0 0 NaN 196 0 0 #> 2 Canopy 36 0 2.95 1.84 15.1 3.22 1.09 196 0 0 #> 3 Canopy 42 0.763 23.4 22.9 46.2 9.31 0.398 196 0 0 #> 4 Canopy 56 33.4 75.8 75.2 98.9 12.4 0.164 196 0 0 #> 5 Canopy 76 89.1 99.7 100 100 1.04 0.0104 196 0 0 #> 6 Canopy 92 62.5 97.0 98.4 100. 4.36 0.0449 196 0 0 #> # ℹ 1 more variable: `neg%` plot(results, label_size = 4, signif = TRUE, n_row = 2) # New data format head(results$dt_long) #> # A tibble: 6 × 7 #> uid Gen Row Range var x y #> #> 1 1 W17037-24 1 1 Canopy 29 0 #> 2 1 W17037-24 1 1 PH 29 NA #> 3 1 W17037-24 1 1 Canopy 36 0.67 #> 4 1 W17037-24 1 1 PH 36 0.0154 #> 5 1 W17037-24 1 1 Canopy 42 15.1 #> 6 1 W17037-24 1 1 PH 42 0.0173"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Exponential Function 1 — fn_exp1_exp","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"Computes value based exponential growth curve exponential decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"","code":"fn_exp1_exp(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter first exponential term. Must greater 0. beta Numeric. parameter second exponential term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"numeric value based double exponential model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)) - 1. t greater t2, function returns (exp(alpha * (t2 - t1)) - 1) * exp(beta * (t - t2)).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp1_exp\", params = c(t1 = 35, t2 = 55, alpha = 1 / 20, beta = -1 / 30), interval = c(0, 108), n_points = 2000, auc_label_size = 3, y_auc_label = 0.2 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Linear Function 1 — fn_exp1_lin","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"Computes value based exponential growth curve linear decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"","code":"fn_exp1_lin(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter exponential term. Must greater 0. beta Numeric. parameter linear term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"numeric value based exponential linear model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)) - 1. t greater t2, function returns beta * (t - t2) + (exp(alpha * (t2 - t1)) - 1).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\beta \\cdot (t - t_2) + \\left(e^{\\alpha \\cdot (t_2 - t_1)} - 1\\right) & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp1_lin\", params = c(t1 = 35, t2 = 55, alpha = 1 / 20, beta = -1 / 40), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Exponential Function 2 — fn_exp2_exp","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"Computes value based exponential growth curve exponential decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"","code":"fn_exp2_exp(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter first exponential term. Must greater 0. beta Numeric. parameter second exponential term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"numeric value based double exponential model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)^2) - 1. t greater t2, function returns (exp(alpha * (t2 - t1)^2) - 1) * exp(beta * (t - t2)).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp2_exp\", params = c(t1 = 35, t2 = 55, alpha = 1 / 600, beta = -1 / 30), interval = c(0, 108), n_points = 2000, auc_label_size = 3, y_auc_label = 0.15 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Linear Function 2 — fn_exp2_lin","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"Computes value based exponential growth curve linear decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"","code":"fn_exp2_lin(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter exponential term. Must greater 0. beta Numeric. parameter linear term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"numeric value based exponential linear model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)^2) - 1. t greater t2, function returns beta * (t - t2) + (exp(alpha * (t2 - t1)^2) - 1).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\beta \\cdot (t - t_2) + \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp2_lin\", params = c(t1 = 35, t2 = 55, alpha = 1 / 600, beta = -1 / 80), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Function — fn_lin","title":"Linear Function — fn_lin","text":"Computes value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Function — fn_lin","text":"","code":"fn_lin(t, m, b)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Function — fn_lin","text":"t Numeric value. m Numeric value slope coefficient. b Numeric value intercept coefficient.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Function — fn_lin","text":"numeric value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Function — fn_lin","text":"$$ f(t; m, b) = m \\cdot t + b $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Function — fn_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin\", params = c(m = 2, b = 10), interval = c(0, 108), n_points = 2000 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear — fn_lin_pl_lin","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"Linear Plateau Linear","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"","code":"fn_lin_pl_lin(t, t1, t2, t3, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time plateau. Default 80. t3 Numeric. lower threshold time plateau. Default 45. k Numeric. maximum value function. Default 0.9. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"$$ f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin\", params = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"Linear Plateau Linear Constrains","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"","code":"fn_lin_pl_lin2(t, t1, t2, dt, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"t Numeric. time value. t1 Numeric. lower threshold time. t2 Numeric. upper threshold time plateau. dt Numeric. dt = t3 - t2. k Numeric. maximum value function. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"$$ f(t; t_1, t_2, dt, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq (t_2 + dt) \\\\ k + \\beta \\cdot (t - (t_2 + dt)) & \\text{} t > (t_2 + dt) \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin2\", params = c(t1 = 38.7, t2 = 62, dt = 28, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"Linear Plateau Linear Constrains","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"","code":"fn_lin_pl_lin3(t, t1, t2, t3, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time plateau. Default 80. t3 Numeric. lower threshold time plateau. Default 45. k Numeric. maximum value function. Default 0.9. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"$$ f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin3\", params = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":null,"dir":"Reference","previous_headings":"","what":"Piecewise Linear Regression — fn_piwise","title":"Piecewise Linear Regression — fn_piwise","text":"Computes value based linear growth curve reaching plateau time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Piecewise Linear Regression — fn_piwise","text":"","code":"fn_piwise(t, t1 = 45, t2 = 80, k = 0.9)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Piecewise Linear Regression — fn_piwise","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time. Default 80. k Numeric. maximum value function. Default 0.9. Assumed known.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Piecewise Linear Regression — fn_piwise","text":"numeric value based threshold model. t less t1, function returns 0. t t1 t2 (inclusive), function returns value 0 k linear trend. t greater t2, function returns k.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Piecewise Linear Regression — fn_piwise","text":"$$ f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Piecewise Linear Regression — fn_piwise","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":null,"dir":"Reference","previous_headings":"","what":"Quadratic Function — fn_quad","title":"Quadratic Function — fn_quad","text":"Computes value based quadratic function..","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quadratic Function — fn_quad","text":"","code":"fn_quad(t, a, b, c)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quadratic Function — fn_quad","text":"t Numeric value. Numeric value coefficient . b Numeric value coefficient b. c Numeric value coefficient c.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quadratic Function — fn_quad","text":"numeric value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Quadratic Function — fn_quad","text":"$$ f(t; , b, c) = \\cdot t^2 + b \\cdot t + c $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quadratic Function — fn_quad","text":"","code":"library(flexFitR) plot_fn(fn = \"fn_quad\", params = c(a = 1, b = 10, c = 5))"},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":null,"dir":"Reference","previous_headings":"","what":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"Generic function calculating Akaike's ‘Information Criterion’ fitted model object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"","code":"# S3 method for class 'modeler' AIC(object, ..., k = 2) # S3 method for class 'modeler' BIC(object, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"object object inheriting class modeler resulting executing function modeler() ... parameters. future improvements. k Numeric, penalty per parameter used; default k = 2 classical AIC.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"tibble columns giving corresponding AIC BIC.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) mo_2 <- modeler(dt, X, Y, fn = \"fn_quad\", param = c(a = 1, b = 10, c = 5)) AIC(mo_1) #> uid logLik df nobs p AIC #> 1 1 -21.45745 3 6 2 48.9149 AIC(mo_2) #> uid logLik df nobs p AIC #> 1 1 -21.00014 4 6 3 50.00028 BIC(mo_1) #> uid logLik df nobs p BIC #> 1 1 -21.45745 3 6 2 48.29017 BIC(mo_2) #> uid logLik df nobs p BIC #> 1 1 -21.00014 4 6 3 49.16732"},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"logLik object class modeler","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"","code":"# S3 method for class 'modeler' logLik(object, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"object object inheriting class modeler resulting executing function modeler() ... parameters. future improvements.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"tibble Log-Likelihood fitted models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) plot(mo_1) logLik(mo_1) #> uid logLik df nobs p #> 1 1 -21.45745 3 6 2"},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Metrics for modeler — metrics","title":"Metrics for modeler — metrics","text":"Computes various performance metrics modeler object. function calculates Sum Squared Errors (SSE), Mean Absolute Error (MAE), Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Coefficient Determination (R-squared).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Metrics for modeler — metrics","text":"","code":"metrics(x, by_grp = TRUE)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Metrics for modeler — metrics","text":"x object class `modeler` containing necessary data compute metrics. by_grp Return metrics id? TRUE default.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Metrics for modeler — metrics","text":"data frame containing calculated metrics grouped uid, metadata, variables.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Metrics for modeler — metrics","text":"Sum Squared Errors (SSE): $$SSE = \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2$$Mean Absolute Error (MAE): $$MAE = \\frac{1}{n} \\sum_{=1}^{n} |y_i - \\hat{y}_i|$$Mean Squared Error (MSE): $$MSE = \\frac{1}{n} \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2$$Root Mean Squared Error (RMSE): $$RMSE = \\sqrt{\\frac{1}{n} \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2}$$Coefficient Determination (R-squared): $$R^2 = 1 - \\frac{\\sum_{=1}^{n} (y_i - \\hat{y}_i)^2}{\\sum_{=1}^{n} (y_i - \\bar{y})^2}$$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Metrics for modeler — metrics","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:2), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(1:2)) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4489 2.0903 3.7317 3.7317 5.3731 7.0145 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 0.449 #> 2 35.2 60.7 100.0 7.014 #> #> Metrics: #> Groups Timing Convergence Iterations #> 2 0.951 secs 100% 469 (id) #> metrics(mod_1) #> # A tibble: 2 × 8 #> uid var SSE MAE MSE RMSE r_squared n #> #> 1 1 Canopy 0.449 0.0744 0.0499 0.223 1.00 9 #> 2 2 Canopy 7.01 0.468 0.779 0.883 1.00 9"},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Modeler — modeler","title":"Modeler — modeler","text":"General-purpose optimization techniques non-linear least squares problems.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Modeler — modeler","text":"","code":"modeler( data, x, y, grp, keep, fn = \"fn_piwise\", parameters = NULL, lower = -Inf, upper = Inf, fixed_params = NULL, method = c(\"subplex\", \"pracmanm\", \"anms\"), return_method = FALSE, subset = NULL, add_zero = FALSE, check_negative = FALSE, max_as_last = FALSE, progress = FALSE, parallel = FALSE, workers = max(1, parallel::detectCores(), na.rm = TRUE), control = list() )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Modeler — modeler","text":"data data.frame wide format. x name column `data` contains x points. y name column `data` contain variable analyzed. Must match var data. grp names columns `data` contains grouping variable. (Optional). keep names columns `data` keep across analysis. fn string specifying name function used curve fitting. Default \"fn_piwise\". parameters Can named numeric vector specifying initial values parameters optimized, data frame columns uid, initial parameter values group id. Used providing specific initial values per group id. Default NULL. lower Numeric vector specifying lower bounds parameters. Default -Inf parameters. upper Numeric vector specifying upper bounds parameters. Default Inf parameters. fixed_params data frame columns uid, fixed parameter values group id. Used fixing certain parameters optimization. method character vector specifying optimization methods used. Check `optimx::checkallsolvers()` available methods. Default c(\"subplex\", \"pracmanm\", \"anms\"). return_method Logical. TRUE, includes optimization method used result. Default FALSE. subset optional vector levels `grp` filter data. Default NULL, meaning groups used. add_zero Logical. TRUE, adds zero value series start. Default FALSE. check_negative Logical. TRUE, converts negative values data zero. Default FALSE. max_as_last Logical. TRUE, appends maximum value reaching maximum. Default FALSE. progress Logical. TRUE progress bar displayed. Default FALSE. Try running function: progressr::handlers(\"progress\", \"beepr\"). parallel Logical. TRUE model fit performed parallel. Default FALSE. workers number parallel processes use. `parallel::detectCores()` control list control parameters passed optimization function. example: list(maxit = 500).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Modeler — modeler","text":"object class modeler, list containing following elements: param data frame containing optimized parameters related information. dt data frame data used fitted values. fn call used fitting models. metrics Metrics summary models. execution Execution time. response Response variable. keep Metadata keep across. fun Name function. parallel List returning parallel workers. fit List fitted models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Modeler — modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) # Example 1 mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = 195, add_zero = TRUE ) plot(mod_1, id = 195) print(mod_1) #> #> Call: #> GLI_2 ~ fn_lin_pl_lin(x, t1, t2, t3, k, beta) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -0.011076 -0.002262 0.000000 -0.001676 0.000000 0.002262 #> #> Optimization Results `head()`: #> uid t1 t2 t3 k beta sse #> 195 39.6 68.3 93.3 0.323 -0.01 0.000149 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.8988 secs 100% 901 (id) #> # Example 2 mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = 195, add_zero = TRUE, max_as_last = TRUE ) plot(mod_2, id = 195) print(mod_2) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -1.340e-09 0.000e+00 0.000e+00 -9.481e-11 1.391e-10 1.391e-10 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 195 38.7 62 100 1.88e-18 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.5793 secs 100% 349 (id) #>"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an object of class explorer — plot.explorer","title":"Plot an object of class explorer — plot.explorer","text":"Creates various plots object class explorer. Depending specified type, function can generate plots show correlations variables x, correlations x values variable, evolution variables x.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an object of class explorer — plot.explorer","text":"","code":"# S3 method for class 'explorer' plot( x, type = \"var_by_x\", label_size = 4, signif = FALSE, method = \"pearson\", filter_var = NULL, id = NULL, n_row = NULL, n_col = NULL, base_size = 13, return_gg = FALSE, add_avg = FALSE, ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an object of class explorer — plot.explorer","text":"x object inheriting class explorer, resulting executing function explorer(). type Character string number specifying type plot generate. Available options : \"var_by_x\" 1 Plots correlations variables x (default). \"x_by_var\" 2 Plots correlations x points variable (y). \"evolution\" 3 Plot evolution variables (y) x. \"xy\" 4 Scatterplot (x, y) label_size Numeric. Size labels plot. Default 4. works type 1 2. signif Logical. TRUE, adds p-values correlation plot labels. Default FALSE. works type 1 2. method Character string specifying method correlation calculation. Available options \"pearson\" (default), \"spearman\", \"kendall\". works type 1 2. filter_var Character vector specifying variables exclude plot. id Optional unique identifier filter evolution type plot. Default NULL. works type 3. n_row Integer specifying number rows use facet_wrap(). Default NULL. works type 1 2. n_col Integer specifying number columns use facet_wrap(). Default NULL. works type 1 2. base_size Numeric. Base font size plot. Default 13. return_gg Logical. TRUE, returns ggplot object instead printing . Default FALSE. add_avg Logical. TRUE, returns evolution plot average trend across groups. Default FALSE. ... graphical parameters future improvements.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an object of class explorer — plot.explorer","text":"ggplot object invisible data.frame containing correlation table type \"var_by_x\" \"x_by_var\".","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an object of class explorer — plot.explorer","text":"","code":"library(flexFitR) data(dt_potato) dt_potato <- dt_potato results <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) table <- plot(results, label_size = 4, signif = TRUE, n_row = 2) table #> # A tibble: 7 × 7 #> x col row corr p.value n signi #> #> 1 36 Canopy PH 0.46 8.23e-11 176 *** #> 2 42 Canopy PH 0.67 8.55e-27 196 *** #> 3 56 Canopy PH -0.21 3.65e- 3 196 ** #> 4 76 Canopy PH 0.3 1.41e- 5 196 *** #> 5 92 Canopy PH 0.28 5.96e- 5 196 *** #> 6 100 Canopy PH 0.32 6.45e- 6 196 *** #> 7 108 Canopy PH 0.07 3.14e- 1 196 ns plot(results, type = \"x_by_var\", label_size = 4, signif = TRUE)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an object of class modeler — plot.modeler","title":"Plot an object of class modeler — plot.modeler","text":"Create several plots object class modeler","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an object of class modeler — plot.modeler","text":"","code":"# S3 method for class 'modeler' plot( x, id = NULL, type = 1, label_size = 4, base_size = 14, color = \"red\", parm = NULL, n_points = 2000, title = NULL, add_ci = TRUE, add_ribbon = FALSE, color_ribbon = \"blue\", ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an object of class modeler — plot.modeler","text":"x object class modeler, typically result calling modeler(). id optional group ID filter data plotting, useful avoiding overcrowded plots. type Numeric value (1-6) specify type plot generate. Default 1. type = 1 Plot raw data fitted curves. type = 2 Plot coefficients confidence intervals. type = 3 Plot fitted curves, colored group. type = 4 Plot fitted curves confidence intervals. type = 5 Plot first derivative confidence intervals. type = 6 Plot second derivative confidence intervals. label_size Numeric value size labels. Default 4. base_size Numeric value base font size pts. Default 14. color Character string specifying color fitted line type = 1. Default \"red\". parm Character vector specifying parameters plot type = 2. NULL, parameters included. n_points Numeric value specifying number points interpolation along x-axis. Default 2000. title Optional character string add title plot. add_ci Logical value indicating whether add confidence intervals type = 4, 5, 6. Default TRUE. add_ribbon Logical value indicating whether add ribbon confidence intervals type = 4, 5, 6. Default FALSE. color_ribbon Character string specifying color ribbon. Default \"blue\". ... Additional graphical parameters future extensions.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an object of class modeler — plot.modeler","text":"ggplot object representing specified plot.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot an object of class modeler — plot.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an object of class modeler — plot.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) # Example 1 mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:3), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4489 2.3551 4.2612 3.9082 5.6379 7.0145 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 0.449 #> 2 35.2 60.7 100.0 7.014 #> 3 33.8 59.9 100.0 4.261 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.4357 secs 100% 499.67 (id) #> plot(mod_1, id = 1:2) plot(mod_1, id = 1:3, type = 2, label_size = 10)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Function — plot_fn","title":"Plot Function — plot_fn","text":"function plots user-defined function specified interval annotates plot calculated Area Curve (AUC) parameter values. aim `plot_fn` allow users play different Starting Values functions fitting models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Function — plot_fn","text":"","code":"plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 100), n_points = 1000, auc = FALSE, x_auc_label = NULL, y_auc_label = NULL, auc_label_size = 4, param_label_size = 4, base_size = 12, color = \"red\", label_color = \"grey30\" )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Function — plot_fn","text":"fn character string representing name function plotted. Default \"fn_piwise\". params named numeric vector parameters passed function. Default c(t1 = 34.9, t2 = 61.8, k = 100). interval numeric vector length 2 specifying interval function plotted. Default c(0, 100). n_points integer specifying number points used plotting. Default 1000. auc Print AUC plot? Default FALSE. x_auc_label numeric value specifying x-coordinate AUC label. Default NULL. y_auc_label numeric value specifying y-coordinate AUC label. Default NULL. auc_label_size numeric value specifying size AUC label text. Default 3. param_label_size numeric value specifying size parameter label text. Default 3. base_size numeric value specifying base size plot's theme. Default 12. color character string specifying color plot lines area fill. Default \"red\". label_color character string specifying color labels. Default \"grey30\".","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Function — plot_fn","text":"ggplot object representing plot.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Function — plot_fn","text":"","code":"# Example usage plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 100), n_points = 1000 ) plot_fn( fn = \"fn_lin_pl_lin\", params <- c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 100), n_points = 1000, base_size = 12 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Predict an object of class modeler — predict.modeler","title":"Predict an object of class modeler — predict.modeler","text":"Generate model predictions object class modeler. function allows flexible prediction types, including point predictions, area curve (AUC), first second order derivatives.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Predict an object of class modeler — predict.modeler","text":"","code":"# S3 method for class 'modeler' predict( object, x = NULL, id = NULL, type = c(\"point\", \"auc\", \"fd\", \"sd\"), se_interval = c(\"confidence\", \"prediction\"), n_points = 1000, metadata = FALSE, ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Predict an object of class modeler — predict.modeler","text":"object object class modeler, typically result calling modeler() function. x numeric value vector specifying points predictions made. type = \"auc\", x must vector length 2 specifies interval calculate AUC. id Optional unique identifier filter predictions specific group. Default NULL. type character string specifying type prediction. Default \"point\". \"point\" Predicts value y given x. \"auc\" Calculates area curve (AUC) fitted model interval specified x. \"fd\" Returns first derivative (rate change) model given x value(s). \"sd\" Returns second derivative model given x value(s). se_interval character string specifying type interval standard error calculation. Options \"confidence\" (default) \"prediction\". n_points integer specifying number points used approximate area curve (AUC) type = \"auc\". Default 1000. metadata Logical. TRUE, metadata included predictions. Default FALSE. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Predict an object of class modeler — predict.modeler","text":"data.frame containing predicted values, associated standard errors, optionally metadata.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Predict an object of class modeler — predict.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Predict an object of class modeler — predict.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3572 secs 100% 414 (id) #> # Point Prediction predict(mod_1, x = 45, type = \"point\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 38.4 0.622 # AUC Prediction predict(mod_1, x = c(0, 108), type = \"auc\", id = 2) #> # A tibble: 1 × 5 #> uid x_min x_max predicted.value std.error #> #> 1 2 0 108 6004. 30.8 # First Derivative predict(mod_1, x = 45, type = \"fd\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 3.91 0.0741 # Second Derivative predict(mod_1, x = 45, type = \"sd\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 -0.0000000298 0.0000274"},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Print an object of class modeler — print.modeler","title":"Print an object of class modeler — print.modeler","text":"Prints information modeler function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print an object of class modeler — print.modeler","text":"","code":"# S3 method for class 'modeler' print(x, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print an object of class modeler — print.modeler","text":"x object fitted function modeler(). ... Options used tibble package format output. See `tibble::print()` details.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print an object of class modeler — print.modeler","text":"object inheriting class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print an object of class modeler — print.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print an object of class modeler — print.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:5), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(1:5)) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.000000 0.000049 0.448900 2.344930 4.261203 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 4.49e-01 #> 2 35.2 60.7 100.0 7.01e+00 #> 3 33.8 59.9 100.0 4.26e+00 #> 4 39.3 65.5 99.8 4.60e-18 #> #> Metrics: #> Groups Timing Convergence Iterations #> 5 2.3763 secs 100% 435.2 (id) #>"},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"Extract variance-covariance matrix parameter estimates object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"","code":"# S3 method for class 'modeler' vcov(x, id = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"x object class modeler, typically result calling modeler() function. id optional unique identifier filter specific group. Default NULL. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"list matrices, matrix represents variance-covariance matrix estimated parameters group fit.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(x, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3307 secs 100% 414 (id) #> vcov(mod_1) #> $`2` #> t1 t2 k #> t1 5.694008e-02 -0.02923676 3.683474e-06 #> t2 -2.923676e-02 0.13796365 7.471629e-02 #> k 3.683474e-06 0.07471629 2.922726e-01 #> #> $`15` #> t1 t2 k #> t1 2.636323e-02 -0.02728600 1.691502e-07 #> t2 -2.728600e-02 0.08035361 1.300394e-02 #> k 1.691502e-07 0.01300394 4.196055e-02 #> #> $`45` #> t1 t2 k #> t1 4.956862e-05 -3.526927e-05 4.195078e-11 #> t2 -3.526927e-05 9.453221e-05 2.835289e-05 #> k 4.195078e-11 2.835289e-05 1.083750e-04 #>"},{"path":"https://apariciojohan.github.io/flexFitR/news/index.html","id":"flexfitr-010","dir":"Changelog","previous_headings":"","what":"flexFitR 0.1.0","title":"flexFitR 0.1.0","text":"Initial CRAN submission.","code":""}] +[{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Emergence and Maximun Canopy","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Emergence and Maximun Canopy","text":"","code":"data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = Canopy, id = Plot) names(explorer) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\" \"x_var\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Emergence and Maximun Canopy","text":"","code":"p1 <- plot(explorer, type = \"evolution\", return_gg = TRUE) p2 <- plot(explorer, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"target-function","dir":"Articles","previous_headings":"","what":"Target Function","title":"Modelling Emergence and Maximun Canopy","text":"fn_piwise() \\[\\begin{equation} f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"fitting-models","dir":"Articles","previous_headings":"","what":"Fitting Models","title":"Modelling Emergence and Maximun Canopy","text":"","code":"mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(195, 40), add_zero = TRUE ) mod_1 #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 390.5 1004.2 1618.0 1618.0 2231.8 2845.5 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 40 34.8 53.7 72.5 2846 #> 195 38.7 60.0 91.7 390 #> #> Metrics: #> Groups Timing Convergence Iterations #> 2 0.8897 secs 100% 547 (id) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"providing-different-initial-values","dir":"Articles","previous_headings":"","what":"Providing different initial values","title":"Modelling Emergence and Maximun Canopy","text":"","code":"initials <- data.frame( uid = c(195, 40), t1 = c(70, 60), t2 = c(40, 80), k = c(100, 100) ) kable(initials) mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = initials, subset = c(195, 40), add_zero = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"fixing-some-parameters-of-the-model","dir":"Articles","previous_headings":"","what":"Fixing some parameters of the model","title":"Modelling Emergence and Maximun Canopy","text":"","code":"fixed_params <- data.frame(uid = c(195, 40), k = c(100, 100)) kable(fixed_params) mod_3 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE ) plot(mod_3, id = c(195, 40)) kable(mod_3$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"correcting-maximun-value","dir":"Articles","previous_headings":"","what":"Correcting Maximun value","title":"Modelling Emergence and Maximun Canopy","text":"","code":"mod_4 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_4, id = c(195, 40)) kable(mod_4$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/canopy-model.html","id":"comparing-models","dir":"Articles","previous_headings":"","what":"Comparing Models","title":"Modelling Emergence and Maximun Canopy","text":"","code":"rbind.data.frame( mutate(mod_1$param, model = \"1\", .before = uid), mutate(mod_2$param, model = \"2\", .before = uid), mutate(mod_3$param, model = \"3\", .before = uid), mutate(mod_4$param, model = \"4\", .before = uid) ) |> filter(uid %in% 195) |> kable()"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Plant Height","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Plant Height","text":"","code":"data(dt_chips) results <- explorer(dt_chips, x = DAP, y = c(PH, Canopy), id = Plot) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\" \"x_var\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Plant Height","text":"","code":"p1 <- plot(results, type = \"evolution\", return_gg = TRUE) p2 <- plot(results, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2, nrow = 2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"estimating-days-to-emergence","dir":"Articles","previous_headings":"","what":"Estimating days to emergence","title":"Modelling Plant Height","text":"\\[\\begin{equation} f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fitting-models-for-canopy","dir":"Articles","previous_headings":"","what":"Fitting models for canopy","title":"Modelling Plant Height","text":"","code":"fixed_params <- data.frame(uid = c(195, 40), k = c(100, 100)) mod_1 <- dt_chips |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"target-function-for-plant-height","dir":"Articles","previous_headings":"","what":"Target function for plant height","title":"Modelling Plant Height","text":"fn_exp2_exp() \\[\\begin{equation} f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fixing-parameters-and-providing-initial-values","dir":"Articles","previous_headings":"","what":"Fixing parameters and providing initial values","title":"Modelling Plant Height","text":"","code":"fixed_params <- mod_1 |> pluck(\"param\") |> select(uid, t1) kable(fixed_params) initials <- mod_1 |> pluck(\"param\") |> select(uid, t1, t2) |> mutate(alpha = 1 / 600, beta = -1 / 30) kable(initials)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/height-model.html","id":"fitting-models-for-plant-height","dir":"Articles","previous_headings":"","what":"Fitting models for plant height","title":"Modelling Plant Height","text":"Using t1 previous model fixed parameter using t2 initial parameter per plot.","code":"mod_2 <- dt_chips |> modeler( x = DAP, y = PH, grp = Plot, fn = \"fn_exp2_exp\", parameters = initials, fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"getting-started","dir":"Articles","previous_headings":"","what":"Getting started","title":"How to start","text":"basic idea vignette illustrate users use flexFitR package. ’ll start basic example: simple linear regression. Although example primary focus package, serve demonstrate use.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"simple-linear-regression","dir":"Articles","previous_headings":"","what":"1. Simple linear regression","title":"How to start","text":"example, ’ll work small dataset consisting 6 observations, X independent variable Y dependent variable. First, define objective function. case, function fn_lm represent linear regression, b intercept m slope regression. plot_fn function, integrated package, allows us plot function parameters provided. useful visualizing shape function fitting model data. fit model, use modeler function. function, pass x independent variable, y dependent variable, vector parameters assign initial values coefficient b coefficient m. model fitted, can examine output, extract estimated parameters, make plots, predict new x values. order get coefficients variance-covariance matrix make use coef vcov function, takes model object argument. Finally, can make predictions using predict function, takes fitted model object X value want make prediction. can compare lm function R, give results similar obtained package.","code":"library(flexFitR) library(dplyr) library(ggpubr) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) plot(explorer(dt, X, Y), type = \"xy\") fn_lm <- function(x, b, m) { y <- b + m * x return(y) } plot_fn(fn = \"fn_lm\", params = c(b = 10, m = 5)) mod <- dt |> modeler( x = X, y = Y, fn = \"fn_lm\", parameters = c(b = -5, m = 10) ) mod #> #> Call: #> Y ~ fn_lm(X, b, m) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -12.5905 -6.0762 -0.3476 0.0000 6.1952 12.8952 #> #> Optimization Results `head()`: #> uid b m sse #> 1 -15.5 19.5 449 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.3956 secs 100% 259 (id) a <- plot(mod, color = \"blue\", title = \"Raw data\") b <- plot(mod, type = 4, n_points = 200, color = \"black\") ggarrange(a, b) coef(mod) #> # A tibble: 2 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 1 b -15.5 9.86 -1.57 0.192 #> 2 1 m 19.5 2.53 7.71 0.00152 vcov(mod) #> $`1` #> b m #> b 97.21937 -22.435238 #> m -22.43524 6.410068 predict(mod, x = 4.5) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 1 4.5 72.3 5.01"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"comparison-with-lm","dir":"Articles","previous_headings":"1. Simple linear regression","what":"Comparison with lm","title":"How to start","text":"previous example fairly simple, can consider complex scenario need fit just one function, hundreds functions several groups. can achieved using grp argument modeler function. Additionally, can parallelize processes setting parallel argument TRUE defining number cores use. ’s important note depending functions defined user, parameters may need constrained, required greater less zero. cases, certain parameters might need fixed known values. complex situations, many curves fit working complex functions—whether non linear regressions specific parameter constraints cases parameters fixed group—modeler offers extensive flexibility.","code":"mo <- lm(Y ~ X, data = dt) summary(mo)$coefficients #> Estimate Std. Error t value Pr(>|t|) #> (Intercept) -15.46667 9.859988 -1.568629 0.191812151 #> X 19.51429 2.531811 7.707639 0.001524882 vcov(mo) #> (Intercept) X #> (Intercept) 97.21937 -22.435238 #> X -22.43524 6.410068 predict(mo, newdata = data.frame(X = 4.5), se.fit = TRUE) #> $fit #> 1 #> 72.34762 #> #> $se.fit #> [1] 5.010599 #> #> $df #> [1] 4 #> #> $residual.scale #> [1] 10.59133"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"piece-wise-regression","dir":"Articles","previous_headings":"","what":"2. Piece-wise regression","title":"How to start","text":"following example, although still simple, represents slightly complex function greater number parameters. case, piece-wise regression, parameterized t1, t2, k, defined following expression: fitting model, let’s take look example dataset. can make plot piecewise function fit model using modeler function. fitting model, can examine results, plot fitted curve, extract coefficients associated p-values, obtain variance-covariance matrix, make predictions unknown values x. Finally, illustrate provide different initial values function dealing multiple groups, also show fix parameters objective function.","code":"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) } 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\") plot_fn(fn = \"fun\", params = c(t1 = 25, t2 = 70, k = 90)) mod_1 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = c(t1 = 45, t2 = 80, k = 90) ) 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.4419 secs 100% 511 (id) plot(mod_1) # Coefficients coef(mod_1) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 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 #> #> 1 1 45 28.5 0.223"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"providing-initial-values","dir":"Articles","previous_headings":"2. Piece-wise regression","what":"Providing Initial values","title":"How to start","text":"example, don’t grouping variable. However, default, function assigns unique identifier (uid) dataset. , need specify uid = 1 initial values fixed parameters. one group, need modify parameters argument accordingly. approach primarily illustrative purposes.","code":"init <- data.frame(uid = 1, t1 = 20, t2 = 30, k = 0.8) mod_2 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = init ) mod_2 #> #> 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.4397 secs 100% 567 (id) coef(mod_2) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 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"},{"path":"https://apariciojohan.github.io/flexFitR/articles/how_to_start.html","id":"fixing-parameters","dir":"Articles","previous_headings":"2. Piece-wise regression","what":"Fixing parameters","title":"How to start","text":"vignette provided basic introduction using flexFitR package, starting simple examples linear regression piecewise regression. goal demonstrate fundamental features flexibility package. However, complex situations can arise working high-throughput phenotypic (HTP) data, involve multiple groups, parameter constraints, advanced modeling scenarios. complex situations illustrated vignettes, use real HTP data showcase full capabilities flexFitR package.","code":"fix <- data.frame(uid = 1, k = 98) mod_3 <- dt |> modeler( x = time, y = variable, fn = \"fun\", parameters = c(t1 = 45, t2 = 80, k = 90), fixed_params = fix ) mod_3 #> #> Call: #> variable ~ fun(time, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.0000 0.0000 0.6700 0.8789 1.8100 1.8100 #> #> Optimization Results `head()`: #> uid t1 t2 sse k #> 1 38.6 60.6 13.6 98 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.4103 secs 100% 321 (id) coef(mod_3) #> # A tibble: 2 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 1 t1 38.6 0.396 97.5 3.15e-12 #> 2 1 t2 60.6 0.429 141. 2.34e-13 plot(mod_3) rbind(metrics(mod_1), metrics(mod_2), metrics(mod_3)) #> # A tibble: 3 × 8 #> uid var SSE MAE MSE RMSE r_squared n #> #> 1 1 variable 0.449 0.0744 0.0499 0.223 1.00 9 #> 2 1 variable 0.449 0.0744 0.0499 0.223 1.00 9 #> 3 1 variable 13.6 0.879 1.51 1.23 0.999 9"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"loading-libraries","dir":"Articles","previous_headings":"","what":"Loading libraries","title":"Modelling Maturity","text":"","code":"library(flexFitR) library(dplyr) library(kableExtra) library(ggpubr) library(purrr)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"exploring-data-explorer","dir":"Articles","previous_headings":"","what":"Exploring data explorer()","title":"Modelling Maturity","text":"","code":"data(dt_potato) results <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\" \"x_var\""},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"data-exploration","dir":"Articles","previous_headings":"","what":"Data exploration","title":"Modelling Maturity","text":"","code":"p1 <- plot(results, type = \"evolution\", return_gg = TRUE) p2 <- plot(results, type = \"x_by_var\", return_gg = TRUE) ggarrange(p1, p2, nrow = 2)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"target-function-for-maturity","dir":"Articles","previous_headings":"","what":"Target function for maturity","title":"Modelling Maturity","text":"fn_lin_pl_lin() \\[\\begin{equation} f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} \\end{equation}\\]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"fitting-models-for-maturity","dir":"Articles","previous_headings":"","what":"Fitting models for maturity","title":"Modelling Maturity","text":"","code":"mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = c(195, 40), add_zero = TRUE ) plot(mod_1, id = c(195, 40)) kable(mod_1$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"fixing-parameters-from-the-canopy-model","dir":"Articles","previous_headings":"","what":"Fixing parameters from the canopy model","title":"Modelling Maturity","text":"","code":"fixed_params <- results |> pluck(\"dt_long\") |> filter(var %in% \"Canopy\" & uid %in% c(195, 40)) |> group_by(uid) |> summarise(k = max(y), .groups = \"drop\") mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), fixed_params = fixed_params, subset = c(195, 40), add_zero = TRUE, max_as_last = TRUE ) plot(mod_2, id = c(195, 40)) kable(mod_2$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"passing-initial-values","dir":"Articles","previous_headings":"","what":"Passing initial values","title":"Modelling Maturity","text":"","code":"initials <- mod_2 |> pluck(\"param\") |> select(uid, t1, t2) |> mutate(t3 = 100, k = 0.32, beta = -0.01) kable(initials) mod_3 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = initials, subset = c(195, 40), add_zero = TRUE ) plot(mod_3, id = c(195, 40)) kable(mod_3$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/maturity-model.html","id":"adding-constrains-to-the-optimization","dir":"Articles","previous_headings":"","what":"Adding constrains to the optimization","title":"Modelling Maturity","text":"","code":"mod_4 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin2\", parameters = c(t1 = 38.7, t2 = 62, dt = 28, k = 0.32, beta = -0.01), lower = c(-Inf, -Inf, 0, -Inf, -Inf), upper = c(Inf, Inf, Inf, Inf, 0), method = c(\"nlminb\", \"L-BFGS-B\"), subset = c(195, 40), add_zero = TRUE ) plot(mod_4, id = c(195, 40)) kable(mod_4$param)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"example-dataset-and-loading-libraries","dir":"Articles","previous_headings":"","what":"Example dataset and loading libraries","title":"Plotting Options","text":"","code":"library(flexFitR) library(dplyr) library(ggpubr) set.seed(10) 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) ) |> mutate(variable = variable + rnorm(n = n(), mean = 5, sd = 6))"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"expectation-function-and-modeling","dir":"Articles","previous_headings":"","what":"Expectation function and modeling","title":"Plotting Options","text":"","code":"fn <- function(t, t0, t1, t2) t0 / (1 + exp((t1 - t) / t2)) mod <- dt |> modeler( x = time, y = variable, fn = \"fn\", parameters = c(t0 = 100, t1 = 50, t2 = 5) ) mod #> #> Call: #> variable ~ fn(time, t0, t1, t2) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -6.1496 -2.9462 2.1181 0.4716 3.2479 6.7654 #> #> Optimization Results `head()`: #> uid t0 t1 t2 sse #> 1 101 49.2 4.01 169 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.3975 secs 100% 334 (id)"},{"path":"https://apariciojohan.github.io/flexFitR/articles/plotting.html","id":"plotting-predictions-and-derivatives","dir":"Articles","previous_headings":"","what":"Plotting predictions and derivatives","title":"Plotting Options","text":"","code":"a <- plot(mod, color = \"blue\", title = \"Raw data\") b <- plot(mod, type = 4, n_points = 200, color = \"black\") c <- plot(mod, type = 5, n_points = 200, color = \"black\") d <- plot(mod, type = 6, n_points = 200, color = \"black\") ggarrange(a, b, c, d)"},{"path":"https://apariciojohan.github.io/flexFitR/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Johan Aparicio. Author, maintainer. Jeffrey Endelman. Author. University Wisconsin Madison. Copyright holder.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Aparicio J, Endelman J (2024). flexFitR: Flexible Non-Linear Least Square Modelling. R package version 0.1.0, https://github.com/AparicioJohan/flexFitR, https://apariciojohan.github.io/flexFitR/.","code":"@Manual{, title = {flexFitR: Flexible Non-Linear Least Square Modelling}, author = {Johan Aparicio and Jeffrey Endelman}, year = {2024}, note = {R package version 0.1.0, https://github.com/AparicioJohan/flexFitR}, url = {https://apariciojohan.github.io/flexFitR/}, }"},{"path":[]},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement johanstevenapa@gmail.com. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.1, available https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. Community Impact Guidelines inspired [Mozilla’s code conduct enforcement ladder][https://github.com/mozilla/inclusion]. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https://www.contributor-covenant.org/translations.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"flexfitr-","dir":"","previous_headings":"","what":"Flexible Non-Linear Least Square Modelling","title":"Flexible Non-Linear Least Square Modelling","text":"flexFitR R package designed efficient modeling analysis large complex datasets. offers powerful tools parameter estimation, model fitting, visualization, leveraging {optimx} package optimization future package parallel processing.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Flexible Non-Linear Least Square Modelling","text":"can install development version flexFitR GitHub :","code":"# install.packages(\"devtools\") devtools::install_github(\"AparicioJohan/flexFitR\")"},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"features","dir":"","previous_headings":"","what":"Features","title":"Flexible Non-Linear Least Square Modelling","text":"Parameter Estimation: Utilizes {optimx} derivative-free algorithms solve estimate parameters given function. Parallelization: Implements parallel processing using future package, enabling efficient fitting hundreds curves simultaneously. Visualization Tools: Provides variety plots visualize model fits, correlations, predictions, . Statistical Rigor: Offers standard errors p-values coefficients, well predictions, supporting robust conclusions interpretations. Prediction: Facilitates prediction non-observed data points. Flexibility: Allows users fix certain parameters model specify different initial values per grouping factor. Custom Modeling Functions: Equipped built-modeling functions common analysis tasks, also permitting users supply custom functions.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"example","dir":"","previous_headings":"","what":"Example","title":"Flexible Non-Linear Least Square Modelling","text":"’s simple example get started flexFitR. example demonstrates fitting piecewise regression model:","code":"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.354 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|)` 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 1 1 45 28.5 0.223"},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"documentation","dir":"","previous_headings":"","what":"Documentation","title":"Flexible Non-Linear Least Square Modelling","text":"detailed documentation examples, visit flexFitR Vignette 1: start Vignette 2: Modeling Canopy Vignette 3: Modeling Plant Height Vignette 4: Modeling VIs","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"contributing","dir":"","previous_headings":"","what":"Contributing","title":"Flexible Non-Linear Least Square Modelling","text":"Contributions flexFitR welcome! ’d like contribute, please fork repository submit pull request. significant changes, please open issue first discuss ideas.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Flexible Non-Linear Least Square Modelling","text":"Please note flexFitR project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"Flexible Non-Linear Least Square Modelling","text":"flexFitR licensed MIT License. See LICENSE file details.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2024 flexFitR authors Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"Perform extra sum--squares F-test compare two nested models class modeler. test assesses whether additional parameters full model significantly improve fit compared reduced model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"","code":"# S3 method for class 'modeler' anova(reduced_model, full_model = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"reduced_model object class modeler representing reduced model fewer parameters. full_model optional object class modeler representing full model parameters. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"tibble containing columns F-statistic corresponding p-values, indicating whether full model provides significantly better fit reduced model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/anova.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extra Sum-of-Squares F-Test for modeler Objects — anova.modeler","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) #> Loading required package: foreach #> Loading required package: future plot(mo_1) mo_2 <- modeler(dt, X, Y, fn = \"fn_quad\", param = c(a = 1, b = 10, c = 5)) plot(mo_2) anova(mo_1, mo_2) #> # A tibble: 1 × 9 #> uid RSS_reduced RSS_full n df1 df2 F `Pr(>F)` . #> #> 1 1 449. 385. 6 1 3 0.494 0.533 ns"},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Coefficients of a Modeler Object — coef.modeler","title":"Coefficients of a Modeler Object — coef.modeler","text":"Extract estimated coefficients object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Coefficients of a Modeler Object — coef.modeler","text":"","code":"# S3 method for class 'modeler' coef(x, id = NULL, metadata = FALSE, df = FALSE, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Coefficients of a Modeler Object — coef.modeler","text":"x object class modeler, typically result calling modeler() function. id optional unique identifier filter specific group. Default NULL. metadata Logical. TRUE, metadata included along coefficients. Default FALSE. df Logical. TRUE, degrees freedom fitted model returned alongside coefficients. Default FALSE. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Coefficients of a Modeler Object — coef.modeler","text":"data.frame containing model's estimated coefficients, standard errors, optional metadata degrees freedom specified.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Coefficients of a Modeler Object — coef.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/coef.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Coefficients of a Modeler Object — coef.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3272 secs 100% 414 (id) #> coef(mod_1, id = 2) #> # A tibble: 3 × 6 #> uid coefficient solution std.error `t value` `Pr(>|t|)` #> #> 1 2 t1 35.2 0.239 147. 6.57e-12 #> 2 2 t2 60.7 0.371 164. 3.53e-12 #> 3 2 k 100. 0.541 185. 1.68e-12"},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Confidence Intervals for a modeler Object — confint.modeler","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"Extract confidence intervals estimated parameters object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"","code":"# S3 method for class 'modeler' confint(x, parm = NULL, level = 0.95, id = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"x object class modeler, typically result calling modeler() function. parm character vector specifying parameters confidence intervals calculated. NULL, confidence intervals parameters returned. Default NULL. level numeric value indicating confidence level intervals. Default 0.95, corresponding 95% confidence interval. id optional unique identifier filter specific group. Default NULL. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"tibble containing lower upper confidence limits specified parameter.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/confint.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Confidence Intervals for a modeler Object — confint.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 35, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 0.968957 1.452134 1.897212 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 15 38.5 69.4 99.8 1.0071 #> 35 52.2 61.4 100.0 1.8972 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.8792 secs 100% 410 (id) #> confint(mod_1) #> # A tibble: 9 × 6 #> uid coefficient solution std.error ci_lower ci_upper #> #> 1 15 t1 38.5 0.162 38.1 38.8 #> 2 15 t2 69.4 0.283 68.7 70.1 #> 3 15 k 99.8 0.205 99.3 100. #> 4 35 t1 52.2 2.00 47.3 57.1 #> 5 35 t2 61.4 2.87 54.4 68.5 #> 6 35 k 100. 0.281 99.3 101. #> 7 45 t1 38.3 0.00704 38.3 38.3 #> 8 45 t2 64.5 0.00972 64.4 64.5 #> 9 45 k 100. 0.0104 100. 100."},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":null,"dir":"Reference","previous_headings":"","what":"General-purpose optimization — .fitter_curve","title":"General-purpose optimization — .fitter_curve","text":"function .fitter_curve used internally find parameters requested.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"General-purpose optimization — .fitter_curve","text":"","code":".fitter_curve(data, id, fn, method, lower, upper, control, .keep)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"General-purpose optimization — .fitter_curve","text":"data nested data.frame columns . id optional vector IDs filter data. Default NULL, meaning ids used. fn string specifying name function used curve fitting. Default \"fn_piwise\". method character vector specifying optimization methods used. See optimx package available methods. Default c(\"subplex\", \"pracmanm\", \"anms\"). lower Numeric vector specifying lower bounds parameters. Default -Inf parameters. upper Numeric vector specifying upper bounds parameters. Default Inf parameters. control list control parameters passed optimization function. example, list(maxit = 500).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dot-fitter_curve.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"General-purpose optimization — .fitter_curve","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = 195, add_zero = TRUE )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":null,"dir":"Reference","previous_headings":"","what":"Drone Data in Potato 2022 — dt_chips","title":"Drone Data in Potato 2022 — dt_chips","text":"Vegetative indices biomass related traits potato trial arranged p-rep design.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Drone Data in Potato 2022 — dt_chips","text":"","code":"dt_chips"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Drone Data in Potato 2022 — dt_chips","text":"tibble 1568 rows 17 variables: Trial chr trial name DAP dbl denoting Days planting Plot dbl denoting unique plot id Row dbl denoting row coordinate Range dbl denoting range coordinate Gen chr denoting genotype id Yield dbl Total Yield measured end season VineMaturity dbl VineMaturity measure season Red - Canopy dbl denoting drone-derived traits","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_chips.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Drone Data in Potato 2022 — dt_chips","text":"UW - Potato Breeding Program","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":null,"dir":"Reference","previous_headings":"","what":"Drone Data in Potato 2020 — dt_potato","title":"Drone Data in Potato 2020 — dt_potato","text":"Vegetative indices biomass related traits potato trial arranged p-rep design.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Drone Data in Potato 2020 — dt_potato","text":"","code":"dt_potato"},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Drone Data in Potato 2020 — dt_potato","text":"tibble 1372 rows 17 variables: Trial chr trial name DAP dbl denoting Days planting Plot dbl denoting unique plot id Row dbl denoting row coordinate Range dbl denoting range coordinate Gen chr denoting genotype id Yield dbl Total Yield measured end season VineMaturity dbl VineMaturity measure season Red - Canopy dbl denoting drone-derived traits","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/dt_potato.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Drone Data in Potato 2020 — dt_potato","text":"UW - Potato Breeding Program","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":null,"dir":"Reference","previous_headings":"","what":"Explore Data — explorer","title":"Explore Data — explorer","text":"Explores data data frame wide format.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Explore Data — explorer","text":"","code":"explorer(data, x, y, id, metadata)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Explore Data — explorer","text":"data data.frame wide format containing data. x name column `data` contains x points. y names columns `data` contain variables analyzed. id names columns `data` contains grouping variable. metadata names columns `data` keep across analysis.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Explore Data — explorer","text":"object class explorer, list containing following elements: summ_vars data.frame containing summary statistics trait x point, including minimum, mean, median, maximum, standard deviation, coefficient variation, number non-missing values, percentage missing values, percentage negative values. summ_metadata data.frame summarizing metadata. locals_min_max data.frame containing local minima maxima mean y values x. dt_long data.frame long format, columns uid, metadata, var, x, y metadata character vector names variables keep across.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Explore Data — explorer","text":"function helps explore dataset analyzed modeler().","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/explorer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Explore Data — explorer","text":"","code":"library(flexFitR) data(dt_potato) results <- dt_potato |> explorer( x = DAP, y = c(Canopy, PH), id = Plot, metadata = c(Gen, Row, Range) ) names(results) #> [1] \"summ_vars\" \"summ_metadata\" \"locals_min_max\" \"dt_long\" #> [5] \"metadata\" \"x_var\" head(results$summ_vars) #> # A tibble: 6 × 12 #> var x Min Mean Median Max SD CV n miss `miss%` #> #> 1 Canopy 29 0 0 0 0 0 NaN 196 0 0 #> 2 Canopy 36 0 2.95 1.84 15.1 3.22 1.09 196 0 0 #> 3 Canopy 42 0.763 23.4 22.9 46.2 9.31 0.398 196 0 0 #> 4 Canopy 56 33.4 75.8 75.2 98.9 12.4 0.164 196 0 0 #> 5 Canopy 76 89.1 99.7 100 100 1.04 0.0104 196 0 0 #> 6 Canopy 92 62.5 97.0 98.4 100. 4.36 0.0449 196 0 0 #> # ℹ 1 more variable: `neg%` plot(results, label_size = 4, signif = TRUE, n_row = 2) # New data format head(results$dt_long) #> # A tibble: 6 × 7 #> uid Gen Row Range var x y #> #> 1 1 W17037-24 1 1 Canopy 29 0 #> 2 1 W17037-24 1 1 PH 29 NA #> 3 1 W17037-24 1 1 Canopy 36 0.67 #> 4 1 W17037-24 1 1 PH 36 0.0154 #> 5 1 W17037-24 1 1 Canopy 42 15.1 #> 6 1 W17037-24 1 1 PH 42 0.0173"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Exponential Function 1 — fn_exp1_exp","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"Computes value based exponential growth curve exponential decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"","code":"fn_exp1_exp(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter first exponential term. Must greater 0. beta Numeric. parameter second exponential term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"numeric value based double exponential model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)) - 1. t greater t2, function returns (exp(alpha * (t2 - t1)) - 1) * exp(beta * (t - t2)).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_exp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Exponential Function 1 — fn_exp1_exp","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp1_exp\", params = c(t1 = 35, t2 = 55, alpha = 1 / 20, beta = -1 / 30), interval = c(0, 108), n_points = 2000, auc_label_size = 3, y_auc_label = 0.2 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Linear Function 1 — fn_exp1_lin","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"Computes value based exponential growth curve linear decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"","code":"fn_exp1_lin(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter exponential term. Must greater 0. beta Numeric. parameter linear term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"numeric value based exponential linear model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)) - 1. t greater t2, function returns beta * (t - t2) + (exp(alpha * (t2 - t1)) - 1).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\beta \\cdot (t - t_2) + \\left(e^{\\alpha \\cdot (t_2 - t_1)} - 1\\right) & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp1_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Linear Function 1 — fn_exp1_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp1_lin\", params = c(t1 = 35, t2 = 55, alpha = 1 / 20, beta = -1 / 40), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Exponential Function 2 — fn_exp2_exp","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"Computes value based exponential growth curve exponential decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"","code":"fn_exp2_exp(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter first exponential term. Must greater 0. beta Numeric. parameter second exponential term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"numeric value based double exponential model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)^2) - 1. t greater t2, function returns (exp(alpha * (t2 - t1)^2) - 1) * exp(beta * (t - t2)).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) \\cdot e^{\\beta \\cdot (t - t_2)} & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_exp.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Exponential Function 2 — fn_exp2_exp","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp2_exp\", params = c(t1 = 35, t2 = 55, alpha = 1 / 600, beta = -1 / 30), interval = c(0, 108), n_points = 2000, auc_label_size = 3, y_auc_label = 0.15 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Exponential Linear Function 2 — fn_exp2_lin","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"Computes value based exponential growth curve linear decay model time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"","code":"fn_exp2_lin(t, t1, t2, alpha, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Assumed known. t2 Numeric. upper threshold time. alpha Numeric. parameter exponential term. Must greater 0. beta Numeric. parameter linear term. Must less 0.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"numeric value based exponential linear model. t less t1, function returns 0. t t1 t2 (inclusive), function returns exp(alpha * (t - t1)^2) - 1. t greater t2, function returns beta * (t - t2) + (exp(alpha * (t2 - t1)^2) - 1).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"$$ f(t; t_1, t_2, \\alpha, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ e^{\\alpha \\cdot (t - t_1)^2} - 1 & \\text{} t_1 \\leq t \\leq t_2 \\\\ \\beta \\cdot (t - t_2) + \\left(e^{\\alpha \\cdot (t_2 - t_1)^2} - 1\\right) & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_exp2_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Exponential Linear Function 2 — fn_exp2_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_exp2_lin\", params = c(t1 = 35, t2 = 55, alpha = 1 / 600, beta = -1 / 80), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Function — fn_lin","title":"Linear Function — fn_lin","text":"Computes value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Function — fn_lin","text":"","code":"fn_lin(t, m, b)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Function — fn_lin","text":"t Numeric value. m Numeric value slope coefficient. b Numeric value intercept coefficient.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Function — fn_lin","text":"numeric value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Function — fn_lin","text":"$$ f(t; m, b) = m \\cdot t + b $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Function — fn_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin\", params = c(m = 2, b = 10), interval = c(0, 108), n_points = 2000 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear — fn_lin_pl_lin","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"Linear Plateau Linear","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"","code":"fn_lin_pl_lin(t, t1, t2, t3, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time plateau. Default 80. t3 Numeric. lower threshold time plateau. Default 45. k Numeric. maximum value function. Default 0.9. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"$$ f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear — fn_lin_pl_lin","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin\", params = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"Linear Plateau Linear Constrains","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"","code":"fn_lin_pl_lin2(t, t1, t2, dt, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"t Numeric. time value. t1 Numeric. lower threshold time. t2 Numeric. upper threshold time plateau. dt Numeric. dt = t3 - t2. k Numeric. maximum value function. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"$$ f(t; t_1, t_2, dt, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq (t_2 + dt) \\\\ k + \\beta \\cdot (t - (t_2 + dt)) & \\text{} t > (t_2 + dt) \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin2.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear with Constrains — fn_lin_pl_lin2","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin2\", params = c(t1 = 38.7, t2 = 62, dt = 28, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":null,"dir":"Reference","previous_headings":"","what":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"Linear Plateau Linear Constrains","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"","code":"fn_lin_pl_lin3(t, t1, t2, t3, k, beta)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time plateau. Default 80. t3 Numeric. lower threshold time plateau. Default 45. k Numeric. maximum value function. Default 0.9. beta Numeric. Slope linear decay.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"numeric value based linear plateau linear model.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"$$ f(t; t_1, t_2, t_3, k, \\beta) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t_2 \\leq t \\leq t_3 \\\\ k + \\beta \\cdot (t - t_3) & \\text{} t > t_3 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_lin_pl_lin3.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Linear Plateau Linear Constrains — fn_lin_pl_lin3","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_lin_pl_lin3\", params = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":null,"dir":"Reference","previous_headings":"","what":"Piecewise Linear Regression — fn_piwise","title":"Piecewise Linear Regression — fn_piwise","text":"Computes value based linear growth curve reaching plateau time.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Piecewise Linear Regression — fn_piwise","text":"","code":"fn_piwise(t, t1 = 45, t2 = 80, k = 0.9)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Piecewise Linear Regression — fn_piwise","text":"t Numeric. time value. t1 Numeric. lower threshold time. Default 45. t2 Numeric. upper threshold time. Default 80. k Numeric. maximum value function. Default 0.9. Assumed known.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Piecewise Linear Regression — fn_piwise","text":"numeric value based threshold model. t less t1, function returns 0. t t1 t2 (inclusive), function returns value 0 k linear trend. t greater t2, function returns k.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Piecewise Linear Regression — fn_piwise","text":"$$ f(t; t_1, t_2, k) = \\begin{cases} 0 & \\text{} t < t_1 \\\\ \\dfrac{k}{t_2 - t_1} \\cdot (t - t_1) & \\text{} t_1 \\leq t \\leq t_2 \\\\ k & \\text{} t > t_2 \\end{cases} $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_piwise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Piecewise Linear Regression — fn_piwise","text":"","code":"library(flexFitR) plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 108), n_points = 2000, auc_label_size = 3 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":null,"dir":"Reference","previous_headings":"","what":"Quadratic Function — fn_quad","title":"Quadratic Function — fn_quad","text":"Computes value based quadratic function..","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Quadratic Function — fn_quad","text":"","code":"fn_quad(t, a, b, c)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Quadratic Function — fn_quad","text":"t Numeric value. Numeric value coefficient . b Numeric value coefficient b. c Numeric value coefficient c.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Quadratic Function — fn_quad","text":"numeric value based linear function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Quadratic Function — fn_quad","text":"$$ f(t; , b, c) = \\cdot t^2 + b \\cdot t + c $$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/fn_quad.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quadratic Function — fn_quad","text":"","code":"library(flexFitR) plot_fn(fn = \"fn_quad\", params = c(a = 1, b = 10, c = 5))"},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":null,"dir":"Reference","previous_headings":"","what":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"Generic function calculating Akaike's ‘Information Criterion’ fitted model object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"","code":"# S3 method for class 'modeler' AIC(object, ..., k = 2) # S3 method for class 'modeler' BIC(object, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"object object inheriting class modeler resulting executing function modeler() ... parameters. future improvements. k Numeric, penalty per parameter used; default k = 2 classical AIC.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"tibble columns giving corresponding AIC BIC.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/goodness_of_fit.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Akaike's An Information Criterion for an object of class modeler — goodness_of_fit","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) mo_2 <- modeler(dt, X, Y, fn = \"fn_quad\", param = c(a = 1, b = 10, c = 5)) AIC(mo_1) #> uid logLik df nobs p AIC #> 1 1 -21.45745 3 6 2 48.9149 AIC(mo_2) #> uid logLik df nobs p AIC #> 1 1 -21.00014 4 6 3 50.00028 BIC(mo_1) #> uid logLik df nobs p BIC #> 1 1 -21.45745 3 6 2 48.29017 BIC(mo_2) #> uid logLik df nobs p BIC #> 1 1 -21.00014 4 6 3 49.16732"},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"logLik object class modeler","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"","code":"# S3 method for class 'modeler' logLik(object, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"object object inheriting class modeler resulting executing function modeler() ... parameters. future improvements.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"tibble Log-Likelihood fitted models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/logLik.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract Log-Likelihood for an object of class modeler — logLik.modeler","text":"","code":"library(flexFitR) dt <- data.frame(X = 1:6, Y = c(12, 16, 44, 50, 95, 100)) mo_1 <- modeler(dt, X, Y, fn = \"fn_lin\", param = c(m = 10, b = -5)) plot(mo_1) logLik(mo_1) #> uid logLik df nobs p #> 1 1 -21.45745 3 6 2"},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Metrics for modeler — metrics","title":"Metrics for modeler — metrics","text":"Computes various performance metrics modeler object. function calculates Sum Squared Errors (SSE), Mean Absolute Error (MAE), Mean Squared Error (MSE), Root Mean Squared Error (RMSE), Coefficient Determination (R-squared).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Metrics for modeler — metrics","text":"","code":"metrics(x, by_grp = TRUE)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Metrics for modeler — metrics","text":"x object class `modeler` containing necessary data compute metrics. by_grp Return metrics id? TRUE default.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Metrics for modeler — metrics","text":"data frame containing calculated metrics grouped uid, metadata, variables.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Metrics for modeler — metrics","text":"Sum Squared Errors (SSE): $$SSE = \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2$$Mean Absolute Error (MAE): $$MAE = \\frac{1}{n} \\sum_{=1}^{n} |y_i - \\hat{y}_i|$$Mean Squared Error (MSE): $$MSE = \\frac{1}{n} \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2$$Root Mean Squared Error (RMSE): $$RMSE = \\sqrt{\\frac{1}{n} \\sum_{=1}^{n} (y_i - \\hat{y}_i)^2}$$Coefficient Determination (R-squared): $$R^2 = 1 - \\frac{\\sum_{=1}^{n} (y_i - \\hat{y}_i)^2}{\\sum_{=1}^{n} (y_i - \\bar{y})^2}$$","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Metrics for modeler — metrics","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:2), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(1:2)) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4489 2.0903 3.7317 3.7317 5.3731 7.0145 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 0.449 #> 2 35.2 60.7 100.0 7.014 #> #> Metrics: #> Groups Timing Convergence Iterations #> 2 0.9623 secs 100% 469 (id) #> metrics(mod_1) #> # A tibble: 2 × 8 #> uid var SSE MAE MSE RMSE r_squared n #> #> 1 1 Canopy 0.449 0.0744 0.0499 0.223 1.00 9 #> 2 2 Canopy 7.01 0.468 0.779 0.883 1.00 9"},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Modeler — modeler","title":"Modeler — modeler","text":"General-purpose optimization techniques non-linear least squares problems.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Modeler — modeler","text":"","code":"modeler( data, x, y, grp, keep, fn = \"fn_piwise\", parameters = NULL, lower = -Inf, upper = Inf, fixed_params = NULL, method = c(\"subplex\", \"pracmanm\", \"anms\"), return_method = FALSE, subset = NULL, add_zero = FALSE, check_negative = FALSE, max_as_last = FALSE, progress = FALSE, parallel = FALSE, workers = max(1, parallel::detectCores(), na.rm = TRUE), control = list() )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Modeler — modeler","text":"data data.frame wide format. x name column `data` contains x points. y name column `data` contain variable analyzed. Must match var data. grp names columns `data` contains grouping variable. (Optional). keep names columns `data` keep across analysis. fn string specifying name function used curve fitting. Default \"fn_piwise\". parameters Can named numeric vector specifying initial values parameters optimized, data frame columns uid, initial parameter values group id. Used providing specific initial values per group id. Default NULL. lower Numeric vector specifying lower bounds parameters. Default -Inf parameters. upper Numeric vector specifying upper bounds parameters. Default Inf parameters. fixed_params data frame columns uid, fixed parameter values group id. Used fixing certain parameters optimization. method character vector specifying optimization methods used. Check `optimx::checkallsolvers()` available methods. Default c(\"subplex\", \"pracmanm\", \"anms\"). return_method Logical. TRUE, includes optimization method used result. Default FALSE. subset optional vector levels `grp` filter data. Default NULL, meaning groups used. add_zero Logical. TRUE, adds zero value series start. Default FALSE. check_negative Logical. TRUE, converts negative values data zero. Default FALSE. max_as_last Logical. TRUE, appends maximum value reaching maximum. Default FALSE. progress Logical. TRUE progress bar displayed. Default FALSE. Try running function: progressr::handlers(\"progress\", \"beepr\"). parallel Logical. TRUE model fit performed parallel. Default FALSE. workers number parallel processes use. `parallel::detectCores()` control list control parameters passed optimization function. example: list(maxit = 500).","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Modeler — modeler","text":"object class modeler, list containing following elements: param data frame containing optimized parameters related information. dt data frame data used fitted values. fn call used fitting models. metrics Metrics summary models. execution Execution time. response Response variable. keep Metadata keep across. fun Name function. parallel List returning parallel workers. fit List fitted models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Modeler — modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) # Example 1 mod_1 <- dt_potato |> modeler( x = DAP, y = GLI_2, grp = Plot, fn = \"fn_lin_pl_lin\", parameters = c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), subset = 195, add_zero = TRUE ) plot(mod_1, id = 195) print(mod_1) #> #> Call: #> GLI_2 ~ fn_lin_pl_lin(DAP, t1, t2, t3, k, beta) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -0.011076 -0.002262 0.000000 -0.001676 0.000000 0.002262 #> #> Optimization Results `head()`: #> uid t1 t2 t3 k beta sse #> 195 39.6 68.3 93.3 0.323 -0.01 0.000149 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.863 secs 100% 901 (id) #> # Example 2 mod_2 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = 195, add_zero = TRUE, max_as_last = TRUE ) plot(mod_2, id = 195) print(mod_2) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> -1.340e-09 0.000e+00 0.000e+00 -9.481e-11 1.391e-10 1.391e-10 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 195 38.7 62 100 1.88e-18 #> #> Metrics: #> Groups Timing Convergence Iterations #> 1 0.5927 secs 100% 349 (id) #>"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an object of class explorer — plot.explorer","title":"Plot an object of class explorer — plot.explorer","text":"Creates various plots object class explorer. Depending specified type, function can generate plots show correlations variables x, correlations x values variable, evolution variables x.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an object of class explorer — plot.explorer","text":"","code":"# S3 method for class 'explorer' plot( x, type = \"var_by_x\", label_size = 4, signif = FALSE, method = \"pearson\", filter_var = NULL, id = NULL, n_row = NULL, n_col = NULL, base_size = 13, return_gg = FALSE, add_avg = FALSE, ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an object of class explorer — plot.explorer","text":"x object inheriting class explorer, resulting executing function explorer(). type Character string number specifying type plot generate. Available options : \"var_by_x\" 1 Plots correlations variables x (default). \"x_by_var\" 2 Plots correlations x points variable (y). \"evolution\" 3 Plot evolution variables (y) x. \"xy\" 4 Scatterplot (x, y) label_size Numeric. Size labels plot. Default 4. works type 1 2. signif Logical. TRUE, adds p-values correlation plot labels. Default FALSE. works type 1 2. method Character string specifying method correlation calculation. Available options \"pearson\" (default), \"spearman\", \"kendall\". works type 1 2. filter_var Character vector specifying variables exclude plot. id Optional unique identifier filter evolution type plot. Default NULL. works type 3. n_row Integer specifying number rows use facet_wrap(). Default NULL. works type 1 2. n_col Integer specifying number columns use facet_wrap(). Default NULL. works type 1 2. base_size Numeric. Base font size plot. Default 13. return_gg Logical. TRUE, returns ggplot object instead printing . Default FALSE. add_avg Logical. TRUE, returns evolution plot average trend across groups. Default FALSE. ... graphical parameters future improvements.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an object of class explorer — plot.explorer","text":"ggplot object invisible data.frame containing correlation table type \"var_by_x\" \"x_by_var\".","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.explorer.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an object of class explorer — plot.explorer","text":"","code":"library(flexFitR) data(dt_potato) dt_potato <- dt_potato results <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) table <- plot(results, label_size = 4, signif = TRUE, n_row = 2) table #> # A tibble: 7 × 7 #> x col row corr p.value n signi #> #> 1 36 Canopy PH 0.46 8.23e-11 176 *** #> 2 42 Canopy PH 0.67 8.55e-27 196 *** #> 3 56 Canopy PH -0.21 3.65e- 3 196 ** #> 4 76 Canopy PH 0.3 1.41e- 5 196 *** #> 5 92 Canopy PH 0.28 5.96e- 5 196 *** #> 6 100 Canopy PH 0.32 6.45e- 6 196 *** #> 7 108 Canopy PH 0.07 3.14e- 1 196 ns plot(results, type = \"x_by_var\", label_size = 4, signif = TRUE)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot an object of class modeler — plot.modeler","title":"Plot an object of class modeler — plot.modeler","text":"Create several plots object class modeler","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot an object of class modeler — plot.modeler","text":"","code":"# S3 method for class 'modeler' plot( x, id = NULL, type = 1, label_size = 4, base_size = 14, color = \"red\", parm = NULL, n_points = 2000, title = NULL, add_ci = TRUE, add_ribbon = FALSE, color_ribbon = \"blue\", ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot an object of class modeler — plot.modeler","text":"x object class modeler, typically result calling modeler(). id optional group ID filter data plotting, useful avoiding overcrowded plots. type Numeric value (1-6) specify type plot generate. Default 1. type = 1 Plot raw data fitted curves. type = 2 Plot coefficients confidence intervals. type = 3 Plot fitted curves, colored group. type = 4 Plot fitted curves confidence intervals. type = 5 Plot first derivative confidence intervals. type = 6 Plot second derivative confidence intervals. label_size Numeric value size labels. Default 4. base_size Numeric value base font size pts. Default 14. color Character string specifying color fitted line type = 1. Default \"red\". parm Character vector specifying parameters plot type = 2. NULL, parameters included. n_points Numeric value specifying number points interpolation along x-axis. Default 2000. title Optional character string add title plot. add_ci Logical value indicating whether add confidence intervals type = 4, 5, 6. Default TRUE. add_ribbon Logical value indicating whether add ribbon confidence intervals type = 4, 5, 6. Default FALSE. color_ribbon Character string specifying color ribbon. Default \"blue\". ... Additional graphical parameters future extensions.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot an object of class modeler — plot.modeler","text":"ggplot object representing specified plot.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot an object of class modeler — plot.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot an object of class modeler — plot.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, GLI_2), id = Plot) # Example 1 mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:3), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.4489 2.3551 4.2612 3.9082 5.6379 7.0145 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 0.449 #> 2 35.2 60.7 100.0 7.014 #> 3 33.8 59.9 100.0 4.261 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.4336 secs 100% 499.67 (id) #> plot(mod_1, id = 1:2) plot(mod_1, id = 1:3, type = 2, label_size = 10)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot Function — plot_fn","title":"Plot Function — plot_fn","text":"function plots user-defined function specified interval annotates plot calculated Area Curve (AUC) parameter values. aim `plot_fn` allow users play different Starting Values functions fitting models.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot Function — plot_fn","text":"","code":"plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 100), n_points = 1000, auc = FALSE, x_auc_label = NULL, y_auc_label = NULL, auc_label_size = 4, param_label_size = 4, base_size = 12, color = \"red\", label_color = \"grey30\" )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot Function — plot_fn","text":"fn character string representing name function plotted. Default \"fn_piwise\". params named numeric vector parameters passed function. Default c(t1 = 34.9, t2 = 61.8, k = 100). interval numeric vector length 2 specifying interval function plotted. Default c(0, 100). n_points integer specifying number points used plotting. Default 1000. auc Print AUC plot? Default FALSE. x_auc_label numeric value specifying x-coordinate AUC label. Default NULL. y_auc_label numeric value specifying y-coordinate AUC label. Default NULL. auc_label_size numeric value specifying size AUC label text. Default 3. param_label_size numeric value specifying size parameter label text. Default 3. base_size numeric value specifying base size plot's theme. Default 12. color character string specifying color plot lines area fill. Default \"red\". label_color character string specifying color labels. Default \"grey30\".","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot Function — plot_fn","text":"ggplot object representing plot.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/plot_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot Function — plot_fn","text":"","code":"# Example usage plot_fn( fn = \"fn_piwise\", params = c(t1 = 34.9, t2 = 61.8, k = 100), interval = c(0, 100), n_points = 1000 ) plot_fn( fn = \"fn_lin_pl_lin\", params <- c(t1 = 38.7, t2 = 62, t3 = 90, k = 0.32, beta = -0.01), interval = c(0, 100), n_points = 1000, base_size = 12 )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Predict an object of class modeler — predict.modeler","title":"Predict an object of class modeler — predict.modeler","text":"Generate model predictions object class modeler. function allows flexible prediction types, including point predictions, area curve (AUC), first second order derivatives.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Predict an object of class modeler — predict.modeler","text":"","code":"# S3 method for class 'modeler' predict( object, x = NULL, id = NULL, type = c(\"point\", \"auc\", \"fd\", \"sd\"), se_interval = c(\"confidence\", \"prediction\"), n_points = 1000, metadata = FALSE, ... )"},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Predict an object of class modeler — predict.modeler","text":"object object class modeler, typically result calling modeler() function. x numeric value vector specifying points predictions made. type = \"auc\", x must vector length 2 specifies interval calculate AUC. id Optional unique identifier filter predictions specific group. Default NULL. type character string specifying type prediction. Default \"point\". \"point\" Predicts value y given x. \"auc\" Calculates area curve (AUC) fitted model interval specified x. \"fd\" Returns first derivative (rate change) model given x value(s). \"sd\" Returns second derivative model given x value(s). se_interval character string specifying type interval standard error calculation. Options \"confidence\" (default) \"prediction\". n_points integer specifying number points used approximate area curve (AUC) type = \"auc\". Default 1000. metadata Logical. TRUE, metadata included predictions. Default FALSE. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Predict an object of class modeler — predict.modeler","text":"data.frame containing predicted values, associated standard errors, optionally metadata.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Predict an object of class modeler — predict.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/predict.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Predict an object of class modeler — predict.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3612 secs 100% 414 (id) #> # Point Prediction predict(mod_1, x = 45, type = \"point\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 38.4 0.622 # AUC Prediction predict(mod_1, x = c(0, 108), type = \"auc\", id = 2) #> # A tibble: 1 × 5 #> uid x_min x_max predicted.value std.error #> #> 1 2 0 108 6004. 30.8 # First Derivative predict(mod_1, x = 45, type = \"fd\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 3.91 0.0741 # Second Derivative predict(mod_1, x = 45, type = \"sd\", id = 2) #> # A tibble: 1 × 4 #> uid x_new predicted.value std.error #> #> 1 2 45 -0.0000000298 0.0000274"},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Print an object of class modeler — print.modeler","title":"Print an object of class modeler — print.modeler","text":"Prints information modeler function.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Print an object of class modeler — print.modeler","text":"","code":"# S3 method for class 'modeler' print(x, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Print an object of class modeler — print.modeler","text":"x object fitted function modeler(). ... Options used tibble package format output. See `tibble::print()` details.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Print an object of class modeler — print.modeler","text":"object inheriting class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Print an object of class modeler — print.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/print.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Print an object of class modeler — print.modeler","text":"","code":"library(flexFitR) data(dt_potato) explorer <- explorer(dt_potato, x = DAP, y = c(Canopy, PH), id = Plot) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(1:5), add_zero = TRUE, max_as_last = TRUE ) plot(mod_1, id = c(1:5)) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.000000 0.000049 0.448900 2.344930 4.261203 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 1 38.6 61.0 99.8 4.49e-01 #> 2 35.2 60.7 100.0 7.01e+00 #> 3 33.8 59.9 100.0 4.26e+00 #> 4 39.3 65.5 99.8 4.60e-18 #> #> Metrics: #> Groups Timing Convergence Iterations #> 5 2.2439 secs 100% 435.2 (id) #>"},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":null,"dir":"Reference","previous_headings":"","what":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"Extract variance-covariance matrix parameter estimates object class modeler.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"","code":"# S3 method for class 'modeler' vcov(x, id = NULL, ...)"},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"x object class modeler, typically result calling modeler() function. id optional unique identifier filter specific group. Default NULL. ... Additional parameters future functionality.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"list matrices, matrix represents variance-covariance matrix estimated parameters group fit.","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"Johan Aparicio [aut]","code":""},{"path":"https://apariciojohan.github.io/flexFitR/reference/vcov.modeler.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Variance-Covariance matrix for an object of class modeler — vcov.modeler","text":"","code":"library(flexFitR) data(dt_potato) mod_1 <- dt_potato |> modeler( x = DAP, y = Canopy, grp = Plot, fn = \"fn_piwise\", parameters = c(t1 = 45, t2 = 80, k = 0.9), subset = c(15, 2, 45), add_zero = TRUE, max_as_last = TRUE ) print(mod_1) #> #> Call: #> Canopy ~ fn_piwise(DAP, t1, t2, k) #> #> Sum of Squares Error: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.002601 0.504829 1.007057 2.674719 4.010777 7.014498 #> #> Optimization Results `head()`: #> uid t1 t2 k sse #> 2 35.2 60.7 100.0 7.0145 #> 15 38.5 69.4 99.8 1.0071 #> 45 38.3 64.5 100.0 0.0026 #> #> Metrics: #> Groups Timing Convergence Iterations #> 3 1.3474 secs 100% 414 (id) #> vcov(mod_1) #> $`2` #> t1 t2 k #> t1 5.694008e-02 -0.02923676 3.683474e-06 #> t2 -2.923676e-02 0.13796365 7.471629e-02 #> k 3.683474e-06 0.07471629 2.922726e-01 #> #> $`15` #> t1 t2 k #> t1 2.636323e-02 -0.02728600 1.691502e-07 #> t2 -2.728600e-02 0.08035361 1.300394e-02 #> k 1.691502e-07 0.01300394 4.196055e-02 #> #> $`45` #> t1 t2 k #> t1 4.956862e-05 -3.526927e-05 4.195078e-11 #> t2 -3.526927e-05 9.453221e-05 2.835289e-05 #> k 4.195078e-11 2.835289e-05 1.083750e-04 #>"},{"path":"https://apariciojohan.github.io/flexFitR/news/index.html","id":"flexfitr-010","dir":"Changelog","previous_headings":"","what":"flexFitR 0.1.0","title":"flexFitR 0.1.0","text":"Initial CRAN submission.","code":""}] diff --git a/man/figures/README_unnamed-chunk-6-1.png b/man/figures/README_unnamed-chunk-6-1.png index e3dff33c526ca0fb4127a6c6fcb4ce8c70620850..f6d2a7f99f12c88a1986c8d098dbbb15914768d2 100644 GIT binary patch literal 33804 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 z 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 K<`;F#KmP~dd1&hZ literal 33793 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 XT_5Rp)US*H>BhO=4E1s`_`ClEm3TVl

    Examplesprint(mod_1) #> #> Call: -#> GLI_2 ~ fn_lin_pl_lin(x, t1, t2, t3, k, beta) +#> GLI_2 ~ fn_lin_pl_lin(DAP, t1, t2, t3, k, beta) #> #> Residuals: #> Min. 1st Qu. Median Mean 3rd Qu. Max. @@ -231,8 +231,8 @@