计算MaxEnt和BIOMOD的ROC/AUC
非常感谢温彻斯特的帮助!我也看到了教程,这对我来说很有用!在过去的两天里,我研究了MaxEnt和BIOMOD的输出,我想我仍然对这两个版本中使用的术语感到有点困惑 从飞利浦的代码来看,他似乎使用了样本点和后搁浅点来计算ROC,而在BIOMOD中,只有存在点和伪缺失点的预测。这意味着,对于同一个数据集,我有相同数量的存在/样本数据,但两个模型的存在/背景数据不同。当我重新计算ROC时,它通常与模型本身报告的值不一致 我想我仍然没有得到模型评估的一些要点,关于评估什么以及如何生成评估数据集,即comfusion矩阵,以及选择哪部分数据作为评估 谢谢大家的友好回复!给您带来的不便我深表歉意。我在BIOMOD的帖子中又添加了几句话,使其可以运行,至于MaxEnt,您可以使用教程数据 实际上,我这篇文章的目的是要找到一个既有使用在场/缺席数据集的经验又有使用仅在场数据集的经验的人。我可能知道如何单独处理这些问题,但不是全部 我正在使用MaxEnt和BIOMOD下的一些算法对我的物种进行分布,我想在同一个图中绘制ROC/AUC,以前有人这样做过吗 据我所知,对于MaxEnt,ROC可以使用ROCR和vcd库绘制,这在飞利浦的MaxEnt教程中给出:计算MaxEnt和BIOMOD的ROC/AUC,r,R,非常感谢温彻斯特的帮助!我也看到了教程,这对我来说很有用!在过去的两天里,我研究了MaxEnt和BIOMOD的输出,我想我仍然对这两个版本中使用的术语感到有点困惑 从飞利浦的代码来看,他似乎使用了样本点和后搁浅点来计算ROC,而在BIOMOD中,只有存在点和伪缺失点的预测。这意味着,对于同一个数据集,我有相同数量的存在/样本数据,但两个模型的存在/背景数据不同。当我重新计算ROC时,它通常与模型本身报告的值不一致 我想我仍然没有得到模型评估的一些要点,关于评估什么以及如何生成评估数据集,即com
install.packages("ROCR", dependencies=TRUE)
install.packages("vcd", dependencies=TRUE)
library(ROCR)
library(vcd)
library(boot)
setwd("c:/maxent/tutorial/outputs")
presence <- read.csv("bradypus_variegatus_samplePredictions.csv")
background <- read.csv("bradypus_variegatus_backgroundPredictions.csv")
pp <- presence$Logistic.prediction # get the column of predictions
testpp <- pp[presence$Test.or.train=="test"] # select only test points
trainpp <- pp[presence$Test.or.train=="train"] # select only test points
bb <- background$logistic
combined <- c(testpp, bb) # combine into a single vector
label <- c(rep(1,length(testpp)),rep(0,length(bb))) # labels: 1=present, 0=random
pred <- prediction(combined, label) # labeled predictions
perf <- performance(pred, "tpr", "fpr") # True / false positives, for ROC curve
plot(perf, colorize=TRUE) # Show the ROC curve
performance(pred, "auc")@y.values[[1]] # Calculate the AUC
install.packages(“ROCR”,dependencies=TRUE)
install.packages(“vcd”,dependencies=TRUE)
图书馆(ROCR)
图书馆(vcd)
库(启动)
setwd(“c:/maxent/tutorial/outputs”)
存在我一直在使用。在同一个图形中绘制ROC和AUC时,它有很多很好的特性。此外,它非常有用。我仍然无法让您的代码正常工作,但下面是一个示例,其中包含来自软件包presence缺席的演示数据。我画了你的线条,然后为ROC加了一条粗线条。如果你给它贴标签,假阳性率在x轴上,假阴性率在y轴上,但是我认为这对于其他的线来说是不准确的。这就是你想做的吗
data(SIM3DATA)
plotroc <- roc.plot.calculate(SIM3DATA,which.model=2, xlab = NULL, ylab = NULL)
plot(plotroc$threshold, plotroc$sensitivity, type="l", col="blue ")
lines(plotroc$threshold, plotroc$specificity)
lines(plotroc$threshold, (plotroc$specificity+plotroc$sensitivity)/2, col="red")
lines(1 - plotroc$specificity, plotroc$sensitivity, lwd = 2, lty = 5)
数据(SIM3DATA)
plotroc理想情况下,如果您要比较方法,您可能应该根据MaxEnt和BIOMOD为数据集测试部分的每个位置(观察到的存在和不存在)生成预测。正如Christian提到的,pROC是一个很好的软件包,特别是用于比较ROC曲线。虽然我没有访问数据的权限,但我已经生成了一个虚拟数据集,该数据集应说明绘制两条roc曲线和计算AUC差异
library(pROC)
#Create dummy data set for test observations
obs<-rep(0:1, each=50)
pred1<-c(runif(50,min=0,max=0.8),runif(50,min=0.3,max=0.6))
pred2<-c(runif(50,min=0,max=0.6),runif(50,min=0.4,max=0.9))
roc1<-roc(obs~pred1) # Calculate ROC for each method
roc2<-roc(obs~pred2)
#Plot roc curves for each method
plot(roc1)
lines(roc2,col="red")
#Compare differences in area under ROC
roc.test(roc1,roc2,method="bootstrap",paired=TRUE)
库(pROC)
#为测试观察创建虚拟数据集
obsI已经使用Maxent好几次了,但是手头没有教程数据。发布一个工作示例,我将继续工作。这可能很简单,只需调整绘图比例并使用add=TRUE
谢谢Jim!我还注意到pROC包已经扩展到比较ROC曲线。从您的代码看来,我可以使用不同的事件数据集进行预测和ROC计算。正如我一直认为的那样,最好使用相同的数据集(MaxEnt只使用存在,而其他使用存在和不存在)。
library(pROC)
#Create dummy data set for test observations
obs<-rep(0:1, each=50)
pred1<-c(runif(50,min=0,max=0.8),runif(50,min=0.3,max=0.6))
pred2<-c(runif(50,min=0,max=0.6),runif(50,min=0.4,max=0.9))
roc1<-roc(obs~pred1) # Calculate ROC for each method
roc2<-roc(obs~pred2)
#Plot roc curves for each method
plot(roc1)
lines(roc2,col="red")
#Compare differences in area under ROC
roc.test(roc1,roc2,method="bootstrap",paired=TRUE)