Figure out outliers in microarray dataset with z-scores
3
0
Entering edit mode
5.3 years ago
arronar ▴ 270

Hi.

I'am reading a book on DNA microarray data analysis and I'm trying to follow it analyzing a dataset of mine.

So until now I created boxplots, MAplots and correlation maps (using spearman's and concordance correlation coefficient methods) before and after the normalization (I used quantile normalization)

Now i would like to find out the outliers (some of them are shown in boxplots) and the book I'm reading suggests the resistant z-score

$z_{gi} = \frac{X_{gi} - Y_g}{s_g}\\\\ where\ Y_{g}\ is\ the\ median\ and\ s_g\ the\ MAD\ of\ each\ gene$

And we can call that value (X_gi) outlier if the z_gi is greater than 5 for example. Is such approach acceptable ? What do you think and what are you using in such cases ?

Any other idea on how to proceed on that step is welcomed.

Thank you.

microarray outliers z-score • 1.6k views
1
Entering edit mode
5.2 years ago
theobroma22 ★ 1.2k

If it's in a book I would think it's acceptable to use resistant z-score. Another way to view outliers is the Q-Q plot.

0
Entering edit mode

You have used Q-Q plots for microarray outliers ? I thought that Q-Q plots with such big data are not so useful. What about the PCA ? Have you ever used it as such tool ?

1
Entering edit mode

You can use PCA but it's generally not used to find outliers. And yes, I've used QQ for microarray analysis.

0
Entering edit mode

Could you please suggest me some resources (paper/tutorial/link) for the Q-Q technique that you used?

0
Entering edit mode

The QQ technique used is the typical QQ technique. You qqplot the residuals or the p-values of the linear model of the microarray analysis, like control v. Tmt or timecourse analysis. Then, those that off the line at either end are your outliers. Or do you mean R code?

0
Entering edit mode

Thanks. It would be helpful to see a code example too.

1
Entering edit mode

Ok, please give me some time to provide this to you. In the meantime I found this slide deck that also has R code in it. http://compdiag.molgen.mpg.de/ngfn/docs/2005/sep/beissbarth_cDNA_QCPP.pdf A QQ plot is also show. I'll send you a sample R code to do the qqplot soon. Thanks.

0
Entering edit mode
5.2 years ago
theobroma22 ★ 1.2k
set.seed(329)
ctl = matrix(rnorm(10000, mean=100, sd=1), ncol = 10, nrow = 1000))
set.seed(923)
tmt = matrix(rnorm(10000, mean=200, sd=1), ncol = 10, nrow = 1000))
Xmat = as.matrix(cbind(ctl, tmt))
colnames(Xmat) = c(1:20)
theData=data.frame(THIS=rep(c("Ctl","Tmt"), each=10))
pd=new("AnnotatedDataFrame", data=theData)
exp = ExpressionSet(Xmat, phenoData=pd)
exp

#ExpressionSet (storageMode: lockedEnvironment)
#assayData: 1000 features, 20 samples
#  element names: exprs
#protocolData: none
#phenoData
#  sampleNames: 1 2 ... 20 (20 total)
#  varLabels: THIS
#featureData: none
#experimentData: use 'experimentData(object)'
#Annotation:

design=model.matrix(~factor(exp[["THIS"]]))
fit = lmFit(exp, design)
fit = eBayes(fit)
qqt(fit$t, df=fit$df.prior+fit$df.residual, pch=16, cex=0.5) #A Student's t Q-Q plot abline(200,330)  This was of course done using dummy data so the QQ plot looks a bit silly. See the marray and limma bioconductor package (pg. 83) for more details. ADD COMMENT 0 Entering edit mode 5.2 years ago theobroma22 ★ 1.2k Principal Components Analysis dim(Xmat) X2mat = log(Xmat, 2) X2mat = scale(X2mat, center = TRUE) PCmat = t(X2mat) dim(PCmat) mat = data.frame(PCmat) mat$X1001 = rownames(PCmat)
dim(mat)
pc2v = prcomp(mat, center = FALSE, scale. = FALSE)
plot(pc2v, type="l")