## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
has_ranger <- requireNamespace("ranger", quietly = TRUE)
has_agridat <- requireNamespace("agridat", quietly = TRUE)

## ----setup--------------------------------------------------------------------
library(AgriFusionR)

## -----------------------------------------------------------------------------
d <- demo_agri_data(n_units = 30, n_seasons = 3)
head(d[, c("unit_id", "lon", "lat", "season", "planting", "harvest", "yield")])

p <- agri_project(d)
p

## -----------------------------------------------------------------------------
p <- add_climate(p, source = "demo")
p <- add_soil(p, source = "demo_soil")
list_sources()[, c("name", "kind", "network")]

## -----------------------------------------------------------------------------
growing_degree_days(tmin = c(8, 12, 16), tmax = c(22, 28, 34), t_base = 10)
crop_parameters("maize")

## -----------------------------------------------------------------------------
p <- phenology_windows(p)
head(p$windows, 4)

## -----------------------------------------------------------------------------
p <- build_features(p, stats = c("mean", "sum"))
grep("grain_fill|silking", names(p$features), value = TRUE)[1:6]

## -----------------------------------------------------------------------------
check_project(p)

## ----eval = has_ranger--------------------------------------------------------
set.seed(1)
m <- train_model(p, target = "yield", algorithm = "ranger", k = 5)
m

## ----eval = has_ranger--------------------------------------------------------
uncertainty(m)
head(predict(m, interval = TRUE), 3)

## ----eval = has_agridat && has_ranger-----------------------------------------
data(lasrosas.corn, package = "agridat")
d0 <- lasrosas.corn[seq(1, nrow(lasrosas.corn), by = 3), ]

real <- data.frame(unit_id = sprintf("p%05d", seq_len(nrow(d0))),
                   lon = d0$long, lat = d0$lat, season = d0$year,
                   yield = d0$yield)
covs <- data.frame(unit_id = real$unit_id, nitro = d0$nitro, bv = d0$bv)
for (lv in levels(d0$topo)) covs[[paste0("topo_", lv)]] <- +(d0$topo == lv)

register_source("lasrosas", function(units, seasons, ...) covs,
                provides = setdiff(names(covs), "unit_id"),
                kind = "static", requires_network = FALSE)

rp <- build_features(add_layer(agri_project(real), "lasrosas", "field"))
set.seed(11)
train_model(rp, target = "yield", algorithm = "ranger", k = 5)

## ----eval = has_ranger--------------------------------------------------------
set.seed(2)
head(explain(m, n_perm = 3), 5)

## ----eval = has_ranger--------------------------------------------------------
cat(head(report(m), 24), sep = "\n")

## -----------------------------------------------------------------------------
register_learner("median_only",
                 fit = function(x, y, ...) stats::median(y),
                 predict = function(object, newx, ...) rep(object, nrow(newx)),
                 description = "Baseline: predict the median")
tail(list_learners(), 2)

