我想测试两个序数变量的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'必须是数字”
这样做的正确方法是什么?
答案 0 :(得分: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
您可以使用将处理有序因子的包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
答案 1 :(得分:0)
你遇到了一些问题:
rank
method=...
不是methods=...
-
x=c(1,2,3)
y=c(4,3,6)
x=rank(x)
y=rank(y)
cor(x,y,method="spearman")