Browse code

updated copy number estimation for chromosome X

git-svn-id: file:///home/git/hedgehog.fhcrc.org/bioconductor/trunk/madman/Rpacks/crlmm@38549 bc3139a8-67e5-0310-9ffc-ced21a209358

Rob Scharp authored on 07/04/2009 13:12:50
Showing 3 changed files

... ...
@@ -115,3 +115,9 @@ is decoded and scanned
115 115
 * Added documentation for snprma.
116 116
 
117 117
 * Removed 'svn:executable' property of readIdatFiles.Rd
118
+
119
+2009-04-07 Rob Scharpf - committed versioni 1.0.75
120
+
121
+* modifications to chromosome X copy number estimation
122
+
123
+
... ...
@@ -1,7 +1,7 @@
1 1
 Package: crlmm
2 2
 Type: Package
3 3
 Title: Genotype Calling (CRLMM) and Copy Number Analysis tool for SNP 5.0 and 6.0 arrays.
4
-Version: 1.0.74
4
+Version: 1.0.75
5 5
 Date: 2008-12-30
6 6
 Author: Rafael A Irizarry, Benilton S Carvalho <bcarvalh@jhsph.edu>, Robert Scharpf <rscharpf@jhsph.edu>, Matt Ritchie <mritchie@wehi.EDU.AU>
7 7
 Maintainer: Benilton S Carvalho <bcarvalh@jhsph.edu>, Robert Scharpf <rscharpf@jhsph.edu>, Matt Ritchie <mritchie@wehi.EDU.AU>
