大家好,今天介绍一下遗传评估中AIC和BIC的计算方法。
先看一下百公斤日龄窝别效应的动物模型:
for(i in 1:3) phe3[,i] = as.factor(as.character(phe3[,i]))
str(phe3)
ainv = ainverse(ped)
mod_y1 = asreml(y1 ~ CNJX, random = ~ vm(ID,ainv) + Wobie, residual = ~ idv(units),data=phe3)
summary(mod_y1)$varcomp
vpredict(mod_y1,h2 ~ V2/(V1+V2+V3))
这里,窝别效应方差组分是27.9,加性方差组分是21.26,残差方差组分是85.359,遗传力为0.158。
asreml可以直接给出AIC和BIC的值:

这里,loglik为-15839.9,AIC为31685.8,BIC为31705.62。
1,AIC和BIC公式
如果手动计算,应该如何计算,比如想要计算dmu、blupf90,hiblup的AIC和BIC,知道loglik,如何计算。
参考文献:ÇAnkaya S, Takma C, Abacı S H, et al. A comparison of some random regression models for first lactation test day milk yields in jersey cows and estimating of genetic parameters.[J]. Kafkas Üniversitesi Veteriner Fakültesi Dergisi, 2014, 20(1):5-10.


2,AIC公式详解及验证
解析上面的公式:
AIC = -2logL + 2K
这里的logL为loglikelihood迭代值,K为方差组分的估算的个数,这里K=3(窝别效应,加性效应,残差效应)。
> K = 3
> lamda = 5481
> AIC = -2*logL + 2*K;AIC
[1] 31685.8
> summary(mod_y1)$aic
[1] 31685.8
attr(,"parameters")
[1] 3AIC结果手动计算和软件提供计算一致。
3,BIC公式详解及验证
BIC = -2logL + K*log(lamda),lamda = n - r(X)
这里的logL为loglikelihood迭代值,K为方差组分的估算的个数,这里K=3,n为分析所用的数据(去掉缺失值),r(X)为固定因子的水平数。
> dim(phe3[!is.na(phe3$y1),])
[1] 5493 5这里可以看到,没有缺失的数据为5439,
> str(phe3)
'data.frame': 5512 obs. of 5 variables:
$ ID : Factor w/ 5512 levels "YYSDYS321000009",..: 3120 3121 5283 4410 2951 4926 4424 4348 4382 4409 ...
$ CNJX : Factor w/ 12 levels "SDYS3_20222_F",..: 5 5 11 9 5 9 9 9 9 9 ...
$ Wobie: Factor w/ 1321 levels "1","10","100",..: 1314 1314 95 893 1231 223 894 860 881 893 ...
$ y1 : num 172 179 151 165 153 ...
$ y2 : num 14.47 14.39 10.5 8.61 13.28 ...窝别的水平数是12,所以lamda为:5493-12 = 5481,手动计算:
> logL = mod_y1$loglik;logL
[1] -15839.9
> K = 3
> lamda = 5481
> BIC = -2*logL + K*log(lamda);BIC
[1] 31705.62
> summary(mod_y1)$bic
[1] 31705.62
attr(,"parameters")
[1] 3BIC结果手动计算和软件提供计算一致。
4,手动计算注意事项
A:loglik不同软件不一样,所以,评价AIC和BIC时,需要时同一个软件不同模型才有比较性。
B:普通 lm/glm:用 ML,AIC/BIC 基于 “样本量 n”,混合模型:用 REML,AIC/BIC 基于 nedf,参数个数只算方差分量。