【发布时间】:2020-02-03 07:43:00
【问题描述】:
虽然听起来很痛苦,但我的任务是实施一个电子表格来计算药物吸收和消除半衰期。我实际上使用 LibreOffice Calc,但在 Excel 中测试的解决方案也会对我有所帮助(因为它可能是可移植的,无论如何)。
我的电子表格目前如下所示:
它必须考虑多剂量摄入(即 D 列中的任意新条目)。例如,要使用此电子表格的人需要每 56 小时服用一次新的 50mg 剂量的药物。
为了在 C 列上编写工作公式,我遵循了许多步骤:
(所有示例均针对 C3;C2 手动设置为 0)
-
= ( C2 * 0,5 ^ ( (B3 - B2) / $H$3 ) ) + D2 * J$2- 这确实考虑了多剂量摄入,但不考虑吸收时间。相反,它在 C3 (8 小时后) 上返回50,在 C4 (16 小时) 上返回48.577,在 C27 上返回 (...) 和25.000(192小时,或1个半衰期)等。换句话说,血液中的药物浓度立即上升。相反,它应该线性上升,根据 H2 中的“达到 Cmax 的时间”。 -
= 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 )- 这会计算随着时间的推移总吸收,它会线性上升,直到在 C16 达到50(112 小时),然后保持在那里。它与前面的公式不同,因为这个公式查找在 D 列中输入的最后一个值(结合了 INDEX 和 MATCH)。但是,正因为如此,它不再占多个摄入量 - 只占最后一个。 -
= 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 之外没有其他剂量摄入)。和上一个公式有同样的缺点。 -
= ( 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 )- 这是是我目前最先进的公式。它说明了吸收量的线性吸收和对数消除。 -
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 )。
但是,这个公式仍然没有考虑到后续的剂量摄入,无论如何都不正确。 IE。如果我在单元格 D9 中输入新值 50,则单元格 C10 中的值应该会增加,但不会增加。
经过深思熟虑并寻求帮助elsewhere,我仍然不知道它是如何做到的。
谁能帮忙?
作为附加上下文,本例中的药物是环戊丙酸睾酮 (TC),作为肌肉注射给药,“T / TC 比率”是指 TC 上存在的睾酮 (T) 的比率,我真的不知道这个比率是否真的是 1。'Time to Cmax' 是药物在血液中达到最大浓度所需的时间。
有人告诉我,吸收可能不是完全线性的,当达到 Cmax 时,药物可能不会 100% 被吸收,这意味着之后会继续吸收一些药物;尽管如此,我可以假设它是线性的,并且在 Cmax 处被 100% 吸收,因为对于将要使用电子表格的人来说,这是一个足够好的近似值。
I'm putting the spreadsheet on Google Drive 方便其他人帮助我。
谢谢。
【问题讨论】:
-
不需要使用 1E+306。你的公式有问题 ` ( ( INDEX( $D$2:$D3; MATCH(1E+306; $D$2:$D3; 1) ) * J$2 ) * MIN( ( B2 - ( INDEX( $ B$2:$B3; MATCH(1E+306; $D$2:$D3; 1) ) ) ) / $H$2; 1 ) ) ` 将始终为
Intake x Ratio * 0。如果你能带上你需要使用的公式以及应该考虑哪些值,那会更有用。看来这个公式没有像你预期的那样工作 -
根据您的第一步,您希望时间随着“单元格 H2 中的时间 Cmax”线性上升,但该单元格不包括在该计算中......
-
@SolarMike 它是-我将其称为
$H$2。请仔细检查 -
@DavidGarcíaBodego 啊,为每个新剂量摄入创建一个新列。我考虑了这种可能性,但发现它不能很好地扩展。例如,如果我想使用该电子表格的变体来绘制另一种药物的浓度图表,并且在 6 个月内每 8 小时服用一次新剂量。使用起来太不实用了。
-
今天我请假。明天我会尝试看看根据您的原始描述生成代码。
标签: excel excel-formula libreoffice-calc scientific-software