---
title: "Polar plot for survival and correlation connection"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Polar plot for survival and correlation connection}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.align = "center",
  dpi = 120,
  fig.width = 6,
  fig.height = 5
)
```

```{r setup}
library(ggpolar)
library(survival)
library(ezcox)
```

```{r}
data = survival::lung
head(data)
```

Pick several variables.

```{r}
vars = c("age", "sex", "ph.ecog", "ph.karno", "pat.karno", "meal.cal", "wt.loss")
```


### Univariable Cox analysis

```{r, message=FALSE}
df_cox = ezcox(data, vars)
df_cox
```

### Correlation analysis

```{r}
vars_comb = combn(vars, 2, simplify = FALSE)
cor_value = sapply(vars_comb, function(x) {
  cor(data[[x[1]]], data[[x[2]]], use = "pairwise")
})

df_cor = cbind(as.data.frame(t(sapply(vars_comb, function(x) x))), cor_value)
colnames(df_cor) = c("var1", "var2", "correlation")
df_cor$size = abs(df_cor$correlation)
df_cor$way = ifelse(df_cor$correlation > 0, "positive", "negative")
df_cor
```

### Visualization

```{r}
df_cox$role = ifelse(
  df_cox$p.value > 0.05, "non-signf",
  ifelse(df_cox$HR < 1, "protector", "risker")
)
df_cox$`-log10(p)` = -log10(df_cox$p.value)
```


```{r}
p = polar_init(df_cox, x = Variable, aes(color = role, size = `-log10(p)`))
p
```

```{r}
p + 
  ggnewscale::new_scale("color") +
  polar_connect(df_cor, x1 = var1, x2= var2, size = size, color = way, alpha = 0.3) + 
  scale_size(range = c(0.1, 4))
```

