# Imputation

# Load PRONE Package

    library(PRONE)

# Load Data (TMT)

Here, we are directly working with the SummarizedExperiment data. For more information on how to create the SummarizedExperiment from a proteomics data set, please refer to the “Get Started” vignette.

The example TMT data set originates from (Biadglegne et al. 2022).

    data("tuberculosis_TMT_se")
    se <- tuberculosis_TMT_se

# Preprocessing

As we have seen in the Preprocessing phase, that samples “1.HC_Pool1” and “1.HC_Pool2” have been removed from the data set due to their high amount of missing values (more than 80% of NAs per sample), before imputing the data we will here remove these two samples.

    se <- remove_samples_manually(se, "Label", c("1.HC_Pool1", "1.HC_Pool2"))
    #> 2 samples removed.

# Missigness in Proteomics Data

Since proteomics data is often affected by missing values and some statistical tests do not allow a high amount of missingness in the data, people have to options to reduce the amount of missingness in the data: (1) remove proteins with missing values or (2) impute missing values.

(1): this point is already shown in the Preprocessing tutorial, where we removed samples with a high amount of missing values using a predefined threshold.

(2): this point will be discussed here.

# Impute Data

Since the initial focus of PRONE was on the evaluation of the performance of normalization methods and a selection of methods was made based on an extensive literature review, the imputation methods are currently still limited. However, to ensure that PRONE offers all steps of a typical proteomics analysis workflow, we have included a basic imputation method since in some cases imputation is favored over removing a high amount of proteins.

So currently, there is only a mixed imputation method available in PRONE: k-nearest neighbor imputation for proteins with missing values at random and a left-shifted Gaussian distribution for proteins with missing values not at random. Imputation can be performed on a selection of normalized data sets using the “ain” parameter in the `impute_SE` function. The default is to impute all assays (ain = NULL).

    se <- impute_se(se, ain = NULL)
    #> Condition of SummarizedExperiment used!
    #> All assays of the SummarizedExperiment will be used.
    #> Imputing along margin 1 (features/rows).
    #> Imputing along margin 1 (features/rows).
    #> Imputing along margin 1 (features/rows).
    #> Imputing along margin 1 (features/rows).
    #> Imputing along margin 1 (features/rows).
    #> Imputing along margin 1 (features/rows).

ATTENTION:

Please note that imputation can introduce bias in the data and should be used with caution. After imputing your data, have a look at the exploratory data analysis plots (such as boxplots, PCA plots, etc.) to see if the imputation method has skewed the distributions of your samples and introduced biases in your data. These visualizations options are already shown in the “Normalization” tutorial.

