options(digits=2, scipen=999)
data(list="Wenchuan", package="MPsychoR")
Wenchuan <-missRanger::missRanger(data = Wenchuan, verbose=0)
for(j in 1:ncol(Wenchuan))Wenchuan[,j]<-round(Wenchuan[,j])
M <- tidyr::gather(data=Wenchuan,key="Item", value = "Value")
M$Item <-factor(x=M$Item, levels = names(sort(tapply(X=M$Value, INDEX=M$Item, FUN=mean))))
require(ggplot2)
#Items are reordered and cleaned.
The ggplot below is something I found using YouTube. I love it!
ggplot(M) + aes(x=Value, fill=Item, label = ..count..)+geom_bar()+geom_text(stat="count", position = position_stack(0.9))+facet_wrap(~Item)

library("MPsychoR")
library("smacof")
data(Wenchuan)
Wdelta <- dist(t(Wenchuan)) ## Euclidean distances
fit.wenchuan1 <- mds(Wdelta, type = "ordinal") ## MDS fit
fit.wenchuan1
Call:
mds(delta = Wdelta, type = "ordinal")
Model: Symmetric SMACOF
Number of objects: 17
Stress-1 value: 0.133
Number of iterations: 35
plot(fit.wenchuan1, main = "Wenchuan MDS")

Here we can see variables that are very similar and others that are very different, looking at the different dimensions.
set.seed(123)
rsvec <- randomstress(n = attr(Wdelta, "Size"), ndim = 2,
nrep = 500, type = "ordinal")
mean(rsvec)
[1] 0.28
#Here is a random stress calculation that gives you a distribution of observations to determine statistical significance. It takes random values and puts it into the function, checks distances, then returns stress. The random stress average is 0.28.
#To detemine a statistical signifcant results, use the following and see values less than it.
mean(rsvec) - 2*sd(rsvec)
[1] 0.25
set.seed(123)
permmds <- permtest(fit.wenchuan1, data = Wenchuan,
method.dat = "euclidean", nrep = 500,
verbose = FALSE)
permmds
Call: permtest.smacof(object = fit.wenchuan1, data = Wenchuan, method.dat = "euclidean",
nrep = 500, verbose = FALSE)
SMACOF Permutation Test
Number of objects: 17
Number of replications (permutations): 500
Observed stress value: 0.13
p-value: <0.001
#Here the p-value is less than 0.001, therefore the model is more informative than a randomly generated reduction. *****
n <- attr(Wdelta, "Size")
v_stress <-rep(NA, n-1)
for(i in 1:(n-1))v_stress[i]<-smacof::mds(delta=Wdelta,ndim=i,type="ordinal")$stress
plot(x=1:(n-1), y=v_stress, type="b", main="MDS Scree Plot", pch=20, xlab="Number of Dimensions", ylab="Stress")

svec <- NULL
for (i in 1:(n-1)) {
svec[i] <- mds(Wdelta, ndim = i, type = "ordinal")$stress
}
#You may choose 2 or 3 dimensions.
set.seed(123)
fit.wenchuan <- NULL ## 100 random starts
for(i in 1:100) {
fit.wenchuan[[i]] <- mds(Wdelta, type = "ordinal",
init = "random")
}
## extract the best solution
ind <- which.min(sapply(fit.wenchuan,
function(x) x$stress))
fit.wenchuan2 <- fit.wenchuan[[ind]]
fit.wenchuan2$stress ## lowest stress (random start)
[1] 0.13
## [1] 0.1327943
fit.wenchuan1$stress ## stress (classical scaling start)
[1] 0.13
## [1] 0.1328058
lowest stress (random start) 0.1327943
stress (classical scaling start) 0.1328058
fit.wenchuan3 <- mds(Wdelta, type = "interval")
fit.wenchuan3
Call:
mds(delta = Wdelta, type = "interval")
Model: Symmetric SMACOF
Number of objects: 17
Stress-1 value: 0.18
Number of iterations: 9
#Interval will be more restrictive. However, the stress is worst.
plot(fit.wenchuan2, plot.type = "Shepard",
main = "Shepard Diagram (Ordinal MDS)")

