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
Label:Cluster:Rule
A:0:buckOrd02
B:0:buckOrd13
C:0:buckets_0213
D:0:ccw
E:0:cm_BRYK
F:0:cm_RBKY
G:0:cw
H:0:ordL1
I:0:ordRevOfL1
J:0:quadMixed1
K:0:quadNearby
L:0:sm_csqt
M:0:sm_qcts
# 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
Label:Cluster:Rule
A:0:buckOrd02
B:0:buckOrd13
C:0:buckets_0213
D:0:ccw
E:0:cm_BRYK
F:0:cm_RBKY
G:0:cw
H:0:ordL1
I:0:ordRevOfL1
J:0:quadMixed1
K:0:quadNearby
L:0:sm_csqt
M:0:sm_qcts
N:0:no predecessors
# 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
Label:Cluster:Rule
A:1:buckOrd02
B:1:buckOrd13
C:2:buckets_0213
D:2:ccw
E:3:cm_BRYK
F:3:cm_RBKY
G:2:cw
H:1:ordL1
I:4:ordRevOfL1
J:1:quadMixed1
K:1:quadNearby
L:5:sm_csqt
M:5:sm_qcts
# 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
Label:Cluster:Rule
A:1:buckOrd02
B:1:buckOrd13
C:2:buckets_0213
D:2:ccw
E:3:cm_BRYK
F:3:cm_RBKY
G:2:cw
H:1:ordL1
I:4:ordRevOfL1
J:4:quadMixed1
K:4:quadNearby
L:5:sm_csqt
M:5:sm_qcts
N:4:no predecessors