为什么我的最终函数没有';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]]