R::dexp 的参数化

Parameterisation of R::dexp

我刚刚花了一段时间试图在我的代码中找到一个错误,该错误被证明是 R::dexp 函数的一个不寻常的(至少对我而言)参数化。例如:

cppFunction("
  double my_dexp(double x, double lambda, double is_log) {
    return R::dexp(x, lambda, is_log);
  }
")

> my_dexp(4.5, 2.5, FALSE)
[1] 0.06611956
> dexp(4.5, 2.5, FALSE)
[1] 3.251824e-05

正在寻找here我可以看到他们使用了定义:

double R::dexp(double x, double sl, int lg)

但我没能弄清楚 sl 代表什么。我不确定这是否在任何地方都有记录——所以希望这个 post 可以作为对像我这样使用过该功能的其他人的警告,以及是否有人可以帮助了解使用了哪些参数化以及为什么。

如果您查看 dexp

的函数定义
R> dexp
function (x, rate = 1, log = FALSE) 
.Call(C_dexp, x, 1/rate, log)

您会看到 dexp 使用参数 1/rate 调用 C 函数 C_dexp。这就是 R::dexp 的镜像。在 Rcp 中,他们总是使用与 R 本身在 C 级别上使用的相同的参数化,这可能与 R 级别不同。

也就是说

R> my_dexp(4.5, 1/2.5, FALSE) - dexp(4.5, 2.5, FALSE)
[1] 0

如果您查看 exponential function 上的维基百科页面,您会看到基于速率参数 lambda 的倒数的替代参数化。在此参数化中,参数 beta=1/lambda 充当生存参数的角色。所以系统的预期生存时间是beta个时间单位。