Reference

How EasyAnalysis computes things

The function behind each analysis, the variables it needs, the options it exposes and what it produces. If you are publishing a result, this is what to cite alongside the tool.

This page is generated from the application itself — 14 statistical methods and 51 spatial operations, read from the registries that define them. The function names below are extracted from the code that runs, so they cannot drift from what the app actually does. Built 8 August 2026.

Machine learning

XGBoost

Gradient-boosted trees for regression or classification. Strong on tabular data; cross-validation picks the number of rounds for you.

Computed with: xgboost::xgb.cv(), xgboost::xgb.DMatrix(), xgboost::xgb.importance(), xgboost::xgb.train()

Variables it needs

RoleShown asAcceptsNote
yResponse variable (Y)any
xPredictor variables (X)numericNumeric columns only - XGBoost needs a numeric matrix.

Options

KeyShown asKindChoices / default
obj_typeTask typeselRegression, Binary classification, Multiclass
nroundsBoosting roundsnum100
etaLearning ratenum0.1
max_depthMax tree depthnum6
subsampleRow subsamplenum0.8
colsampleColumn subsamplenum0.8
min_childMin child weightnum1
use_cvCross-validation (xgb.cv)chkTRUE
nfoldCV foldsnum5

Results shown: Training Curve · Feature Importance · Predictions

Support Vector Machine

SVM for regression or classification. Strong with many predictors; the kernel decides how flexible the boundary is.

Computed with: e1071::svm()

Variables it needs

RoleShown asAcceptsNote
yResponse variable (Y)any
xPredictor variables (X)numericNumeric columns only.

Options

KeyShown asKindChoices / default
svm_typeTask typeselRegression (eps-SVR), Classification (C), Classification (nu)
kernelKernelselRadial (RBF), Linear, Polynomial, Sigmoid
costCost (C)num1
gammaGamma (0 = 1/n predictors)num0
degreePolynomial degreenum3
epsilonEpsilon (tube width)num0.1
scale_xScale predictorschkTRUE
cross_vale1071 built-in 5-fold checkchkFALSE
cv_methodValidationselK-fold, LOOCV (leave-one-out)
cv_kNumber of folds (k)num5

Results shown: Performance · Support Vectors · Prediction Table

Decision Tree

A single readable tree of if/then splits. Good when you need to explain the rule, not just the prediction.

Computed with: rpart::prune(), rpart::rpart(), rpart::rpart.control()

Variables it needs

RoleShown asAcceptsNote
yResponse variable (Y)any
xPredictor variables (X)anyNumbers or categories - a tree handles both.

Options

KeyShown asKindChoices / default
tree_typeTree typeselRegression (numeric Y), Classification (category Y)
maxdepthMax depthnum5
minsplitMin rows to attempt a splitnum20
minbucketMin rows in a leafnum7
cpComplexity parameter (cp)num0.01
use_cvPrune using rpart's internal cross-validationchkTRUE
cv_methodHold-out validationselK-fold, LOOCV (leave-one-out)
cv_kNumber of folds (k)num5

Results shown: Tree diagram · CP / pruning · Variable importance · Performance

Neural Network

A single hidden layer network. Flexible, but needs scaled inputs and enough rows; weight decay keeps it from memorising the training data.

Computed with: nnet::nnet()

Variables it needs

RoleShown asAcceptsNote
yResponse variable (Y)any
xPredictor variables (X)numericNumeric columns only.

Options

KeyShown asKindChoices / default
nn_typeTask typeselRegression (numeric Y), Classification (category Y)
sizeHidden unitsnum5
decayWeight decay (L2)num0.01
maxitMax iterationsnum300
n_initRandom restartsnum3
scale_xScale predictors (recommended)chkTRUE
cv_methodValidationselK-fold, LOOCV (leave-one-out)
cv_kNumber of folds (k)num5

Results shown: Performance · Predictions · Network Info

Random Forest

