Often, our task is to understand dissimilarities as perceived by many individuals. While one can study the dissimilarities for each individual separately using non-metric MDS, this is not so useful for an aggregate policy decision. Our aim here is therefore to do an aggregate analysis.

Methodology

Here we have n objects \(j=1,2...,n\) and \(M\) individuals \(i=1,2,....,M\), who provide their perceived dissimilarities \(((\delta_{jk}))\) between pairs of objects \(j,k\). The assumption here is that the individuals perceive dissimilarities based on the same underlying dimensions. However ,while assessing dissimilarities, each individual may give different weightage to different dimensions. i.e the individuals may weight dimensions different from each other.

Formulation:

Let \(r=\) # of dimensions.

Let the co-ordinates for object \(j\) be given by \(X_j= (x_{j1},x_{j2},...,x_{jr})\).

Let co-ordinate for object \(j\) as perceived by individual \(i\) be given by, \(Y^{(i)}_j= (y_{j1}^{(i)},y_{j2}^{(i)},....,y_{jr}^{(i)})\).

We assume the coorinates of \(Y^{(i)}_j\) are determined by the general coordinates \(X_j\) by applying weights \(w_{it}\), for \(t=1,2,\ldots, r\) specific to the individual.

To be precise, \[y_{jt}^{(i)}=w_{it}^\frac{1}{2}.x_{jt}.\]

Then, note that the distance between objects \(j\) and \(k\) as per individual \(i\) is given by \[d_{jk}^{(i)}= =\sqrt{\sum\limits_{t=1}^r w_{it}(x_{jt}-x_{kt})^2}\]

Broadly, the process is to match \(d_{jk}^{(i)}\) with \(\delta_{jk}^{(i)}\). The process inolves fixing weights and solving for \(x\) and then fixing \(x\) and solving for \(w\) iteratively.

Example

We consider the pairwise dissimilarities between breakfast cereals as expressed by 4 individuals. The example is adapted from the book ``Analyzing Multivariate Data" by Lattin, Carroll and Green.

library(smacof)
## Loading required package: plotrix
## Loading required package: colorspace
## Loading required package: e1071
## 
## Attaching package: 'smacof'
## The following object is masked from 'package:base':
## 
##     transform
setwd('C:\\Users\\IIMA\\Google Drive\\SMDA\\SMDA2020\\4. MDS')
# INDSCAL
X<-read.csv('breakfast.csv')
C<-list(as.dist(as.matrix(X[1:15,2:16]) ), as.dist(as.matrix(X[16:30,2:16]) ),  as.dist(as.matrix(X[31:45,2:16]) ),  as.dist(as.matrix(X[46:60,2:16]) ) )

fit<-smacofIndDiff(C, ndim = 2, constraint = "indscal", type="ordinal",  weightmat = NULL, init = "torgerson", ties= "primary")
fit
## 
## Call: smacofIndDiff(delta = C, ndim = 2, type = "ordinal", constraint = "indscal", 
##     weightmat = NULL, init = "torgerson", ties = "primary")
## 
## Model: Three-way SMACOF 
## Number of objects: 15 
## Stress-1 value: 0.159 
## Number of iterations: 73
par(mfrow=c(2,1))
x<-fit$gspace[,1]
y<-fit$gspace[,2]

plot(x,y, xlab="Dim1", ylab="Dim2", xlim=c(-1.5,1.5), ylim=c(-1,1))
lines(seq(-2,2,length=100), rep(0,100))
lines(rep(0,100),seq(-1.5,1.5,length=100))
text(x,y, labels=colnames(X[,2:16]), cex=.75, pos=rep(c(1,2,3),5))

#weights matrix for individuals
w<-fit$cweights
w
## [[1]]
##           D1      D2
## D1 0.7981626 0.00000
## D2 0.0000000 1.42704
## 
## [[2]]
##          D1        D2
## D1 1.175463 0.0000000
## D2 0.000000 0.4975415
## 
## [[3]]
##          D1        D2
## D1 1.132265 0.0000000
## D2 0.000000 0.6782787
## 
## [[4]]
##           D1       D2
## D1 0.8985222 0.000000
## D2 0.0000000 1.279004
# subject 1
DDim<- fit$gspace
subcoord<-DDim %*% w[[1]] 
subcoord<-  as.matrix(fit$conf[[1]])
x<-subcoord[,1]
y<-subcoord[,2]

plot(x,y, xlab="Dim1", ylab="Dim2", main="subject 1", xlim=c(-1.5,1.5), ylim=c(-1,1))
lines(seq(-1,1,length=100), rep(0,100))
lines(rep(0,100),seq(-1,1,length=100))
text(x,y, labels=colnames(X[,2:16]), cex=.75, pos=rep(c(1,2,3),5))