## 2 Materials and Methods
### Statistical Analysis  
The data from the different sources were pre-treated in different ways (Figure 1). The sensorial scores were only autoscaled before the integration approach. Meanwhile, the data from both analytical platforms were first cleaned, replacing features with non-detected single classes but detected in other classes by the minimum peak area reported in the data matrix divided by 2. Next, the data were peak filtered by removing rows (samples) or columns (features) with missing values \(\geq\)30% across all classes. To reduce the contribution of the experimental and analytical variability, the data were drift corrected by fitting a smoothed cubic spline onto the QC samples as described by [26]. The R function smooth.spline was used, and the smoothing parameter was set to 1 after its optimization using leave-one-out cross validation at different values of this hyperparameter. The drift correction was performed as followed (Equation (1)):  
\[X_{corrected}\ (i)=X_{original}\ (i)+mean(X_{QC})-f_{drift}(i) \tag{1}\]  
where \(i\) is the injection order of each sample, \(X_{corrected}\) is the corrected value of a feature, \(mean(X_{QC})\) is the mean value of all the QC samples used to fit the smoothed cubic function and \(f_{drift}\) is the smoothed cubic function. Subsequently, features with an RSD > 20 and RSD > 30 in QC samples for LC-MS and GC-MS data respectively were removed. Random forest imputation was applied to impute missing values using the R package missForest [27]. QC samples were not included in the data to ensure a proper imputation based on patterns of the real wine data. Next, data were probabilistic quotient normalised (PQN) using the median of the QC samples, since it is less sensitive to outliers than the mean [28]. Finally, GC-MS and LC-MS data were autoscaled. Throughout this pre-treatment, principal component analyses (PCA) including QCs were conducted to unravel the structure of the data and to detect systematic trends and errors. Univariate analyses were performed on the data without autoscaling. Normality and heteroscedasticity were checked with the [PERSON]'s and [PERSON]'s tests respectively, and the variables that failed the parametric assumptions were box-cox transformed. Two-way analysis of variance (ANOVA) and [PERSON]'s honestly significant difference (HSD) post-hoc tests were then applied to identify differences in the metabolites and sensory descriptors due to the factors studied. Partial least squares discriminant analysis (PLS-DA) was used for the selection of the most discriminative features (potential markers) and for classification tasks, which were further used for the biological interpretation. The optimization and validation of the PLS-DA models were based on a double cross-validation described by [29]. Briefly, the cross-validation consisted of two nested loops, referred to as inner and outer loops. In the former, the model was optimised using leave-one-out exhaustive cross-validation. In the latter, a 4-fold cross-validation made it possible to assess the performance of the final discriminant model. The optimization and validation of the models were based on the balanced error rate (BER) measured at the Mahalanobis distance. The significance of the PLS-DA models was obtained through the following equation (Equation (2)):  
\[p\text{-}value=I+(HP_{P}\leq HP)/N \tag{2}\]  
where \(HP\) is a hyperparameter: BER, number of misclassification (NMC) or the area under receiver operating characteristic curve (AUROC), and (\(HP_{P}\leq HP\)) is the number of elements in the H\({}_{0}\) distribution which are smaller or equal to the hyperparameter of the original data. H\({}_{0}\) distribution was generated by random permutation of sample labels. \(N=1000\) permutations were simulated, since this number was large enough to sample the distribution tails and attain a \(p\)-value up to 0.001. The BER, NMC and AUROC of the original data were calculated by averaging the values of each hyperparameter obtained from the sub-models fitted during the cross-validation.