scipy - 在计算 Spearmans 等级相关性(scipy)之前,我应该对我的序数变量进行编码吗?
问题描述
我正在使用 scipy.stats.spearmanr 来计算 2 个序数变量的 Spearman 等级相关性。我不确定是否对它们进行编码。我两种方式都试过了,不管怎样,这个函数似乎都会吐出结果。所以我不确定该走哪条路。
from scipy import stats
# dummy data comparing one ordinal variable with another
print(stats.spearmanr(['always','never','sometimes','always'], ['high','medium','low','low']))
>> SpearmanrResult(correlation=0.5000000000000001, pvalue=0.4999999999999999)
# encoding
print(stats.spearmanr([3,1,2,3], [3,2,1,1]))
>> SpearmanrResult(correlation=0.05555555555555556, pvalue=0.9444444444444444)
解决方案
除非数据的字母顺序与预期顺序相同,否则您应该对变量进行编码。
在内部,SciPy 正在订购您的数据以进行测试。如果是整数,它们的顺序显然等于数据的值,例如1 < 2 < 3
. 如果是字符串,它们的顺序很可能是它们的字母顺序,例如a < b < c
.
在您的情况下,预期的订单可能是
never < sometimes < always
low < medium < high
但是,按字母顺序对这些值列表进行排序会产生(很可能是不正确的)顺序
always < never < sometimes
high < low < medium
如果您手动将此列表编码为整数或可正确排序的字符串值,则可以更正此问题:
import scipy
# Incorrect alphabetical order
scipy.stats.spearmanr(['always','never','sometimes','always'], ['high','medium','low','low'])
# SpearmanrResult(correlation=0.5000000000000001, pvalue=0.4999999999999999)
# Incorrect integer order
scipy.stats.spearmanr([1,2,3,1], [1,3,2,2])
# SpearmanrResult(correlation=0.5000000000000001, pvalue=0.4999999999999999)
# Correct integer order
scipy.stats.spearmanr([3,1,2,3], [3,2,1,1])
# SpearmanrResult(correlation=0.05555555555555556, pvalue=0.9444444444444444)
# Correct alphabetical order
scipy.stats.spearmanr(['c','a','b','c'], ['c','b','a','a'])
# SpearmanrResult(correlation=0.05555555555555556, pvalue=0.9444444444444444)
推荐阅读
- sql - SQL 不正确的语法“联合”
- html - div 元素未定位为粘性
- javascript - 得到用 jQuery 计算值并用这个值计算
- ios - IOS高分辨率UIImage占用内存小
- javascript - 如何在jQuery中读取点击事件的第一个锚点的数据属性值
- python - regplot() 的强大选项到底有什么作用?
- matplotlib - 带有对数 yscale 的计数图
- javascript - Mozilla:选择的选项不会被先前使用 jquery 选择的选项覆盖。
- android - 通过 API 级别 <23 的 KeyStore 生成椭圆曲线 KeyPair
- php - PHP:模块'curl'已经加载