1 of 16

5班 :SNP数は集団構造解析の解像度にどう影響するか�(五条堀先生よりご提案)

名前 ・浅川優香

・近藤隆 

・竹内峻平

発表+質疑応答7分

(発表4分以上)

2 of 16

背景

  • 集団の関係性を図示するためにPCAを用いたり、祖先成分の推定にADMIXTUREが用いられる
  • 連鎖不平衡(LD)の影響を除くため、LD pruningによりゲノム上で独立な関係にあるSNP群を抽出して解析する

​

LD pruningで閾値を変えると、抽出されるSNPの数が変わる

3 of 16

課題

  • ヒトの公開データでPCAやADMIXTUREを行う
  • LD pruningの閾値を変える→集団の分解能や祖先成分の推定が変わるか?
  • 使用するSNPの数を恣意的に数千から数百程度まで減らした場合に、�どれくらいの解像度が維持されるかを調べる

​

​

11の人種, 約1200人のSNPデータを用いて解析(Hapmap project)

4 of 16

LD-pruningにより使用するSNPの個数を絞る

  • 一定以上の相関係数を持つSNPは、連鎖不平衡とみなして除去
  • 閾値を厳しくしても、削れるSNP数は頭打ち

5 of 16

Hapmap Consortium, 2010, Nature

先行研究 SNP数9,941個(pruning + 距離の制約)

PCAの結果は先行研究と符合した

よく似ている

本研究 r2 = 0.00000001(厳しい)

6 of 16

LD pruning閾値別のPCA plot

r2 = 0.1

162269 SNPs

r2 = 0.00000001

16985 SNPs

r2 = 0.8

914088 SNPs

7 of 16

LD pruning閾値別のPCA plot

r2 = 0.1で最も寄与率が低い

8 of 16

LD pruning閾値による寄与率の変化

PC1

PC2

r2 = 0.05で最も寄与率が低下する

→r2 = 0.001~0.1に寄与率を低下させるSNPsが存在する

閾値Log (r2)

閾値Log (r2)

寄与率

寄与率

SNPs数

SNPs数

9 of 16

人種集団内でのPCA plot

人口数上位5集団内のPCA plotにおけるPC1の寄与率を算出

YRI

MKK

人口数

上位5集団

CEB

CEB/

JPT

10 of 16

人種集団内におけるLD pruning閾値の変化による

PC1の寄与率の変化

r2 = 0.001~0.1で

寄与率が上昇する

↓

人種集団間で寄与率を

低下させたSNPs

r2 = 0.001

0.1

PC1寄与率

閾値Log (r2)

11 of 16

人種間・人種内でのSNPsと寄与率の関係

人種内で寄与率を上昇させるSNPs(血縁関係?)は

人種間での寄与率を低下させる

人種間SNPs

人種内SNPs

12 of 16

ADMIXTURE

K=5, r2=0.00000001, SNP数=16,985

Koenig, et al., 2024, Genome Res.

K=6, r2=0.1, SNP数=153,894,851

アフリカ、ヨーロッパ、東アジア集団をよく区別している

反対に、アメリカ集団は別のクラスターに分類

されている割合が高い

13 of 16

まとめ

・LD pruningによってSNP数を減らしてPCAを行うと、

おおよそ同一のクラスターが生成されたが、寄与率に変化が見られた

​

・LD pruningによってSNP数を減らしてACMIXTUREを行うと、祖先集団の特徴によって分類できるものと分類できないものが見られた

14 of 16

雑記

from io import StringIO

​

text = """r2 SNPs_remaining Percent_remaining

0.00000001 16985 1.17

0.0000001 16999 1.17

0.000001 17029 1.17

0.00001 17165 1.18

0.00005 17389 1.19

0.0001 17551 1.20

0.0005 18347 1.26

0.001 19173 1.32

0.005 27966 1.92

0.01 35966 2.47

0.02 50003 3.43

0.05 92938 6.37

0.10 162269 11.13

0.15 225716 15.48

0.20 285012 19.55

0.30 394497 27.06

0.50 595008 40.81

0.80 914088 62.70"""

​

df = pd.read_csv(StringIO(text), sep=r"\s+")

display(df)

​

15 of 16

16 of 16