コード例 #1
0
  private void convertResultsToPValues(WorkPackage wp, Result dsResults) {
    // per probe, convert to p-value
    int numProbes = dsResults.zscores[0].length;

    boolean hasResults = false;

    for (int p = 0; p < numProbes; p++) {
      int nrDatasetsPassingQC = 0;
      int nrTotalSamples = 0;
      double zSum = 0;
      double betasum = 0;

      for (int d = 0; d < m_numDatasets; d++) {
        // TODO: check whether this actually returns the correct Z-scores: should the stored values
        // be flipped?
        double zscore = dsResults.zscores[d][p];
        double correlation = dsResults.correlations[d][p];

        Integer numSamples = dsResults.numSamples[d];
        if (!Double.isNaN(correlation)) {
          boolean flipalleles = wp.getFlipSNPAlleles()[d];
          if (m_useAbsoluteZScores) {
            zscore = Math.abs(zscore);
            dsResults.zscores[d][p] = Math.abs(zscore);
            dsResults.correlations[d][p] = Math.abs(correlation);
            if (!Double.isNaN(dsResults.beta[d][p])) {
              dsResults.beta[d][p] = Math.abs(dsResults.beta[d][p]);
            }
            wp.getFlipSNPAlleles()[d] = false;
          } else if (flipalleles) {
            zscore = -zscore;
            //                        dsResults.zscores[d][p] = zscore;
            //                        correlation = -correlation;
            //                        dsResults.correlations[d][p] = correlation;
          }
          nrDatasetsPassingQC++;

          double weight = Descriptives.getSqrt(numSamples);

          zSum += (zscore * weight);
          nrTotalSamples += numSamples;

          if (determinebeta) {
            if (flipalleles) {
              betasum += (-dsResults.beta[d][p] * numSamples);
              dsResults.beta[d][p] = -dsResults.beta[d][p];
            } else {
              betasum += (dsResults.beta[d][p] * numSamples);
            }
          }
        }
      }

      if (nrTotalSamples > 0
              && (testSNPsPresentInBothDatasets && nrDatasetsPassingQC == m_numDatasets)
          || (!testSNPsPresentInBothDatasets && nrDatasetsPassingQC > 0)) {
        testsPerformed++;
        hasResults = true;
        double sqrtSample = Descriptives.getSqrt(nrTotalSamples);
        double zScore = zSum / sqrtSample;
        double pValueOverall = Descriptives.convertZscoreToPvalue(zScore);
        dsResults.pvalues[p] = pValueOverall;
        dsResults.finalZScore[p] = zScore;

        // determine assessed allele....
        if (determinebeta) {
          betasum /= nrTotalSamples;
          double metase = 1 / Math.sqrt(nrTotalSamples);
          dsResults.finalBeta[p] = betasum;
          dsResults.finalBetaSe[p] = metase;
        }
      } else {
        dsResults.pvalues[p] = Double.NaN;
        dsResults.finalZScore[p] = Double.NaN;
      }
    }

    wp.setHasResults(hasResults);

    wp.setResult(dsResults);
  }