【问题标题】:How to Correlate one variable to all other variables on R [duplicate]如何将一个变量与R上的所有其他变量相关联[重复]
【发布时间】:2013-12-06 06:32:06
【问题描述】:

我想将一个变量(比如酪氨酸)与 R 上的所有其他变量(大约 200 种其他代谢物,如尿素、葡萄糖、肌苷等)关联起来,但我不知道该怎么做。我是 R 新手。

我已经学会了配对功能,但是它将指定范围内的每个代谢物配对。

谢谢!

【问题讨论】:

    标签: r variables correlation


    【解决方案1】:

    由于您提到“代谢物”,我假设您的指标是“浓度”,例如你有一个矩阵,称之为data,每个代谢物有一列,每个样品有一列。

    所以,是这样的:

    # just generates example - YOU SHOULD PROVIDE THIS!!!
    data <- data.frame(tyrosine=1:10 + rnorm(10,sd=2), 
                       urea    =2*1:10 + rnorm(10,sd=2),
                       glucose =30 -2*1:10 +rnorm(10,sd=2),
                       inosine =25 -1:10 + rnorm(10,sd=2))
    data
         tyrosine      urea  glucose  inosine
    1  -0.2529076  5.023562 29.83795 26.71736
    2   2.3672866  4.779686 27.56427 22.79442
    3   1.3287428  4.757519 24.14913 22.77534
    4   7.1905616  3.570600 18.02130 20.89239
    5   5.6590155 12.249862 21.23965 17.24588
    6   4.3590632 11.910133 17.88774 18.17001
    7   7.9748581 13.967619 15.68841 17.21142
    8   9.4766494 17.887672 11.05850 16.88137
    9  10.1515627 19.642442 11.04370 18.20005
    10  9.3892232 21.187803 10.83588 16.52635
    

    要获取相关系数,只需键入:

    cor(data)
               tyrosine       urea    glucose    inosine
    tyrosine  1.0000000  0.8087897 -0.9545523 -0.8512938
    urea      0.8087897  1.0000000 -0.8577782 -0.8086910
    glucose  -0.9545523 -0.8577782  1.0000000  0.8608000
    inosine  -0.8512938 -0.8086910  0.8608000  1.0000000
    

    要生成散点图矩阵,只需键入:

    pairs(data)
    

    以后,请提供一个可以导入 R 的数据示例。

    【讨论】:

    • 不确定你是如何/为什么得到 -1
    • 对不起,我试图包含一个数据示例,但它使评论太长......我要问的是肌苷之后还有另外 100 个变量,我没有不想在代码中列出每一个。基本上,我只对酪氨酸是否与任何其他变量共变感兴趣。有什么快速的方法吗?
    • 当然,cor(data$tyrosine,data) 做到了。
    • @jlhoward 不再工作:“cor(data$sus, data) 中的错误:'y' 必须是数字”。你知道一种新方法吗?
    • @gal007 检查数据中的所有值是否都是数字。您不能对标称数据运行此操作。如果有标称值,请创建一个您希望使用的列名列表,然后针对该列表运行 cor()。 numeric_column_names&lt;- c("col1", "col2") 然后运行 ​​cor(data$tyrosine, data[numeric_column_names])
    【解决方案2】:

    在以下示例中,我只是将包含所有变量的数据框拆分为两个矩阵。这些可以输入到cor函数中来获取你的相关值:

    set.seed(1)
    n=20
    df <- data.frame(tyrosine=runif(n), urea=runif(n), glucose=runif(n), inosine=runif(n))
    df
    
    COR <- cor(as.matrix(df[,1]), as.matrix(df[,-1]))
    COR
    #           urea    glucose    inosine
    #[1,] -0.2373854 -0.3672984 -0.3393602
    

    【讨论】:

      【解决方案3】:

      类似于 Marc 在框中使用的应用和列名

      > set.seed(1)
      > n=20
      > df <- data.frame(tyrosine=runif(n), urea=runif(n), glucose=runif(n), 
        inosine=runif(n))
      
      > apply(df,2, function(col)cor(col, df$tyrosine))
      
      tyrosine       urea    glucose    inosine 
      1.0000000 -0.2373854 -0.3672984 -0.3393602 
      

      这是一个很好的问题,也是了解合理大小数据的模式,因为如果您只希望酪氨酸 cors(OP 专门要求的)只计算酪氨酸 cors(n 时间 + 空间),而不是全部与全部,它是有效的(~n^2 时间 + 空间)。

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 1970-01-01
        • 2019-06-19
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2021-09-09
        相关资源
        最近更新 更多