### R code from vignette source 'fastJT-80303.Rnw'

###################################################
### code chunk number 1: setup1
###################################################
require(knitr)


###################################################
### code chunk number 2: setup 
###################################################
rm(list=ls())
stdt<-date()
set.seed(122333)
options(width = 75, stringsAsFactors=FALSE)
library(glmnet)
library(gdata)
library(GenABEL)
library(Rcpp)
library(fastJT)
library(ROCR)
library(caret)
library(pROC)
library(preprocessCore)
library(foreach)
library(doParallel)
library(randomForest)
cl<-makeCluster(32)
registerDoParallel(cl)
outdir <- "./"
set.seed(1123)


###################################################
### code chunk number 3: fastJT-80303.Rnw:90-100 
###################################################
plasfile <- "/data1/workspace/CALGB80303/GWAS/eQTL/dbGaP/C80303eQTL_proteinexpression_dbGaP.csv"
tools::md5sum(plasfile)
C80303eQTLdata <- read.csv(plasfile)
rownames(C80303eQTLdata) <- C80303eQTLdata[,1]
C80303eQTLdata <- C80303eQTLdata[,-1]
plasdat <- C80303eQTLdata
dim(plasdat)
markers <- colnames(plasdat)[1:31]
markers
plasdat$id <- rownames(plasdat)


###################################################
### code chunk number 4: fastJT-80303.Rnw:108-129 
###################################################
tpedfile="/data1/GWAS/80303/CALGB/80303/dbGaPsubmit/80303dbGaP.tped"
tfamfile="/data1/GWAS/80303/CALGB/80303/dbGaPsubmit/80303dbGaP.tfam"
phenofile="/data1/GWAS/80303/CALGB/80303/dbGaPsubmit/80303dbGaP_pheno.txt"
convert.snp.tped(tped=tpedfile,
                 tfam=tfamfile,
                 outfile="./80303dbGaP.raw",
                 bcast = 10000)
pheno <- read.table(phenofile, header=TRUE)
names(pheno)[1] <- "id"
write.table(pheno,file="./pheno.txt",quote=FALSE, row.names=FALSE)
df <- load.gwaa.data(phe="./pheno.txt",
                   gen="./80303dbGaP.raw",
                   force=T)
gwa294 <- df[df@phdata$GeneticEuropean==1,]
mc1 <- check.marker(gwa294,callrate=0.95,extr.call=0.95,p.level=1e-08,het.fdr=0,maf=0)
gwa294reduced <- gwa294[,!is.element(gwa294@gtdata@snpnames,mc1$nocall)]
mc2 <- check.marker(gwa294reduced,callrate=0.95,extr.call=0.95,p.level=1e-08,het.fdr=0,maf=0.01)
gwa294reduced <- gwa294reduced[,mc2$snpok]
gwa294reducedauto <- gwa294reduced[,!is.element(gwa294reduced@gtdata@chromosome,c("23","24","25","26"))]
gwa294DI <- gwa294reducedauto
gwa216 <- gwa294DI[gwa294DI@phdata$id %in% plasdat$id,]


###################################################
### code chunk number 5: fastJT-80303.Rnw:138-139 
###################################################
plasdatm <- plasdat[as.character(gwa216@phdata$id),1:31]
gwa216@gtdata@nids
gwa216@gtdata@nsnps


###################################################
### code chunk number 6: fastJT-80303.Rnw:150-156 
###################################################
bigY <- as.matrix(as.numeric(gwa216@gtdata))
bigX <- as.matrix(plasdatm[,c(27,2,11)])
jtAll <- list()
for(i in 1:nrow(bigX))
	jtAll[[i]] <- fastJT(bigX[-i,], bigY[-i, ], outTopN=10, numThreads = 10)$XIDs
save(jtAll, file="./jtAll.RData")


###################################################
### code chunk number 7: fastJT-80303.Rnw:165-187 
###################################################
bigXtmp <- as.matrix(plasdatm[,c(27,2,11)])
colnames(bigXtmp) <- c("VEGF-A", "VEGF-C", "MCP1")
save(bigXtmp,file="./bigXtmp.RData")
pdf("../Figure/Figure1.pdf", width=4,height=4)
par(mfrow=c(1, 3),
    mar=c(2.5, 1.85, 2, 0.85),
    mgp=c(1.0, 0.1, 0),
    oma=c(0,2, 0, 2), tck=-0.015,xpd=FALSE)
layout(matrix(1:3, 1, 3, byrow = TRUE),
       widths=rep(1,3), heights=c(1))
var <- log2(as.vector(bigXtmp))
mrk <- c( rep("VEGF-A", 1), 
          rep("VEGF-C", 1), 
          rep("MCP1",   1 ))
