如何在R中验证函数是否为PDF?

时间:2013-10-27 22:51:00

标签: r

我正在尝试验证函数是否为pdf,即它具有以下属性: 1)f(x)从-infinity到infinity的积分是1, 2)f(x)>所有x都为0。 另外,我也试图绘制一个cdf函数。

这是我在R脚本中的功能:

f <- function(x) ifelse(x>=-1 & x<=1, 1-abs(x), 0)
curve(f, -5, 5)

我已经尝试了各种方法来找到密度,但似乎无法编写一个脚本来告诉我1)概率X等于1,2)所有值都是> 1。 0.我尝试在此页面上编写一些“d”函数(http://ww2.coastal.edu/kingw/statistics/R-tutorials/prob.html),但无法正确格式化它们。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

除少数特殊情况外,您无法确切地验证函数是否为pdf。但是,如果你很清楚函数的支持是什么(即函数非零或几乎非零的值集合),你可以大致做到。

例如,取dnorm函数,即标准正常pdf。这在-40和+40之外实际上为零。您可以通过

创建一个带有10,000点的示例域
> xs <- seq(-40, 40, len=10000)

然后检查所有值是否大于或等于零就像

一样简单
> all(dnorm(xs) >= 0)
TRUE

要检查功能是否集成到(大约)1,您可以执行

> integral <- integrate(dnorm, lower=-40, upper=40)
> abs(integral$value - 1) < 1e-10
TRUE

所以你可以确信函数dnorm描述了范围内的概率分布(-40,40)。

要检查您在问题中定义的功能,显然范围是(-1,1),以便您可以

> xs <- seq(-1, 1, len=10000)
> all(f(xs) >= 0)
TRUE
> integral <- integrate(f, lower=-1, upper=1)
> abs(integral$value - 1) < 1e-10
TRUE

所以你的功能看起来可能是一个pdf。