我有一个多环境试验数据集,在四个环境中测试基因型。我想预测所有基因型的环境特异性 BLUP。我使用 R 中 sommer-package 中的 mmer-function,它运行没有问题。但是,当我将 Predict.mmer 函数与从模型输出中提取的 Dtable 一起使用时,出现错误。下面是一个可重现的示例,它产生与我的数据集相同的错误。
library(sommer)
ID <- factor(1:50) # 50 genotype IDs
Env <- factor(1:4) # 4 environments
ID_test <- sample(ID, 15) # sample 15 genotype IDs for making a test set
# creating a data frame with all combinations of IDs and environments
df_example <- expand.grid(ID = ID, Env = Env) %>%
mutate(y = rnorm(n()), # random response variable
yNA = ifelse(ID %in% ID_test, NA, y)) # masking test IDs with NA
# run mmer model
m_examp <- mmer(yNA ~ 1,
random= ~ vsr(dsr(Env), ID),
rcov= ~ units,
data = df_example, naMethodY = "include")
# extract Dtable, and set include to T
Dt <- m_examp$Dtable
Dt[1:3,"include"] <- T
Dt
# predict Env effects
r <- predict.mmer(object = m_examp, Dtable = Dt, D = "Env")
预测环境影响会产生以下错误:
Error in `$<-.data.frame`(`*tmp*`, "start", value = c(1, 2, 52, 102, 152 :
replacement has 5 rows, data has 3
我尝试通过将 Dtable 扩展为交互项的两倍来解决此问题,以获得 5 行 Dtable,如错误所示。这很有效,尽管这似乎不是正确的解决方案。
# extend Dtable with interaction term
Dt_ext <- data.frame(type = "random", term = "Env:ID", include = T, average = F)
# predict Env:ID BLUPs
r <- predict.mmer(object = m_examp, Dtable = rbind(Dt, Dt_ext, Dt_ext), D = "ID:Env")
所以问题是:使用 sommer 包预测该模型的 ID:Env 交互项的正确方法是什么?或者我做错了什么?
您可能想尝试使用 mmec() 来拟合模型并使用 Predict.mmec() 函数。 mmer 的预测函数非常混乱,我无法调试。我正在努力移动 mmer 函数以使用与 mmec 相同的公式和函数,希望这将在第三季度完成。