for( i in 1:3){
 boxplot(bigXtmp[,i],
  outpch=NA, horizontal=FALSE, main="",
  xlab=mrk[i], ylab="plasma level (pg/ml)")
 stripchart(bigXtmp[,i], pch=1, vertical=TRUE,
  method="jitter", jitter=0.075, add=TRUE, axes=FALSE)
}
dev.off()


###################################################
### code chunk number 8: fastJT-80303.Rnw:197-222 
###################################################
cvfit <- list()
bigX <- log2(as.matrix(plasdatm[,c(27,2,11)]))
for(j in 1:3){
	myDat <- list()	
	for(i in 1:216){
		bigXTrain <- bigX[-i,j]
	    featuresTrain <- bigY[-i, jtAll[[i]][1:10,j]]	
	    featuresTest <- bigY[i, jtAll[[i]][1:10,j]]	
        bigXTrain <- bigXTrain[complete.cases(featuresTrain)]
	    featuresTrain <- featuresTrain[complete.cases(featuresTrain),]
		myDat[[i]] <- list(bigXTrain, featuresTrain,featuresTest)
	}
    cvfitm <-foreach(i = 1:216, .combine=rbind, .packages='glmnet') %dopar% {
        cvfitModel <- cv.glmnet(myDat[[i]][[2]], myDat[[i]][[1]], family="gaussian", nfolds=10)
		if(sum(is.na(myDat[[i]][[3]])) == 0){
			x <- predict(cvfitModel, type="response", 
        	        newx = matrix(myDat[[i]][[3]], nrow=1), 
        	        s = min(cvfitModel$glmnet.fit$lambda))[1,1]
		}else{
			x<-NA}
		data.frame(x)	
	}
 	cvfit[[j]] <- list(cvfitm, bigX[,j])
}
save(cvfit, file="./cvfit.RData")


###################################################
### code chunk number 9: fastJT-80303.Rnw:231-257 
###################################################
pdf("../Figure/Figure7.pdf", width=8,height=2.5)
par(mfrow=c(1, 3),
    mar=c(2.5, 1.85, 2, 0.85),
    mgp=c(1.0, 0.1, 0),
    oma=c(0,2, 0, 2), tck=-0.015,xpd=FALSE)
layout(matrix(1:3, 1, 3, byrow = TRUE),
       widths=rep(1,3), heights=c(1))
markNum <- c(1,2,3)
markers <- c("VEGF-A", "VEGF-C","MCP1")
for(i in markNum)
{
    tmpdat <- data.frame(pdict=cvfit[[i]][[1]]$x, real=cvfit[[i]][[2]])
	tmpdat <- tmpdat[!is.na(tmpdat[,1]),]
	print(cor(tmpdat[,1], tmpdat[,2]))
    plot(tmpdat[,2], tmpdat[,1],
          ylab="Predicted log2(plasma level (pg/ml))",
          xlab="Observed log2(plasma level (pg/ml))",
          main= markers[j], col="blue",
          xlim=c( min(tmpdat[,c(1,2)]), max(tmpdat[,c(1,2)]) ),
          ylim=c( min(tmpdat[,c(1,2)]), max(tmpdat[,c(1,2)]) ))
    abline(0,1, col="black", lty=2, lwd=0.5)
}
dev.off()


###################################################
### code chunk number 9: fastJT-80303.Rnw:231-257 
###################################################
jtAll_allSample <- fastJT(bigX, bigY, outTopN=10, numThreads = 10)$XIDs
cvfit_allSample <- list()
markerNum <- c( 27, 2, 11)
Rsq <- NULL
for(j in 1:3){
    bigX1 <- log2(as.matrix(plasdatm[,markerNum[j]]))
    features <- bigY[, jtAll_allSample[,j]]
    bigX1 <- bigX1[complete.cases(features)]
    features <- features[complete.cases(features),]
    cvfitm <-foreach(i = 1:length(bigX1), .combine=rbind, .packages='glmnet') %dopar% {
        cvfitModel <- cv.glmnet(features[-i,], bigX1[-i], family="gaussian", nfolds=10)
        x <- predict(cvfitModel, type="response",
             newx = rbind(features[i,],features[i,]),
             s = min(cvfitModel$glmnet.fit$lambda))[1,1]
        data.frame(x)
    }
    cvfit_allSample[[j]] <- list(cvfitm, bigX1)
}
for(i in 1:3){
    tmpdat <- data.frame(pdict=cvfit_allSample[[i]][[1]]$x, real=cvfit_allSample[[i]][[2]])
    tmpdat <- tmpdat[!is.na(tmpdat[,1]),]
    Rsq[i] <- cor(tmpdat[,1], tmpdat[,2])^2
}
names(Rsq) <- markers
Rsq

