Microarray analysis techniques