Ваша ошибка исходит из этой строки:
R2<-(cor(wdbc$V7,fitted_value)^2)
Если вы посмотрите на data.frame, который вы читаете:
wdbc = read.delim("http://archive.ics.uci.edu/ml/machine-learning-databases/00243/yacht_hydrodynamics.data",sep="",header=FALSE)
dim(wdbc)
[1] 308 7
Итак, вычитая вектор из 30 значений из вектор 308 не работает
Не очень уверен, стоит ли делать 30-кратную перекрестную проверку или исключить 1, в приведенном выше коде один не указан, и вы должны установить k = nrow(wdbc)
для оставить-один-нет. Ниже предлагается 30-кратный вариант:
k=30
foldidx = split(sample(nrow(wdbc)),1:nrow(wdbc) %% k)
fitted_value <- vector("list",k)
for(i in 1:k){
test<-wdbc[foldidx[[i]],]
training<-wdbc[-foldidx[[i]],]
m=lad(V7 ~ ., data=training, method="BR")
co.data = coef(m)
x = cbind(1, as.matrix(test[, !(colnames(test) %in% "V7")]))
fitted_value[[i]] <- x %*% co.data
}
Последняя часть для сопоставления значений, вы отменяете список индексов, а также список сохраненных подогнанных значений:
obs = wdbc$V7[unlist(foldidx)]
test = unlist(fitted_value)
R2<-(cor(obs,test)^2)