Run the temporal FCI algorithm for causal discovery using causalDisco.
Usage
tfci(engine = c("causalDisco"), test, alpha = 0.05, ...)Details
For specific details on the supported tests, see CausalDiscoSearch. For additional parameters passed
via ..., see tfci_run().
Recommendation
While it is possible to call the function returned directly with a data frame,
we recommend using disco(). This provides a consistent interface and handles knowledge
integration.
Value
A function that takes a single argument data (a data frame). When called,
this function returns a list containing:
knowledgeAKnowledgeobject with the background knowledge used in the causal discovery algorithm. Seeknowledge()for how to construct it.caugiAcaugi::caugiobject representing the learned causal graph. This graph is a PAG (Partial Ancestral Graph), but since PAGs are not yet natively supported in caugi, it is currently stored with classUNKNOWN.
See also
Other causal discovery algorithms:
boss(),
boss_fci(),
fci(),
ges(),
gfci(),
grasp(),
grasp_fci(),
gs(),
iamb-family,
pc(),
rfci(),
sp_fci(),
tges(),
tpc()
Examples
data(tpc_example)
kn <- knowledge(
tpc_example,
tier(
child ~ tidyselect::starts_with("child"),
youth ~ tidyselect::starts_with("youth"),
oldage ~ tidyselect::starts_with("oldage")
)
)
# Recommended path using disco()
my_tfci <- tfci(engine = "causalDisco", test = "fisher_z", alpha = 0.05)
disco(tpc_example, my_tfci, knowledge = kn)
#> <Disco PAG: 6 nodes | 6 edges | Knowledge: 3 tiers>
#> Learned graph:
#> nodes: child_x2, child_x1, youth_x4, youth_x3, oldage_x6, oldage_x5
#> edges: child_x2o-ochild_x1, child_x2o->oldage_x5, child_x2o->youth_x4
#> oldage_x5-->oldage_x6, youth_x3o->oldage_x5, youth_x4-->oldage_x6
#> Knowledge:
#> tier(child): child_x1, child_x2
#> tier(youth): youth_x3, youth_x4
#> tier(oldage): oldage_x5, oldage_x6
# or using my_tfci directly
my_tfci <- my_tfci |> set_knowledge(kn)
my_tfci(tpc_example)
#> <Disco UNKNOWN: 6 nodes | 6 edges | Knowledge: 3 tiers>
#> Learned graph:
#> nodes: child_x2, child_x1, youth_x4, youth_x3, oldage_x6, oldage_x5
#> edges: child_x2o-ochild_x1, child_x2o->oldage_x5, child_x2o->youth_x4
#> oldage_x5-->oldage_x6, youth_x3o->oldage_x5, youth_x4-->oldage_x6
#> Knowledge:
#> tier(child): child_x1, child_x2
#> tier(youth): youth_x3, youth_x4
#> tier(oldage): oldage_x5, oldage_x6
# Also possible: using tfci_run()
tfci_run(tpc_example, test = cor_test, knowledge = kn)
#> <Disco UNKNOWN: 6 nodes | 6 edges | Knowledge: 3 tiers>
#> Learned graph:
#> nodes: child_x2, child_x1, youth_x4, youth_x3, oldage_x6, oldage_x5
#> edges: child_x2o-ochild_x1, child_x2o->oldage_x5, child_x2o->youth_x4
#> oldage_x5-->oldage_x6, youth_x3o->oldage_x5, youth_x4-->oldage_x6
#> Knowledge:
#> tier(child): child_x1, child_x2
#> tier(youth): youth_x3, youth_x4
#> tier(oldage): oldage_x5, oldage_x6
