## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse   = TRUE,
  comment    = "#>",
  fig.width  = 7,
  fig.height = 4
)

## ----load-pkg-----------------------------------------------------------------
library(ClimateAnomaly)

## ----inspect-data-------------------------------------------------------------
data(india_monthly)
dim(india_monthly)
head(india_monthly[, 1:8])

## ----compute-all--------------------------------------------------------------
result <- calc_all_indices(
  data       = india_monthly,
  group_cols = c("state", "month_num"),  # group = state × calendar month
  rain_col   = "rainfall_mm",
  tmax_col   = "tmax_mean_c",
  tmin_col   = "tmin_mean_c"
)

# New columns added
setdiff(names(result), names(india_monthly))

## ----show-maharashtra---------------------------------------------------------
mh <- subset(result, state == "Maharashtra" & year >= 2015,
             select = c("year", "month_num", "rainfall_mm",
                        "RAI", "RAI_class", "SPI", "SPI_class",
                        "tmax_anomaly", "tmax_anom_class"))
print(head(mh, 24))

## ----rai-direct---------------------------------------------------------------
# Rainfall series for Kerala July (all available years)
kl_jul <- subset(india_monthly, state == "Kerala" & month_num == 7)$rainfall_mm
rai_vals <- calc_rai(kl_jul, n_extreme = 10L)
summary(rai_vals)
classify_rai(rai_vals)

## ----mrai-srai----------------------------------------------------------------
mrai_vals <- calc_mrai(kl_jul)
srai_vals <- calc_srai(kl_jul)
data.frame(year = subset(india_monthly, state=="Kerala" & month_num==7)$year,
           RAI  = round(rai_vals, 2),
           MRAI = round(mrai_vals, 2),
           SRAI = round(srai_vals, 2))

## ----spi-direct---------------------------------------------------------------
spi_vals <- calc_spi(kl_jul)
summary(spi_vals)

## ----sspi-direct--------------------------------------------------------------
sspi_vals <- calc_sspi(kl_jul)
# Compare SPI vs SSPI
cor(spi_vals, sspi_vals, use = "complete.obs")

## ----temp-anom----------------------------------------------------------------
kl_tmax <- subset(india_monthly, state == "Kerala" & month_num == 6)$tmax_mean_c
z <- calc_temp_anomaly(kl_tmax)
summary(z)
classify_temp_anomaly(z)

## ----subset-indices-----------------------------------------------------------
rain_only <- calc_all_indices(
  data       = india_monthly,
  group_cols = c("state", "month_num"),
  rain_col   = "rainfall_mm",
  tmax_col   = NULL,
  tmin_col   = NULL,
  indices    = c("RAI", "SPI"),
  classify   = FALSE   # skip classification labels
)
names(rain_only)

## ----class-summary------------------------------------------------------------
# Frequency table of SPI classes across all states/months
tab <- table(result$SPI_class)
sort(tab, decreasing = TRUE)

## ----rai-class-by-state-------------------------------------------------------
# RAI class distribution per state
with(result, tapply(RAI_class, state, function(x) {
  sort(table(x), decreasing = TRUE)[1:3]
}))

## ----plot-spi, fig.cap = "SPI for Kerala June (1976–2026)"--------------------
kl_jun <- subset(result, state == "Kerala" & month_num == 6)
kl_jun <- kl_jun[order(kl_jun$year), ]

plot(kl_jun$year, kl_jun$SPI,
     type = "h", col = ifelse(kl_jun$SPI >= 0, "steelblue", "firebrick"),
     lwd  = 2,
     xlab = "Year", ylab = "SPI",
     main = "Kerala – June SPI (1976–2026)")
abline(h = c(-1, 1), lty = 2, col = "grey50")
abline(h = 0, lwd = 1)

