V-fold cross-validation randomly splits the data into V groups of roughly equal size (called "folds"). A resample of the analysis data consisted of V-1 of the folds while the assessment set contains the final fold. In basic V-fold cross-validation (i.e. no repeats), the number of resamples is equal to V.

vfold_cv(data, v = 10, repeats = 1, strata = NULL, ...)

Arguments

data

A data frame.

v

The number of partitions of the data set.

repeats

The number of times to repeat the V-fold partitioning.

strata

A variable that is used to conduct stratified sampling to create the folds. This should be a single character value.

...

Not currently used.

Value

An tibble with classes `vfold_cv`, `rset`, `tbl_df`, `tbl`, and `data.frame`. The results include a column for the data split objects and one or more identification variables. For a single repeats, there will be one column called `id` that has a character string with the fold identifier. For repeats, `id` is the repeat number and an additional column called `id2` that contains the fold information (within repeat).

Details

The `strata` argument causes the random sampling to be conducted *within the stratification variable*. The can help ensure that the number of data points in the analysis data is equivalent to the proportions in the original data set.

When more than one repeat is requested, the basic V-fold cross-validation is conducted each time. For example, if three repeats are used with `v = 10`, there are a total of 30 splits which as three groups of 10 that are generated separately.

Examples

vfold_cv(mtcars, v = 10)
#> # 10-fold cross-validation #> # A tibble: 10 x 2 #> splits id #> <list> <chr> #> 1 <S3: rsplit> Fold01 #> 2 <S3: rsplit> Fold02 #> 3 <S3: rsplit> Fold03 #> 4 <S3: rsplit> Fold04 #> 5 <S3: rsplit> Fold05 #> 6 <S3: rsplit> Fold06 #> 7 <S3: rsplit> Fold07 #> 8 <S3: rsplit> Fold08 #> 9 <S3: rsplit> Fold09 #> 10 <S3: rsplit> Fold10
vfold_cv(mtcars, v = 10, repeats = 2)
#> # 10-fold cross-validation repeated 2 times #> # A tibble: 20 x 3 #> splits id id2 #> <list> <chr> <chr> #> 1 <S3: rsplit> Repeat1 Fold01 #> 2 <S3: rsplit> Repeat1 Fold02 #> 3 <S3: rsplit> Repeat1 Fold03 #> 4 <S3: rsplit> Repeat1 Fold04 #> 5 <S3: rsplit> Repeat1 Fold05 #> 6 <S3: rsplit> Repeat1 Fold06 #> 7 <S3: rsplit> Repeat1 Fold07 #> 8 <S3: rsplit> Repeat1 Fold08 #> 9 <S3: rsplit> Repeat1 Fold09 #> 10 <S3: rsplit> Repeat1 Fold10 #> 11 <S3: rsplit> Repeat2 Fold01 #> 12 <S3: rsplit> Repeat2 Fold02 #> 13 <S3: rsplit> Repeat2 Fold03 #> 14 <S3: rsplit> Repeat2 Fold04 #> 15 <S3: rsplit> Repeat2 Fold05 #> 16 <S3: rsplit> Repeat2 Fold06 #> 17 <S3: rsplit> Repeat2 Fold07 #> 18 <S3: rsplit> Repeat2 Fold08 #> 19 <S3: rsplit> Repeat2 Fold09 #> 20 <S3: rsplit> Repeat2 Fold10
library(purrr) iris2 <- iris[1:130, ] set.seed(13) folds1 <- vfold_cv(iris2, v = 5) map_dbl(folds1$splits, function(x) { dat <- as.data.frame(x)$Species mean(dat == "virginica") })
#> 1 2 3 4 5 #> 0.2211538 0.2692308 0.2307692 0.1826923 0.2500000
set.seed(13) folds2 <- vfold_cv(iris2, strata = "Species", v = 5) map_dbl(folds2$splits, function(x) { dat <- as.data.frame(x)$Species mean(dat == "virginica") })
#> 1 2 3 4 5 #> 0.2307692 0.2307692 0.2307692 0.2307692 0.2307692