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