【问题标题】:Generate an undirected graph by probability on edges in R通过 R 中边上的概率生成无向图
【发布时间】:2021-08-11 20:14:14
【问题描述】:

是否有 R 函数用于生成边缘概率的无向图?我试图通过构造邻接矩阵(精度矩阵)来生成一个非超自然数据集[见附录]。首先,我应该生成一个随机图,它的成对边 (i,j) 遵循正态概率密度函数。 'igraph' 包引入了 'sample_fitness' 和 'sample_degseq' 函数,它们将概率应用于每个顶点的度数,但不适用于 i 和 j 顶点之间是否存在边。 谢谢大家

.

library(MASS)
library(Matrix)
library(philentropy)
library(qgraph)
library(igraph)
library(huge)
d=10
tmp=matrix(runif(2*d,0,0.5),d,2)
tmp=2*tmp
L=distance(tmp,method="euclidean")
s=0.125
prob=(1/sqrt(2*pi))*exp(-(L^2)/2*s)
prob=mat2vec(prob)
degs<-sample(0:(length(prob)-1),d,replace=TRUE,prob=prob)
for(i in 1:d){
if (degs[i]>4){degs[i]=4}
}
degs
if(sum(degs)%%2!=0){degs[1]<-degs[1]+1}
degs
g4 <-sample_degseq(degs,method="vl")
all(degree(g4)==degs)
plot(g4)
theta=as_adjacency_matrix(g4,type="both")
for(j in 1:d){
for(i in 1:d){
if(theta[i,j]==0)
omega[i,j]=0
else
omega[i,j]=0.245
}
}
diag(omega)=1

【问题讨论】:

    标签: graphics igraph graph-theory


    【解决方案1】:

    您可以使用runifprob 来生成随机网络,例如,

    adjmat <- prob
    adjmat[] <- runif(length(prob))
    g <- graph_from_adjacency_matrix(
      +(as.matrix(adjmat) <= as.matrix(prob)) - diag(d),
      mode = "undirected"
    )
    

    并且具有概率边的网络显示为,例如

    【讨论】:

    • “概率”不是邻接矩阵,它应该是两个节点之间存在边的概率。问题是,首先,如何通过边上的概率生成图。接下来,将图形的最大度数限制为四。最后,将图转换为邻接矩阵。谢谢。
    • @HamidAghabozorgi prob 不是邻接矩阵。我只是将它与runif 一起使用以查看是否应分配边缘(i,j)。如果你每次运行我的代码,你会看到节点之间的邻接不同,因为runif 给出了随机边缘分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2017-10-05
    相关资源
    最近更新 更多