看起来dnorm(x)和dmvnorm(x)(来自mvtnorm包v1.0.5)在x长度为1时生成相同的结果。但是,当使用积分函数时,dmvnorm(x)的结果似乎是太过分了。这是一个例子,我定义了两个被积函数:
integrand1 <- function(x)
{ pnorm((-2-sqrt(0.2)*x)/sqrt(0.8))*dmvnorm(x)}
integrand2 <- function(x)
{ pnorm((-2-sqrt(0.2)*x)/sqrt(0.8))*dnorm(x)}
在评估单个值时,integrand1(x)= integrand2(x)。
但是,沿这两个函数的集成会产生完全不同的结果:
integrate(integrand1,lower = -10,upper = 10)$value
[1] 7.567463e-236
integrate(integrand2,lower = -10,upper = 10)$value
[1] 0.02275013
曲线函数也观察到类似的现象。只是想知道它是否是一个错误或我错误地使用它。
答案 0 :(得分:2)
这不是一个错误。 dmvnorm
函数期望评估多重正态的密度分布函数,而dnorm
处理单个变量分布。我们来看一个例子:
dnorm(1:5)
#[1] 2.419707e-01 5.399097e-02 4.431848e-03 1.338302e-04 1.486720e-06
dmvnorm(1:5)
#[1] 1.151999e-14
第一个区别:dnorm
返回长度为5的向量,而dmvnorm
为单个值。我们还注意到:
prod(dnorm(1:5))
#[1] 1.151999e-14
dmvnorm
返回的值基本相同。简而言之,这些是不同的:
dnorm(1:5)
评估正态分布的密度为1,然后是2,3,4和5,平均值为0,标准差为1.所以我们有5个值。dmvnorm
用于处理多变量分发。我们现在询问哪个是5变量多重正交的密度(因为我们提供了1:5
,即长度为5的向量),其中第一个变量为1,第二个变量为2,依此类推。均值为全零,协方差矩阵为diag(5)
,即5维单位矩阵。两者都是默认值,因为我们没有指定它们。请参阅?dmvnorm
。在后一种情况下,五个变量是独立的,因此密度是在1,2,3,4和5处的5个独立(单变量)正态分布的乘积。
在处理单变量分布时使用dnorm
,否则使用dmvnorm
。