View source: R/convert_stategraph_to_costmatrix.r
convert_stategraph_to_costmatrix | R Documentation |
Given a state graph returns the corresponding costmatrix.
convert_stategraph_to_costmatrix(stategraph)
stategraph |
An object of class |
A state graph describes the relationship between character states in terms of a graph of vertices (character states) and edges (weights). Edges can be "symmetric" (the graph is undirected) or "asymmetric" (the graph is directed, a digraph).
For example, a simple symmetric binary state graph might look ike this:
1 A---B
Here the two states are A and B and the weight (cost of transitioning from A to B or B to A) is one.
In Claddis this graph can be represented using a stateGraph
object including the arcs that describe the (di)graph:
from to weight 0 1 1 1 0 1
Each row represents an arc from one vertex to another, and the corresponding weight (transition cost). Note that for symmetric graphs the edge is stated using two arcs (from i to j and from j to i).
This function converts these state transitions to costmatrices, including interpolating any missing transitions by using the shortest indirect cost. In the example used here the costmatrix would look quite simple:
--------- | 0 | 1 | ------------- | 0 | 0 | 1 | ------------- | 1 | 1 | 0 | -------------
An object of class costMatrix
.
Graeme T. Lloyd graemetlloyd@gmail.com
convert_adjacency_matrix_to_costmatrix convert_costmatrix_to_stategraph
# Make state graph for a six-state linear ordered character:
stategraph <- list(
n_vertices = 6,
n_arcs = 10,
n_states = 6,
single_states = c("0", "1", "2", "3", "4", "5"),
type = "ordered",
arcs = data.frame(
from = c("1", "0", "2", "1", "3", "2", "4", "3", "5", "4"),
to = c("0", "1", "1", "2", "2", "3", "3", "4", "4", "5"),
weight = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
),
vertices = data.frame(
label = c("0", "1", "2", "3", "4", "5"),
in_degree = c(1, 2, 2, 2, 2, 1),
out_degree = c(1, 2, 2, 2, 2, 1),
eccentricity = c(5, 4, 3, 3, 4, 5),
periphery = c(1, 0, 0, 0, 0, 1),
centre = c(0, 0, 1, 1, 0, 0)
),
radius = 3,
diameter = 5,
adjacency_matrix = matrix(
data = c(
0, 1, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0,
0, 1, 0, 1, 0, 0,
0, 0, 1, 0, 1, 0,
0, 0, 0, 1, 0, 1,
0, 0, 0, 0, 1, 0
),
ncol = 6,
byrow = TRUE,
dimnames = list(
c("0", "1", "2", "3", "4", "5"),
c("0", "1", "2", "3", "4", "5")
)
),
directed = FALSE,
includes_polymorphisms = FALSE,
polymorphism_costs = "additive",
polymorphism_geometry = "simplex",
polymorphism_distance = "euclidean",
includes_uncertainties = FALSE,
pruned = FALSE,
dollo_penalty = 999,
base_age = 1,
weight = 1
)
# Set calss as stateGraph:
class(x = stategraph) <- "stateGraph"
# View state graph:
stategraph
# Convert state graph to a costmatrix:
costmatrix <- convert_stategraph_to_costmatrix(stategraph = stategraph)
# Show costmatrix reflects linear ordered costs:
costmatrix$costmatrix
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.