R подмножество данных стратификации по группам;подмножество максимального количества наблюдений на группу, пока истинные и ложные логические значения сбалансированы: (ответ на python также принимается)
У меня есть набор данных из 10000 выборок из 600 идентификаторов ресторанов, некоторые из которых отсутствуют ипредвзятая логическая величина, которую мне нужно сбалансировать до 50:50, прежде чем запускать какие-либо модели.Чтобы воссоздать набор данных, вот код
x<-floor(runif(10000, 0, 600)) #make a dataset of 10000 samples from 600 restaurant IDs
x<-sort(x)
y<-sample(0:1,10000,prob=c(.16,.84),replace=TRUE) #make a biased boolean for those 10000 samples
df = data.frame(x,y) #dataframe has random number of restaurants and biased boolean
colnames(df) <- c("Restaurant_ID","Restaurant_Bool")
summary(df)
nrow(df)
z<-floor(runif(10, 0, 600)) #create a 10 restaurants by ID that are missing from the dataset
for (i in 10) {
df<-df[!(df$Restaurant_ID==z[i]),] #remove those restaurants by ID from the dataset
}
summary(df)
nrow(df)
Соотношение true: false для набора данных составляет около 84:16, но это число также варьируется в зависимости от идентификатора ресторана
Аналогично стратификациипо идентификатору ресторана, мне нужно ограничить количество истинных наблюдений равным количеству ложных наблюдений для идентификатора ресторана
Я понятия не имею, как это кодировать, и что-нибудь помогает
, поэтому дляНапример, для restaurant_ID 0 может быть 10 наблюдений, где 8 имеет значение true, а 2 - false.Для restaurant_ID 2 нет restaurant_ID 1.
, может быть 8 наблюдений, где 3 имеет значение true, а 5 - false.
X restaurant_ID Restaurant_Bool
1 0 1
2 0 1
3 0 1
4 0 0
5 0 1
6 0 1
7 0 1
8 0 0
9 0 1
10 0 1
11 2 0
12 2 0
13 2 1
14 2 0
15 2 1
16 2 0
17 2 1
18 2 0
...
Я хочу получить результат подмножества, в которомчисло Restaurant_Bool == 0 совпадает с номером Restaurant_Bool == 1 до тех пор, пока максимальное количество наблюдений подмножество основано на минимальном количестве логических наблюдений для каждого restaurant_ID
X restaurant_ID Restaurant_Bool
1 0 1
2 0 1
4 0 0
8 0 0
11 2 0
12 2 0
13 2 1
15 2 1
16 2 0
17 2 1
...
Это может быть первое подмножество, и другое подмножество может использовать другие наблюдения, чтобы случайным образом воссоздать другое подмножество с тем же правилом:
X restaurant_ID Restaurant_Bool
6 0 1
7 0 1
4 0 0
8 0 0
14 2 0
18 2 0
13 2 1
15 2 1
16 2 0
17 2 1
...
... и т. Д., Где несколько разных подмножеств из одного набора данныхможно создать, сохранив тот же номер выборки Restaurant_Bool == 1, что и Restaurant_Bool == 0 для restaurant_ID
В редком случае, когда Restaurant_Bool == 0 имеет больше наблюдений, чем Restaurant_Bool == 1, тогда используйте наименее представленноелогическое значение для воссоздания набора данных по идентификатору ресторана, где может быть указан весь идентификатор ресторанаудаляется из набора данных, если у true или false нет наблюдений
Причина, по которой я хочу разделить по restaurant_ID, заключается в том, что может быть некоторая внутренняя корреляция с остальными столбцами, которые мне нужно сохранить при создании моей модели
Ближайший ответ, который я нашел, это Данные панели подмножеств по группам , но не учитывается, что я хочу сохранить максимальное количество наблюдений на restaurant_ID до тех пор, пока true и false booleanсбалансированы