View source: R/smacofConstraint.R
smacofConstraint | R Documentation |
SMACOF with internal constraints on the configurations.
smacofConstraint(delta, constraint = "unrestricted", external, ndim = 2,
type = c("ratio", "interval", "ordinal", "mspline"), weightmat = NULL,
init = NULL, ties = "primary", verbose = FALSE, modulus = 1,
itmax = 1000, eps = 1e-6, spline.intKnots = 4, spline.degree = 2,
constraint.type = c("ratio", "interval", "ordinal", "spline",
"mspline"), constraint.ties = "primary",
constraint.spline.intKnots = 2, constraint.spline.degree = 2)
delta |
Either a symmetric dissimilarity matrix or an object of class |
constraint |
Type of constraint: |
external |
Data frame or matrix with external covariates, or list for simplex and circumplex (see details) |
ndim |
Number of dimensions |
type |
MDS type: |
weightmat |
Optional matrix with dissimilarity weights |
init |
Optional matrix with starting values for configurations. If |
ties |
Tie specification for non-metric MDS only: |
verbose |
If |
modulus |
Number of smacof iterations per monotone regression call |
itmax |
Maximum number of iterations |
eps |
Convergence criterion |
spline.degree |
Degree of the spline for |
spline.intKnots |
Number of interior knots of the spline for |
constraint.type |
Transformation for |
constraint.ties |
Tie specification for |
constraint.spline.intKnots |
Number of interior knots for |
constraint.spline.degree |
Degree of the spline for |
The argument external
is mandatory to specify and requires a data frame (or matrix) of dimension (n x q). Alternatively, for simplex fitting the user can specify a list of the following structure: external = list("simplex", dim2)
with dim2
denoting the dimension of the simplex with dim2 < n. For a circumplex fitting, the list has to be of the following form: external = list("circumplex", dim2, k1, k2)
with 1 \leq k1 \leq k2 \leq n
(see also examples section). k1 and k2 denote the circumplex width.
In constraint smacof, the configuration matrix X
is subject to a constraint based on the external scales (predictors Z
specified using external
) of the following linear form: X = ZC
. The type of constraint in C
can be specified using the constraint
argument. We provide the following standard setting:
For constraint = "unrestricted"
, C
is unrestricted. Note that "linear"
still works as well for backward compatibility.
The same for constraint = "diagonal"
where X
needs to be of dimension (n x q)
where q
is the number of columns of the external scale matrix (and thus number of dimensions). Here, C
is restricted to be diagonal.
For constraint = "unrestricted"
or "diagonal"
, the external covariates Z
can be optimally transformed as specified by constraint.type
. Choosing the number of covariates equal to the number of dimensions together with constraint.type = "ordinal"
, constraint.ties = "primary"
will effectively restrict the configuration to parallel regions defined by the categories of the covariates. Note that missing values of the covariates are estimated by the model.
For constraint = "unique"
we get the Bentler-Weeks uniqueness model. Hence X
is of dimension (n x (n + p))
. This implies that we fit a certain number of dimensions p and, in addition we extract n additional dimensions where each object is scored on a separate dimension. More technical details can be found in the corresponding JSS article (reference see below).
In addition, the user can specify his own constraint function with the following arguments: configuration matrix with starting values (init
) (mandatory in this case), matrix V
(weightmat
; based on the weight matrix, see package vignette), external scale matrix (external
). The function must return a matrix of resulting configurations.
If no starting configuration is provided, a random starting solution is used. In most applications, this is not a good idea in order to find a well fitting model. The user can fit an exploratory MDS using mds()
first, and use the resulting configurations as starting configuration for smacofConstraint()
. Alternatively, if the user has starting configurations determined by some underlying theory, they can be used as well.
delta |
Observed dissimilarities |
obsdiss |
Observed dissimilarities, normalized |
confdist |
Configuration dissimilarities |
conf |
Matrix of final configurations |
C |
Matrix with restrictions |
stress |
Stress-1 value |
spp |
Stress per point |
resmat |
Matrix with squared residuals |
rss |
Residual sum-of-squares |
weightmat |
Weight matrix |
ndim |
Number of dimensions |
extvars |
List for each external covariate with a list of class |
init |
Starting configuration |
model |
Type of smacof model |
niter |
Number of iterations |
nobj |
Number of objects |
De Leeuw, J. & Mair, P. (2009). Multidimensional scaling using majorization: The R package smacof. Journal of Statistical Software, 31(3), 1-30, \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v031.i03")}
Mair, P., Groenen, P. J. F., De Leeuw, J. (2022). More on multidimensional scaling in R: smacof version 2. Journal of Statistical Software, 102(10), 1-47. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v102.i10")}
De Leeuw, J., & Heiser, W. (1980). Multidimensional scaling with restrictions on the configurations. In P. R. Krishnaiah (eds.), Multivariate Analysis V, pp. 501-522. North-Holland.
Borg, I., & Lingoes, J. C. (1980). A model and algorithm for multidimensional scaling with external constraints on the distances. Psychometrika, 45, 25-38.
smacofSym
, smacofRect
, smacofIndDiff
, smacofSphere
## theoretical grid restrictions (rectangles; keep covariate ties tied)
fit.rect1 <- mds(rectangles, type = "ordinal", init = rect_constr)
fit.rect2 <- smacofConstraint(rectangles, type = "ordinal", ties = "secondary",
constraint = "diagonal", init = fit.rect1$conf,
external = rect_constr, constraint.type = "ordinal")
plot(fit.rect2)
## regional restrictions morse code data (signal length, strength)
fitMorse1 <- mds(morse, type = "ordinal")
fitMorse1
fitMorse2 <- smacofConstraint(morse, type = "ordinal", constraint = "unrestricted",
external = morsescales[,2:3],
constraint.type = "ordinal",
init = fitMorse1$conf)
fitMorse2
plot(fitMorse2)
## facial expression data I (axial restriction, C diagonal)
Delta <- FaceExp
attr(Delta, "Labels") <- NULL
fitFace <- mds(Delta, type = "ordinal") ## starting solution
Z <- FaceScale[, c(1,3)] ## external variables
fitFaceC1 <- smacofConstraint(Delta, type = "ordinal",
constraint = "diagonal", external = Z, constraint.type = "ordinal",
init = fitFace$conf)
fitFaceC1$C
plot(fitFaceC1, xlab = "Pleasant-Unpleasant", ylab = "Tension-Sleep",
main = "Face Expression (Diagonal Restriction)")
## facial expression data II (C unrestricted)
fitFaceC3 <- smacofConstraint(Delta, type = "ordinal",
constraint = "unrestricted", external = Z, constraint.type = "ordinal",
init = fitFace$conf)
fitFaceC3$C
plot(fitFaceC3, main = "Face Expression (C Unrestricted, Ordinal Transformation)")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.