https://github.com/cran/KRLS
Tip revision: 9ee4980f0f951956294c84b7f49fe4374e5a432b authored by Jens Hainmueller on 10 July 2017, 12:55:59 UTC
version 1.0-0
version 1.0-0
Tip revision: 9ee4980
solveforc.R
solveforc <-
function(y=NULL,Eigenobject=NULL,lambda=NULL,eigtrunc=NULL){
nn <- nrow(y)
Ginv <- matrix(NA,nn,nn)
if (is.null(eigtrunc)){ Ginv <- tcrossprod(multdiag(X=Eigenobject$vectors,d=1/(Eigenobject$values+lambda)),Eigenobject$vectors)
} else{
#eigentruncation: keep only eigenvectors at least 'eigtrunc' times as large as the largest
lastkeeper=max(which(Eigenobject$values>=eigtrunc*Eigenobject$values[1]))
#We need at least one!
lastkeeper=max(1,lastkeeper)
Ginv <- tcrossprod(multdiag(X=Eigenobject$vectors[,1:lastkeeper],d=1/(Eigenobject$values[1:lastkeeper]+lambda)),Eigenobject$vectors[,1:lastkeeper])
}
coeffs <- matrix(NA,nrow=nn,ncol=1)
coeffs <- tcrossprod(Ginv,t(y))
Le <- crossprod(coeffs/diag(Ginv))
#Le <- as.vector(crossprod(coeffs/diag(Ginv)))
return(list(coeffs=coeffs,
Le=Le))
}
