微分 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”值的 dnorm
到 pnorm
的积分几乎相等(小数点后 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
})
我需要证明概率密度函数是CDF的导数。任何发行版都可以,但我一直在尝试正常发行版。我已经达到:
set.seed(53)
b <- rnorm(500)
db <- density(b)
plot(db)
然后我可以使用pnorm(b)
计算累积概率,但是我不知道如何区分,因为D()
需要一个表达式而不是pnorm()
。请问有人可以帮忙吗?
这里是我展示了从 -Inf 到选定的“x”值的 dnorm
到 pnorm
的积分几乎相等(小数点后 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
})