Credit = read.csv("https://www.uio.no/studier/emner/matnat/math/STK2100/v22/data/credit.csv") Credit = Credit[,-1] formel = "Balance~Rating+Age+Income" fit.lm = lm(formel,data=Credit) summary(fit.lm) set.seed(224) #In-sample prediction error y.pred = predict(fit.lm,Credit) RMSE.insamp = sqrt(mean((Credit$Balance-y.pred)^2)) #Splitting into train and test, repeating several times n = nrow(Credit) B = 20 RMSE.train.test = rep(NA,B) for(b in 1:B) { ind = sample(1:n,n/2,replace=FALSE) fit = lm(formel,data=Credit[ind,]) pred = predict(fit,Credit[-ind,]) RMSE.train.test[b] = sqrt(mean((Credit$Balance[-ind]-pred)^2)) } RMSE.train.test #too few data plot(rep(mean(RMSE.train.test),20),type = "l",ylim=c(mean(RMSE.train.test)-5,mean(RMSE.train.test)+5)) lines(rep(RMSE.insamp,B),col = 2) #LOO-CV n = nrow(Credit) y.cv = rep(NA,n) for(i in 1:n) { f = lm(formel,data=Credit[-i,]) y.cv[i] = predict(f,Credit[i,]) } RMSE.loo = sqrt(mean((Credit$Balance-y.cv)^2)) lines(rep(RMSE.loo,B),col = 3) #K-fold CV K = 10 nk = n/K RMSE.Kcv = rep(0,B) for(b in 1:B) { pred.K = rep(NA,n) ind = sample(1:n,n,replace=FALSE) #Permutation of data for(k in 1:K) { ind2 = ind[(k-1)*nk + 1:nk] f = lm(formel,data=Credit[-ind2,]) pred.K = predict(f,Credit[ind2,]) RMSE.Kcv[b] = RMSE.Kcv[b] + sum((Credit$Balance[ind2]-pred.K)^2)/n } } RMSE.Kcv = sqrt(RMSE.Kcv) lines(rep(mean(RMSE.Kcv),B),col = 4) RMSE = c(RMSE.insamp,RMSE.train.test,RMSE.loo,RMSE.Kcv) d = data.frame(RMSE=RMSE,method=c("a-Insamp",rep("b-train/test",B),"c-LOO",rep("d-10-fold",B))) boxplot(RMSE~method,data=d)