- 0,1,2のジェノタイプデータは平均はアレル頻度に依存するし、分散もアレル頻度に依存する
- 今、遺伝率を計算するときには、全座位のもたらす「分散」の和が欲しいので、すべての座位を分散的に同じように扱えるとよい
- そうすると、線形回帰してやったとき、遺伝要因の分散は、線形回帰係数の二乗の和になるから
- Rでやってみる
my.standardize <- function(x){
m <- mean(x)
v <- 1/length(x) * sum((x-m)^2)
ret <- (x-m)/sqrt(v)
ret
}
n.marker <- 100
N <- 10^5
g <- matrix(0,N,n.marker)
f <- 0.1 + runif(n.marker) * 0.4
for(i in 1:n.marker){
g[,i] <- sample(0:2,N,replace=TRUE,prob=c(f[i]^2,2*f[i]*(1-f[i]),(1-f[i])^2))
}
r <- rnorm(n.marker)
R <- rep(0,N)
for(i in 1:n.marker){
R[which(g[,i]==1)] <- R[which(g[,i]==1)] + r[i]
R[which(g[,i]==2)] <- R[which(g[,i]==2)] + r[i]*2
}
h <- 0.7
eV <- (1-h)/h * var(R)
R. <- R + rnorm(N,0,sqrt(eV))
pheno <- R.
g.st <- g
for(i in 1:n.marker){
g.st[,i] <- my.standardize(g[,i])
}
lm.out <- lm(pheno~g)
pheno. <- lm.out$fitted
lm.out2 <- lm(pheno~g.st)
pheno.2 <- lm.out2$fitted
var(pheno.)
var(pheno.2)
sum(lm.out2[[1]][-1]^2)
h1 <- var(R)/var(pheno)
h1
sum(lm.out2[[1]][-1]^2)/var(pheno)
> var(pheno.)
[1] 37.50983
> var(pheno.2)
[1] 37.50983
> sum(lm.out2[[1]][-1]^2)
[1] 37.53385
>
> h1 <- var(R)/var(pheno)
> h1
[1] 0.6962973
> sum(lm.out2[[1]][-1]^2)/var(pheno)
[1] 0.6990415