Як дітям вдається зібрати батьків у проекції PCA набору даних GWAS?


9

Візьміть 20 випадкових точок у 10-мірному просторі з кожною координатною лінією від N(0,1). Розділіть їх на 10 пар ("пари") і додайте до набору даних середнє значення кожної пари ("дитина"). Потім зробіть PCA на отриманих 30 очках і побудуйте графік PC1 проти PC2.

Відбувається чудова річ: кожна «родина» утворює трійку точок, які всі зближені. Звичайно, кожна дитина ближче до кожного з своїх батьків у оригінальному 10-мірному просторі, так що можна було очікувати, що вона буде близькою до батьків також у просторі PCA. Однак у просторі PCA кожна пара батьків також близька разом, хоча в оригінальному просторі вони є лише випадковими точками!

Як дітям вдається зібрати батьків у проекції PCA?

введіть тут опис зображення

Можна турбуватися, що на це якимось чином впливає той факт, що у дітей нижча норма, ніж у батьків. Це, мабуть, не має значення: якщо я виховую дітей як(x+y)/2 де x і yє батьківськими пунктами, то вони матимуть у середньому ту саму норму, що й батьки. Але я все ще якісно спостерігаю те саме явище в просторі 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. Ось так визначається положення цієї площини для максимальної дисперсії . Розумієте, у вас є мультимодальні дані з режимами, переважно вдалині від центру (тому що всі точки периферійні в 10 Км), така хмара, як гантель, буде тягти основні ПК, щоб вони пронизували важкі регіони , а отже перпендикулярно до трійки.
ttnphns

1
Висновок, btw є повчальним щодо проблеми, що PCA (PCoA) не дуже хороший як MDS, оскільки він проектує точки і не моделює відстані безпосередньо. Ітеративний MDS, як очікується, створить ці "кластери" значно меншою мірою.
ttnphns

Відповіді:


8

Під час обговорення з @ttnphns у коментарях вище я зрозумів, що те саме явище можна спостерігати у багатьох менших, ніж 10 сімей. Три n=3куточки ( у моєму фрагменті коду) відображаються приблизно в кутах рівностороннього трикутника. Насправді достатньо врахувати лише дві сім'ї ( n=2): вони в кінцевому підсумку розділені вздовж PC1, причому кожна сім'я проектується приблизно на одну точку.

Випадок двох сімей можна візуалізувати безпосередньо. Початкові чотири точки в 10 000-мірному просторі майже ортогональні і розташовані в 4-мірному просторі. Так вони утворюють 4-симплекс. Після центрування вони сформують звичайний тетраедр, який є формою в 3D. Ось як це виглядає:

* сюди введіть опис зображення *

Перед додаванням дітей PC1 може вказувати будь-де; немає кращого напрямку. Однак після того, як двоє дітей будуть розміщені в центрах двох протилежних країв, PC1 піде прямо через них! Таке розташування шести пунктів @ttnphns описало як "гантель":

така хмара, як гантель, буде тягти основні ПК, щоб вони пронизували важкі регіони

Зауважимо, що протилежні краї звичайного тетраедра є ортогональними один до одного, а також ортогональні лінії, що з'єднує їхні центри. Це означає, що кожна PC буде спроектована на одну точку на PC1.

Можливо, навіть менш інтуїтивно, якщо двоє дітей масштабуються за допомогою 2Якщо привести їх до тієї ж норми, що і батьки, тоді вони будуть "стирчати" з тетраедра, в результаті чого проекція PC1 з обома батьками згортається разом, а дитина знаходиться далі. Це можна побачити на другій фігурі мого запитання: у кожної сім’ї батьки дійсно близькі на площині PC1 / PC2 (ВЖЕ ДУМКИ НЕ ПОВЕРНЕННІ!), А їхня дитина трохи далі.


3
Відмінна візуалізація! Mom1-Child1-Dad1 - це один диск або млинець, а Mom2-Child2-Dad2 - другий, із бімодальної хмари. Це притягує PC1, щоб максимально змінити проекцію, щоб пробити обидві «сім’ї» ортогонально до ліній їх мама-дитина-тато. Отже, кожна сім'я проектується в одну точку (дитина, в даному випадку), і ми маємо дві сім'ї як дві дуже тісні всередині, віддалені одна від одної скупчення в проекції.
ttnphns

1
Яку програму ви використовували для малювання малюнка?
ttnphns

4
Дошка, маркери на дошці та камера смартфона :-)
амеба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.