### CIHI K-prototype Clustering ###
### 3d jitter plots ###
### DRS, CPS, ADL ###

rm(list=ls())
gc()
##          used (Mb) gc trigger (Mb) limit (Mb) max used (Mb)
## Ncells 519936 27.8    1150890 61.5         NA   669282 35.8
## Vcells 956394  7.3    8388608 64.0      24576  1840016 14.1
library(readxl)
library(tidyr)
library(rgl)
library(car)
## Loading required package: carData
library(plotly)
## Loading required package: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
setwd("~/Documents/0. Cancer and Dementia Research/0. Dementia/0. CIHI")

# load data with counts
clustering_results <- read_excel("Clustering summary (Depression Scale).xlsx")
clustering_results$kproto_cluster <- factor(clustering_results$kproto_gower_cluster, labels = c("1", "2", "3", "4", "5"))

### plot_ly ###
clustering_results_names <- clustering_results %>%
  mutate(drs_recoded = factor(drs_recoded, levels = c(0, 1, 2, 3), labels = c("none", "mild", "moderate", "severe"), ordered = TRUE),
         cps_recoded = factor(cps_recoded, levels = c(0, 1, 2, 3), labels = c("none", "mild", "moderate", "severe"), ordered = TRUE),
         adl_recoded = factor(adl_recoded, levels = c(0, 1, 2, 3), labels = c("none", "mild", "moderate", "severe"), ordered = TRUE))

order_list <- list(categoryorder = "array",
              categoryarray = c("none", "mild", "moderate", "severe"))

fig <- plot_ly(clustering_results_names, 
               x = ~drs_recoded, y = ~cps_recoded, z = ~adl_recoded, 
               color = ~kproto_cluster, colors = c("red", "yellow", "green", "blue", "purple"),
               size = ~count, sizes= c(50, 1500),
               text = ~paste('DRS:', drs_recoded, '<br>CPS:', cps_recoded, '<br>ADL:', adl_recoded, '<br>Count:', count, '<br>K-Prototype Cluster:', kproto_cluster))

fig <- fig %>% layout(title = 'K-Prototype clustering assignments for each outcome',
                      scene = list(xaxis = list(title = 'DRS recoded',
                                                gridcolor = 'rgb(255, 255, 255)',
                                                range = c(0,3), 
                                                zerolinewidth = 1,
                                                ticklen = 5,
                                                gridwidth = 2,
                                                autotypenumbers = "strict", 
                                                categoryorder = "array",
                                                categoryarray = c("none", "mild", "moderate", "severe")),
                                   yaxis = list(title = 'CPS recoded',
                                                gridcolor = 'rgb(255, 255, 255)',
                                                range = c(0,3), 
                                                zerolinewidth = 1,
                                                ticklen = 5,
                                                gridwith = 2,
                                                autotypenumbers = "strict", 
                                                categoryorder = "array",
                                                categoryarray = c("none", "mild", "moderate", "severe")),
                                   zaxis = list(title = 'ADL recoded',
                                                gridcolor = 'rgb(255, 255, 255)',
                                                range = c(0,3), 
                                                zerolinewidth = 1,
                                                ticklen = 5,
                                                gridwith = 2,
                                                autotypenumbers = "strict", 
                                                categoryorder = "array",
                                                categoryarray = c("none", "mild", "moderate", "severe"))),
                      paper_bgcolor = 'rgb(243, 243, 243)',
                      plot_bgcolor = 'rgb(243, 243, 243)')
fig
## No trace type specified:
##   Based on info supplied, a 'scatter3d' trace seems appropriate.
##   Read more about this trace type -> https://plotly.com/r/reference/#scatter3d
## No scatter3d mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.