PIMMS Tutorial: Scikit-learn style transformers#

  1. Load data into pandas dataframe

  2. Fit model on training data, potentially specify validation data

  3. Impute only missing values with predictions from model

Autoencoders need wide training data, i.e. a sample with all its features’ intensities, whereas Collaborative Filtering needs long training data, i.e. sample identifier a feature identifier and the intensity. Both data formats can be transformed into each other, but models using long data format do not need to take care of missing values.

import os
from importlib import metadata

IN_COLAB = 'COLAB_GPU' in os.environ
if IN_COLAB:
    try:
        _v = metadata.version('pimms-learn')
        print(f"Running in colab and pimms-learn ({_v}) is installed.")
    except metadata.PackageNotFoundError:
        print("Install PIMMS...")
        # !pip install git+https://github.com/RasmussenLab/pimms.git
        !pip install pimms-learn

If on colab, please restart the environment and run everything from here on.

Specify example data:

import os

IN_COLAB = 'COLAB_GPU' in os.environ

fn_intensities = 'data/dev_datasets/HeLa_6070/protein_groups_wide_N50.csv'
if IN_COLAB:
    fn_intensities = ('https://raw.githubusercontent.com/RasmussenLab/pimms/main/'
                      'project/data/dev_datasets/HeLa_6070/protein_groups_wide_N50.csv')

Load package.

Hide code cell source

import logging
import random

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from IPython.display import display

import pimmslearn.filter
import pimmslearn.plotting.data
import pimmslearn.sampling
from pimmslearn.plotting.defaults import color_model_mapping
from pimmslearn.sklearn.ae_transformer import AETransformer
from pimmslearn.sklearn.cf_transformer import CollaborativeFilteringTransformer

pimmslearn.plotting.make_large_descriptors(8)


logger = logger = pimmslearn.logging.setup_nb_logger()
logging.getLogger('fontTools').setLevel(logging.ERROR)

Parameters#

Can be set by papermill on the command line or manually in the (colab) notebook.

fn_intensities: str = fn_intensities  # path or url to the data file in csv format
index_name: str = 'Sample ID'  # name of the index column
column_name: str = 'protein group'  # name of the column index
select_features: bool = True  # Whether to select features based on prevalence
feat_prevalence: float = 0.2  # minimum prevalence of a feature to be included
sample_completeness: float = 0.3  # minimum completeness of a sample to be included
sample_splits: bool = True  # Whether to sample validation and test data
frac_non_train: float = 0.1  # fraction of non training data (validation and test split)
frac_mnar: float = 0.0  # fraction of missing not at random data, rest: missing completely at random
random_state: int = 42  # random state for reproducibility

Data#

Hide code cell source

df = pd.read_csv(fn_intensities, index_col=0)
df.head()
AAAS AACS AAMDC AAMP AAR2 AARS AARS2 AASDHPPT AATF ABCB10 ... ZNHIT2 ZNRF2 ZPR1 ZRANB2 ZW10 ZWILCH ZWINT ZYX hCG_2014768;TMA7 pk;ZAK
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 341,970,000.000 73,598,000.000 NaN 114,990,000.000 159,370,000.000 4,916,300,000.000 149,190,000.000 245,660,000.000 407,590,000.000 72,440,000.000 ... 50,194,000.000 23,201,000.000 332,480,000.000 477,690,000.000 484,070,000.000 NaN 21,823,000.000 721,850,000.000 283,680,000.000 7,714,600.000
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 211,690,000.000 33,991,000.000 19,762,000.000 80,960,000.000 155,320,000.000 4,233,400,000.000 96,914,000.000 306,530,000.000 257,840,000.000 55,844,000.000 ... NaN NaN 294,320,000.000 161,550,000.000 317,600,000.000 NaN NaN 283,840,000.000 NaN NaN
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 342,650,000.000 14,015,000.000 NaN 143,640,000.000 174,350,000.000 7,929,200,000.000 191,730,000.000 373,270,000.000 458,030,000.000 115,780,000.000 ... 38,113,000.000 NaN 525,090,000.000 167,830,000.000 702,420,000.000 NaN 58,540,000.000 772,560,000.000 NaN NaN
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 118,930,000.000 NaN NaN 80,158,000.000 NaN 4,081,400,000.000 74,818,000.000 208,420,000.000 242,070,000.000 42,650,000.000 ... NaN 12,589,000.000 208,620,000.000 162,760,000.000 282,950,000.000 NaN 27,023,000.000 461,970,000.000 NaN NaN
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 177,550,000.000 129,510,000.000 15,272,000.000 132,520,000.000 96,217,000.000 3,854,300,000.000 42,534,000.000 179,130,000.000 186,440,000.000 NaN ... 25,275,000.000 NaN 59,980,000.000 673,000,000.000 188,690,000.000 88,943,000.000 NaN 1,438,800,000.000 NaN 128,670,000.000

5 rows × 4535 columns

We will need the data in long format for Collaborative Filtering. Naming both the row and column index assures that the data can be transformed very easily into long format:

Hide code cell source