Many decision trees averaged together. Strong default choice for tabular data, and it reports which predictors carried the signal.

Computed with: randomForest::randomForest(), randomForest::rfcv()

Variables it needs

RoleShown asAcceptsNote
yTarget variableany
xPredictorsany
pdp_varPartial-dependence variableanyPick one, then press the button below the Run button.

Options

KeyShown asKindChoices / default
ntreeNumber of treesnum500
run_cvAlso run 10-fold CV (slow)chkFALSE

Results shown: Model summary · Variable importance · Performance · Partial dependence

Multivariate

PCA / Factor analysis / MDS

Reduce many correlated variables to a few dimensions, and see which variables drive them.

Computed with: stats::prcomp()

Variables it needs

RoleShown asAcceptsNote
varsVariablesnumericAt least 2 numeric columns.
colourColour points bycategoricalOptional - groups the score plot.

Options

KeyShown asKindChoices / default
modeMethodselPrincipal Component Analysis (PCA), Factor Analysis (FA), Multidimensional Scaling (MDS)
scale_varsScale variables (recommended)chkTRUE
n_compComponents / factors / dimensionsnum2
fa_rotationRotationselvarimax, promax, none
fa_methodFactor methodselMaximum likelihood, Principal axis
mds_distDistance metricseleuclidean, manhattan, maximum, canberra
pc_xX-axis componentnum1
pc_yY-axis componentnum2

Results shown: Main plot · Scree / variance · Loadings · Summary table

Regression

Ordinal regression

For an ordered outcome (low / medium / high, or a Likert scale). Models the odds of being at or below each level.

Computed with: MASS::polr()

Variables it needs

RoleShown asAcceptsNote
yOrdered outcomeorderedIts levels are taken in the order they appear; reorder the column first if that is wrong.
xPredictorsany

Options

KeyShown asKindChoices / default
methodLink functionselLogistic (proportional odds), Probit, Complementary log-log

Results shown: Model summary · Coefficients · Odds ratios · Interpretation

Assumes proportional odds: one predictor effect across all level thresholds. If that is implausible, treat the outcome as nominal instead.

Robust regression

Linear regression that is not dragged around by outliers. Use it when a few extreme points distort an ordinary fit.

Computed with: MASS::psi.bisquare(), MASS::psi.hampel(), MASS::psi.huber(), MASS::rlm()

Variables it needs

RoleShown asAcceptsNote
yResponsenumeric
xPredictorsany

Options

KeyShown asKindChoices / default
psiWeighting functionselHuber (default), Tukey bisquare, Hampel

Results shown: Model summary · Coefficients · Fit quality · Down-weighted rows

Down-weights outliers rather than removing them. Standard errors are not directly comparable with ordinary least squares.

Poisson regression (counts)

For counts: number of stems, events, defects. Models the log of the expected count.

Computed with: stats::glm()

Variables it needs

RoleShown asAcceptsNote
yCount responsecountWhole numbers, zero or greater.
xPredictorsany
offsetExposure / offset (optional)numericArea, time or effort each count was observed over. Entered as log(offset).

Options

KeyShown asKindChoices / default
linkLink functionsellog, identity, sqrt

Results shown: Model summary · Coefficients · Rate ratios · Overdispersion check

Assumes the mean and variance of the count are equal. If the variance is much larger, use the negative binomial instead.

Negative binomial (overdispersed counts)

Counts whose spread is wider than Poisson allows. Use when the Poisson overdispersion check says so.

Computed with: MASS::glm.nb()

Variables it needs

RoleShown asAcceptsNote
yCount responsecount
xPredictorsany

Results shown: Model summary · Coefficients · Rate ratios · Dispersion (theta)

For counts whose variance exceeds their mean (overdispersion), which is the common case for ecological counts.

GAM (smooth curves)

Generalised additive model: fits a smooth curve per predictor instead of a straight line, and reports how much that curvature actually bought you over a linear fit.

Computed with: mgcv::gam(), mgcv::s(), stats::lm()

