如何解决在计算Spearmans等级相关性科学性之前,我应该对序数变量进行编码吗?
我正在使用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,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,2])
# SpearmanrResult(correlation=0.5000000000000001,pvalue=0.4999999999999999)
# Correct integer order
scipy.stats.spearmanr([3,1,3],[3,1])
# SpearmanrResult(correlation=0.05555555555555556,pvalue=0.9444444444444444)
# Correct alphabetical order
scipy.stats.spearmanr(['c','a','b','c'],['c','a'])
# SpearmanrResult(correlation=0.05555555555555556,pvalue=0.9444444444444444)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。