I'm attempting to conduct an eQTL analysis. Broadly speaking, I'm attempting to use Matrix eQTL to perform permutation based tests, including inferred hidden PEER factors as covariates.
I've batch corrected the expression data using ComBat, and I've used PEER to generate the covariate matrix, however I can't use it with Matrix eQTL. PEER generates a matrix with dimensions [number of genes]x[number of factors], whereas Matrix eQTL is expecting one with dimensions [number of factors]x[number of samples]. How do I integrate the two packages?
1 answer
PEER generates multiple output data frames after:
PEER_update(model)
I'm assuming the matrix you're generating comes from:
PEER_getX(model)
If you want to combine PEER with MatrixEQTL, I would suggest using the "residual matrix" from:
PEER_getResiduals(model)
As your "gene" variable within:
Matrix_eQTL_main()
I've attach some code just to show you the basic work-flow:
model = PEER()
PEER_setNk(model,k)
PEER_setPhenoMean(model,as.matrix(expr_cov)) # Give PEER your expression data
PEER_setAdd_mean(model, TRUE)
PEER_setCovariates(model, as.matrix(covar4)) # PEER ask NxC matrix, where N=samples and C=covariates
PEER_setNmax_iterations(model, 100000)
PEER_update(model)
residuals = PEER_getResiduals(model) # convert to GxN
colnames(residuals) = colnames(expr_cov)
rownames(residuals) = rownames(expr_cov)
# add mean
residuals = residuals + apply(expr_cov, 2, mean)
# convert to SliceData format
genes = SlicedData$new();
genes$CreateFromMatrix(residuals); # using your residuals as expression input
rm(residuals, model)
# run eQTL with residuals
me = Matrix_eQTL_main(
snps = snps,
gene = genes,
cvrt = SlicedData$new(), # or cvrt_snp
output_file_name = "",
pvOutputThreshold = 0, # no tran
useModel = modelLINEAR,
errorCovariance = numeric(),
verbose = FALSE,
output_file_name.cis = paste0("step1.cis.eQTL.K",k,".xls"),
pvOutputThreshold.cis = 1e-5,
snpspos = snp_loc,
genepos = exons_8_25_2015,
cisDist = 1e6,
pvalue.hist = FALSE,
min.pv.by.genesnp = FALSE,
noFDRsaveMemory = TRUE);
Log in to answer this question.