跳转到主要内容

数据探索和描述中,用于获取分类变量之间非对称关联度的Python库

项目描述

ASymCat

ASymCat是一个强大的Python库,旨在使用各种对称和非对称的关联度度量来分析分类变量之间的共现关联。无论您是处理语言数据还是任何其他类型的分类数据,ASymCat都可以帮助您以新的和有意义的途径探索和描述您的数据。

使用ASymCat,您可以输入共现观察,如记录、对齐和存在-不存在矩阵,并生成提供类别之间关联度分的字典。您还可以根据您的研究问题专注于关联的强度或方向,或两者都关注。

除了主要的关联度度量数值计算方法之外,ASymCat还包括辅助方法,可以帮助您处理关系数据、序列的n-gram、对齐和二元存在-不存在矩阵。

ASymCat是一个多功能的库,可以由各个领域的学者使用,并可以帮助您从数据中获得新的见解。

背景

关联度量在统计分析中扮演着至关重要的角色,因为它们有助于量化变量之间的关系。虽然存在多种度量方法,但相关系数被广泛用于确定两个变量之间关系的强度和方向。例如,皮尔逊的 rho 常用于评估连续变量之间线性关系的强度,而斯皮尔曼的 rho 则用于评估有序或排名变量之间单调关系的强度。另一方面,卡方度量是衡量分类变量之间关联的有用工具。

需要注意的是,大多数关联度量都是对称的,这意味着任何 xy 值之间的关联等于 yx 之间的关联。通常,这些度量用于研究关联的强度或显著性。

对于各个领域的科研人员来说,了解关联度量对于进行有意义的统计分析至关重要。通过使用适当的关联度量,研究人员可以深入了解变量之间的关系,得出结论,并做出明智的决策。

虽然对称度量通常用于衡量数值变量之间的关系,但涉及分类变量的研究和应用通常会受益于使用非对称度量。非对称度量有助于确定 x 的变异中可以由 y 的变异解释的部分(Pearson,2016)。这一特性可以通过修改 Zychlinski(2018)提供的示例来轻松展示,引入 dython 库。

X Y
观测 1 A c
观测 2 A d
观测 3 A c
观测 4 B g
观测 5 B g
观测 6 B f

在给定的例子中,不能完全确定基于 xy 的分类值。然而,可以根据 y 确定性地确定 x。最大似然估计(MLE)的对称版本,即简单地用案例数除以总观测数(即 Cxy/Cx 和 Cxy/Cy,其中 C 代表总计数),产生的表是 XY 和 YX 的转置版本。

给定 Y 的 X A B
c 0.75 0.75
d 0.00 0.00
f 0.00 0.00
g 0.75 0.75
给定 X 的 Y c d f g
A 0.75 0.00 0.00 0.75
B 0.75 0.00 0.00 0.75

与对称表相比,非对称表可以捕捉变量之间的信息差异,表明如果数据集中已知 y,则可以确定性地预测 x。使用最大似然估计评分器,我们可以看到非对称表更准确地反映了这种关系。

给定 Y 的 X A B
c 1.00 0.00
d 1.00 0.00
f 0.00 1.00
g 0.00 1.00
给定 X 的 Y c d f g
A 0.67 0.33 0.00 0.00
B 0.00 0.00 0.33 0.67

分类关联的评估通常涉及使用卡方和克拉美尔 V 等度量,它们本质上是对称的。然而,还有一些广泛使用的非对称度量,包括 Theil 的 U 和 Goodman 和 Kruskal 的 tau。Theil 的 U 度量非常适合人文科学领域,包括语言学研究,因为它考虑了 xy 之间的条件熵,这反映了给定 xy 的可能状态及其发生频率。

在 ASymCat 库中,提供了各种评分方法来衡量非对称关联,包括最大似然估计、点互信息、归一化点互信息、卡方(针对 2x2 和 3x2 列联表)、Cramér's V(针对 2x2 和 3x2 列联表)、Fisher 精确优势比(针对无条件 MLE)、Theil 的 U(“不确定性评分”)、条件熵以及一个新的评分器 tresoldi,它结合了 MLE 和 PMI 的信息,针对计算历史语言学研究进行了定制。

