drmSEM rejects cycles by default. drm_cycle() explicitly names the nodes of
a feedback motif — the canonical case being a reciprocal pair y1 ⇄ y2 — so
that those nodes are allowed to form a cycle while every undeclared cycle
stays a hard error. Pass declarations to drm_sem() / drm_psem() via their
feedback argument.
Details
Declaring a motif relaxes the topological-order requirement (the motif is
treated as a single layer) and makes basis_set() drop independence claims
among the motif's nodes. It does not make node-wise fitting consistent:
under simultaneity, ordinary maximum likelihood per node is biased, so
drm_sem() warns when a declared cycle is fitted naively. Consistent
estimation (instrumental variables / a joint likelihood) is an engine
capability; equilibrium effects from supplied coefficients are computed by
the fixed-point propagator. See docs/design/10-cyclic-feedback.md.
References
Bollen KA (1996). “An Alternative Two Stage Least Squares (2SLS) Estimator for Latent Variable Equations.” Psychometrika, 61(1), 109–121. doi:10.1007/BF02296961 .
Forré P, Mooij JM (2017). “Markov Properties for Graphical Models with Cycles and Latent Variables.” arXiv:1710.08775. doi:10.48550/arXiv.1710.08775 .
Bollen KA (1989). Structural Equations with Latent Variables. Wiley, New York.