biweight_midcovariance

astropy.stats.biweight_midcovariance(data, c=9.0, M=None, modify_sample_size=False)[源代码]

计算多变量对之间的双权中协方差。

双权中协方差是两个变量之间协方差的一个鲁棒的、有抵抗力的估计量。

此函数用于计算输入数据中所有输入变量对(行)之间的双权中间协方差。输出数组的形状为(N个变量,N个变量)。对角线元素将是每个输入变量的双权中间方差(参见 biweight_midvariance() ). 非对角元素是每对输入变量之间的双权中间协方差。

例如,如果输入数组 data 包含三个变量(行) xyz ,输出 ndarray 协方差矩阵为:

\[\开始{pmatrix}\]

where \(\zeta_{xx}\), \(\zeta_{yy}\), and \(\zeta_{zz}\) are the biweight midvariances of each variable. The biweight midcovariance between \(x\) and \(y\) is \(\zeta_{xy}\) (\(= \zeta_{yx}\)). The biweight midcovariance between \(x\) and \(z\) is \(\zeta_{xz}\) (\(= \zeta_{zx}\)). The biweight midcovariance between \(y\) and \(z\) is \(\zeta_{yz}\) (\(= \zeta_{zy}\)).

两个变量之间的双权中协方差 \(x\)\(y\) 计算公式:

\[\zeta_{xy} = n_{xy} \ \frac{\sum_{|u_i| < 1, \ |v_i| < 1} \ (x_i - M_x) (1 - u_i^2)^2 (y_i - M_y) (1 - v_i^2)^2} {(\sum_{|u_i| < 1} \ (1 - u_i^2) (1 - 5u_i^2)) (\sum_{|v_i| < 1} \ (1 - v_i^2) (1 - 5v_i^2))}\]

在哪里? \(M_x\)\(M_y\) 是两个变量和 \(u_i\)\(v_i\) 由以下公式给出:

\[u{i}=\frac{(x_i-M_x)}{c*MAD_x}\]

在哪里? \(c\) 双重调节是否恒定且 \(MAD_x\)\(MAD_y\)median absolute deviation\(x\)\(y\) 变量。双权中方差调谐常数 c 通常为9.0(默认值)。

如果 \(MAD_x\)\(MAD_y\) 为零,则该元素将返回零。

对于双权中协方差的标准定义, \(n_{{xy}}\) 是每个变量的观察总数。如果 modify_sample_sizeFalse ,这是默认值。

然而,如果 modify_sample_size = True 然后 \(n_{{xy}}\) 是指 \(|u_i| < 1\) 和/或 \(|v_i| < 1\) ,即

\[n{xx}=\sum_{ |u_i| <1}\1\]
\[n_{xy}=n_{yx}=\sum_{ |u_i| <1,\ |v_i| <1}\1\]
\[n{yy}=\sum_{ |v_i| <1}\1\]

对于小样本量或大量的拒绝值,其结果是一个更接近真实方差的值。

参数
data二维或一维阵列

以二维或一维数组的形式输入数据。对于二维数组,它应该有一个形状(N个变量,N个观测值)。一个一维数组可以被输入到单个变量的观测值中,在这种情况下,将计算双权中方差(无协方差)。每行 data 表示一个变量,每列是所有这些变量的一个观察值(与 numpy.cov 公约)。

c可选浮动

双权重估计器的调整常数(默认值=9.0)。

M浮点或一维阵列,可选

每个变量的位置估计,可以是标量,也可以是数组。如果 M 是一个数组,那么它必须是一个包含每一行的位置估计的一维数组(即。 a.ndim 元素)。如果 M 是标量值,则其值将用于每个变量(行)。如果 None (默认),则将使用每个变量(行)的中值。

modify_sample_size可选的布尔

如果 False (默认),则使用的样本大小是每个变量的观察总数,遵循双权中协方差的标准定义。如果 True ,然后减小样本大小以校正任何拒绝值(参见上面的公式),这会导致小样本量或大量拒绝值的值更接近真实协方差。

返回
biweight_midcovariance恩达雷

一个2D数组,表示输入数组中每对变量(行)之间的双权中间协方差。输出数组的形状为(N个变量,N个变量)。对角线元素将是每个输入变量的双权中间方差。非对角元素是每对输入变量之间的双权中间协方差。

工具书类

1

https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/biwmidc.htm

实例

计算两个随机变量之间的双权中间协方差:

>>> import numpy as np
>>> from astropy.stats import biweight_midcovariance
>>> # Generate two random variables x and y
>>> rng = np.random.default_rng(1)
>>> x = rng.normal(0, 1, 200)
>>> y = rng.normal(0, 3, 200)
>>> # Introduce an obvious outlier
>>> x[0] = 30.0
>>> # Calculate the biweight midcovariances between x and y
>>> bicov = biweight_midcovariance([x, y])
>>> print(bicov)  
[[0.83435568 0.02379316]
 [0.02379316 7.15665769]]
>>> # Print standard deviation estimates
>>> print(np.sqrt(bicov.diagonal()))  
[0.91343072 2.67519302]