test_predict = model.predict(x_test)

        # Mean squared error
        mse.append(mean_squared_error(y_test, test_predict))
        # Mean absolute error
        mae.append(mean_absolute_error(y_test, test_predict))
        # Explained variance score
        evs.append(explained_variance_score(y_test, test_predict))
        # R^2 score
        r2s.append(r2_score(y_test, test_predict))
    return mse, mae, evs, r2s


# Simulate data
X, y, z, = simulate_confounded_data(link_type='direct_link',
                                    n_samples=1000,
                                    n_features=100)
print('Simulated data contains ', X.shape[0], ' - samples and ', X.shape[1],
      ' - features')

# Get the train and test data with Confound Isolation cross-validation method
x_test_cicv, x_train_cicv, y_test_cicv, y_train_cicv, _, _ = \
    confound_isolating_cv(X, y, z, random_seed=None, min_sample_size=None,
                          cv_folds=10, n_remove=None)

# Get the train and test data with 'out_of_sample' deconfounding
x_test_oos, x_train_oos, y_test_oos, y_train_oos, _, _ = \
    confound_regressout(X, y, z, type_deconfound='out_of_sample',
                        min_sample_size=None, cv_folds=10, n_remove=None)

# Get the train and test data with 'jointly' deconfounding
        model.fit(x_train, y_train)
        test_predict = model.predict(x_test)

        # Mean squared error
        mse.append(mean_squared_error(y_test, test_predict))
        # Mean absolute error
        mae.append(mean_absolute_error(y_test, test_predict))
        # Explained variance score
        evs.append(explained_variance_score(y_test, test_predict))
        # R^2 score
        r2s.append(r2_score(y_test, test_predict))
    return mse, mae, evs, r2s


# Simulate data
X_direct, y_direct, z_direct = simulate_confounded_data(
    link_type='direct_link', n_samples=100, n_features=1000)

X_weak, y_weak, z_weak = simulate_confounded_data(link_type='weak_link',
                                                  n_samples=100,
                                                  n_features=1000)

X_no, y_no, z_no = simulate_confounded_data(link_type='no_link',
                                            n_samples=100, n_features=1000)

print('Confound Isolation cross-validation method is processing.....')
x_test_direct, x_train_direct, y_test_direct, y_train_direct, _, _ = \
    confound_isolating_cv(X_direct, y_direct, z_direct, cv_folds=10)

x_test_weak, x_train_weak, y_test_weak, y_train_weak, _, _ = \
    confound_isolating_cv(X_weak, y_weak, z_weak, cv_folds=10)