跳到内容

图的邻接矩阵的谱分解。

用法

embed_adjacency_matrix(
  graph,
  no,
  weights = NULL,
  which = c("lm", "la", "sa"),
  scaled = TRUE,
  cvec = strength(graph, weights = weights)/(vcount(graph) - 1),
  options = arpack_defaults()
)

参数

graph

输入图,有向或无向。

no

一个整数标量。此值是谱嵌入的嵌入维度。应小于顶点数。最大的 no 维非零奇异值用于谱嵌入。

weights

用于计算加权嵌入的可选正权重向量。如果图具有 weight 边属性,则默认使用此属性。在加权嵌入中,使用边权重代替二元邻接矩阵。

which

要使用的特征值(或奇异值,对于有向图)。“lm”表示具有最大幅度的特征值,“la”是(代数)最大的特征值,“sa”是(代数)最小的特征值。默认值为“lm”。请注意,对于有向图,“la”和“lm”是等效的,因为奇异值用于排序。

scaled

逻辑标量,如果为 FALSE,则返回 \(U\) 和 \(V\) 而不是 \(X\) 和 \(Y\)。

cvec

一个数值向量,其长度是图中的顶点数。该向量被添加到邻接矩阵的对角线。

options

一个命名列表,包含 ARPACK 中 SVD 计算算法的参数。默认情况下,值列表被分配给 arpack_defaults() 给出的值。

包含条目的列表

X

估计的潜在位置,一个 n 乘以 no 的矩阵,n 是顶点数。

Y

对于无向图为 NULL,对于有向图为潜在位置的后半部分,一个 n 乘以 no 的矩阵,n 是顶点数。

D

该算法计算的特征值(对于无向图)或奇异值(对于有向图)。

options

一个命名列表,包含有关底层 ARPACK 计算的信息。有关详细信息,请参见 arpack()

详细信息

此函数基于其邻接矩阵 \(A\) 计算图的 no 维欧几里得表示。该表示通过邻接矩阵的奇异值分解计算,\(A=UDV^T\)。如果该图是使用 \(R^{no}\) 中每个顶点的潜在位置向量生成的随机点积图,则嵌入将提供这些潜在向量的估计。

对于无向图,潜在位置计算为 \(X=U^{no}D^{1/2}\),其中 \(U^{no}\) 等于 \(U\) 的前 no 列,\(D^{1/2}\) 是一个对角矩阵,其对角线上包含前 no 个奇异值。

对于有向图,嵌入定义为一对 \(X=U^{no}D^{1/2}\) 和 \(Y=V^{no}D^{1/2}\)。(对于无向图,\(U=V\),因此保留其中一个就足够了。)

参考文献

Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. A Consistent Adjacency Spectral Embedding for Stochastic Blockmodel Graphs, Journal of the American Statistical Association, Vol. 107(499), 2012

adjacency_spectral_embedding().

示例


## A small graph
lpvs <- matrix(rnorm(200), 20, 10)
lpvs <- apply(lpvs, 2, function(x) {
  return(abs(x) / sqrt(sum(x^2)))
})
RDP <- sample_dot_product(lpvs)
embed <- embed_adjacency_matrix(RDP, 5)