Çocuklar bir GWAS veri setinin PCA projeksiyonunda ebeveynlerini bir araya getirmeyi nasıl başarırlar?


9

10.000 boyutlu bir alanda 20 rastgele nokta alın. N-(0,1). Onları 10 çifte ("çiftler") ayırın ve veri kümesine her çiftin ("bir çocuk") ortalamasını ekleyin. Sonra elde edilen 30 noktada PCA yapın ve PC1'e PC2'yi çizin.

Dikkat çekici bir şey olur: her "aile" birbirine yakın noktalardan oluşan bir üçlü oluşturur. Tabii ki her çocuk orijinal 10.000 boyutlu alanda ebeveynlerinin her birine daha yakındır, böylece kişi PCA alanında da ebeveynlere yakın olmasını bekleyebilir. Bununla birlikte, PCA alanında, her ebeveyn çifti de, orijinal alanda sadece rastgele noktalar olsa da birbirine yakındır!

Çocuklar PCA projeksiyonunda ebeveynleri bir araya getirmeyi nasıl başarıyorlar?

resim açıklamasını buraya girin

Bunun, çocukların ebeveynlerden daha düşük normlara sahip olmasından bir şekilde etkilendiğinden endişe edilebilir. Bu önemli değil: eğer çocukları(x+y)/2 nerede x ve yebeveyn puanları ise, ortalama olarak ebeveynlerle aynı normlara sahip olacaklardır. Ama yine de PCA alanında niteliksel olarak aynı fenomeni gözlemliyorum:

resim açıklamasını buraya girin

Bu soru bir oyuncak veri seti kullanıyor, ancak boyutların tek nükleotid polimorfizmleri (SNP) olduğu genom çapında bir ilişki çalışmasından (GWAS) gerçek dünyadaki veri setinde gözlemlediğim şeyle motive oluyor . Bu veri seti anne-baba-çocuk üçlüleri içeriyordu.


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
Bu kadar yüksek boyutta, rastgele ilişkisiz verilerin tüm veri noktaları, alanın köşelerinde bulunur ve noktalar arasındaki mesafeler neredeyse aynıdır. Bir nokta seçer ve aralarında bir yarım nokta (ortalama) oluşturarak noktalardan başka biriyle bağlarsanız, bir küme oluşturmuş olursunuz: daha önce belirtilen mesafeden belirgin şekilde daha küçük mesafeler kattınız.
ttnphns

1
Evet, 20 orijinal noktanın birbirinden az çok eşit uzaklıkta olduğunu anlıyorum. Ve çocukların ebeveynlerine her iki ebeveynin birbirlerine daha yakın oldukları açıktır. Yine de alamadım, neden ebeveynler PCA projeksiyonunda yakınlaşıyorlar ...
amip

İki rastgele boyut üzerinde projeksiyon yapmaya çalıştınız mı? Ne aldın?
ttnphns

1
Sezgim şu olurdu: noktaların üçüzleri PC1-2 altuzayına neredeyse dik olan yığınlar olarak yansıtılıyor. Varyansı en üst düzeye çıkarmak için bu düzlemin konumu bu şekilde tanımlanır . Görüyorsunuz, modları çoğunlukla merkezden uzakta olan multimodal verileriniz var (noktaların hepsi 10K loşta periferal olduğu için), böyle bir bulut, bir dambıl gibi, ana PC'leri çekme eğiliminde olacak, böylece bunlar ağır bölgeleri delecek ve bu nedenle üçüzlere diktir.
ttnphns

1
Bulgu, btw, PCA'nın (PCoA) MDS olarak çok iyi olmadığı sorununu öğretir, çünkü noktaları yansıtır ve mesafeleri doğrudan modellemez. Yinelemeli bir MDS'nin bu "kümeleri" çok daha düşük bir düzeyde üretmesi beklenir.
ttnphns

Yanıtlar:


8

Yukarıdaki yorumlarda @ttnphns ile yapılan tartışma sırasında, aynı fenomenin 10'dan az aile ile gözlemlenebileceğini fark ettim. Üç aile ( n=3kod pasajımda) kabaca eşkenar üçgenin köşelerinde görünüyor. Aslında, sadece iki aileyi ( n=2) incelemek yeterlidir : PC1 boyunca ayrılırlar ve her aile kabaca bir noktaya yansıtılır.

İki ailenin durumu doğrudan görselleştirilebilir. 10.000 boyutlu uzayda orijinal dört nokta neredeyse diktir ve 4 boyutlu bir alt boşlukta bulunur. Böylece 4-simpleks oluştururlar. Merkezlemeden sonra, 3B şeklinde bir düzenli tetrahedron oluşturacaklar. Şöyle görünüyor:

* buraya resim açıklamasını girin *

Çocuklar eklenmeden önce PC1 herhangi bir yeri gösterebilir; tercih edilen bir yön yoktur. Bununla birlikte, iki çocuk karşılıklı iki kenarın ortasına yerleştirildikten sonra, PC1 hemen içinden geçecektir! Bu altı nokta düzenlemesi @ttnphns tarafından "dambıl" olarak tanımlanmıştır:

böyle bir bulut, bir dambıl gibi, ana PC'leri çekme eğilimi gösterecek, böylece bunlar ağır bölgeleri delecek

Normal bir tetrahedronun zıt kenarlarının birbirine dik ve ayrıca merkezlerini bağlayan çizgiye dik olduğuna dikkat edin. Bu, her ailenin PC1 üzerinde tek bir noktaya yansıtılacağı anlamına gelir.

Belki de daha az sezgisel olarak, eğer iki çocuk 2ebeveynlerle aynı normu vermek için faktör, daha sonra tetrahedrondan "çıkacaklar" ve her iki ebeveynin birlikte çöktüğü ve çocuğun daha da ayrıldığı PC1 projeksiyonu ile sonuçlanacaklar. Bu, sorumun ikinci figüründe görülebilir: her ailenin ebeveynleri PC1 / PC2 uçağına gerçekten yakındır (BUNLARDAN BİLE İLGİLİ DEĞİLDİR!) Ve çocukları biraz daha uzaktadır.


3
Mükemmel görselleştirme! Mom1-Child1-Dad1 bir disk veya gözleme, Mom2-Child2-Dad2 ise bimodal bulutun diğer diskidir. Projeksiyonun varyansını en üst düzeye çıkarmak için her iki "aileyi" anne-çocuk-baba hatlarına dik olarak delmek için PC1'i çeker. Sonuç olarak, her aile bir noktaya (bu örnekte bir çocuk) yansır ve iki aileyi içeride çok sıkı, projeksiyonda birbirinden uzak kümeler olarak ayırırız.
18:24 ttnphns

1
Resmi çizmek için hangi programı kullandınız?
18:24 ttnphns

4
Beyaz tahta, beyaz tahta işaretleri ve bir akıllı telefon kamerası :-)
amoeba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.