plot(fit.wenchuan3, plot.type = "Shepard",
main = "Shepard Diagram (Interval MDS)")

plot(fit.wenchuan2, plot.type = "stressplot",
main = "Wenchuan Stress-per-Point")

#Here the stress plot (which will add up to 100) is being compared to the other variables.
library("colorspace")
set.seed(123)
bootWen <- bootmds(fit.wenchuan2, data = Wenchuan,
method.dat = "euclidean", nrep = 100)
cols <- rainbow_hcl(17, l = 60)
plot(bootWen, col = cols)

#Above you can see variations of each object across multiple samples. It shows how stable the MDS configuration is across multiple samples. The data ellipse shows the distribution of a confidence. The size of the ellipse matters - the larger the ellipse the less confidence we are where it falls within the dimensions.
LS0tDQp0aXRsZTogIk1vZHVsZSA1OiBNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmciDQphdXRob3I6IEpha2UgUmV5bm9sZHMsIEZhbGwgMjAyMSAtIEluZGVwZW5kZW50IFN0dWR5DQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KYGBge3J9DQpvcHRpb25zKGRpZ2l0cz0yLCBzY2lwZW49OTk5KQ0KZGF0YShsaXN0PSJXZW5jaHVhbiIsIHBhY2thZ2U9Ik1Qc3ljaG9SIikNCg0KV2VuY2h1YW4gPC1taXNzUmFuZ2VyOjptaXNzUmFuZ2VyKGRhdGEgPSBXZW5jaHVhbiwgdmVyYm9zZT0wKQ0KDQpmb3IoaiBpbiAxOm5jb2woV2VuY2h1YW4pKVdlbmNodWFuWyxqXTwtcm91bmQoV2VuY2h1YW5bLGpdKQ0KTSA8LSB0aWR5cjo6Z2F0aGVyKGRhdGE9V2VuY2h1YW4sa2V5PSJJdGVtIiwgdmFsdWUgPSAiVmFsdWUiKSANCk0kSXRlbSA8LWZhY3Rvcih4PU0kSXRlbSwgbGV2ZWxzID0gbmFtZXMoc29ydCh0YXBwbHkoWD1NJFZhbHVlLCBJTkRFWD1NJEl0ZW0sIEZVTj1tZWFuKSkpKQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KYGBgDQojSXRlbXMgYXJlIHJlb3JkZXJlZCBhbmQgY2xlYW5lZC4gDQoNCiMgVGhlIGdncGxvdCBiZWxvdyBpcyBzb21ldGhpbmcgSSBmb3VuZCB1c2luZyBZb3VUdWJlLiBJIGxvdmUgaXQhIA0KDQpgYGB7cn0NCmdncGxvdChNKSArIGFlcyh4PVZhbHVlLCBmaWxsPUl0ZW0sIGxhYmVsID0gLi5jb3VudC4uKStnZW9tX2JhcigpK2dlb21fdGV4dChzdGF0PSJjb3VudCIsIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2soMC45KSkrZmFjZXRfd3JhcCh+SXRlbSkNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KCJNUHN5Y2hvUiIpDQpsaWJyYXJ5KCJzbWFjb2YiKQ0KZGF0YShXZW5jaHVhbikNCldkZWx0YSA8LSBkaXN0KHQoV2VuY2h1YW4pKSAjIyBFdWNsaWRlYW4gZGlzdGFuY2VzDQpmaXQud2VuY2h1YW4xIDwtIG1kcyhXZGVsdGEsIHR5cGUgPSAib3JkaW5hbCIpICMjIE1EUyBmaXQNCmZpdC53ZW5jaHVhbjENCmBgYA0KDQoNCmBgYHtyfQ0KcGxvdChmaXQud2VuY2h1YW4xLCBtYWluID0gIldlbmNodWFuIE1EUyIpDQpgYGANCiMgSGVyZSB3ZSBjYW4gc2VlIHZhcmlhYmxlcyB0aGF0IGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIG90aGVycyB0aGF0IGFyZSB2ZXJ5IGRpZmZlcmVudCwgbG9va2luZyBhdCB0aGUgZGlmZmVyZW50IGRpbWVuc2lvbnMuIA0KDQoNCg0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCnJzdmVjIDwtIHJhbmRvbXN0cmVzcyhuID0gYXR0cihXZGVsdGEsICJTaXplIiksIG5kaW0gPSAyLA0KbnJlcCA9IDUwMCwgdHlwZSA9ICJvcmRpbmFsIikNCm1lYW4ocnN2ZWMpDQoNCmBgYA0KI0hlcmUgaXMgYSByYW5kb20gc3RyZXNzIGNhbGN1bGF0aW9uIHRoYXQgZ2l2ZXMgeW91IGEgZGlzdHJpYnV0aW9uIG9mIG9ic2VydmF0aW9ucyB0byBkZXRlcm1pbmUgc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlLiBJdCB0YWtlcyByYW5kb20gdmFsdWVzIGFuZCBwdXRzIGl0IGludG8gdGhlIGZ1bmN0aW9uLCBjaGVja3MgZGlzdGFuY2VzLCB0aGVuIHJldHVybnMgc3RyZXNzLiBUaGUgcmFuZG9tIHN0cmVzcyBhdmVyYWdlIGlzIDAuMjguDQoNCiNUbyBkZXRlbWluZSBhIHN0YXRpc3RpY2FsIHNpZ25pZmNhbnQgcmVzdWx0cywgdXNlIHRoZSBmb2xsb3dpbmcgYW5kIHNlZSB2YWx1ZXMgbGVzcyB0aGFuIGl0LiANCmBgYHtyfQ0KbWVhbihyc3ZlYykgLSAyKnNkKHJzdmVjKQ0KYGBgDQoNCg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpwZXJtbWRzIDwtIHBlcm10ZXN0KGZpdC53ZW5jaHVhbjEsIGRhdGEgPSBXZW5jaHVhbiwNCm1ldGhvZC5kYXQgPSAiZXVjbGlkZWFuIiwgbnJlcCA9IDUwMCwNCnZlcmJvc2UgPSBGQUxTRSkNCnBlcm1tZHMNCmBgYA0KI0hlcmUgdGhlIHAtdmFsdWUgaXMgbGVzcyB0aGFuIDAuMDAxLCB0aGVyZWZvcmUgdGhlIG1vZGVsIGlzIG1vcmUgaW5mb3JtYXRpdmUgdGhhbiBhIHJhbmRvbWx5IGdlbmVyYXRlZCByZWR1Y3Rpb24uICoqKioqDQoNCmBgYHtyfQ0KbiA8LSBhdHRyKFdkZWx0YSwgIlNpemUiKQ0KDQp2X3N0cmVzcyA8LXJlcChOQSwgbi0xKQ0KZm9yKGkgaW4gMToobi0xKSl2X3N0cmVzc1tpXTwtc21hY29mOjptZHMoZGVsdGE9V2RlbHRhLG5kaW09aSx0eXBlPSJvcmRpbmFsIikkc3RyZXNzDQpwbG90KHg9MToobi0xKSwgeT12X3N0cmVzcywgdHlwZT0iYiIsIG1haW49Ik1EUyBTY3JlZSBQbG90IiwgcGNoPTIwLCB4bGFiPSJOdW1iZXIgb2YgRGltZW5zaW9ucyIsIHlsYWI9IlN0cmVzcyIpDQoNCg0Kc3ZlYyA8LSBOVUxMDQpmb3IgKGkgaW4gMToobi0xKSkgew0Kc3ZlY1tpXSA8LSBtZHMoV2RlbHRhLCBuZGltID0gaSwgdHlwZSA9ICJvcmRpbmFsIikkc3RyZXNzDQp9DQpgYGANCiNZb3UgbWF5IGNob29zZSAyIG9yIDMgZGltZW5zaW9ucy4gDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KZml0LndlbmNodWFuIDwtIE5VTEwgIyMgMTAwIHJhbmRvbSBzdGFydHMNCmZvcihpIGluIDE6MTAwKSB7DQpmaXQud2VuY2h1YW5bW2ldXSA8LSBtZHMoV2RlbHRhLCB0eXBlID0gIm9yZGluYWwiLA0KaW5pdCA9ICJyYW5kb20iKQ0KfQ0KaW5kIDwtIHdoaWNoLm1pbihzYXBwbHkoZml0LndlbmNodWFuLA0KZnVuY3Rpb24oeCkgeCRzdHJlc3MpKQ0KZml0LndlbmNodWFuMiA8LSBmaXQud2VuY2h1YW5bW2luZF1dDQpmaXQud2VuY2h1YW4yJHN0cmVzcyANCmZpdC53ZW5jaHVhbjEkc3RyZXNzIA0KYGBgDQojIGxvd2VzdCBzdHJlc3MgKHJhbmRvbSBzdGFydCkgMC4xMzI3OTQzDQojIHN0cmVzcyAoY2xhc3NpY2FsIHNjYWxpbmcgc3RhcnQpIDAuMTMyODA1OA0KDQpgYGB7cn0NCmZpdC53ZW5jaHVhbjMgPC0gbWRzKFdkZWx0YSwgdHlwZSA9ICJpbnRlcnZhbCIpDQpmaXQud2VuY2h1YW4zDQpgYGANCiNJbnRlcnZhbCB3aWxsIGJlIG1vcmUgcmVzdHJpY3RpdmUuIEhvd2V2ZXIsIHRoZSBzdHJlc3MgaXMgd29yc3QuIA0KDQpgYGB7cn0NCnBsb3QoZml0LndlbmNodWFuMiwgcGxvdC50eXBlID0gIlNoZXBhcmQiLA0KbWFpbiA9ICJTaGVwYXJkIERpYWdyYW0gKE9yZGluYWwgTURTKSIpDQpgYGANCg0KDQpgYGB7cn0NCnBsb3QoZml0LndlbmNodWFuMywgcGxvdC50eXBlID0gIlNoZXBhcmQiLA0KbWFpbiA9ICJTaGVwYXJkIERpYWdyYW0gKEludGVydmFsIE1EUykiKQ0KYGBgDQoNCg0KYGBge3J9DQpwbG90KGZpdC53ZW5jaHVhbjIsIHBsb3QudHlwZSA9ICJzdHJlc3NwbG90IiwNCm1haW4gPSAiV2VuY2h1YW4gU3RyZXNzLXBlci1Qb2ludCIpDQpgYGANCiNIZXJlIHRoZSBzdHJlc3MgcGxvdCAod2hpY2ggd2lsbCBhZGQgdXAgdG8gMTAwKSBpcyBiZWluZyBjb21wYXJlZCB0byB0aGUgb3RoZXIgdmFyaWFibGVzLiANCg0KYGBge3J9DQpsaWJyYXJ5KCJjb2xvcnNwYWNlIikNCnNldC5zZWVkKDEyMykNCmJvb3RXZW4gPC0gYm9vdG1kcyhmaXQud2VuY2h1YW4yLCBkYXRhID0gV2VuY2h1YW4sDQptZXRob2QuZGF0ID0gImV1Y2xpZGVhbiIsIG5yZXAgPSAxMDApDQpjb2xzIDwtIHJhaW5ib3dfaGNsKDE3LCBsID0gNjApDQpwbG90KGJvb3RXZW4sIGNvbCA9IGNvbHMpDQpgYGANCiNBYm92ZSB5b3UgY2FuIHNlZSB2YXJpYXRpb25zIG9mIGVhY2ggb2JqZWN0IGFjcm9zcyBtdWx0aXBsZSBzYW1wbGVzLiBJdCBzaG93cyBob3cgc3RhYmxlIHRoZSBNRFMgY29uZmlndXJhdGlvbiBpcyBhY3Jvc3MgbXVsdGlwbGUgc2FtcGxlcy4gVGhlIGRhdGEgZWxsaXBzZSBzaG93cyB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgY29uZmlkZW5jZS4gVGhlIHNpemUgb2YgdGhlIGVsbGlwc2UgbWF0dGVycyAtIHRoZSBsYXJnZXIgdGhlIGVsbGlwc2UgdGhlIGxlc3MgY29uZmlkZW5jZSB3ZSBhcmUgd2hlcmUgaXQgZmFsbHMgd2l0aGluIHRoZSBkaW1lbnNpb25zLg0K