This class implements the data structure and methods for formal contexts.
Guigues J, Duquenne V (1986). “Familles minimales d'implications informatives résultant d'un tableau de données binaires.” Mathématiques et Sciences humaines, 95, 5-18.
Ganter B, Wille R (1999). Formal concept analysis : mathematical foundations. Springer. ISBN 3540627715.
Belohlavek R (2002). “Algorithms for fuzzy concept lattices.” In Proc. Fourth Int. Conf. on Recent Advances in Soft Computing. Nottingham, United Kingdom, 200-205.
Hahsler M, Grun B, Hornik K (2005). “arules - a computational environment for mining association rules and frequent item sets.” J Stat Softw, 14, 1-25.
IThe table of the formal context as a matrix.
attributesThe attributes of the formal context.
objectsThe objects of the formal context.
grades_setThe set of degrees (in [0, 1]) the whole set of attributes can take.
expanded_grades_setThe set of degrees (in [0, 1]) each attribute can take.
conceptsThe concept lattice associated to the formal context as a ConceptLattice.
implicationsA set of implications on the formal context as an ImplicationSet.
new()Creator for the Formal Context class
FormalContext$new(I, filename, remove_const = FALSE)I(numeric matrix) The table of the formal context.
filename(character) Path of a file to import.
remove_const(logical) If TRUE, remove constant columns. The default is FALSE.
Columns of I should be named, since they are the names of the attributes of the formal context.
If no I is used, the resulting FormalContext will be empty and not usable unless for loading a previously saved one. In this case, one can provide a filename to import. Only RDS, CSV and CXT files are currently supported.
scale()Scale the context
The types of scaling are implemented in a registry,
so that scalingRegistry$get_entries() returns
all types.
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")get_scales()Scales applied to the formal context
FormalContext$get_scales(attributes = names(private$scales))The scales that have been applied to the specified attributes
of the formal context. If no attributes are passed,
then all applied scales are returned.
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")
fc$get_scales()background_knowledge()Background knowledge of a scaled formal context
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")
fc$background_knowledge()clarify()Clarify a formal context
reduce()Reduce a formal context
find_implications()Use modified Ganter algorithm to compute both concepts and implications
to_transactions()Convert the formal context to object of class transactions from the arules package
save()Save a FormalContext to RDS or CXT format
FormalContext$save(filename = tempfile(fileext = ".rds"))load()Load a FormalContext from a file
dim()Dimensions of the formal context
print()Prints the formal context
to_latex()Write the context in LaTeX format
table(logical) If TRUE, surrounds everything between \begin{table} and \end{table}.
label(character) The label for the table environment.
caption(character) The caption of the table.
fraction(character) If none, no fractions are produced. Otherwise, if it is frac, dfrac or sfrac, decimal numbers are represented as fractions with the corresponding LaTeX typesetting.
incidence()Incidence matrix of the formal context
fc <- FormalContext$new(planets)
fc$incidence()subcontext()Subcontext of the formal context
objects(character array) Name of the objects to keep.
attributes(character array) Names of the attributes to keep.
A warning will be issued if any of the names is not present in the list of objects or attributes of the formal context.
If objects or attributes is empty, then it is
assumed to represent the whole set of objects or attributes
of the original formal context.
Another FormalContext that is a subcontext
of the original one, with only the objects and attributes
selected.
fc <- FormalContext$new(planets)
fc$subcontext(attributes = c("moon", "no_moon"))[()Subcontext of the formal context
objects(character array) Name of the objects to keep.
attributes(character array) Names of the attributes to keep.
A warning will be issued if any of the names is not present in the list of objects or attributes of the formal context.
If objects or attributes is empty, then it is
assumed to represent the whole set of objects or attributes
of the original formal context.
Another FormalContext that is a subcontext
of the original one, with only the objects and attributes
selected.
fc <- FormalContext$new(planets)
fc[, c("moon", "no_moon")]plot()Plot the formal context table
to_latex(logical) If TRUE, export the plot as a tikzpicture environment that can be included in a LaTeX file.
...Other parameters to be passed to the tikzDevice that renders the lattice in LaTeX, or for the figure caption. See Details.
Particular parameters that control the size of the tikz output are: width, height (both in inches), and pointsize (in points), that should be set to the font size used in the documentclass header in the LaTeX file where the code is to be inserted.
If a caption is provided, the whole tikz picture will be wrapped by a figure environment and the caption set.
# Build and print the formal context
fc_planets <- FormalContext$new(planets)
print(fc_planets)
#> FormalContext with 9 objects and 7 attributes.
#> small medium large near far moon no_moon
#> Mercury X X X
#> Venus X X X
#> Earth X X X
#> Mars X X X
#> Jupiter X X X
#> Saturn X X X
#> Uranus X X X
#> Neptune X X X
#> Pluto X X X
# Define a set of attributes
S <- Set$new(attributes = fc_planets$attributes)
S$assign(moon = 1, large = 1)
# Compute the closure of S
Sc <- fc_planets$closure(S)
# Is Sc a closed set?
fc_planets$is_closed(Sc)
#> [1] TRUE
# Clarify and reduce the formal context
fc2 <- fc_planets$reduce(TRUE)
# Find implications
fc_planets$find_implications()
# Read a formal context from CSV
filename <- system.file("contexts", "airlines.csv", package = "fcaR")
fc <- FormalContext$new(filename)
# Read a formal context from a CXT file
filename <- system.file("contexts", "lives_in_water.cxt", package = "fcaR")
fc <- FormalContext$new(filename)
## ------------------------------------------------
## Method `FormalContext$scale`
## ------------------------------------------------
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")
## ------------------------------------------------
## Method `FormalContext$get_scales`
## ------------------------------------------------
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")
fc$get_scales()
#> $nitro
#> FormalContext with 3 objects and 3 attributes.
#> nitro >= 1 nitro >= 2 nitro >= 3
#> 1 X
#> 2 X X
#> 3 X X X
#>
#> $OS
#> FormalContext with 3 objects and 2 attributes.
#> OS = O OS = S
#>
#> O X
#> S X
#>
#> $ring
#> FormalContext with 2 objects and 2 attributes.
#> ring = hex ring = penta
#> hex X
#> penta X
#>
## ------------------------------------------------
## Method `FormalContext$background_knowledge`
## ------------------------------------------------
filename <- system.file("contexts", "aromatic.csv", package = "fcaR")
fc <- FormalContext$new(filename)
fc$scale("nitro", "ordinal", comparison = `>=`, values = 1:3)
fc$scale("OS", "nominal", c("O", "S"))
fc$scale(attributes = "ring", type = "nominal")
fc$background_knowledge()
#> Implication set with 2 implications.
#> Rule 1: {} -> {nitro >= 1}
#> Rule 2: {nitro >= 3} -> {nitro >= 2}
## ------------------------------------------------
## Method `FormalContext$incidence`
## ------------------------------------------------
fc <- FormalContext$new(planets)
fc$incidence()
#> small medium large near far moon no_moon
#> Mercury 1 0 0 1 0 0 1
#> Venus 1 0 0 1 0 0 1
#> Earth 1 0 0 1 0 1 0
#> Mars 1 0 0 1 0 1 0
#> Jupiter 0 0 1 0 1 1 0
#> Saturn 0 0 1 0 1 1 0
#> Uranus 0 1 0 0 1 1 0
#> Neptune 0 1 0 0 1 1 0
#> Pluto 1 0 0 0 1 1 0
## ------------------------------------------------
## Method `FormalContext$subcontext`
## ------------------------------------------------
fc <- FormalContext$new(planets)
fc$subcontext(attributes = c("moon", "no_moon"))
#> FormalContext with 9 objects and 2 attributes.
#> moon no_moon
#> Mercury X
#> Venus X
#> Earth X
#> Mars X
#> Jupiter X
#> Saturn X
#> Uranus X
#> Neptune X
#> Pluto X
## ------------------------------------------------
## Method `FormalContext$[`
## ------------------------------------------------
fc <- FormalContext$new(planets)
fc[, c("moon", "no_moon")]
#> FormalContext with 9 objects and 2 attributes.
#> moon no_moon
#> Mercury X
#> Venus X
#> Earth X
#> Mars X
#> Jupiter X
#> Saturn X
#> Uranus X
#> Neptune X
#> Pluto X