不同大小数组的协方差近似

5
在NumPy/SciPy中是否有通用工具,可以计算相关度量,即使输入变量的大小不同?在协方差和相关性的标准公式中,对于每个不同的测试变量,需要具有相同数量的观测值。通常,您必须传递一个矩阵,其中每行是不同的变量,每列表示一个不同的观测值。
在我的情况下,我有9个不同的变量,但每个变量的观测值数量不是固定的。一些变量比其他变量具有更多的观测值。我知道有领域,如传感器融合,研究这类问题,那么有哪些标准工具可用于计算长度不同的数据序列上的关系统计(最好使用Python)?

2
我认为这类问题最适合在[scicomp.SE]上提问。当然,在这里问也没问题,但我想提一下还有另一个专门针对这些问题的网站存在。 - David Z
http://stats.stackexchange.com/questions/20457/is-it-possible-to-compute-a-covariance-matrix-with-unequal-sample-sizes - Ciro Santilli OurBigBook.com
MathOverflow 是专门为数学学术研究问题而设立的。他们通常会直截了当地重定向流量,但只要你不明目张胆地忽略 MO 的预期目的,每个人都非常友好。 - Stella Biderman
4个回答

3

我会检查这个页面:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.cov.html

更新:

假设数据矩阵的每一行对应于一个特定的随机变量,而行中的条目是观察值。只要您有观察之间的对应关系,您就拥有了简单的缺失数据问题。也就是说,如果您的某一行只有10个条目,那么这10个条目(即试验)是否对应于第一行中随机变量的10个样本?例如,假设您有两个温度传感器,并且它们在相同时间取样,但其中一个存在故障,有时会错过一个样本。然后,您应该将未能生成读数的故障传感器所在的试验视为“缺失数据”。在您的情况下,只需在NumPy中创建两个长度相同的向量,在较小的向量中放入零(或任何值),以对应缺失的试验,并创建一个掩码矩阵,指示数据矩阵中的缺失值存在的位置。

将这样的矩阵提供给上面链接的函数应允许您执行所需的计算。


3
“问题在于每个变量都对应着一份调查的回答,而不是每个参与者都回答了所有问题。因此,我希望有一种方法来衡量例如问题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的步骤时,它会除以已计算值的数量(针对该特定covariance-matrix元素),而不是样本总数。

2

从纯数学的角度来看,我认为它们必须是相同的。要使它们相同,您可以应用与缺失数据问题相关的一些概念。如果向量大小不相同,则我想说它不再严格是协方差了。无论使用什么工具,都会以某种聪明的方式创造一些点,使向量长度相等。


@EMS,您的回复让我觉得您对数据有一些误解。如果您想计算两组值之间的协方差,当然必须知道哪些值相互对应(例如某个时间t的x(t)和y(t))。如果没有对应关系,那么就无法确定这两组值具有何种相关性。也许如果您稍微详细地描述一下您的数据,会更有帮助。 - ddodev
有道理……在那方面没有太多经验。但是请查看ANCOVA,MANCOVA的链接(http://en.wikipedia.org/wiki/Analysis_of_covariance)。似乎你的答案可能就在其中。 - Matt
@EMS 我的评论只是举例说明时间。在你的情况下,问题编号是索引变量。因此,对于所有13个受访者,您应该有一个9维向量,其中包含受访者回答的所有问题的报告概率,并且在对应于受访者未回答的问题的条目中具有任意值(例如,-1,以便您不会将其与概率混淆)。 - ddodev
3
现在你有一个 13x9 的矩阵。根据 numpy 文档的指示,创建另一个 13x9 的掩码矩阵,标记矩阵中值为 -1(或其他任何值)的条目。这些是你的缺失数据。现在你可以使用 numpy 函数进行任何操作。 - ddodev
我认为这正是缺失数据问题的所在......一个选择是从每个调查中删除这些问题(可能不切实际)。另一个选择是对这些问题进行回答并在特定点忽略协方差。 - Matt
@EMS,你所要求的是条件概率,而不是协方差。如果你愿意,你可以直接从你拥有的数据中估计它。 - ddodev

0

以下是我的看法。严格来说,计算两个随机变量协方差的公式 Cov(X,Y) = E[XY] - E[X]E[Y] 并没有告诉你任何关于样本大小或者X和Y如何形成一个随机向量(即x_iy_i并不明确地成对出现)的信息。

E[X]E[Y] 的计算方式与通常的方法相同,无论X和Y的观测次数是否匹配。至于 E[XY],在分别采样X和Y的情况下,你可以将其理解为“所有可能的 x_i * y_j 组合的平均值”,换句话说:

# NumPy code :
import numpy as np

X = ... # your first data sample
Y = ... # your second data sample

E_XY = np.outer(X, Y).ravel().mean()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接