df.index.name = index_name  # already set
df.columns.name = column_name  # not set due to csv disk file format
df.head()
protein group AAAS AACS AAMDC AAMP AAR2 AARS AARS2 AASDHPPT AATF ABCB10 ... ZNHIT2 ZNRF2 ZPR1 ZRANB2 ZW10 ZWILCH ZWINT ZYX hCG_2014768;TMA7 pk;ZAK
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 341,970,000.000 73,598,000.000 NaN 114,990,000.000 159,370,000.000 4,916,300,000.000 149,190,000.000 245,660,000.000 407,590,000.000 72,440,000.000 ... 50,194,000.000 23,201,000.000 332,480,000.000 477,690,000.000 484,070,000.000 NaN 21,823,000.000 721,850,000.000 283,680,000.000 7,714,600.000
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 211,690,000.000 33,991,000.000 19,762,000.000 80,960,000.000 155,320,000.000 4,233,400,000.000 96,914,000.000 306,530,000.000 257,840,000.000 55,844,000.000 ... NaN NaN 294,320,000.000 161,550,000.000 317,600,000.000 NaN NaN 283,840,000.000 NaN NaN
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 342,650,000.000 14,015,000.000 NaN 143,640,000.000 174,350,000.000 7,929,200,000.000 191,730,000.000 373,270,000.000 458,030,000.000 115,780,000.000 ... 38,113,000.000 NaN 525,090,000.000 167,830,000.000 702,420,000.000 NaN 58,540,000.000 772,560,000.000 NaN NaN
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 118,930,000.000 NaN NaN 80,158,000.000 NaN 4,081,400,000.000 74,818,000.000 208,420,000.000 242,070,000.000 42,650,000.000 ... NaN 12,589,000.000 208,620,000.000 162,760,000.000 282,950,000.000 NaN 27,023,000.000 461,970,000.000 NaN NaN
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 177,550,000.000 129,510,000.000 15,272,000.000 132,520,000.000 96,217,000.000 3,854,300,000.000 42,534,000.000 179,130,000.000 186,440,000.000 NaN ... 25,275,000.000 NaN 59,980,000.000 673,000,000.000 188,690,000.000 88,943,000.000 NaN 1,438,800,000.000 NaN 128,670,000.000

5 rows × 4535 columns

Data transformation: log2 transformation#

Transform the data using the logarithm, here using base 2:

Hide code cell source

df = np.log2(df + 1)
df.head()
protein group AAAS AACS AAMDC AAMP AAR2 AARS AARS2 AASDHPPT AATF ABCB10 ... ZNHIT2 ZNRF2 ZPR1 ZRANB2 ZW10 ZWILCH ZWINT ZYX hCG_2014768;TMA7 pk;ZAK
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 28.349 26.133 NaN 26.777 27.248 32.195 27.153 27.872 28.603 26.110 ... 25.581 24.468 28.309 28.831 28.851 NaN 24.379 29.427 28.080 22.879
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 27.657 25.019 24.236 26.271 27.211 31.979 26.530 28.191 27.942 25.735 ... NaN NaN 28.133 27.267 28.243 NaN NaN 28.081 NaN NaN
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 28.352 23.740 NaN 27.098 27.377 32.885 27.515 28.476 28.771 26.787 ... 25.184 NaN 28.968 27.322 29.388 NaN 25.803 29.525 NaN NaN
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 26.826 NaN NaN 26.256 NaN 31.926 26.157 27.635 27.851 25.346 ... NaN 23.586 27.636 27.278 28.076 NaN 24.688 28.783 NaN NaN
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 27.404 26.948 23.864 26.982 26.520 31.844 25.342 27.416 27.474 NaN ... 24.591 NaN 25.838 29.326 27.491 26.406 NaN 30.422 NaN 26.939

5 rows × 4535 columns

two plots inspecting data availability#

  1. proportion of missing values per feature median (N = protein groups)

  2. CDF of available intensities per protein group

Hide code cell source

ax = pimmslearn.plotting.data.plot_feat_median_over_prop_missing(
    data=df, type='boxplot')
