Data driven selection of an imputation algorithm - kreutz-lab/OmicsData GitHub Wiki
DIMA
Egert J, Brombacher E, Warscheid B, and Kreutz C. DIMA: Data-driven Selection of an Imputation Algorithm. J Proteome Res, 2021. doi: 10.1021/acs.jproteome.1c00119.
Short description
Missing value imputation is a crucial and essential step in a proteomics analysis pipeline and downstream analyses are highly affected by this processing step. To facilitate the decision for a well-performing imputation method, a novel concept for data-driven recommendation of a high-performing imputation algorithm is presented. DIMA has the advantage that it combines the learning of the individual pattern of MVs in a given data set with the testing of many different imputation strategies to suggest the best-performing algorithm for the specific input data.
Usage
An OmicsData object is created by
O = OmicsData(file);
where .txt, .xls, .xlsx, .csv and .mat files as well as a numeric input are accepted, e.g. the MaxQuant output tables can serve as file inputs here.
A pre-processing step may be applied by
O = OmicsFilter(O,nacut,logflag,scaleflag);
In which features with a higher proportion of MVs than the $nacut$ threshold are removed. The flags $logflag$ and $scaleflag$ can be logical or string inputs defining if a log2 or log10 transformation and a median or mean normalization should be performed. DIMA is executed via
O = DIMA(O,[algorithms],[bio]);
Either the default imputation algorithms are used or they can be specified by the user. DIMA currently comprises 30 imputation algorithms from 12 R-packages. A fast version, which only runs the nine most frequently recommended algorithms based on 142 PRIDE data sets, is also implemented and available by setting algorithms= 'fast', but should be used with caution. The optional third input argument is a flag if additional biological information - if available in the input data file - should be taken into account. After applying DIMA the suggested algorithm and the respective imputation are saved in the proteomics data object:
algorithm = get(O,'DIMA');
data = get(O,'data');
Example
OmicsInit
O = OmicsData('proteinGroups.txt');
O = OmicsFilter(O,0.8,'log2');
O = DIMA(O);
Performing this example produces the file 'proteinGroups_Imp.txt' with most information from the original file 'proteinGroups.txt' but with the imputed intensities.
Package installation
DIMA performs imputation via Rcall and all R packages applied have to be installed beforehand:
packages <- c('Rtools','R.matlab','amap','mice','norm','Amelia','Hmisc','imputeLCMD','missForest','softImpute','VIM','rrcovNA','missMDA','mi','DMwR','GMSimpute')
for (i in 1:length(packages)){
install.packages(packages[i], dependencies=TRUE, repos='http://cran.rstudio.com/')
}
install.packages("BiocManager")
BiocManager::install("pcaMethods")
BiocManager::install("impute")
install.packages("https://cran.r-project.org/src/contrib/Archive/imputation/imputation_1.3.tar.gz", repos=NULL, type='source')
Implementation
- The pattern of missing values in the original data O is learned by logistic regression analysis.
- A reference data R with fewer MVs is constructed from the original data O to evaluate imputation performance on.
- To generate a pattern of missing data with a similar distribution as in the original data, the logistic regression model of step 1 is applied to the reference data R. Bernoulli trials are performed to simulate different patterns of MVs.
- Various imputation algorithms are applied to the reference data R with patterns of MVs and ranked by their root mean square error. The best-performing algorithm is defined by the lowest mean rank over all pattern simulations.
- The best-performing imputation algorithm of step 4 is recommended as imputation algorithm for the original data O and imputation of O is performed.