当前位置:网站首页>「R」使用ggpolar绘制生存关联网络图
「R」使用ggpolar绘制生存关联网络图
2022-06-27 19:56:00 【王诗翔呀】
之前课题组一个师妹有需要绘制一个带相关性又能展示生存分析显著性的极坐标图,所以造了ggpolar这个包,今天分享给大家,感兴趣的读者不妨使用自己的数据模仿下,应用到自己的分析项目中去。
Source: `vignettes/surv-corr-connection.Rmd`[1]
library(ggpolar)
#> Loading required package: ggplot2
library(survival)
library(ezcox)
#> Welcome to 'ezcox' package!
#> =======================================================================
#> You are using ezcox version 1.0.2
#>
#> Project home : https://github.com/ShixiangWang/ezcox
#> Documentation: https://shixiangwang.github.io/ezcox
#> Cite as : arXiv:2110.14232
#> =======================================================================
#>
data = survival::lung
head(data)
#> inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
#> 1 3 306 2 74 1 1 90 100 1175 NA
#> 2 3 455 2 68 1 0 90 90 1225 15
#> 3 3 1010 1 56 1 0 90 90 NA 15
#> 4 5 210 2 57 1 1 90 60 1150 11
#> 5 1 883 2 60 1 0 100 90 NA 0
#> 6 12 1022 1 74 1 1 50 80 513 0
Pick several variables.
vars = c("age", "sex", "ph.ecog", "ph.karno", "pat.karno", "meal.cal", "wt.loss")
Univariable Cox analysis
df_cox = ezcox(data, vars)
df_cox
#> # A tibble: 7 × 12
#> Variable is_control contrast_level ref_level n_contrast n_ref beta HR
#> <chr> <lgl> <chr> <chr> <int> <int> <dbl> <dbl>
#> 1 age FALSE age age 228 228 0.0187 1.02
#> 2 sex FALSE sex sex 228 228 -0.531 0.588
#> 3 ph.ecog FALSE ph.ecog ph.ecog 227 227 0.476 1.61
#> 4 ph.karno FALSE ph.karno ph.karno 227 227 -0.0164 0.984
#> 5 pat.karno FALSE pat.karno pat.karno 225 225 -0.0199 0.98
#> 6 meal.cal FALSE meal.cal meal.cal 181 181 -0.000124 1
#> 7 wt.loss FALSE wt.loss wt.loss 214 214 0.00132 1
#> # … with 4 more variables: lower_95 <dbl>, upper_95 <dbl>, p.value <dbl>,
#> # global.pval <dbl>
Correlation analysis
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
#> var1 var2 correlation size way
#> 1 age sex -0.12216709 0.12216709 negative
#> 2 age ph.ecog 0.19323604 0.19323604 positive
#> 3 age ph.karno -0.20318207 0.20318207 negative
#> 4 age pat.karno -0.12616688 0.12616688 negative
#> 5 age meal.cal -0.23141071 0.23141071 negative
#> 6 age wt.loss 0.03814787 0.03814787 positive
#> 7 sex ph.ecog -0.02060379 0.02060379 negative
#> 8 sex ph.karno 0.01138505 0.01138505 positive
#> 9 sex pat.karno 0.04607145 0.04607145 positive
#> 10 sex meal.cal -0.16835976 0.16835976 negative
#> 11 sex wt.loss -0.12907708 0.12907708 negative
#> 12 ph.ecog ph.karno -0.80726666 0.80726666 negative
#> 13 ph.ecog pat.karno -0.51122086 0.51122086 negative
#> 14 ph.ecog meal.cal -0.09851018 0.09851018 negative
#> 15 ph.ecog wt.loss 0.18758944 0.18758944 positive
#> 16 ph.karno pat.karno 0.52029737 0.52029737 positive
#> 17 ph.karno meal.cal 0.04223324 0.04223324 positive
#> 18 ph.karno wt.loss -0.17543452 0.17543452 negative
#> 19 pat.karno meal.cal 0.16575874 0.16575874 positive
#> 20 pat.karno wt.loss -0.17199064 0.17199064 negative
#> 21 meal.cal wt.loss -0.10257242 0.10257242 negative
Visualization
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)
p = polar_init(df_cox, x = Variable, aes(color = role, size = `-log10(p)`))
p
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))
#> Scale for 'size' is already present. Adding another scale for 'size', which
#> will replace the existing scale.
参考资料
[1]
vignettes/surv-corr-connection.Rmd: https://github.com/ShixiangWang/polar/blob/master/vignettes/surv-corr-connection.Rmd
边栏推荐
- 爬虫笔记(1)- urllib
- 资深猎头团队管理者:面试3000顾问,总结组织出8大共性(茅生)
- The problem of minimum modification cost in two-dimensional array [conversion question + shortest path] (dijkstra+01bfs)
- Use logrotate to automatically cut the website logs of the pagoda
- Where can I set the slides on the front page of CMS applet?
- Fill in the blank of rich text test
- 管理系统-ITclub(中)
- 九九乘法表——C语言
- Infiltration learning - problems encountered during SQL injection - explanation of sort=left (version(), 1) - understanding of order by followed by string
- Introduction to ARCS Model
猜你喜欢

How to use RPA to achieve automatic customer acquisition?

信通院举办“业务与应用安全发展论坛” 天翼云安全能力再获认可

Deep learning has a new pit! The University of Sydney proposed a new cross modal task, using text to guide image matting
Conversion between flat array and JSON tree

Passerelle de service pour les microservices

Use Fiddler to simulate weak network test (2g/3g)

It smells good. Since I used Charles, Fiddler has been completely uninstalled by me

《7天学会Go并发编程》第六天 go语言Sync.cond的应用和实现 go实现多线程联合执行

爬虫笔记(2)- 解析

Service gateway of microservices
随机推荐
The karsonzhang/fastadmin addons provided by the system reports an error
Flask application case
爬虫笔记(1)- urllib
二维数组中修改代价最小问题【转换题意+最短路径】(Dijkstra+01BFS)
Acwing weekly contest 57- digital operation - (thinking + decomposition of prime factor)
雪糕还是雪“高”?
Yarn中RMApp、RMAppAttempt、RMContainer和RMNode状态机及其状态转移
Common APIs (Methods) for scope -number and string
Introduction to MySQL operation (IV) -- data sorting (ascending, descending, and multi field sorting)
Crawler notes (2) - parse
PCIe knowledge point -008: structure of PCIe switch
扁平数组和JSON树的转换
Consumer finance app user insight in the first quarter of 2022 - a total of 44.79 million people
regular expression
2022年第一季度“广州好人”刘磊峰:具有强烈的诚信意识和食品安全意识
《7天學會Go並發編程》第7天 go語言並發編程Atomic原子實戰操作含ABA問題
改善深层神经网络:超参数调试、正则化以及优化(三)- 超参数调试、Batch正则化和程序框架
MONTHS_ Between function use
How to open an account for agricultural futures? How much is the handling charge for opening an account for futures? Who can give you a preferential handling charge?
Système de gestion - itclub (II)