Networks / Pajek
Package for Large Network Analysis

How to
analyse networks and vectors sent from Pajek to program R


Suppose, that vectors v1, v2, v3 and networks n1, n2, n3 were sent from Pajek to R. In the following some simple commands in R using these vectors and networks (matrices) are listed.
  • Vector operations
    v1+v2
    vsum <- v1+v2
    v1sq <- v1^2
    a <- sqrt(v1*v2)
    ...
    
  • Basic statistics
    var - variance, cov - covariance, cor - correlation
     sum(v1)
     length(v1)
     mean(v1)
     summary(v1)
     var(v1)
     cov(v1,v2)
     cor(v1,v2)
    
  • Graphics (charts)
     plot(v1)
     plot(v1,v2)
     boxplot(v1,v2)
     hist(v1)
     
    if vector values are integers, (e.g. from interval 1..10) it is sometimes better to provide breaks among classes:
     hist(v1,br=0:10)
    
    or
     hist(v1, br=-1:10)
    
  • Exporting graphics
    to pdf file
     pdf("c:/temp/test.pdf")
     hist(v1)
     dev.off()
    
    to ps file
     postscript("c:/temp/test.ps")
     hist(v1)
     dev.off()
    
    to windows meta file
    > win.metafile("c:/temp/test.wmf")
    > hist(v1)
    > dev.off()
    
  • Bivariate and multivariate analysis
    • cross-tabulation
       table(v1,v2) 
      to get chi-square test
       tabl <- table(v1,v2)
       summary(tabl)
      
    • comparing means (t-test)
       t.test(v1,v2) 
    • comparing variances
       var.test(v1, v2) 
    • regression
      linear model
      linm <- lm(v1 ~ v2)
      summary(linm)
      
      with more variables
      linm <- lm(v1 ~ v2 + v3)
      summary(linm)
      
      nonlinear regression
      nlm <- lm(v1 ~ v2 + v3^2)
      summary(linm)
      
  • function that saves vector from R to Pajek input file
    savevector <- function(v,direct){
      write(c(paste("*Vertices",length(v)), v), file = direct, ncolumns=1)}
    
    Sample call
    savevector(v1,"c:/temp/test.vec")
    
  • function that loads vector(s) to R from Pajek input file
    loadvector <- function(direct){
      vv<-read.table(file=direct,skip=1)
      if (dim(vv)[2]==1)
         vv<-vv[[1]]
      vv
      }
    
    Sample call
     v9<-loadvector("c:/temp/test.vec")
    
    If there is only one vector in test.vec, result is vector v9 otherwise first vector is v9[[1]], second v9[[2]],...

  • Matrix operations
    • Transpose network
      t(n1)
      
    • Eigenvalues/eigenvectors
      eigen(n1)
      
    • Hubs and authorities
       hubs <- eigen(n1 %*% t(n1)) $ vec[,1]
       auth <- eigen(t(n1) %*% n1) $ vec[,1]
      
    • function that saves ordinary or 2-mode matrix from R to Pajek input file (*Matrix)
          savematrix <- function(n,direct,twomode=1){
          if ((dim(n)[1] == dim(n)[2]) & (twomode!=2))
      	  { write(paste("*Vertices",dim(n)[1]), file = direct);
      		write(paste(seq(1,length=dim(n)[1]),' "',rownames(n),
      		      '"',sep=""), file = direct,append=TRUE);
      		write("*Matrix", file = direct,append=TRUE);
      		write(t(n),file = direct,ncolumns=dim(n)[1],
      		      append=TRUE) }
      	else
      	  { write(paste("*Vertices",sum(dim(n)),dim(n)[1]),
      	          file = direct);
      		write(paste(1:dim(n)[1],' "',rownames(n),'"',sep=""),
      		      file = direct,append=TRUE);
      		write(paste(seq(dim(n)[1]+1,length=dim(n)[2]),' "',
      		      colnames(n),'"',sep=""), file = direct,append=TRUE);
      		write("*Matrix", file = direct, append=TRUE);
      		write(t(n),file = direct, ncolumns=dim(n)[2],append=TRUE)}
      	  }
      
      Sample call
      savematrix(n1,"c:/temp/test.mat")
      
      To request a 2-mode matrix (in the case that number of rows and columns is the same):
      savematrix(n1,"c:/temp/test.mat",2)
      
    • function that saves ordinary or 2-mode matrix from R to Pajek input file (*Arcs, *Edges)
          savenetwork <- function(n,direct,twomode=1){
              if ((dim(n)[1] == dim(n)[2]) & (twomode!=2))
                { write(paste("*Vertices",dim(n)[1]), file = direct);
                      write(paste(seq(1,length=dim(n)[1]),' "',rownames(n),
                            '"',sep=""), file = direct,append=TRUE);
                      write("*Arcs", file = direct,append=TRUE);
                      for (i in 1:dim(n)[1]) {
                        for (j in 1:dim(n)[2]) {
                          if (n[i,j]!=0) {write(paste(i,j,n[i,j]),file = direct,append=TRUE)}
                        }
                      }
                }
              else
                { write(paste("*Vertices",sum(dim(n)),dim(n)[1]),
                        file = direct);
                      write(paste(1:dim(n)[1],' "',rownames(n),'"',sep=""),
                            file = direct,append=TRUE);
                      write(paste(seq(dim(n)[1]+1,length=dim(n)[2]),' "',
                            colnames(n),'"',sep=""), file = direct,append=TRUE);
                      write("*Edges", file = direct, append=TRUE);
                      for (i in 1:dim(n)[1]) {
                        for (j in 1:dim(n)[2]) {
                          if (n[i,j]!=0) {write(paste(i,j+dim(n)[1],n[i,j]),file = direct,append=TRUE)}
                        }
                      }
                }
           }
      
      Sample call
      savenetwork(n1,"c:/temp/test.mat")
      
      To request a 2-mode network (in the case that number of rows and columns is the same):
      savenetwork(n1,"c:/temp/test.mat",2)
      
    • function that loads ordinary or 2-mode matrix to R from Pajek input file (*Matrix)
      loadmatrix <- function(direct){
        nn<-read.table(file=direct,nrows=1)
        if (length(nn) == 2)
          { xx<-read.table(file=direct,skip=1,nrows=nn[[2]],fill=TRUE)
            n<-read.table(file=direct,skip=nn[[2]]+2)
            rownames(n)<-xx[[2]]
            colnames(n)<-xx[[2]] }
        else
          {xxrow<-read.table(file=direct,skip=1,nrows=nn[[3]],fill=TRUE)
           xxcol<-read.table(file=direct,skip=nn[[3]]+1,
                             nrows=nn[[2]]-nn[[3]],fill=TRUE)
           n<-read.table(file=direct,skip=nn[[2]]+2)
           rownames(n)<-xxrow[[2]]
           colnames(n)<-xxcol[[2]] }
        as.matrix(n)
        }
      
      Sample call
      n9<-loadmatrix("c:/temp/test.mat")
      

How to?; Pajek; Vlado/Networks