创建肯德尔相关矩阵
Posted
技术标签:
【中文标题】创建肯德尔相关矩阵【英文标题】:creating kendall correlation matrix 【发布时间】:2022-01-18 22:09:43 【问题描述】:我的数据如下所示:
共 38 列。 数据代码示例:
df <- structure(
list(
Christensenellaceae = c(
0.010484508,
0.008641566,
0.010017172,
0.010741488,
0.1,
0.2,
0.3,
0.4,
0.7,
0.8,
0.9,
0.1,
0.3,
0.45,
0.5,
0.55
),
Date=c(27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28),
Treatment = c(
"Treatment 1",
"Treatment 1",
"Treatment 1",
"Treatment 1",
"Treatment 2",
"Treatment 2",
"Treatment 2",
"Treatment 2",
"Treatment 1",
"Treatment 1",
"Treatment 1",
"Treatment 1",
"Treatment 2",
"Treatment 2",
"Treatment 2",
"Treatment 2"
)
),class = "data.frame",
row.names = c(NA,-9L)
)
我想做的是为每列(治疗和日期除外)在治疗类型(总共 10 个,但示例中为 2 个)之间(数据没有线性行为),因此总共有 36 个相关矩阵尺寸为 1010(此处为 22)。
这是我的代码:
res2 <- cor(as.matrix(data),method ="kendall")
但我得到了错误:
Error in cor(data, method = "kendall") : 'x' must be numeric
有什么办法可以解决这个问题吗?谢谢:)
【问题讨论】:
【参考方案1】:您可以使用tidyverse
方法来做到这一点,方法是首先进行一些数据整理,然后使用correlate
成对计算每个变量组合的相关性。
library(corrr)
library(tidyverse)
df |>
# Transform data into wide format
pivot_wider(id_cols = Date,
names_from = Treatment,
values_from = -starts_with(c("Treatment", "Date"))) |>
# Unnest lists inside each column
unnest(cols = starts_with("Treatment")) |>
# Remove Date from the columns
select(-Date) |>
# Correlate all columns using kendall
correlate(method = "kendall")
# A tibble: 2 x 3
# term `Treatment 1` `Treatment 2`
# <chr> <dbl> <dbl>
#1 Treatment 1 NA 0.546
#2 Treatment 2 0.546 NA
【讨论】:
如果不是只有 values_from = Christensenellaceae(1 列)我有多个列 36 我应该怎么做?@Jonathan V. Solórzano,如果我有 10 种类型,我应该把它们全部写成 unnest(cols = c(Treatment 1
, Treatment 2
))
我应该在 values_from = Christensenellaceae 中为多列写:values_from = colnames(data)
我编辑了答案,以便更轻松地选择多个列
Stats::cor(x = x, y = y, use = use, method = method) 中的错误:'x' 必须是数字另外:有 36 个警告(使用 warnings()看到他们)
是不是因为处理栏是字符?以上是关于创建肯德尔相关矩阵的主要内容,如果未能解决你的问题,请参考以下文章