非常感谢温彻斯特的帮助!我也看到了教程,这对我有用!这两天我探索了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/