W jaki sposób dzieci potrafią zbliżyć swoich rodziców do projekcji PCA zestawu danych GWAS?


9

Weź 20 losowych punktów w przestrzeni 10 000 wymiarów z każdą współrzędną id matematyczną . Podziel je na 10 par („pary”) i dodaj średnią każdej pary („dziecka”) do zestawu danych. Następnie wykonaj PCA na uzyskanych 30 punktach i wykreśl PC1 vs PC2.N(0,1)

Dzieje się coś niezwykłego: każda „rodzina” tworzy trójkę punktów, które są ze sobą blisko. Oczywiście każde dziecko jest bliżej każdego z rodziców w oryginalnej przestrzeni 10 000-wymiarowej, więc można się spodziewać, że będzie blisko rodziców również w przestrzeni PCA. Jednak w przestrzeni PCA każda para rodziców również jest blisko siebie, chociaż w pierwotnej przestrzeni są to tylko losowe punkty!

Jak dzieci potrafią przyciągnąć rodziców do siebie w projekcji PCA?

wprowadź opis zdjęcia tutaj

Można się martwić, że na to w jakiś sposób wpływa fakt, że dzieci mają niższą normę niż rodzice. To nie wydaje się ważne: jeśli produkować dzieci jako , gdzie i są punkty rodzicielskie, wówczas będą miały przeciętnie tym samym normy jako rodziców. Ale nadal obserwuję jakościowo to samo zjawisko w przestrzeni PCA:(x+y)/2xy

wprowadź opis zdjęcia tutaj

To pytanie wykorzystuje zestaw danych z zabawkami, ale jest motywowane tym, co zaobserwowałem w prawdziwym zestawie danych z badania asocjacyjnego całego genomu (GWAS), w którym wymiarami są polimorfizmy pojedynczego nukleotydu (SNP). Ten zestaw danych zawierał trio matka-ojciec-dziecko.


Kod

%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
W tak wysokim wymiarze wszystkie punkty danych losowych niepowiązanych danych znajdują się w rogach przestrzeni, a odległości między punktami są prawie takie same. Jeśli wybierzesz punkt i powiążesz go z innym punktem, tworząc między nimi punkt w połowie (średni), utworzysz klaster: wprowadziłeś odległości wyraźnie mniejsze niż odległość wspomniana wcześniej.
ttnphns,

1
Tak, rozumiem, że 20 oryginalnych punktów jest mniej więcej w równej odległości od siebie. I jasne jest, że dzieci są bliższe rodzicom niż dwójka rodziców. Wciąż jednak nie rozumiem, dlaczego rodzice zbliżają się w projekcji PCA ...
Ameba

Czy próbowałeś rzutować na dowolne dwa losowe wymiary? Co dostałeś?
ttnphns

1
Moja intuicja byłaby taka: trojaczki punktów są rzutowane jako stosy prawie prostopadłe do podprzestrzeni PC1-2. Tak definiuje się położenie tej płaszczyzny, aby zmaksymalizować wariancję . Widzisz, masz dane multimodalne z trybami w większości oddalonymi od centrum (ponieważ wszystkie punkty są peryferyjne w 10K przyciemnieniu), taka chmura, jak hantle, będzie miała tendencję do ciągnięcia głównych komputerów, aby przebiły ciężkie obszary , a zatem prostopadłe do trojaczków.
ttnphns

1
Odkrycie, btw, poucza problem, że PCA (PCoA) nie jest zbyt dobry jako MDS, ponieważ rzutuje punkty i nie modeluje bezpośrednio odległości. Oczekuje się, że iteracyjny MDS wytworzy te „klastry” w znacznie mniejszym stopniu.
ttnphns

Odpowiedzi:


8

Podczas dyskusji z @ttnphns w powyższych komentarzach zdałem sobie sprawę, że to samo zjawisko można zaobserwować u wielu mniej niż 10 rodzin. Trzy rodziny ( n=3w moim fragmencie kodu) pojawiają się mniej więcej w rogach trójkąta równobocznego. W rzeczywistości wystarczy wziąć pod uwagę tylko dwie rodziny ( n=2): kończą się rozdzielone wzdłuż PC1, a każda rodzina jest z grubsza rzutowana na jeden punkt.

Przypadek dwóch rodzin można wizualizować bezpośrednio. Oryginalne cztery punkty w przestrzeni 10 000-wymiarowej są prawie ortogonalne i znajdują się w 4-wymiarowej podprzestrzeni. Tworzą więc 4-simpleks. Po wyśrodkowaniu utworzą regularny czworościan, który jest kształtem w 3D. Oto jak to wygląda:

* wprowadź opis obrazu tutaj *

Przed dodaniem dzieci PC1 może wskazywać w dowolnym miejscu; nie ma preferowanego kierunku. Jednak po umieszczeniu dwojga dzieci w środkach dwóch przeciwległych krawędzi PC1 przejdzie przez nie! Taki układ sześciu punktów został opisany przez @ttnphns jako „hantle”:

taka chmura, podobnie jak hantle, będzie miała tendencję do ciągnięcia głównych komputerów, tak aby przenikały one ciężkie obszary

Zauważ, że przeciwne krawędzie zwykłego czworościanu są do siebie prostopadłe, a także prostopadłe do linii łączącej ich środki. Oznacza to, że każda rodzina będzie wyświetlana w jednym punkcie na PC1.

Być może nawet mniej intuicyjnie, jeśli dwoje dzieci zostanie przeskalowanych przez współczynnik , aby dać im taką samą normę jak rodzice, wówczas „wystają” z czworościanu, powodując projekcję PC1 z obojem rodzicami zwiniętymi razem a dziecko jest dalej od siebie. Widać to na drugim rysunku w moim pytaniu: każda rodzina ma naprawdę bliskich rodziców w samolocie PC1 / PC2 (NAWET MYŚLI SĄ NIE POWIĄZANE!), A ich dziecko jest nieco dalej.2


3
Doskonała wizualizacja! Mom1-Child1-Dad1 to jeden dysk lub naleśnik, a Mom2-Child2-Dad2 to drugi, bimodalny obłok. Przyciąga PC1, aby zmaksymalizować wariancję projekcji, przebijając obie „rodziny” ortogonalnie do linii mama-dziecko-tata. W związku z tym każda rodzina rzutuje na jeden punkt (w tym przypadku dziecko) i mamy dwie rodziny jako dwie bardzo ciasne wewnątrz, odległe od siebie skupienia w projekcji.
ttnphns

1
Jakiego programu użyłeś do narysowania obrazu?
ttnphns

4
Tablica, markery tablicy i aparat do smartfona :-)
Ameba
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.