<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/proteomics-data-analysis-2-3-data-filtering-and-missing-value-imputation/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://datascienceplus.com/proteomics-data-analysis-2-3-data-filtering-and-missing-value-imputation/"> R Programming – DataScience+</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>Welcome to <strong>Part Two</strong> of the three-part tutorial series on proteomics data analysis. The ultimate goal of this exercise is to identify proteins whose abundance is different bewteen the drug-resistant cells and the control. In other words, we are looking for a list of differentially regulated proteins that may shed light on how cells escape the cancer-killing action of a drug. In <a rel="nofollow" href="https://datascienceplus.com/proteomics-data-analysis-1-3-data-acquisition-and-cleaning/" target="_blank"><strong>Part One</strong></a>, I have demonstrated the steps to acquiring a proteomics data set and performing data pre-processing. We will pick up from the cleaned data set and confront the missing value problem in proteomics.</p>
<p>Again, the outline for this tutorial series is as follows:</p>
<ul>
<li>Data acquisition and cleaning</li>
<li><strong>Data filtering and missing value imputation</strong></li>
<li>Statistical testing and data interpretation</li>
</ul>
<h2>Missing Value Problem</h2>
<p>Although mass spectrometry-based proteomics has the advantage of detecting thousands of proteins from a single experiment, it faces certain challenges. One problem is the presence of missing values in proteomics data. To illustrate this, let's examine the first few rows of the log~2~-transformed and raw protein abundance values.</p>
<pre><code>library(dplyr)
head(select(df, Gene, starts_with(&quot;LOG2&quot;)))</code>
<em>## Gene LOG2.Parental_bR1 LOG2.Parental_bR2 LOG2.Parental_bR3
## 1 RBM47 -Inf -Inf 21.87748
## 2 ESYT2 25.6019 25.56180 25.68763
## 3 ILVBL -Inf 20.76474 -Inf
## 4 KLRG2 -Inf -Inf 22.31786
## 5 CNOT1 -Inf -Inf -Inf
## 6 PGP -Inf -Inf -Inf
## LOG2.Resistant_bR1 LOG2.Resistant_bR2 LOG2.Resistant_bR3
## 1 -Inf -Inf -Inf
## 2 -Inf -Inf -Inf
## 3 -Inf -Inf -Inf
## 4 -Inf -Inf -Inf
## 5 -Inf -Inf 29.14207
## 6 -Inf -Inf 22.46269
</em></pre>
<pre><code>head(select(df, Gene, starts_with(&quot;LFQ&quot;)))</code>
<em>## Gene LFQ.intensity.Parental_bR1 LFQ.intensity.Parental_bR2
## 1 RBM47 0 0
## 2 ESYT2 50926000 49530000
## 3 ILVBL 0 1781600
## 4 KLRG2 0 0
## 5 CNOT1 0 0
## 6 PGP 0 0
## LFQ.intensity.Parental_bR3 LFQ.intensity.Resistant_bR1
## 1 3852800 0
## 2 54044000 0
## 3 0 0
## 4 5228100 0
## 5 0 0
## 6 0 0
## LFQ.intensity.Resistant_bR2 LFQ.intensity.Resistant_bR3
## 1 0 0
## 2 0 0
## 3 0 0
## 4 0 0
## 5 0 592430000
## 6 0 5780200
</em></pre>
<p>It is hard to miss the <code>-Inf</code>, which represent protein intensity measurements of 0 in the raw data set. We consider these data points as missing values, or a lack of quantification in the indicated samples. This is a common issue in proteomics experiments, and it arises due to sample complexity and randomness (or stochasticity) in sampling.</p>
<p>For example, imagine pouring out a bowl of Lucky Charms cereal containing a thousand different marshmallows. Let's say there is only one coveted rainbow marshmallow for every one thousand pieces. The likelihood of your bowl containing the rare shape is disappointingly low. In our situation, there are approximately 20,000 proteins expressed in a given cell, and many in low quantities. Hence, the probability of consistently capturing proteins with low expression across all experiments is small.</p>
<h2>Data Filtering</h2>
<p>To overcome the missing value problem, we need to remove proteins that are sparsely quantified. The hypothesis is that a protein quantified in only one out of six samples offers insufficient grounds for comparison. In addition, the protein could have been mis-assigned.</p>
<p>One of many filtering schemes is to keep proteins that are quantified in at least two out of three replicates in one condition. To jog your memory, we have two conditions, one drug-resistant cell line and a control, and three replicates each. The significance of replicates will be discussed in <strong>Part 3</strong> of the tutorial. For now, we will briefly clean the data frame and apply filtering.</p>
<pre><code>## Data cleaning: Extract columns of interest
df = select(df, Protein, Gene, Protein.name, starts_with(&quot;LFQ&quot;), starts_with(&quot;LOG2&quot;))
glimpse(df)</code>
<em>## Observations: 1,747
## Variables: 15
## $ Protein </em></pre>