我有一个包含100个样本(行)和10000个独立特征(列)的矩阵(x)。观察结果是二元的,样本是好的还是坏的{0,1}(存储在向量y中)。我想执行一次交叉验证并分别确定每个功能的曲线下面积(AUC)(类似于CAtools包中的colAUC)。我试图使用glmnet,但它没有用。正如在手册中所说,我试图将nfold参数设置为等于观察数(100)。
>result=cv.glmnet(x,y,nfolds=100,type.measure="auc",family="binomial")
我收到了这些警告:
>"Warning messages:
1: Too few (< 10) observations per fold for type.measure='auc' in
cv.lognet; changed to type.measure='deviance'. Alternatively, use smaller
value for nfolds
2: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per
fold"
任何想法我做错了什么?是否有任何其他方式或R包来获得每个特征的LOO平衡AUC值?
我真的很感激任何帮助。谢谢!
答案 0 :(得分:2)
当你做一个LOO-CV时,你有一个测试集,其中只有一个样本,你当然不能用它建立一个AUC。但是,您可以在每个步骤循环和存储预测:
k <- dim(x)[1]
predictions <- c()
for (i in 1:k) {
model <- glmnet(x[-i,], y[-i], family="binomial")
predictions <- c(predictions, predict(model, newx=x[i,]))
}
这样最终你可以制作一条ROC曲线,例如:
library(pROC)
roc(y, predictions)