# fsets: S3 class representing a set of fuzzy sets on the fixed... In beerda/lfl: Linguistic Fuzzy Logic

## Description

The aim of the `fsets` S3 class is to store several fuzzy sets in the form of numeric matrix where columns represent fuzzy sets, rows are elements from the universe, and therefore a value of `i`-th row and `j`-th column is a membership degree of `i`-th element of the universe to `j`-th fuzzy set. The `fsets` object also stores the information about the origin of the fuzzy sets as well as a relation of specificity among them.

## Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13``` ```fsets( x, vars = rep(deparse(substitute(x)), ncol(x)), specs = matrix(0, nrow = ncol(x), ncol = ncol(x)) ) vars(f) vars(f) <- value specs(f) specs(f) <- value ```

## Arguments

 `x` A matrix of membership degrees. Columns of the matrix represent fuzzy sets, colnames are names of the fuzzy sets (and must not be NULL). Rows of the matrix represent elements of the universe. `vars` A character vector that must correspond to the columns of `x`. It is a vector of names of original variables that the fuzzy sets were created from. In other words, the `vars` vector should contain the same value for each `x`'s column that corresponds to the same variable. Names of the `vars` vector are ignored. For instance, an `fcut()` function can transform a single numeric vector into several different fuzzy sets. To indicate that all of them in fact describe the same original variable, the same name is stored on appropriate positions of the `vars` vector. `specs` A square numeric matrix containing values from `{0, 1}`. It is a specificity matrix, for which both rows and columns correspond to `x`'s columns and where `specs[i][j] == 1` if and only if `i`-th fuzzy set (i.e. `x[, i]`) is more specific (is a subset or equal to) than `j`-th fuzzy set (i.e. `x[, j]`). `f` An instance of S3 class `fsets`. `value` Attribute values to be set to the object.

## Details

The `fsets()` function is a constructor of an object of type `fsets`. Each object stores two attributes: `vars` and `specs`. The functions `vars()` and `specs()`). can be used to access these attributes.

It is assumed that the fuzzy sets are derived from some raw variables, e.g. numeric vectors or factors. `vars` attribute is a character vector of names of raw variables with size equal to the number of fuzzy sets in `fsets` object. It is then assumed that two fuzzy sets with the same name in `vars()` attribute are derived from the same variable.

`specs` attribute gives a square numeric matrix of size equal to the number of fuzzy sets in `fsets`. `specs[i][j] == 1` if and only if the `i`-th fuzzy set is more specific than `j`-th fuzzy set. Specificity of fuzzy sets means the nestedness of fuzzy set: for instance, `very small` is more specific than `small`; similarly, `extremely big` is more specific than `very big`; on the other hand, `very big` and `extremely small` are incomparable. A necessary condition for specificity is subsethood.

## Value

`fsets()` returns an object of S3 class `fsets`. `vars()` returns a vector of original variable names of the `fsets` object. `specs` returns the specificity matrix.

## Author(s)

Michal Burda

`fcut()`, `lcut()`, `is.specific()`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21``` ``` # create a matrix of random membership degrees m <- matrix(runif(30), ncol=5) colnames(m) <- c('a1', 'a2', 'a12', 'b1', 'b2') # create vars - first three (a1, a2, a3) and next two (b1, b2) # fuzzy sets originate from the same variable v <- c('a', 'a', 'a', 'b', 'b') names(v) <- colnames(m) # create specificity matrix - a1 and a2 are more specific than a12, # the rest is incomparable s <- matrix(c(0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), byrow=TRUE, ncol=5) colnames(s) <- colnames(m) rownames(s) <- colnames(m) # create a valid instance of the fsets class o <- fsets(m, v, s) ```