非常感谢温彻斯特的帮助!我也看了这个教程,它对我很有效!在过去的两天里,我研究了MaxEnt和bit的输出,我认为我仍然对这两者中使用的术语感到有点困惑。
从飞利浦的代码中,他似乎使用样本点和背景点来计算ROC,而在BIOMOD中,只有存在点和伪缺失点的预测。这意味着,对于相同的数据集,我具有相同数量的存在/样本数据,但两个模型分别具有不同的缺席/背景数据。当我重新计算ROC时,它通常与模型本身报告的值不一致。
我想我仍然没有得到模型评估的一些要点,关于评估的内容和如何生成评估数据集,即。融合矩阵,以及数据的哪一部分被选作评价。
感谢大家的回复!给您带来不便,我深表歉意。我在BIOMOD的帖子中添加了几句话,以使其可运行,至于MaxEnt,您可以使用教程数据。
实际上,我这篇文章的目的是找一个有经验的人来同时使用在线/缺勤数据集和仅有在线数据集。我可能知道如何单独处理它们,但不是全部。
我正在使用MaxEnt和一些算法在BIOMOD下计算我的物种的分布,我想在同一张图中绘制ROC/AUC,有人以前这么做过吗?
据我所知,对于MaxEnt,可以使用ROCR和vcd库来绘制ROC,这是飞利浦在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")现在,问题是,我如何才能将它们全部绘制出来呢?我已经尝试过这两种方法,它们分别对这两种方法都有效,但都是独一无二的。也许我需要有人帮我了解中华民国的底层哲学。
提前谢谢~
马可
发布于 2011-04-05 11:34:07
理想情况下,如果您要比较方法,您可能应该为数据集的测试部分的每个位置(观察到的存在和缺席)从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)发布于 2011-03-25 02:51:13
我仍然不能让你的代码工作,但这里有一个例子,其中包含PresenceAbsence包中的演示数据。我画了你的线条,然后为中华民国加了一条粗线。如果你给它打上标签,假阳性率在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)发布于 2011-03-23 23:42:05
我一直在用pROC package。当涉及到在同一图中绘制ROC和AUC时,它有很多很好的功能。此外,它是非常有用的。
https://stackoverflow.com/questions/5401905
复制相似问题