首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算MaxEnt和BIOMOD的ROC/AUC

计算MaxEnt和BIOMOD的ROC/AUC
EN

Stack Overflow用户
提问于 2011-03-23 15:07:27
回答 3查看 3.9K关注 0票数 3

非常感谢温彻斯特的帮助!我也看了这个教程,它对我很有效!在过去的两天里,我研究了MaxEnt和bit的输出,我认为我仍然对这两者中使用的术语感到有点困惑。

从飞利浦的代码中,他似乎使用样本点和背景点来计算ROC,而在BIOMOD中,只有存在点和伪缺失点的预测。这意味着,对于相同的数据集,我具有相同数量的存在/样本数据,但两个模型分别具有不同的缺席/背景数据。当我重新计算ROC时,它通常与模型本身报告的值不一致。

我想我仍然没有得到模型评估的一些要点,关于评估的内容和如何生成评估数据集,即。融合矩阵,以及数据的哪一部分被选作评价。

感谢大家的回复!给您带来不便,我深表歉意。我在BIOMOD的帖子中添加了几句话,以使其可运行,至于MaxEnt,您可以使用教程数据。

实际上,我这篇文章的目的是找一个有经验的人来同时使用在线/缺勤数据集和仅有在线数据集。我可能知道如何单独处理它们,但不是全部。

我正在使用MaxEnt和一些算法在BIOMOD下计算我的物种的分布,我想在同一张图中绘制ROC/AUC,有人以前这么做过吗?

据我所知,对于MaxEnt,可以使用ROCR和vcd库来绘制ROC,这是飞利浦在MaxEnt教程中给出的:

代码语言:javascript
复制
   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

而对于BIOMOD,他们需要存在/缺席数据,所以我使用了1000个pseudo.absence点,并且没有背景。我发现了Thuiller自己给出的另一个脚本:

代码语言:javascript
复制
library(BIOMOD)
library(PresenceAbsence)

data(Sp.Env)

Initial.State(Response=Sp.Env[,12:13], Explanatory=Sp.Env[,4:10], 
IndependentResponse=NULL, IndependentExplanatory=NULL)

Models(GAM = TRUE, NbRunEval = 1, DataSplit = 80,
   Yweights=NULL, Roc=TRUE, Optimized.Threshold.Roc=TRUE, Kappa=F, TSS=F, KeepPredIndependent = FALSE, VarImport=0,
   NbRepPA=0, strategy="circles", coor=CoorXY, distance=2, nb.absences=1000)


load("pred/Pred_Sp277")

    data=cbind(Sp.Env[,1], Sp.Env[,13], Pred_Sp277[,3,1,1]/1000)

    plotroc <- roc.plot.calculate(data)


    plot(plotroc$threshold, plotroc$sensitivity, type="l", col="blue ")

    lines(plotroc$threshold, plotroc$specificity)
    lines(plotroc$threshold, (plotroc$specificity+plotroc$sensitivity)/2, col="red")

现在,问题是,我如何才能将它们全部绘制出来呢?我已经尝试过这两种方法,它们分别对这两种方法都有效,但都是独一无二的。也许我需要有人帮我了解中华民国的底层哲学。

提前谢谢~

马可

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-05 11:34:07

理想情况下,如果您要比较方法,您可能应该为数据集的测试部分的每个位置(观察到的存在和缺席)从MaxEnt和BIOMOD生成预测。正如Christian提到的,pROC是一个很好的软件包,特别是用来比较ROC曲线。虽然我不能访问数据,但我已经生成了一个虚拟数据集,它应该说明绘制两条roc曲线并计算AUC中的差异。

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2011-03-25 02:51:13

我仍然不能让你的代码工作,但这里有一个例子,其中包含PresenceAbsence包中的演示数据。我画了你的线条,然后为中华民国加了一条粗线。如果你给它打上标签,假阳性率在x轴上,假阴性率在y轴上,但我认为对于其他存在的线来说,这是不准确的。这就是你想做的吗?

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2011-03-23 23:42:05

我一直在用pROC package。当涉及到在同一图中绘制ROC和AUC时,它有很多很好的功能。此外,它是非常有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5401905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档