【问题标题】: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

有什么办法可以解决这个问题吗?谢谢:)

【问题讨论】:

    标签: r matrix correlation


    【解决方案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()看到他们)
    • 是不是因为处理栏是字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多