Question: Figure out outliers in microarray dataset with z-scores
0
2.7 years ago by
arronar200
Austria
arronar200 wrote:

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.0k views
modified 2.6 years ago by theobroma221.1k • written 2.7 years ago by arronar200
1
2.6 years ago by
theobroma221.1k
theobroma221.1k wrote:

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.

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

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

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

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?

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

1

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
2.6 years ago by
theobroma221.1k
theobroma221.1k wrote:
``````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.

0
2.6 years ago by
theobroma221.1k
theobroma221.1k wrote:

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")
``````