概率分布的导数w.r.t. R中的参数?

时间:2017-10-26 15:28:44

标签: r probability distribution derivative

我需要最常见的概率分布w.r.t的PDF / log PDF / CDF的(分析)导数。他们在R中的参数。有没有办法使用这些函数?

gamlss.dist package提供了许多概率分布(code for the normal distribution)的日志PDF的衍生物。 PDFs / CDF有什么类似的东西吗?

编辑:不可否认,PDF的衍生产品可以通过简单的链规则应用从日志PDF的衍生品中获得,但我认为类似的东西不可能CDF ......

1 个答案:

答案 0 :(得分:1)

OP提到一次计算衍生物是可以的,所以我会谈到这一点。我使用Maxima但是同样的事情可以用Sympy或其他计算机代数系统完成,甚至可能在R中;我没有调查。

在Maxima中,概率分布位于distrib附加软件包中,您可以通过load(distrib)加载该软件包。通过在交互式输入提示符处输入?? cdf_,可以找到所有cdf函数的文档。

Maxima对函数应用部分评估 - 如果某些变量没有定义值,那么结果是那些变量未定义。因此,您可以说diff(cdf_foo(x, a, b), a)获得衍生工具a,例如自由变量xab

您可以通过grind生成代码,该代码生成适合Maxima的输出,但其他语言将理解表达式。

有几种方法可以做到这一点。这只是第一次尝试。

(%i1) load (distrib) $
(%i2) fundef (cdf_weibull);
(%o2) cdf_weibull(x, a, b) := if maybe((a > 0) and (b > 0)) = false
 then error("cdf_weibull: parameters a and b must be greater than 0")
                  x a
 else (1 - exp(- (-) )) unit_step(x)
                  b
(%i3) assume (a > 0, b > 0);
(%o3)                           [a > 0, b > 0]
(%i4) diff (cdf_weibull (x, a, b), a);
                        a
                       x
                     - --
                        a                       a    a
                       b                log(b) x    x  log(x)
(%o4)            - %e     unit_step(x) (--------- - ---------)
                                            a           a
                                           b           b
(%i5) grind (%);
-%e^-(x^a/b^a)*unit_step(x)*((log(b)*x^a)/b^a-(x^a*log(x))/b^a)$
(%o5)                                done
(%i6) diff (cdf_weibull (x, a, b), b);
                                            a
                                           x
                                         - --
                                            a
                          (- a) - 1  a     b
(%o6)                - a b          x  %e     unit_step(x)
(%i7) grind (%);
-a*b^((-a)-1)*x^a*%e^-(x^a/b^a)*unit_step(x)$
(%o7)                                done