Variables it needs

RoleShown asAcceptsNote
yResponsenumeric
xPredictorsnumericEach gets its own smooth term.

Options

KeyShown asKindChoices / default
k_basisBasis dimension (k)num10
smooth_typeSmooth typeselThin plate (tp), Cubic regression (cr), P-spline (ps)
methodSmoothness selectionselREML, GCV.Cp, ML
cv_methodValidationselK-fold, LOOCV (leave-one-out)
cv_kNumber of folds (k)num5

Results shown: Smooth plots · Model comparison · GAM summary · Validation & metrics

GLMM (generalised mixed effects)

Mixed effects for a NON-normal response - binary, counts, proportions - with random intercepts and slopes.

Computed with: lme4::glmer()

Variables it needs

RoleShown asAcceptsNote
yResponseanyBinary (2 levels) for binomial; whole numbers for Poisson.
xFixed effectsany
gGrouping variable(s)categoricalPlot, site, subject... Several gives crossed random effects.
slopeRandom slope (optional)numericLeave empty for random intercepts only.

Options

KeyShown asKindChoices / default
familyFamilyselBinomial (yes/no), Poisson (counts)
nestedSeveral grouping variables areselCrossed (1|a) + (1|b), Nested (1|a/b)

Results shown: Model summary · Fixed effects · Random effects · Convergence & fit

Random effects are estimated by maximum likelihood. Convergence warnings are reported rather than hidden -- a model that did not converge should not be interpreted.

Statistics

Survival analysis

Time-to-event data: Kaplan-Meier curves, a log-rank test between groups, and Cox proportional hazards.

Computed with: survival::cox.zph(), survival::coxph(), survival::Surv(), survival::survdiff(), survival::survfit()

Variables it needs

RoleShown asAcceptsNote
timeTime to eventnumericHow long until the event, or until the subject was last seen.
eventEvent indicatorany1 = the event happened, 0 = censored (lost/still alive).
groupCompare groups bycategoricalOptional - splits the curves and enables the log-rank test.
covarsCox covariatesanyOptional - fits a Cox proportional-hazards model.

Options

KeyShown asKindChoices / default
cox_tiesEfron method for tied timeschkTRUE
conf_levelConfidence levelnum0.95
km_confShow confidence bandschkTRUE
km_censorMark censored observationschkTRUE

Results shown: Kaplan-Meier · Cox PH model · Log-rank test · Survival table

ANOVA (one-way)

Compares the mean of a numeric variable across groups, then Tukey HSD tells you which groups actually differ.

Computed with: stats::aov()

Variables it needs

RoleShown asAcceptsNote
yNumeric variablenumericThe measurement being compared.
xGrouping variablecategoricalNeeds at least 2 groups.

Options

KeyShown asKindChoices / default
diag_modeDiagnostic plotsselBoth side by side, One at a time
diag_whichWhich plotselResiduals vs fitted, Normal Q-Q

Results shown: Results · Tukey HSD · Diagnostics · Effect size & LOOCV

Hydrology

TWI (Topographic Wetness Index)

Approximate: contributing area is the cell area, with no flow routing.

Computed with: terra::res(), terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Flow direction (D8)

D8 flow direction from terra.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Stream extraction (slope threshold)

Marks cells steeper than the threshold. A slope proxy, not a channel network.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Options

KeyShown asKindChoices / default
thrSlope threshold (degrees)num8

Produces: a raster layer

Slope x contributing area

Approximate: contributing area is the cell area, with no flow routing.

Computed with: terra::res(), terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Fill depressions (whitebox)

True depression filling. Requires the whitebox package.

Computed with: terra::rast(), terra::writeRaster(), whitebox::install_whitebox(), whitebox::wbt_fill_depressions()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Flow accumulation (whitebox)

Fills depressions, then D8 accumulation in cells. Requires whitebox.

