View source: R/sparseRegression.R
sparseRegression | R Documentation |
Compute a sparse, spatially coherent regression from a set of input images (with mask) to an outcome variable.
sparseRegression(
inmatrix,
demog,
outcome,
mask = NULL,
sparseness = 0.05,
nvecs = 10,
its = 5,
cthresh = 250,
statdir = NA,
z = 0,
smooth = 0
)
inmatrix |
Input data matrix, with dimension number of subjects by number of voxels. |
demog |
Input demographics data frame. Contains outcome variable to regress against. |
outcome |
Name of column in |
mask |
Mask for reconstructing |
sparseness |
Level of sparsity desired. |
nvecs |
Number of eigenvectors to return. |
its |
Number of cross-validation folds to run. |
cthresh |
Cluster threshold. |
statdir |
Where to put results. If not provided, a temp directory is created. |
z |
Row (subject-wise) sparseness. |
smooth |
Amount of smoothing. |
A list of values:
eigenanatomyimages |
Coefficient vector images. |
umatrix |
Projections of input images on the sparse regression vectors. Can be used for, e.g., subsequent classification/predictions. |
projections |
Predicted values of outcome variable. |
Kandel BM, Avants BB.
Kandel B.M., D. Wolk, J. Gee, and B. Avants. Predicting Cognitive Data from Medical Images Using Sparse Linear Regression. Information Processing in Medical Imaging, 2013. literature/web site here ~
nsubj <- 50
prop.train <- 1 / 2
subj.train <- sample(1:nsubj, prop.train * nsubj, replace = FALSE)
input <- t(replicate(nsubj, rnorm(125)))
outcome <- seq(1, 5, length.out = nsubj)
demog <- data.frame(outcome = outcome)
input[, 40:60] <- 30 + outcome + rnorm(length(input[, 40:60]), sd = 2)
input.train <- input[subj.train, ]
input.test <- input[-subj.train, ]
demog.train <- data.frame(outcome = demog[subj.train, ])
demog.test <- data.frame(outcome = demog[-subj.train, ])
mymask <- as.antsImage(array(rep(1, 125), dim = c(5, 5, 5)))
myregression <- sparseRegression(input.train, demog.train, "outcome", mymask,
sparseness = 0.05, nvecs = 5, its = 3, cthresh = 250
)
# visualization of results
sample <- rep(0, 125)
sample[40:60] <- 1
signal.img <- as.antsImage(array(rep(0, 125), dim = c(5, 5, 5)))
signal.img[signal.img >= 0] <- sample
# plot( signal.img, axis=2, slices='1x5x1') # actual source of signal
# compare against first learned regression vector
myimgs <- list()
for (i in 1:5) {
myarray <- as.array(myregression$eigenanatomyimages[[i]])
myarray <- myarray / max(abs(myarray)) # normalize for visualization
myimgs[[i]] <- antsImageClone(myregression$eigenanatomyimages[[i]])
myimgs[[i]][mymask > 0] <- myarray
}
# plot(myimgs[[1]], axis=2, slices='1x5x1')
# use learned eigenvectors for prediction
result <- regressProjections(
input.train, input.test, demog.train,
demog.test, myregression$eigenanatomyimages, mymask, "outcome"
)
# plot(result$outcome.comparison$real, result$outcome.comparison$predicted)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.