# R/intTab.R In robCompositions: Compositional Data Analysis

#### Documented in intTab

#' Interaction table
#'
#' Estimates the interaction table based on clr and inverse clr coefficients.
#'
#' @param x an object of class table
#' @param y the corresponding independence table which is of class \dQuote{intTab}.
#' @param frequencies indicates whether absolute or relative frequencies should be computed.
#' @details Because of the compositional nature of probability tables, the independence tables should
#' be estimated using geometric marginals.
#' @author Matthias Templ
#' @return
#' \itemize{
#'   \item{intTab}{The interaction table(s) with either relative or absolute frequencies.}
#'   \item{signs}{The sign illustrates if there is an excess of probability (plus), or a
#' deficit (minus) regarding to the estimated probability table and the independece table in the clr space.}
#' }
#' @references
#' Egozcue, J.J., Pawlowsky-Glahn, V., Templ, M., Hron, K. (2015)
#' Independence in contingency tables using simplicial geometry.
#' \emph{Communications in Statistics - Theory and Methods}, 44 (18), 3978--3996.
#'
#' @export
#' @examples
#' data(precipitation)
#' tab1prob <- prop.table(precipitation)
#' tab1 <- indTab(precipitation)
#' intTab(tab1prob, tab1)
intTab <-
function(x, y, frequencies = c("relative", "absolute")){
## x ... probability table
## y ... independence table
frequency <- match.arg(frequencies)
if(isTRUE(dim(x) != dim(y))) stop("tables do not have the same dimension")
if(( round(sum(x, na.rm=TRUE),10) == 1 & round(sum(y, na.rm=TRUE),10) != 1))
stop("x consists of probabilities, y not.")
if(( round(sum(y, na.rm=TRUE),10) == 1 & round(sum(x, na.rm=TRUE),10) != 1))
stop("y consists of probabilities, x not.")
n <- sum(x)
xn <- log(x/gmean_sum(x))
yn <- log(y/gmean_sum(y))
res <- xn - yn
signs <- sign(res)
res <- exp(res)
interactionTable <- res / sum(res)
if(frequency == "absolute") interactionTable <- interactionTable * n
#intArray <- sgn * interactionTable^2/SDev(interactionTable)
#list(interactionTable=interactionTable,
#	 interactionArray=intArray)
#signs <- sign(x-y)
res <- list(intTab=interactionTable, signs=signs)
class(res) <- "intTab"
return(res)
}


## Try the robCompositions package in your browser

Any scripts or data that you put into this service are public.

robCompositions documentation built on Aug. 25, 2023, 5:13 p.m.