Computed with: terra::rast(), terra::writeRaster(), whitebox::install_whitebox(), whitebox::wbt_d8_flow_accumulation(), whitebox::wbt_fill_depressions()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Raster

Clip raster to vector layer

Crops and masks the raster to a polygon layer, reprojecting it to match.

Computed with: sf::st_transform(), terra::crop(), terra::crs(), terra::vect()

Takes: Input raster (raster), Clip polygons (vector layer) (vector)

Produces: a raster layer

Mosaic rasters

Merges several rasters into one.

Computed with: terra::mosaic(), terra::sprc()

Takes: Rasters to merge (raster)

Produces: a raster layer

Reproject raster

Warps the raster to another CRS.

Computed with: terra::project()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
crsTarget CRScrsEPSG:3067

Produces: a raster layer

Resample resolution

Resamples to a new cell size.

Computed with: terra::crs(), terra::ext(), terra::rast(), terra::resample()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
res_xX resolution (map units)num10
res_yY resolution (map units)num10
methodMethodselbilinear, near, cubic, cubicspline, lanczos

Produces: a raster layer

Band calculator

Arbitrary formula over the bands.

Computed with: terra::nlyr()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
formulaFormulatxt(b4-b3)/(b4+b3)

Produces: a raster layer

NDVI (vegetation index)

(NIR - Red) / (NIR + Red)

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
xNIR bandband4
yRed bandband3

Produces: a raster layer

NDWI (water index)

(Green - NIR) / (Green + NIR)

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
xGreen bandband2
yNIR bandband4

Produces: a raster layer

NBR (burn ratio)

(NIR - SWIR) / (NIR + SWIR)

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
xNIR bandband4
ySWIR bandband6

Produces: a raster layer

NDRE (red-edge index)

(RedEdge - Red) / (RedEdge + Red)

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
xRedEdge bandband5
yRed bandband3

Produces: a raster layer

Focal Mean Filter

Smooths raster cell values using a moving window mean.

Computed with: terra::focal()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
sizeWindow size (cells)num3

Produces: a raster layer

Focal Standard Deviation Filter

Computes local variance/SD using a moving window.

Computed with: terra::focal()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
sizeWindow size (cells)num3

Produces: a raster layer

Mask Value Range

Masks out raster cells outside a specified min and max range.

Computed with: terra::clamp()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
min_valMin Valuenum0
max_valMax Valuenum100

Produces: a raster layer

Reclassify Raster

Reclassifies raster values into discrete numeric classes.

Computed with: terra::classify()

Takes: Input raster (raster)

Options

KeyShown asKindChoices / default
rclReclass matrix (from, to, new_val; comma-separated)txt0,10,1, 10,50,2, 50,100,3

Produces: a raster layer

LiDAR Structural Metrics Grid

Computes canopy metrics (mean Z, P95, density) across cells.

Computed with: lidR::pixel_metrics()

Takes: Point cloud (las)

Options

KeyShown asKindChoices / default
resGrid Resolution (m)num10

Produces: a raster layer

Surfaces & LiDAR

DTM (Digital Terrain Model)

Bare-earth elevation, interpolated from ground returns (TIN).

Computed with: lidR::rasterize_terrain(), lidR::tin()

Takes: Point cloud (las)

Options

KeyShown asKindChoices / default
resResolution (m)num1

Produces: a raster layer

DSM (Digital Surface Model)

Top-of-surface elevation, highest return per cell (points-to-raster).

Computed with: lidR::p2r(), lidR::rasterize_canopy()

Takes: Point cloud (las)

Options

KeyShown asKindChoices / default
resResolution (m)num1

Produces: a raster layer

CHM (Canopy Height Model)

Canopy height surface using the pit-free algorithm.

Computed with: lidR::pitfree(), lidR::rasterize_canopy()

Takes: Point cloud (las)

Options

KeyShown asKindChoices / default
resResolution (m)num0.5
thresholdsPit-free thresholds (comma-separated)txt0, 5, 10, 15, 20, 25

