在GWAS数据集的PCA投影中,孩子如何设法将父母团结在一起?


9

取20个随机点与每个一万维空间从坐标IID ñ01个。将它们分成10对(“对”),并将每对的平均值(“子”)添加到数据集中。然后对所得的30点进行PCA并绘制PC1与PC2的关系图。

发生了一件了不起的事情:每个“家庭”形成一个紧密相连的三元组。当然,在最初的10,000维空间中,每个孩子都更接近其父母中的每个,因此可以期望在PCA空间中每个孩子也都离父母更近。但是,在PCA空间中,每对父母也彼此靠近,即使在原始空间中,它们只是随机点!

在PCA预测中,孩子如何设法将父母团结在一起?

在此处输入图片说明

人们可能会担心,这在某种程度上受到以下事实的影响:孩子的规范低于父母。这似乎无关紧要:如果我将子代生成为X+ÿ/2,其中Xÿ是父母点,那么它们平均具有与父母相同的范数。但是我仍然在PCA领域从质上观察到相同的现象:

在此处输入图片说明

这个问题使用的是玩具数据集,但其动机是我在一个全基因组关联研究(GWAS)的真实数据集中所观察到的,其中维度是单核苷酸多态性(SNP)。该数据集包含母婴三重奏。


%matplotlib notebook

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)

def generate_families(n = 10, p = 10000, divide_by = 2):
    X1 = np.random.randn(n,p)    # mothers
    X2 = np.random.randn(n,p)    # fathers
    X3 = (X1+X2)/divide_by       # children
    X = []
    for i in range(X1.shape[0]):
        X.extend((X1[i], X2[i], X3[i]))
    X = np.array(X)

    X = X - np.mean(X, axis=0)
    U,s,V = np.linalg.svd(X, full_matrices=False)
    X = U @ np.diag(s)
    return X

n = 10
plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = 2)
for i in range(n):
    plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families1.png')

plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = np.sqrt(2))
for i in range(n):
    plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families2.png')

1
在如此高的维度上,随机无关数据的所有数据点都位于空间的角落,并且这些点之间的距离几乎相同。如果选择一个点并通过在它们之间创建一个中途点(平均值)将其与另一个点关联,那么您就创建了一个簇:您引入的距离明显小于前面提到的距离。
ttnphns

1
是的,我知道这20个原始点彼此之间等距。很明显,孩子比两个父母彼此之间更靠近父母。我仍然不明白的是,为什么父母在PCA预测中变得亲近……
amoeba

您是否尝试过在任意两个随机维度上投射?你得到了什么?
ttnphns

1
我的直觉是:这些点的三元组被投影为几乎垂直于PC1-2子空间的桩。这就是定义此平面的位置以最大化方差的方式。您会看到,多模态数据的模式大多远离中心(因为点都是10K暗淡的Periferal),因此像哑铃一样的云将倾向于拉动主要PC,从而刺穿较重的区域,因此垂直于三胞胎。
ttnphns

1
得出的结论是,对于PCA(PCoA)不能作为MDS很好的问题,这是有启发性的,因为PCA(PCoA)投影点并且不直接建模距离。迭代的MDS期望产生的“集群”程度要小得多。
ttnphns

Answers:


8

在上面评论中与@ttnphns进行的讨论中,我意识到在少于10个家庭的情况下也可以观察到相同的现象。三个族(n=3在我的代码段中)大致出现在等边三角形的角上。实际上,仅考虑两个家族(n=2)就足够了:它们最终沿PC1分开,每个家族大致投影到一个点上。

两个家庭的情况可以直接可视化。10,000维空间中的原始四个点几乎正交,并位于4维子空间中。因此,它们形成了4个单纯形。居中后,它们将形成3D形状的规则四面体。看起来是这样的:

*在此处输入图片描述*

在添加子代之前,PC1可以指向任何位置;没有首选的方向。但是,在将两个子对象放置在两个相对边缘的中心之后,PC1将直接通过它们!@ttnphns将这种六点排列描述为“哑铃”:

像哑铃一样的云将倾向于拉动主要PC,从而刺穿较重的区域

注意,正四面体的相对边缘彼此正交,并且也正交于连接其中心的线。这意味着每个家庭将在PC1上投影到一个点。

如果用缩放两个孩子,则可能甚至不那么直观2


3
出色的可视化!Mom1-Child1-Dad1是双峰云中的一个圆盘或薄煎饼,而Mom2-Child2-Dad2是另一个双峰云。为了最大程度地发挥投影效果,它吸引了PC1,以使两个“家庭”正交于其母子爸爸线而刺穿。因此,每个家庭投影到一个点(在本例中为一个孩子),并且我们两个家庭内部紧密相连,在投影中彼此远离。
ttnphns

1
您使用什么程序来绘制图片?
ttnphns

4
白板,白板笔和智能手机摄像头:-)
变形虫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.