# A Two-Step Algorithm for Handling Block-Wise Missing Data in Multi-Omics
## 2 Methods
### Block-Wise Missingness and Profiles  
In numerous situations, entire blocks of data from specific sources are absent, which means that some samples are completely devoid of features from a particular source. Specifically, the matrix \(\mathbf{X}^{i}\) might have rows with completely missing data, and these absent rows can vary between sources \(i=1,\ldots,S\). To directly implement feature-level machine learning techniques, one could either exclude all samples from sources with missing data or fill in the missing values using the available data. However, both methods have notable drawbacks. The first approach can significantly decrease the size of the dataset, while the second is heavily dependent on prior knowledge of the reasons behind missing data. Both strategies risk suboptimal outcomes by not addressing the missing block structure in the data. To retain as much information as possible from the original data, one approach is to partition the dataset into multiple groups, called profiles, based on data availability. As described in [7; 8], the concept of a profile is introduced, which allows multiple models to be constructed using only the complete data within each profile. If we consider that each observation has at least one available data source among the \(S\) sources in the study, the number of possible missing block patterns is \(2^{S}-1\). Each observation is assigned to a profile based on the absence or presence of specific data sources. A binary indicator vector is created for each observation to enable the determination of the profiles, defined as follows:  
\[I[1,\ldots,S]=[I(1),\ldots,I(S)]\quad\text{ where }\quad I(i)=\left\{ \begin{array}{ll}1,& \text{$i$-th data source is available,}\\ 0,&\text{otherwise.}\end{array} \right.\]  
The data in the indicator vector can be fully expressed by a decimal integer, which will henceforth be called the _profile_. This profile is obtained by converting the binary vector into a binary number and then translating it into a decimal number. All such profiles are stored in a vector denoted as \(pf\), with a dimension denoted by \(|pf|\). To enhance clarity and facilitate understanding, consider the case with 3 data sources, \(S=3\). Table 1 shows the data availability options for a given sample and their profile number, where 0 indicates that the source is not available and 1 indicates that it is. A particular study will not necessarily present all possible profiles, depending on the experimental circumstances causing the missing data in blocks. Once we identify the availability of data sources using profiles, we arrange the entire dataset into complete data blocks to extract the maximum information from the available data. To achieve this, for a specific profile \(m\), we group all samples with profile \(m\) and those with complete data in all sources defined by profile \(m\), which means source-compatible profiles. As shown in Table 2, we can create numerous blocks with complete data for different sets of sources. For instance, samples in profile 6 are compatible with those in profile 7, allowing us to form a complete data block from sources 1 and 2. Using profiles, we can formulate the model (1) by \begin{table}
\begin{tabular}{c c c c} \hline
**Source 1** & **Source 2** & **Source 3** & **Profile**\({}^{1}\) \\ \hline
1 & 0 & 0 & 4 \\
1 & 0 & 1 & 5 \\
0 & 1 & 0 & 2 \\
0 & 1 & 1 & 3 \\
1 & 1 & 0 & 6 \\
1 & 1 & 1 & 7 \\ \hline \end{tabular} \({}^{\dagger}\) Profile = \(I(1)2^{2}+I(2)2^{1}+I(3)2^{0}\).  
\end{table} 
Table 1: List of profiles. (\(S=3\)). \begin{table}
\begin{tabular}{l l l} \hline
**Complete Data** & **Profile** & **Source-Compatible Profiles** \\ \hline source 1 & 4 & 5, 6, 7 \\ source 2 & 2 & 3, 6, 7 \\ source 3 & 1 & 3, 5, 7 \\ source 1 and 2 & 6 & 7 \\ source 1 and 3 & 5 & 7 \\ source 2 and 3 & 3 & 7 \\ source 1, 2 and 3 & 7 & - \\ \hline \end{tabular}
\end{table} 
Table 2: Complete data blocks. (\(S=3\)).