Produces: a raster layer

nDSM (Normalized Surface Model)

Height above ground: DSM minus DTM, computed in one pass.

Computed with: lidR::p2r(), lidR::rasterize_canopy(), lidR::rasterize_terrain(), lidR::tin()

Takes: Point cloud (las)

Options

KeyShown asKindChoices / default
resResolution (m)num1

Produces: a raster layer

ITD (Individual Tree Detection)

Locate treetops on a canopy height model with a local maximum filter.

Computed with: lidR::lmf(), lidR::locate_trees()

Takes: Canopy height model (raster)

Options

KeyShown asKindChoices / default
aWindow size: anum1.2
bWindow size: bnum0.003

Produces: a vector layer

Terrain

TPI (Topographic Position Index)

Cell height relative to its neighbourhood.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

TRI (Terrain Ruggedness Index)

Mean elevation difference to neighbouring cells.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Roughness

Elevation range within the neighbourhood.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Slope (degrees)

Steepness in degrees.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Slope (percent rise)

Steepness as percent rise.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Aspect

Downslope compass direction, in degrees.

Computed with: terra::terrain()

Takes: DEM (input raster) (raster)

Produces: a raster layer

Hillshade

Shaded relief for a given sun position.

Computed with: terra::shade(), terra::terrain()

Takes: DEM (input raster) (raster)

Options

KeyShown asKindChoices / default
altSun altitude (degrees)num45
azimSun azimuth (degrees)num315

Produces: a raster layer

Profile curvature

Curvature along the slope: negative where the slope steepens (Zevenbergen & Thorne).

Takes: DEM (input raster) (raster)

Produces: a raster layer

Plan curvature

Curvature across the slope: positive on ridges, negative in hollows.

Takes: DEM (input raster) (raster)

Produces: a raster layer

Vector

Attributes to Table

Makes a vector layer's attribute table available as a dataset, so any statistical method can model it. Keeps a link back to the layer so results can be written onto the features afterwards.

Computed with: sf::st_drop_geometry()

Takes: Vector layer (vector)

Produces: a table layer

XY Coordinates to Vector

Converts tabular X and Y coordinate columns to a spatial point layer.

Computed with: sf::st_as_sf()

Takes: Tabular dataset (table)

Options

KeyShown asKindChoices / default
x_colX Coordinate Column (Easting/Lon)field
y_colY Coordinate Column (Northing/Lat)field
crsTarget CRScrsEPSG:4326

Produces: a vector layer

Buffer

Grows each feature by a fixed distance.

Computed with: sf::st_buffer()

Takes: Input vector layer (vector)

Options

KeyShown asKindChoices / default
distDistance (map units)num100

Produces: a vector layer

Dissolve

Merges features, optionally grouped by a field.

Computed with: sf::st_drop_geometry(), sf::st_sf(), sf::st_union()

Takes: Input vector layer (vector)

Options

KeyShown asKindChoices / default
byDissolve by fieldfield

Produces: a vector layer

Centroids

One point per feature, at its centre.

Computed with: sf::st_centroid()

Takes: Input vector layer (vector)

Produces: a vector layer

Reproject Vector

Reprojects a vector layer into a target CRS.

Computed with: sf::st_transform()

Takes: Input vector layer (vector)

Options

KeyShown asKindChoices / default
crsTarget CRScrsEPSG:3067

Produces: a vector layer

Clip Vector by Polygon

Intersects vector features with a polygon boundary.

Computed with: sf::st_crs(), sf::st_intersection(), sf::st_transform()

Takes: Vector layer to clip (vector), Clipping polygon (vector)

Produces: a vector layer

Bounding Box Polygon

Computes the minimum bounding box polygon around a vector layer.

Computed with: sf::st_as_sfc(), sf::st_bbox()

Takes: Input vector layer (vector)

Produces: a vector layer

Convex Hull

Computes the minimum convex polygon enclosing geometries.