衡量分类关联的最流行方法是上述的卡方检验和Cramer's V,定义为标准化卡方值的平方根。两者都是对称值。最著名的非对称度量包括Theil's U和Goodman和Kruskal的tau。前者特别适用于人文领域,如语言学研究,因为它最终基于xy之间的条件熵,即给定x时观察到的y的可能状态有多少,以及它们发生的频率。

除了各种分类关联评分器之外,ASymCat库还提供了一些有用的功能。用户可以使用minmaxmeanstdev等方法将评分缩放到他们想要的范围内。该库还包括生成评分器的热图函数。此外,它还提供了一系列用于频率计数的平滑方法,包括拉普拉斯平滑以及更复杂的如确定性度评分器,该评分器专门为与这个库一起使用而设计。

安装和用法

该库可以用pip作为任何标准Python库来安装

pip install asymcat

有关如何使用该库的详细说明,请参阅官方文档

以下是一个使用mushroom数据集子集的演示示例

import tabulate
import asymcat
from catcoocc.scorer import CatScorer

mushroom_data = asymcat.read_sequences("resources/mushroom-small.tsv")
mushroom_cooccs = asymcat.collect_cooccs(mushroom_data)
scorer = asymcat.scorer.CatScorer(mushroom_cooccs)

mle = scorer.mle()
pmi = scorer.pmi()
npmi = scorer.pmi(True)
chi2 = scorer.chi2()
chi2_ns = scorer.chi2(False)
cramersv = scorer.cramers_v()
cramersv_ns = scorer.cramers_v(False)
fisher = scorer.fisher()
theil_u = scorer.theil_u()
cond_entropy = scorer.cond_entropy()
tresoldi = scorer.tresoldi()

headers = [
  'pair',
  'mle_xy', 'mle_yx',
  'pmi_xy', 'pmi_yx',
  'npmi_xy', 'npmi_yx',
  'chi2_xy', 'chi2_yx',
  'chi2ns_xy', 'chi2ns_yx',
  'cremersv_xy', 'cremersv_yx',
  'cremersvns_xy', 'cremersvns_yx',
  'fisher_xy', 'fisher_yx',
  'theilu_xy', 'theilu_yx',
  'cond_entropy_xy', 'cond_entropy_yx',
  'tresoldi_xy', 'tresoldi_yx'
]

table = []
for pair in sorted(scorer.obs):
  buf = [
    pair,
    "%0.4f" % mle[pair][0], "%0.4f" % mle[pair][1],
    "%0.4f" % pmi[pair][0], "%0.4f" % pmi[pair][1],
    "%0.4f" % npmi[pair][0], "%0.4f" % npmi[pair][1],
    "%0.4f" % chi2[pair][0], "%0.4f" % chi2[pair][1],
    "%0.4f" % chi2_ns[pair][0], "%0.4f" % chi2_ns[pair][1],
    "%0.4f" % cramersv[pair][0], "%0.4f" % cramersv[pair][1],
    "%0.4f" % cramersv_ns[pair][0], "%0.4f" % cramersv_ns[pair][1],
    "%0.4f" % fisher[pair][0], "%0.4f" % fisher[pair][1],
    "%0.4f" % theil_u[pair][0], "%0.4f" % theil_u[pair][1],
    "%0.4f" % cond_entropy[pair][0], "%0.4f" % cond_entropy[pair][1],
    "%0.4f" % tresoldi[pair][0], "%0.4f" % tresoldi[pair][1],
  ]
  table.append(buf)

print(tabulate.tabulate(table, headers=headers, tablefmt='markdown'))

它将输出

