我正在尝试从R中的文章(链接:Borgatti & Everett 2000)实施网络核心 - 外围度量。作者应用的基本方法是:
排列网络矩阵的行和列,以便彼此连接良好的演员占据左上角。
根据步骤1中的行/列排列创建理想的模式矩阵
评估两个矩阵之间的相关性
根据作者的说法,第一步中的技巧是找到矩阵的行/列排列,它将最高值与其诱导模式矩阵相关联,并且他们建议使用遗传算法找到最佳行/列排列。我陷入了算法的第一步:
如何在R中创建保留列/行条目顺序的随机行/列矩阵排列?
一旦我评估了矩阵排列和模式矩阵之间的拟合,我如何根据“最适合”的矩阵“培育”新的矩阵排列?
感谢。
答案 0 :(得分:2)
给定特定大小的矩阵,您可以生成随机行/列矩阵排列
#create fake data
mydata.block1 <- matrix (rep(1, times=100), ncol=10)
mydata.block2 <- matrix (rep(0, times=900), ncol=90)
mydata.block3 <- matrix (rep(0, times=900), ncol=10)
mydata.block4 <- matrix (rep(1, times=8100), ncol=90)
mydata <- rbind(cbind (mydata.block1, mydata.block2), cbind (mydata.block3, mydata.block4))
#Mix mydata
mix.order <- sample(1:dim (mydata)[1])
mydata <- mydata[mix.order,mix.order]
#create 100 random orderings
##preallocate matrix
rand.samp <- matrix (rep(NA, times=10000), ncol=100)
##create orderings
for (i in 1:100){
rand.samp[i,] <- sample(1:dim (mydata)[1])
}
##Eliminate duplicate orderings (unlikely to occur)
rand.samp <- unique (rand.samp)
#Reorder and measure fitness
##preallocate fitness measure
fit.meas <- rep (NA, times=100)
for (i in 1:100){
mydata.reordered <- mydata[rand.samp[i,],rand.samp[i,]]
fit.meas[i] <- myfitnessfunc(mydata.reordered)
}
在测量健康状况后,您需要一些方法来确定哪些区域有助于健身,并在改变其他区域时修复这些区域(&#34;品种&#34;)。也许dist()会有一些用处。也许热图或聚类,hclust(),也会有用吗?您能否提供有关如何确定本地化适应性的更多详细信息?
答案 1 :(得分:2)
OneWhoIsUnnamed响应与我解释您对#1的需求相同。
这是两个邻接矩阵的基于适应度的重组方法,#2:
假设您有两个矩阵A和B,它们的健身核心Fa和Fb分别为2.3和1.1。通过构造一个新矩阵C来表示矩阵,其中C_ {i} = A_ {i}的概率为Fa /(Fa + Fb)或C_ {i} = B_ {i},概率为1-Fa /(Fa + Fb) )。这只是培育基质的无限方式之一。 M是A和B根据其适应度的交配结果。
# lets define a function to create random adjacency matrices
random_adjacent <- function(dimension)
{
ret <- matrix(runif(dimension^2)>0.5,dimension,dimension)
retl <- ret * lower.tri(ret)
return( retl + t(retl) )
}
# set fitness
Fa <- 2.3
Fb <- 1.1
# initialize matrices
A <- random_adjacent(4)
B <- random_adjacent(4)
# compute symmetric fitness probability matrix
C <- matrix(runif(16)<Fa/(Fa+Fb),4,4)
Cl <- C * lower.tri(C) # take the lower triangular portion
C <- Cl + t(Cl) # reflect the lower triangular portion into the upper
# compute mated result
M <- matrix(0,4,4)
M[C] <- A[C]
M[!C] <- B[!C]