距离矩阵与基于距离的统计 (skbio.stats.distance

此子包提供序列化、反序列化和操作内存中的差异矩阵和距离矩阵的功能。它还包含各种统计方法,这些方法对距离矩阵进行操作,通常将距离(如社区距离)与感兴趣的类别和/或连续变量(如性别或年龄)联系起来。还提供了用于比较距离矩阵的方法(例如,使用Mantel检验计算两个或多个距离矩阵之间的相关性)。

数据结构:相异矩阵和距离矩阵

这个包提供了两个矩阵类, DissimilarityMatrixDistanceMatrix . 这两个类都可以存储对象之间差异/区别的度量。差异/距离矩阵既包括对象之间的差异/距离(浮动)矩阵,也包括识别矩阵中每个对象的唯一ID(对象标签;字符串)。

DissimilarityMatrix 可用于存储对象之间的差异性度量,并且不要求差异是对称的(例如,使用 PD增益 测量 [1]) . DissimilarityMatrix 是一个更通用的容器来存储差异 DistanceMatrix .

DistanceMatrix 欧几里德距离是对称的。

备注

DissimilarityMatrix 可用于存储距离,但建议使用 DistanceMatrix 存储这种类型的数据,因为它提供了额外的对称性检查。距离矩阵 is a 差异矩阵;这是在类设计中通过 DistanceMatrix 子类 DissimilarityMatrix .

Classes

DissimilarityMatrix(data[, ids, validate])

存储对象之间的差异。

DistanceMatrix(data[, ids, validate])

存储对象之间的距离。

功能

randdm(num_objects[, ids, constructor, ...])

生成填充随机距离的距离矩阵。

例外情况

DissimilarityMatrixError 

异类矩阵验证失败的一般错误。

DistanceMatrixError 

距离矩阵验证失败的一般错误。

MissingIDError(missing_id)

差异矩阵中不存在的ID查找错误。

示例

假设我们有下面的分隔文本文件,它存储了三个具有id的对象之间的距离 abc ::

\ta\tb\tc
a\t0.0\t0.5\t1.0
b\t0.5\t0.0\t0.75
c\t1.0\t0.75\t0.0

从文件加载距离矩阵:

>>> from io import StringIO
>>> from skbio import DistanceMatrix
>>> dm_fh = StringIO("\ta\tb\tc\n"
...                  "a\t0.0\t0.5\t1.0\n"
...                  "b\t0.5\t0.0\t0.75\n"
...                  "c\t1.0\t0.75\t0.0\n")
>>> dm = DistanceMatrix.read(dm_fh)
>>> print(dm)
3x3 distance matrix
IDs:
'a', 'b', 'c'
Data:
[[ 0.    0.5   1.  ]
 [ 0.5   0.    0.75]
 [ 1.    0.75  0.  ]]

访问对象之间的距离(标量) 'a''c'

>>> dm['a', 'c']
1.0

获取对象之间距离的行向量 'b' 以及所有其他对象:

>>> dm['b']
array([ 0.5 ,  0.  ,  0.75])

numpy索引/切片也按预期工作。提取第三列:

>>> dm[:, 2]
array([ 1.  ,  0.75,  0.  ])

将距离矩阵序列化为分隔文本文件:

>>> out_fh = StringIO()
>>> _ = dm.write(out_fh)
>>> out_fh.getvalue() == dm_fh.getvalue()
True

也可以从现有的 numpy.array (或类似数组的对象,例如嵌套的Python列表):

>>> import numpy as np
>>> data = np.array([[0.0, 0.5, 1.0],
...                  [0.5, 0.0, 0.75],
...                  [1.0, 0.75, 0.0]])
>>> ids = ["a", "b", "c"]
>>> dm_from_np = DistanceMatrix(data, ids)
>>> print(dm_from_np)
3x3 distance matrix
IDs:
'a', 'b', 'c'
Data:
[[ 0.    0.5   1.  ]
 [ 0.5   0.    0.75]
 [ 1.    0.75  0.  ]]
>>> dm_from_np == dm
True

在构造相异/距离矩阵时,可以省略id。将自动使用递增整数:

>>> dm = DistanceMatrix(data)
>>> dm.ids
('0', '1', '2')

基于距离的统计

除上述数据结构外,本软件包还提供了以下基于距离的统计方法。

分类变量统计

anosim(distance_matrix, grouping[, column, ...])

使用ANOSIM测试各组之间的显著差异。

permanova(distance_matrix, grouping[, ...])

使用PERMANOVA检测各组间的显著差异。

permdisp(distance_matrix, grouping[, ...])

用Marti检验多变量群分布的均匀性

连续变量统计

bioenv(distance_matrix, data_frame[, columns])

找到与距离最大相关的变量子集。

距离矩阵比较

mantel(x, y[, method, permutations, ...])

使用Mantel检验计算距离矩阵之间的相关性。

pwmantel(dms[, labels, method, ...])

对每对给定的距离矩阵运行Mantel测试。

引用