Пример #1
0
 protected bool Equals(GroupComparisonSelector other)
 {
     return(Equals(Peptide, other.Peptide) &&
            Equals(Protein, other.Protein) &&
            Equals(LabelType, other.LabelType) &&
            MsLevel == other.MsLevel);
 }
Пример #2
0
 public GroupComparisonResult(GroupComparisonSelector selector, int replicateCount, LinearFitResult linearFitResult, IEnumerable <GroupComparer.RunAbundance> runAbundances)
 {
     Selector        = selector;
     LinearFitResult = linearFitResult;
     ReplicateCount  = replicateCount;
     RunAbundances   = ImmutableList.ValueOf(runAbundances);
 }
Пример #3
0
        private GroupComparisonResult CalculateFoldChangeUsingRegression(
            GroupComparisonSelector selector, List <RunAbundance> runAbundances)
        {
            var detailRows = new List <DataRowDetails>();

            GetDataRows(selector, detailRows);
            if (detailRows.Count == 0)
            {
                return(null);
            }
            runAbundances = runAbundances ?? new List <RunAbundance>();
            var foldChangeDataRows = detailRows
                                     .Where(row => !double.IsNaN(row.GetLog2Abundance()) && !double.IsInfinity(row.GetLog2Abundance()))
                                     .Select(row => new FoldChangeCalculator.DataRow
            {
                Abundance = row.GetLog2Abundance(),
                Control   = row.Control,
                Feature   = row.IdentityPath,
                Run       = row.ReplicateIndex,
                Subject   = row.BioReplicate,
            }).ToArray();
            FoldChangeDataSet runQuantificationDataSet = FoldChangeCalculator.MakeDataSet(foldChangeDataRows);
            var runNumberToReplicateIndex     = FoldChangeCalculator.GetUniqueList(foldChangeDataRows.Select(row => row.Run));
            var runQuantificationDesignMatrix = DesignMatrix.GetRunQuantificationDesignMatrix(runQuantificationDataSet);
            var quantifiedRuns = runQuantificationDesignMatrix.PerformLinearFit(_qrFactorizationCache);
            var subjects       = new List <int>();

            for (int run = 0; run < quantifiedRuns.Count; run++)
            {
                int iRow = runQuantificationDataSet.Runs.IndexOf(run);
                subjects.Add(runQuantificationDataSet.Subjects[iRow]);
                var replicateIndex   = runNumberToReplicateIndex[run];
                var replicateDetails = _replicateIndexes.First(kvp => kvp.Key == replicateIndex).Value;

                runAbundances.Add(new RunAbundance
                {
                    ReplicateIndex = replicateIndex,
                    Control        = replicateDetails.IsControl,
                    BioReplicate   = replicateDetails.BioReplicate,
                    Log2Abundance  = quantifiedRuns[run].EstimatedValue
                });
            }
            var abundances        = quantifiedRuns.Select(result => result.EstimatedValue).ToArray();
            var quantifiedDataSet = new FoldChangeDataSet(
                abundances,
                Enumerable.Repeat(0, quantifiedRuns.Count).ToArray(),
                Enumerable.Range(0, quantifiedRuns.Count).ToArray(),
                subjects,
                runQuantificationDataSet.SubjectControls);

            if (quantifiedDataSet.SubjectControls.Distinct().Count() < 2)
            {
                return(null);
            }

            var foldChangeResult = DesignMatrix.GetDesignMatrix(quantifiedDataSet, false).PerformLinearFit(_qrFactorizationCache).First();

            return(new GroupComparisonResult(selector, quantifiedRuns.Count, foldChangeResult, runAbundances));
        }
Пример #4
0
 public GroupComparisonResult CalculateFoldChange(GroupComparisonSelector selector, List <RunAbundance> runAbundances)
 {
     if (Equals(ComparisonDef.SummarizationMethod, SummarizationMethod.REGRESSION))
     {
         return(CalculateFoldChangeUsingRegression(selector, runAbundances));
     }
     return(CalculateFoldChangeByAveragingTechnicalReplicates(selector, runAbundances));
 }
Пример #5
0
 public GroupComparisonResult CalculateFoldChange(GroupComparisonSelector selector, List <RunAbundance> runAbundances)
 {
     if (Equals(ComparisonDef.SummarizationMethod, SummarizationMethod.REGRESSION))
     {
         return(CalculateFoldChangeUsingRegression(selector, runAbundances));
     }
     if (Equals(ComparisonDef.SummarizationMethod, SummarizationMethod.MEDIANPOLISH))
     {
         return(CalculateFoldChangeWithSummarization(selector, runAbundances, SummarizeDataRowsWithMedianPolish));
     }
     return(CalculateFoldChangeWithSummarization(selector, runAbundances, SummarizeDataRowsByAveraging));
 }
