【问题标题】:correlation of two ordinal variables in RR中两个序数变量的相关性
【发布时间】:2017-08-20 22:01:11
【问题描述】:

我想测试两个序数变量的 spearman 相关性。

x=c(1,2,3)
y=c(4,3,6)
x=ordered(x)
y=ordered(y)
cor(x,y,methods="spearman")

我总是得到“cor(x, y) 中的错误:'x' 必须是数字”

这样做的正确方法是什么?

【问题讨论】:

    标签: r correlation ordinal


    【解决方案1】:

    两种方法:

    1. 使用as.numeric

      x=c(1,2,3)
      y=c(4,3,6)
      x=ordered(x)
      y=ordered(y)
      cor(as.numeric(x), as.numeric(y), method="spearman")
      [1] 0.5
      

    请注意,这将 x 和 y 简单地视为连续数字。它把他们当作等级。

    as.numeric(y)
    [1] 2 1 3
    

    此方法将允许您忽略 NA 值。

    x=c(1,2,3, NA)
    y=c(4,3,6, 7)
    x=ordered(x)
    y=ordered(y)
    cor(as.numeric(x), as.numeric(y), 
        method="spearman", use="pairwise.complete.obs")
    [1] 0.5
    
    1. 您可以使用包pspearman 来处理有序因子。

      x=c(1,2,3)
      y=c(4,3,6)
      x=ordered(x)
      y=ordered(y)
      
      library(pspearman)
      spearman.test(x,y)
      
      
      Spearman's rank correlation rho
      
      data:  x and y
      S = 2, p-value = 1
      alternative hypothesis: true rho is not equal to 0
      sample estimates:
      rho 
      0.5 
      

    或者如果你想减少一些输出,你可以使用:

    spearman.test(x,y)$estimate
    rho 
    0.5 
    

    【讨论】:

    • 再说一次,我的观点是 x 和 y 都是序数结果,这意味着它们不是连续的......我知道 Spearman 等级相关可以处理序数变量,但现在不知道如何
    • 我的真正问题是 x 和 y 都有一些缺失值,所以理想情况下我想坚持使用可以指定“pairwise.complete.obs”的 cor() 函数。我很欣赏pspearman,但它无法处理丢失数据的情况
    • @Sheldon 第一个使用cor的版本成功忽略了NA。
    • 是的,这正是我想要的。谢谢!
    【解决方案2】:

    您遇到了一些问题:

    1. 使用有序会创建一个因子,你可以使用rank
    2. 你打错了,应该是method=...而不是methods=...

    --

    x=c(1,2,3)
    y=c(4,3,6)
    x=rank(x)
    y=rank(y)
    cor(x,y,method="spearman")
    

    【讨论】:

    • 使用排序会改变数据。当 y=3 时最初 x=2,但当 y=4 时不是 x=2
    • 另外,您的做法是将 x 和 y 视为连续变量,但事实是它们是序数...
    • @Sheldon 那么使用排名怎么样?
    猜你喜欢
    • 2016-04-22
    • 2019-05-27
    • 2019-02-27
    • 2011-12-06
    • 1970-01-01
    • 2019-03-10
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多