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.
I
The table of the formal context as a matrix.
attributes
The attributes of the formal context.
objects
The objects of the formal context.
grades_set
The set of degrees (in [0, 1]) the whole set of attributes can take.
expanded_grades_set
The set of degrees (in [0, 1]) each attribute can take.
concepts
The concept lattice associated to the formal context as a ConceptLattice
.
implications
A 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