Question: Permutation Based Thresholds For Eqtl Analysis?
gravatar for Darren J. Fitzpatrick
9.1 years ago by
Ireland/ United Kingdom
Darren J. Fitzpatrick1.1k wrote:

I wish to determine a significance threshold for a small eQTL study.

I computed p-values for the observed data under the model,

Y ~ A

where Y is gene expression and A is the snp.

I then generated a 1000 permutations of Y and recomputed the p-values. I wish to use these permutations to calculate a cut-off but am not at all certain how to go about it.

Any suggestions?


p-value eqtl • 7.5k views
ADD COMMENTlink modified 5.8 years ago by dharl70 • written 9.1 years ago by Darren J. Fitzpatrick1.1k
gravatar for David Quigley
9.1 years ago by
David Quigley11k
San Francisco
David Quigley11k wrote:

The method I have used is:

  1. Calculate the single lowest P value for a given gene across all SNPs
  2. For X permutations, scramble genotypes and re-calculate lowest P value across all scrambled SNPs. Sort this list from low to high.
  3. For each gene, adjusted P value is set to the rank of observed in the permutation list divided by X
  4. Use adjusted P values as input to qvalue to estimate FDR for a given adjust P value cutoff.

This method was suggested by John Storey, author of (among other things) the qvalue package.

This gives you the estimated q value for accepting permutation P values as strong or stronger than a given cut-off and side-steps the issue of how to calculate multiple loci affecting the same gene.

ADD COMMENTlink written 9.1 years ago by David Quigley11k

What I always still wonder with this kind of FDR approach is that it sounds like you're very very tough on getting your Null distribution by always taking the most negative (as in worse for your FDR) from each permutation and using this in your ranking. But indeed this seems to be the standard way of doing it.

ADD REPLYlink written 8.2 years ago by Sander Timmer700

The first part of the procedure answers the question, "how likely is it I would see a statistic this strong or stronger by chance, given that I'm considering every SNP?". The second part answers the question, "If I did that process for 15,000 genes, what would be the false discovery rate for declaring a given P value significant?" I'm sure there are other statistically defensible methods one could devise, but a less conservative method would require clear justification.

ADD REPLYlink written 8.2 years ago by David Quigley11k

"<font size="2">For each gene, adjusted P value is set to the rank of observed in the permutation list divided by X"</font>…<font size="2"> rank of what observed? Do you mean the gene's rank in the p value-sorted permutation list?</font>

<font size="2">Also, if you run say, 10 permutations, then you have ten permutation listsso which adjusted P do you use? the average of all ten adjusted P values?</font>

ADD REPLYlink written 5.8 years ago by bmpbowen40

Let's assume you're using linear regression for your statistic. The observed value is the absolute value of the F statistic for your regression (or the corresponding P value, which costs extra time to calculate so I generally don't work it out until the end) calculated using the true, observed genotypes and gene expression. The permutation P values are any number of F statistics that I calculate after scrambling the relationship between genotypes and phenotypes. The F statistic chosen for a particular gene is the single most extreme (i.e. the strongest) value I saw by chance after considering all of the SNPs. If my observed F is 4, meaning that the strongest F statistic for a given gene-SNP pair in the real data was 4, and my 10 permutation F values are [7,5,3,2,1,1,1,1,1,1] then the rank of my observed F is 3 and the permutation P value is 3/10 = 0.3. Note that this rank is sorted from highest to lowest, and an observed F statistic of -9 would be stronger than a permutation F statistic of 7. If anything is still unclear I urge you to read (Churchill & Doerge Genetics 1994) which has a lucid and short explanation of the idea.

ADD REPLYlink written 5.8 years ago by David Quigley11k

Should this method work on cis-eqtls? Do you have a paper I can read for details of this methods?

ADD REPLYlink written 6.8 years ago by Zhenyu Zhang270

I've taken this approach in Quigley et al. Nature 2009 (PMID 19136944) Quigley et al. Genome Biology 2011 (PMID 21244661) I performed cis-only analysis in human data in Quigley et al. Molecular Oncology 2013 (PMID 24388359)

ADD REPLYlink written 6.8 years ago by David Quigley11k

I'm new to permutation analyses of eQTL data. When you suggest to scramble genotypes, is is sufficient to simply shuffle around the SNP labels, or would one have to actually shuffle around the genotypes? Meaning, if I have a matrix as follows:

                    SNP1 SNP2 SNP3

Person 1     AA     CT     GG

Person 2     AT     CC     GA

Would I shuffle like this:

                    SNP3 SNP1 SNP2

Person 1     AA     CT     GG

Person 2     AT     CC     GA

or like this:

                    SNP1 SNP2 SNP3

Person 1     AT     CC     GA

Person 2     AA     CT     GG

or both?

                    SNP3 SNP1 SNP2

Person 1     AT     CC     GA

Person 2     AA     CT     GG

ADD REPLYlink written 5.8 years ago by bmpbowen40

I scramble the indexes of the samples for the genotype matrix. This has the effect of scrambling the relationship between a particular person's true genotype and their gene expression, which I leave unchanged. Scrambling the genotype values would also work but for a human-sized (e.g. Affy 6.0) dataset is computationally inefficient.

ADD REPLYlink written 5.8 years ago by David Quigley11k

Thanks! I ended up scrambling the index of samples for the gene expression, which I think achieved the same effect--namely, mixing which individual's genotype points to which individual's gene expression. 

What if you have covariates that you need to include in your model? Would you scramble those as well? Or would you need your covariates to still "match" your permuted sample IDs? Or would you omit them altogether  because once you shuffle the expression ID and the genotype ID, the covariates won't match no matter what? Hope that makes sense.

ADD REPLYlink written 5.8 years ago by bmpbowen40

At this point I think you should ask your local statistician or try the question out at Cross Validated, the stats version of Biostar. I don't have a definitive answer for you, but my intuition suggests that it will important to consider whether you are 1) testing for interactions between genotype, covariates, and expression or 2) simply treating covariates as additive effects in the regression model. If you try cross-validated, I suggest you look first for discussion of non-parametric regression. I would say go straight to a textbook but I'm not expert enough to give you a good steer there, and nothing replaces a knowledgeable statistician.

ADD REPLYlink written 5.8 years ago by David Quigley11k
gravatar for dharl
5.8 years ago by
dharl70 wrote:


From what I know, if you have covariates in the model, you need to preserve the coupling between the covariates and the gene expression, so you just scramble the genotype matrix. Of course, in the end it depends on what you are trying to understand, but if the aim is to break the structure between the SNPs and the genes and covariates (which is what I think you are looking for if you are just treating the covariates as additive effects) , you would have to scramble the genotype only. 


Hope this helps. 


ADD COMMENTlink written 5.8 years ago by dharl70
Hi, I am a newbie in R programming and need to estimate permutation based threshold for miRNA expression analysis. I need to scramble the case-control status of dataset X affects generate 1000 permuted dataset and then run a glm model using another dataset (Y) where i have 300 miRNAs to find p-value for the model logit (case-control)=miRNA. The method described here sounds similar to what i want to do. Can anyone kindly share his/her R code with me please? Thank you
ADD REPLYlink written 4.8 years ago by mlrahman7820
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1444 users visited in the last hour