基于 R 中具有 p 值的多列值创建相关矩阵

Create a correlation matrix based on multiple column values with p-values in R

我是 R 的新手,我正在尝试创建一个也将包含 p 值的相关矩阵。

我遇到的主要问题是根据三个因素的同一性计算特定数值变量的相关性。

我的数据看起来像这样

    data.frame(
      cond = c("low", "medium", "high"),
      group = c("gr1", "gr2", "gr3"),
      rand = c("yes", "no"),
      trial1 = rnorm(30),
      trial2 = rnorm(30))

我想为 cond、group 和 rand 中的每个唯一值关联 trial1 和 trial2。本质上,对于这些因素的每个级别,我想得到一个 r 值和 p 值,并将它们保存在一个矩阵中。

我尝试了很长时间 - 通过使用像这样的三个逻辑测试来提取我想要关联的观察结果(df$cond == "low") & (df$group == 'gr1') & (df&rand == 'yes')。这给了我我需要的东西,但是代码很长并且没有将值保存在矩阵中。

我以前从未尝试过 for 循环,所以如果有人知道如何做或其他有效的方法,我将不胜感激。

谢谢!

我不太明白你想做什么,但这里是你如何为前三个变量的每个可能组合估计具有 p 值的相关矩阵

by(df[,c("trial1","trial2")],list(df$cond,df$group,df$rand),function(x){
  return(list(cor(x),cor.test(x[,1],x[,2])$p.value))
})
library(dplyr)
library(tidyr)
library(purrr)

d <- data.frame(
  cond = c("low", "medium", "high"),
  group = c("gr1", "gr2", "gr3"),
  rand = c("yes", "no"),
  trial1 = rnorm(30),
  trial2 = rnorm(30)
)

x <- d %>% 
  group_by(cond, rand, group) %>% 
  nest() %>% 
  mutate(
    cor_test = map(data, function(i) cor.test(i$trial1, i$trial2)),
    correlation = map_dbl(cor_test, ~ .x$estimate),
    p.value = map_dbl(cor_test, ~ .x$p.value)
  )

x
#> # A tibble: 6 x 7
#>   cond   rand  group data             cor_test correlation p.value
#>   <fct>  <fct> <fct> <list>           <list>         <dbl>   <dbl>
#> 1 low    yes   gr1   <tibble [5 x 2]> <htest>      -0.0329   0.958
#> 2 medium no    gr2   <tibble [5 x 2]> <htest>       0.489    0.403
#> 3 high   yes   gr3   <tibble [5 x 2]> <htest>      -0.413    0.490
#> 4 low    no    gr1   <tibble [5 x 2]> <htest>      -0.240    0.697
#> 5 medium yes   gr2   <tibble [5 x 2]> <htest>      -0.144    0.817
#> 6 high   no    gr3   <tibble [5 x 2]> <htest>       0.0361   0.954

reprex package (v0.3.0)

于 2019-08-23 创建
  1. 您首先按因子水平的所有组合对数据进行分组
  2. 然后你 "nest" 数据,即对于第 1 步中的每个组,创建一个 "subset" 数据框并将其保存在名为 data 的列表变量中(默认姓名)
  3. 创建一个新的列表变量 cor_test,它使用每个子集
  4. 中的变量 trial1trial2 保存 cor.test() 调用的结果
  5. 创建新变量,correlationp.value,它们只是从保存在列表中的每个对象中提取 r (estimate) 和 p (p.value) 元素-变量 cor_test.

这是一种非常灵活的方法,您只需定义要计算相关性的变量的名称(trial1trial2)。