我有一个看起来像这样的数据集,其中“1”表示主机是否被感染,“0”表示主机在指定剂量下是否未被感染。然而,ROC函数需要观察到的数据、假阳性和真阳性来生成ROC曲线。我想我错过了一个步骤或计算错误的东西,但我不确定它是什么。
library(pROC)
dataname <- data.frame(Dose = c(rep(0.2, 8), rep(0.3, 7), rep(0.7, 10)),
Infected = c(rep(0, 20), rep(1, 5)))
我使用GLM来计算每种剂量下每种宿主被感染的概率。
#logistic model
logistic <- glm(
formula = Infected ~ Dose,
data = dataname,
family = binomial(link = 'logit')
)
然后,我将概率从最低到最高进行排序:
predicted.data<-data.frame(prob.inf = logistic$fitted.values, Infected = dataname$Infected)
predicted.data<-predicted.data[order(predicted.data$prob.inf, decreasing=FALSE),]
predicted.data$rank<-1:nrow(predicted.data)
然后我运行roc函数并绘制曲线:
roc_data <-roc(dataname$Infected, predicted.data$prob.inf)
plot(roc_data, main="ROC Curve", print.auc=TRUE, xlim=(0:1), ylim=(0:1))
2条答案
按热度按时间2wnc66cl1#
为了真正理解模型诊断,手工计算一些指标(并不过于复杂)是很有启发性的。在逻辑回归设置中,您将从混淆矩阵开始,并从那里获得相关指标。
这里有一个工作的例子:
既然已经理解了这一点,我们可以使用内置库来做同样的事情。有相当多的他们(很好的比较可以找到here)。一个选项是
library(ROCR)
:从混淆矩阵(和一些基本的几何学),你也可以计算曲线下的面积:
9rygscc12#
您不需要对预测概率进行排序和排序。假设您使用的是
pROC
包中的roc()
函数,您只需将响应dataname$Infected
和拟合值logistic$fitted.values
提供给它即可。下面的代码:
生产:
在我看来是正确的。