biweight_midcovariance#
- astropy.stats.biweight_midcovariance(data, c=9.0, M=None, modify_sample_size=False)[源代码]#
计算多变量对之间的双权中协方差。
双权中协方差是两个变量之间协方差的一个鲁棒的、有抵抗力的估计量。
此函数用于计算输入数据中所有输入变量对(行)之间的双权中间协方差。输出数组的形状为(N个变量,N个变量)。对角线元素将是每个输入变量的双权中间方差(参见
biweight_midvariance()
). 非对角元素是每对输入变量之间的双权中间协方差。例如,如果输入数组
data
包含三个变量(行)x
,y
和z
,输出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_size
是False
,这是默认值。然而,如果
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 : 2D or 1D array_like二维或一维
以二维或一维数组的形式输入数据。对于二维数组,它应该有一个形状(N个变量,N个观测值)。一个一维数组可以被输入到单个变量的观测值中,在这种情况下,将计算双权中方差(无协方差)。每行
data
表示一个变量,每列是所有这些变量的一个观察值(与numpy.cov
公约)。- c :
float
,可选Python:Float,可选 双权重估计器的调整常数(默认值=9.0)。
- M :
float
或一维 array_like ,可选PYTHON:FLOAT或1DNAMPY:ARRAY_LIKE,可选 每个变量的位置估计,可以是标量,也可以是数组。如果
M
是一个数组,那么它必须是一个包含每一行的位置估计的一维数组(即。a.ndim
元素)。如果M
是标量值,则其值将用于每个变量(行)。如果None
(默认),则将使用每个变量(行)的中值。- modify_sample_size : bool ,可选可选的布尔
如果
False
(默认),则使用的样本大小是每个变量的观察总数,遵循双权中协方差的标准定义。如果True
,然后减小样本大小以校正任何拒绝值(参见上面的公式),这会导致小样本量或大量拒绝值的值更接近真实协方差。
- 返回:
- biweight_midcovariance :
ndarray
恩达雷 一个2D数组,表示输入数组中每对变量(行)之间的双权中间协方差。输出数组的形状为(N个变量,N个变量)。对角线元素将是每个输入变量的双权中间方差。非对角元素是每对输入变量之间的双权中间协方差。
- biweight_midcovariance :
工具书类
实例
计算两个随机变量之间的双权中间协方差:
>>> 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]