首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >先锋r的定义

先锋r的定义
EN

Stack Overflow用户
提问于 2022-05-26 19:31:29
回答 1查看 54关注 0票数 1

为了测试我对先锋和珠光体的理解,我比较了两种计算先锋的方法,结果应该是相同的。令人惊讶的是,结果是不同的。

代码语言:javascript
运行
复制
import torch
from scipy.stats import pearsonr, spearmanr

x = torch.normal(1, 1, (10,))
y = torch.normal(1, 1, (10,))
_, x_rank = x.sort()
_, y_rank = y.sort()

print(
    spearmanr(x, y),
    pearsonr(x_rank, y_rank)
)

若要复制结果,请使用以下xy。这应该是0.263级和0.139级的珠光体。

代码语言:javascript
运行
复制
x = torch.tensor([ 1.7443, -0.7889,  0.4698,  1.2080,  0.8847, -0.4490,  1.2561,  1.5188,
        -1.0031,  1.4753])
y = torch.tensor([ 1.2675,  1.8317,  1.6912, -0.2964,  2.0014,  1.1092,  2.7958,  2.6034,
        -0.0528, -2.2956])

他们为什么不一样?难道先锋不被定义为x级和y级以上的珠光体吗?我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 23:49:25

首先,为了澄清起见,皮尔逊斯皮尔曼的相关性是不一样的,但是它们可以是相等的。在完全线性关系的情况下。前者是线性关系的测度,后者是单调关系的测度。

其次,在排序之前,https://pytorch.org/docs/stable/generated/torch.sort.html#torch.sort不提供排序,而是提供原始数据的索引。您需要的是排序后的原始数据的索引,但按原始数据的顺序,即排名。

你可以这样做:

代码语言:javascript
运行
复制
import torch
from scipy.stats import pearsonr, spearmanr

x = torch.tensor([ 1.7443, -0.7889,  0.4698,  1.2080,  0.8847, -0.4490,  1.2561,  1.5188,
        -1.0031,  1.4753])
y = torch.tensor([ 1.2675,  1.8317,  1.6912, -0.2964,  2.0014,  1.1092,  2.7958,  2.6034,
        -0.0528, -2.2956])

x_sorted, x_raw_indx = x.sort()
y_sorted, x_raw_indx = y.sort()

x_ranked = [int((x_sorted == value).nonzero(as_tuple=True)[0]) for value in x]
y_ranked = [int((y_sorted == value).nonzero(as_tuple=True)[0]) for value in y]

spearmanr(x, y) , pearsonr(x_ranked, y_ranked)

#(SpearmanrResult(correlation=0.13939393939393938, pvalue=0.7009318849100584),
# (0.1393939393939394, 0.7009318849100588))

正如评论(@simon)中提到的那样,获得排名的一种更清洁的方法是:

代码语言:javascript
运行
复制
x_ranked = x.argsort().argsort()
y_ranked = y.argsort().argsort()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72397098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档