我有一个包含3个预测变量(P1-P3)和1个响应变量作为结果(Response)的数据集。数据是从5个中心(200个ID)收集的。我将整个数据分为Train(70%)和Test(30%)。
样本数据:
ID Centers P1 P2 P3 Response
ID1 Center1 12 1 1 Class1
ID2 Center2 73 1 3 Class2
ID3 Center3 56 2 1 Class1
ID4 Center1 44 1 3 Class2
ID5 Center4 33 1 1 Class1
ID6 Center5 26 1 1 Class2
ID7 Center2 61 1 1 Class1
ID8 Center3 44 1 3 Class2
ID9 Center5 45 1 1 Class1
我想要对训练和测试数据集进行分区,并考虑结果变量的中心和类别,我可以写的是
library(caret)
set.seed(123)
train.index <- createDataPartition(data$Response, p = .7, list = FALSE)
train <- data[ train.index,]
test <- data[-train.index,]
我该如何编写代码,使分区从所有中心选择数据?
答案 0 :(得分:0)
也许这不是一个完美的答案,但是我遇到了类似的问题,我使用dplyr::group_by
和dplyr::sanple_n
进行管理。我需要按组进行均衡的训练和测试,并需要一个test
数据集,该数据集是我的数据的一个子集,该数据集不在train
数据集中。
例如,使用著名的mtcars
数据集:
library(dplyr)
mtcars %>% # in your case your data
group_by(cyl) %>% # in your case Centers
sample_n(2) # here the numbers of the sample for each group
它变成:
train <- data %>% group_by(Centers) %>% sample_n(28)
这意味着,如果您有200行和5个中心,并且每个中心有相同数量的个人(我们称其为“平衡”),则每个组有200/5 = 40,因此{{1} }最多不超过40个。
如果每个组的数据平衡,如果我的数学没错,则可以设置为28(200/100 * 70/5),以使每个组的覆盖率达到70%。
如果组不平衡,可以不重复,可以将参数放到最小的组。
另一方面,您必须设置重复次数。
要设置测试,如果要让不在培训中的人员参加,可以执行以下操作:
sample_n
希望有帮助。