例如,我有如下数据。
genotype=rep(c("A","B","C","D","E"), each=5)
env=rep(c(10,20,30,40,50), time=5)
outcome=c(10,15,17,19,22,12,13,15,18,25,10,11,12,13,18,11,15,20,22,28,10,9,10,12,15)
dataA=data.frame(genotype,env,outcome)
然后,我想在每个基因型的结果和env之间进行拟合,并且还想计算RMSE。所以,我使用了这个代码。
A=anova(lm(outcome~env,data=subset(dataA, genotype=="A")))
##
Response: outcome
Df Sum Sq Mean Sq F value Pr(>F)
env 1 78.4 78.400 84 0.002746 **
Residuals 3 2.8 0.933
##
A_rmse=sqrt(0.933)
A_rmse= 0.9659193
我需要以同样的方式计算B和直到E基因型,但在我的实际数据中,基因型超过100,所以不可能逐个计算。所以我想知道如何自动计算每个基因型的RMSE(=方差分析表中MSE的平方根)。
你能告诉我怎么做吗?
总是非常感谢,
1条答案
按热度按时间a9wyjsp71#
一种方法是按基因型使用
nest
数据。这允许您在列表列中创建包含anova
结果的数据框。然后可以使用broom::tidy
提取Mean sq
值并计算RMSE。这方面的基础是优秀的教程Running a model on separate groups。
首先,如果需要,安装软件包,然后加载:
下面是按基因型嵌套数据的样子:
现在我们可以使用
mutate
和map
添加包含anova
结果的列,以及tidy
提取的指标:现在我们
unnest
列results
和filter
残差项:最后,使用
sqrt(meansq)
计算RMSE,然后选择所需的列。整个过程看起来像这样: