## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse  = TRUE,
  comment   = "#>",
  fig.width = 7,
  fig.height = 4,
  message   = FALSE,
  warning   = FALSE
)

## ----install, eval = FALSE----------------------------------------------------
# # From CRAN (once published)
# install.packages("NRMstatsML")
# 
# # Development version from GitHub
# # install.packages("remotes")
# remotes::install_github("yourorg/NRMstatsML")

## ----load-data----------------------------------------------------------------
library(NRMstatsML)

data(nrm_example)
head(nrm_example)

## ----data-check---------------------------------------------------------------
nrm_data_check(nrm_example)

## ----trend--------------------------------------------------------------------
trend_res <- nrm_trend(nrm_example,
                       time_var  = "year",
                       value_var = "crop_yield",
                       breaks    = TRUE)
print(trend_res)

## ----trend-plot---------------------------------------------------------------
nrm_plot(trend_res)

## ----mk-only------------------------------------------------------------------
mk <- nrm_mann_kendall(nrm_example, time_var = "year",
                       value_var = "soil_OC")
print(mk)

ss <- nrm_sens_slope(nrm_example, time_var = "year",
                     value_var = "soil_OC")
print(ss)

## ----multivariate-------------------------------------------------------------
mv <- nrm_multivariate(nrm_example,
        formula = crop_yield ~ N + P + K + rainfall,
        scale   = TRUE)
print(mv)

## ----pls----------------------------------------------------------------------
pl <- nrm_pls(nrm_example,
              formula = crop_yield ~ N + P + K + rainfall + soil_OC,
              ncomp   = 3)
print(pl)

## ----response-curve-----------------------------------------------------------
rc <- nrm_response_curve(nrm_example,
        input_var    = "N",
        response_var = "crop_yield",
        type         = "quadratic")
print(rc)
nrm_plot(rc)

## ----optimise-----------------------------------------------------------------
opt <- nrm_optimize_input(rc, price_ratio = 0.6)
print(opt)

## ----arima--------------------------------------------------------------------
ar <- nrm_arima(nrm_example, value_var = "crop_yield")
print(ar)

## ----forecast-----------------------------------------------------------------
fc <- nrm_forecast(nrm_example,
                   value_var = "crop_yield",
                   horizon   = 5)
print(fc)
nrm_plot(fc)

## ----panel, eval = FALSE------------------------------------------------------
# # Requires a panel dataset with site and year identifiers
# pm <- nrm_panel(panel_data,
#                 formula = crop_yield ~ N + P + K + rainfall,
#                 index   = c("site", "year"),
#                 model   = "within")
# nrm_summary(pm)
# 
# did <- nrm_did(panel_data,
#                outcome   = "crop_yield",
#                treat_var = "treatment_binary",
#                time_var  = "post_period")
# print(did)

## ----bootstrap----------------------------------------------------------------
bs <- nrm_bootstrap(nrm_example,
        stat_fn = function(d) mean(d$crop_yield),
        n_iter  = 500)
print(bs)

## ----monte-carlo--------------------------------------------------------------
mc <- nrm_monte_carlo(nrm_example,
        stat_fn   = function(d) mean(d$crop_yield),
        n_iter    = 500,
        noise_sd  = 0.1)
print(mc)

## ----uncertainty--------------------------------------------------------------
unc <- nrm_uncertainty(nrm_example,
         stat_fn = function(d) mean(d$crop_yield),
         method  = "bootstrap",
         n_iter  = 500)
print(unc)

## ----automl, eval = FALSE-----------------------------------------------------
# # Requires caret + method-specific packages (e.g. randomForest, gbm)
# am <- nrm_automl(nrm_example,
#                  formula  = crop_yield ~ N + P + K + rainfall + soil_OC,
#                  methods  = c("lm", "rf", "gbm"),
#                  cv_folds = 5,
#                  seed     = 42)
# nrm_summary(am)

## ----benchmark, eval = FALSE--------------------------------------------------
# n     <- nrow(nrm_example)
# train <- nrm_example[seq_len(floor(0.8 * n)), ]
# test  <- nrm_example[seq(floor(0.8 * n) + 1, n), ]
# 
# m_ols <- lm(crop_yield ~ N + P + K, data = train)
# 
# bm <- nrm_benchmark(
#   models       = list(ols = m_ols),
#   test_data    = test,
#   response_var = "crop_yield"
# )
# print(bm)

## ----session-info-------------------------------------------------------------
sessionInfo()

