Фармакокинетика в Excel - как учесть несколько приемов лекарств? - PullRequest
0 голосов
/ 05 октября 2019

Как бы болезненно это ни звучало, мне было поручено внедрить электронную таблицу для расчета времени всасывания и элиминации лекарств. Я на самом деле использую LibreOffice Calc, но решение, протестированное в Excel, также помогло бы мне (так как оно, вероятно, в любом случае будет переносимым).

Моя электронная таблица в настоящее время выглядит так:

enter image description here

Он должен учитывать несколько приемов дозы (т.е. произвольные новые записи в столбце D). Например, человек, который собирается использовать эту электронную таблицу, должен принимать новую дозу препарата 50 мг каждые 56 часов.

Чтобы написать рабочую формулу в столбце C, я выполнил много шагов:
(все примеры приведены для C3; для C2 вручную установлено значение 0)

  1. = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2 - это учитывает прием нескольких доз, но делаетне учитывать время поглощения. Вместо этого он возвращает 50 на C3 (через 8 часов) , 48.577 на C4 (16 часов) , (...) и 25.000 на C27 (192 часа или 1 период полураспада) и т. Д. Другими словами, концентрация лекарственного средства в крови немедленно возрастает. Вместо этого он должен расти линейно, согласно «Время до C max » на H2.

  2. = IFERROR( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ); 0 ) - это вычисляет всего поглощение со временем, оно линейно возрастает до достижения 50 на C16 (112 часов) и остается там впоследствии. Она отличается от предыдущей формулы, так как эта находит последнее значение, введенное в столбце D (с комбинацией INDEX и MATCH). Но из-за этого он больше не учитывает многократное потребление - только последнее.

  3. = IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 ) - это возвращает количество препарата, которое было поглощено за последние 8-часовой (1 ряд) период. То есть C3 3.704, C4 также 3.704, (...) C15 (104 часа) также 3.704, а C16 (112 часов) 1.852 и C17 и ниже равны 0 (при условии, что нет другого приема дозы, кроме как в D2). Он имеет тот же недостаток, что и предыдущая формула.

  4. = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B3 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) - ( ( INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) ) / $H$2; 1 ) ) ); 0 ) - этот равен был моим текущим состояниемформула. Он учитывает как линейное поглощение, так и логарифмическое исключение поглощенного количества.

  5. 2019-10-11 обновление: Я придумал улучшение производительности до шага3 выше, в виде: = IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 ).

    Обновленная, полная формула и текущая современная , как видно на скриншоте выше, то есть: = ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + IFERROR( ( ( IF( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) <= H$2; (B3 - B2); IF( ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ) < (B3 - B2); ( ( B3 - INDEX( $B$2:$B2; MATCH(1E+306; $D$2:$D2; 1) ) ) - H$2 ); 0 ) ) * INDEX( $D$2:$D2; MATCH(1E+306; $D$2:$D2; 1) ) ) / H$2 ); 0 ).

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

Кто-нибудь может помочь?


В качестве дополнительного контекста, лекарство в этом примере - ципионат тестостерона (TC), вводится как внутримышечная инъекция, и «отношение Т / ТС» относится к отношению тестостерона (Т), который присутствует на ТК, и я не знаю, действительно ли это соотношение равно 1. «Время к С max '- количество времени, необходимое для достижения наркотиком максимальной концентрации в крови.

Мне сказали, что абсорбция может быть не совсем линейной, и препарат можетне быть поглощенным на 100% при достижении C max , что означает, что часть его будет продолжать поглощаться после этого;тем не менее, я могу предположить, что он линейный и на 100% поглощается при C max , поскольку это достаточно хорошее приближение для целей человека, который собирается использовать электронную таблицу.

Я помещаю электронную таблицу на Google Drive , чтобы другим было проще помочь мне.

Спасибо.

1 Ответ

0 голосов
/ 12 октября 2019

Попробуйте это:

Прежде всего, поскольку нет способа объявить о возможной бесконечной функции, просто сделайте расчет для 1 мг, пока концентрация не погаснет.

Сохранение этогоодин в один столбец (я помещаю в столбец J), вам просто нужно сделать цикл.

Public Function Concent(Time_Origin As Long)
    Dim Cycle As Long
    Dim i As Long
    Dim j As Long
    Dim Items(10000) As Long
    Dim Intake(10000) As Long
    Dim Concent_1mg(2152) As Double

    j = 0
    Cycle = Time_Origin / 8 + 7

    For i = 6 To Cycle
        If Cells(i, 4) <> "" Then
            Items(j + 1) = i
            Intake(j + 1) = Cells(i, 4).Value2
            j = j + 1
        End If
    Next

    For i = 1 To 2147
        Concent_1mg(i) = Cells(i + 5, 10).Value2
    Next

    For i = 1 To j
        Concent = Concent + Intake(i) * Concent_1mg(Cycle - Items(i))
    Next i
End Function

После этого просто нужно вызвать эту функцию, которая будет рассчитывать концентрацию со временем, так какorigin.

Я загружаю один образец здесь

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...