Computed with: sf::st_convex_hull(), sf::st_sf(), sf::st_union()

Takes: Input vector layer (vector)

Produces: a vector layer

Simplify Geometries

Reduces vertex density while preserving general shapes.

Computed with: sf::st_simplify()

Takes: Input vector layer (vector)

Options

KeyShown asKindChoices / default
tolTolerance distance (map units)num5

Produces: a vector layer

Spatial Join

Joins attributes from a second vector layer based on spatial overlap.

Computed with: sf::st_crs(), sf::st_join(), sf::st_transform()

Takes: Target vector layer (vector), Source vector layer (vector)

Produces: a vector layer

Point Density Heatmap

Computes a continuous point density raster grid from points.

Computed with: terra::crs(), terra::ext(), terra::rast(), terra::rasterize(), terra::vect()

Takes: Input vector layer (vector)

Options

KeyShown asKindChoices / default
resGrid Resolution (m)num10

Produces: a vector layer

Distance to Vector Features

Computes raster grid of distance to nearest vector geometry.

Computed with: sf::st_transform(), terra::crs(), terra::distance(), terra::vect()

Takes: Input vector layer (vector), Reference raster extent (raster)

Produces: a vector layer

Multidirectional Hillshade

Computes multidirectional hillshade composite.

Computed with: terra::shade(), terra::terrain()

Takes: DEM (input raster) (raster)

Options

KeyShown asKindChoices / default
altSun altitudenum45

Produces: a vector layer

Normalize Point Cloud Heights

Subtracts ground elevation from point cloud Z coordinates.

Computed with: lidR::normalize_height()

Takes: Point cloud (las), Bare-earth DTM (raster)

Produces: a las layer

Geometry Area and Length

Calculates polygon area (m2/ha) or line length.

Computed with: sf::st_area(), sf::st_drop_geometry(), sf::st_length()

Takes: Input vector layer (vector)

Produces: a table layer

Generate Points Along Line

Places equidistant sample points along line geometries.

Computed with: sf::st_line_sample()

Takes: Line vector layer (vector)

Options

KeyShown asKindChoices / default
distSpacing distance (map units)num50

Produces: a vector layer

Metrics

Model quality figures are computed the same way on every screen, so a value from one method means the same thing as the value from another and the two can be compared directly. The definitions are below.

MetricMeaning
RMSERoot mean squared error — typical size of the prediction error, in the units of the response. Lower is better.
Proportion of variance explained. 1 is perfect; 0 is no better than predicting the mean.
BiasMean signed error. Positive means the model over-predicts on average.
RelBias / RRMSEThe same two quantities as a percentage of the mean observed value, so they can be compared between variables measured on different scales.

Where a method reports cross-validated figures, the folds are produced by the shared helper and the metric is computed on held-out rows, not on the rows used to fit.

Symbology

How map colours are decided. The full user-facing description is in Getting started; this is what happens underneath.

  • Categorised — the distinct values of the chosen column are sorted, and one palette colour is assigned per value.
  • Graduated — class boundaries are quantiles of the chosen column, so each class holds a similar number of features. Equal-width bands are used only as a fallback, when the values are too tied for quantiles to produce distinct boundaries. Skewed data is the norm for measured attributes, and equal-width bands would put nearly every feature in one class.
  • Palettes are perceptually uniform ramps from viridisLite; viridis, magma, plasma and cividis remain distinguishable under the common forms of colour blindness.
  • A numeric column is offered for categorised styling only when its values repeat — a column with one distinct value per feature would produce a legend as long as the layer.

About this page

Method names, variable roles, options and the underlying function calls are read directly from the application when this page is built. Assumptions and caveats are written by hand, because they cannot be derived from code.

If something here disagrees with what the app does, the page is wrong and should be rebuilt — that is the point of generating it.

Published methods implemented in the app are listed with their citations on the References screen inside EasyAnalysis. Citing the tool does not replace citing the method — see how to cite.