Выборка не полностью случайная, с граничными условиями - PullRequest
0 голосов
/ 10 июля 2019

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

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

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

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

Вот некоторый код, который генерирует целевой фрейм данных, который содержит месяц, когда начинается период наблюдения, соответствующее ожидаемое количество посещений врача (включая границу для минимального и максимального посещений) и соответствующий процент отпредметы, которые начинают приходить к врачу в течение этого месяца:

library(tidyverse)

months <- c("Nov", "Dec", "Jan", "Feb", "Mar", "Apr")
target.visits <- c(6,5,4,3,2,1)
percent <- c(0.8, 0.1, 0.05, 0.03, 0.01, 0.01)

df.target <- data.frame(month = months, target.visits = target.visits,
percent = percent) %>%
  mutate(max.visits = c(7,6,5,4,3,2),
         min.visits = c(5,4,3,2,1,1))

Это фрейм данных:

   month target.visits percent max.visits min.visits
   Nov             6    0.80          7          5
   Dec             5    0.10          6          4
   Jan             4    0.05          5          3
   Feb             3    0.03          4          2
   Mar             2    0.01          3          1
   Apr             1    0.01          2          1

Кроме того, я могу создать фрейм данных, который показывает фактического субъекта nс фактическим количеством посещений:

subj.n <- 1000
actual.visits = c(7,6,5,4,3,2,1)
actual.subject.perc = c(0.05,0.6,0.2,0.06,0.035, 0.035,0.02)

df.observed <- data.frame(actual.visits = actual.visits,
actual.subj.perc = actual.subject.perc, actual.subj.n = subj.n * actual.subject.perc)

Вот кадр данных с фактическими наблюдениями:

actual.visits actual.subj.perc actual.subj.n
             7            0.050            50
             6            0.600           600
             5            0.200           200
             4            0.060            60
             3            0.035            35
             2            0.035            35
             1            0.020            20

К сожалению, я не знаю, как их собрать.Я просто знаю, что если у меня есть, например, 60 пациентов, которые приходят к врачу 4 раза за период наблюдения, я бы хотел назначить каждому из них случайный начальный месяц.Однако, исходя из пограничных условий min.visits и max.visits, я знаю, что это может быть только месяц с декабря по февраль. Любые мысли очень ценятся.

...