x <- runif(100)*10 #Random values between 0 and 10
y <- x+rnorm(100)*.1 #y~x+error
dataset <- data.frame(x,y) #Create data frame
plot(dataset$x,dataset$y) #Plot the data
#install.packages("cvTools")
library(cvTools) #run the above line if you don't have this library
## Warning: package 'cvTools' was built under R version 3.6.3
## Loading required package: lattice
## Loading required package: robustbase
## Warning: package 'robustbase' was built under R version 3.6.3

k <- 10 #the number of folds
folds <- cvFolds(NROW(dataset), K=k)
dataset$holdoutpred <- rep(0,nrow(dataset))
folds$subsets
## [,1]
## [1,] 92
## [2,] 20
## [3,] 51
## [4,] 56
## [5,] 60
## [6,] 41
## [7,] 88
## [8,] 97
## [9,] 55
## [10,] 90
## [11,] 48
## [12,] 38
## [13,] 19
## [14,] 73
## [15,] 79
## [16,] 28
## [17,] 80
## [18,] 64
## [19,] 27
## [20,] 66
## [21,] 5
## [22,] 53
## [23,] 61
## [24,] 95
## [25,] 10
## [26,] 68
## [27,] 67
## [28,] 8
## [29,] 46
## [30,] 94
## [31,] 91
## [32,] 36
## [33,] 32
## [34,] 25
## [35,] 62
## [36,] 49
## [37,] 76
## [38,] 50
## [39,] 31
## [40,] 85
## [41,] 93
## [42,] 6
## [43,] 65
## [44,] 43
## [45,] 70
## [46,] 3
## [47,] 7
## [48,] 24
## [49,] 11
## [50,] 35
## [51,] 17
## [52,] 52
## [53,] 84
## [54,] 89
## [55,] 75
## [56,] 100
## [57,] 99
## [58,] 42
## [59,] 87
## [60,] 18
## [61,] 71
## [62,] 78
## [63,] 96
## [64,] 9
## [65,] 40
## [66,] 63
## [67,] 47
## [68,] 81
## [69,] 22
## [70,] 58
## [71,] 30
## [72,] 83
## [73,] 21
## [74,] 34
## [75,] 14
## [76,] 77
## [77,] 33
## [78,] 12
## [79,] 23
## [80,] 72
## [81,] 37
## [82,] 15
## [83,] 57
## [84,] 4
## [85,] 1
## [86,] 26
## [87,] 82
## [88,] 45
## [89,] 16
## [90,] 69
## [91,] 2
## [92,] 59
## [93,] 29
## [94,] 86
## [95,] 54
## [96,] 39
## [97,] 13
## [98,] 98
## [99,] 74
## [100,] 44
for(i in 1:k){
train <- dataset[folds$subsets[folds$which != i], ] #Set the training set
validation <- dataset[folds$subsets[folds$which == i], ] #Set the validation set
newlm <- lm(y~x,data=train) #Get your new linear model (just fit on the train data)
newpred <- predict(newlm,newdata=validation) #Get the predicitons for the validation set (from the model just fit on the train data)
dataset[folds$subsets[folds$which == i], ]$holdoutpred <- newpred #Put the hold out prediction in the data set for later use
}
dataset$holdoutpred #do whatever you want with these predictions
## [1] 9.37986531 7.36958629 9.69448544 4.22282918 0.05901175 4.30528786
## [7] 6.68422065 2.92613704 0.04585086 5.47464515 6.03970705 6.05691205
## [13] 8.73850324 2.70684168 7.22927750 3.78620916 6.64264078 7.96807109
## [19] 6.97500636 4.23120144 8.34641193 2.93328476 0.43772642 7.43437657
## [25] 2.72031597 1.98981739 9.46507070 2.04977526 6.95599549 6.70293667
## [31] 6.67031230 6.02992284 8.43646256 7.30039605 1.96147693 1.69233812
## [37] 9.80668048 7.19814563 7.93433926 2.63533296 5.39874649 4.11989896
## [43] 4.35776385 3.70712106 5.47778907 0.18282877 7.22316918 4.50468218
## [49] 7.92036261 5.98776513 8.57660852 2.75501812 7.60048871 6.09359781
## [55] 2.54423359 3.53046748 6.57138728 0.02582453 9.41327017 4.63179711
## [61] 4.16995321 4.93777580 2.07986031 9.31644951 3.91177665 0.87261476
## [67] 1.27158797 8.28153490 7.91493349 4.08470572 9.47184370 8.02097417
## [73] 6.54635677 8.12829652 5.89334999 7.02792575 0.37558700 6.48234648
## [79] 5.46959253 2.18769147 3.29189877 5.84856610 5.91766083 7.09881709
## [85] 7.70316558 4.04706976 3.81888280 2.99950424 7.99883623 0.69128722
## [91] 0.15598950 3.15626127 4.31720197 8.05967820 3.37996239 7.18037026
## [97] 7.25473464 -0.01961764 3.25407554 6.51549495