The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

T1FF

T1FF fits Type-1 Fuzzy Function models for binary classification, numeric regression, and time-series forecasting with user-supplied temporal predictors. It uses fuzzy C-means memberships, cluster-specific statistical models, and membership-weighted aggregation. Forecasting requires time dependence to be encoded with lagged or seasonal predictors and training, validation, and test sets to preserve chronological order.

Installation

# Install the local source package
install.packages("T1FF_0.1.0.tar.gz", repos = NULL, type = "source")

# After a CRAN release
# install.packages("T1FF")

Binary classification

library(T1FF)

data(iris)
d <- droplevels(subset(iris, Species != "setosa"))

fit <- T1FF(
  da = d,
  target_col = "Species",
  c = 2,
  m = 2,
  task = "classification",
  positive_class = "virginica",
  seed = 123
)

probability <- predict(fit, d, type = "prob")
class_hat <- predict(fit, d, type = "class")
cluster_probability <- predict(fit, d, type = "cluster_prob")
membership <- predict(fit, d, type = "membership")

For classification, logistic_method = "auto" is the default. It detects separation or extreme local GLM fits and refits affected local models with ridge-penalized logistic regression. ridge_lambda controls the penalty and probability_clip (default 1e-6) prevents exact zero/one probabilities.

fit <- T1FF(
  d, "Species", c = 2, task = "classification",
  positive_class = "virginica", logistic_method = "auto",
  ridge_lambda = 0.01, probability_clip = 1e-6, seed = 1
)
summary(fit)

Use probabilistic support-vector machines within the fuzzy clusters with local_model = "svm":

fit_svm <- T1FF(
  d, "Species", c = 2, m = 2,
  task = "classification", local_model = "svm",
  svm_kernel = "rbfdot", svm_C = 1,
  positive_class = "virginica", seed = 1
)
predict(fit_svm, d[1:5, ], type = "prob")

Evaluate a fitted or tuned model with task-appropriate metrics:

evaluation <- evaluate.T1FF(fit, d, truth = "Species")
summary(evaluation)
evaluation$metrics
evaluation$confusion_matrix

Estimate generalization performance with repeated nested cross-validation. The inner folds tune T1FF while the outer folds compare it with a standard logistic or linear regression baseline:

benchmark <- benchmark.T1FF(
  Species ~ ., d,
  c_values = 2:4, m_values = c(1.5, 2, 2.5),
  outer_folds = 5, inner_folds = 5, repeats = 2,
  positive_class = "virginica", seed = 1
)
summary(benchmark)
benchmark$fold_results
benchmark$selected_parameters
benchmark$timing_summary

The equivalent formula interface also supports factor and character predictors through a training-derived design matrix:

fit <- T1FF(
  Species ~ .,
  data = d,
  c = 2,
  task = "classification",
  positive_class = "virginica",
  na_action = "fail",
  seed = 123
)

Set na_action = "omit" to remove incomplete training rows. Predictions for incomplete rows are then returned as NA, preserving the row count and order of newdata.

Regression

fit <- T1FF(
  da = mtcars,
  target_col = "mpg",
  c = 2,
  m = 2,
  task = "regression",
  seed = 123
)

prediction <- predict(fit, mtcars, type = "response")
cluster_prediction <- predict(fit, mtcars, type = "cluster_response")
membership <- predict(fit, mtcars, type = "membership")

Regression tuning and evaluation support rmse, mse, mae, mape, smape, and r2. MAPE and SMAPE are returned as percentages; zero actual values are excluded from MAPE, while a jointly zero actual and prediction has zero contribution to SMAPE.

tuned_regression <- tune.T1FF(
  mtcars, "mpg", task = "regression",
  c_values = 2:3, m_values = c(1.5, 2),
  metric = "smape", resampling = "kfold", folds = 5,
  seed = 123
)
evaluate.T1FF(tuned_regression, mtcars, truth = "mpg")

Time-series forecasting

T1FF does not automatically infer a time index or create lagged predictors. For forecasting, first express temporal dependence through variables such as response lags, seasonal terms, or a trend. Always train on earlier observations and evaluate on later observations. The built-in tuning folds are random, so time-series hyperparameter selection should use an external chronological validation or rolling-origin procedure.

This example performs rolling one-step-ahead evaluation on AirPassengers; the test-row lags contain only values observed by each forecast origin.

data(AirPassengers)
y <- as.numeric(AirPassengers)
period <- as.numeric(time(AirPassengers))
month <- as.numeric(cycle(AirPassengers))
n <- length(y)

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

split <- floor(0.80 * nrow(forecast_data))
train_ts <- forecast_data[seq_len(split), ]
test_ts <- forecast_data[(split + 1):nrow(forecast_data), ]

forecast_fit <- T1FF(
  y ~ lag1 + lag12 + trend + season_sin + season_cos,
  data = train_ts, c = 2, m = 2, task = "regression", seed = 123
)

test_ts$forecast <- predict(forecast_fit, test_ts, type = "response")
evaluate.T1FF(forecast_fit, test_ts, truth = "y")

Hyperparameter tuning

tuned <- tune.T1FF(
  da = d,
  target_col = "Species",
  task = "classification",
  c_values = 2:3,
  m_values = c(1.5, 2),
  metric = "logloss",
  resampling = "stratified_kfold",
  folds = 5,
  positive_class = "virginica",
  seed = 123
)

summary(tuned)
predict(tuned, d, type = "prob")

Classification tuning supports logloss, brier, roc_auc, pr_auc, accuracy, balanced_accuracy, f1, sensitivity, and specificity.

Tune the classification threshold together with c and m for a threshold-dependent metric:

tuned_threshold <- tune.T1FF(
  Species ~ ., d,
  c_values = 2:4,
  m_values = c(1.5, 2, 2.5),
  threshold_values = seq(0.3, 0.7, by = 0.05),
  metric = "balanced_accuracy",
  folds = 5,
  positive_class = "virginica",
  seed = 123
)
tuned_threshold$best_threshold
predict(tuned_threshold, d, type = "class")

The package is under active development. The first release supports numeric, factor, and character predictors; binary outcomes for classification; numeric outcomes for regression; and explicit missing-value handling.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.