Пример #6
0
 private void GetDataRows(GroupComparisonSelector selector, IList <DataRowDetails> foldChangeDetails)
 {
     foreach (var replicateEntry in _replicateIndexes)
     {
         if (!replicateEntry.Value.IsControl &&
             !Equals(selector.GroupIdentifier, replicateEntry.Value.GroupIdentifier))
         {
             continue;
         }
         foreach (var peptide in selector.ListPeptides())
         {
             QuantificationSettings quantificationSettings = QuantificationSettings.DEFAULT
                                                             .ChangeNormalizationMethod(ComparisonDef.NormalizationMethod)
                                                             .ChangeMsLevel(selector.MsLevel);
             var peptideQuantifier = new PeptideQuantifier(GetNormalizationData, selector.Protein, peptide,
                                                           quantificationSettings)
             {
                 QValueCutoff = ComparisonDef.QValueCutoff
             };
             if (null != selector.LabelType)
             {
                 peptideQuantifier.MeasuredLabelTypes = ImmutableList.Singleton(selector.LabelType);
             }
             foreach (var quantityEntry in peptideQuantifier.GetTransitionIntensities(SrmDocument.Settings,
                                                                                      replicateEntry.Key, ComparisonDef.UseZeroForMissingPeaks))
             {
                 var dataRowDetails = new DataRowDetails
                 {
                     BioReplicate   = replicateEntry.Value.BioReplicate,
                     Control        = replicateEntry.Value.IsControl,
                     IdentityPath   = quantityEntry.Key,
                     Intensity      = Math.Max(1.0, quantityEntry.Value.Intensity),
                     Denominator    = Math.Max(1.0, quantityEntry.Value.Denominator),
                     ReplicateIndex = replicateEntry.Key,
                 };
                 foldChangeDetails.Add(dataRowDetails);
             }
         }
     }
 }
Пример #7
0
        private GroupComparisonResult CalculateFoldChangeWithSummarization(GroupComparisonSelector selector,
                                                                           List <RunAbundance> runAbundances, Func <IList <DataRowDetails>, IList <RunAbundance> > summarizationFunction)
        {
            var detailRows = new List <DataRowDetails>();

            GetDataRows(selector, detailRows);
            if (detailRows.Count == 0)
            {
                return(null);
            }
            var replicateRows = summarizationFunction(detailRows);

            if (replicateRows.Count == 0)
            {
                return(null);
            }
            if (null != runAbundances)
            {
                runAbundances.AddRange(replicateRows);
            }

            var summarizedRows = replicateRows;

            if (replicateRows.Any(row => null != row.BioReplicate))
            {
                var groupedByBioReplicate = replicateRows.ToLookup(
                    row => new KeyValuePair <string, bool>(row.BioReplicate, row.Control));
                summarizedRows = groupedByBioReplicate.Select(
                    grouping =>
                {
                    return(new RunAbundance()
                    {
                        BioReplicate = grouping.Key.Key,
                        Control = grouping.Key.Value,
                        ReplicateIndex = -1,
                        Log2Abundance = grouping.Average(row => row.Log2Abundance),
                    });
                }).ToList();
            }

            var quantifiedDataSet = new FoldChangeDataSet(
                summarizedRows.Select(row => row.Log2Abundance).ToArray(),
                Enumerable.Repeat(0, summarizedRows.Count).ToArray(),
                Enumerable.Range(0, summarizedRows.Count).ToArray(),
                Enumerable.Range(0, summarizedRows.Count).ToArray(),
                summarizedRows.Select(row => row.Control).ToArray());

            if (quantifiedDataSet.SubjectControls.Distinct().Count() < 2)
            {
                return(null);
            }
            var designMatrix     = DesignMatrix.GetDesignMatrix(quantifiedDataSet, false);
            var foldChangeResult = designMatrix.PerformLinearFit(_qrFactorizationCache).First();

            // Note that because the design matrix has only two columns, this is equivalent to a simple linear
            // regression
            //            var statsAbundances = new Util.Statistics(summarizedRows.Select(row => row.Log2Abundance));
            //            var statsXValues = new Util.Statistics(summarizedRows.Select(row => row.Control ? 0.0 : 1));
            //            var slope = statsAbundances.Slope(statsXValues);

            return(new GroupComparisonResult(selector, replicateRows.Count, foldChangeResult));
        }
Пример #8
0
 public GroupComparisonResult(GroupComparisonSelector selector, int replicateCount, LinearFitResult linearFitResult)
 {
     Selector = selector;
     LinearFitResult = linearFitResult;
     ReplicateCount = replicateCount;
 }
 protected bool Equals(GroupComparisonSelector other)
 {
     return Equals(Peptide, other.Peptide)
         && Equals(Protein, other.Protein)
         && Equals(LabelType, other.LabelType)
         && MsLevel == other.MsLevel;
 }
Пример #10
0
 public GroupComparisonResult(GroupComparisonSelector selector, int replicateCount, LinearFitResult linearFitResult)
 {
     Selector        = selector;
     LinearFitResult = linearFitResult;
     ReplicateCount  = replicateCount;
 }