非常感谢温彻斯特的帮助!我也看到了教程,这对我有用!这两天我探索了MaxEnt和BIOMOD的输出,我想我还是对两者中使用的术语有点困惑。

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

我想我仍然没有得到模型评估的一些要点,关于评估的内容以及如何生成评估数据集,即。 comfusion matrix,以及选择哪一部分数据作为评估。

谢谢大家的热情回复!给您带来的不便,我深表歉意。 BIOMOD我在帖子后面多加了几句,让它可以运行,至于MaxEnt,你可以使用教程数据。

实际上,我的帖子的目的是找到有经验的人来处理存在/不存在数据集和仅存在数据集。我可能知道如何分别处理它们,但并不完全知道。

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

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

   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 自己给出的另一个脚本:
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")

现在,问题是,我怎么能完全绘制它们?我已经尝试了两者,它们分别适用于两者,但完全适用。也许我需要一些人来帮助我理解 ROC 的基本理念。

先谢谢了~

马可

最佳答案

理想情况下,如果您要比较方法,您可能应该从 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)

关于r - 计算 MaxEnt 和 BIOMOD 的 ROC/AUC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5401905/

10-12 20:47