This package performs three main functions.
Reads multiple NIfT1 files and converts them into a dataframe with a summary of each region of interst.
Performs network estimation using the R package huge - currently implemented with the Meinshausen-Buhlmann option for undirected graph estimation.
Performs variable selection on covariates provided to predict connectivity at each edge of the network.
In order to install the package, several R packages are needed. Some functions rely on oro.nifti, neurobase, huge, glmnet, e1071, and randomForest.
The following line of code installs the package from GitHub:
library(devtools)
devtools::install_github("EmilyLMorris/ImagingPred")
Here is a simple example for each of the functions. First read in a NIfTI file, this example may take a few minutes to run.
library(oro.nifti) library(neurobase) set.seed(2020) # generate an example nifti file img = array(rnorm(100*100*100*120), dim = c(100,100,100,120)) nifti.img = oro.nifti::nifti(img) # generate an example nifti file nifti.img writenii(nifti.img, "example1") img1 = read.nifti.files("example1") network1 = network.estimate(img1) table(network1) # repeat this for multiple "subjects" for(n in 1:10){ set.seed(2020 + n) img = array(rnorm(100*100*100*120), dim = c(100,100,100,120)) nifti.img = oro.nifti::nifti(img) # generate an example nifti file writenii(nifti.img, paste("example", n+1, sep = "")) } # function read.nifti.files reads the .nii files and summarizes into 264 regions of interest file.names = list.files(getwd())[grep(".nii", list.files(getwd()))] img.summary = read.nifti.files(file.names) length(img.summary) dim(img.summary[[1]])
Function used to generate network estimate for each of the subjects:
networks.list = network.estimate(img.summary)
Finally we demonstrate how to use the function, prediction.analysis, in two ways to perform variable selection and to predict connectivity.
# generate covsariate matrix n = length(networks.list) X <- data.frame(matrix(rnorm(n*10), nrow = n), subj.id = file.names) results.ex1 = prediction.analysis(networks = networks.list, # network estimates for each subject covariates = X, # covariate matrix method = "SVM", # can choose between SVM and random forest missing.prop = 0, # can specify a threshold to remove covariates if missing for too many subjects ID = NULL, # specify subject ID to match networks to covariates newdata = NULL) results.ex1$predicted results.ex1$variables_selected
Example using simulated data with some true signal:
load("example_pkg.RData") results.ex2 = prediction.analysis(networks = networks.list, covariates = data.frame(X), method = "SVM", missing.prop = 0, ID = names(networks.list), newdata = NULL) dim(results.ex2$predicted) length(which(!is.na(results.ex2$variables_selected))) results.ex2$index_edges # use to compare to true connections in simulated data
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.