display_rotatable_MDS_v2 <- function(mat,
plot_title = "3D MDS Configuration",
use_cluster_colors = FALSE,
k_clusters = 5) {
library(smacof)
library(plotly)
library(dplyr)
library(htmltools)
# Full labels like A:buckets_0213
original_labels <- rownames(mat)
# Extract letter and rule name
letter_label <- sub(":.*", "", original_labels)
rule_name <- sub("^[^:]*:", "", original_labels)
# Compute distance matrix
dist_mat <- dist(mat)
# Hierarchical clustering
hclust_result <- hclust(dist_mat)
# Assign group codes
if (use_cluster_colors) {
group_code <- cutree(hclust_result, k = k_clusters)
} else {
group_code <- rep(0, length(original_labels))
}
# New legend labels like A:0:buckets_0213 or A:3:buckets_0213
legend_label <- paste0(letter_label, ":", group_code, ":", rule_name)
# Check stress values
dims <- 1:6
stress_values <- numeric(length(dims))
for (i in seq_along(dims)) {
mds_tmp <- smacof::smacofSym(dist_mat, ndim = dims[i])
stress_values[i] <- mds_tmp$stress
}
print(data.frame(Dimension = dims, Stress = stress_values))
# Use 3D MDS because the plot is 3D
mds_result <- smacof::smacofSym(dist_mat, ndim = 3)
mds_df <- data.frame(
mds_result$conf,
letter_label = letter_label,
rule_name = rule_name,
group_code = as.factor(group_code),
legend_label = legend_label
)
# Color setup
if (use_cluster_colors) {
color_map <- c(
"1" = "red",
"2" = "blue",
"3" = "green",
"4" = "purple",
"5" = "orange"
)
} else {
color_map <- c("0" = "black")
}
p <- plot_ly(
data = mds_df,
x = ~D1,
y = ~D2,
z = ~D3,
type = "scatter3d",
mode = "text",
text = ~letter_label,
textfont = list(size = 16),
textposition = "middle center",
hovertext = ~legend_label,
hoverinfo = "text",
color = ~group_code,
colors = color_map,
showlegend = FALSE
) %>%
layout(
title = plot_title,
scene = list(
xaxis = list(title = "Dimension 1"),
yaxis = list(title = "Dimension 2"),
zaxis = list(title = "Dimension 3")
)
)
legend_items <- lapply(seq_len(nrow(mds_df)), function(i) {
htmltools::div(
style = paste0(
"color:", color_map[as.character(mds_df$group_code[i])],
"; font-size:12px; line-height:1.3;"
),
mds_df$legend_label[i]
)
})
custom_legend <- htmltools::div(
style = "width:220px; padding-left:10px; padding-top:40px;",
htmltools::div(
style = "font-size:13px; font-weight:bold; margin-bottom:6px;",
"Label:Cluster:Rule"
),
legend_items
)
htmltools::div(
style = "display:flex; align-items:flex-start;",
htmltools::div(style = "width:75%;", p),
custom_legend
)
}
library(knitr)
# library(kableExtra)
library(dplyr)
mat <- as.matrix(read.csv("OC_diff_matrix.csv", row.names = 1, check.names = FALSE))
mat # to see the matrix
## buckOrd02 buckOrd13 buckets_0213 ccw cm_BRYK cm_RBKY cw ordL1
## buckOrd02 -18 -241 NA NA -99 -219 NA -49
## buckOrd13 -145 226 NA NA -62 -59 NA 25
## buckets_0213 NA NA 263 155 NA NA 189 NA
## ccw NA NA 43 90 NA NA 113 NA
## cm_BRYK -497 -448 NA NA 390 -192 NA -474
## cm_RBKY -392 -602 NA NA -64 488 NA -314
## cw NA NA 260 405 NA NA 146 NA
## ordL1 22 25 NA NA -2 139 NA 152
## ordRevOfL1 -283 -234 NA NA -432 -337 NA -382
## quadMixed1 NA NA -275 -329 NA NA -381 NA
## quadNearby NA NA -395 -306 NA NA -212 NA
## sm_csqt NA NA -629 -693 NA NA -483 NA
## sm_qcts NA NA -556 -565 NA NA -542 NA
## ordRevOfL1 quadMixed1 quadNearby sm_csqt sm_qcts no predecessors
## buckOrd02 -32 NA NA NA NA 0
## buckOrd13 -33 NA NA NA NA 0
## buckets_0213 NA 52 45 -222 -107 0
## ccw NA -141 -79 -405 -540 0
## cm_BRYK -374 NA NA NA NA 0
## cm_RBKY -221 NA NA NA NA 0
## cw NA -149 79 -631 -743 0
## ordL1 -44 NA NA NA NA 0
## ordRevOfL1 187 NA NA NA NA 0
## quadMixed1 NA 496 3 -96 4 0
## quadNearby NA 40 519 -179 -47 0
## sm_csqt NA -369 -258 328 -108 0
## sm_qcts NA -356 -248 -107 386 0
# the following renames the rows and columns with a letter prefix, so that I can use it in the plotting later one.
# Generate prefixes A, B, C, ... for rows and columatns
row_prefixes <- LETTERS[seq_len(nrow(mat))]
col_prefixes <- LETTERS[seq_len(ncol(mat))]
# Add prefixes to row and columatn namates
rownames(mat) <- paste0(row_prefixes, ":", rownames(mat))
colnames(mat) <- paste0(col_prefixes, ":", colnames(mat))
# mat
# assume your matrix is called mat
row_dist <- dist(mat) # distance between rows
row_dist # display it
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK
## B:buckOrd13 730.2931
## C:buckets_0213 0.0000 0.0000
## D:ccw 0.0000 0.0000 762.2382
## E:cm_BRYK 1272.5793 1526.7318 0.0000 0.0000
## F:cm_RBKY 1324.5505 1546.6551 0.0000 0.0000 1226.5937
## G:cw 0.0000 0.0000 1089.0184 680.6269 0.0000
## H:ordL1 707.7768 504.6662 0.0000 0.0000 1585.6172
## I:ordRevOfL1 841.3525 1147.9347 0.0000 0.0000 1490.9634
## J:quadMixed1 0.0000 0.0000 1372.0312 1522.5322 0.0000
## K:quadNearby 0.0000 0.0000 1346.8375 1411.6856 0.0000
## L:sm_csqt 0.0000 0.0000 2107.4464 1974.5119 0.0000
## M:sm_qcts 0.0000 0.0000 1976.4085 1978.9782 0.0000
## F:cm_RBKY G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw 0.0000
## H:ordL1 1370.1496 0.0000
## I:ordRevOfL1 1506.2815 0.0000 1349.1471
## J:quadMixed1 0.0000 2036.0019 0.0000 0.0000
## K:quadNearby 0.0000 1861.8040 0.0000 0.0000 960.4952
## L:sm_csqt 0.0000 2604.5675 0.0000 0.0000 1494.8390
## M:sm_qcts 0.0000 2571.6563 0.0000 0.0000 1384.6205
## K:quadNearby L:sm_csqt
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw
## H:ordL1
## I:ordRevOfL1
## J:quadMixed1
## K:quadNearby
## L:sm_csqt 1513.9536
## M:sm_qcts 1412.2464 895.9727
row_hclust <- hclust(row_dist) # hierarchical clustering
plot(row_hclust, main = "Row Clustering")
#
{r} #t(mat) # see transpose #col_dist <- dist(t(mat)) # distance between columns #col_dist # display it #col_hclust <- hclust(col_dist) #plot(col_hclust, main = "Column Clustering") #
mat2 <- mat
for (i in 1:nrow(mat2)) {
row_mean <- mean(mat2[i,], na.rm = TRUE)
mat2[i, is.na(mat2[i, ])] <- row_mean
}
# display mat
mat
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK F:cm_RBKY
## A:buckOrd02 -18 -241 NA NA -99 -219
## B:buckOrd13 -145 226 NA NA -62 -59
## C:buckets_0213 NA NA 263 155 NA NA
## D:ccw NA NA 43 90 NA NA
## E:cm_BRYK -497 -448 NA NA 390 -192
## F:cm_RBKY -392 -602 NA NA -64 488
## G:cw NA NA 260 405 NA NA
## H:ordL1 22 25 NA NA -2 139
## I:ordRevOfL1 -283 -234 NA NA -432 -337
## J:quadMixed1 NA NA -275 -329 NA NA
## K:quadNearby NA NA -395 -306 NA NA
## L:sm_csqt NA NA -629 -693 NA NA
## M:sm_qcts NA NA -556 -565 NA NA
## G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1 K:quadNearby L:sm_csqt
## A:buckOrd02 NA -49 -32 NA NA NA
## B:buckOrd13 NA 25 -33 NA NA NA
## C:buckets_0213 189 NA NA 52 45 -222
## D:ccw 113 NA NA -141 -79 -405
## E:cm_BRYK NA -474 -374 NA NA NA
## F:cm_RBKY NA -314 -221 NA NA NA
## G:cw 146 NA NA -149 79 -631
## H:ordL1 NA 152 -44 NA NA NA
## I:ordRevOfL1 NA -382 187 NA NA NA
## J:quadMixed1 -381 NA NA 496 3 -96
## K:quadNearby -212 NA NA 40 519 -179
## L:sm_csqt -483 NA NA -369 -258 328
## M:sm_qcts -542 NA NA -356 -248 -107
## M:sm_qcts N:no predecessors
## A:buckOrd02 NA 0
## B:buckOrd13 NA 0
## C:buckets_0213 -107 0
## D:ccw -540 0
## E:cm_BRYK NA 0
## F:cm_RBKY NA 0
## G:cw -743 0
## H:ordL1 NA 0
## I:ordRevOfL1 NA 0
## J:quadMixed1 4 0
## K:quadNearby -47 0
## L:sm_csqt -108 0
## M:sm_qcts 386 0
#display mat2 has row means. [It is for column analysis ]
mat2
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK
## A:buckOrd02 -18.000 -241.000 -94.000000 -94.000000 -99.000
## B:buckOrd13 -145.000 226.000 -6.857143 -6.857143 -62.000
## C:buckets_0213 46.875 46.875 263.000000 155.000000 46.875
## D:ccw -114.875 -114.875 43.000000 90.000000 -114.875
## E:cm_BRYK -497.000 -448.000 -227.857143 -227.857143 390.000
## F:cm_RBKY -392.000 -602.000 -157.857143 -157.857143 -64.000
## G:cw -79.125 -79.125 260.000000 405.000000 -79.125
## H:ordL1 22.000 25.000 41.714286 41.714286 -2.000
## I:ordRevOfL1 -283.000 -234.000 -211.571429 -211.571429 -432.000
## J:quadMixed1 -72.250 -72.250 -275.000000 -329.000000 -72.250
## K:quadNearby -72.500 -72.500 -395.000000 -306.000000 -72.500
## L:sm_csqt -276.500 -276.500 -629.000000 -693.000000 -276.500
## M:sm_qcts -248.500 -248.500 -556.000000 -565.000000 -248.500
## F:cm_RBKY G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1
## A:buckOrd02 -219.000 -94.000000 -49.000 -32.000 -94.000000
## B:buckOrd13 -59.000 -6.857143 25.000 -33.000 -6.857143
## C:buckets_0213 46.875 189.000000 46.875 46.875 52.000000
## D:ccw -114.875 113.000000 -114.875 -114.875 -141.000000
## E:cm_BRYK -192.000 -227.857143 -474.000 -374.000 -227.857143
## F:cm_RBKY 488.000 -157.857143 -314.000 -221.000 -157.857143
## G:cw -79.125 146.000000 -79.125 -79.125 -149.000000
## H:ordL1 139.000 41.714286 152.000 -44.000 41.714286
## I:ordRevOfL1 -337.000 -211.571429 -382.000 187.000 -211.571429
## J:quadMixed1 -72.250 -381.000000 -72.250 -72.250 496.000000
## K:quadNearby -72.500 -212.000000 -72.500 -72.500 40.000000
## L:sm_csqt -276.500 -483.000000 -276.500 -276.500 -369.000000
## M:sm_qcts -248.500 -542.000000 -248.500 -248.500 -356.000000
## K:quadNearby L:sm_csqt M:sm_qcts N:no predecessors
## A:buckOrd02 -94.000000 -94.000000 -94.000000 0
## B:buckOrd13 -6.857143 -6.857143 -6.857143 0
## C:buckets_0213 45.000000 -222.000000 -107.000000 0
## D:ccw -79.000000 -405.000000 -540.000000 0
## E:cm_BRYK -227.857143 -227.857143 -227.857143 0
## F:cm_RBKY -157.857143 -157.857143 -157.857143 0
## G:cw 79.000000 -631.000000 -743.000000 0
## H:ordL1 41.714286 41.714286 41.714286 0
## I:ordRevOfL1 -211.571429 -211.571429 -211.571429 0
## J:quadMixed1 3.000000 -96.000000 4.000000 0
## K:quadNearby 519.000000 -179.000000 -47.000000 0
## L:sm_csqt -258.000000 328.000000 -108.000000 0
## M:sm_qcts -248.000000 -107.000000 386.000000 0
write.csv(mat2, file = "mat2.csv", row.names = TRUE)
mat3 <- mat
for (j in 1:ncol(mat3)) {
col_mean <- mean(mat3[, j], na.rm = TRUE)
mat3[is.na(mat3[, j]), j] <- col_mean
}
# display mat
mat
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK F:cm_RBKY
## A:buckOrd02 -18 -241 NA NA -99 -219
## B:buckOrd13 -145 226 NA NA -62 -59
## C:buckets_0213 NA NA 263 155 NA NA
## D:ccw NA NA 43 90 NA NA
## E:cm_BRYK -497 -448 NA NA 390 -192
## F:cm_RBKY -392 -602 NA NA -64 488
## G:cw NA NA 260 405 NA NA
## H:ordL1 22 25 NA NA -2 139
## I:ordRevOfL1 -283 -234 NA NA -432 -337
## J:quadMixed1 NA NA -275 -329 NA NA
## K:quadNearby NA NA -395 -306 NA NA
## L:sm_csqt NA NA -629 -693 NA NA
## M:sm_qcts NA NA -556 -565 NA NA
## G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1 K:quadNearby L:sm_csqt
## A:buckOrd02 NA -49 -32 NA NA NA
## B:buckOrd13 NA 25 -33 NA NA NA
## C:buckets_0213 189 NA NA 52 45 -222
## D:ccw 113 NA NA -141 -79 -405
## E:cm_BRYK NA -474 -374 NA NA NA
## F:cm_RBKY NA -314 -221 NA NA NA
## G:cw 146 NA NA -149 79 -631
## H:ordL1 NA 152 -44 NA NA NA
## I:ordRevOfL1 NA -382 187 NA NA NA
## J:quadMixed1 -381 NA NA 496 3 -96
## K:quadNearby -212 NA NA 40 519 -179
## L:sm_csqt -483 NA NA -369 -258 328
## M:sm_qcts -542 NA NA -356 -248 -107
## M:sm_qcts N:no predecessors
## A:buckOrd02 NA 0
## B:buckOrd13 NA 0
## C:buckets_0213 -107 0
## D:ccw -540 0
## E:cm_BRYK NA 0
## F:cm_RBKY NA 0
## G:cw -743 0
## H:ordL1 NA 0
## I:ordRevOfL1 NA 0
## J:quadMixed1 4 0
## K:quadNearby -47 0
## L:sm_csqt -108 0
## M:sm_qcts 386 0
#display mat3 [has column means ]
mat3
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK
## A:buckOrd02 -18.0000 -241.0000 -184.1429 -177.5714 -99.00000
## B:buckOrd13 -145.0000 226.0000 -184.1429 -177.5714 -62.00000
## C:buckets_0213 -218.8333 -212.3333 263.0000 155.0000 -44.83333
## D:ccw -218.8333 -212.3333 43.0000 90.0000 -44.83333
## E:cm_BRYK -497.0000 -448.0000 -184.1429 -177.5714 390.00000
## F:cm_RBKY -392.0000 -602.0000 -184.1429 -177.5714 -64.00000
## G:cw -218.8333 -212.3333 260.0000 405.0000 -44.83333
## H:ordL1 22.0000 25.0000 -184.1429 -177.5714 -2.00000
## I:ordRevOfL1 -283.0000 -234.0000 -184.1429 -177.5714 -432.00000
## J:quadMixed1 -218.8333 -212.3333 -275.0000 -329.0000 -44.83333
## K:quadNearby -218.8333 -212.3333 -395.0000 -306.0000 -44.83333
## L:sm_csqt -218.8333 -212.3333 -629.0000 -693.0000 -44.83333
## M:sm_qcts -218.8333 -212.3333 -556.0000 -565.0000 -44.83333
## F:cm_RBKY G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1
## A:buckOrd02 -219 -167.1429 -49.0000 -32.00000 -61
## B:buckOrd13 -59 -167.1429 25.0000 -33.00000 -61
## C:buckets_0213 -30 189.0000 -173.6667 -86.16667 52
## D:ccw -30 113.0000 -173.6667 -86.16667 -141
## E:cm_BRYK -192 -167.1429 -474.0000 -374.00000 -61
## F:cm_RBKY 488 -167.1429 -314.0000 -221.00000 -61
## G:cw -30 146.0000 -173.6667 -86.16667 -149
## H:ordL1 139 -167.1429 152.0000 -44.00000 -61
## I:ordRevOfL1 -337 -167.1429 -382.0000 187.00000 -61
## J:quadMixed1 -30 -381.0000 -173.6667 -86.16667 496
## K:quadNearby -30 -212.0000 -173.6667 -86.16667 40
## L:sm_csqt -30 -483.0000 -173.6667 -86.16667 -369
## M:sm_qcts -30 -542.0000 -173.6667 -86.16667 -356
## K:quadNearby L:sm_csqt M:sm_qcts N:no predecessors
## A:buckOrd02 8.714286 -187.4286 -165 0
## B:buckOrd13 8.714286 -187.4286 -165 0
## C:buckets_0213 45.000000 -222.0000 -107 0
## D:ccw -79.000000 -405.0000 -540 0
## E:cm_BRYK 8.714286 -187.4286 -165 0
## F:cm_RBKY 8.714286 -187.4286 -165 0
## G:cw 79.000000 -631.0000 -743 0
## H:ordL1 8.714286 -187.4286 -165 0
## I:ordRevOfL1 8.714286 -187.4286 -165 0
## J:quadMixed1 3.000000 -96.0000 4 0
## K:quadNearby 519.000000 -179.0000 -47 0
## L:sm_csqt -258.000000 328.0000 -108 0
## M:sm_qcts -248.000000 -107.0000 386 0
write.csv(mat3, file = "mat3.csv", row.names = TRUE)
# repeat for the corrected row and column data.
row_dist <- dist(mat3) # distance between rows using column means
row_dist # display it
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK
## B:buckOrd13 516.3952
## C:buckets_0213 744.5198 834.8900
## D:ccw 708.5274 802.9588 576.1979
## E:cm_BRYK 899.8494 1079.5624 988.5903 961.7755
## F:cm_RBKY 936.5986 1093.6503 971.8100 944.5190 867.3327
## G:cw 1129.8323 1191.3240 823.2205 514.5056 1303.6572
## H:ordL1 500.4738 356.8529 841.7739 810.1141 1121.2007
## I:ordRevOfL1 594.9260 811.7124 907.0720 877.7705 1054.2704
## J:quadMixed1 722.7787 815.5616 1037.1581 1150.9261 972.3220
## K:quadNearby 667.7133 767.1849 1018.1135 1067.1340 932.1169
## L:sm_csqt 1047.1547 1113.2226 1593.0797 1492.5907 1232.6938
## M:sm_qcts 995.0780 1064.3833 1494.0244 1495.9669 1188.7730
## F:cm_RBKY G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw 1290.9787
## H:ordL1 968.8421 1196.1583
## I:ordRevOfL1 1065.1019 1242.9767 953.9911
## J:quadMixed1 955.2560 1539.0728 822.6072 889.3138
## K:quadNearby 914.3008 1407.3916 774.6707 845.1692 726.0661
## L:sm_csqt 1219.2776 1968.8679 1118.3947 1168.3334 1129.9920
## M:sm_qcts 1174.8554 1943.9895 1069.7915 1121.8958 1046.6747
## K:quadNearby L:sm_csqt
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw
## H:ordL1
## I:ordRevOfL1
## J:quadMixed1
## K:quadNearby
## L:sm_csqt 1144.4413
## M:sm_qcts 1067.5580 677.2917
row_hclust <- hclust(row_dist) # hierarchical clustering
plot(row_hclust, main = "Row Clustering: by distance from predecessor")
# assume your matrix is called mat
row_dist <- dist(t(mat2)) # distance between columns, using row means
# add a better name
col_dist<-row_dist
row_dist # display it
## A:buckOrd02 B:buckOrd13 C:buckets_0213 D:ccw E:cm_BRYK
## B:buckOrd13 486.0874
## C:buckets_0213 841.5328 934.2945
## D:ccw 916.3733 1002.2319 223.4099
## E:cm_BRYK 964.6657 1065.2366 997.3408 1061.2498
## F:cm_RBKY 965.3119 1165.7401 1006.2428 1069.6200 828.6996
## G:cw 723.8715 829.8908 299.3476 353.4615 900.2784
## H:ordL1 251.3464 446.0022 824.4891 900.7468 919.3916
## I:ordRevOfL1 531.3812 665.8836 864.0862 937.1272 999.2998
## J:quadMixed1 720.3326 826.8057 1066.2664 1148.8620 897.4353
## K:quadNearby 734.6988 839.3515 1113.7118 1107.9260 909.0068
## L:sm_csqt 1007.9643 1086.6097 1557.5484 1668.2545 1141.2726
## M:sm_qcts 1113.6411 1185.2954 1685.3925 1791.1013 1235.6001
## N:no predecessors 820.3232 947.6187 1098.7576 1153.1367 725.8127
## F:cm_RBKY G:cw H:ordL1 I:ordRevOfL1 J:quadMixed1
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw 910.1302
## H:ordL1 872.2832 703.9849
## I:ordRevOfL1 937.8246 749.9716 620.0637
## J:quadMixed1 907.3180 1024.9561 700.3454 746.5564
## K:quadNearby 918.7651 938.5984 715.1133 760.4273 743.2039
## L:sm_csqt 1149.0601 1403.6502 993.7790 1026.8688 1150.3612
## M:sm_qcts 1242.7966 1575.3111 1100.8184 1130.7802 1185.5952
## N:no predecessors 793.5207 958.7426 815.8806 630.9280 829.1697
## K:quadNearby L:sm_csqt M:sm_qcts
## B:buckOrd13
## C:buckets_0213
## D:ccw
## E:cm_BRYK
## F:cm_RBKY
## G:cw
## H:ordL1
## I:ordRevOfL1
## J:quadMixed1
## K:quadNearby
## L:sm_csqt 1241.7516
## M:sm_qcts 1286.9040 710.3260
## N:no predecessors 737.6777 950.7804 1072.4767
row_hclust <- hclust(row_dist) # hierarchical clustering
plot(row_hclust, main = "column clustering - by impact on successors")
# for rows
# Row MDS, no colors
display_rotatable_MDS_v2(
mat3,
plot_title = "OC Row MDS:by distance from predecessor ",
use_cluster_colors = FALSE
)
## Dimension Stress
## 1 1 0.36613000
## 2 2 0.20379221
## 3 3 0.12314133
## 4 4 0.07465512
## 5 5 0.05189649
## 6 6 0.03405388
# Column MDS, no colors
display_rotatable_MDS_v2(
t(mat2),
plot_title = "OC Column MDS: by impact on successors",
use_cluster_colors = FALSE
)
## Dimension Stress
## 1 1 0.37074525
## 2 2 0.20314610
## 3 3 0.12126918
## 4 4 0.07649543
## 5 5 0.04805105
## 6 6 0.02887708
# Row MDS, 5 cluster colors
display_rotatable_MDS_v2(
mat3,
plot_title = "OC Row MDS: by distance from predecessor ",
use_cluster_colors = TRUE,
k_clusters = 5
)
## Dimension Stress
## 1 1 0.36613000
## 2 2 0.20379221
## 3 3 0.12314133
## 4 4 0.07465512
## 5 5 0.05189649
## 6 6 0.03405388
# Column MDS, 5 cluster colors
display_rotatable_MDS_v2(
t(mat2),
plot_title = "OC Column MDS:by impact on successors ",
use_cluster_colors = TRUE,
k_clusters = 5
)
## Dimension Stress
## 1 1 0.37074525
## 2 2 0.20314610
## 3 3 0.12126918
## 4 4 0.07649543
## 5 5 0.04805105
## 6 6 0.02887708