Networks / Pajek Package for Large Network Analysis

How toanalyse 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.

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)

Saving 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")

if (dim(vv)[2]==1)
vv<-vv[[1]]
vv
}
Sample call
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)
if (length(nn) == 2)
rownames(n)<-xx[[2]]
colnames(n)<-xx[[2]] }
else