R中两个序数变量的相关性

时间:2017-03-28 01:39:55

标签: r correlation ordinal

我想测试两个序数变量的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'必须是数字”

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

2 个答案:

答案 0 :(得分: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
    
  2. 请注意,这是将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 
      
    2. 或者,如果您想减少部分输出,可以使用:

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

答案 1 :(得分:0)

你遇到了一些问题:

  1. 使用ordered会创建一个因子,您可以使用rank
  2. 您输错了,method=...不是methods=...
  3. -

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