NaN值,计算二项式分布的概率

问题描述 投票:0回答:1

我想计算整合以下功能

riskFunction <- function(theta, n, r, s)
    {
        risk <- 0
        for (j in 1:n)
            {
               risk <- risk + abs(theta - r * j - s) * dbinom(j, n, theta)
            }
        return(risk)
    }

在区间[0,1]上使用梯形方法。那是我的代码

trapeizodalMethod <- function(a, b, m, n, r, s)
{
  intValue <- 0
  h <- (b - a)/m
  for (i in 0:m-1)
  {
    intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
  }
  return(intValue)
}

调用梯形方法

trapeizodalMethod(a=0, b=1, m=100, n=100, r=0.01, s=0)

发生超过50个错误:在dbinom(j,100,theta)中:产生的NaN

我不知道可能出了什么问题。我将不胜感激。

r
1个回答
0
投票

[dbinom(x, size, prob, log = FALSE)prob[0, 1]之外时,会发出警告。在您的情况下,发生theta = -0.01是因为循环未按预期运行。

二进制运算符:的优先级高于二进制运算符-。因此,例如1:5-1被评估为(1:5) - 1,而不是1:(5 - 1)。您想要

trapeizodalMethod <- function(a, b, m, n, r, s)
{
  intValue <- 0
  h <- (b - a)/m
  for (i in 0:(m-1)) {
            # ^^^^^  
    intValue <- intValue + 0.5 * (riskFunction(a + i * h, n=n, r=r, s=s) + riskFunction(a + (i + 1) * h, n=n, r=r, s=s)) * h
  }
  return(intValue)
}
© www.soinside.com 2019 - 2024. All rights reserved.