我是R的初学者。我想作图 “来自错误分类的总错误”与 使用下面的代码作为第一个功能的“ True”组的“ prior”。我的绘图的垂直轴应该是CV结果的总误差的平均值,但是我的结果是第99个“ 0.5”的数组,该数组导致一条水平线。
我想知道我是否错过了循环中的任何内容,或者实际上我没有很好地构建LDA和预测模型,所以我得到了这个结果。 “ prior.p1”是我为“ TRUE”组设置的优先级,而我的绘图目标是找到导致总误差最小的priority.p1。
任何建议将不胜感激。谢谢!
代码如下:
K=10
CV.error.f <- function(data=Liver.df,k=K,t1=0.01,t2=0.99,m=99,
Rounds=20) {
# k-fold CV; uses m=99 thresholds from t1 to t2
#s <- seq(from=0.01, to=0.99, by=0.01)
#w <-length(s)
Err.arr <- array(0,c(m,Rounds,K))
for (i in 1:Rounds) {
#cond <- (fold==j)
fold=sample(rep(1:K,length=nrow(data)))
for (j in 1:K) {
cond <- (fold==j)
s <- seq(from=0.01, to=0.99, by=0.01)
w <-length(s)
for (q in 1:w) {
lda.obj.test2 <- lda(Y ~., data = data[!cond,], prior=c(1-s[q],s[q]))
prior.p1 <-s
#cond <- (fold==j)
#lda.obj.test <- lda(Y ~., data = data[!cond,])
#lda.obj <- lda(Y ~.,
# data = data[!cond,])
#prior.p1 <-s
Pred<- predict(lda.obj.test2, newdata = data[cond,],
type = "response")
Truth=(data[cond,]$Y=="Severe") # Truth is logical
for (ind in 1:m) {
prediction <- (Pred$class=="Severe")
Err.arr[ind,i,j] <- mean((prediction==F)&(Truth==T)) +
mean((prediction==T)&(Truth==F)) # not using "table"
}
}
}
}
list(Err=Err.arr, Threshold= prior.p1)
}