2016-06-30 2 views
1

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

У меня есть аптечный данные, выглядит следующим образом:

x <- data.frame(
    patient_id = 1, 
    issue_date = as.Date("1990-01-01") + cumsum(c(0, 35, 30, 25, 30)), 
    no_tablets = 60 
) 

    patient_id issue_date no_tablets 
1   1 1990-01-01   60 
2   1 1990-02-05   60 
3   1 1990-03-07   60 
4   1 1990-04-01   60 
5   1 1990-05-01   60 

Я могу с курсом вычислить разницу в issue_date с, и посмотреть, если он равен no_tablets/2 (BiDaily дозы) пациент должен был принять. Но если пациент собирает свои лекарства раньше, он может ждать дольше в следующий раз, чем этот период, потому что у него есть запас лекарств.

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

Есть ли у вас какие-либо другие идеи, как я могу это сделать? Спасибо заранее!

ответ

0

В вашем примере, похоже, что таблеток этого пациента продолжает превышать количество дней между пополнениями. Без примера того, что вы хотите получить, мне кажется, может быть достаточно сценария ниже:

x <- data.frame(
    patient_id = c(rep(1, 5), rep(2, 5)), 
    issue_date = c(rep(as.Date("1990-01-01") + cumsum(c(0, 35, 30, 25, 30)), 2)), 
    no_tablets = c(rep(60, 5), rep(31, 5)) 
) 

y <- data.frame(
    patient_id = c(1, 2), 
    pills_per_day = c(2, 1) 
) 

z <- merge(x, y, by = "patient_id") 

library(data.table) 
z <- data.table(z) 
z[, days_excess := (no_tablets/pills_per_day) - ifelse(patient_id == shift(patient_id, 1, type = "lead"), 
                -as.integer(issue_date - shift(issue_date, 1, type="lead")), 
                NA)] 

print(z) 
    patient_id issue_date no_tablets pills_per_day days_excess 
1:   1 1990-01-01   60    2   -5 
2:   1 1990-02-05   60    2   0 
3:   1 1990-03-07   60    2   5 
4:   1 1990-04-01   60    2   0 
5:   1 1990-05-01   60    2   NA 
6:   2 1990-01-01   31    1   -4 
7:   2 1990-02-05   31    1   1 
8:   2 1990-03-07   31    1   6 
9:   2 1990-04-01   31    1   1 
10:   2 1990-05-01   31    1   NA 
+0

Большое спасибо за ваш ответ. В моем примере пациент должен принимать 2 таблетки в день, поэтому иногда количество дней превышает количество дневного питания планшета. – Jasper

+0

@ Джаспер Я отредактировал свой ответ, чтобы добавить дополнительного пациента и добавил разные количества таблеток в день для двух пациентов. Глядя на это снова, я также удалил функцию cumsum и просто посмотрел на ежемесячный избыток для каждого пополнения. – bshelt141

+0

Еще раз спасибо Брэндон. Проблема в том, что пациенту разрешено иметь дефицит таблеток, когда у него есть «запас», оставшийся от предыдущего избытка. Поэтому я думаю, что мне нужно что-то делать кумулятивно. – Jasper