## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4.5
)
library(T1FF)

## ----load---------------------------------------------------------------------
library(T1FF)
packageVersion("T1FF")

## ----help-index, eval=FALSE---------------------------------------------------
# ls("package:T1FF")
# help(package = "T1FF")

## ----classification-data------------------------------------------------------
data(iris)
iris_binary <- droplevels(subset(iris, Species != "setosa"))
table(iris_binary$Species)

## ----classification-fit-------------------------------------------------------
classification_fit <- T1FF(
  Species ~ .,
  data = iris_binary,
  c = 2,
  m = 2,
  task = "classification",
  positive_class = "virginica",
  seed = 1
)
classification_fit

## ----column-interface, eval=FALSE---------------------------------------------
# classification_fit <- T1FF(
#   da = iris_binary,
#   target_col = "Species",
#   c = 2,
#   m = 2,
#   task = "classification",
#   positive_class = "virginica",
#   seed = 1
# )

## ----classification-prediction------------------------------------------------
predict(classification_fit, iris_binary[1:5, ], type = "prob")
predict(classification_fit, iris_binary[1:5, ], type = "class")

## ----local-prediction---------------------------------------------------------
predict(classification_fit, iris_binary[1:3, ], type = "cluster_prob")
predict(classification_fit, iris_binary[1:3, ], type = "membership")

## ----threshold----------------------------------------------------------------
predict(classification_fit, iris_binary[1:5, ],
        type = "class", threshold = 0.40)

## ----stable-logistic----------------------------------------------------------
stable_fit <- T1FF(
  Species ~ ., iris_binary,
  c = 2,
  logistic_method = "auto",
  ridge_lambda = 0.01,
  probability_clip = 1e-6,
  positive_class = "virginica",
  seed = 1
)
summary(stable_fit)

## ----svm-fit------------------------------------------------------------------
svm_fit <- T1FF(
  Species ~ ., iris_binary,
  c = 2,
  m = 2,
  local_model = "svm",
  svm_kernel = "rbfdot",
  svm_C = 1,
  positive_class = "virginica",
  seed = 8
)
predict(svm_fit, iris_binary[1:5, ], type = "prob")

## ----tuning-------------------------------------------------------------------
tuned_fit <- tune.T1FF(
  Species ~ ., iris_binary,
  task = "classification",
  c_values = 2:3,
  m_values = c(1.5, 2),
  metric = "logloss",
  resampling = "stratified_kfold",
  folds = 3,
  positive_class = "virginica",
  seed = 2,
  verbose = FALSE
)
summary(tuned_fit)

## ----tuning-components--------------------------------------------------------
tuned_fit$results
c(c = tuned_fit$best_c, m = tuned_fit$best_m)
predict(tuned_fit, iris_binary[1:5, ], type = "prob")

## ----threshold-tuning---------------------------------------------------------
threshold_tuned_fit <- tune.T1FF(
  Species ~ ., iris_binary,
  c_values = 2,
  m_values = 2,
  threshold_values = seq(0.3, 0.7, by = 0.1),
  metric = "balanced_accuracy",
  folds = 3,
  positive_class = "virginica",
  seed = 7,
  verbose = FALSE
)
threshold_tuned_fit$best_threshold
predict(threshold_tuned_fit, iris_binary[1:5, ], type = "class")

## ----evaluation---------------------------------------------------------------
classification_evaluation <- evaluate.T1FF(
  tuned_fit,
  iris_binary,
  truth = "Species",
  threshold = 0.5
)
classification_evaluation

## ----evaluation-components----------------------------------------------------
classification_evaluation$metrics
classification_evaluation$confusion_matrix

## ----benchmark----------------------------------------------------------------
classification_benchmark <- benchmark.T1FF(
  Species ~ ., iris_binary,
  task = "classification",
  c_values = 2,
  m_values = 2,
  tune_metric = "logloss",
  metrics = c("roc_auc", "pr_auc", "logloss", "brier", "f1"),
  outer_folds = 2,
  inner_folds = 2,
  repeats = 1,
  positive_class = "virginica",
  seed = 3,
  verbose = FALSE
)
classification_benchmark

## ----benchmark-components-----------------------------------------------------
classification_benchmark$fold_results
classification_benchmark$selected_parameters
classification_benchmark$timing_summary

## ----regression-fit-----------------------------------------------------------
regression_fit <- T1FF(
  mpg ~ wt + hp + disp,
  data = mtcars,
  c = 2,
  m = 2,
  task = "regression",
  seed = 4
)
regression_fit

## ----regression-prediction----------------------------------------------------
predict(regression_fit, mtcars[1:5, ], type = "response")
predict(regression_fit, mtcars[1:3, ], type = "cluster_response")
predict(regression_fit, mtcars[1:3, ], type = "membership")

## ----regression-evaluation----------------------------------------------------
regression_evaluation <- evaluate.T1FF(
  regression_fit, mtcars, truth = "mpg"
)
regression_evaluation

## ----regression-benchmark, eval=FALSE-----------------------------------------
# regression_benchmark <- benchmark.T1FF(
#   mpg ~ ., mtcars,
#   task = "regression",
#   c_values = 2:4,
#   m_values = c(1.5, 2, 2.5),
#   tune_metric = "rmse",
#   metrics = c("rmse", "mse", "mae", "mape", "smape", "r2"),
#   outer_folds = 5,
#   inner_folds = 5,
#   repeats = 5,
#   seed = 5
# )

## ----forecasting-data---------------------------------------------------------
data(AirPassengers)
passengers <- as.numeric(AirPassengers)
period <- as.numeric(time(AirPassengers))
month <- as.numeric(cycle(AirPassengers))
n_time <- length(passengers)

forecast_data <- data.frame(
  period = period[13:n_time],
  y = passengers[13:n_time],
  lag1 = passengers[12:(n_time - 1)],
  lag12 = passengers[1:(n_time - 12)],
  trend = seq_len(n_time - 12),
  season_sin = sin(2 * pi * month[13:n_time] / 12),
  season_cos = cos(2 * pi * month[13:n_time] / 12)
)

time_split <- floor(0.80 * nrow(forecast_data))
train_time <- forecast_data[seq_len(time_split), ]
test_time <- forecast_data[(time_split + 1):nrow(forecast_data), ]

range(train_time$period)
range(test_time$period)

## ----forecasting-fit----------------------------------------------------------
forecast_fit <- T1FF(
  y ~ lag1 + lag12 + trend + season_sin + season_cos,
  data = train_time,
  c = 2,
  m = 2,
  task = "regression",
  seed = 9
)

test_time$forecast <- predict(forecast_fit, test_time, type = "response")
head(test_time[, c("period", "y", "forecast")])

## ----forecasting-evaluation---------------------------------------------------
forecast_evaluation <- evaluate.T1FF(
  forecast_fit,
  test_time,
  truth = "y"
)
forecast_evaluation$metrics

## ----missing-values-----------------------------------------------------------
iris_missing <- iris_binary
iris_missing$Sepal.Length[c(2, 7)] <- NA_real_

missing_fit <- T1FF(
  Species ~ ., iris_missing,
  c = 2,
  positive_class = "virginica",
  na_action = "omit",
  seed = 6
)
predict(missing_fit, iris_missing[1:8, ], type = "prob")

## ----reproducibility----------------------------------------------------------
packageVersion("T1FF")
sessionInfo()

