The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Title: Linear and Nonlinear Regression for Agricultural Data
Version: 0.1.0
Description: Fit, compare, and visualise linear and nonlinear regression models tailored to field-trial and dose-response agricultural data. Provides S3 classes for mixed-effects models (via 'lme4'), nonlinear growth curves (logistic, 'Gompertz', asymptotic, linear-plateau, quadratic), and four/five-parameter log-logistic dose-response models (via 'drc'). Includes automated starting-value heuristics, goodness-of-fit statistics, residual diagnostics, and 'ggplot2'-based visualisation. Methods are based on Bates and Watts (1988, ISBN:9780471816430), Ritz and others (2015) <doi:10.1371/journal.pone.0146021>, and Bates and others (2015) <doi:10.18637/jss.v067.i01>.
Depends: R (≥ 4.1.0)
Imports: lme4 (≥ 1.1-35), drc (≥ 3.0-1), ggplot2 (≥ 3.4.0), patchwork (≥ 1.1.0), stats, utils
Suggests: broom (≥ 1.0.0), broom.mixed (≥ 0.2.9), emmeans (≥ 1.8.0), nlme (≥ 3.1-0), methods, testthat (≥ 3.0.0), knitr, rmarkdown, lmerTest, car, multcomp
License: MIT + file LICENSE
Encoding: UTF-8
Language: en-US
RoxygenNote: 7.3.3
VignetteBuilder: knitr
Config/testthat/edition: 3
NeedsCompilation: no
Packaged: 2026-03-27 06:10:56 UTC; acer
Author: Sadikul Islam ORCID iD [aut, cre]
Maintainer: Sadikul Islam <sadikul.islamiasri@gmail.com>
Repository: CRAN
Date/Publication: 2026-03-31 15:00:23 UTC

agriReg: Linear and Nonlinear Regression for Agricultural Data

Description

agriReg provides a unified interface for fitting, comparing, and visualising regression models commonly used in agricultural research:

Typical workflow

library(agriReg)

# 1. Clean field trial data
trial <- clean_agri_data(my_data, yield_col = "yield_tha")

# 2. Linear mixed model (treatment + block structure)
lm_fit <- fit_linear(trial,
                     formula = "yield_tha ~ nitrogen + phosphorus",
                     random  = "(1|block)")
summary(lm_fit)
plot(lm_fit, type = "residuals")

# 3. Nonlinear growth curve
nl_fit <- fit_nonlinear(trial, x_col = "days", y_col = "biomass",
                        model = "logistic")
plot(nl_fit)

# 4. Dose-response
dr_fit <- fit_dose_response(herb_data,
                            dose_col = "dose_g_ha",
                            resp_col = "weed_control_pct")
ed_estimates(dr_fit, respLev = c(50, 90))

# 5. Compare models
compare_models(linear = lm_fit, nonlinear = nl_fit)

Author(s)

Maintainer: Sadikul Islam sadikul.islamiasri@gmail.com (ORCID)


Clean and validate agricultural field-trial data

Description

Removes rows with missing yield values, coerces the yield column to numeric, optionally flags IQR-based outliers, and returns an agriData object with a concise summary.

Usage

clean_agri_data(
  df,
  yield_col = "yield",
  flag_outliers = TRUE,
  na_action = c("remove", "warn")
)

Arguments

df

A data.frame containing field trial records.

yield_col

Character. Name of the column that holds the primary response variable (e.g. "yield", "biomass"). Default "yield".

flag_outliers

Logical. When TRUE (default), a logical column .outlier is appended: TRUE marks observations that fall more than 1.5 x IQR below Q1 or above Q3.

na_action

One of "remove" (default) or "warn". "remove" drops rows with NA in yield_col; "warn" keeps them but issues a warning.

Value

A data.frame with additional class "agriData". Attributes n_removed (rows dropped) and n_flagged (outliers flagged) are attached.

Examples

df <- data.frame(
  yield = c(3.1, 4.2, NA, 8.9, 3.8, 100),
  block = c("A", "A", "B", "B", "C", "C")
)
clean_agri_data(df, yield_col = "yield")


Compare multiple agriReg models side by side

Description

Computes AIC, BIC, RMSE, MAE, and R² for a collection of agriLM, agriNLS, or agriDRC objects and returns them in a tidy data frame ranked by AIC.

Usage

compare_models(...)

Arguments

...

Named model objects. Names are used as row identifiers. If unnamed, models are labelled model1, model2, …

Value

A data.frame with columns model, engine, n_par, AIC, BIC, RMSE, MAE, R2, and delta_AIC (difference from best).

Examples


