# 
# REAL-WORLD STUDY PERFORMED IN 
#
# Nicole Krämer, Juliane Schäfer, Anne-Laure Boulesteix
# "Regularized estimation of large-scale gene association networks using graphical Gaussian models"
# BMC Bioinformatics, 2009

# authors of the script:
#
# Anne-Laure Boulesteix (boulesteix@ibe.med.uni-muenchen.de)
# Nicole Krämer         (nkraemer@cs.tu-berlin.de)

# NOTE
# In order to run the script, you need to download the WEST data, 
# e.g. from the web pages of Korbinian Strimmer's lab
# http://strimmerlab.org/data.html
#
# Furthermore, beware that the west data requires a lot of computation time.

# LICENCE
#
# This program is free software: you can redistribute it and/or modify it under the terms
# of the GNU General Public License as published by the Free Software Foundation, either
# version 3 of the License, or(at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.


#########################
####### Load data #######
#########################

### X1: Ecoli, Boulesteix and Strimmer (2005, TBMM) ###
library(plsgenomics)
data(Ecoli)
X1<-t(Ecoli$GEdata)
### X2: Ecoli, Schaefer & Strimmer (2005, SAGMB) ###
library("GeneNet")
data(ecoli)
X2<-ecoli
### X3: arabidopsis ###
library(GeneNet)
data(arth800)
X3<-arth800.expr
### X4: tcell.34 ###
library(GeneNet)
data(tcell)
X4<-tcell.34
### X5: tcell.10 ###
library(GeneNet)
data(tcell)
X5<-tcell.10
### X6: West data ###
load("westdataclean.rda")
X6<-west.mat.clean
rm(west.mat.clean)

############################
####### Analyse data #######
############################

library(parcor)  
k<-10 # cross-validation splits
cutoff.ggm=0.8
ncomp=20 # number of maximal components for pls, small values save time

### X1 ###
cat(paste("--------- data set X1 ---------\n"))
###    ###
# pls
pls.X1<-pls.net(X1,k=k,ncomp=ncomp)
perf.pls.X1<- performance.pcor(pls.X1$pcor,cutoff.ggm=cutoff.ggm)
# ridge
ridge.X1<-ridge.net(X1,k=k)
perf.ridge.X1<- performance.pcor(ridge.X1$pcor,,cutoff.ggm=cutoff.ggm)
# lasso
lasso.X1<-adalasso.net(X1,both=FALSE,k=k)$pcor.lasso
perf.lasso.X1<-performance.pcor(lasso.X1,fdr=FALSE)
# adaptive lasso
adalasso.X1<-adalasso.net(X1,both=TRUE,k=k)$pcor.adalasso
perf.adalasso.X1<-performance.pcor(adalasso.X1,fdr=FALSE)
# shrinkage
shrink.X1<-ggm.estimate.pcor(X1)
perf.shrink.X1<- performance.pcor(shrink.X1,cutoff.ggm=cutoff.ggm)

### X2 ###
cat(paste("--------- data set X2 ---------\n"))
###    ###
# pls
pls.X2<-pls.net(X2,k=9,ncomp=ncomp)
perf.pls.X2<- performance.pcor(pls.X2$pcor)
# ridge
ridge.X2<-ridge.net(X2,k=9)
perf.ridge.X2<- performance.pcor(ridge.X2$pcor)
# lasso
lasso.X2<-adalasso.net(X2,k=9,both=FALSE)$pcor.lasso
perf.lasso.X2<- performance.pcor(lasso.X2,fdr=FALSE)
# adaptive lasso
adalasso.X2<-adalasso.net(X2,k=4,both=TRUE)$pcor.adalasso
perf.adalasso.X2<- performance.pcor(adalasso.X2,fdr=FALSE)
# shrinkage
shrink.X2<-ggm.estimate.pcor(X2)
perf.shrink.X2<- performance.pcor(shrink.X2)

