为什么我的最终函数没有';t集成到;1“;什么时候;“标准化”;在R?

为什么我的最终函数没有';t集成到;1“;什么时候;“标准化”;在R?,r,function,statistics,bayesian,integral,R,Function,Statistics,Bayesian,Integral,我有一个关于integrate()的编码问题。它产生于以下几个步骤: 首先,我有一个名为的初始函数,类似于第二次,我得到的积分,就像一样,并调用结果norm.consThird,我将Like除以norm.cons,并调用结果Like.2最后,我得到了的积分,比如.2。(下面提供了所有R代码。) 问题: 根据定义,我上面最后一步的答案应该是“1”。但是为什么我会得到下面的答案呢4.573253e-12 这是我的R代码: 你的norm.cons变量是0,这意味着你在Like.2中输入的任何内容都会导

我有一个关于
integrate()
的编码问题。它产生于以下几个步骤:

首先,我有一个名为
的初始函数,类似于
第二次,我得到
的积分,就像
一样,并调用结果
norm.cons
Third,我将
Like
除以
norm.cons
,并调用结果
Like.2
最后,我得到了
的积分,比如.2
。(下面提供了所有R代码。

问题: 根据定义,我上面最后一步的答案应该是“1”。但是为什么我会得到下面的答案呢<代码>4.573253e-12

这是我的R代码:
你的
norm.cons
变量是0,这意味着你在
Like.2
中输入的任何内容都会导致
NaN
(除以0)。比如说,

Like.2(3) # results in NaN
之所以
norm.cons
为0,是因为除了200-300左右的值外,几乎所有值都为0,数值积分太不精确,无法找到不为0的区域。例如,尝试:

Like(220) # 3.471218e-244
Like(300) # 2.661608e-296

# outside of that region:
Like(200) # 0
Like(320) # 0
要解决这个问题,请在两个积分周围设置更合理的边界(这不会影响计算,因为函数的质量几乎都不会超出该区域)。例如:

Like = function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 2), prod) # Initial function

norm.cons = integrate(Like, 220, 300)[[1]] # Integral of Initial Function

Like.2 = function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 2), prod) / norm.cons

integrate(Like.2, 100, 500)[[1]]

这将导致
0.9999309
,非常接近您的预期值1。这种差异是由于数值积分的不精确性以及算术下溢(有些值不是0,但对于R来说太小而无法表示)。如果你稍微玩弄一下积分的边界,你可以使它更接近1。

norm.cons是0。@Christoph,请看我编辑的问题?你的函数没有意义。看看
x@Christoph。这是否也显示错误:
曲线(例如,从=14到=17,col='red',lwd=3)
?您的“最大值”在1e-143!也许你应该解释一下你想要达到的目标,然后重新设计这个问题。
Like = function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 2), prod) # Initial function

norm.cons = integrate(Like, 220, 300)[[1]] # Integral of Initial Function

Like.2 = function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 2), prod) / norm.cons

integrate(Like.2, 100, 500)[[1]]