[英]How to remove insignificant variables in a correlogram matrix
我有一個包含 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)
關於我該怎么做的任何提示?
這是數據幀上的 function 到 select:
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 值矩陣,你可以在這個 function 生成的子集數據幀上運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.