28 lines
600 B
R

katz.cent <- function(A, alpha=NULL, beta=NULL){ #NULL sets the default value
if (class(A) == 'igraph'){
#Error checking. Turn into adj matrix.
A <- get.adjacency(A)
}
lam.dom <- eigen(A)$values[1] #dom eigenvec
if (is.null(alpha)){
if(lam.dom == 0)
alpha = 0.1
else
alpha <- 0.9 * (1/lam.dom) #Set alpha to 90% of max allowed
if (is.complex(alpha)){
alpha <- Re(alpha)
}
}
n <- nrow(A)
if (is.null(beta)){
beta <- matrix(rep(1/n, n),ncol=1)
}
#Katz scores
scores <- solve(diag(n) - alpha*A,beta)
return(scores)
}