/home/docs/checkouts/readthedocs.org/user_builds/pimms/envs/latest/lib/python3.10/site-packages/pimmslearn/plotting/data.py:323: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`
  ax = ax[0]  # returned series due to by argument?
../_images/d01b42ff0a115643991b7b58b9f488611e9fe22d6066d994526d62208fc13dc8.png

Hide code cell source

df.notna().sum().sort_values().plot()
<Axes: xlabel='protein group'>
../_images/996b67a64fd0c63a6f13ab8ba055b3db048003ee9c5a860ecab9c7d04722a683.png

Data selection#

define a minimum feature and sample frequency for a feature to be included

Hide code cell source

if select_features:
    # potentially this can take a few iterations to stabilize.
    df = pimmslearn.filter.select_features(df, feat_prevalence=feat_prevalence)
    df = pimmslearn.filter.select_features(df=df, feat_prevalence=sample_completeness, axis=1)
df.shape
pimmslearn.filter - INFO     Drop 91 along axis 0 (index).
pimmslearn.filter - INFO     Drop 0 along axis 1 (columns).
(50, 4444)

Transform to long-data format:

Hide code cell source

df = df.stack().to_frame('intensity')
df
intensity
Sample ID protein group
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 AAAS 28.349
AACS 26.133
AAMP 26.777
AAR2 27.248
AARS 32.195
... ... ...
2020_06_02_09_41_Q-Exactive-HF-X-Orbitrap_6070 ZRANB2 28.098
ZW10 29.425
ZWINT 24.794
ZYX 29.847
hCG_2014768;TMA7 29.212

186965 rows × 1 columns

Optionally: Sample data#

  • models can be trained without subsetting the data

  • allows evaluation of the models

Hide code cell source

if sample_splits:
    splits, thresholds, fake_na_mcar, fake_na_mnar = pimmslearn.sampling.sample_mnar_mcar(
        df_long=df,
        frac_non_train=frac_non_train,
        frac_mnar=frac_mnar,
        random_state=random_state,
    )
    splits = pimmslearn.sampling.check_split_integrity(splits)
else:
    splits = pimmslearn.sampling.DataSplits(is_wide_format=False)
    splits.train_X = df
/home/docs/checkouts/readthedocs.org/user_builds/pimms/envs/latest/lib/python3.10/site-packages/pimmslearn/sampling.py:208: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead
  loc=float(quantile_frac),
/home/docs/checkouts/readthedocs.org/user_builds/pimms/envs/latest/lib/python3.10/site-packages/pimmslearn/sampling.py:209: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead
  scale=float(0.3 * df_long.std()),
pimmslearn.sampling - INFO     int(N * frac_non_train) = 18,696
pimmslearn.sampling - INFO     len(fake_na_mnar) = 0
pimmslearn.sampling - INFO     len(splits.train_X) = 186,965
pimmslearn.sampling - INFO     len(fake_na) = 18,696
pimmslearn.sampling - INFO     len(fake_na_mcar) = 18,696

The resulting DataFrame with one column has an MulitIndex with the sample and feature identifier.

Collaborative Filtering#

Inspect annotations of the scikit-learn like Transformer:

# # CollaborativeFilteringTransformer?

Let’s set up collaborative filtering without a validation or test set, using all the data there is.

cf_model = CollaborativeFilteringTransformer(
    target_column='intensity',
    sample_column='Sample ID',
    item_column='protein group',
    out_folder='runs/scikit_interface')

We use fit and transform to train the model and impute the missing values.

Scikit learns interface requires a X and y. y is the validation data in our context. We might have to change the interface to allow usage within pipelines (-> y is not needed). This will probably mean setting up a validation set within the model.

cf_model.fit(splits.train_X,
             splits.val_y,
             cuda=False,
             epochs_max=20,
             )
suggested_lr.valley = 0.00302
epoch train_loss valid_loss time
0 8.691379 8.587418 00:00
1 8.336887 7.726315 00:00
2 6.982897 4.386268 00:00
3 4.217108 1.293918 00:00
4 2.359127 0.877934 00:00
5 1.477730 0.807062 00:00
6 1.052230 0.743582 00:00
7 0.816788 0.649566 00:00
8 0.665050 0.567286 00:00
9 0.567782 0.530098 00:00
10 0.507087 0.516388 00:00
11 0.474061 0.503482 00:00
12 0.451497 0.499280 00:00
13 0.438067 0.496726 00:00
14 0.429456 0.489769 00:00
15 0.425000 0.489691 00:00
16 0.418863 0.489463 00:00
17 0.418801 0.487983 00:00
18 0.412958 0.487420 00:00
19 0.411609 0.487320 00:00
CollaborativeFilteringTransformer(item_column='protein group',
                                  out_folder=Path('runs/scikit_interface'),
                                  sample_column='Sample ID',
                                  target_column='intensity')
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
../_images/aec5029cbca4c85295a922bc988fd02dd55273324eae69ccc91b99866f22d889.png ../_images/89f87a818ee1c70678442d5a4f1a29efa829e8ed3813755e1e539851f86c906c.png

Impute missing values usin transform method:

df_imputed = cf_model.transform(df).unstack()
assert df_imputed.isna().sum().sum() == 0
df_imputed.head()
protein group AAAS AACS AAMDC AAMP AAR2 AARS AARS2 AASDHPPT AATF ABCB10 ... ZNHIT2 ZNRF2 ZPR1 ZRANB2 ZW10 ZWILCH ZWINT ZYX hCG_2014768;TMA7 pk;ZAK
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 28.349 26.133 24.557 26.777 27.248 32.195 27.153 27.872 28.603 26.110 ... 25.581 24.468 28.309 28.831 28.851 23.581 24.379 29.427 28.080 22.879
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 27.657 25.019 24.236 26.271 27.211 31.979 26.530 28.191 27.942 25.735 ... 25.238 23.898 28.133 27.267 28.243 23.110 25.449 28.081 27.785 23.788
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 28.352 23.740 24.823 27.098 27.377 32.885 27.515 28.476 28.771 26.787 ... 25.184 24.615 28.968 27.322 29.388 23.843 25.803 29.525 28.321 24.435
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 26.826 25.119 23.941 26.256 26.193 31.926 26.157 27.635 27.851 25.346 ... 25.212 23.586 27.636 27.278 28.076 22.956 24.688 28.783 27.729 23.667
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 27.404 26.948 23.864 26.982 26.520 31.844 25.342 27.416 27.474 26.994 ... 24.591 26.051 25.838 29.326 27.491 26.406 25.433 30.422 29.799 26.939

5 rows × 4444 columns

Let’s plot the distribution of the imputed values vs the ones used for training:

Hide code cell source

df_imputed = df_imputed.stack()  # long-format
observed = df_imputed.loc[df.index]
imputed = df_imputed.loc[df_imputed.index.difference(df.index)]
df_imputed = df_imputed.unstack()  # back to wide-format
# some checks
assert len(df) == len(observed)
assert df_imputed.shape[0] * df_imputed.shape[1] == len(imputed) + len(observed)

fig, axes = plt.subplots(2, figsize=(8, 4))

min_max = pimmslearn.plotting.data.get_min_max_iterable(
    [observed, imputed])
label_template = '{method} (N={n:,d})'
ax, _ = pimmslearn.plotting.data.plot_histogram_intensities(
    observed,
    ax=axes[0],
    min_max=min_max,
    label=label_template.format(method='measured',
                                n=len(observed),
                                ),
    color='grey',
    alpha=1)
_ = ax.legend()
ax, _ = pimmslearn.plotting.data.plot_histogram_intensities(
    imputed,
    ax=axes[1],
    min_max=min_max,
    label=label_template.format(method='CF imputed',
                                n=len(imputed),
                                ),
    color=color_model_mapping['CF'],
    alpha=1)
_ = ax.legend()
../_images/0bf0c4addc7e8d51a444d88d5e4ad54c33219609ae4b5ea8cbcbf52572e3b812.png

AutoEncoder architectures#

Hide code cell source

# Use wide format of data
splits.to_wide_format()
splits.train_X
protein group AAAS AACS AAMDC AAMP AAR2 AARS AARS2 AASDHPPT AATF ABCB10 ... ZNHIT2 ZNRF2 ZPR1 ZRANB2 ZW10 ZWILCH ZWINT ZYX hCG_2014768;TMA7 pk;ZAK
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 28.349 26.133 NaN 26.777 27.248 32.195 27.153 NaN 28.603 26.110 ... 25.581 24.468 28.309 28.831 28.851 NaN 24.379 29.427 28.080 22.879
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.019 24.236 26.271 27.211 31.979 26.530 28.191 27.942 25.735 ... NaN NaN NaN 27.267 28.243 NaN NaN 28.081 NaN NaN
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 28.352 23.740 NaN 27.098 27.377 NaN 27.515 28.476 28.771 26.787 ... 25.184 NaN 28.968 27.322 29.388 NaN 25.803 29.525 NaN NaN
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 26.826 NaN NaN 26.256 NaN 31.926 26.157 27.635 27.851 25.346 ... NaN 23.586 27.636 27.278 28.076 NaN 24.688 28.783 NaN NaN
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 27.404 26.948 23.864 26.982 26.520 31.844 25.342 NaN 27.474 NaN ... 24.591 NaN 25.838 29.326 27.491 NaN NaN 30.422 NaN 26.939
2019_12_29_18_18_Q-Exactive-HF-X-Orbitrap_6070 27.891 26.481 26.348 27.849 26.917 32.274 NaN 27.404 28.081 NaN ... 24.849 NaN 26.750 29.652 27.635 26.037 25.002 30.928 NaN 27.088
2020_01_02_17_38_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN 30.226 NaN 23.801 25.130 NaN ... NaN NaN NaN 27.518 25.148 NaN NaN 28.465 28.902 NaN
2020_01_03_11_17_Q-Exactive-HF-X-Orbitrap_6070 27.352 NaN 24.433 25.275 NaN 30.979 NaN 24.893 25.324 NaN ... NaN NaN 24.336 27.579 26.528 NaN NaN 29.726 28.933 NaN
2020_01_03_16_58_Q-Exactive-HF-X-Orbitrap_6070 27.620 25.624 23.520 27.136 25.971 31.415 25.360 25.119 25.750 NaN ... NaN NaN 25.198 29.245 27.331 25.069 NaN NaN NaN 27.086
2020_01_03_20_10_Q-Exactive-HF-X-Orbitrap_6070 27.300 NaN 25.660 27.733 26.897 NaN 25.437 26.813 26.201 NaN ... 24.685 24.661 25.071 28.636 26.542 24.685 24.663 31.005 NaN 27.081
2020_01_04_04_23_Q-Exactive-HF-X-Orbitrap_6070 27.594 27.612 26.211 27.912 27.828 32.207 26.207 27.276 NaN NaN ... 25.052 NaN 26.646 29.886 28.079 24.789 25.821 31.040 NaN 27.296
2020_01_04_10_03_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN 23.081 25.780 NaN 30.259 NaN NaN NaN NaN ... NaN NaN NaN 25.360 NaN NaN NaN 27.829 29.235 NaN
2020_01_04_14_59_Q-Exactive-HF-X-Orbitrap_6070 24.616 NaN NaN 24.765 NaN 29.998 NaN 24.174 NaN NaN ... NaN NaN 25.253 28.000 24.597 NaN NaN 29.215 29.202 NaN
2020_01_06_20_17_Q-Exactive-HF-X-Orbitrap_6070 28.265 27.735 27.055 28.733 28.167 32.554 25.292 NaN 26.711 NaN ... NaN NaN NaN 28.904 NaN 25.628 NaN 31.364 NaN 28.089
2020_01_08_16_43_Q-Exactive-HF-X-Orbitrap_6070 25.734 25.442 NaN 25.347 25.573 31.127 NaN 24.365 NaN NaN ... NaN NaN NaN 28.213 27.034 NaN NaN 29.550 NaN 26.038
2020_01_09_11_07_Q-Exactive-HF-X-Orbitrap_6070 26.167 NaN NaN 26.877 25.986 31.450 23.883 25.810 26.233 NaN ... NaN NaN NaN 29.214 27.125 NaN 24.593 30.142 29.919 NaN
2020_01_15_13_56_Q-Exactive-HF-X-Orbitrap_6070 26.019 23.935 NaN 24.982 NaN 31.423 25.218 27.088 27.190 24.796 ... NaN NaN 27.588 27.579 27.236 NaN 24.458 28.274 NaN NaN
2020_01_20_15_10_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.257 NaN NaN 28.211 32.706 26.536 28.103 28.168 NaN ... NaN NaN 27.765 30.309 29.199 NaN 26.088 31.172 NaN 28.287
2020_02_05_20_55_Q-Exactive-HF-X-Orbitrap_6070 28.157 27.489 NaN 28.594 27.077 32.383 26.182 NaN 27.834 NaN ... 24.657 27.386 25.160 NaN 28.630 25.718 NaN 31.277 NaN 28.386
2020_02_10_15_41_Q-Exactive-HF-X-Orbitrap_6070 29.216 NaN 25.797 NaN 28.929 33.656 27.984 29.301 30.141 NaN ... 26.945 NaN 30.179 29.450 29.721 NaN 26.972 30.912 28.756 NaN
2020_02_11_10_35_Q-Exactive-HF-X-Orbitrap_6070 29.156 27.582 25.516 27.251 NaN NaN 27.977 NaN 29.880 27.348 ... 27.031 NaN 29.081 NaN 29.949 25.797 31.137 30.381 NaN NaN
2020_02_12_05_06_Q-Exactive-HF-X-Orbitrap_6070 29.255 27.394 26.058 27.348 28.755 33.793 29.140 28.825 30.001 28.209 ... NaN NaN 29.925 29.958 30.142 25.309 27.381 30.655 NaN NaN
2020_02_13_00_26_Q-Exactive-HF-X-Orbitrap_6070 29.606 27.286 26.377 26.431 27.898 33.962 NaN 29.481 30.180 27.825 ... 26.946 26.276 30.236 29.713 29.636 26.038 27.857 30.738 NaN NaN
2020_02_13_03_11_Q-Exactive-HF-X-Orbitrap_6070 27.712 26.283 NaN 26.762 28.006 33.848 28.954 29.958 29.293 NaN ... 26.706 26.542 NaN 29.757 29.471 25.575 27.986 30.951 NaN NaN
2020_02_17_13_55_Q-Exactive-HF-X-Orbitrap_6070 28.435 26.624 25.520 26.746 26.224 32.584 28.020 27.786 28.410 26.512 ... 26.425 NaN 29.144 29.086 28.943 24.317 25.066 29.478 NaN NaN
2020_02_18_01_25_Q-Exactive-HF-X-Orbitrap_6070 26.691 25.331 NaN 25.831 23.969 32.741 26.967 28.236 28.260 27.266 ... 24.340 24.216 29.082 28.328 28.738 23.202 26.282 29.733 NaN 22.075
2020_02_18_18_55_Q-Exactive-HF-X-Orbitrap_6070 NaN 24.772 23.877 26.146 27.353 32.433 27.537 28.055 28.535 27.914 ... NaN 24.773 28.231 27.755 28.956 24.298 25.263 29.180 NaN NaN
2020_02_28_12_27_Q-Exactive-HF-X-Orbitrap_6070 27.702 25.953 24.649 26.582 27.248 NaN 26.985 27.615 27.874 26.436 ... NaN NaN 28.108 NaN 28.125 23.248 23.587 29.475 NaN NaN
2020_03_01_23_00_Q-Exactive-HF-X-Orbitrap_6070 27.596 25.257 22.921 24.869 26.878 32.064 26.496 26.617 27.837 25.854 ... 23.869 NaN 28.118 27.876 27.828 NaN 24.423 28.864 NaN NaN
2020_03_06_16_22_Q-Exactive-HF-X-Orbitrap_6070 26.089 23.806 22.751 25.799 24.384 30.550 NaN 24.911 25.216 NaN ... NaN NaN 24.773 27.669 25.882 NaN NaN 28.426 NaN 25.356
2020_03_07_18_15_Q-Exactive-HF-X-Orbitrap_6070 26.891 24.577 25.052 26.740 26.882 NaN NaN 25.916 24.219 NaN ... 24.296 NaN 26.138 28.962 26.890 25.057 NaN 29.190 NaN 26.855
2020_03_11_11_25_Q-Exactive-HF-X-Orbitrap_6070 27.699 26.344 NaN 25.791 27.523 NaN 27.716 28.179 28.601 27.517 ... 26.404 23.770 NaN 28.115 28.806 24.492 25.244 29.521 NaN NaN
2020_05_04_11_39_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.320 NaN 25.801 25.236 31.472 26.096 27.627 26.755 24.640 ... 25.051 NaN 27.260 28.086 27.064 NaN NaN 28.430 NaN NaN
2020_05_12_15_13_Q-Exactive-HF-X-Orbitrap_6070 27.138 25.875 NaN 25.722 26.513 31.377 26.142 27.486 27.267 26.009 ... 24.935 NaN 27.425 NaN 27.718 22.851 24.988 28.414 27.406 NaN
2020_05_12_18_10_Q-Exactive-HF-X-Orbitrap_6070 26.844 24.719 25.460 25.282 25.656 30.942 26.304 26.419 26.825 NaN ... NaN NaN 27.222 NaN 27.165 NaN 22.620 27.841 26.861 NaN
2020_05_12_21_07_Q-Exactive-HF-X-Orbitrap_6070 26.853 25.421 NaN NaN 25.596 NaN 26.026 26.243 27.130 25.424 ... 24.957 NaN 26.966 27.552 NaN 22.819 24.906 28.062 26.830 NaN
2020_05_14_14_46_Q-Exactive-HF-X-Orbitrap_6070 26.203 NaN 23.161 24.822 26.838 31.714 26.388 26.211 26.895 24.676 ... NaN NaN 27.176 27.620 27.762 23.260 28.917 28.554 NaN NaN
2020_05_14_17_28_Q-Exactive-HF-X-Orbitrap_6070 27.203 23.885 23.234 25.293 26.415 NaN 26.677 26.635 NaN 25.155 ... 25.425 24.426 27.383 27.327 27.766 22.375 29.057 28.312 NaN NaN
2020_05_14_20_11_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.154 23.142 25.126 26.066 31.983 26.534 27.689 27.233 25.296 ... 25.439 NaN 27.429 28.054 27.582 NaN 25.244 28.480 27.948 NaN
2020_05_15_10_30_Q-Exactive-HF-X-Orbitrap_6070 27.494 25.606 25.852 25.617 24.857 32.562 27.693 28.119 28.009 25.884 ... 25.679 NaN 27.664 28.274 28.464 22.570 26.519 29.356 NaN NaN
2020_05_20_12_33_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.552 NaN 25.741 25.893 31.680 25.822 27.158 NaN 25.629 ... 25.054 24.491 28.688 25.496 27.340 NaN 25.492 28.276 28.252 NaN
2020_05_20_15_35_Q-Exactive-HF-X-Orbitrap_6070 27.721 24.916 24.125 26.078 26.726 32.368 27.015 27.807 27.217 NaN ... 25.176 23.532 28.525 28.459 27.581 NaN 26.087 28.691 NaN NaN
2020_05_22_14_57_Q-Exactive-HF-X-Orbitrap_6070 27.808 24.714 NaN 25.857 25.693 32.394 27.619 27.153 NaN 25.988 ... 25.142 NaN NaN 27.482 27.941 NaN NaN 28.632 26.564 NaN
2020_05_22_17_43_Q-Exactive-HF-X-Orbitrap_6070 28.051 25.608 26.030 26.375 25.536 NaN 27.501 28.506 27.846 25.779 ... NaN 23.442 28.081 28.437 28.081 22.678 NaN 28.992 NaN NaN
2020_05_26_14_20_Q-Exactive-HF-X-Orbitrap_6070 27.325 26.800 25.519 25.204 27.263 33.171 28.125 28.389 28.409 27.050 ... NaN 25.162 29.071 28.690 28.289 23.853 NaN 29.962 NaN NaN
2020_05_27_13_57_Q-Exactive-HF-X-Orbitrap_6070 NaN 27.061 25.989 27.999 28.294 34.448 NaN 30.015 29.825 28.311 ... 26.922 25.578 30.025 29.927 NaN 24.652 27.951 30.794 NaN NaN
2020_05_28_04_06_Q-Exactive-HF-X-Orbitrap_6070 30.080 27.373 26.760 27.601 28.023 NaN 28.785 30.316 29.114 29.002 ... 26.960 NaN 30.156 29.833 30.456 26.042 NaN 31.340 NaN NaN
2020_06_01_10_22_Q-Exactive-HF-X-Orbitrap_6070 27.298 NaN 23.002 28.318 NaN 31.398 23.917 NaN 26.357 NaN ... 25.702 NaN 23.989 27.854 27.574 NaN NaN 29.383 29.336 25.825
2020_06_01_15_41_Q-Exactive-HF-X-Orbitrap_6070 27.121 NaN NaN 27.968 26.707 31.958 NaN 26.219 NaN NaN ... 26.590 NaN 26.180 27.946 28.721 25.082 NaN 30.147 29.707 NaN
2020_06_02_09_41_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.989 25.120 26.944 NaN 33.220 27.455 28.759 NaN 27.160 ... 26.946 NaN NaN 28.098 29.425 NaN NaN 29.847 29.212 NaN

50 rows × 4444 columns

Validation data for early stopping (if specified)

Hide code cell source

splits.val_y
protein group STK4 CDK7 GNA11 MBNL1 HEXB ACTR5 DYNLL2 CDC2;CDK1 TXNL4A ITGA3 ... TANC1 MRPL21 BDH2 DCTD TIMM22 PRPSAP2 GCHFR MFN2 LAMTOR2 SEL1L
Sample ID
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN 26.996 NaN NaN NaN
2019_12_19_19_48_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 26.857 NaN NaN NaN NaN
2019_12_20_14_15_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019_12_27_12_29_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN 28.401 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019_12_29_15_06_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019_12_29_18_18_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_02_17_38_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_03_11_17_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_03_16_58_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN 26.939 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_03_20_10_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_04_04_23_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN 29.219 NaN NaN NaN 27.446 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_04_10_03_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_04_14_59_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN 29.962 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_06_20_17_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN 29.445 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_08_16_43_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_09_11_07_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_15_13_56_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_01_20_15_10_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN 29.791 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_02_05_20_55_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN 26.916 NaN NaN NaN NaN NaN NaN NaN
2020_02_10_15_41_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_02_11_10_35_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 25.622 NaN NaN NaN NaN NaN
2020_02_12_05_06_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN 27.145 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 26.979 NaN
2020_02_13_00_26_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 29.261 NaN NaN NaN NaN
2020_02_13_03_11_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN 27.963 NaN NaN NaN NaN NaN 30.115 NaN 27.568
2020_02_17_13_55_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_02_18_01_25_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN 31.345 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_02_18_18_55_Q-Exactive-HF-X-Orbitrap_6070 27.463 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_02_28_12_27_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN 25.191 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_03_01_23_00_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_03_06_16_22_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN 28.024 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_03_07_18_15_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN 28.856 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_03_11_11_25_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN 27.337 28.907 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_04_11_39_Q-Exactive-HF-X-Orbitrap_6070 24.646 NaN NaN 27.748 NaN NaN 23.521 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_12_15_13_Q-Exactive-HF-X-Orbitrap_6070 25.398 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 22.155 NaN NaN NaN NaN NaN NaN
2020_05_12_18_10_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN 24.794 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_12_21_07_Q-Exactive-HF-X-Orbitrap_6070 25.139 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_14_14_46_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_14_17_28_Q-Exactive-HF-X-Orbitrap_6070 NaN 25.654 NaN NaN 28.554 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_14_20_11_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_15_10_30_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_20_12_33_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_20_15_35_Q-Exactive-HF-X-Orbitrap_6070 NaN 24.790 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_22_14_57_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_22_17_43_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 24.003 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_26_14_20_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN 26.272 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_27_13_57_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN 30.326 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_05_28_04_06_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_06_01_10_22_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_06_01_15_41_Q-Exactive-HF-X-Orbitrap_6070 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2020_06_02_09_41_Q-Exactive-HF-X-Orbitrap_6070 27.082 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

50 rows × 3832 columns

Training and validation need the same shape:

Hide code cell source

if splits.val_y is not None:
    splits.val_y = pd.DataFrame(pd.NA, index=splits.train_X.index,
                                columns=splits.train_X.columns).fillna(splits.val_y)

    print(splits.train_X.shape, splits.val_y.shape)
(50, 4444) (50, 4444)

Select either DAE or VAE model by chance:

model_selected = random.choice(['DAE', 'VAE'])
print("Selected model by chance:", model_selected)
model = AETransformer(
    model=model_selected,
    hidden_layers=[512,],
    latent_dim=50,
    out_folder='runs/scikit_interface',
    batch_size=10,
)
Selected model by chance: DAE
model.fit(splits.train_X, splits.val_y,
          epochs_max=50,
          cuda=False)
epoch train_loss valid_loss time
0 38991.539062 2045.640015 00:00
1 38131.167969 2003.357178 00:00
2 36889.617188 1861.636841 00:00
3 35326.078125 1534.169434 00:00
4 32809.832031 1127.089478 00:00
5 30147.228516 979.766418 00:00
6 27577.263672 1021.880005 00:00
7 25907.076172 790.346558 00:00
8 23806.771484 688.902527 00:00
9 22162.546875 687.811462 00:00
10 21031.945312 636.412170 00:00
11 19734.253906 596.501099 00:00
12 18557.382812 595.442932 00:00
13 17730.019531 565.435913 00:00
14 16874.630859 573.291199 00:00
15 16555.041016 606.498962 00:00
16 15884.018555 568.575562 00:00
17 15180.555664 565.271118 00:00
18 14875.677734 566.152588 00:00
19 14475.685547 570.812866 00:00
20 14215.671875 587.210083 00:00
21 13966.970703 588.521423 00:00
22 13563.718750 586.511047 00:00
23 13415.487305 597.221924 00:00
24 13083.183594 591.206787 00:00
25 12736.083008 600.242554 00:00
26 12534.149414 588.870911 00:00
27 12250.750000 583.865479 00:00
28 11951.919922 577.741638 00:00
29 11716.186523 593.970337 00:00
30 11678.343750 587.240723 00:00
31 11538.288086 641.739014 00:00
32 11309.533203 604.926147 00:00
33 11048.233398 586.689636 00:00
34 10808.098633 570.499146 00:00
35 10645.281250 591.465576 00:00
36 10450.759766 624.176514 00:00
37 10175.568359 598.055725 00:00
38 10484.105469 579.860229 00:00
39 10235.385742 584.845642 00:00
40 10104.447266 585.721313 00:00
41 10309.944336 581.787170 00:00
42 10020.129883 583.552490 00:00
43 9911.010742 583.994019 00:00
44 9725.889648 582.994934 00:00
45 9597.641602 582.871155 00:00
46 9480.994141 582.141785 00:00
47 9503.937500 581.246033 00:00
48 9470.566406 579.983093 00:00
49 9270.898438 581.386780 00:00
pimmslearn.plotting - INFO     Saved Figures to runs/scikit_interface/dae_training
AETransformer(batch_size=10, hidden_layers=[512], latent_dim=50,
              model=<class 'pimmslearn.models.ae.Autoencoder'>,
              out_folder=Path('runs/scikit_interface'))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
../_images/7a765c0299003dadcffa571606017e29412937ada17039152e2f863f3a7110ea.png ../_images/5609f95b3c6e9744830bcc12f6a999cabd1455d9183af6ce29fd80e0702acc34.png

Impute missing values using transform method:

df_imputed = model.transform(splits.train_X).stack()
df_imputed
Sample ID                                       protein group   
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070  AAAS               28.349
                                                AACS               26.133
                                                AAMDC              24.834
                                                AAMP               26.777
                                                AAR2               27.248
                                                                    ...  
2020_06_02_09_41_Q-Exactive-HF-X-Orbitrap_6070  ZWILCH             24.200
                                                ZWINT              26.234
                                                ZYX                29.847
                                                hCG_2014768;TMA7   29.212
                                                pk;ZAK             23.735
Length: 222200, dtype: float64

Evaluate the model using the validation data:

Hide code cell source

if splits.val_y is not None:
    pred_val = splits.val_y.stack().to_frame('observed')
    pred_val[model_selected] = df_imputed
    val_metrics = pimmslearn.models.calculte_metrics(pred_val, 'observed')
    display(val_metrics)

    fig, ax = plt.subplots(figsize=(8, 2))

    ax, errors_binned = pimmslearn.plotting.errors.plot_errors_by_median(
        pred=pred_val,
        target_col='observed',
        feat_medians=splits.train_X.median(),
        ax=ax,
        metric_name='MAE',
        palette=color_model_mapping)
{'DAE': {'MSE': 0.5381126005976966,
  'MAE': 0.5013815849177772,
  'N': 9348,
  'prop': 1.0}}
/home/docs/checkouts/readthedocs.org/user_builds/pimms/envs/latest/lib/python3.10/site-packages/pimmslearn/plotting/errors.py:105: FutureWarning: 

The `errwidth` parameter is deprecated. And will be removed in v0.15.0. Pass `err_kws={'linewidth': 1.2}` instead.

  sns.barplot(
../_images/e06dc8eef85df434949716087a524027cbae70e80cbebb7f043158929b7f2ab3.png

replace predicted values with validation data values

Hide code cell source

splits.to_long_format()
df_imputed = df_imputed.replace(splits.val_y).replace(splits.test_y)
df_imputed
Sample ID                                       protein group   
2019_12_18_14_35_Q-Exactive-HF-X-Orbitrap_6070  AAAS               28.349
                                                AACS               26.133
                                                AAMDC              24.834
                                                AAMP               26.777
                                                AAR2               27.248
                                                                    ...  
2020_06_02_09_41_Q-Exactive-HF-X-Orbitrap_6070  ZWILCH             24.200
                                                ZWINT              26.234
                                                ZYX                29.847
                                                hCG_2014768;TMA7   29.212
                                                pk;ZAK             23.735
Length: 222200, dtype: float64

Plot the distribution of the imputed values vs the observed data:

Hide code cell source

observed = df_imputed.loc[df.index].squeeze()
imputed = df_imputed.loc[df_imputed.index.difference(df.index)].squeeze()

fig, axes = plt.subplots(2, figsize=(8, 4))

min_max = pimmslearn.plotting.data.get_min_max_iterable([observed, imputed])

label_template = '{method} (N={n:,d})'
ax, _ = pimmslearn.plotting.data.plot_histogram_intensities(
    observed,
    ax=axes[0],
    min_max=min_max,
    label=label_template.format(method='measured',
                                n=len(observed),
                                ),
    color='grey',
    alpha=1)
_ = ax.legend()
ax, _ = pimmslearn.plotting.data.plot_histogram_intensities(
    imputed,
    ax=axes[1],
    min_max=min_max,
    label=label_template.format(method=f'{model_selected} imputed',
                                n=len(imputed),
                                ),
    color=color_model_mapping[model_selected],
    alpha=1)
_ = ax.legend()
../_images/910a32807c4934a16c92e3e9800605af7ed9f89e4683d3b6a9d7c0df084a2eb7.png