■
先日、複合遺伝性疾患のリスクをヒストグラム表示するための簡易Rコマンドを書いた。
その続き。
今、ある複合遺伝性疾患があって、その発病リスクは環境要因と遺伝要因とで構成され、それぞれは相互に独立であり、また、それぞれは正規分布を仮定できるとする。
今、遺伝要因を構成する相互に独立な多座位のうち、ある1つの座位のリスクに着目する。
以下に示すRの関数の説明は次の通り。
シミュレーション回数N デフォルトは10000
疾患の有病率prevalence
有病率のうち、この試行のモデルで説明できる分が1-phenocopy, デフォルトはphenocopy=0
遺伝率(環境要因と遺伝要因を足した、全分散のうち、遺伝要因が占める割合)heritability
遺伝要因のうち、着目している座位が担う割合 locusFrac(1ならこの座位のみということ)(厳密には、着目座位以外のリスクに正規分布を仮定し、着目座位のそれは、2アレルの作る3ディプロタイプでのそれになるので、異なってくるが。
着目座位のリスクアレルの頻度alleleFreq
3ディプロタイプの頻度がHWEからずれていてもよいようにその因子F デフォルトは0でそのときはHWE
homo1, hetero, homo2のリスクは線形をデフォルト(k=0)とするが、k=1にすれは、heteroのリスクはhomo1と同じになり、k=-1とすればheteroのリスクはhomo2と同じになる。そのためのパラメタがk
掲載図は、以下の実行例の最初の方のヒストグラム(3色の色分けが、着目SNPの3ディプロタイプに相当)。
10万人、有病率1%、フェノコピーが20%、遺伝率が60%、着目座位は全遺伝成分の1%(ヒストグラムで、3ディプロタイプのヒストグラムにほとんど差がないことが、「全遺伝成分のわずかしかになっていないこと」と符合している)、リスクアレル頻度は10%、HWE(F=0)の場合で、リスクアレルホモ(homo1)の有病者割合が0.016、ヘテロのそれが0.014、非リスクアレルホモ(homo2)のそれが、0.009となって、homo1/homo2のRRが1.79、hetero/homo2のRRが1.55になっていることがわかる。
単座位で考え、他の座位の影響を考えないとき、ホモ・ヘテロ・逆ホモに線形のリスクをモデルしているのに、homo1/homo2のRRとhetero/homo2のRRとがかなり近くなることもわかる
varg は着目SNPを除く遺伝因子の分散、vareは環境因子の分散、varmは着目SNPを除く遺伝因子と環境因子の和の分散、varsnpは着目SNPの分散、varaは着目SNPを含めた全遺伝因子と環境因子の和の分散
LocusRRSim<-function(N=10000,prevalence,phenocopy=0,heritability,locusFrac,alleleFreq,F=0,k=0){ #N<-10000000 #prevalence<-0.01 #phenocopy<-0.1 #print(c("N",N)) prevalence #print(c("prevalence",prevalence)) phenocopy #print(c("phenocopy",phenocopy)) heritability #print(c("heritability",heritability)) locusFrac #print(c("locusFrac",locusFrac)) alleleFreq #print(c("alleleFreq",alleleFreq)) F #print(c("F",F)) quantile<-1-prevalence*(1-phenocopy) randphenocopy<-runif(N) copycase<-which(randphenocopy<phenocopy*prevalence) #gvfrac<-0.8 gvfrac<-heritability*(1-locusFrac) #locusFrac<-0.05 #p<-0.2 p<-alleleFreq g<-rnorm(N,mean=0,sd=sqrt(gvfrac)) #print(c("varg",var(g))) e<-rnorm(N,mean=0,sd=sqrt(1-heritability)) #print(c("vare",var(e))) m<-g+e #print(c("varm",var(m))) rand<-runif(N) snprisk<-rep(0,N) homo1<-which(rand<p*p+F*p*(1-p)) #hetero<-which((rand>=p*p)&&(rand<p*p+2*p*(1-p))) homo2<-which(rand>=p*p+2*p*(1-p)-F*p*(1-p)) hetero<-setdiff(c(1:length(g)),homo1) hetero<-setdiff(hetero,homo2) X<-sqrt(heritability*locusFrac/(2*p*(1-p))) snprisk[homo1]<-X*(1-p)*2 snprisk[homo2]<-X*(-p)*2 snprisk[hetero]<-X*(1-2*p+k) #print(c("varsnp",var(snprisk))) a<-m+snprisk #print(c("vara",var(a))) threshold<-quantile(a,quantile) h<-hist(a) hist(a[homo2],breaks=h$breaks,ylim=c(0,max(h$counts)),col="blue",density=30,main="",xlab="",ylab="") par(new=T) hist(a[hetero],breaks=h$breaks,ylim=c(0,max(h$counts)),col="purple",density=40,main="",xlab="",ylab="") par(new=T) hist(a[homo1],breaks=h$breaks,ylim=c(0,max(h$counts)),col="red",density=50,main="MAIN",xlab="XLAB",ylab="YLAB") casehomo1<-length(union(which(a[homo1]>threshold),intersect(homo1,copycase))) casehetero<-length(union(which(a[hetero]>threshold),intersect(hetero,copycase))) casehomo2<-length(union(which(a[homo2]>threshold),intersect(homo2,copycase))) conthomo1<-length(a[homo1])-casehomo1 conthetero<-length(a[hetero])-casehetero conthomo2<-length(a[homo2])-casehomo2 casehomo1 #print(c("casehomo1",casehomo1)) #print(c("casehetero",casehetero)) #print(c("casehomo1",casehomo1)) #print(c("conthomo1",conthomo1)) #print(c("conthetero",conthetero)) #print(c("conthomo1",conthomo1)) casehetero casehomo2 conthomo1 conthetero conthomo2 prevhomo1<-casehomo1/(casehomo1+conthomo1) prevhetero<-casehetero/(casehetero+conthetero) prevhomo2<-casehomo2/(casehomo2+conthomo2) prevhomo1 prevhetero prevhomo2 #print(c("prevhomo1",prevhomo1)) #print(c("prevhetero",prevhetero)) #print(c("prevhomo1",prevhomo1)) RRhomo1<-prevhomo1/prevhomo2 RRhetero<-prevhetero/prevhomo2 #print(c("RRhomo1vshomo2",RRhomo1)) #print(c("RRheterovshomo2",RRhetero)) res<-list(N=N,prevalence=prevalence,phenocopy=phenocopy,heritability<-heritability,locusFrac=locusFrac,alleleFreq=alleleFreq,F=F,varg=var(g),vare=var(e),varm=var(m),varsnp=var(snprisk),vara=var(a),casehomo1=casehomo1,casehetero=casehetero,casehomo2=casehomo2,conthomo1=conthomo1,conthetero=conthetero,conthomo2=conthomo2,prevhomo1=prevhomo1,prevhetero=prevhetero,prevhomo2=prevhomo2,RRhomo1vshomo2=RRhomo1,RRheterovshomo2=RRhetero) print(res) return(res) } --------- N<-100000 prevalence<-0.01 phenocopy<-0.2 heritability<-0.6 locusFrac<-0.01 alleleFreq<-0.1 F<-0.0 res<-LocusRRSim(N=N,prevalence=prevalence,phenocopy=phenocopy,heritability=heritability,locusFrac=locusFrac,alleleFreq=alleleFreq,F=F) $N [1] 1e+05 $prevalence [1] 0.01 $phenocopy [1] 0.2 $heritability [1] 0.6 $locusFrac [1] 0.01 $alleleFreq [1] 0.1 $F [1] 0 $varg [1] 0.5969842 $vare [1] 0.4023782 $varm [1] 0.9966114 $varsnp [1] 0.005973443 $vara [1] 1.001756 $casehomo1 [1] 22 $casehetero [1] 228 $casehomo2 [1] 754 $conthomo1 [1] 1010 $conthetero [1] 17770 $conthomo2 [1] 80216 $prevhomo1 [1] 0.02131783 $prevhetero [1] 0.01266807 $prevhomo2 [1] 0.00931209 $RRhomo1vshomo2 [1] 2.289263 $RRheterovshomo2 [1] 1.36039 LocusRRSim(prevalence=prevalence,heritability=heritability,locusFrac=locusFrac,alleleFreq=alleleFreq,F=F)