library("MPsychoR")
library("smacof")
chps = read.csv("chps.csv")

#Random force used to add missing values. missRanger - Fast Imputation of Missing Values by Chained Random Forests

options(digits=2, scipen=999)
data(list="chps", package="MPsychoR")
data set 㤼㸱chps㤼㸲 not found
mydata2<-missRanger::missRanger(data = chps, verbose=0)
for(j in 1:ncol(mydata2))mydata2[,j]<-round(mydata2[,j])
M <- tidyr::gather(data=mydata2,key="Item", value = "Value") 
M$Item <-factor(x=M$Item, levels = names(sort(tapply(X=M$Value, INDEX=M$Item, FUN=mean))))
require(ggplot2)
ggplot(M) + aes(x=Value, fill=Item, label = ..count..)+geom_bar()+facet_wrap(~Item)

#Standardized the variables since not all of the variables were the same.

standardize = function(x){
  return ((x-mean(x,na.rm=TRUE))/sd(x,na.rm=TRUE))
}
std_data = as.data.frame(apply(mydata2,2,standardize))
library("smacof")
Wdelta <- dist(t(std_data)) ## Euclidean distances
fit.wenchuan1 <- mds(Wdelta, type = "ordinal") ## MDS fit
fit.wenchuan1

Call:
mds(delta = Wdelta, type = "ordinal")

Model: Symmetric SMACOF 
Number of objects: 25 
Stress-1 value: 0.12 
Number of iterations: 49 
plot(fit.wenchuan1, main = "CHPS Survey MDS")

#The stress is higher using the randomstress test.

set.seed(123)
rsvec <- randomstress(n = attr(Wdelta, "Size"), ndim = 2,
nrep = 500, type = "ordinal")
mean(rsvec)
[1] 0.32
hist(x=rsvec, main = "Histogram of randomly generated/nmultidimensional scaling stress")

#The model above is less than 0.31, which means that it is statistically significant.

mean(rsvec) - 2*sd(rsvec)
[1] 0.31
set.seed(123)
permmds <- permtest(fit.wenchuan1, data = std_data,
method.dat = "euclidean", nrep = 500,
verbose = FALSE)
permmds

Call: permtest.smacof(object = fit.wenchuan1, data = std_data, method.dat = "euclidean", 
    nrep = 500, verbose = FALSE)

SMACOF Permutation Test
Number of objects: 25 
Number of replications (permutations): 500 

Observed stress value: 0.12 
p-value: <0.001 
n <- attr(Wdelta, "Size")
svec <- NULL
for (i in 1:(n-1)) {
svec[i] <- mds(Wdelta, ndim = i, type = "ordinal")$stress
}
plot(x=1:(n-1), y=svec, type="b", main = "MDS Scree Plot", pch=20, xlab="Number of Dimensions", ylab = "Stress")

set.seed(123)
fit.wenchuan <- NULL ## 100 random starts
for(i in 1:100) {
fit.wenchuan[[i]] <- mds(Wdelta, type = "ordinal",
init = "random")
}
ind <- which.min(sapply(fit.wenchuan,
function(x) x$stress))
fit.wenchuan2 <- fit.wenchuan[[ind]]
fit.wenchuan2$stress ## lowest stress (random start)
[1] 0.1
fit.wenchuan1$stress ## stress (classical scaling start)
[1] 0.12
fit.wenchuan3 <- mds(Wdelta, type = "interval")
fit.wenchuan3

Call:
mds(delta = Wdelta, type = "interval")

Model: Symmetric SMACOF 
Number of objects: 25 
Stress-1 value: 0.18 
Number of iterations: 21 

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

plot(fit.wenchuan1, plot.type = "Shepard",
main = "Shepard Diagram (Orginal MDS)")

plot(fit.wenchuan2, plot.type = "Shepard",
main = "Shepard Diagram (Ordinal MDS)")

#Configurations

plot(fit.wenchuan2, plot.type = "confplot", main= "confplot (Random Ordinal MDS)")

plot(fit.wenchuan2, plot.type = "resplot", main= "resplot (Random Ordinal MDS)")

plot(fit.wenchuan2, plot.type = "stressplot", main= "stressplot (Random Ordinal MDS)")

plot(fit.wenchuan2, plot.type = "bubbleplot", main= "bubbleplot(Random Ordinal MDS)")

