Title: | Multiple comparison test visualization |
---|---|
Description: | This package provides visualization of the results from the multiple (i.e. pairwise) comparison tests such as pairwise.t.test, pairwise.prop.test or pairwise.wilcox.test. The groups being compared are visualized as nodes in Hasse diagram. Such approach enables very clear and vivid depiction of which group is significantly greater than which others, especially if comparing a large number of groups. |
Authors: | Michal Burda |
Maintainer: | Michal Burda <[email protected]> |
License: | GPL (>=3.0) |
Version: | 1.45.0 |
Built: | 2024-11-19 03:40:06 UTC |
Source: | https://github.com/bioc/paircompviz |
This package provides visualization of the results from the multiple (i.e. pairwise) comparison tests such as pairwise.t.test, pairwise.prop.test or pairwise.wilcox.test. The groups being compared are visualized as nodes in Hasse diagram. Such approach enables very clear and vivid depiction of which group is significantly greater than which others, especially if comparing a large number of groups.
Michal Burda <[email protected]>
paircomp(InsectSprays$count, InsectSprays$spray, test="t")
paircomp(InsectSprays$count, InsectSprays$spray, test="t")
This is a dataset of artificial data created to demonstrate that there exists a data sample such that pairwise comparisons using t-test break transitivity of the results, i.e. that if treatment 1 is significantly lower than 2 and treatment 2 is lower than 3, it is not always the case that also treatment 1 is significantly lower than 3.
data(brokentrans)
data(brokentrans)
A data frame of two columns:
x is the measured value,
g is the treatment group.
data(brokentrans) # For \alpha = 10^{-9}, we obtain significant difference # between 1-2, 2-3, but not 1-3. tapply(brokentrans$x, brokentrans$g, mean) pairwise.t.test(brokentrans$x, brokentrans$g, pool.sd=FALSE)
data(brokentrans) # For \alpha = 10^{-9}, we obtain significant difference # between 1-2, 2-3, but not 1-3. tapply(brokentrans$x, brokentrans$g, mean) pairwise.t.test(brokentrans$x, brokentrans$g, pool.sd=FALSE)
Given an adjacency matrix, this function displays the corresponding Hasse diagram. This is a wrapper function for graph creation using the Rgraphviz package.
hasse(e, v=NULL, elab="", ecol="black", ebg="gray", vcol="black", vbg="white", vsize=1, fvlab=".", fvcol="black", fvbg="white", fvsize=1, febg="black", fesize=1, main=paste("Hasse Diagram of", deparse(substitute(e))), compress=FALSE)
hasse(e, v=NULL, elab="", ecol="black", ebg="gray", vcol="black", vbg="white", vsize=1, fvlab=".", fvcol="black", fvbg="white", fvsize=1, febg="black", fesize=1, main=paste("Hasse Diagram of", deparse(substitute(e))), compress=FALSE)
e |
An adjacency matrix, with |
v |
Vector of names of the vertices. If null, the vertex names will be obtained from column
names of adjacency matrix |
elab |
Labels of the edges. If it is a scalar value, all edges would have the same label.
Otherwise, |
ecol |
Edge label color. If scalar, all edge labels have the same color. Otherwise,
|
ebg |
Edge line color. If scalar, all edges have the same color. Otherwise,
|
vcol |
Vertex label color. If scalar, all vertices have the same label color. Otherwise,
|
vbg |
Vertex background color. If scalar, all vertices have the same background color.
Otherwise, |
vsize |
Vertex sizes. If scalar, all vertices have the same size in the image.
Otherwise, |
fvlab |
Labels of "dot" vertices. Must be scalar. |
fvcol |
"dot" vertex label color. Must be scalar. |
fvbg |
"dot" vertex background color. Must be scalar. |
fvsize |
"dot" vertex size. Must be scalar. |
febg |
Color of edges introduced by edge compression. Must be scalar. |
fesize |
Thickness of edges introduced by edge compression. Must be scalar and non-negative. |
main |
Main title of the diagram. |
compress |
|
This function depicts a Hasse diagram specified with an adjacency matrix .
Hasse diagram is a visualization of partially ordered set, by drawing its transitive reduction as
an oriented graph. Each vertex corresponds to an element of the set. There is an edge between
vertex
and vertex
iff
and there is no
such that
.
The function is also capable of edge compression via introducing the "dot" edges:
Let ,
be two disjoint non-empty sets of edges,
such that for each
from
and
from
, there exists an edge
from
to
. (The number of such edges equals
.) Starting from
and
, the Hasse diagram may become too complicated and hence confusing.
Therefore a
compress
argument exists in this function that enables “compression” of
the edges in such a way that a new “dot” node is introduced and
edges between sets
and
are replaced with
edges from set
to node
and from node
to set
.
Nothing.
Michal Burda
# linear order e <- matrix(c(0, 1, 1, 0, 0, 1, 0, 0, 0), nrow=3, byrow=TRUE) hasse(e) # prepare adjacency matrix m <- matrix(0, byrow=TRUE, nrow=5, ncol=5) m[3, 1] <- 1 m[3, 2] <- 1 m[4, 1] <- 9 m[4, 2] <- 1 m[5, 1] <- 1 m[5, 2] <- 1 m mc <- m mc[mc > 0] <- "red" ms <- m ms[ms > 0] <- "blue" # view m with default settings hasse(m, ebg="black") # view m WITHOUT edge compression and some fancy adjustments hasse(v=c("a", "b", "c", "d", "e"), vcol=c(gray(0.5), gray(1), rep(gray(0), 3)), vbg=gray(5:1/5), vsize=1:5, e=m, ecol=mc, ebg=ms, elab=m, compress=FALSE) # view m WITH edge compression and some fancy adjustments hasse(v=c("a", "b", "c", "d", "e"), vcol=c(gray(0.5), gray(1), rep(gray(0), 3)), vbg=gray(5:1/5), vsize=1:5, e=m, ecol=mc, ebg=ms, elab=m, compress=TRUE)
# linear order e <- matrix(c(0, 1, 1, 0, 0, 1, 0, 0, 0), nrow=3, byrow=TRUE) hasse(e) # prepare adjacency matrix m <- matrix(0, byrow=TRUE, nrow=5, ncol=5) m[3, 1] <- 1 m[3, 2] <- 1 m[4, 1] <- 9 m[4, 2] <- 1 m[5, 1] <- 1 m[5, 2] <- 1 m mc <- m mc[mc > 0] <- "red" ms <- m ms[ms > 0] <- "blue" # view m with default settings hasse(m, ebg="black") # view m WITHOUT edge compression and some fancy adjustments hasse(v=c("a", "b", "c", "d", "e"), vcol=c(gray(0.5), gray(1), rep(gray(0), 3)), vbg=gray(5:1/5), vsize=1:5, e=m, ecol=mc, ebg=ms, elab=m, compress=FALSE) # view m WITH edge compression and some fancy adjustments hasse(v=c("a", "b", "c", "d", "e"), vcol=c(gray(0.5), gray(1), rep(gray(0), 3)), vbg=gray(5:1/5), vsize=1:5, e=m, ecol=mc, ebg=ms, elab=m, compress=TRUE)
This function performs multiple pairwise comparison tests on given data and views the results in the form of Hasse diagram.
paircomp(obj, grouping=NULL, test=c("t", "prop", "wilcox"), level=0.05, main=NULL, compress=TRUE, visualize=c("position", "size", "pvalue"), result=FALSE, draw=TRUE, ...)
paircomp(obj, grouping=NULL, test=c("t", "prop", "wilcox"), level=0.05, main=NULL, compress=TRUE, visualize=c("position", "size", "pvalue"), result=FALSE, draw=TRUE, ...)
obj |
either a vector or an object of class If |
grouping |
a grouping factor. If |
test |
a name of the test to use. If |
level |
the maximum p-value that will be considered as significant; i.e. pairwise test results with p-value lower than the specified level will be represented with an edge in the resulting Hasse diagram. |
main |
main title of the diagram. |
compress |
|
visualize |
vector of additional information to be included in the diagram: |
result |
whether to return test results as a return value. |
draw |
whether to render the diagram. |
... |
other arguments that will be passed to the underlying function that performs pairwise
comparisons (e.g. |
All treatments in a set are compared in pairs using a selected statistical test. If the results form a partially ordered set, they can be viewed in a Hasse diagram.
Hasse diagram is a graph with each treatment being represented as a vertex. An edge is drawn
downwards from vertex to vertex
if and only if treatment
is significantly
lower than treatment
, and there is no such treatment
that
was lower than
and
lower than
. Each edge is connected to exactly two vertices: its two
endpoints. If there does not exist a path between some two treatments, it means that these two
treatments are incomparable (i.e. the difference among them is not statistically significant).
The function accepts two types of inputs: either an instance of class glht
or a vector obj
of measured values and a factor grouping
of treatments.
The glht
object may be obtained from function glht
of the multcomp package and set as the obj
argument. Argument grouping
must be
NULL
, in that case.
If obj
is a numeric vector of measured values, grouping
must not be NULL
and also a type of statistical test must be selected by setting test
argument.
Edge compression (introducing "dot" edges):
Sometimes, pairwise comparison tests may yield in such bipartite setting that each pair of nodes
of some two node subsets would be inter-connected with an edge (without any edge between nodes in
the same subset). More specifically, let ,
be two disjoint non-empty sets of edges,
such that for each
from
and
from
, there exists an edge
from
to
. (The number of such edges equals
.) Starting from
and
, the Hasse diagram may become too complicated and hence confusing.
Therefore a
compress
argument exists in this function that enables “compression” of
the edges in such a way that a new “dot” node is introduced and
edges between sets
and
are replaced with
edges from set
to node
and from node
to set
.
If argument result
is TRUE
, the function returns everything that is returned by the
underlying test function (pairwise.t.test
, pairwise.prop.test
or
pairwise.wilcox.test
accordingly to the test
argument), or a copy of the
obj
argument, if obj
is an instance of class glht
.
Michal Burda
pairwise.t.test
,
pairwise.prop.test
,
pairwise.wilcox.test
,
glht
hasse
# Example of test="prop": o <- c(rep(1, 10), rep(0, 10), rep(c(0,1), 5)) g <- c(rep(1,10), rep(2, 10), rep(3, 10)) paircomp(o, g, test="prop") # Example of test="t" and test="wilcox": paircomp(InsectSprays$count, InsectSprays$spray, test="t") paircomp(InsectSprays$count, InsectSprays$spray, test="wilcox") # Example of t-test with non-pooled SD and Bonferroni adjustment # for multiple comparisons: paircomp(InsectSprays$count, InsectSprays$spray, test="t", pool.sd=FALSE, p.adjust.method="bonferroni") # Compare diagrams with and without compressed edges: paircomp(InsectSprays$count, InsectSprays$spray, test="t", compress=FALSE) paircomp(InsectSprays$count, InsectSprays$spray, test="t", compress=TRUE) # perform Tukey test: library(rpart) # for car90 dataset library(multcomp) # for glht() function aovR <- aov(Price ~ Type, data = car90) glhtR <- glht(aovR, linfct = mcp(Type = "Tukey")) paircomp(glhtR)
# Example of test="prop": o <- c(rep(1, 10), rep(0, 10), rep(c(0,1), 5)) g <- c(rep(1,10), rep(2, 10), rep(3, 10)) paircomp(o, g, test="prop") # Example of test="t" and test="wilcox": paircomp(InsectSprays$count, InsectSprays$spray, test="t") paircomp(InsectSprays$count, InsectSprays$spray, test="wilcox") # Example of t-test with non-pooled SD and Bonferroni adjustment # for multiple comparisons: paircomp(InsectSprays$count, InsectSprays$spray, test="t", pool.sd=FALSE, p.adjust.method="bonferroni") # Compare diagrams with and without compressed edges: paircomp(InsectSprays$count, InsectSprays$spray, test="t", compress=FALSE) paircomp(InsectSprays$count, InsectSprays$spray, test="t", compress=TRUE) # perform Tukey test: library(rpart) # for car90 dataset library(multcomp) # for glht() function aovR <- aov(Price ~ Type, data = car90) glhtR <- glht(aovR, linfct = mcp(Type = "Tukey")) paircomp(glhtR)
This function removes transitive edges from an adjacency matrix.
transReduct(e)
transReduct(e)
e |
an adjacency matrix, i.e. a rectangular matrix with value |
This function takes an adjacency matrix as the argument e
. Both rows and columns correspond
to graph vertices, with value above zero indicating an edge between vertices
and
. The function removes all transitive edges, i.e. sets to zero corresponding elements
of matrix
. The transitive edge is such an edge between vertices
and
that after removing it from the graph, there still exists a path from
to
.
An adjacency matrix with transitive edges being removed.
Michal Burda
e <- matrix(c(0, 1, 1, 0, 0, 1, 0, 0, 0), nrow=3, byrow=TRUE) transReduct(e)
e <- matrix(c(0, 1, 1, 0, 0, 1, 0, 0, 0), nrow=3, byrow=TRUE) transReduct(e)