Как выполнять выборку из данных, заданных критериями, методы перестановки

#r #permutation #sampling

#r #перестановка #выборка

Вопрос:

Я выполняю перестановки в своих данных с помощью sample() и циклов.

У меня есть данные по 400 случаям и 1000 контролям из 90 больниц. Я провел логистическую регрессию для этих данных. Теперь я хочу выполнить перестановки.

Мой план состоит в том, чтобы:

1) Случайным образом выберите «случай» из ЛЮБОЙ больницы

2) Случайным образом выберите «контроль» из ДРУГОЙ больницы

3) Повторяйте шаги 1 и 2, пока у меня не будет 90 разных случаев и 90 разных элементов управления. Цель состоит в том, чтобы в каждой больнице был один случай Или один контроль.

Пока это мой код:

 CaseControl<-as.factor(c(rep(1,400), rep(0,1000)))
Hospital<-c(rep(1:90, 15), rep(1:50))
DataFrame<-data.frame(CaseControl, Hospital)
Case<-data.frame(subset(DataFrame,CaseControl=="0"))
Control<-data.frame(subset(DataFrame,CaseControl=="1"))

PermutedDataset<-matrix(,180,2)
RCase<-matrix(,90,2)
RControl<-matrix(,90,2)

RCase[1,]<-as.matrix(Case[sample(nrow(Case),1),])
RControl[1,]<-as.matrix(Control[ sample( which( Control$Hospital != RCase[1,2] ) , 1 ) , ])

RCase[2,]<- as.matrix(Case[ sample( which( Case$Hospital != RCase[1,2] ) , 1),])
RControl[2,]<-as.matrix(Control[ sample(  which( Control$Hospital != RCase[2,2] amp; Control$Hospital != RControl[1,2] ) , 1),])

for (i in 3:90) {
RCase[i,]<- as.matrix(Case[ sample(  which( Case$Hospital != RCase[1:i-1,2])   , 1),])
RControl[i,]<-as.matrix(Control[ sample(  which( Control$Hospital != RCase[i,2] amp; Control$Hospital != RControl[1:i-1,2]) , 1),])

}
  

Мой код выполняется, однако я получаю повторяющиеся идентификаторы больницы из раздела цикла. Я указал на выборку только из данных, в которых идентификатор больницы не равен каким-либо предыдущим идентификаторам больницы, которые уже были выбраны.

Есть ли способ решить эту проблему?

Комментарии:

1. Не было бы sample(Control$Hospital, 90, replace = F) и sample(Case$Hospital, 90, replace = F) достаточно для случайного выбора 90 элементов управления и случаев?

2. Я думаю, что проблема в том, RCase[1:i-1, 2] попробуйте 1:10-1 в вашей консоли увидеть результат. Возможно, исправление этого путем добавления круглой скобки 1: (i-1) приведет к исчезновению дублирующихся идентификаторов.

3. @josemz Я думаю, вы правы, я пробовал использовать 1: (i-1) и seq (1, (i-1)), однако я все еще получаю дубликаты идентификаторов больниц на выходе. Есть ли другой способ, которым я мог бы написать эту часть кода?

4. @NM_ Проблема в том, что в выборке встречаются повторяющиеся регистры / элементы управления. Мне нужно установить ограничения таким образом, чтобы после выбора случая этот человек не мог быть выбран снова, равно как и идентификатор больницы. То же самое относится и к элементам управления.