sparseDecom | R Documentation |
Decomposes a matrix into sparse eigenevectors to maximize explained variance. Note: we do not scale the matrices internally. We leave scaling choices to the user.
sparseDecom(
inmatrix = NA,
inmask = NULL,
sparseness = 0.1,
nvecs = 10,
its = 5,
cthresh = 50,
statdir = NA,
z = 0,
smooth = 0,
initializationList = list(),
mycoption = 0,
robust = 0,
ell1 = 1,
getSmall = 0,
verbose = FALSE,
powerit = 0,
priorWeight = 0,
maxBased = FALSE
)
inmatrix |
n by p input images , subjects or time points by row , spatial variable lies along columns |
inmask |
optional antsImage mask |
sparseness |
lower values equal more sparse |
nvecs |
number of vectors |
its |
number of iterations |
cthresh |
cluster threshold |
statdir |
place on disk to save results |
z |
u penalty, experimental |
smooth |
smoothness eg 0.5 |
initializationList |
see initializeEigenanatomy |
mycoption |
0, 1 or 2 all produce different output 0 is combination of 1 (spatial orthogonality) and 2 (subject space orthogonality) |
robust |
rank transform input data - good for data checking |
ell1 |
the ell1 grad descent param |
getSmall |
try to get smallest evecs (bool) |
verbose |
activates verbose output |
powerit |
alternative power iteration implementation, faster |
priorWeight |
scalar weight typically in range zero to two |
maxBased |
boolean that chooses max-based thresholding |
outputs a decomposition of a population or time series matrix
Avants BB
mat <- replicate(100, rnorm(20))
mydecom <- sparseDecom(mat)
mat <- scale(mat)
mydecom2 <- sparseDecom(mat)
# params that lead to algorithm similar to NMF
mydecom3 <- sparseDecom(mat, z = 1, sparseness = 1)
## Not run:
# for prediction
if (usePkg("randomForest") & usePkg("spls") & usePkg("BGLR")) {
data(lymphoma) # from spls
training <- sample(rep(c(TRUE, FALSE), 31))
sp <- 0.02
myz <- 0
ldd <- sparseDecom(lymphoma$x[training, ],
nvecs = 5, sparseness = (sp),
mycoption = 1, z = myz
) # NMF style
traindf <- data.frame(
lclass = as.factor(lymphoma$y[training]),
eig = lymphoma$x[training, ] %*% as.matrix(ldd$eigenanatomyimages)
)
testdf <- data.frame(
lclass = as.factor(lymphoma$y[!training]),
eig = lymphoma$x[!training, ] %*% as.matrix(ldd$eigenanatomyimages)
)
myrf <- randomForest(lclass ~ ., data = traindf)
predlymp <- predict(myrf, newdata = testdf)
print(paste(
"N-errors:", sum(abs(testdf$lclass != predlymp)),
" non-zero ", sum(abs(ldd$eigenanatomyimages) > 0)
))
# compare to http://arxiv.org/pdf/0707.0701v2.pdf
# now SNPs
data(mice)
snps <- quantifySNPs(mice.X, shiftit = TRUE)
numericalpheno <- as.matrix(mice.pheno[, c(4, 5, 13, 15)])
nfolds <- 6
train <- sample(rep(c(1:nfolds), 1800 / nfolds))
train <- (train < 4)
lrmat <- lowrankRowMatrix(as.matrix(snps[train, ]), 50)
lrmat <- scale(lrmat)
snpd <- sparseDecom(lrmat - min(lrmat), nvecs = 20, sparseness = (0.001), z = -1)
projmat <- as.matrix(snpd$eig)
snpse <- as.matrix(snps[train, ]) %*% projmat
traindf <- data.frame(bmi = numericalpheno[train, 3], snpse = snpse)
snpse <- as.matrix(snps[!train, ]) %*% projmat
testdf <- data.frame(bmi = numericalpheno[!train, 3], snpse = snpse)
myrf <- randomForest(bmi ~ ., data = traindf)
preddf <- predict(myrf, newdata = testdf)
cor.test(preddf, testdf$bmi)
plot(preddf, testdf$bmi)
} # check for packages
# prior-based example
set.seed(123)
ref <- antsImageRead(getANTsRData("r16"))
ref <- iMath(ref, "Normalize")
mi <- antsImageRead(getANTsRData("r27"))
mi2 <- antsImageRead(getANTsRData("r30"))
mi3 <- antsImageRead(getANTsRData("r62"))
mi4 <- antsImageRead(getANTsRData("r64"))
mi5 <- antsImageRead(getANTsRData("r85"))
refmask <- getMask(ref)
refmask <- iMath(refmask, "ME", 2) # just to speed things up
ilist <- list(mi, mi2, mi3, mi4, mi5)
for (i in 1:length(ilist))
{
ilist[[i]] <- iMath(ilist[[i]], "Normalize")
mytx <- antsRegistration(
fixed = ref, moving = ilist[[i]],
typeofTransform = c("Affine")
)
mywarpedimage <- antsApplyTransforms(
fixed = ref, moving = ilist[[i]],
transformlist = mytx$fwdtransforms
)
ilist[[i]] <- mywarpedimage
}
mat <- imageListToMatrix(ilist, refmask)
kmseg <- kmeansSegmentation(ref, 3, refmask)
initlist <- list()
for (k in 1:3) {
initlist[[k]] <-
thresholdImage(kmseg$probabilityimages[[k]], 0.1, Inf) *
kmseg$probabilityimages[[k]]
}
eanat <- sparseDecom(mat,
inmask = refmask, ell1 = 0.1,
sparseness = 0.0, smooth = 0.5, verbose = 1,
initializationList = initlist, cthresh = 25,
nvecs = 3, priorWeight = 0.5
)
ee <- matrixToImages(eanat$eigenanatomyimages, refmask)
eseg <- eigSeg(refmask, ee)
priormat <- imageListToMatrix(initlist, refmask)
cor(t(eanat$eigenanatomyimages), t(priormat))
plot(ref, eseg)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.