我正在尝试使用scipy.stats.spearmanr和手动使用公式:

问题描述 投票:0回答:1

Method1排名:

用户ID:[301,597,414,477,57,369,206,535,590,418]enter image description here rank:[1、2、3、4、5、6、7、8、9、10]

Method2排名:

用户ID:[301、477、19、120、75、57、597、160、577、369]

rank:[1、2、3、4、5、6、7、8、9、10]

然后,我使用scipy.stats.spearmanr应用了Spearman的等级相关性:

from scipy.stats import spearmanr method1 = [301, 597, 414, 477, 57, 369, 206, 535, 590, 418] method2 = [301, 477, 19, 120, 75, 57, 597, 160, 577, 369] coef, _ = spearmanr(method1, method2) print(f"Spearman coefficient: {coef}") Spearman coefficient: 0.2727

手动计算: 要验证,我使用两个列表之间的共同用户手动计算ρ。

用户id

rank(方法1)

rank(方法2)

(d_i = r_1 -r_2)
(d_i^2)

301110059727-52547742245756-11369610-416我们只有5个普通用户,n =5。使用我获得的公式我得到了Spearman系数(𝜌)= -1.3 Spearman系数的范围超出了 [ - 1 ,,,, 1 这是给出的 但是,scipy.stats.spearmanr()给出0.2727,在范围内,但显着不同。 scipy.stats.spearmanr如何处理丢失值或内部不匹配的列表?它是否仅对共同元素进行排名,还是考虑所有元素? 提前感谢!为什么我的手动计算不正确?
为什么我的手动计算不正确?我在处理失踪用户或排名的方式上是错误的吗? 我感谢有关我的手动方法不正确的任何指导以及scipy.stats.spearmanr在内部处理排名。
手动计算如果给出超出范围的结果,则必须不正确。 除了更多,似乎您期望Scipy实现以某种方式解释您提供的数据,但事实并非如此。看起来您想要它:

测量您正在通过一些其他条件来传递按排序顺序排列顺序的ID列表

在两个列表之间进行重复的外观

估计等级之间的相关系数。

它没有。它正在计算您提供的数字的相关系数。

我认为您需要通过它:

x = [1, 2, 4, 5, 6] y = [1, 7, 2, 6, 10]

python scipy
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.