Thing is, there are lots of ways to skin this particular rabbit. Fully general (and very easy) way is to use LambdaY, Beta & Phi, with these corresponding to F, A and S respectively. There are more efficient specifications with other bits of the model, e.g., when there are no feedback loops we could substitute Gamma for Beta. Or observed variable auto-correlational paths could be specified in Psi and the dimensions of LambdaY, Beta/Gamma and Phi reduced.

By having type='LISREL', manifests=list(enodgenous=, exogenous=), latents=list(enodgenous=, exogenous=), I believe path diagrams become isomorphic to the LISREL matrices directly. For example any two-headed arrow from a manifest exogenous variable to an endogenous manifest variable must go in the Theta-delta-epsilon matrix (TH). The trick is that with LISREL some paths are not allowed: e.g. a two-headed arrow between any latent variable and any manifest variable. These can be caught with informative error messages.

An alternative strategy is to take the path specification, turn it into RAM matrices, and then turn the RAM into LISREL (LY, BE, PH). I have favored the former option, but could be persuaded with good arguments.

Other than use of the 'remove' argument to mxModel(), this is implemented. If the remove argument is used for type='LISREL', a reasonable error message is thrown.

## Comments

## #1

Thing is, there are lots of ways to skin this particular rabbit. Fully general (and very easy) way is to use LambdaY, Beta & Phi, with these corresponding to F, A and S respectively. There are more efficient specifications with other bits of the model, e.g., when there are no feedback loops we could substitute Gamma for Beta. Or observed variable auto-correlational paths could be specified in Psi and the dimensions of LambdaY, Beta/Gamma and Phi reduced.

## #2

By having type='LISREL', manifests=list(enodgenous=, exogenous=), latents=list(enodgenous=, exogenous=), I believe path diagrams become isomorphic to the LISREL matrices directly. For example any two-headed arrow from a manifest exogenous variable to an endogenous manifest variable must go in the Theta-delta-epsilon matrix (TH). The trick is that with LISREL some paths are not allowed: e.g. a two-headed arrow between any latent variable and any manifest variable. These can be caught with informative error messages.

An alternative strategy is to take the path specification, turn it into RAM matrices, and then turn the RAM into LISREL (LY, BE, PH). I have favored the former option, but could be persuaded with good arguments.

## #3

Other than use of the 'remove' argument to mxModel(), this is implemented. If the remove argument is used for type='LISREL', a reasonable error message is thrown.