r - 如何删除相关图矩阵中的无关紧要的变量
问题描述
我有一个包含 29 个变量的数据集,我尝试使用
cor()
.
这给了我一个 29X29 矩阵,其中包含每个产品对的 p 值。这些相关性中的大多数都是微不足道的,我只想保留 p 值对 2 个特定变量显着的实例。
这是一个玩具示例,假设我只想维护与mpg
, ig,显着相关的变量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 值矩阵,您可以在此函数生成的子集数据帧上运行它。
推荐阅读
- python - Tensorflow 强化学习 RNN 在使用 GradientTape 优化后返回 NaN
- latex - 仅对乳胶中的某些列进行分组
- python - Python 中的位运算符 &
- maps - ggplot2中的地图图层问题
- spring-batch - 使用 @Transactional(propagation = NOT_SUPPORTED) 插入 Spring Batch 集成测试的测试记录不会回滚
- typescript - 根据某些场景将数组中的字符串添加在一起 - 打字稿
- php - 如果数组的键与另一个数组的键匹配,如何替换数组中的元素?
- css - 在 aa ion-grid 中设置相同尺寸的离子卡
- arrays - 在新模块中使用来自另一个模块的非公共数组
- angular - 从 Angular 路由器模块中访问 :id 属性