# NOT RUN {
## use built-in simulated data set
mydat<-ex0.dag.data[,c("b1","b2","g1","g2","p1","p2")];
## take a subset of cols
## setup distribution list for each node
mydists<-list(b1="binomial",
b2="binomial",
g1="gaussian",
g2="gaussian",
p1="poisson",
p2="poisson"
);
#use simple banlist with no constraints
ban<-matrix(c(
# 1 2 3 4 5 6
0,0,0,0,0,0, # 1
0,0,0,0,0,0, # 2
0,0,0,0,0,0, # 3
0,0,0,0,0,0, # 4
0,0,0,0,0,0, # 5
0,0,0,0,0,0 # 6
),byrow=TRUE,ncol=6);
colnames(ban)<-rownames(ban)<-names(mydat); #names must be set
ban["b1","b2"]<-1; # now ban arc from b2 to b1
retain<-matrix(c(
# 1 2 3 4 5 6
0,0,0,0,0,0, # 1
0,0,0,0,0,0, # 2
0,0,0,0,0,0, # 3
0,0,0,0,0,0, # 4
0,0,0,0,0,0, # 5
0,0,0,0,0,0 # 6
),byrow=TRUE,ncol=6);
colnames(retain)<-rownames(retain)<-names(mydat); #names must be set
retain["g1","g2"]<-1; # always retain arc from g2 to g1
# parent limits
max.par<-list("b1"=1,"b2"=1,"g1"=1,"g2"=0,"p1"=1,"p2"=2);
## now build cache
mycache<-buildscorecache(data.df=mydat,data.dists=mydists,
dag.banned=ban, dag.retained=retain,max.parents=max.par);
#now find the globally best DAG
mp.dag<-mostprobable(score.cache=mycache);
# get the corresponding best goodness of fit - network score
fitabn(dag.m=mp.dag,data.df=mydat,data.dists=mydists)$mlik;
## Second example ############
mydat<-ex1.dag.data;## this data comes with abn see ?ex1.dag.data
## setup distribution list for each node
mydists<-list(b1="binomial",
p1="poisson",
g1="gaussian",
b2="binomial",
p2="poisson",
b3="binomial",
g2="gaussian",
b4="binomial",
b5="binomial",
g3="gaussian"
);
#use simple banlist with no constraints
ban<-matrix(c(
# 1 2 3 4 5 6
0,0,0,0,0,0,0,0,0,0, # 1
0,0,0,0,0,0,0,0,0,0, # 2
0,0,0,0,0,0,0,0,0,0, # 3
0,0,0,0,0,0,0,0,0,0, # 4
0,0,0,0,0,0,0,0,0,0, # 5
0,0,0,0,0,0,0,0,0,0, # 6
0,0,0,0,0,0,0,0,0,0, # 7
0,0,0,0,0,0,0,0,0,0, # 8
0,0,0,0,0,0,0,0,0,0, # 9
0,0,0,0,0,0,0,0,0,0 # 10
),byrow=TRUE,ncol=10);
colnames(ban)<-rownames(ban)<-names(mydat); #names must be set
retain<-matrix(c(
# 1 2 3 4 5 6
0,0,0,0,0,0,0,0,0,0, # 1
0,0,0,0,0,0,0,0,0,0, # 2
0,0,0,0,0,0,0,0,0,0, # 3
0,0,0,0,0,0,0,0,0,0, # 4
0,0,0,0,0,0,0,0,0,0, # 5
0,0,0,0,0,0,0,0,0,0, # 6
0,0,0,0,0,0,0,0,0,0, # 7
0,0,0,0,0,0,0,0,0,0, # 8
0,0,0,0,0,0,0,0,0,0, # 9
0,0,0,0,0,0,0,0,0,0 # 10
),byrow=TRUE,ncol=10);
colnames(retain)<-rownames(retain)<-names(mydat); #names must be set
## parent limits
max.par<-list("b1"=4,"p1"=4,"g1"=4,"b2"=4,"p2"=4,"b3"=4,"g2"=4,"b4"=4,"b5"=4,"g3"=4);
## now build cache
mycache<-buildscorecache(data.df=mydat,data.dists=mydists,
dag.banned=ban, dag.retained=retain,max.parents=max.par);
#now find the globally best DAG
mp.dag<-mostprobable(score.cache=mycache);
fitabn(dag.m=mp.dag,data.df=mydat,data.dists=mydists)$mlik;
## plot the best model
myres<-fitabn(dag.m=mp.dag,data.df=mydat,data.dists=mydists,create.graph=TRUE);
plotabn(dag.m = mp.dag,data.dists = mydat,fitted.values.abn = myres)
## fit the known true DAG
true.dag<-ban;
true.dag["p2",c("b1","p1")]<-1;
true.dag["b3",c("b1","g1","b2")]<-1;
true.dag["g2",c("p1","g1","b2")]<-1;
true.dag["b4",c("g1","p2")]<-1;
true.dag["b5",c("g1","g2")]<-1;
true.dag["g3",c("g1","b2")]<-1;
fitabn(dag.m=true.dag,data.df=mydat,data.dists=mydists)$mlik;
#################################################################
## example 3 - models with random effects
#################################################################
mydat<-ex3.dag.data[,c(1:4,14)];
## this data comes with abn see ?ex3.dag.data
mydists<-list(b1="binomial",
b2="binomial",
b3="binomial",
b4="binomial"
);
max.par<-3;
mycache.c<-buildscorecache(data.df=mydat,data.dists=mydists,
group.var="group",cor.vars=c("b1","b2","b3","b4"),
## each node uses a random effect adjustment
max.parents=max.par);
## find the most probable DAG
mp.dag<-mostprobable(score.cache=mycache.c);
## get goodness of fit
fitabn(dag.m=mp.dag,data.df=mydat,data.dists=mydists,
group.var="group",cor.vars=c("b1","b2","b3","b4"))$mlik;
# }
Run the code above in your browser using DataLab