28 lines
600 B
R
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)
|
|
}
|