Realise outcomes for all causal types. Calculated by sequentially calculating endogenous nodes. If a do operator is applied to any node then it takes the given value and all its descendants are generated accordingly.
Arguments
- model
A
causal_model
. A model object generated bymake_model
.- dos
A named
list
. Do actions defining node values, e.g.,list(X = 0, M = 1)
.- node
A character. An optional quoted name of the node whose outcome should be revealed. If specified all values of parents need to be specified via
dos
.- add_rownames
logical indicating whether to add causal types as rownames to the output
Value
A data.frame
object of revealed data for each node (columns)
given causal / nodal type (rows).
Details
If a node is not specified all outcomes are realised for all possible causal types consistent with the model. If a node is specified then outcomes of Y are returned conditional on different values of parents, whether or not these values of the parents obtain given restrictions under the model.
realise_outcomes
starts off by creating types
(via get_nodal_types
). It then takes types of endogenous
and reveals their outcome based on the value that their parents took.
Exogenous nodes outcomes correspond to their type.
Examples
# \donttest{
make_model("X -> Y") |>
realise_outcomes()
#> X Y
#> 0.00 0 0
#> 1.00 1 0
#> 0.10 0 1
#> 1.10 1 0
#> 0.01 0 0
#> 1.01 1 1
#> 0.11 0 1
#> 1.11 1 1
make_model("X -> Y <- W") |>
set_restrictions(labels = list(X = "1", Y="0010"),
keep = TRUE) |>
realise_outcomes()
#> W X Y
#> 0.1.0010 0 1 1
#> 1.1.0010 1 1 0
make_model("X1->Y; X2->M; M->Y") |>
realise_outcomes(dos = list(X1 = 1, M = 0))
#> X1 X2 M Y
#> 0.0.00.0000 1 0 0 0
#> 1.0.00.0000 1 0 0 0
#> 0.1.00.0000 1 1 0 0
#> 1.1.00.0000 1 1 0 0
#> 0.0.10.0000 1 0 0 0
#> 1.0.10.0000 1 0 0 0
#> 0.1.10.0000 1 1 0 0
#> 1.1.10.0000 1 1 0 0
#> 0.0.01.0000 1 0 0 0
#> 1.0.01.0000 1 0 0 0
#> 0.1.01.0000 1 1 0 0
#> 1.1.01.0000 1 1 0 0
#> 0.0.11.0000 1 0 0 0
#> 1.0.11.0000 1 0 0 0
#> 0.1.11.0000 1 1 0 0
#> 1.1.11.0000 1 1 0 0
#> 0.0.00.1000 1 0 0 0
#> 1.0.00.1000 1 0 0 0
#> 0.1.00.1000 1 1 0 0
#> 1.1.00.1000 1 1 0 0
#> 0.0.10.1000 1 0 0 0
#> 1.0.10.1000 1 0 0 0
#> 0.1.10.1000 1 1 0 0
#> 1.1.10.1000 1 1 0 0
#> 0.0.01.1000 1 0 0 0
#> 1.0.01.1000 1 0 0 0
#> 0.1.01.1000 1 1 0 0
#> 1.1.01.1000 1 1 0 0
#> 0.0.11.1000 1 0 0 0
#> 1.0.11.1000 1 0 0 0
#> 0.1.11.1000 1 1 0 0
#> 1.1.11.1000 1 1 0 0
#> 0.0.00.0100 1 0 0 1
#> 1.0.00.0100 1 0 0 1
#> 0.1.00.0100 1 1 0 1
#> 1.1.00.0100 1 1 0 1
#> 0.0.10.0100 1 0 0 1
#> 1.0.10.0100 1 0 0 1
#> 0.1.10.0100 1 1 0 1
#> 1.1.10.0100 1 1 0 1
#> 0.0.01.0100 1 0 0 1
#> 1.0.01.0100 1 0 0 1
#> 0.1.01.0100 1 1 0 1
#> 1.1.01.0100 1 1 0 1
#> 0.0.11.0100 1 0 0 1
#> 1.0.11.0100 1 0 0 1
#> 0.1.11.0100 1 1 0 1
#> 1.1.11.0100 1 1 0 1
#> 0.0.00.1100 1 0 0 1
#> 1.0.00.1100 1 0 0 1
#> 0.1.00.1100 1 1 0 1
#> 1.1.00.1100 1 1 0 1
#> 0.0.10.1100 1 0 0 1
#> 1.0.10.1100 1 0 0 1
#> 0.1.10.1100 1 1 0 1
#> 1.1.10.1100 1 1 0 1
#> 0.0.01.1100 1 0 0 1
#> 1.0.01.1100 1 0 0 1
#> 0.1.01.1100 1 1 0 1
#> 1.1.01.1100 1 1 0 1
#> 0.0.11.1100 1 0 0 1
#> 1.0.11.1100 1 0 0 1
#> 0.1.11.1100 1 1 0 1
#> 1.1.11.1100 1 1 0 1
#> 0.0.00.0010 1 0 0 0
#> 1.0.00.0010 1 0 0 0
#> 0.1.00.0010 1 1 0 0
#> 1.1.00.0010 1 1 0 0
#> 0.0.10.0010 1 0 0 0
#> 1.0.10.0010 1 0 0 0
#> 0.1.10.0010 1 1 0 0
#> 1.1.10.0010 1 1 0 0
#> 0.0.01.0010 1 0 0 0
#> 1.0.01.0010 1 0 0 0
#> 0.1.01.0010 1 1 0 0
#> 1.1.01.0010 1 1 0 0
#> 0.0.11.0010 1 0 0 0
#> 1.0.11.0010 1 0 0 0
#> 0.1.11.0010 1 1 0 0
#> 1.1.11.0010 1 1 0 0
#> 0.0.00.1010 1 0 0 0
#> 1.0.00.1010 1 0 0 0
#> 0.1.00.1010 1 1 0 0
#> 1.1.00.1010 1 1 0 0
#> 0.0.10.1010 1 0 0 0
#> 1.0.10.1010 1 0 0 0
#> 0.1.10.1010 1 1 0 0
#> 1.1.10.1010 1 1 0 0
#> 0.0.01.1010 1 0 0 0
#> 1.0.01.1010 1 0 0 0
#> 0.1.01.1010 1 1 0 0
#> 1.1.01.1010 1 1 0 0
#> 0.0.11.1010 1 0 0 0
#> 1.0.11.1010 1 0 0 0
#> 0.1.11.1010 1 1 0 0
#> 1.1.11.1010 1 1 0 0
#> 0.0.00.0110 1 0 0 1
#> 1.0.00.0110 1 0 0 1
#> 0.1.00.0110 1 1 0 1
#> 1.1.00.0110 1 1 0 1
#> 0.0.10.0110 1 0 0 1
#> 1.0.10.0110 1 0 0 1
#> 0.1.10.0110 1 1 0 1
#> 1.1.10.0110 1 1 0 1
#> 0.0.01.0110 1 0 0 1
#> 1.0.01.0110 1 0 0 1
#> 0.1.01.0110 1 1 0 1
#> 1.1.01.0110 1 1 0 1
#> 0.0.11.0110 1 0 0 1
#> 1.0.11.0110 1 0 0 1
#> 0.1.11.0110 1 1 0 1
#> 1.1.11.0110 1 1 0 1
#> 0.0.00.1110 1 0 0 1
#> 1.0.00.1110 1 0 0 1
#> 0.1.00.1110 1 1 0 1
#> 1.1.00.1110 1 1 0 1
#> 0.0.10.1110 1 0 0 1
#> 1.0.10.1110 1 0 0 1
#> 0.1.10.1110 1 1 0 1
#> 1.1.10.1110 1 1 0 1
#> 0.0.01.1110 1 0 0 1
#> 1.0.01.1110 1 0 0 1
#> 0.1.01.1110 1 1 0 1
#> 1.1.01.1110 1 1 0 1
#> 0.0.11.1110 1 0 0 1
#> 1.0.11.1110 1 0 0 1
#> 0.1.11.1110 1 1 0 1
#> 1.1.11.1110 1 1 0 1
#> 0.0.00.0001 1 0 0 0
#> 1.0.00.0001 1 0 0 0
#> 0.1.00.0001 1 1 0 0
#> 1.1.00.0001 1 1 0 0
#> 0.0.10.0001 1 0 0 0
#> 1.0.10.0001 1 0 0 0
#> 0.1.10.0001 1 1 0 0
#> 1.1.10.0001 1 1 0 0
#> 0.0.01.0001 1 0 0 0
#> 1.0.01.0001 1 0 0 0
#> 0.1.01.0001 1 1 0 0
#> 1.1.01.0001 1 1 0 0
#> 0.0.11.0001 1 0 0 0
#> 1.0.11.0001 1 0 0 0
#> 0.1.11.0001 1 1 0 0
#> 1.1.11.0001 1 1 0 0
#> 0.0.00.1001 1 0 0 0
#> 1.0.00.1001 1 0 0 0
#> 0.1.00.1001 1 1 0 0
#> 1.1.00.1001 1 1 0 0
#> 0.0.10.1001 1 0 0 0
#> 1.0.10.1001 1 0 0 0
#> 0.1.10.1001 1 1 0 0
#> 1.1.10.1001 1 1 0 0
#> 0.0.01.1001 1 0 0 0
#> 1.0.01.1001 1 0 0 0
#> 0.1.01.1001 1 1 0 0
#> 1.1.01.1001 1 1 0 0
#> 0.0.11.1001 1 0 0 0
#> 1.0.11.1001 1 0 0 0
#> 0.1.11.1001 1 1 0 0
#> 1.1.11.1001 1 1 0 0
#> 0.0.00.0101 1 0 0 1
#> 1.0.00.0101 1 0 0 1
#> 0.1.00.0101 1 1 0 1
#> 1.1.00.0101 1 1 0 1
#> 0.0.10.0101 1 0 0 1
#> 1.0.10.0101 1 0 0 1
#> 0.1.10.0101 1 1 0 1
#> 1.1.10.0101 1 1 0 1
#> 0.0.01.0101 1 0 0 1
#> 1.0.01.0101 1 0 0 1
#> 0.1.01.0101 1 1 0 1
#> 1.1.01.0101 1 1 0 1
#> 0.0.11.0101 1 0 0 1
#> 1.0.11.0101 1 0 0 1
#> 0.1.11.0101 1 1 0 1
#> 1.1.11.0101 1 1 0 1
#> 0.0.00.1101 1 0 0 1
#> 1.0.00.1101 1 0 0 1
#> 0.1.00.1101 1 1 0 1
#> 1.1.00.1101 1 1 0 1
#> 0.0.10.1101 1 0 0 1
#> 1.0.10.1101 1 0 0 1
#> 0.1.10.1101 1 1 0 1
#> 1.1.10.1101 1 1 0 1
#> 0.0.01.1101 1 0 0 1
#> 1.0.01.1101 1 0 0 1
#> 0.1.01.1101 1 1 0 1
#> 1.1.01.1101 1 1 0 1
#> 0.0.11.1101 1 0 0 1
#> 1.0.11.1101 1 0 0 1
#> 0.1.11.1101 1 1 0 1
#> 1.1.11.1101 1 1 0 1
#> 0.0.00.0011 1 0 0 0
#> 1.0.00.0011 1 0 0 0
#> 0.1.00.0011 1 1 0 0
#> 1.1.00.0011 1 1 0 0
#> 0.0.10.0011 1 0 0 0
#> 1.0.10.0011 1 0 0 0
#> 0.1.10.0011 1 1 0 0
#> 1.1.10.0011 1 1 0 0
#> 0.0.01.0011 1 0 0 0
#> 1.0.01.0011 1 0 0 0
#> 0.1.01.0011 1 1 0 0
#> 1.1.01.0011 1 1 0 0
#> 0.0.11.0011 1 0 0 0
#> 1.0.11.0011 1 0 0 0
#> 0.1.11.0011 1 1 0 0
#> 1.1.11.0011 1 1 0 0
#> 0.0.00.1011 1 0 0 0
#> 1.0.00.1011 1 0 0 0
#> 0.1.00.1011 1 1 0 0
#> 1.1.00.1011 1 1 0 0
#> 0.0.10.1011 1 0 0 0
#> 1.0.10.1011 1 0 0 0
#> 0.1.10.1011 1 1 0 0
#> 1.1.10.1011 1 1 0 0
#> 0.0.01.1011 1 0 0 0
#> 1.0.01.1011 1 0 0 0
#> 0.1.01.1011 1 1 0 0
#> 1.1.01.1011 1 1 0 0
#> 0.0.11.1011 1 0 0 0
#> 1.0.11.1011 1 0 0 0
#> 0.1.11.1011 1 1 0 0
#> 1.1.11.1011 1 1 0 0
#> 0.0.00.0111 1 0 0 1
#> 1.0.00.0111 1 0 0 1
#> 0.1.00.0111 1 1 0 1
#> 1.1.00.0111 1 1 0 1
#> 0.0.10.0111 1 0 0 1
#> 1.0.10.0111 1 0 0 1
#> 0.1.10.0111 1 1 0 1
#> 1.1.10.0111 1 1 0 1
#> 0.0.01.0111 1 0 0 1
#> 1.0.01.0111 1 0 0 1
#> 0.1.01.0111 1 1 0 1
#> 1.1.01.0111 1 1 0 1
#> 0.0.11.0111 1 0 0 1
#> 1.0.11.0111 1 0 0 1
#> 0.1.11.0111 1 1 0 1
#> 1.1.11.0111 1 1 0 1
#> 0.0.00.1111 1 0 0 1
#> 1.0.00.1111 1 0 0 1
#> 0.1.00.1111 1 1 0 1
#> 1.1.00.1111 1 1 0 1
#> 0.0.10.1111 1 0 0 1
#> 1.0.10.1111 1 0 0 1
#> 0.1.10.1111 1 1 0 1
#> 1.1.10.1111 1 1 0 1
#> 0.0.01.1111 1 0 0 1
#> 1.0.01.1111 1 0 0 1
#> 0.1.01.1111 1 1 0 1
#> 1.1.01.1111 1 1 0 1
#> 0.0.11.1111 1 0 0 1
#> 1.0.11.1111 1 0 0 1
#> 0.1.11.1111 1 1 0 1
#> 1.1.11.1111 1 1 0 1
# With node specified
make_model("X->M->Y") |>
realise_outcomes(node = "Y")
#> M Y
#> 0.00 0 0
#> 1.00 1 0
#> 0.10 0 1
#> 1.10 1 0
#> 0.01 0 0
#> 1.01 1 1
#> 0.11 0 1
#> 1.11 1 1
make_model("X->M->Y") |>
realise_outcomes(dos = list(M = 1), node = "Y")
#> M Y
#> 1.00 1 0
#> 1.10 1 0
#> 1.01 1 1
#> 1.11 1 1
# }