### X3 ###
cat(paste("--------- data set X3 ---------\n"))
###    ###
# pls
pls.X3<-pls.net(X3,k=k,ncomp=ncomp)
perf.pls.X3<- performance.pcor(pls.X3$pcor)
# ridge
ridge.X3<-ridge.net(X3,k=k)
perf.ridge.X3<- performance.pcor(ridge.X3$pcor)
# lasso
lasso.X3<-adalasso.net(X3,both=FALSE,k=k)$pcor.lasso
perf.lasso.X3<-performance.pcor(lasso.X3,fdr=FALSE)
# adaptive lasso
adalasso.X3<-adalasso.net(X3,both=TRUE,k=k)$pcor.adalasso
perf.adalasso.X3<-performance.pcor(adalasso.X3,fdr=FALSE)
# shrinkage
shrink.X3<-ggm.estimate.pcor(X3)
perf.shrink.X3<- performance.pcor(shrink.X3)

### X4 ###
cat(paste("--------- data set X4 ---------\n"))
###    ###
# pls
pls.X4<-pls.net(X4,k=k,ncomp=ncomp)
perf.pls.X4<- performance.pcor(pls.X4$pcor)
# ridge
ridge.X4<-ridge.net(X4,k=k)
perf.ridge.X4<- performance.pcor(ridge.X4$pcor)
# lasso
lasso.X4<-adalasso.net(X4,both=FALSE,k=k)$pcor.lasso
perf.lasso.X4<-performance.pcor(lasso.X4,fdr=FALSE)
# adaptive lasso
adalasso.X4<-adalasso.net(X4,both=TRUE,k=k)$pcor.adalasso
perf.adalasso.X4<-performance.pcor(adalasso.X4,fdr=FALSE)
# shrinkage
shrink.X4<-ggm.estimate.pcor(X4)
perf.shrink.X4<- performance.pcor(shrink.X4)

### X5 ###
cat(paste("--------- data set X5 ---------\n"))
###    ###
# pls
pls.X5<-pls.net(X5,k=k,ncomp=ncomp)
perf.pls.X5<- performance.pcor(pls.X5$pcor)
# ridge
ridge.X5<-ridge.net(X5,k=k)
perf.ridge.X5<- performance.pcor(ridge.X5$pcor)
# lasso
lasso.X5<-adalasso.net(X5,both=FALSE,k=k)$pcor.lasso
perf.lasso.X5<-performance.pcor(lasso.X5,fdr=FALSE)
# adaptive lasso
adalasso.X5<-adalasso.net(X5,both=TRUE,k=k)$pcor.adalasso
perf.adalasso.X5<-performance.pcor(adalasso.X5,fdr=FALSE)
# shrinkage
shrink.X5<-ggm.estimate.pcor(X5)
perf.shrink.X5<- performance.pcor(shrink.X5)
### X6 ###
cat(paste("--------- data set X6 ---------\n"))
###    ###
# pls
time.pls.X6<-system.time(pls.X6<-pls.net(X6,k=k,ncomp=ncomp))[3]
perf.pls.X6<- performance.pcor(pls.X6$pcor)
# ridge
time.ridge.X6<-system.time(ridge.X6<-ridge.net(X6,k=k))[3]
perf.ridge.X6<- performance.pcor(ridge.X6$pcor)
# lasso
time.lasso.X6<.system.time(lasso.X6<-adalasso.net(X6,both=FALSE,k=k)$pcor.lasso)[3]
perf.lasso.X6<-performance.pcor(lasso.X6,fdr=FALSE)
# adaptive lasso
time.adalasso.X6<-system.time(adalasso.X6<-adalasso.net(X6,both=TRUE,k=k)$pcor.adalasso)[3]
perf.adalasso.X6<-performance.pcor(adalasso.X6,fdr=FALSE)
# shrinkage
time.shrink.X6<-system.time(shrink.X6<-ggm.estimate.pcor(X6))[3]
perf.shrink.X6<- performance.pcor(shrink.X6)

#save.image(file="realdata.RData")
