results <- list() for(i in 1:1) { print(paste(i,"fold")) train_index <- unlist(cvlist[-i]) test_index <- cvlist[[i]] m_train = Markers_2[train_index,] m_test = Markers_2[test_index,] Pheno_train = pheno[train_index,] Pheno_test = pheno[test_index,] class(m_test) TS <- as.numeric(Pheno_train) ETA<-list(list(X= m_train ,model='BayesB')) fit_BB=BGLR(y=TS,ETA=ETA,nIter=nIter,burnIn=burnIn,thin=thin,saveAt=saveAt,df0=5,S0=S0,weights=weights,R2=R2) str(fit_BB) pre_eta <- list(list(X= m_test ,model='BayesB')) predictions <- predict( fit_BB, pre_eta ) # predictions[predictions < 0] <- 0.1 obversion <- Pheno_test results[[i]] <- data.frame( test_index,predictions, obversion) };如该代码所示,predict时候结果是训练集的数量
时间: 2024-03-03 15:51:29 浏览: 83
根据你提供的代码,问题出在predict()函数的调用上。在predict()函数中,你应该使用与训练集相同的ETA对象,而不是使用不同的ETA对象去进行预测。因此,你需要将预测数据的ETA对象设置为与训练数据相同的ETA对象。具体来说,你需要在predict()函数中使用和拟合模型时相同的ETA值。
修改后的代码如下:
```
results <- list()
for(i in 1:1) {
print(paste(i,"fold"))
train_index <- unlist(cvlist[-i])
test_index <- cvlist[[i]]
m_train = Markers_2[train_index,]
m_test = Markers_2[test_index,]
Pheno_train = pheno[train_index,]
Pheno_test = pheno[test_index,]
TS <- as.numeric(Pheno_train)
ETA<-list(list(X= m_train ,model='BayesB'))
fit_BB=BGLR(y=TS,ETA=ETA,nIter=nIter,burnIn=burnIn,thin=thin,saveAt=saveAt,df0=5,S0=S0,weights=weights,R2=R2)
str(fit_BB)
# 使用相同的ETA对象进行预测
predictions <- predict(fit_BB, list(list(X=m_test, model='BayesB', ETA=ETA)), nIter=nIter, burnIn=burnIn, thin=thin)
obversion <- Pheno_test
results[[i]] <- data.frame(test_index, predictions, obversion)
}
```
这样修改后,predict()函数将会使用相同的ETA对象去进行预测,而不是使用不同的ETA对象。
阅读全文