... ...
@@ -48,9 +48,14 @@ nuphiAllele <- function(p, allele, Ystar, W, envir){
48 48
 	NOHET <- mean(Ns[, p, "AB"], na.rm=TRUE) < 0.05
49 49
 	if(missing(allele)) stop("must specify allele")
50 50
 	if(CHR == 23){
51
-		gender <- envir[["gender"]]
52
-		if(allele == "A") X <- cbind(1, c(1, 0, 2, 1, 0), c(0, 1, 0, 1, 2))
53
-		if(allele == "B") X <- cbind(1, c(0, 1, 0, 1, 2), c(1, 0, 2, 1, 0))			
51
+		##Design matrix for X chromosome depends on whether there was a sufficient number of AB genotypes
52
+		if(length(grep("AB", colnames(W))) > 0){
53
+			if(allele == "A") X <- cbind(1, c(1, 0, 2, 1, 0), c(0, 1, 0, 1, 2))
54
+			if(allele == "B") X <- cbind(1, c(0, 1, 0, 1, 2), c(1, 0, 2, 1, 0))
55
+		} else{
56
+			if(allele == "A") X <- cbind(1, c(1, 0, 2, 0), c(0, 1, 0, 2))
57
+			if(allele == "B") X <- cbind(1, c(0, 1, 0, 2), c(1, 0, 2, 0))
58
+		}
54 59
 	} else {##autosome
55 60
 		if(allele == "A") X <- cbind(1, 2:0) else X <- cbind(1, 0:2)
56 61
 		if(NOHET) X <- X[-2, ] ##more than 1 X chromosome, but all homozygous		
... ...
@@ -63,6 +68,7 @@ nuphiAllele <- function(p, allele, Ystar, W, envir){
63 68
 	##How to quickly generate Xstar, Xstar = diag(W) %*% X
64 69
 	Xstar <- apply(W, 1, generateX, X)
65 70
 	IXTX <- apply(Xstar, 2, generateIXTX, nrow=nrow(X))
71
+	##as.numeric(diag(W[1, ]) %*% X)
66 72
 	if(CHR == 23){
67 73
 		betahat <- matrix(NA, 3, nrow(Ystar))
68 74
 		ses <- matrix(NA, 3, nrow(Ystar))		
... ...
@@ -457,10 +463,11 @@ nonpolymorphic <- function(plateIndex, NP, envir, CONF.THR=0.99, DF.PRIOR=50, pk
457 463
 	##calculate R2
458 464
 	if(CHR == 23){
459 465
 		cnvs <- envir[["cnvs"]]
460
-                loader("cnProbes", pkgname, .crlmmPkgEnv)
466
+                loader("cnProbes.rda", pkgname=pkgname, envir=.crlmmPkgEnv)
461 467
                 cnProbes <- get("cnProbes", envir=.crlmmPkgEnv)
462 468
 ##		data(cnProbes, package="genomewidesnp6Crlmm")
463 469
 		cnProbes <- cnProbes[match(cnvs, rownames(cnProbes)), ]
470
+		##par:pseudo-autosomal regions
464 471
 		par <- cnProbes[, "position"] < 2709520 | (cnProbes[, "position"] > 154584237 & cnProbes[, "position"] < 154913754)
465 472
 		gender <- envir[["gender"]]
466 473
 		mu1 <- rowMedians(NP[, gender=="male"], na.rm=TRUE)
... ...
@@ -547,7 +554,6 @@ withinGenotypeMoments <- function(p, A, B, calls, conf, CONF.THR, DF.PRIOR, envi
547 554
 		GT.A[[j]] <- GT*A
548 555
 		GT.B[[j]] <- GT*B
549 556
 		index[[j]] <- which(Ns[, p, j+2] > 0)
550
-		
551 557
 		muA[, p, j+2] <- rowMedians(GT.A[[j]], na.rm=TRUE)
552 558
 		muB[, p, j+2] <- rowMedians(GT.B[[j]], na.rm=TRUE)
553 559
 		vA[, p, j+2] <- rowMAD(GT.A[[j]], na.rm=TRUE)
... ...
@@ -558,6 +564,8 @@ withinGenotypeMoments <- function(p, A, B, calls, conf, CONF.THR, DF.PRIOR, envi
558 564
 		DF[DF < 1] <- 1
559 565
 		v0A <- median(vA[, p, j+2], na.rm=TRUE)
560 566
 		v0B <- median(vB[, p, j+2], na.rm=TRUE)
567
+		if(v0A == 0) v0A <- NA
568
+		if(v0B == 0) v0B <- NA
561 569
 		vA[, p, j+2] <- (vA[, p, j+2]*DF + v0A*DF.PRIOR)/(DF.PRIOR+DF)
562 570
 		vA[is.na(vA[, p, j+2]), p, j+2] <- v0A
563 571
 		vB[, p, j+2] <- (vB[, p, j+2]*DF + v0B*DF.PRIOR)/(DF.PRIOR+DF)
... ...
@@ -844,25 +852,34 @@ coefs <- function(plateIndex, conf, MIN.OBS=3, envir, CONF.THR=0.99){
844 852
 		vB <- vB[, p, 3:5]
845 853
 		Np <- Ns[, p, 3:5]
846 854
 	} else {
847
-		IA <- muA[, p, ]
848
-		IB <- muB[, p, ]
849
-		vA <- vA[, p, ]
850
-		vB <- vB[, p, ]
851
-		Np <- Ns[, p, ]
855
+		NOHET <- is.na(median(vA[, p, "AB"], na.rm=TRUE))
856
+		if(NOHET){
857
+			IA <- muA[, p, -4]
858
+			IB <- muB[, p, -4]
859
+			vA <- vA[, p, -4]
860
+			vB <- vB[, p, -4]
861
+			Np <- Ns[, p, -4]
862
+		} else{
863
+			IA <- muA[, p, ]
864
+			IB <- muB[, p, ]
865
+			vA <- vA[, p, ]
866
+			vB <- vB[, p, ]
867
+			Np <- Ns[, p, ]
868
+		}
852 869
 	}
853
-	NOHET <- mean(Ns[, p, "AB"], na.rm=TRUE) < 0.05
854 870
 	##---------------------------------------------------------------------------
855 871
 	## Estimate nu and phi
856 872
 	##---------------------------------------------------------------------------
857
-	if(NOHET){
858
-		##only homozygous
859
-		Np <- Np[, -2]
860
-		Np[Np < 1] <- 1
861
-		IA <- IA[, c(1, 3)]
862
-		IB <- IB[, c(1, 3)]		
863
-		vA <- vA[, c(3,5)]
864
-		vB <- vB[, c(3,5)]
865
-	}else 	Np[Np < 1] <- 1
873
+##	if(NOHET){
874
+##		##only homozygous
875
+##		Np <- Np[, -2]
876
+##		Np[Np < 1] <- 1
877
+##		IA <- IA[, c(1, 3)]
878
+##		IB <- IB[, c(1, 3)]		
879
+##		vA <- vA[, c(3,5)]
880
+##		vB <- vB[, c(3,5)]
881
+##	}else 	Np[Np < 1] <- 1
882
+	Np[Np < 1] <- 1
866 883
 	vA2 <- vA^2/Np
867 884
 	vB2 <- vB^2/Np
868 885
 	wA <- sqrt(1/vA2)