Nothing
## compute PCA of iris data set with svd() and sparsesvd()
library(sparsesvd)
library(Matrix)
data(iris)
M <- scale(as.matrix(iris[, 1:4]), scale=FALSE)
Ms <- Matrix(M) # not sparse, but a dMatrix
res1 <- svd(M)
res2 <- sparsesvd(Ms)
## check that eigenvalues are the same
print(res2$d, digits=3)
stopifnot(all.equal(res1$d, res2$d, tolerance=1e-12))
## these should be diagonal unit matrices
UtU <- abs(crossprod(res2$u, res1$u)) # diagonal entries may be 1 or -1
VtV <- abs(crossprod(res2$v, res1$v)) # (because sign of eigenvectors is arbitrary)
I1 <- diag(1, length(res1$d))
print(round(UtU, 12))
stopifnot(all.equal(UtU, I1, tolerance=1e-12))
print(round(VtV, 12))
stopifnot(all.equal(VtV, I1, tolerance=1e-12))
## check that SVD is reproducible
## (this is guaranteed by a deterministic RNG built into the SVDLIBC code)
for (i in 1:20) {
res <- sparsesvd(Ms)
if (!isTRUE(all.equal(res, res2))) stop("SVD not reproducible on iteration #", i)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.