微分 R 中的 pnorm() 以表明连续变量的 PDF 是 CDF 的导数

Differentiating pnorm() in R to show that the PDF of a continuous variable is the derivative of the CDF

我需要证明概率密度函数是CDF的导数。任何发行版都可以,但我一直在尝试正常发行版。我已经达到:

set.seed(53)
b <- rnorm(500)
db <- density(b)
plot(db)

然后我可以使用pnorm(b)计算累积概率,但是我不知道如何区分,因为D()需要一个表达式而不是pnorm()。请问有人可以帮忙吗?

这里是我展示了从 -Inf 到选定的“x”值的 dnormpnorm 的积分几乎相等(小数点后 5 位或 7 位)的控制台抓取:微积分基本定理说,如果函数 f(x) 的积分是 g(x),则 f(x) 是 g(x) 的导数。 (或类似的词。)

> sapply(c(0,Inf), function(x) integrate(dnorm, lower=-Inf, upper=x))
             [,1]         [,2]        
value        0.5          1           
abs.error    4.680562e-05 9.361124e-05
subdivisions 3            3           
message      "OK"         "OK"        
call         expression   expression  
> sapply(c(0,Inf), function(x) integrate(dnorm, lower=-Inf, upper=x)$value)
[1] 0.5 1.0
> sapply(seq(-3,3, by=0.5), function(x) integrate(dnorm, lower=-Inf, upper=x)$value)
 [1] 0.001349899 0.006209665 0.022750132 0.066807201 0.158655254 0.308537539
 [7] 0.500000000 0.691462461 0.841344751 0.933192799 0.977249868 0.993790335
[13] 0.998650102
> pnorm(seq(-3,3, by=0.5)
+ )
 [1] 0.001349898 0.006209665 0.022750132 0.066807201 0.158655254 0.308537539
 [7] 0.500000000 0.691462461 0.841344746 0.933192799 0.977249868 0.993790335
[13] 0.998650102

我不确定 D() 是否“聪明”到足以进行符号区分,但我不应该如此怀疑。这段控制台交互是按照 ?deriv 帮助页面上的示例完成的:

> D(quote(pnorm(x)), "x")
dnorm(x)

此外...您可以通过 deriv:

获得一些东西
> norm.expr <- expression(pnorm(x))
> deriv(norm.expr, "x")
expression({
    .value <- pnorm(x)
    .grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
    .grad[, "x"] <- dnorm(x)
    attr(.value, "gradient") <- .grad
    .value
})