library("colorspace")
set.seed(123)
bootWen <- bootmds(fit.wenchuan2, data = std_data,
method.dat = "euclidean", nrep = 100)
cols <- rainbow_hcl(17, l = 60)
plot(bootWen, col = cols)

colpal <- c(rainbow_hcl(3, c=100))
pal <-palette(colpal)
memb <- c(1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,1,1,1)
plot(fit.wenchuan2, main = "Configuration", label.conf = list(label=FALSE), col = memb)
legend("topright", legend = c("School Support", "Feeling", "Efficacy"), col=colpal, pch=20)
palette(pal)
colpal <- c(rainbow_hcl(3, c=100, l=30))
pal <- palette(colpal)
text(fit.wenchuan2$conf[-7,], labels=rownames(fit.wenchuan2$conf)[-7], col=memb[-7], pos=3, cex=0.8)
text(fit.wenchuan2$conf[7.1], fit.wenchuan2$conf[7,2], labels= rownames(fit.wenchuan2$conf)[7], col=memb[7], pos=1, cex=0.8)

LS0tDQp0aXRsZTogIkZpbmFsIFByb2plY3QgLSBFeHBsb3JhdG9yeSBNdWx0aWRpbWVuc2lvbmFsIFNjYWxpbmciDQphdXRob3I6IEpha2UgUmV5bm9sZHMsIEluZGVwZW5kZW50IFN0dWR5LCBGYWxsIDIwMjENCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeSgiTVBzeWNob1IiKQ0KbGlicmFyeSgic21hY29mIikNCmNocHMgPSByZWFkLmNzdigiY2hwcy5jc3YiKQ0KYGBgDQoNCiNSYW5kb20gZm9yY2UgdXNlZCB0byBhZGQgbWlzc2luZyB2YWx1ZXMuIG1pc3NSYW5nZXIgLSBGYXN0IEltcHV0YXRpb24gb2YgTWlzc2luZyBWYWx1ZXMgYnkgQ2hhaW5lZCBSYW5kb20gRm9yZXN0cw0KYGBge3J9DQpvcHRpb25zKGRpZ2l0cz0yLCBzY2lwZW49OTk5KQ0KZGF0YShsaXN0PSJjaHBzIiwgcGFja2FnZT0iTVBzeWNob1IiKQ0KbXlkYXRhMjwtbWlzc1Jhbmdlcjo6bWlzc1JhbmdlcihkYXRhID0gY2hwcywgdmVyYm9zZT0wKQ0KYGBgDQpgYGB7cn0NCmZvcihqIGluIDE6bmNvbChteWRhdGEyKSlteWRhdGEyWyxqXTwtcm91bmQobXlkYXRhMlssal0pDQpNIDwtIHRpZHlyOjpnYXRoZXIoZGF0YT1teWRhdGEyLGtleT0iSXRlbSIsIHZhbHVlID0gIlZhbHVlIikgDQpNJEl0ZW0gPC1mYWN0b3IoeD1NJEl0ZW0sIGxldmVscyA9IG5hbWVzKHNvcnQodGFwcGx5KFg9TSRWYWx1ZSwgSU5ERVg9TSRJdGVtLCBGVU49bWVhbikpKSkNCnJlcXVpcmUoZ2dwbG90MikNCmBgYA0KDQpgYGB7cn0NCmdncGxvdChNKSArIGFlcyh4PVZhbHVlLCBmaWxsPUl0ZW0sIGxhYmVsID0gLi5jb3VudC4uKStnZW9tX2JhcigpK2ZhY2V0X3dyYXAofkl0ZW0pDQpgYGANCg0KDQojU3RhbmRhcmRpemVkIHRoZSB2YXJpYWJsZXMgc2luY2Ugbm90IGFsbCBvZiB0aGUgdmFyaWFibGVzIHdlcmUgdGhlIHNhbWUuDQpgYGB7cn0NCnN0YW5kYXJkaXplID0gZnVuY3Rpb24oeCl7DQogIHJldHVybiAoKHgtbWVhbih4LG5hLnJtPVRSVUUpKS9zZCh4LG5hLnJtPVRSVUUpKQ0KfQ0KYGBgDQpgYGB7cn0NCnN0ZF9kYXRhID0gYXMuZGF0YS5mcmFtZShhcHBseShteWRhdGEyLDIsc3RhbmRhcmRpemUpKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeSgic21hY29mIikNCldkZWx0YSA8LSBkaXN0KHQoc3RkX2RhdGEpKSAjIyBFdWNsaWRlYW4gZGlzdGFuY2VzDQpmaXQud2VuY2h1YW4xIDwtIG1kcyhXZGVsdGEsIHR5cGUgPSAib3JkaW5hbCIpICMjIE1EUyBmaXQNCmZpdC53ZW5jaHVhbjENCg0KYGBgDQoNCmBgYHtyfQ0KcGxvdChmaXQud2VuY2h1YW4xLCBtYWluID0gIkNIUFMgU3VydmV5IE1EUyIpDQpgYGANCiNUaGUgc3RyZXNzIGlzIGhpZ2hlciB1c2luZyB0aGUgcmFuZG9tc3RyZXNzIHRlc3QuIA0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpyc3ZlYyA8LSByYW5kb21zdHJlc3MobiA9IGF0dHIoV2RlbHRhLCAiU2l6ZSIpLCBuZGltID0gMiwNCm5yZXAgPSA1MDAsIHR5cGUgPSAib3JkaW5hbCIpDQptZWFuKHJzdmVjKQ0KYGBgDQpgYGB7cn0NCmhpc3QoeD1yc3ZlYywgbWFpbiA9ICJIaXN0b2dyYW0gb2YgcmFuZG9tbHkgZ2VuZXJhdGVkL25tdWx0aWRpbWVuc2lvbmFsIHNjYWxpbmcgc3RyZXNzIikNCmBgYA0KI1RoZSBtb2RlbCBhYm92ZSBpcyBsZXNzIHRoYW4gMC4zMSwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LiANCmBgYHtyfQ0KbWVhbihyc3ZlYykgLSAyKnNkKHJzdmVjKQ0KYGBgDQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KcGVybW1kcyA8LSBwZXJtdGVzdChmaXQud2VuY2h1YW4xLCBkYXRhID0gc3RkX2RhdGEsDQptZXRob2QuZGF0ID0gImV1Y2xpZGVhbiIsIG5yZXAgPSA1MDAsDQp2ZXJib3NlID0gRkFMU0UpDQpwZXJtbWRzDQpgYGANCg0KYGBge3J9DQpuIDwtIGF0dHIoV2RlbHRhLCAiU2l6ZSIpDQpzdmVjIDwtIE5VTEwNCmZvciAoaSBpbiAxOihuLTEpKSB7DQpzdmVjW2ldIDwtIG1kcyhXZGVsdGEsIG5kaW0gPSBpLCB0eXBlID0gIm9yZGluYWwiKSRzdHJlc3MNCn0NCmBgYA0KDQpgYGB7cn0NCnBsb3QoeD0xOihuLTEpLCB5PXN2ZWMsIHR5cGU9ImIiLCBtYWluID0gIk1EUyBTY3JlZSBQbG90IiwgcGNoPTIwLCB4bGFiPSJOdW1iZXIgb2YgRGltZW5zaW9ucyIsIHlsYWIgPSAiU3RyZXNzIikNCmBgYA0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpmaXQud2VuY2h1YW4gPC0gTlVMTCAjIyAxMDAgcmFuZG9tIHN0YXJ0cw0KZm9yKGkgaW4gMToxMDApIHsNCmZpdC53ZW5jaHVhbltbaV1dIDwtIG1kcyhXZGVsdGEsIHR5cGUgPSAib3JkaW5hbCIsDQppbml0ID0gInJhbmRvbSIpDQp9DQppbmQgPC0gd2hpY2gubWluKHNhcHBseShmaXQud2VuY2h1YW4sDQpmdW5jdGlvbih4KSB4JHN0cmVzcykpDQpmaXQud2VuY2h1YW4yIDwtIGZpdC53ZW5jaHVhbltbaW5kXV0NCmZpdC53ZW5jaHVhbjIkc3RyZXNzICMjIGxvd2VzdCBzdHJlc3MgKHJhbmRvbSBzdGFydCkNCg0KYGBgDQoNCmBgYHtyfQ0KZml0LndlbmNodWFuMSRzdHJlc3MgIyMgc3RyZXNzIChjbGFzc2ljYWwgc2NhbGluZyBzdGFydCkNCmBgYA0KYGBge3J9DQpmaXQud2VuY2h1YW4zIDwtIG1kcyhXZGVsdGEsIHR5cGUgPSAiaW50ZXJ2YWwiKQ0KZml0LndlbmNodWFuMw0KYGBgDQoNCmBgYHtyfQ0KDQpwbG90KGZpdC53ZW5jaHVhbjMsIHBsb3QudHlwZSA9ICJTaGVwYXJkIiwNCm1haW4gPSAiU2hlcGFyZCBEaWFncmFtIChJbnRlcnZhbCBNRFMpIikNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZml0LndlbmNodWFuMSwgcGxvdC50eXBlID0gIlNoZXBhcmQiLA0KbWFpbiA9ICJTaGVwYXJkIERpYWdyYW0gKE9yZ2luYWwgTURTKSIpDQoNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZml0LndlbmNodWFuMiwgcGxvdC50eXBlID0gIlNoZXBhcmQiLA0KbWFpbiA9ICJTaGVwYXJkIERpYWdyYW0gKE9yZGluYWwgTURTKSIpDQoNCmBgYA0KDQojQ29uZmlndXJhdGlvbnMgDQoNCmBgYHtyfQ0KcGxvdChmaXQud2VuY2h1YW4yLCBwbG90LnR5cGUgPSAiY29uZnBsb3QiLCBtYWluPSAiY29uZnBsb3QgKFJhbmRvbSBPcmRpbmFsIE1EUykiKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChmaXQud2VuY2h1YW4yLCBwbG90LnR5cGUgPSAicmVzcGxvdCIsIG1haW49ICJyZXNwbG90IChSYW5kb20gT3JkaW5hbCBNRFMpIikNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZml0LndlbmNodWFuMiwgcGxvdC50eXBlID0gInN0cmVzc3Bsb3QiLCBtYWluPSAic3RyZXNzcGxvdCAoUmFuZG9tIE9yZGluYWwgTURTKSIpDQpgYGANCg0KYGBge3J9DQpwbG90KGZpdC53ZW5jaHVhbjIsIHBsb3QudHlwZSA9ICJidWJibGVwbG90IiwgbWFpbj0gImJ1YmJsZXBsb3QoUmFuZG9tIE9yZGluYWwgTURTKSIpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KCJjb2xvcnNwYWNlIikNCnNldC5zZWVkKDEyMykNCmJvb3RXZW4gPC0gYm9vdG1kcyhmaXQud2VuY2h1YW4yLCBkYXRhID0gc3RkX2RhdGEsDQptZXRob2QuZGF0ID0gImV1Y2xpZGVhbiIsIG5yZXAgPSAxMDApDQpjb2xzIDwtIHJhaW5ib3dfaGNsKDE3LCBsID0gNjApDQpwbG90KGJvb3RXZW4sIGNvbCA9IGNvbHMpDQpgYGANCg0KYGBge3J9DQpjb2xwYWwgPC0gYyhyYWluYm93X2hjbCgzLCBjPTEwMCkpDQpwYWwgPC1wYWxldHRlKGNvbHBhbCkNCm1lbWIgPC0gYygxLDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMiwyLDIsMiwyLDIsMywzLDEsMSwxKQ0KcGxvdChmaXQud2VuY2h1YW4yLCBtYWluID0gIkNvbmZpZ3VyYXRpb24iLCBsYWJlbC5jb25mID0gbGlzdChsYWJlbD1GQUxTRSksIGNvbCA9IG1lbWIpDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiU2Nob29sIFN1cHBvcnQiLCAiRmVlbGluZyIsICJFZmZpY2FjeSIpLCBjb2w9Y29scGFsLCBwY2g9MjApDQpwYWxldHRlKHBhbCkNCmNvbHBhbCA8LSBjKHJhaW5ib3dfaGNsKDMsIGM9MTAwLCBsPTMwKSkNCnBhbCA8LSBwYWxldHRlKGNvbHBhbCkNCnRleHQoZml0LndlbmNodWFuMiRjb25mWy03LF0sIGxhYmVscz1yb3duYW1lcyhmaXQud2VuY2h1YW4yJGNvbmYpWy03XSwgY29sPW1lbWJbLTddLCBwb3M9MywgY2V4PTAuOCkNCnRleHQoZml0LndlbmNodWFuMiRjb25mWzcuMV0sIGZpdC53ZW5jaHVhbjIkY29uZls3LDJdLCBsYWJlbHM9IHJvd25hbWVzKGZpdC53ZW5jaHVhbjIkY29uZilbN10sIGNvbD1tZW1iWzddLCBwb3M9MSwgY2V4PTAuOCkNCmBgYA0KDQpgYGB7cn0NCg0KYGBgDQoNCmBgYHtyfQ0KDQpgYGANCg0KDQo=