Many modeling efforts require fitting several alternative models to the same data. You can fit many models at once provided that each model can be obtained by placing equality constraints on the parameters of one special, 'most general', model. The example shows how to do this. First the Path, Var and Cov methods are used to specify Jöreskog and Sörbom's (1989, p. 205) Model D for the data of Wheaton et al. (1977).
Sub Main()
Dim Sem As New AmosEngineLib.AmosEngine
Sem.TextOutput()
Sem.BeginGroup(AmosEngine.AmosDir & "Examples\English\UserGuide.xls", "Wheaton")
Sem.Path("anomia67", "67_alienation", 1)
Sem.Path("anomia67", "eps1", 1)
Sem.Path("powles67", "67_alienation")
Sem.Path("powles67", "eps2", 1)
Sem.Path("anomia71", "71_alienation", 1)
Sem.Path("anomia71", "eps3", 1)
Sem.Path("powles71", "71_alienation")
Sem.Path("powles71", "eps4", 1)
Sem.Path("67_alienation", "ses")
Sem.Path("67_alienation", "zeta1", 1)
Sem.Path("71_alienation", "67_alienation")
Sem.Path("71_alienation", "ses")
Sem.Path("71_alienation", "zeta2", 1)
Sem.Path("education", "ses", 1)
Sem.Path("education", "delta1", 1)
Sem.Path("SEI", "ses")
Sem.Path("SEI", "delta2", 1)
Sem.Var("eps1", "var1")
Sem.Var("eps2", "var2")
Sem.Var("eps3", "var3")
Sem.Var("eps4", "var4")
Sem.Cov("eps1", "eps3", "cov1")
Sem.Cov("eps2", "eps4", "cov2")
Sem.Model("B", "cov1 = cov2 = 0")
Sem.Model("C", "cov2 = 0")
Sem.Model("D")
Sem.Model("E", "var1 = var3")
Sem.Model("F", "var2 = var4")
Sem.Model("G", "E", "F")
Sem.Dispose()
End Sub
Six parameters are named - cov1, cov2, var1, var2, var3, var4. However, since no two parameters share the same name, the presence of the names does not place any constraints on the parameters. The purpose of the names is to allow the Model method to place constraints on the named parameters.
Jöreskog and Sörbom proposed other models besides Model D. All but one of them can be obtained by constraining Model D. For instance, their Model C is just like Model D, but with the parameter named cov2 (the covariance between eps2 and eps4) fixed at zero. Their Model B goes even further. It assumes that two parameters (cov1 and cov2) are zero. Amos analyzes Models B and C along with Model D if you add the following lines to the program.
Sem.Model("B", "cov1 = cov2 = 0")
Sem.Model("C", "cov2 = 0")
Sem.Model("D")
The first two lines are self-explanatory - they name and describe Models B and C. You may be surprised that the third line is necessary. It declares that there is a model called Model D that employs no additional constraints beyond those specified by the Path, Var and Cov methods. This line is necessary if you want to analyze Model D. The rule is that, if you use the Model method at all, Amos will only analyze models explicitly defined through use of the Model method. This convention allows you to specify an unidentified model, and then to supply enough constraints with each use of the Model method to identify the model. If you don't use the Model method at all, however, Amos will perform a single analysis — of the model as specified by the Path, Cov, Var, Mean, Intercept, AStructure and MStructure methods.
It may be possible to specify the same set of constraints in several equivalent ways. Model B, for instance, could have been specified in the following way.
Sem.Model("B", "cov1 = 0", "cov2 = 0")
Here is another, equivalent, variation.
Sem.Model("B", "cov1 = cov2", "cov2 = 0")
There is a shorthand for indicating that one model incorporates all of the constraints of another model. In the present example, Model B includes all of the constraints of Model C, as well as one additional constraint, so Model B could be specified this way:
Sem.Model("B", "C", "cov1 = 0")
The example specified three more models for the Wheaton data. Notice that var1 and var3 are unique variances associated with anomia measurements made in 1967 and 1971. It is a plausible hypothesis that the unique variance of anomia was the same in both years. This hypothesis was incorporated into a new model by adding this line to the program.
Sem.Model("E", "var1 = var3")
Similarly, since var2 and var4 are unique variances associated with powerlessness measurements made in 1967 and 1971, it is plausible to set up a model in which those two variances are required to be equal:
Sem.Model("F", "var2 = var4")
Finally, both of the models just described could be right. In other words, all of the 1971 parameter values could be the same as the corresponding 1967 values. The following model specification imposes both sets of constraints.
Sem.Model("G", "E", "F")