1. T1D results



2. More Simulation Results


a) 80% Credible Sets (8500 sims)



b) 95% Credible Sets (7000 sims)



c) 99% Credible Sets (7500 sims)

  • These all look promising. Seems that our correction method performs well at ‘pulling down’ the true coverage of the credible set, to what we desire (therefore adding uncertaincy - removing variants - why is our median nvar higher in the T1D data then?).

  • In particular, our method decreases the variability between the relative error of estimates.


3. Decreasing variability check


4. Two Causal Variants



5. Why Does it Work?


I consider five scenarios with 2 CVs:

  1. CVs in different blocks, both with low MAFs: maf1 = 0.1556467, maf2 = 0.1567046, LD = -0.0094

  2. CVs in different blocks, both with high MAFs: maf1 = 0.6034118, maf2 = 0.6085692, LD = -0.01213

  3. CVs in different blocks, one high and one low MAF: maf1 = 0.8501719 , maf2 = 0.13885216, LD = 0.00677

  4. CVs in same block, high mafs and high LD: maf1 = 0.8501719, maf2 = 0.8508331, LD = 0.993243

  5. CVs in same block, low mafs and low LD: maf1 = 0.1697964, maf2 = 0.1699286, LD = -0.2027

I run the script 100 times for each scenario and average the claimed and corrected coverage values.


We see that the correction factor works well when the 2 CVs come from different LD structures (the two squares in the correlation plot above). To investigate the role of the LD structure on our correction factor, I run two more simulations:

  1. Limit the whole simulation to just the first LD square. I.e. only consider the first 100 SNPs (rather than the full 200).

  1. Consider the full 200 SNP system above, but limit the CVs to come from the same LD structure (square 1 in the correlation plot).


Next Steps

List credsetmat(NumericMatrix pp, NumericVector iCV, double threshold) {
  int n=pp.nrow();
  int m=pp.ncol();
  NumericVector nvar(n); // number of variants in set
  NumericVector setsize(n); // size
  NumericVector covered(n); // start: iCV not in empty set
  // std::vector<int> V(n);
  for(int rep=0; rep<n; rep++) {
    int iiCV=iCV(rep)-1; // 0-based
    double csum=0.0;
    int i=0;
    NumericVector ppv = pp( rep, _);
    IntegerVector V=seq(0, m-1);
    // std::iota(V.begin(),V.end(),i++); //Initializing
    std::sort( V.begin(),V.end(), [&](int i,int j){
      return ppv(i)>ppv(j);
    }
    );
    // return V;
    for(i=0; i<m; i++) {
      csum+= ppv(V(i));
      if(iiCV==V(i))
        covered(rep)=1;
      if (csum > threshold) {
        nvar(rep)=i+1;
        setsize(rep)=csum;
        break;
      }
    }
  }
  return List::create(
    _["nvar"] = nvar,
    _["claimed"] = setsize,
    _["covered"] = covered
  );
}