dat <- data.frame(
  nitrogen = rep(c(0, 40, 80, 120, 160), each = 8),
  yield    = c(2.1, 2.8, 3.6, 4.1, 4.3,
               2.0, 2.9, 3.5, 4.2, 4.4,
               2.2, 2.7, 3.7, 4.0, 4.5,
               2.1, 3.0, 3.4, 4.3, 4.2,
               2.3, 2.8, 3.6, 4.1, 4.3,
               2.0, 2.9, 3.5, 4.2, 4.4,
               2.2, 2.7, 3.7, 4.0, 4.5,
               2.1, 3.0, 3.4, 4.3, 4.2)
)
m1 <- fit_linear(dat, "yield ~ nitrogen")
m2 <- fit_nonlinear(dat, "nitrogen", "yield", "quadratic")
compare_models(linear = m1, quadratic = m2)



Compute effective dose (ED) estimates from a dose-response model

Description

Returns the dose required to achieve a specified percentage of the maximum response, with confidence intervals via the delta method.

Usage

ed_estimates(
  drc_fit,
  respLev = c(10, 50, 90),
  interval = "delta",
  level = 0.95
)

Arguments

drc_fit

An agriDRC object.

respLev

Numeric vector of response levels (default c(10, 50, 90)). E.g. 50 = ED50 (dose for 50% of maximum effect).

interval

Type of confidence interval: "delta" (default) or "none".

level

Confidence level (default 0.95).

Value

A matrix of ED estimates and confidence bounds (printed and returned invisibly).


Fit a log-logistic or Weibull dose-response model

Description

A wrapper around drc::drm() providing the four model families most commonly used in herbicide/pesticide and nutrient-response studies. Returns an agriDRC object with print, summary, and plot methods.

Usage

fit_dose_response(
  data,
  dose_col,
  resp_col,
  fct = c("LL.4", "LL.5", "W1.4", "W2.4"),
  curveid = NULL,
  ...
)

Arguments

data

A data frame containing dose and response columns.

dose_col

Character. Name of the dose/concentration column.

resp_col

Character. Name of the response column (e.g. percentage inhibition, weed biomass reduction, germination rate).

fct

Character. Model function:

"LL.4"

4-parameter log-logistic (default). Parameters: b, c, d, e.

"LL.5"

5-parameter log-logistic (asymmetry parameter f added).

"W1.4"

4-parameter Weibull type-1.

"W2.4"

4-parameter Weibull type-2.

curveid

Optional column name for grouping curves (e.g. "species" or "treatment"). Passed directly to drc::drm().

...

Additional arguments forwarded to drc::drm().

Value

An object of class "agriDRC" containing:

fit

The underlying drc object.

fct

The model function name.

dose_col, resp_col

Column names used.

data

The data used.

call

The matched call.

Examples


herbicide_trial <- load_example_data("herbicide_trial")
dr <- fit_dose_response(herbicide_trial,
                        dose_col = "dose_g_ha",
                        resp_col = "weed_control_pct")
summary(dr)
ed_estimates(dr, respLev = c(10, 50, 90))
plot(dr)



Fit a linear or mixed-effects model for agricultural trials

Description

A wrapper around stats::lm() and lme4::lmer() that returns an agriLM object with consistent print, summary, plot, coef, fitted, residuals, and predict S3 methods.

Usage

fit_linear(data, formula, random = NULL, weights = NULL, ...)

Arguments

data

A data frame or agriData object.

formula

A model formula as a character string or formula object. Example: "yield ~ treatment + block".

random

Optional character string specifying the random-effects term in lme4 syntax, e.g. "(1|block)" or "(1|block) + (1|location)". When supplied lme4::lmer() is used; otherwise stats::lm().

weights

Optional numeric vector of observation weights passed to lm() or lmer().

...

Additional arguments forwarded to lm() or lmer().

Value

An object of class "agriLM" (a named list) containing:

fit

The underlying lm or lmerMod object.

engine

Character: "lm" or "lmer".

formula

The fixed-effects formula.

random

The random-effects term (or NULL).

data

The data used for fitting.

call

The matched call.

Examples


wheat_trial <- load_example_data("wheat_trial")
# Ordinary least squares
m1 <- fit_linear(wheat_trial, "yield ~ nitrogen + phosphorus")

# Mixed model with block as random effect
m2 <- fit_linear(wheat_trial,
                 "yield ~ nitrogen + phosphorus",
                 random = "(1|block)")
summary(m2)
plot(m2, type = "residuals")



Fit a nonlinear growth or response curve to agricultural data

Description

Provides a unified interface for five model families commonly used in agronomic research. Automatic starting-value heuristics are applied when start is not supplied, making the function usable without prior knowledge of parameter ranges.

