R/Pinv.R

"Pinv" <- function(X,tol = sqrt(.Machine$double.eps)) {
   svdX <- svd(X)
   p <- svdX$d > max(tol * svdX$d[1],0 )
   if(all(p)){ Pinv <- svdX$v %*% (1/svdX$d * t(svdX$u)) } else {
    Pinv <- svdX$v[,p,drop=FALSE] %*% (1/svdX$d[p] * t(svdX$u[,p,drop=FALSE])) } 
    return(Pinv)
}

Try the psych package in your browser

Any scripts or data that you put into this service are public.

psych documentation built on Sept. 26, 2023, 1:06 a.m.