mle_xy mle_yx pmi_xy pmi_yx npmi_xy npmi_yx chi2_xy chi2_yx chi2ns_xy chi2ns_yx cremersv_xy cremersv_yx cremersvns_xy cremersvns_yx fisher_xy fisher_yx theilu_xy theilu_yx cond_entropy_xy cond_entropy_yx tresoldi_xy tresoldi_yx
('可食用', '钟形') 0.3846 1 0.4308 0.4308 0.3107 0.3107 1.8315 1.8315 3.5897 3.5897 0.2027 0.2027 0.1987 0.1987 inf inf 0 1 1.119 0 0.5956 1
('可食用', '凸形') 0.4615 0.4615 -0.3424 -0.3424 -0.2844 -0.2844 3.6735 3.6735 5.7988 5.7988 0.3719 0.3719 0.3101 0.3101 0 0 0.2147 0.3071 0.7273 0.4486 -0.5615 -0.5615
('可食用', '扁平') 0.0769 1 0.4308 0.4308 0.1438 0.1438 0.1041 0.1041 0.5668 0.5668 0 0 0 0 inf inf 0 1 1.119 0 0.4596 1
('可食用', '凹形') 0.0769 1 0.4308 0.4308 0.1438 0.1438 0.1041 0.1041 0.5668 0.5668 0 0 0 0 inf inf 0 1 1.119 0 0.4596 1
('有毒', '钟形') 0 0 -3.5553 -3.5553 -0.5934 -0.5934 1.8315 1.8315 3.5897 3.5897 0.2027 0.2027 0.1987 0.1987 0 0 1 1 0 0 -3.5553 -3.5553
('有毒', '凸形') 1 0.5385 0.4308 0.4308 0.4103 0.4103 3.6735 3.6735 5.7988 5.7988 0.3719 0.3719 0.3101 0.3101 inf inf 1 0 0 0.6902 1 0.6779
('有毒', '扁平') 0 0 -1.9459 -1.9459 -0.3248 -0.3248 0.1041 0.1041 0.5668 0.5668 0 0 0 0 0 0 1 1 0 0 -1.9459 -1.9459
('有毒', '凹形') 0 0 -1.9459 -1.9459 -0.3248 -0.3248 0.1041 0.1041 0.5668 0.5668 0 0 0 0 0 0 1 1 0 0 -1.9459 -1.9459

类似项目

https://github.com/pafoster/pyitlib

Griffith, Daniel M.; Veech, Joseph A.; and Marsh, Charles J. (2016) cooccur: Probabilistic Species Co-Occurrence Analysis in R. Journal of Statistical Software (69). doi: 10.18627/jss.v069.c02

https://cran.r-project.org.cn/web/packages/GoodmanKruskal/vignettes/GoodmanKruskal.html

社区指南

虽然可以直接联系作者以获得支持,但建议第三方使用GitHub标准功能,如问题和拉取请求,来贡献、报告问题或寻求支持。

作者和引用

该库由Tiago Tresoldi开发(tiago.tresoldi@lingfil.uu.se)。该库是在文本文化演化项目的背景下开发的,并由瑞典皇家银行纪念基金会(协议ID:MXM19-1087:1)资助。

在开发的第一阶段,作者获得了欧洲研究理事会(ERC)的资金,该资金来自欧盟的地平线2020研究与创新计划(协议号ERC Grant #715618计算机辅助语言比较)。

如果您使用asymcat,请按以下方式引用:

Tresoldi, Tiago (2023). asymcat,一个用于分类共现的对称和非对称分析的库。版本0.3。乌普萨拉。可在:https://github.com/tresoldi/asymcat

In BibTeX

@misc{Tresoldi2023asymcat,
  author = {Tresoldi, Tiago},
  title = {asymcat, a library for symmetric and asymmetric analysis of categorical co-occurrences. Version 0.3.},
  howpublished = {\url{https://github.com/tresoldi/asymcat}},
  address = {Uppsala},
  year = {2023},
}

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

asymcat-0.3.0.tar.gz (4.6 MB 查看哈希值)

上传时间

构建分发

asymcat-0.3.0-py3-none-any.whl (18.4 kB 查看哈希值)

上传时间 Python 3