基于 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 创建
- 您首先按因子水平的所有组合对数据进行分组
- 然后你 "nest" 数据,即对于第 1 步中的每个组,创建一个 "subset" 数据框并将其保存在名为
data
的列表变量中(默认姓名)
- 创建一个新的列表变量
cor_test
,它使用每个子集 中的变量 trial1
和 trial2
保存 cor.test()
调用的结果
- 创建新变量,
correlation
和 p.value
,它们只是从保存在列表中的每个对象中提取 r (estimate
) 和 p (p.value
) 元素-变量 cor_test
.
这是一种非常灵活的方法,您只需定义要计算相关性的变量的名称(trial1
和 trial2
)。
我是 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 创建- 您首先按因子水平的所有组合对数据进行分组
- 然后你 "nest" 数据,即对于第 1 步中的每个组,创建一个 "subset" 数据框并将其保存在名为
data
的列表变量中(默认姓名) - 创建一个新的列表变量
cor_test
,它使用每个子集 中的变量 - 创建新变量,
correlation
和p.value
,它们只是从保存在列表中的每个对象中提取 r (estimate
) 和 p (p.value
) 元素-变量cor_test
.
trial1
和 trial2
保存 cor.test()
调用的结果
这是一种非常灵活的方法,您只需定义要计算相关性的变量的名称(trial1
和 trial2
)。