Usage

fit_nonlinear(
  data,
  x_col,
  y_col,
  model = c("logistic", "gompertz", "asymptotic", "linear_plateau", "quadratic"),
  start = NULL,
  control = nls.control(maxiter = 500, tol = 1e-06)
)

Arguments

data

A data frame (or agriData) with at least x_col and y_col.

x_col

Character. Name of the independent variable column (e.g. "days", "dose", "nitrogen_kg_ha").

y_col

Character. Name of the response column (e.g. "yield", "biomass", "plant_height").

model

One of:

"logistic"

3-parameter logistic: y = Asym / (1 + exp((xmid - x)/scal))

"gompertz"

3-parameter Gompertz: y = Asym \cdot \exp(-\exp(b2(b3-x)))

"asymptotic"

Asymptotic / Mitscherlich: y = Asym(1 - \exp(-rate \cdot x))

"linear_plateau"

Linear-plateau (broken-stick): y = a + b \cdot \min(x, cp)

"quadratic"

Quadratic polynomial: y = a + b \cdot x + c \cdot x^2

start

Optional named list of starting parameter values. When NULL (default), heuristic starting values are derived from the data.

control

A list passed to stats::nls.control(). Increase maxiter if convergence fails.

Value

An object of class "agriNLS", a named list containing:

fit

The nls object.

model

Character: the model name.

x_col, y_col

Column names used.

data

The data used for fitting.

call

The matched call.

Examples


maize_growth <- load_example_data("maize_growth")
nl <- fit_nonlinear(maize_growth, x_col = "days", y_col = "biomass_g",
                    model = "logistic")
summary(nl)
plot(nl)



Fit a sequence of polynomial linear models and pick the best

Description

Convenience function for testing linear, quadratic, and cubic fits of a single continuous predictor and selecting the best by AIC.

Usage

fit_polynomial(data, x_col, y_col, max_degree = 3)

Arguments

data

A data frame.

x_col

Predictor column name.

y_col

Response column name.

max_degree

Maximum polynomial degree to test (default 3).

Value

An agriLM object for the best-fitting model. A comparison table is printed as a side-effect.

Examples


wheat_trial <- load_example_data("wheat_trial")
best <- fit_polynomial(wheat_trial, x_col = "nitrogen", y_col = "yield")
plot(best)



Compute goodness-of-fit statistics for a model

Description

Extracts R², adjusted-R², RMSE, MAE, AIC, and BIC from an agriLM, agriNLS, or agriDRC object (or any object with fitted(), residuals(), and AIC() methods).

Usage

gof_stats(model)

Arguments

model

An agriLM, agriNLS, agriDRC, or compatible model object.

Value

A named list with elements R2, adj_R2, RMSE, MAE, AIC, and BIC.


Simulated herbicide dose-response dataset

Description

Weed control percentage measured across seven herbicide doses for two weed species.

Format

A data frame with 84 rows and 4 variables:

species

Weed species (Amaranth, Ryegrass).

dose_g_ha

Herbicide dose (g active ingredient per hectare).

weed_control_pct

Weed control percentage (0–100).

rep

Replicate number (1–6).

Source

Simulated for package demonstration.


Load a bundled agriReg example dataset

Description

Reads one of the three example datasets shipped with the package from inst/extdata. Under normal installation the datasets are available directly via data(wheat_trial) etc; this function is a fallback that works even when .rda files have not been compiled.

Usage

load_example_data(name = c("wheat_trial", "maize_growth", "herbicide_trial"))

Arguments

name

One of "wheat_trial", "maize_growth", or "herbicide_trial".

Value

A data.frame.

Examples

wheat <- load_example_data("wheat_trial")
head(wheat)


Simulated maize growth time-series

Description

Daily above-ground biomass measurements from 10 maize plants tracked from emergence to physiological maturity under well-watered conditions.

Format

A data frame with 200 rows and 4 variables:

plant_id

Plant identifier (1–10).

days

Days after emergence.

biomass_g

Dry biomass (g/plant).

treatment

Water treatment (WW = well-watered, DS = drought-stressed).

Source

Simulated for package demonstration.


Comprehensive model summary with fit statistics

Description

Prints a formatted block with coefficient table, goodness-of-fit statistics, and (for agriLM) an ANOVA table.

Usage

model_summary(model, anova = TRUE)

Arguments

model

An agriLM or agriNLS object.

anova

Logical. Include ANOVA table for agriLM models (default TRUE).

Value

Invisibly returns the model object (called for its side effect of printing a formatted summary block containing coefficients, goodness-of-fit statistics, and, for agriLM models fitted with engine = "lm", an ANOVA table).


