1.基本概念
> clust.coeff<-function(matrix){
+ n<-nrow(matrix)
+ output<-rep(0,n)
+ for(i in 1:n){
+ m<-sum(matrix[i,])
+ output[i]<-
+ sum(t(matrix * matrix[i,])*matrix[i,])/(m*(m-1))
+ }
+ output[which(output=="NaN")]<-0
+ output
+ }
> A<-matrix(c(
+ 0,1,1,1,1,0,0,0,0,
+ 1,0,1,1,1,1,0,0,0,
+ 1,1,0,1,0,0,1,0,0,
+ 1,1,1,0,0,0,0,1,1,
+ 1,1,0,0,0,0,0,0,0,
+ 0,1,0,0,0,0,0,0,0,
+ 0,0,1,0,0,0,0,0,0,
+ 0,0,0,1,0,0,0,0,0,
+ 0,0,0,1,0,0,0,0,0),
+ nrow = 9)
> clust.coeff(A)
[1] 0.6666667 0.4000000 0.5000000 0.3000000 1.0000000 0.0000000 0.0000000
[8] 0.0000000 0.0000000
> mean(clust.coeff(A))
[1] 0.3185185
|
> library(sna) degree <- degree(A)/2 hist(degree, col = "grey") |
> rgraph(100,tprob=0.01,mode="graph")
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 1 0 0 0 0 0 0 0 0 0 0
[3,] 0 1 0 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 0 0 0 0 0 0 0
略
|
> erdos.renyi.game(100,p=0.01)
Vertices: 100
Edges: 51
Directed: FALSE
Edges:
[0] 4 -- 22
[1] 2 -- 23
[2] 6 -- 25
[3] 6 -- 27
[4] 0 -- 29
[5] 9 -- 30
[6] 9 -- 35
略
|
> random.graph.game(100, p = 0.01)
Vertices: 100
Edges: 35
Directed: FALSE
Edges:
[0] 1 -- 7
[1] 7 -- 8
[2] 15 -- 25
[3] 32 -- 40
[4] 19 -- 41
[5] 8 -- 44
|
> rg <- rgraph(100, tprob = 0.05, mode = "graph") > distance <- geodist(rg)$gdist > mean(distance[-c(which(distance == Inf), which(distance == 0))]) [1] 3.150484 > mean(clust.coeff(rg)) [1] 0.0345 > degree <- degree(rg)/2 > hist(degree, col = "grey") |
#レギュラーグラフ作成関数
regular.g <- function(n,k) {
reg <- matrix(0,n,n)
for (i in 1:n){
for (j in 1:k){
if (i+j <= n)
reg[i,i+j] <- 1
else
reg[i,i+j-n] <- 1
}
}
(reg <- symmetrize(reg))
}
#スモールワールド・シミュレーション
g <- regular.g(100,4)
Clustering <- 1:101
Distance <- 1:101
p <- seq(0,1,by = 0.01)
for (i in 1:101) {
clust <- 1:20
dist <- 1:20
for (j in 1:20){
rew.g <- rewire.ws(g, p[i])[1,,]
clust[j] <- mean(clust.coeff(rew.g))
d <- geodist(rew.g)$gdist
dist[j] <- mean(d[-c(which(d == Inf),which(d == 0))])
}
Clustering[i] <- mean(clust)
Distance[i] <- mean(dist)
}
x <- p; y <- Clustering
plot(x, y, xlab ="p", ylab = "Clustering Coefficient")
x <- p; y <- Distance
plot(x, y, xlab ="p", ylab = "Average Distance")
x <- p
y <- matrix(c(Clustering/Clustering[1],Distance/Distance[1]),101,2)
matplot(x, y, log = "x", pch = c(1,2), xlab ="p", ylab = "", col = "black")
legend(locator(1), pch = c(1,2),
c("clustering coefficient","average distance"))
|
g <- barabasi.game(10000, m = 2, directed = FALSE) dd <- degree.distribution(g) plot(dd,log ="x", xlab = "degree", ylab = "proportion") plot(dd,log ="xy", xlab = "degree", ylab = "proportion") average.path.length(g) clust <- transitivity(g,type ="local") clust[which(clust == "NaN")] <- 0 mean(clust) |
可視化にCytoscapeを利用。 この例では10,000ノードのスケールフリーネットワークの作成し、 ネットワークをテキストデータとしてエクスポート。
> library("igraph")
> graph2<-barabasi.game(1000,power=1)
> write.graph(graph2,"table2.txt","edgelist")
|
CytoscapeでFile-->Import-->Network from Tableよりインポート。
Back to R






