아이들은 어떻게 GWAS 데이터 세트의 PCA 프로젝션에서 부모를 어떻게 함께 모을 수 있습니까?


9

에서 각 좌표 iid로 10,000 차원 공간에서 20 개의 임의의 점을 취합니다 . 10 쌍 ( "커플")으로 나누고 각 쌍의 평균 ( "자식")을 데이터 세트에 추가하십시오. 그런 다음 결과 30 점에서 PCA를 수행하고 PC1 대 PC2를 플로팅합니다.N(0,1)

놀라운 일이 일어납니다. 각 "가족"은 서로 가까이있는 삼중점을 형성합니다. 물론 모든 어린이는 원래 10,000 차원 공간에서 각 부모에게 더 가까이 있으므로 PCA 공간에서도 부모와 더 가까이있을 것으로 기대할 수 있습니다. 그러나 PCA 공간에서 각 부모 쌍은 서로 가깝습니다. 비록 원래 공간에서는 무작위 포인트 일뿐입니다!

PCA 프로젝션에서 아이들은 어떻게 부모를 하나로 묶을 수 있습니까?

여기에 이미지 설명을 입력하십시오

아이들이 부모보다 규범이 낮다는 사실에 영향을받는다고 걱정할 수도 있습니다. 중요하지 않은 것 같습니다 . 와 가 부모 지점 인 로 자식을 생성하면 평균적으로 부모와 같은 표준을 갖게됩니다. 그러나 나는 여전히 PCA 공간에서 질적으로 동일한 현상을 관찰합니다.(x+y)/2x와이

여기에 이미지 설명을 입력하십시오

이 질문은 장난감 데이터 세트를 사용하고 있지만 치수가 단일 뉴클레오티드 다형성 (SNP) 인 게놈 넓은 협회 연구 (GWAS) 의 실제 데이터 세트에서 관찰 한 것에 동기를 부여 합니다 . 이 데이터 세트에는 어머니-아동-트리오가 포함되어 있습니다.


암호

%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 희미하게 주변이기 때문에). 아령과 같은 구름은 주요 PC를 당겨 경향이 있습니다. , 따라서 트리플렛에 수직입니다.
ttnphns

1
btw는 PCA (PCoA)가 점을 투영하고 거리를 직접 모델링하지 않기 때문에 MDS만큼 좋지 않다는 문제에 도움이됩니다. 반복 MDS는 이러한 "클러스터"를 훨씬 적게 생성 할 것으로 예상됩니다.
ttnphns

답변:


8

위의 의견에서 @ttnphns와의 토론 중에 10 가족 미만에서도 동일한 현상이 관찰 될 수 있음을 깨달았습니다. n=3내 코드 스 니펫에 세 가족 이 대략 정삼각형의 모서리에 나타납니다. 실제로, 두 가족 만 고려하면 충분합니다 ( n=2) : PC1을 따라 분리되어 각 가족이 대략 한 지점에 투영됩니다.

두 가족의 경우를 직접 시각화 할 수 있습니다. 10,000 차원 공간에서 원래의 4 개 점은 거의 직교하며 4 차원 부분 공간에 있습니다. 그래서 그들은 4 심플 렉스를 형성합니다. 센터링 후 3D 형태의 정사면체를 형성합니다. 그 모습은 다음과 같습니다.

* 여기에 이미지 설명을 입력하십시오 *

하위 항목을 추가하기 전에 PC1은 아무 곳이나 가리킬 수 있습니다. 선호되는 방향이 없습니다. 그러나 두 명의 어린이가 두 개의 반대쪽 가장자리 중앙에 배치되면 PC1이 바로 통과합니다! 이 6 점의 배열은 @ttnphns에 의해 "덤벨"로 설명되었습니다.

아령과 같은 구름은 주요 PC를 잡아 당겨 무거운 지역을 뚫는 경향이 있습니다.

정사면체의 반대쪽 가장자리는 서로 직교하며 중심을 연결하는 선과 직교합니다. 이것은 각 가족이 PC1에서 하나의 단일 지점으로 투영됨을 의미합니다.

아마도 두 자녀가 2부모와 같은 규범을 부여하면 사면체에서 "고착"되어 부모가 함께 붕괴되고 아이가 더 떨어져있는 PC1 투영이 발생합니다. 이것은 내 질문의 두 번째 그림에서 볼 수 있습니다. 각 가족은 부모가 PC1 / PC2 비행기에 가깝게 있고 (두 사람은 관계가 없습니다!), 자녀는 조금 더 떨어져 있습니다.


3
뛰어난 시각화! Mom1-Child1-Dad1은 하나의 디스크 또는 팬케이크이고 Mom2-Child2-Dad2는 바이 모달 클라우드의 다른 하나입니다. 프로젝션의 편차를 극대화하기 위해 PC1을 끌어 모아 "가족"을 엄마-아빠-아빠 라인에 직각으로 뚫습니다. 결과적으로, 각 가족은 하나의 점 (이 경우에는 자식)으로 투영되고 우리는 두 가족이 매우 단단한 내부로, 투영에서 서로 클러스터로부터 멀리 떨어져 있습니다.
ttnphns

1
그림을 그리는 데 어떤 프로그램을 사용하셨습니까?
ttnphns

4
화이트 보드, 화이트 보드 마커 및 스마트 폰 카메라 :-)
아메바
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.