【问题标题】:Parameterisation of R::dexpR::dexp 的参数化
【发布时间】:2019-05-15 17:28:52
【问题描述】:

我刚刚花了一段时间试图在我的代码中找到一个错误,结果证明这是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 代表什么。我不确定这是否记录在任何地方 - 所以希望这篇文章可以作为对像我这样使用过该功能的其他人的警告,以及是否有人可以帮助了解使用了什么参数化以及为什么。

【问题讨论】:

    标签: r rcpp


    【解决方案1】:

    如果您查看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 个时间单位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多