为什么斯皮尔曼在zscore上产生不同的结果?

为什么斯皮尔曼在zscore上产生不同的结果?,r,correlation,pearson,R,Correlation,Pearson,嗨,看来斯皮尔曼相关性应该产生相同的结果,不管它是核心还是原始。这里有两个例子 然而,对于这个例子,这两种相关性是不同的,我想知道发生了什么 df = read.csv("https://www.dropbox.com/s/jdktw9jugzm97v3/test.csv?dl=1", head=F) cor(df[, 1], df[,2], method="spearman") cor(scale(df[, 1]), scale(df[,2]), method="spearman")

嗨,看来斯皮尔曼相关性应该产生相同的结果,不管它是核心还是原始。这里有两个例子

然而,对于这个例子,这两种相关性是不同的,我想知道发生了什么

df = read.csv("https://www.dropbox.com/s/jdktw9jugzm97v3/test.csv?dl=1", head=F)

cor(df[, 1], df[,2], method="spearman")
cor(scale(df[, 1]), scale(df[,2]), method="spearman")

# 0.8462699 vs 0.8905341
有趣的是,皮尔森给出了同样的结果。我想知道我在做什么,或者我在想什么

编辑: 另外,我认为这可能是因为领带,所以我也使用了kendall,它应该处理领带,但是它也给出了不同的结果

cor(as.matrix ( df[, 1] ) , as.matrix ( df[,2] ), method="kendall" )
cor(scale(as.matrix ( df[, 1] )), scale(as.matrix ( df[,2] )),  method="kendall")

谢谢

Hi如上所述,这是由于舍入误差造成的。没有人回答,但我想补充一点,以防其他人遇到类似的问题。所以当我四舍五入到15-16位时,结果是一样的

df = read.csv("https://www.dropbox.com/s/jdktw9jugzm97v3/test.csv?dl=1", head=F)

df = round(df, digits = 15)

cor(as.matrix ( df[, 1] ) , as.matrix ( df[,2] ), method="spearman" )
cor(scale(df[, 1] ), scale(df[,2] ),  method="spearman")

谢谢大家的帮助

我不确定这里发生了什么,但我注意到,如果你在两列中都添加一个小常数(我尝试在一列中添加1100,-1,然后在另一列中添加1,然后从另一列中减去1),则相关性为.9157,无论你是否缩放它。所以我想知道这是否与数值不稳定性有关;这两列都有非常接近0的条目,这些条目可能会出错。斯皮尔曼的相关性当然应该是尺度不变的,因为重新缩放不会改变等级。@JosephClarkMcIntyre是的,太奇怪了,我还使用了cor.test和ties,
cor.test(df[,1],df[,2],method=“spearm”,exact=FALSE)cor.test(scale(df[,1]),scale(df[,2]),method=“spearm”,exact=FALSE)
仍然不同,以确保这是一个舍入错误。数据点的数量级小于
.Machine$double.eps
,并且在数据中的数量级范围超过20个。您可以使用以下伪数据生成
df=data.frame(x=(rnorm(20,10,2)+(1:20)/2)*10^(-18:1),y=rnorm(20,20,3)+(1:20)/3)
@dww谢谢您的回答。当我四舍五入到15位时,结果是一样的。