Как сделать выборку из данных заданных критериев, методов перестановки - PullRequest
3 голосов
/ 05 апреля 2019

Я выполняю перестановки своих данных, используя 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] & 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] & Control$Hospital != RControl[1:i-1,2]) , 1),])

}

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

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

...