r语言 - 如何去除相关图矩阵中不重要的变量



我有一个有29个变量的数据集,我试图看看它们是如何使用相关的cor().

这给了我一个29X29矩阵,其中包含每个乘积对的p值。这些相关性中的大多数是不显著的,我只想保留p值对2个特定变量显著的实例。

这是一个简单的例子,假设我只想保留与mpg显著相关的变量,例如cor_pmat(mpg, other_variables) < 0.05)

library(ggcorrplot)
p.mat <- cor_pmat(mtcars)
corr <- round(cor(mtcars), 2)

有什么提示吗?

这是一个在数据帧上进行选择的函数:

library(dplyr)
library(rlang)
library(broom)
select_via_cor_sig <- function(.data, x, p.value, ...) {
x <- rlang::ensym(x)
.data %>%
dplyr::select(-dplyr::all_of(x)) %>%
names() %>%
lapply(function(candidate) {
c(rlang::as_string(x), candidate)
}) -> ls_pairs

ls_pairs %>% 
lapply(function(vec_pair) {
x <- .data[[vec_pair[1]]]
y <- .data[[vec_pair[2]]]
cor.test(x, y, ...) %>%
broom::tidy() %>%
dplyr::mutate(v1 = vec_pair[1], v2 = vec_pair[2]) %>%
dplyr::select(v1, v2, dplyr::everything())
}) %>%
dplyr::bind_rows() -> tbl_tidy_cor_test

tbl_tidy_cor_test %>% 
dplyr::filter(p.value < {{p.value}}) %>%
dplyr::pull(v2) %>% 
c(rlang::as_string(x), .) -> keepers

.data %>% 
dplyr::select(dplyr::all_of(keepers))
}
# use it like so:
select_via_cor_sig(mtcars, mpg, 0.001)

如果你想要p值矩阵,你可以在这个函数产生的子集数据帧上运行它。

最新更新