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

correlation of two ordinal variables in R

我想检验两个序数变量的斯皮尔曼相关性。

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

我总是"Error in cor(x, y) : 'x' must be numeric"

正确的做法是什么?

您遇到了一些问题:

  1. 使用 ordered 会产生一个因子,你可以使用 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")

两种方法:

  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