Description Usage Arguments Details Value Author(s) See Also Examples
Create the RAM specification of a structural equation model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | specifyModel(file="", exog.variances=FALSE, endog.variances=TRUE, covs,
suffix="", quiet=FALSE)
specifyEquations(file="", ...)
cfa(file="", covs=paste(factors, collapse=","), reference.indicators=FALSE, ...)
multigroupModel(..., groups=names(models), allEqual=FALSE)
classifyVariables(model)
removeRedundantPaths(model, warn=TRUE)
## S3 method for class 'semmod'
combineModels(..., warn=TRUE)
## S3 method for class 'semmod'
update(object, file = "", ...)
## S3 method for class 'semmod'
edit(name, ...)
## S3 method for class 'semmod'
print(x, ...)
## S3 method for class 'semmodList'
print(x, ...)
|
file |
The (quoted) file from which to read the model specification,
including the path to the file if it is not in the current directory. If
|
exog.variances |
If |
endog.variances |
If |
covs |
optional: a character vector of one or more elements, with each element
giving a string of variable names, separated by commas. Variances and covariances
among all variables in each such string are added to the model. For confirmatory
factor analysis models specified via |
suffix |
a character string (defaulting to an empty string) to be appended to each parameter name; this can be convenient for specifying multiple-group models. |
reference.indicators |
if |
quiet |
if |
x, model, object, name |
An object of class |
warn |
print a warning if redundant paths are detected. |
... |
For |
groups |
a character vector of names for the groups in a multigroup model; taken by default from
the names of the |
allEqual |
if |
The principal functions for model specification are specifyModel
,
to specify a model in RAM (path) format via single- and double-headed arrows;
specifyEquations
, to specify a model in equation format, which is then
translated by the function into RAM format; and cfa
, for compact
specification of simple confirmatory factor analysis models.
specifyModel
:
Each line of the RAM specification for specifyModel
consists of three (unquoted) entries,
separated by commas:
This is a simple formula, of the form
A -> B
or, equivalently, B <- A
for a regression
coefficient (i.e., a single-headed or directional arrow);
A <-> A
for a variance or A <-> B
for a covariance
(i.e., a double-headed or bidirectional arrow). Here, A
and
B
are variable names in the model. If a name does not correspond
to an observed variable, then it is assumed to be a latent variable.
Spaces can appear freely in an arrow specification, and
there can be any number of hyphens in the arrows, including zero: Thus,
e.g., A->B
, A --> B
, and A>B
are all legitimate
and equivalent.
The name of the regression coefficient, variance,
or covariance specified by the arrow. Assigning the same name to two or
more arrows results in an equality constraint. Specifying the parameter name
as NA
produces a fixed parameter.
start value for a free parameter or value of a fixed parameter.
If given as NA
(or simply omitted), sem
will compute the start value.
Lines may end in a comment following \#
.
specifyEquations
:
For specifyEquations
, each input line is either a regression equation or the specification
of a variance or covariance. Regression equations are of the form
y = par1*x1 + par2*x2 + ... + park*xk
where y
and the x
s are variables in the model (either observed or latent),
and the par
s are parameters. If a parameter is given as a numeric value (e.g.,
1
) then it is treated as fixed. Note that no “error” variable is included in
the equation; “error variances” are specified via either the covs
argument,
via V(y) = par
(see immediately below), or are added automatically to the model
when, as by default, endog.variances=TRUE
.
Variances are specified in the form V(var) = par
and covariances in the form
C(var1, var2) = par
, where the var
s are variables (observed or unobserved) in
the model. The symbols V
and C
may be in either lower- or upper-case. If par
is a numeric value (e.g., 1
) then it is treated as fixed. In conformity with the RAM model,
a variance or covariance for an endogenous variable in the model is an “error” variance or
covariance.
To set a start value for a free parameter, enclose the numeric start value in parentheses after the
parameter name, as parameter(value)
.
cfa
:
For cfa
, each input line includes the names of the variables, separated by commas,
that load on the corresponding factor; the name of the factor is given optionally at the beginning
of the line, followed by a colon. If necessary, the variables that load on a factor may be continued
across two or more input lines; in this case, each such line but the last must end in a comma. A
variable may load on more than one factor (as long as the resulting model is identified, of course),
but each factor may appear in only one input line (or set of input lines, if the variable list
is continued onto the next line). If the argument reference.indicators=FALSE
, the default,
cfa
will fix the variance of each factor to 1, and by
default include covariances (i.e., correlations) among all pairs of factors. Alternatively,
if reference.indicators=TRUE
, then the factor variances are free parameters to be estimated
from the data, and the first loading for each factor is set to 1 to identify the model. These two
approaches produce equivalent models, with the same fit to the data, but alternative parametrizations.
Specifying the argument covs=NULL
implicitly fixes the factor intercorrelations to 0.
See sem
and the examples for further details on model specification.
Other Functions:
classifyVariables
classifies the variables in a model as endogenous or exogenous.
combineModels
and removeRedundantPaths
take semmod
objects as arguments and do what their names imply.
The file
input argument to the update
method for semmod
objects, which by default comes from
standard input, is a set of update directives, one per line. There are five kinds of directives. In each case
the directive begins with the directive name, followed by one or more fields separated by commas.
Remove a path from the model. Example: delete, RSES -> FGenAsp
Add a path to the model. Example (the NA
for the start value is optional): add, RSES -> FGenAsp, gam14, NA
Replace every occurrence of the first string with the second in the variables and
parameters of the model. This directive may be used, for example, to change one variable to
another or to rename a parameter. Example: replace, gam, gamma
, substitutes the string "gamma"
for "gam"
wherever the latter appears, presumably in parameter names.
Fix a parameter that was formerly free. Example: fix, RGenAsp -> REdAsp, 1
Free a parameter that was formerly fixed. Example (the NA
for the start value is optional):
free, RGenAsp -> ROccAsp, lam11, NA
The edit
method for semmod
objects opens the model in the R editor.
specifyModel
, specifyEquations
, cfa
, removeRedundantPaths
, combineModels
,
update
, and edit
return an object of class semmod
, suitable as input for sem
.
multigroupModel
returns an object of class semmodList
, also suitable as input for sem
.
classifyVariables
returns a list with two character vectors: endogenous
, containing the names of endogenous
variables in the model; and exogenous
, containing the names of exogenous variables.
John Fox jfox@mcmaster.ca and Jarrett Byrnes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | # Note: These examples can't be run via example() because the default file
# argument of specifyModel() requires that the model specification be entered
# at the command prompt. The examples can be copied and run in the R console,
# however.
## Not run:
model.dhp <- specifyModel()
RParAsp -> RGenAsp, gam11, NA
RIQ -> RGenAsp, gam12, NA
RSES -> RGenAsp, gam13, NA
FSES -> RGenAsp, gam14, NA
RSES -> FGenAsp, gam23, NA
FSES -> FGenAsp, gam24, NA
FIQ -> FGenAsp, gam25, NA
FParAsp -> FGenAsp, gam26, NA
FGenAsp -> RGenAsp, beta12, NA
RGenAsp -> FGenAsp, beta21, NA
RGenAsp -> ROccAsp, NA, 1
RGenAsp -> REdAsp, lam21, NA
FGenAsp -> FOccAsp, NA, 1
FGenAsp -> FEdAsp, lam42, NA
RGenAsp <-> RGenAsp, ps11, NA
FGenAsp <-> FGenAsp, ps22, NA
RGenAsp <-> FGenAsp, ps12, NA
ROccAsp <-> ROccAsp, theta1, NA
REdAsp <-> REdAsp, theta2, NA
FOccAsp <-> FOccAsp, theta3, NA
FEdAsp <-> FEdAsp, theta4, NA
model.dhp
# an equivalent specification, allowing specifyModel() to generate
# variance parameters for endogenous variables (and suppressing
# the unnecessary trailing NAs):
model.dhp <- specifyModel()
RParAsp -> RGenAsp, gam11
RIQ -> RGenAsp, gam12
RSES -> RGenAsp, gam13
FSES -> RGenAsp, gam14
RSES -> FGenAsp, gam23
FSES -> FGenAsp, gam24
FIQ -> FGenAsp, gam25
FParAsp -> FGenAsp, gam26
FGenAsp -> RGenAsp, beta12
RGenAsp -> FGenAsp, beta21
RGenAsp -> ROccAsp, NA, 1
RGenAsp -> REdAsp, lam21
FGenAsp -> FOccAsp, NA, 1
FGenAsp -> FEdAsp, lam42
RGenAsp <-> FGenAsp, ps12
model.dhp
# Another equivalent specification, telling specifyModel to add paths for
# variances and covariance of RGenAsp and FGenAsp:
model.dhp <- specifyModel(covs="RGenAsp, FGenAsp")
RParAsp -> RGenAsp, gam11
RIQ -> RGenAsp, gam12
RSES -> RGenAsp, gam13
FSES -> RGenAsp, gam14
RSES -> FGenAsp, gam23
FSES -> FGenAsp, gam24
FIQ -> FGenAsp, gam25
FParAsp -> FGenAsp, gam26
FGenAsp -> RGenAsp, beta12
RGenAsp -> FGenAsp, beta21
RGenAsp -> ROccAsp, NA, 1
RGenAsp -> REdAsp, lam21
FGenAsp -> FOccAsp, NA, 1
FGenAsp -> FEdAsp, lam42
model.dhp
# The same model in equation format:
model.dhp.1 <- specifyEquations(covs="RGenAsp, FGenAsp")
RGenAsp = gam11*RParAsp + gam12*RIQ + gam13*RSES + gam14*FSES + beta12*FGenAsp
FGenAsp = gam23*RSES + gam24*FSES + gam25*FIQ + gam26*FParAsp + beta21*RGenAsp
ROccAsp = 1*RGenAsp
REdAsp = lam21(1)*RGenAsp # to illustrate setting start values
FOccAsp = 1*FGenAsp
FEdAsp = lam42(1)*FGenAsp
model.dhp
classifyVariables(model.dhp)
# updating the model to impose equality constraints
# and to rename the latent variables and gamma parameters
model.dhp.eq <- update(model.dhp)
delete, RSES -> FGenAsp
delete, FSES -> FGenAsp
delete, FIQ -> FGenAsp
delete, FParAsp -> FGenAs
delete, RGenAsp -> FGenAsp
add, RSES -> FGenAsp, gam14, NA
add, FSES -> FGenAsp, gam13, NA
add, FIQ -> FGenAsp, gam12, NA
add, FParAsp -> FGenAsp, gam26, NA
add, RGenAsp -> FGenAsp, beta12, NA
replace, gam, gamma
replace, Gen, General
model.dhp.eq
# A three-factor CFA model for the Thurstone mental-tests data, specified three equivalent ways:
R.thur <- readMoments(diag=FALSE, names=c('Sentences','Vocabulary',
'Sent.Completion','First.Letters','4.Letter.Words','Suffixes',
'Letter.Series','Pedigrees', 'Letter.Group'))
.828
.776 .779
.439 .493 .46
.432 .464 .425 .674
.447 .489 .443 .59 .541
.447 .432 .401 .381 .402 .288
.541 .537 .534 .35 .367 .32 .555
.38 .358 .359 .424 .446 .325 .598 .452
# (1a) in CFA format:
mod.cfa.thur.c <- cfa()
FA: Sentences, Vocabulary, Sent.Completion
FB: First.Letters, 4.Letter.Words, Suffixes
FC: Letter.Series, Pedigrees, Letter.Group
cfa.thur.c <- sem(mod.cfa.thur.c, R.thur, 213)
summary(cfa.thur.c)
# (1b) in CFA format, using reference indicators:
mod.cfa.thur.r <- cfa(reference.indicators=TRUE)
FA: Sentences, Vocabulary, Sent.Completion
FB: First.Letters, 4.Letter.Words, Suffixes
FC: Letter.Series, Pedigrees, Letter.Group
cfa.thur.r <- sem(mod.cfa.thur.r, R.thur, 213)
summary(cfa.thur.r)
# (2) in equation format:
mod.cfa.thur.e <- specifyEquations(covs="F1, F2, F3")
Sentences = lam11*F1
Vocabulary = lam21*F1
Sent.Completion = lam31*F1
First.Letters = lam42*F2
4.Letter.Words = lam52*F2
Suffixes = lam62*F2
Letter.Series = lam73*F3
Pedigrees = lam83*F3
Letter.Group = lam93*F3
V(F1) = 1
V(F2) = 1
V(F3) = 1
cfa.thur.e <- sem(mod.cfa.thur.e, R.thur, 213)
summary(cfa.thur.e)
# (3) in path format:
mod.cfa.thur.p <- specifyModel(covs="F1, F2, F3")
F1 -> Sentences, lam11
F1 -> Vocabulary, lam21
F1 -> Sent.Completion, lam31
F2 -> First.Letters, lam41
F2 -> 4.Letter.Words, lam52
F2 -> Suffixes, lam62
F3 -> Letter.Series, lam73
F3 -> Pedigrees, lam83
F3 -> Letter.Group, lam93
F1 <-> F1, NA, 1
F2 <-> F2, NA, 1
F3 <-> F3, NA, 1
cfa.thur.p <- sem(mod.cfa.thur.p, R.thur, 213)
summary(cfa.thur.p)
# a multigroup CFA model fit to the Holzinger-Swineford
# mental-tests data (from the MBESS package)
library(MBESS)
data(HS.data)
mod.hs <- cfa()
spatial: visual, cubes, paper, flags
verbal: general, paragrap, sentence, wordc, wordm
memory: wordr, numberr, figurer, object, numberf, figurew
math: deduct, numeric, problemr, series, arithmet
mod.mg <- multigroupModel(mod.hs, groups=c("Female", "Male"))
sem.mg <- sem(mod.mg, data=HS.data, group="Gender",
formula = ~ visual + cubes + paper + flags +
general + paragrap + sentence + wordc + wordm +
wordr + numberr + figurer + object + numberf + figurew +
deduct + numeric + problemr + series + arithmet
)
summary(sem.mg)
# with cross-group equality constraints:
mod.mg.eq <- multigroupModel(mod.hs, groups=c("Female", "Male"), allEqual=TRUE)
sem.mg.eq <- sem(mod.mg.eq, data=HS.data, group="Gender",
formula = ~ visual + cubes + paper + flags +
general + paragrap + sentence + wordc + wordm +
wordr + numberr + figurer + object + numberf + figurew +
deduct + numeric + problemr + series + arithmet
)
summary(sem.mg.eq)
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.