# Session Info

    utils::sessionInfo()
    #> R version 4.5.2 (2025-10-31)
    #> Platform: x86_64-pc-linux-gnu
    #> Running under: Ubuntu 24.04.4 LTS
    #>
    #> Matrix products: default
    #> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
    #> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
    #>
    #> locale:
    #>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
    #>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C
    #>  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
    #>  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
    #>  [9] LC_ADDRESS=C               LC_TELEPHONE=C
    #> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
    #>
    #> time zone: Etc/UTC
    #> tzcode source: system (glibc)
    #>
    #> attached base packages:
    #> [1] stats4    stats     graphics  grDevices utils     datasets  methods
    #> [8] base
    #>
    #> other attached packages:
    #>  [1] PRONE_1.5.1                 SummarizedExperiment_1.41.1
    #>  [3] Biobase_2.71.0              GenomicRanges_1.63.1
    #>  [5] Seqinfo_1.1.0               IRanges_2.45.0
    #>  [7] S4Vectors_0.49.0            BiocGenerics_0.57.0
    #>  [9] generics_0.1.4              MatrixGenerics_1.23.0
    #> [11] matrixStats_1.5.0           bookdown_0.46
    #>
    #> loaded via a namespace (and not attached):
    #>   [1] bitops_1.0-9                permute_0.9-10
    #>   [3] rlang_1.1.7                 magrittr_2.0.4
    #>   [5] GetoptLong_1.1.0            clue_0.3-67
    #>   [7] otel_0.2.0                  compiler_4.5.2
    #>   [9] mgcv_1.9-4                  gprofiler2_0.2.4
    #>  [11] png_0.1-8                   vctrs_0.7.1
    #>  [13] reshape2_1.4.5              stringr_1.6.0
    #>  [15] ProtGenerics_1.43.0         shape_1.4.6.1
    #>  [17] crayon_1.5.3                pkgconfig_2.0.3
    #>  [19] MetaboCoreUtils_1.19.2      fastmap_1.2.0
    #>  [21] XVector_0.51.0              labeling_0.4.3
    #>  [23] rmarkdown_2.30              preprocessCore_1.73.0
    #>  [25] purrr_1.2.1                 xfun_0.56
    #>  [27] MultiAssayExperiment_1.37.2 cachem_1.1.0
    #>  [29] jsonlite_2.0.0              DelayedArray_0.37.0
    #>  [31] BiocParallel_1.45.0         parallel_4.5.2
    #>  [33] cluster_2.1.8.2             R6_2.6.1
    #>  [35] bslib_0.10.0                stringi_1.8.7
    #>  [37] RColorBrewer_1.1-3          limma_3.67.0
    #>  [39] jquerylib_0.1.4             Rcpp_1.1.1
    #>  [41] iterators_1.0.14            knitr_1.51
    #>  [43] splines_4.5.2               Matrix_1.7-4
    #>  [45] igraph_2.2.2                tidyselect_1.2.1
    #>  [47] abind_1.4-8                 yaml_2.3.12
    #>  [49] vegan_2.7-3                 doParallel_1.0.17
    #>  [51] ggtext_0.1.2                codetools_0.2-20
    #>  [53] affy_1.89.0                 curl_7.0.0
    #>  [55] lattice_0.22-9              tibble_3.3.1
    #>  [57] plyr_1.8.9                  withr_3.0.2
    #>  [59] S7_0.2.1                    evaluate_1.0.5
    #>  [61] Spectra_1.21.4              xml2_1.5.2
    #>  [63] circlize_0.4.17             pillar_1.11.1
    #>  [65] affyio_1.81.0               BiocManager_1.30.27
    #>  [67] DT_0.34.0                   foreach_1.5.2
    #>  [69] plotly_4.12.0               MSnbase_2.37.0
    #>  [71] MALDIquant_1.22.3           ncdf4_1.24
    #>  [73] RCurl_1.98-1.17             ggplot2_4.0.2
    #>  [75] scales_1.4.0                glue_1.8.0
    #>  [77] lazyeval_0.2.2              maketools_1.3.2
    #>  [79] tools_4.5.2                 mzID_1.49.0
    #>  [81] sys_3.4.3                   data.table_1.18.2.1
    #>  [83] QFeatures_1.21.0            vsn_3.79.5
    #>  [85] mzR_2.45.0                  buildtools_1.0.0
    #>  [87] fs_1.6.7                    XML_3.99-0.22
    #>  [89] grid_4.5.2                  impute_1.85.0
    #>  [91] tidyr_1.3.2                 crosstalk_1.2.2
    #>  [93] colorspace_2.1-2            MsCoreUtils_1.23.3
    #>  [95] nlme_3.1-168                PSMatch_1.15.1
    #>  [97] cli_3.6.5                   viridisLite_0.4.3
    #>  [99] S4Arrays_1.11.1             ComplexHeatmap_2.27.1
    #> [101] dplyr_1.2.0                 AnnotationFilter_1.35.0
    #> [103] pcaMethods_2.3.0            gtable_0.3.6
    #> [105] sass_0.4.10                 digest_0.6.39
    #> [107] SparseArray_1.11.10         htmlwidgets_1.6.4
    #> [109] rjson_0.2.23                farver_2.1.2
    #> [111] htmltools_0.5.9             lifecycle_1.0.5
    #> [113] httr_1.4.8                  GlobalOptions_0.1.3
    #> [115] statmod_1.5.1               gridtext_0.1.6
    #> [117] MASS_7.3-65

# References

Biadglegne, Fantahun, Johannes R. Schmidt, Kathrin M. Engel, Jörg Lehmann, Robert T. Lehmann, Anja Reinert, Brigitte König, Jürgen Schiller, Stefan Kalkhof, and Ulrich Sack. 2022. “Mycobacterium Tuberculosis Affects Protein and Lipid Content of Circulating Exosomes in Infected Patients Depending on Tuberculosis Disease State.” Biomedicines 10 (4): 783. https://doi.org/10.3390/biomedicines10040783.