Learn R Programming

relations (version 0.6-13)

transform: Transform incidences

Description

Carry out transformations between incidence matrices from endorelations and other codings.

Usage

transform_incidences(x, from = c("PO", "SO", "01", "-1+1"),
                        to = c("PO", "SO", "01", "-1+1"))

Arguments

x

An incidence matrix from an endorelation.

from, to

The coding scheme (see Details).

Details

In the following, we consider an incidence matrix \(X\) with cells \(x_{jk}\) of a relation \(R\) with tuples \((a_j, b_k)\).

For the "PO" (“Preference Order”) coding, \(X\) is a 0/1 matrix, and \(a_j R b_k\) iff \(x_{jk} = 1\). It follows in particular that if both \(x_{jk}\) and \(x_{kj}\) are 0, the corresponding pair \((a_j, b_k)\) is not contained in R, i.e., \(a_j\) and \(b_k\) are unrelated.

For the "SO" (“"Strict Order"”) coding, \(X\) is a 0/1 matrix with possible NA values. As for "PO", \(a_j R b_k\) iff \(x_{jk} = 1\), but at most one of \(x_{jk}\) and \(x_{kj}\) can be 1. If both are missing (NA), \(a_j\) and \(b_k\) are unrelated.

For the "01" coding, \(X\) is a matrix with values 0, 1, or 0.5. The coding is similar to "SO", except that NA is represented by 0.5.

For the "-1+1" coding, \(X\) is a matrix with values -1, 0, or 1. The coding is similar to "SO", except that NA is represented by 0, and \(x_{jk} = -1\) if not \(a_j R b_k\).

See Also

relation_incidence().

Examples

Run this code
require("sets")				# set(), pair() etc.
x <- relation(domain = c(1,2,3,4),
              graph = set(pair(1,2), pair(4,2), pair(1,3), pair(1,4),
                          pair(3,2), pair(2,1)))
inc <- relation_incidence(x)
print(inc)

transform_incidences(inc, to = "SO")
transform_incidences(inc, to = "01")
transform_incidences(inc, to = "-1+1")

## transformations should be loss-free:
inc2 <- transform_incidences(inc, from = "PO", to = "-1+1")
inc2 <- transform_incidences(inc2, from = "-1+1", to = "SO")
inc2 <- transform_incidences(inc2, from = "SO", to = "01")
inc2 <- transform_incidences(inc2, from = "01", to = "PO")
stopifnot(identical(inc, inc2))

Run the code above in your browser using DataLab