在使用 corrr 绘图之前指定相关强度
Posted
技术标签:
【中文标题】在使用 corrr 绘图之前指定相关强度【英文标题】:Specifying Correlation strength prior to plotting using corrr 【发布时间】:2017-03-26 16:01:42 【问题描述】:我有一个相关性数据框,我试图只播种 10% 以上的相关性
然后我想使用corrr
包来绘制它
我获取我的数据集的相关性,然后过滤到绝对值 >.1 但它在网络图段上失败
UseMethod("network_plot") 中的错误: 没有适用于“network_plot”的方法应用于“c('tbl_df', 'tbl', 'data.frame')”类的对象
library(tidyverse)
library(corrr)
# Create the Dataframe
mydf <- data.frame(a=sample(rnorm(n = 100,sd = 15),replace=TRUE),
b=sample(rnorm(n = 100,sd = 15),replace=TRUE),
c=sample(rnorm(n = 100,sd = 15),replace=TRUE),
d=sample(rnorm(n = 100,sd = 15),replace=TRUE),
e=sample(rnorm(n = 100,sd = 15),replace=TRUE),
f=sample(rnorm(n = 100,sd = 15),replace=TRUE))
test <- mydf %>%
correlate(method = "spearman") %>%
gather("n", "corr", 2:7, na.rm = TRUE) %>%
filter(abs(corr) > 0.1) %>%
spread(rowname,corr) %>%
network_plot(legend = TRUE)
我在 documentation 的包中看到,您可以指定您希望可视化的相关性,但是即使我要求不包含它们,它似乎仍然会打印标签,这就是为什么我去了聚集/传播路线
network_plot(min_cor = .2, legend = TRUE)
感谢您的宝贵时间
【问题讨论】:
您在correlate
调用和network_plot
之间的某处丢失了cor_df
类。 test = mydf %>% ... %>% spread(rowname, corr)
也是如此,然后是 class(test) = c("cor_df", class(test))
,然后是 network_plot(test, legend = TRUE)
。
你应该也可以强制调用network_plot.cor_df
:test = mydf %>% ... %>% corrr:::network_plot.cor_df(legend = TRUE)
还可以考虑在corrr
GitHub 页面上将其归档为issue,因为应该有一个network_plot.default
方法,但似乎没有。
另外,我认为您需要spread(n, corr)
而不是spread(rowname, corr)
才能使network_plot
正常工作。
嗨@epi,我改变了传播,但不幸的是它没有工作
【参考方案1】:
感谢您通过电子邮件提醒我注意此问题(我将在有更多时间时单独回复)。我现在就写一个快速的解决方案。
这是一个有趣的问题。据我所知,您希望完全排除与任何其他变量不相关的任何变量。
如您所述,指定 min_cor
将停止绘制路径,但不会阻止变量本身。
我可能会在 GitHub 页面上添加一个问题,并在未来尝试解决它。现在,这里有一个在 purrr 包的帮助下的变通方法。
library(corrr)
library(purrr)
mydf <- data.frame(a=sample(rnorm(n = 100,sd = 15),replace=TRUE),
b=sample(rnorm(n = 100,sd = 15),replace=TRUE),
c=sample(rnorm(n = 100,sd = 15),replace=TRUE),
d=sample(rnorm(n = 100,sd = 15),replace=TRUE),
e=sample(rnorm(n = 100,sd = 15),replace=TRUE),
f=sample(rnorm(n = 100,sd = 15),replace=TRUE))
# Create the correlation data frame
rdf <- mydf %>% correlate(method = "spearman")
# Identify which variables to keep
to_keep <- map_lgl(rdf, ~ !is.numeric(.) || any(abs(.) > .1))
to_keep <- names(to_keep)[!is.na(to_keep)]
# Create the network plot
rdf %>%
focus_(.dots = to_keep, mirror = TRUE) %>%
network_plot(legend = TRUE, min_cor = .1)
如果这不起作用,您可能需要通过devtools::install_github("drsimonj/corrr")
安装最新开发版的 corrr
【讨论】:
嗨@Simon Jackson。感谢您的回复。当我运行此代码时,它会在图表上绘制行名 a-f,但它似乎并未绘制相关性本身 - 标签之间的线条表示关系 @JohnSmith 我认为这可能是两件事之一。 (1) 鉴于相关性接近于零 (.1),无论如何它们可能几乎看不到。 (2) 有时您需要缩放(即,如果使用 RStudio,请单击绘图面板上的缩放按钮)以显示路径。 嗨@Simon Jackson。很抱歉延迟回复您。这正是我想要完成的。你说的对。似乎相关性太低而无法在图表中看到。非常感谢您的宝贵时间以上是关于在使用 corrr 绘图之前指定相关强度的主要内容,如果未能解决你的问题,请参考以下文章