====== Projections test ======
Krakow, July 10, 2023
> wdir <- "C:/2023/biblio/countries"
> setwd(wdir)
> bin <- function(A){ B <- A
+ for(i in 1:nrow(A)) for(j in 1:ncol(A)) B[i,j] <- ifelse(A[i,j]>0,1,0)
+ return(B)}
> CoN <- function(WC){
+ dN <- diag(rep(0,nrow(WC)))
+ for(c in 1:nrow(WC)) dN[c,c] <- 1/(sum(WC[c,])**2 - sum(WC[c,]**2))
+ Co <- t(WC) %*% dN %*% WC
+ diag(Co) <- 0
+ return(Co)
+ }
> Con <- function(WC){
+ dn <- diag(rep(0,nrow(WC)))
+ for(c in 1:nrow(WC)) dn[c,c] <- 1/(max(1,sum(WC[c,])**2))
+ Co <- t(WC) %*% dn %*% WC
+ return(Co)
+ }
> Projections <- function(WC){
+ k <- ncol(WC); N <- colnames(WC)
+ Cob <- Con <- CoC <- CoN <- matrix(0,nrow=k,ncol=k,dimnames=list(N,N))
+ for(w in 1:nrow(WC)){
+ Cw <- which(WC[w,]>0)
+ wdegw <- sum(WC[w,])
+ sqw <- sum(WC[w,]**2)
+ dnw <- 1/wdegw**2
+ dNw <- 1/(wdegw**2 - sqw)
+ for(e in Cw){
+ for(f in Cw){
+ Cob[e,f] <- Cob[e,f] + 1
+ CoC[e,f] <- CoC[e,f] + WC[w,e]
+ Con[e,f] <- Con[e,f] + WC[w,e]*dnw*WC[w,f]
+ if(e != f) CoN[e,f] <- CoN[e,f] + WC[w,e]*dNw*WC[w,f]
+ } } }
+ return(list(CoC=CoC,Cob=Cob,Con=Con,CoN=CoN))
+ }
> WC <- cbind( c(0,2,1,3,2,1), c(2,1,3,0,3,0), c(1,0,1,2,1,3))
> rownames(WC) <- paste("w",1:6,sep=""); colnames(WC) <- c("c1","c2","c3")
> WC
c1 c2 c3
w1 0 2 1
w2 2 1 0
w3 1 3 1
w4 3 0 2
w5 2 3 1
w6 1 0 3
> CoC <- t(WC) %*% bin(WC)
> CoC
c1 c2 c3
c1 9 5 7
c2 7 9 8
c3 7 3 8
> Cob <- t(bin(WC)) %*% bin(WC)
> Cob
c1 c2 c3
c1 5 3 4
c2 3 4 3
c3 4 3 5
> Con <- Con(WC)
> Con
c1 c2 c3
c1 1.0180556 0.5088889 0.5230556
c2 0.5088889 1.1655556 0.4255556
c3 0.5230556 0.4255556 0.9013889
> sum(Con)
[1] 6
> CoN <- CoN(WC)
> CoN
c1 c2 c3
c1 0.000000 0.9870130 1.1623377
c2 0.987013 0.0000000 0.8506494
c3 1.162338 0.8506494 0.0000000
> sum(CoN)
[1] 6
>
> R <- Projections(WC)
> R
$CoC
c1 c2 c3
c1 9 5 7
c2 7 9 8
c3 7 3 8
$Cob
c1 c2 c3
c1 5 3 4
c2 3 4 3
c3 4 3 5
$Con
c1 c2 c3
c1 1.0180556 0.5088889 0.5230556
c2 0.5088889 1.1655556 0.4255556
c3 0.5230556 0.4255556 0.9013889
$CoN
c1 c2 c3
c1 0.000000 0.9870130 1.1623377
c2 0.987013 0.0000000 0.8506494
c3 1.162338 0.8506494 0.0000000
>