1

背景:我正在模拟来自Cox 比例风险模型的数据。Bender et 提供了一种方法。人(2005 年)。在这篇文章中,它在 R 中得到了很好的解释和实现。Cox 模型的复杂性对这个问题并不重要。

问题:我需要评估 exp(-1 * X * beta)。由于我正在处理的问题的一些细节,X 或 beta 需要相对较大,介于 50 到 100 之间。我相信这会导致准确性问题。

X.stable = seq(from = 0, to = 1, by  = .1)
beta = 1
exp(-1 * X.stable * beta)

1.0000000 0.9048374 0.8187308 0.7408182 0.6703200 0.6065307 0.5488116 0.4965853 0.4493290 0.4065697 0.3678794

X.unstable = seq(from = 0, to = 100, by  = 5)
exp(-1 * X.unstable * beta)

1.000000E+00 6.737947E-03 4.539993E-05 3.059023E-07 2.061154E-09 1.388794E-11 9.357623E-14 6.305117E-16 [9] 24 8.756511e-27 5.900091e-29 3.975450e-31 2.678637e-33 [17] 1.804851e-35 1.216099e-37 8.194013e-40 5.521082e-42 3.720076e-44

我不相信最后的价值观是正确的。R 真的将 exp(x) 计算为 44 位数字吗?最终,我将这些值插入一个函数中,我想我得到了无意义的答案。我是对 R 缺乏信心还是我是正确的。如果这确实是一个问题,我能做些什么吗?

我考虑过只使用 e^x 的泰勒级数表示的前 2-3 项。我可以毫无问题地做到这一点。我不知道这是否能解决我的问题,因为我认为 R 在幕后做了类似的事情,

归结为我的问题,即使参数很大,我可以从 exp() 函数中获得精确的值吗?

4

0 回答 0