准确性指的是预测效应值与真值之间的相关系数。有时还会遇见一个概念——可靠性(reliability)。可靠性是准确性的平方,也就是说这二者度量的是一个事情。reliability其实就是遗传力,这句很重要!!!。遗传力主要用来计算选择响应(response to selection)。advisor说我的文章短句子太多,不连贯,确实是这样LOL。
准确性的计算公式为:
PEV是prediction error variances的缩写,意思是预测误差方差,预测误差是预测值与真值间的差,即:
公式2-pev.png
简书不支持公式真是淡疼!
\sigma a^2是加性方差。
预测差值的标准误(SED)是可以从Asreml
中直接得到的,与PEV的关系是:
我不知道上面这个公式怎么推导的。
所以有
公式4-pev2.png
在很长时间里我不知道(或者说模糊地知道)accuracy是怎么实现的。我知道公式,但在软件里分别和公式组分对应的部分是什么却不是很清楚,当然写这篇文字的时候是确定的。具体实现的途径有2:
- 一是利用Asreml中的
prediction
直接得到SED后,再根据公式4得出PEV
fm_pred <- predict(fm_asr, classify = "Fam") #fm_asr是asreml()输出的对象, Fam是随机效应变量
SED <- fm_pred$predictions$avsed
- 二是逐步得到PEV,每个预测值都有一个PEV,是预测值SE平方的均值,所以从预测函数得到的对象中提取出SE平方后再平均即可
fm_pred <- predict(fm_asr, classify = "Fam", present = "Plot") #注意!这里预测的时候是要矫正掉其他的随机效应(如Plot)
SE <- fm_pred$predictions$pvals$standard.error
PEV <- SE^2 %>% mean
这里的PEV是一个向量,对应到每个水平上。
所以,总体上,PEV、SED和SE的关系是
另外,在林元震老师的著作R与ASReml-R统计学中(P474)也涉及到accuracy的代码
SE <- fm_asr$vcoeff$random * fm_asr$sigma2 #效应值se乘以sigma
结果是一样的,但不知道是否合理。
如果没有Asreml可能需要更底层的计算(比如手动),这时PEV的计算更直观些:
公式6-pev3.png于是有 公式7-reliability.png
C^{22}是方程组关联矩阵的逆矩阵的右下角块,d_i是块中的对角线元素。具体可查看Pro. Isik编写的教材P84和Mrode, 2014的书P44。
从PEV就可以得到我们需要的准确性和可靠性值了。
这个问题在群中还被讨论过
accuracy_chat.jpg
网友评论