#---------------------------------------------------------------------------------------
# EXAMPLE 1A: Define some bernoulli nodes, W1,W2,W3, treatment A, outcome Y and put
# together in a dag
#---------------------------------------------------------------------------------------
W1 <- node.depr(name="W1", distr="Bern", prob=plogis(-0.5), order=1)
W2 <- node.depr(name="W2", distr="Bern", prob=plogis(-0.5 + 0.5*W1), order=2)
A <- node.depr(name="A", distr="Bern", prob=plogis(-0.5 - 0.3*W1 - 0.3*W2), order=3)
Y <- node.depr(name="Y", distr="Bern", prob=plogis(-0.1 + 1.2*A + 0.3*W1 + 0.3*W2), order=4,
EFU=TRUE)
D1A <- set.DAG(c(W1,W2,A,Y))
#---------------------------------------------------------------------------------------
# EXAMPLE 1B: Same as 1a with alternative "+" syntax
#---------------------------------------------------------------------------------------
D1B <- DAG.empty()
D1B <- D1B + node.depr(name="W1", distr="Bern", prob=plogis(-0.5), order=1)
D1B <- D1B + node.depr(name="W2", distr="Bern", prob=plogis(-0.5 + 0.5*W1), order=2)
D1B <- D1B + node.depr(name="A", distr="Bern", prob=plogis(-0.5 - 0.3*W1 - 0.3*W2), order=3)
D1B <- D1B + node.depr(name="Y", distr="Bern", prob=plogis(-0.1 + 1.2*A + 0.3*W1 + 0.3*W2),
order=4, EFU=TRUE)
D1B <- set.DAG(D1B)
#---------------------------------------------------------------------------------------
# EXAMPLE 1C: Add a uniformly distributed node and redefine outcome Y as categorical
#---------------------------------------------------------------------------------------
D_unif <- DAG.empty()
D_unif <- D_unif + node.depr("W1", distr="Bern", prob=plogis(-0.5), order=1)
D_unif <- D_unif + node.depr("W2", distr="Bern", prob=plogis(-0.5 + 0.5*W1), order=2)
D_unif <- D_unif + node.depr("W3", distr="unif", unifmin=plogis(-0.5 + 0.7*W1 + 0.3*W2),
unifmax=10, order=3)
D_unif <- D_unif + node.depr("Anode", distr="Bern",
prob=plogis(-0.5 - 0.3*W1 - 0.3*W2 - 0.2*sin(W3)), order=4)
# Categorical syntax 1 (probabilities as values)
D_cat_1 <- D_unif + node.depr("Y", distr="cat", probs={0.3;0.4}, order=5)
# Categorical syntax 2 (probabilities as formulas)
D_cat_2 <- D_unif + node.depr("Y", distr="cat", probs={plogis(1.2*Anode + 0.5*cos(W3));
plogis(-0.5 + 0.7*W1)}, order=5)
D_cat_1 <- set.DAG(D_cat_1)
D_cat_2 <- set.DAG(D_cat_2)
#---------------------------------------------------------------------------------------
# EXAMPLE 2: Define time varying nodes for time points 0 to 16
#---------------------------------------------------------------------------------------
t_end <- 16
DTV <- DAG.empty()
DTV <- DTV + node.depr(name="L2", t=0, distr="Bern", prob=0.05, order=1)
DTV <- DTV + node.depr(name="L1", t=0, distr="Bern", prob=ifelse(L2[0]==1,0.5,0.1), order=2)
DTV <- DTV + node.depr(name="A1", t=0, distr="Bern",
prob= ifelse(L1[0]==1 & L2[0]==0, 0.5, ifelse(L1[0]==0 & L2[0]==0, 0.1,
ifelse(L1[0]==1 & L2[0]==1, 0.9, 0.5))), order=3)
DTV <- DTV + node.depr(name="A2", t=0, distr="Bern",
prob=0, order=4)
DTV <- DTV + node.depr(name="Y", t=0, distr="Bern",
prob=plogis(-6.5 + L1[0] + 4*L2[0] + 0.05*I(L2[0]==0)), order=5, EFU=TRUE)
# Distribution parameters (prob argument for bernoulli) are passed by delayed evaluation,
# to force immediate evaluation of t_end or any other variable inside the node formula
# put it inside .(), e.g., .(t_end):
DTV <- DTV + node.depr(name="L2", t=1:t_end, distr="Bern",
prob=ifelse(A1[t-1]==1, 0.1, ifelse(L2[t-1]==1, 0.9,
min(1,0.1 + t/.(t_end)))),
order=6+4*(0:(t_end-1)))
DTV <- DTV + node.depr(name="A1", t=1:t_end, distr="Bern",
prob=ifelse(A1[t-1]==1, 1, ifelse(L1[0]==1 & L2[0]==0, 0.3,
ifelse(L1[0]==0 & L2[0]==0, 0.1,
ifelse(L1[0]==1 & L2[0]==1, 0.7, 0.5)))),
order=7+4*(0:(t_end-1)))
DTV <- DTV + node.depr(name="A2", t=1:t_end, distr="Bern",
prob=0, order=8+4*(0:(t_end-1)))
DTV <- DTV + node.depr(name="Y", t=1:t_end, distr="Bern",
prob=plogis(-6.5 + L1[0] + 4*L2[t] + 0.05*sum(I(L2[0:t]==rep(0,(t+1))))),
order=9+4*(0:(t_end-1)), EFU=TRUE)
DTV <- set.DAG(DTV)
Run the code above in your browser using DataLab