SPH 247 Statistical Analysis of Laboratory Data
Two-Color Arrays Two-color arrays are designed to account for variability in slides and spots by using two samples on each slide, each labeled with a different dye. If a spot is too large, for example, both signals will be too big, and the difference or ratio will eliminate that source of variability May 14, 2010SPH 247 Statistical Analysis of Laboratory Data2
Dyes The most common dye sets are Cy3 (green) and Cy5 (red), which fluoresce at approximately 550 nm and 649 nm respectively (red light ~ 700 nm, green light ~ 550 nm) The dyes are excited with lasers at 532 nm (Cy3 green) and 635 nm (Cy5 red) The emissions are read via filters using a CCD device May 14, 2010SPH 247 Statistical Analysis of Laboratory Data3
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data4
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data5
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data6
File Format A slide scanned with Axon GenePix produces a file with extension.gpr that contains the results: This contains 29 rows of headers followed by 43 columns of data (in our example files) For full analysis one may also need a.gal file that describes the layout of the arrays May 14, 2010SPH 247 Statistical Analysis of Laboratory Data7
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data8 "Block" "Column" "Row" "Name" "ID" "X" "Y" "Dia." "F635 Median" "F635 Mean" "F635 SD" "B635 Median" "B635 Mean" "B635 SD" "% > B635+1SD" "% > B635+2SD" "F635 % Sat." "F532 Median" "F532 Mean" "F532 SD" "B532 Median" "B532 Mean" "B532 SD" "% > B532+1SD" "% > B532+2SD" "F532 % Sat." "Ratio of Medians (635/532)" "Ratio of Means (635/532)" "Median of Ratios (635/532)" "Mean of Ratios (635/532)" "Ratios SD (635/532)" "Rgn Ratio (635/532)" "Rgn R² (635/532)" "F Pixels" "B Pixels" "Sum of Medians" "Sum of Means" "Log Ratio (635/532)" "F635 Median - B635" "F532 Median - B532" "F635 Mean - B635" "F532 Mean - B532" "Flags"
Analysis Choices Mean or median foreground intensity Background corrected or not Log transform (base 2, e, or 10) or glog transform Log is compatible only with no background correction Glog is best with background correction May 14, 2010SPH 247 Statistical Analysis of Laboratory Data9
Array normalization Array normalization is meant to increase the precision of comparisons by adjusting for variations that cover entire arrays Without normalization, the analysis would be valid, but possibly less sensitive However, a poor normalization method will be worse than none at all. May 14, 2010SPH 247 Statistical Analysis of Laboratory Data10
Possible normalization methods We can equalize the mean or median intensity by adding or multiplying a correction term We can use different normalizations at different intensity levels (intensity-based normalization) for example by lowess or quantiles We can normalize for other things such as print tips May 14, 2010SPH 247 Statistical Analysis of Laboratory Data11
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data12 Group 1Group 2 Array 1Array 2Array 3Array 4 Gene Gene Gene Example for Normalization
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data13 > normex <- matrix(c(1100,110,80,900,95,65,425,85,55,550,110,80),ncol=4) > normex [,1] [,2] [,3] [,4] [1,] [2,] [3,] > group <- as.factor(c(1,1,2,2)) > anova(lm(normex[1,] ~ group)) Analysis of Variance Table Response: normex[1, ] Df Sum Sq Mean Sq F value Pr(>F) group * Residuals Signif. codes: 0 `***' `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data14 > anova(lm(normex[2,] ~ group)) Analysis of Variance Table Response: normex[2, ] Df Sum Sq Mean Sq F value Pr(>F) group Residuals > anova(lm(normex[3,] ~ group)) Analysis of Variance Table Response: normex[3, ] Df Sum Sq Mean Sq F value Pr(>F) group Residuals
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data15 Group 1Group 2 Array 1Array 2Array 3Array 4 Gene Gene Gene Additive Normalization by Means
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data16 > cmn <- apply(normex,2,mean) > cmn [1] > mn <- mean(cmn) > normex - rbind(cmn,cmn,cmn)+mn [,1] [,2] [,3] [,4] cmn cmn cmn > normex.1 <- normex - rbind(cmn,cmn,cmn)+mn
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data17 > anova(lm(normex.1[1,] ~ group)) Analysis of Variance Table Response: normex.1[1, ] Df Sum Sq Mean Sq F value Pr(>F) group * Residuals > anova(lm(normex.1[2,] ~ group)) Analysis of Variance Table Response: normex.1[2, ] Df Sum Sq Mean Sq F value Pr(>F) group * Residuals > anova(lm(normex.1[3,] ~ group)) Analysis of Variance Table Response: normex.1[3, ] Df Sum Sq Mean Sq F value Pr(>F) group * Residuals
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data18 Group 1Group 2 Array 1Array 2Array 3Array 4 Gene Gene Gene Multiplicative Normalization by Means
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data19 > normex*mn/rbind(cmn,cmn,cmn) [,1] [,2] [,3] [,4] cmn cmn cmn > normex.2 <- normex*mn/rbind(cmn,cmn,cmn) > anova(lm(normex.2[1,] ~ group)) Response: normex.2[1, ] Df Sum Sq Mean Sq F value Pr(>F) group ** Residuals > anova(lm(normex.2[2,] ~ group)) Response: normex.2[2, ] Df Sum Sq Mean Sq F value Pr(>F) group ** Residuals > anova(lm(normex.2[3,] ~ group)) Response: normex.2[3, ] Df Sum Sq Mean Sq F value Pr(>F) group * Residuals
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data20 Group 1Group 2 Array 1Array 2Array 3Array 4 Gene Gene 2100 Gene Multiplicative Normalization by Medians
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data21 > cmd <- apply(normex,2,median) > cmd [1] > normex.3 <- normex*md/rbind(cmd,cmd,cmd) > normex.3 [,1] [,2] [,3] [,4] cmd cmd cmd > anova(lm(normex.3[1,] ~ group)) Response: normex.3[1, ] Df Sum Sq Mean Sq F value Pr(>F) group ** Residuals > anova(lm(normex.3[2,] ~ group)) Response: normex.3[2, ] Df Sum Sq Mean Sq F value Pr(>F) group Residuals > anova(lm(normex.3[3,] ~ group)) Response: normex.3[3, ] Df Sum Sq Mean Sq F value Pr(>F) group Residuals
Intensity-based normalization Normalize by means, medians, etc., but do so only in groups of genes with similar expression levels. lowess is a procedure that produces a running estimate of the middle, like a robustified mean If we subtract the lowess of each array and add the average of the lowess’s, we get the lowess normalization May 14, 2010SPH 247 Statistical Analysis of Laboratory Data22
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data23 norm <- function(mat1) { mat2 <- as.matrix(mat1) p <- dim(mat2)[1] n <- dim(mat2)[2] cmean <- apply(mat2,2,mean) cmean <- cmean - mean(cmean) mnmat <- matrix(rep(cmean,p),byrow=T,ncol=n) return(mat2-mnmat) }
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data24 lnorm <- function(mat1,span=.1) { mat2 <- as.matrix(mat1) p <- dim(mat2)[1] n <- dim(mat2)[2] rmeans <- apply(mat2,1,mean) rranks <- rank(rmeans,ties.method="first") matsort <- mat2[order(rranks),] r0 <- 1:p lcol <- function(x) { lx <- lowess(r0,x,f=span)$y } lmeans <- apply(matsort,2,lcol) lgrand <- apply(lmeans,1,mean) lgrand <- matrix(rep(lgrand,n),byrow=F,ncol=n) matnorm0 <- matsort-lmeans+lgrand matnorm1 <- matnorm0[rranks,] return(matnorm1) }
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data25
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data26
May 14, 2010SPH 247 Statistical Analysis of Laboratory Data27