Learn R Programming

smacof (version 2.1-7)

svm_mdsplot: Support Vector Machine MDS

Description

Plots 2D MDS configuration including facets as determined by an SVM.

Usage

svm_mdsplot(mds_object, svm_object, class, legend1 = TRUE, legend2 = TRUE, 
            inset = c(-0.2, 0.5), plot.dim = c(1,2), by = 0.01, 
            main, xlab, ylab, xlim, ylim, ...)

Arguments

mds_object

Object of class "smacofB", i.e., an MDS solution from smacofSym() or smacofConstraint.

svm_object

Object of class "svm", i.e., an SVM solution from svm or tune.svm

class

Vector of class assignments (facets) for each object.

legend1

If TRUE, facet legend is added.

legend2

If TRUE, class legend is added.

inset

Inset distance from the margins for both legends as a fraction of the plot region when legend is placed by keyword.

plot.dim

Vector with dimensions to be plotted.

by

Scaling factor for resolution (the smaller, the higher the resolution).

main

Plot title.

xlab

Label of x-axis.

ylab

Label of y-axis.

xlim

Scale x-axis.

ylim

Scale y-axis.

...

Further plot arguments passed: see image for detailed information.

Details

Using the SVM implementation of e1071 one can determine facets in an MDS configuration based on an SVM fit. This function plots the resulting facets on top of the 2D MDS configuration. Note that this function is work in progress.

References

Mair, P., Cetron, J. S., and Borg, I. (2022). Using support vector machines for facet partitioning in multidimensional scaling. Multivariate Behavioral Research. Forthcoming; tools:::Rd_expr_doi("10.1080/00273171.2022.2035207")

See Also

Examples

Run this code
## Guttman intelligence data
Delta <- sim2diss(Guttman1965[[1]])
class <- Guttman1965[[2]]

## ordinal MDS fit
mds_gut <- mds(Delta, ndim = 2, type = "ordinal")  
mds_gut
cols <- rainbow_hcl(4)[as.numeric(class)]
plot(mds_gut, col = cols, label.conf = list(col = cols))
legend("bottomright", legend = levels(class), cex = 0.7, col = rainbow_hcl(4), pch = 19)

## radial SVM fit
X <- mds_gut$conf                    ## extract configuration
dat <- data.frame(class = class, X)  ## merge with class vector
costvec <- 2^seq(-4, 4)              ## tuning parameter grid
gamma <- seq(0.01, 0.5, 10)

set.seed(111)
svm_gut <- tune.svm(class ~ D1 + D2, data = dat, kernel = "radial", 
                    cross = 10, cost = costvec)$best.model
svm_gut
preds <- predict(svm_gut, data = dat)  ## predicted classes
table(obs = class, pred = preds)       ## confusion matrix

svm_mdsplot(mds_gut, svm_gut, dat$class, inset = c(-0.3, 0.5))

Run the code above in your browser using DataLab