前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R优雅绘制小样本间相关性网络图

R优雅绘制小样本间相关性网络图

作者头像
R语言数据分析指南
发布2024-01-23 13:57:35
3950
发布2024-01-23 13:57:35
举报
文章被收录于专栏:R语言数据分析指南

欢迎关注R语言数据分析指南

❝最近有观众老爷询问绘制相关性分析网络图中的报错,本节就来解答如何处理这个问题,整个过程仅参考。希望对各位观众老爷能有所帮助。「数据代码已经整合上传到会员交流群」,购买过小编VIP的朋友可在所加的会员群内获取下载,有需要的朋友可关注文末介绍加入VIP交流群。 ❞

❝给予长期支持我们的忠实读者们一个特别待遇,我们提供了一个持续更新的数据可视化会员文档库。「这份文档包含数百个数据可视化文档,是学习和提升技能的理想选择」。一次性付费,您就可以长期享受到持续更新的资源,有效地提升您的R语言应用能力。 ❞

「2024更新的绘图内容同时包含数据+代码+markdown注释文档+文档清单」

具体问题如下
代码语言:javascript
复制
Error in rcorr(t(df), type = "spearman") : must have >4 observations

报错信息表明rcorr函数在尝试计算Spearman相关性时遇到了问题,原因是数据中的某些变量(列)的观测值数量不足以进行相关性分析。具体来说rcorr 函数要求每个变量至少有5个观测值来计算相关性。

解决方案

❝由于在进行实验设计时,通常多为设置3重复,若我们想分析每一组内不同样本之间的相关性就会频繁遇到这种问题,使用内置的R包则无法解决问题,因为需要我们进行自定义分析函数来进行相关性分析. ❞

加载R包

代码语言:javascript
复制
library(tidyverse)
library(ggraph)
library(Hmisc)
library(igraph)

加载R函数

代码语言:javascript
复制
source("corrr.R")
代码语言:javascript
复制
df <- read_tsv("gene.xls") %>% column_to_rownames(var="id") %>% 
  filter(rowSums(.) >= 2)

计算相关性

代码语言:javascript
复制
df_cor <- corrr(t(df))
df_cor_r <- df_cor$r
df_cor_p <- df_cor$P
df_cor_r[df_cor_p>0.05|abs(df_cor_r)<0.7] = 0

将邻接矩阵转换为边列表

代码语言:javascript
复制
edge_list <- df_cor_r %>%
  as_tibble(rownames = "from") %>%
  pivot_longer(cols = -from, names_to = "to", values_to = "weight") %>%
  filter(weight != 0, from != to) # 过滤掉权重为0的边和自环

创建图形

代码语言:javascript
复制
df_igraph <- graph_from_data_frame(edge_list, directed = FALSE)

提取边的权重

代码语言:javascript
复制
df.weight <- E(df_igraph)$weight

edge_attributes <- tibble(weight = df.weight) %>%
  mutate(
    color = case_when(
      weight > 0 ~ "#E6956F",
      weight < 0 ~ "#788FCE",
      TRUE ~ "gray"
    ),
    width = abs(weight) * 2.5
  )

构建点数据

代码语言:javascript
复制
node_sizes <- df %>%
  rowSums() %>%
  enframe(name = "name", value = "size") %>%
  mutate(size = log10(size) * 2.5) %>%
  filter(name %in% V(df_igraph)$name)

数据可视化

代码语言:javascript
复制
portraits <- create_layout(df_igraph, layout = 'circle') 

ggraph(df_igraph, layout = "circle")+
  geom_edge_arc(aes(color=color),edge_width = 0.4,show.legend = F,
                curvature=0.2)+
  geom_node_point(aes(size=size),shape = 21,show.legend =F,fill="#788FCE")+
  scale_edge_colour_manual(values=c("#788FCE","red"))+

  theme_graph()+
  expand_limits(x = c(-1.2, 1.2), y = c(-1.2, 1.2))

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
    • 具体问题如下
      • 解决方案
      • 加载R包
      • 加载R函数
      • 计算相关性
      • 将邻接矩阵转换为边列表
      • 创建图形
      • 提取边的权重
      • 构建点数据
      • 数据可视化
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档