NumPy/SciPy中是否有任何通用工具用于计算即使输入变量大小不同也能工作的相关性度量?在协方差和相关性的标准公式中,要求对每个不同的被测变量进行相同数量的观测。通常,您必须传递一个矩阵,其中每行是不同的变量,每列表示不同的观察结果。
在我的例子中,我有9个不同的变量,但对于每个变量,观察的次数都不是恒定的。有些变量比其他变量有更多的观察结果。我知道有像传感器融合这样的领域研究这样的问题,那么有什么标准工具可以计算不同长度数据序列的关系统计数据(最好是Python)?
我会检查这个页面:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.cov.html
更新:
假设数据矩阵的每一行对应于一个特定的随机变量,并且该行中的条目是观测值。只要观察结果之间有对应关系,你就会遇到一个简单的数据缺失问题。也就是说,如果你的一行只有10个条目,那么这10个条目(即试验)是否对应于第一行中随机变量的10个样本?例如,假设你有两个温度传感器,它们同时采样,但其中一个有故障,有时会错过一个样本。然后,你应该将故障传感器错过生成读数的试验视为"缺失数据"。在你的情况下,这很简单,只需在NumPy中创建两个长度相同的矢量,在与缺失试验相对应的两个矢量中较小的一个矢量中放入零(实际上是任何值),以及创建一个掩码矩阵,指示数据矩阵中存在缺失值的地方。
将这样一个矩阵提供给与上面链接的函数应该可以让您准确地执行所需的计算。
"问题是,每个变量都对应于调查的答案,并不是每个调查者都回答了每个问题。因此,我想了解问题2的答案如何影响问题8答案的可能性,例如。"
这是缺少数据的问题。我认为让人困惑的是,你一直把你的样本称为不同的长度。我想你可能会把它们想象成这样:
样品1:
question number: [1,2,3,4,5]
response : [1,0,1,1,0]
示例2:
question number: [2,4,5]
response : [1,1,0]
当样本2应该更像这样时:
question number: [ 1,2, 3,4,5]
response : [NaN,1,NaN,1,0]
重要的是问题数量,而不是回答的问题数量。如果没有问题对问题的对应关系,就不可能计算出像协方差矩阵这样的东西。
无论如何,ddodev提到的numpy.ma.cov
函数通过利用元素相加的事实来计算协方差,每个元素只取决于两个值。
所以它会计算出它能计算的。然后,当涉及到除以n的步骤时,它除以计算的值的数量(对于特定的协方差矩阵元素),而不是样本的总数。
从纯粹数学的角度来看,我认为它们必须是相同的。为了使它们相同,您可以应用一些与丢失数据问题相关的概念。我想我是说,如果向量大小不一样,它就不再是严格意义上的协方差了。无论你使用什么工具,都会以某种智能的方式组成一些点,以形成相等长度的向量。
这是我对这个问题的看法。严格地说,计算2个随机变量Cov(X,Y) = E[XY] - E[X]E[Y]
的协方差的公式并没有告诉你任何关于样本大小或X和Y应该如何形成随机向量的信息(即x_i
和y_i
并不是明确成对的)。
无论X和Y的观测次数不匹配,都以通常的方式计算E[X]
和E[Y]
。对于E[XY]
,在分别采样X和Y的情况下,可以将其视为";CCD_ 8"的所有可能组合的平均值;,换句话说:
# NumPy code :
import numpy as np
X = ... # your first data sample
Y = ... # your second data sample
E_XY = np.outer(X, Y).ravel().mean()