#####################################################
# Simulate data
#####################################################
set.seed(sample(1:100,1))
G.arr <- c(0,20,20,20,20,20,20,20,20,20,20)
data("Beta.m")
######## generate data set for model fitting
simDataGen<-function(N, Beta, rho, s, G.arr, seed=1){
P<-nrow(Beta)
Q<-ncol(Beta)
gsum<-0
X.m<-NULL
set.seed(seed)
Sig<-matrix(0,P,P)
jstart <-1
for(g in 1:length(G.arr)-1){
X.m<-cbind(X.m, matrix(rnorm(N*G.arr[g+1]),N,G.arr[g+1], byrow=TRUE))
for(i in 2:P){ for(j in jstart: (i-1)){
Sig[i,j]<-rho^(abs(i-j))
Sig[j,i]<-Sig[i,j]
}}
jstart <- jstart + G.arr[g+1]
}
diag(Sig)<-1
R<-chol(Sig)
X.m<-X.m%*%R
SVsum <-0
for (q in 1:Q){SVsum <-SVsum+var(X.m %*% Beta[,q])}
sdr =sqrt(s*SVsum/Q)
E.m <- matrix(rnorm(N*Q,0,sdr),N, Q, byrow=TRUE)
Y.m<-X.m%*%Beta+E.m
return(list(X=X.m, Y=Y.m, E=E.m))
}
N <-150
rho=0.5;
s=4;
Data <- simDataGen(N, Beta.m,rho, s, G.arr, seed=sample(1:100,1))
X.m<-Data$X
Y.m<-Data$Y
############################################################
## fit model for one set of (lam1, lam.G) using example data
############################################################
P <- dim(Beta.m)[1]
Q <- dim(Beta.m)[2]
G <- 10
R <- 10
gmax <- 1
cmax <- 20
GarrStarts <- c(0,20,40,60,80,100,120,140,160,180)
GarrEnds <- c(19,39,59,79,99,119,139,159,179,199)
RarrStarts <- c(0,20,40,60,80,100,120,140,160,180)
RarrEnds <- c(19,39,59,79,99,119,139,159,179,199)
tmp <- FindingPQGrps(P, Q, G, R, gmax, GarrStarts, GarrEnds, RarrStarts, RarrEnds)
PQgrps <- tmp$PQgrps
tmp1 <- Cal_grpWTs(P, Q, G, R, gmax, PQgrps)
grpWTs <- tmp1$grpWTs
tmp2 <- FindingGRGrps(P, Q, G, R, cmax, GarrStarts, GarrEnds, RarrStarts, RarrEnds)
GRgrps <- tmp2$GRgrps
Pen_L <- matrix(rep(1,P*Q),P,Q, byrow=TRUE)
Pen_G <- matrix(rep(1,G*R),G,R, byrow=TRUE)
grp_Norm0 <- matrix(rep(0, G*R), nrow=G, byrow=TRUE)
MSGLassolam1 <- 1.6
MSGLassolamG <- 0.26
MSGLassolamG.m <- matrix(rep(MSGLassolamG, G*R),G,R,byrow=TRUE)
system.time(try <-MSGLasso(X.m, Y.m, grpWTs, Pen_L, Pen_G, PQgrps, GRgrps, grp_Norm0,
MSGLassolam1, MSGLassolamG.m, Beta0=NULL))
## Not run:
# ################################################
# ## visulizing model fitting results
# ################################################
#
# ########visulizing selection effect using heatmaps
#
# MYplotBW <- function(Beta){
# colorNP <- ceiling(abs(max(Beta)))+2
# ColorValueP <- colorRampPalette(c("gray50", "black"))(colorNP)
# colorNN <- ceiling(abs(min(Beta)))+2
# ColorValueN <- colorRampPalette(c("gray50", "white"))(colorNN)
# P <-nrow(Beta)
# Q <-ncol(Beta)
# Xlim <- c(0,2*(P+1))
# Ylim <- c(0,2*(Q+1))
# plot(0, type="n", xlab="", ylab="", xlim=Xlim, ylim=Ylim, cex.lab=1.0,
# bty="n", axes=FALSE)
# for (p in 1:P){
# for (q in 1:Q){
# k0 <- Beta[p,q]
# if(k0==0){
# rect(2*(P-p+1)-1,2*(Q-q+1)-1, 2*(P-p+1)+1, 2*(Q-q+1)+1, col="white", border=NA)
# }
# if(k0>0){
# k <- ceiling(k0)+1
# if(k>2) {k <- k+1}
# rect(2*(P-p+1)-1,2*(Q-q+1)-1, 2*(P-p+1)+1, 2*(Q-q+1)+1,
# col="black", border=NA)
# }
# if(k0<0){
# k <- ceiling(abs(k0))+1
# if(k>2) {k <- k+1}
# rect(2*(P-p+1)-1,2*(Q-q+1)-1, 2*(P-p+1)+1, 2*(Q-q+1)+1,
# col="black", border=NA)
# }
# }
# }
#
# rect(1,1,2*P, 2*Q, lty=2)
# }
#
# MYplotBW(try$Beta)
#
# rect(1,1,40,40, lty=2)
# rect(41,41,80,80, lty=2)
# rect(81,81,120,120, lty=2)
# rect(121,121,160,160, lty=2)
# rect(161,161,200,200, lty=2)
# rect(201,201,240,240, lty=2)
# rect(241,241,280,280, lty=2)
# rect(281,281,320,320, lty=2)
# rect(361,1,400,400, lty=2)
#
# ######## visulizing the true Beta matrix
#
# #X11()
#
# MYplotBW(Beta.m)
#
# rect(1,1,40,40, lty=2)
# rect(41,41,80,80, lty=2)
# rect(81,81,120,120, lty=2)
# rect(121,121,160,160, lty=2)
# rect(161,161,200,200, lty=2)
# rect(201,201,240,240, lty=2)
# rect(241,241,280,280, lty=2)
# rect(281,281,320,320, lty=2)
# rect(361,1,400,400, lty=2)
#
# ## End(Not run)
Run the code above in your browser using DataLab