Introduction to ET0models (Temperature-Based)

Overview

The ET0models package provides 10 temperature-based empirical models for estimating daily reference evapotranspiration (ET0). The FAO Penman-Monteith method is included as the standard reference against which the temperature-based models are compared and evaluated.

Temperature-based models are particularly valuable in data-scarce environments because they require only readily available temperature data (plus humidity, day of year, and location in some cases), unlike methods that require wind speed or solar radiation measurements.

Temperature-Based Models

# Model Function Primary Inputs
1 Blaney-Criddle (1950) et0_blaney_criddle() Tmean
2 Schendel (Bormann, 2011) et0_schendel() Tmean, RH
3 Hargreaves-Samani (1985) et0_hargreaves_samani() Tmin, Tmax, J, lat
4 Linacre (1977) et0_linacre() Tmean, Tmin, Tmax, RH, z, lat
5 Tabari-Talaee 1 (2011) et0_tabari_talee1() Tmin, Tmax, J, lat
6 Tabari-Talaee 2 (2011) et0_tabari_talee2() Tmin, Tmax, J, lat
7 Droogers-Allen (2002) et0_droogers_allen() Tmin, Tmax, J, lat
8 Berti et al. (2014) et0_berti() Tmin, Tmax, J, lat
9 Dorji et al. (2016) et0_dorji() Tmin, Tmax, J, lat
10 Baier-Robertson (1965) et0_baier_robertson() Tmin, Tmax, J, lat

Quick Start

Loading the Package and Data

library(ET0TempModels)
data(jhansi_weather)
head(jhansi_weather)
#>         Date J Tmax Tmin RH_morning RH_evening SSH   WS
#> 1 2010-01-01 1 24.1  5.1         89         49 7.2 0.20
#> 2 2010-01-02 2 25.5  4.8         88         43 8.0 1.27
#> 3 2010-01-03 3 26.5  5.8         84         32 8.0 1.32
#> 4 2010-01-04 4 24.6  5.2         94         27 6.9 1.00
#> 5 2010-01-05 5 27.1  4.9         93         44 9.1 0.35
#> 6 2010-01-06 6 26.2  1.7         69         36 5.7 1.15

Computing ET0 for a Single Day

# FAO Penman-Monteith (reference)
et0_fao_pm(Tmin = 15, Tmax = 30, RH_morning = 90, RH_evening = 40,
           u2 = 1.5, n = 8, J = 172, lat = 25.43, z = 216)
#> [1] 4.895006

# Blaney-Criddle (needs only Tmean)
et0_blaney_criddle(Tmean = 22.5)
#> [1] 5.06352

# Hargreaves-Samani (needs Tmin, Tmax, day of year, latitude)
et0_hargreaves_samani(Tmin = 15, Tmax = 30, J = 172, lat = 25.43)
#> [1] 59.36421

Computing All 10 Temperature-Based Models at Once

The et0_temp_all() function runs all 10 temperature-based models plus the FAO-PM reference in a single call:

result <- et0_temp_all(
  Tmin       = jhansi_weather$Tmin[1:5],
  Tmax       = jhansi_weather$Tmax[1:5],
  RH_morning = jhansi_weather$RH_morning[1:5],
  RH_evening = jhansi_weather$RH_evening[1:5],
  u2         = jhansi_weather$WS[1:5],
  n          = jhansi_weather$SSH[1:5],
  J          = jhansi_weather$J[1:5],
  lat        = 25.43,
  z          = 216
)
round(result, 2)
#>   FAO_PM Blaney_Criddle Schendel Hargreaves_Samani Linacre Tabari_Talee1
#> 1   1.60           4.07     3.39             30.11    3.63         40.32
#> 2   2.54           4.14     3.70             32.03    4.01         42.92
#> 3   2.84           4.26     4.46             33.08    4.93         44.37
#> 4   2.38           4.11     3.94             30.92    4.77         41.42
#> 5   1.98           4.24     3.74             34.28    4.05         45.97
#>   Tabari_Talee2 Droogers_Allen Berti Dorji Baier_Robertson
#> 1          3.64           3.10  2.64  2.14            2.40
#> 2          3.88           3.27  2.81  2.22            2.89
#> 3          4.01           3.38  2.91  2.27            3.05
#> 4          3.74           3.18  2.71  2.18            2.55
#> 5          4.15           3.48  3.02  2.33            3.39

Evaluating Model Performance Against FAO-PM

The package includes 9 statistical metrics for comparing temperature-based model performance against the FAO-PM reference: NSE, d, MSE, RMSE, NRMSE, MAE, MBE, r, and R-squared.

# Compute ET0 for the full year
full_result <- et0_temp_all(
  Tmin       = jhansi_weather$Tmin,
  Tmax       = jhansi_weather$Tmax,
  RH_morning = jhansi_weather$RH_morning,
  RH_evening = jhansi_weather$RH_evening,
  u2         = jhansi_weather$WS,
  n          = jhansi_weather$SSH,
  J          = jhansi_weather$J,
  lat        = 25.43,
  z          = 216
)

# FAO-PM is the reference (observed)
obs   <- full_result$FAO_PM
preds <- full_result[, c("Blaney_Criddle", "Hargreaves_Samani",
                          "Linacre", "Droogers_Allen")]
metrics <- evaluate_models(obs, preds)
print(metrics)
#>               Model          NSE          d         MSE      RMSE      NRMSE
#> 1    Blaney_Criddle    0.1042414 0.67330968    3.009673  1.734841  0.4050492
#> 2 Hargreaves_Samani -732.5828615 0.07652684 2464.776474 49.646515 11.5914262
#> 3           Linacre   -3.4288074 0.62586836   14.880419  3.857515  0.9006492
#> 4    Droogers_Allen    0.3534099 0.84318367    2.172488  1.473936  0.3441334
#>         MAE        MBE         r        R2
#> 1  1.543601   49.58758 0.7861069 0.6179640
#> 2 47.203326 1183.36625 0.8433294 0.7112044
#> 3  3.441673   85.39739 0.9138930 0.8352004
#> 4  1.252408   36.82482 0.8608050 0.7409853

Visualization

Scatter Plot

plot_scatter(obs, preds,
             main = "Temperature-Based Models vs FAO-PM")

Taylor Diagram

plot_taylor(obs, preds,
            main = "Taylor Diagram - Temperature-Based Models")

Helper Functions

The package exports helper functions for computing intermediate meteorological variables used internally by the models:

# Extraterrestrial radiation for June 21 at 25.43 N
extraterrestrial_radiation(J = 172, lat = 25.43)
#> [1] 40.53088

# Saturation vapor pressure at 25 degrees C
saturation_vapor_pressure(25)
#> [1] 3.167778

# Daylight hours for June 21 at 25.43 N
daylight_hours(J = 172, lat = 25.43)
#> [1] 13.58579

References