Find the optimal x value (e.g. economic optimum dose)

Description

For quadratic and linear-plateau models, computes the x value that maximises the predicted response.

Usage

optimum_dose(nls_fit)

Arguments

nls_fit

An agriNLS object fitted with model = "quadratic" or "linear_plateau".

Value

A named numeric vector with x_opt (optimum x) and y_max (predicted maximum y).


Flag outliers using multiple methods

Description

A standalone outlier-detection function supporting IQR, Z-score, and modified Z-score (Iglewicz-Hoaglin) methods.

Usage

outlier_flag(df, col, method = c("iqr", "zscore", "modz"), threshold = NULL)

Arguments

df

A data frame.

col

Column name to test.

method

One of "iqr" (default), "zscore", "modz".

threshold

Numeric threshold: for "iqr" the IQR multiplier (default 1.5); for "zscore" the SD multiplier (default 3); for "modz" the modified Z-score cutoff (default 3.5).

Value

df with a logical column ⁠<col>_outlier⁠.


Plot a fitted dose-response curve

Description

Plot a fitted dose-response curve

Usage

## S3 method for class 'agriDRC'
plot(x, log_dose = TRUE, n_points = 200, ...)

Arguments

x

An agriDRC object.

log_dose

Logical. Plot dose on a log10 scale (default TRUE).

n_points

Integer. Points on the smooth curve (default 200).

...

Ignored.

Value

A ggplot object (printed invisibly).


Plot diagnostics for an agriLM model

Description

Plot diagnostics for an agriLM model

Usage

## S3 method for class 'agriLM'
plot(x, type = c("fit", "residuals", "qq", "scale"), ...)

Arguments

x

An agriLM object.

type

One of "fit" (observed vs fitted), "residuals" (residuals vs fitted), "qq" (normal Q-Q), or "scale" (sqrt(|residuals|) vs fitted). Default "fit".

...

Ignored.

Value

A ggplot object (printed invisibly).


Plot a fitted nonlinear curve over observed data

Description

Plot a fitted nonlinear curve over observed data

Usage

## S3 method for class 'agriNLS'
plot(x, n_points = 300, show_residuals = FALSE, ...)

Arguments

x

An agriNLS object.

n_points

Integer. Number of points on the fitted curve (default 300).

show_residuals

Logical. When TRUE, adds vertical line segments from observed points to the curve. Default FALSE.

...

Ignored.

Value

A ggplot object (printed invisibly).


A convenience wrapper for ggplot2 visualisation of model fit

Description

Dispatches to plot.agriLM, plot.agriNLS, or plot.agriDRC depending on model class. Useful in pipeline contexts.

Usage

plot_fit(model, ...)

Arguments

model

An agriLM, agriNLS, or agriDRC object.

...

Arguments passed to the underlying plot method.

Value

A ggplot object, returned invisibly. Called primarily for the side effect of printing the plot. The exact structure of the returned object depends on the class of model: plot.agriLM, plot.agriNLS, or plot.agriDRC is dispatched accordingly.


Residual diagnostic plot panel

Description

Generates a 2×2 panel of residual diagnostics: residuals vs fitted, normal Q-Q, scale-location, and a histogram of residuals.

Usage

residual_check(model, ncol = 2)

Arguments

model

An agriLM or agriNLS object.

ncol

Integer. Number of plot columns (default 2).

Value

Invisibly returns the list of four ggplot objects.


Simulated wheat nitrogen-response trial

Description

A simulated dataset from a randomised complete block design (RCBD) testing four nitrogen rates across three blocks and two phosphorus levels.

Format

A data frame with 72 rows and 6 variables:

block

Block identifier (A, B, C).

nitrogen

Nitrogen application rate (kg/ha).

phosphorus

Phosphorus level (low, high).

variety

Crop variety (V1, V2).

yield

Grain yield (t/ha).

biomass

Above-ground dry biomass (t/ha).

Source

Simulated for package demonstration.


Normalise yield values within groups

Description

Z-score or min-max normalises a numeric column, optionally within groups (e.g. per trial site or year).

Usage

yield_normalize(
  df,
  yield_col = "yield",
  method = c("zscore", "minmax"),
  group_by = NULL
)

Arguments

df

A data frame.

yield_col

Character. Column to normalise.

method

"zscore" (default) or "minmax".

group_by

Character vector of grouping column names, or NULL for global normalisation.

Value

df with a new column ⁠<yield_col>_norm⁠.

Examples

df <- data.frame(yield = c(3, 4, 5, 6), site = c("A","A","B","B"))
yield_normalize(df, group_by = "site")

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.