Bagaimana anak-anak mengatur untuk mengumpulkan orang tua mereka dalam proyeksi PCA dari kumpulan data GWAS?

9

Ambil 20 titik acak dalam ruang 10.000 dimensi dengan setiap koordinat iid dari . Bagi mereka menjadi 10 pasangan ("pasangan") dan tambahkan rata-rata setiap pasangan ("anak") ke dataset. Kemudian lakukan PCA pada 30 poin yang dihasilkan dan plot PC1 vs PC2.N(0,1)

Suatu hal yang luar biasa terjadi: setiap "keluarga" membentuk triplet poin yang semuanya berdekatan. Tentu saja setiap anak lebih dekat dengan masing-masing orang tuanya di ruang 10.000 dimensi asli sehingga orang bisa berharap untuk dekat dengan orang tua juga di ruang PCA. Namun, dalam ruang PCA setiap pasangan orang tua juga berdekatan, meskipun di ruang asli mereka hanya titik acak!

Bagaimana anak-anak berhasil mengumpulkan orang tua bersama dalam proyeksi PCA?

masukkan deskripsi gambar di sini

Orang mungkin khawatir bahwa ini entah bagaimana dipengaruhi oleh fakta bahwa anak-anak memiliki norma yang lebih rendah daripada orang tua. Ini tampaknya tidak masalah: jika saya menghasilkan anak-anak sebagai mana dan adalah titik orangtua, maka mereka akan memiliki rata-rata norma yang sama dengan orang tua. Tapi saya masih mengamati secara kualitatif fenomena yang sama di ruang PCA:(x+y)/2xy

masukkan deskripsi gambar di sini

Pertanyaan ini menggunakan set data mainan tetapi dimotivasi oleh apa yang saya amati dalam set data dunia nyata dari studi asosiasi genome-wide (GWAS) di mana dimensi adalah single-nucleotide polymorphisms (SNP). Kumpulan data ini berisi trio ibu-ayah-anak.


Kode

%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')
amuba
sumber
1
Dalam dimensi yang begitu tinggi, semua titik data dari data acak yang tidak terkait terletak di sudut ruang dan jarak antara titik hampir sama. Jika Anda memilih titik dan mengikatnya dengan titik yang lain dengan cara menciptakan titik setengah jalan (rata-rata) di antara titik-titik tersebut, Anda telah membuat sebuah kelompok: Anda telah memperkenalkan jarak yang jauh lebih kecil daripada jarak yang disebutkan sebelumnya.
ttnphns
1
Ya, saya mengerti bahwa 20 poin asli semuanya kurang lebih sama satu sama lain. Dan jelas bahwa anak-anak lebih dekat dengan orang tua mereka daripada dua orang tua satu sama lain. Apa yang saya masih belum dapatkan, adalah mengapa orang tua menjadi dekat dalam proyeksi PCA ...
amoeba
Apakah Anda mencoba memproyeksikan pada dua dimensi acak? Apa yang kamu dapatkan?
ttnphns
1
Intuisi saya adalah ini: kembar tiga poin diproyeksikan sebagai tumpukan hampir tegak lurus dengan ruang bagian PC1-2. Ini adalah bagaimana posisi pesawat ini didefinisikan untuk memaksimalkan varians . Soalnya, Anda punya data multimodal dengan mode yang sebagian besar jauh dari pusat (karena poin semuanya periferal dalam 10K redup), awan seperti itu, seperti halter, akan cenderung menarik PC utama sehingga ini menembus wilayah yang berat. , dan karenanya tegak lurus terhadap si kembar tiga.
ttnphns
1
Temuannya, btw adalah petunjuk untuk masalah bahwa PCA (PCoA) tidak begitu baik sebagai MDS karena memproyeksikan poin dan tidak memodelkan jarak secara langsung. MDS berulang akan diharapkan untuk menghasilkan "cluster" ke tingkat yang jauh lebih rendah.
ttnphns

Jawaban:

8

Selama diskusi dengan @ttnphns dalam komentar di atas, saya menyadari bahwa fenomena yang sama dapat diamati dengan kurang dari 10 keluarga. Tiga keluarga ( n=3dalam cuplikan kode saya) muncul secara kasar di sudut-sudut segitiga sama sisi. Bahkan, cukup untuk hanya mempertimbangkan dua keluarga ( n=2): mereka akhirnya dipisahkan sepanjang PC1, dengan masing-masing keluarga diproyeksikan secara kasar ke satu titik.

Kasus dua keluarga dapat divisualisasikan secara langsung. Empat titik asli dalam ruang 10.000 dimensi hampir ortogonal dan berada dalam ruang bagian 4 dimensi. Jadi mereka membentuk 4-simpleks. Setelah pemusatan, mereka akan membentuk tetrahedron biasa yang merupakan bentuk 3D. Berikut ini tampilannya:

* masukkan deskripsi gambar di sini *

Sebelum anak-anak ditambahkan, PC1 dapat menunjuk ke mana saja; tidak ada arah yang disukai. Namun, setelah dua anak diposisikan di tengah-tengah dari dua sisi yang berlawanan, PC1 akan menembus mereka! Susunan enam poin ini dijelaskan oleh @ttnphns sebagai "dumbbell":

awan seperti itu, seperti halter, akan cenderung menarik PC utama sehingga menembus wilayah yang berat

Perhatikan bahwa tepi berlawanan dari tetrahedron reguler saling ortogonal dan juga ortogonal dengan garis yang menghubungkan pusat-pusatnya. Ini berarti bahwa setiap keluarga akan diproyeksikan ke satu titik tunggal pada PC1.

Mungkin bahkan kurang intuitif, jika kedua anak diskalakan oleh faktor untuk memberi mereka norma yang sama seperti yang dimiliki orang tua, maka mereka akan "menonjol" dari tetrahedron, menghasilkan proyeksi PC1 dengan kedua orang tua runtuh bersama. dan anak terpisah lebih jauh. Hal ini dapat dilihat pada gambar kedua dalam pertanyaan saya: setiap keluarga memiliki orang tuanya yang benar-benar dekat dengan pesawat PC1 / PC2 (BAHKAN MEREKA TIDAK MEREKA TERKAIT!), Dan anak mereka agak jauh terpisah.2

amuba
sumber
3
Visualisasi luar biasa! Mom1-Child1-Dad1 adalah satu disc atau pancake, dan Mom2-Child2-Dad2 adalah yang lain, dari cloud bimodal. Ini menarik PC1, untuk memaksimalkan varian proyeksi, untuk menembus kedua "keluarga" secara ortogonal ke garis ibu-anak-ayah mereka. Akibatnya, setiap keluarga memproyeksikan menjadi satu titik (seorang anak, dalam hal ini) dan kami memiliki dua keluarga sebagai dua sangat ketat di dalam, jauh dari satu sama lain cluster dalam proyeksi.
ttnphns
1
Program apa yang Anda gunakan untuk menggambar?
ttnphns
4
Papan tulis, spidol papan tulis, dan kamera smartphone :-)
amoeba