2017-10-09 54 views
0

我已经建立了几个不同的回归模型,使用R中的脱字符包来预测某些基因序列在某些实验条件下如何变成荧光。如何构建回归模型,然后将它们的拟合与模型训练测试中提供的数据进行比较?

我遵循了将我的数据分成两组的基本协议:一个是“训练测试集”(80%)和一个“持有集”(20%),前者将被用于建立模型,后者将被用来测试它们,以便根据诸如R平方和RMSE值等指标比较和选择最终模型。我可以在这里找到一个这样的指南(http://www.kimberlycoffey.com/blog/2016/7/16/compare-multiple-caret-run-machine-learning-models)。

不过,我碰上一个块,我不知道如何来测试和比较基础上以及他们如何能够在保持出一套预测分数不同的模型。在我连接到上述指导,笔者为了建立施加在保持退出设置数据的最近建立的模型(其被称为test一个predict.train对象之后计算每个模型的特异性和准确性使用ConfusionMatrix在链接中)。然而,ConfusionMatrix只能应用于分类模型,其中结果(或响应)是一个分类值(据我的研究表明,如果这是不正确的,请纠正我,因为我无法毫无疑问地得出结论情况就是如此)。

我发现resamples方法能够将多个模型相互比较(来源:https://www.rdocumentation.org/packages/caret/versions/6.0-77/topics/resamples),但它无法考虑新模型如何与我从培训测试会话中排除的数据相符。

我尝试使用最近建立的模型和支持数据创建predict对象,然后使用脱字符号R2RMSE方法计算Rsquared和RMSE值。但我不确定这种方法是否是比较和选择最佳模型的最佳方法。

在这一点上,我要指出,所有我使用的建模方法是基于线性回归,因为我需要能够提取系数,并在一个单独的Python脚本应用它们。

我认为是设置在我的结果,其特征在于,有超过100荧光值的任何基因序列被认为是有用的阈值,而序列100下的得分值的另一种选择则没有。这将允许我使用ConfusionMatrix。但我不确定我应该如何在我的R代码中实现这个功能,以便在结果变量中生成这两个类。我进一步担心这种方法可能难以将我的回归模型应用于其他数据并做出预测。

对于它的价值,每个预测的是整数或浮点数,并有不正常分布范围。

下面是代码我使用迄今一直:

library(caret) 

data <- read.table("mydata.csv") 

sorted_Data<- data[order(data$fluorescence, decreasing= TRUE),] 

splitprob <- 0.8 

traintestindex <- createDataPartition(sorted_Data$fluorescence, p=splitprob, list=F) 
holdoutset <- sorted_Data[-traintestindex,] 
trainingset <- sorted_Data[traintestindex,] 

traindata<- trainingset[c('x1', 'x2', 'x3', 'x4', 'x5', 'fluorescence')] 

cvCtrl <- trainControl(method = "repeatedcv", number= 20, repeats = 20, verboseIter = FALSE) 

modelglmStepAIC <- train(fluorescence~., traindata, method = "glmStepAIC", preProc = c("center","scale"), trControl = cvCtrl) 

model_rlm <- train(fluorescence~., traindata, method = "rlm", preProc = c("center","scale"), trControl = cvCtrl) 

pred_glmStepAIC<- predict.lm(modelglmStepAIC$finalModel, holdoutset) 

pred_rlm<- predict.lm(model_rlm$finalModel, holdoutset) 

glmStepAIC_r2<- R2(pred_glmStepAIC, holdoutset$fluorescence) 
glmStepAIC_rmse<- RMSE(pred_glmStepAIC, holdoutset$fluorescence) 

rlm_r2<- R2(pred_rlm, holdoutset$fluorescence) 
rlm_rmse<- RMSE(pred_rlm, holdoutset$fluorescence) 
+0

那里有一个编程问题吗?否则,这似乎更适合stats.stackexchange.com。 – Roland

+1

考虑读者的注意力和范例的重现性,作为获得正确答案的最重要因素。 –

+0

@Roland我在这里发布,因为我不知道要执行什么代码才能比较和选择我的最终模型。我没有发布CrossValidated,因为他们对关注统计数据的问题非常挑剔,而不是真正的编码方面。话虽如此,如果你认为他们可以接受,我可能会把这个帖子放在CrossValidated上。 –

回答

1

通过插入符提供的外的样品性能度量RMSE,MAE以及拟合值与实测值之间的平方相关性(容易混淆称为R2)。看到这里https://topepo.github.io/caret/measuring-performance.html

更多信息在时间序列回归方面至少,RMSE是回归模型外的样品性能的衡量标准。

我会建议反对discretising连续的结果变量,因为你基本上通过离散来丢弃信息。

+1

不错,我在文档中完全错过了'postResample'方法的存在,它允许您用保留(即测试)数据计算模型的Rsquared,RMSE和MAE。现在我可以拿这些数字,甚至把它们放在一个数据框中作进一步比较。谢谢! –

相关问题