Provides tools for comparing treatments in unreplicated on-farm
experiments (OFE) using georeferenced data. The package includes functions
for constructing spatial grids, estimating the effective sample size from
spatial autocorrelation, performing repeated permutation tests, adjusting
pairwise comparisons, and visualizing the results. It implements the
OFE-mean test described in Córdoba, Paccioretti and Balzarini (2025)
You can install the package from CRAN:
install.packages("ofemeantest")
Also, you can install the development version of ofemeantest from GitHub with:
# install.packages("pak")
pak::pkg_install("PPaccioretti/ofemeantest")
The example dataset comprised a field trial of corn (Zea mays L.), where the impact of broadcast phosphorus fertilization was evaluated. The treatment strip received superphosphate at rates ranging from 250 to 500 $kg\ ha^{–1}$ [0-21-0], while the control strip received no P fertilizer (0 $kg\ ha^{–1}$). Each strip was 2.2 ha in area, totaling 100 ha. Raw grain yield monitor data for each each single strip were cleaned following the protocol proposed by Vega et al. (2019).
library(ofemeantest)
data("ofe_f2")
The ofemt function first creates a regular artificial grid over the
area, including the strips to be analyzed. The grid spacing (cellsize)
was set to 9 m. This grid overlaid the point data from the yield map,
assigning each georeferenced data point to a corresponding grid cell.
Each grid cell contained a minimum of four data points
(min_per_cell = 4). Empty cells or cells with less than four data
points are removed. The median of the yield data is calculated for each
cell. A one-way ANOVA is fitted to the cell medians to compare
treatments. From the residuals of the fitted model, the magnitude of
spatial autocorrelation is estimated using the approximate profile
likelihood estimator of spatial dependence (Rho) and the Moran index
(MI). An effective sample size (ESS) is then calculated. Second, ofemt
randomly samples grid cells without replacement using the ESS. The yield
data from both strips (treatment and control) are used to perform a
permutational ANOVA with 2000 iterations per test (n_p). This
procedure provides a p-value for the comparison of treatment means. The
permutational ANOVA is repeated on 200 random samples of grid cells
(n_s) using the same sampling procedure. The significance level for
comparing means (alpha), is left at their default value (0.05). The
resulting permutation p-values are collected to generate an empirical
p-value distribution. Finally, the median p-value is calculated to
compare the means.
ofemt(
data = ofe_f2,
y = "Yield_tn",
x = "Treatment",
cellsize = 9,
min_per_cell = 4,
n_p = 2000,
n_s = 200,
alpha = 0.05,
shift = 0,
p_adjust_method = "none",
crs = NULL
)
#> `grid` not provided: building one internally via `make_ofe_grid()`. Pass a pre-built `ofe_grid` to inspect or reuse the selection.
#>
#> === OFE permutation analysis ===
#> Cellsize: 9 x 9 | Total cells: 1840 | Selected cells: 554
#> Obs/cell (min/median/max): 4 / 5 / 7
#> n: 554 | ESS: 97 | Rho: 0.652 | Moran's I: 0.548
#>
#> --- Means comparison (sorted by decreasing mean) ---
#> Treatment Yield_tn_mean letters
#> Fertilized 5.280402 a
#> Control 4.760095 b
#>
#> --- Pairwise tests (median p across runs) ---
#> Comparison p_value p_adj
#> Fertilized vs. Control 0.0055 0.0055
The results show that out of the total number of cells selected (554), the ESS was 97, with a magnitude of autocorrelation (Rho) of 0.65. The fertilization treatment showed significant differences compared to the control (p < 0.05).
The average yield of the fertilized strip was 5.28 $t\ ha^{-1}$, while that of the control was 4.76 $t\ ha^{-1}$.
Córdoba, M., Paccioretti, P., & Balzarini, M. (2025). A new method to compare treatments in unreplicated on-farm experimentation. Precision Agriculture, 26(1), 4. https://doi.org/10.1007/s11119-024-10206-0
Vega A., Córdoba M., Balzarini M. 2019. Protocol for automating error removal from yield maps. Precis. Agric. 20: 1030–1044. https://doi.org/10.1007/s11119-018-09632-8
Hacer funcion make_grid. La funcion va atener dentro dos funciones
pricipales Una que hace la grilla. all_cells_grid Otra que selecciona
las celdas de la grilla en funcion de las observaciones. select_grid